Competenza · Sistemi per robot
Software per robot: lo strato che decide il movimento, il modulo di visione e quello di udito. Oggi abbiamo verifica offline e simulazione — non abbiamo nulla che comandi un motore reale.
Scriviamo cinematica, verifica della traiettoria e simulazione fisica riproducibile, con gate che bloccano quando manca la prova. Per la visione abbiamo un prototipo su camera fissa, non su robot. Per l’audio su robot non abbiamo nulla costruito, e la pagina lo dice invece di prendere in prestito prove dalla telefonia. Non lavoriamo con ROS.
Offerta, con condizioniHo eseguito oggi tutto ciò che si può eseguire. Lo strato di controllo esiste ed è serio, ma è offline: un modulo proprio di cinematica per un braccio a sei assi, che ha risolto 8.400 punti di traiettoria su 8.400, e un validatore di fisica su MuJoCo 3.10.0 con 34 test superati, più 14 test sulla parte di visualizzazione. Entrambi dichiarano nel proprio sorgente che non hanno trasporto verso l’hardware e non possono comandare un robot reale. In vista abbiamo un prototipo proprio — rilevamento e tracking di persone su telecamera IP fissa — con un solo commit e con la directory dei test vuota. Per l’audio sul robot abbiamo zero: tutto ciò che è su disco è voce da call center o libreria terza di telefonia, e l’unico lavoro acustico proprio si è concluso con un risultato negativo, scritto nell’applicazione. ROS: zero installato, zero scritto. La regola richiede almeno due implementazioni proprie per dire «abbiamo fatto»; sul controllo le ho, ma nessuna tocca l’hardware, e gli altri due strati del servizio sono sotto soglia. Quindi: offerta con condizioni, con i confini tracciati.
Il software di un robot ha tre strati che si rompono in modo diverso: ciò che vede e ascolta, ciò che decide, e ciò che invia ai motori. Sui primi due abbiamo lavori propri con test che vengono eseguiti. Sul terzo — il ponte verso l’hardware — non abbiamo nulla, e questo è il confine del servizio, non un dettaglio di implementazione. Due dei nostri codici lo dicono nel proprio header, in inglese, proprio per non poter essere letti male: il modulo di cinematica non ha trasporto verso l’hardware e non può comandare un robot reale.
Ciò che esiste sul lato del movimento è una verifica prima del movimento. Un modulo proprietario calcola cinematica diretta, jacobiano e cinematica inversa per un braccio a sei assi, con un margine imposto rispetto ai limiti di ciascun asse, ed è stato usato per verificare un’intera traiettoria: 8.400 punti richiesti, 8.400 risolti, con la velocità massima per asse rimasta sotto l’8% del limite di catalogo. Separatamente, un validatore fisico gira su MuJoCo 3.10.0 su processore, con passo di calcolo di un millisecondo, in sei scenari, ciascuno due volte, con lo stesso seme — e le due esecuzioni danno impronte identiche. Il determinismo non è un’affermazione, è un confronto di checksum.
Ciò che esiste sul lato della visione è meno, ed è onesto dirne quanto. Un prototipo proprio rileva e segue persone su flussi di telecamera IP, con un piccolo rilevatore della famiglia YOLO, un tracker multi-oggetto, stima della postura per cinque stati e controllo pan-tilt-zoom della telecamera. Ha un solo commit e la directory dei test vuota. E la differenza tra questo e la visione di un robot è reale, non formale: la telecamera su un robot si muove con esso, la scena è vicina, l’esposizione cambia a ogni passo, e il budget di latenza è diverso, perché l’immagine deve arrivare a una decisione di movimento, non a uno schermo. Non abbiamo telecamera di profondità, non abbiamo calibrazione della telecamera, non abbiamo odometria visiva.
Sul lato audio per robot non abbiamo nulla di costruito, e non prenderemo in prestito prove da altrove. Abbiamo lavori reali di voce per telefonia e per assistenti conversazionali, ma un microfono su un robot ha altri problemi: il rumore proprio della macchina, ventole e servomotori che partono esattamente quando il robot si muove, la direzione da cui arriva la voce, l’eco nella stanza e la distanza variabile. L’unico lavoro acustico proprio che abbiamo si è concluso con un risultato negativo, scritto nell’applicazione, e lo pubblichiamo come tale — perché un risultato negativo misurato è più utile di una promessa.