Ekspertyza · Systemy dla robotów
Software dla robotów: warstwa, która decyduje o ruchu, moduł widzenia i moduł słuchu. Dziś mamy weryfikację offline i symulację — nie mamy niczego, co steruje realnym silnikiem.
Piszemy kinematykę, weryfikację trajektorii i odtwarzalną symulację fizyczną, z bramkami, które blokują, gdy brakuje dowodu. Dla wizji mamy prototyp na stałej kamerze, nie na robocie. Dla audio na robocie nie mamy nic zbudowanego i strona mówi to zamiast pożyczać dowody z telefonii. Nie pracujemy z ROS.
Oferta, z warunkamiUruchomiłem dziś wszystko, co da się uruchomić. Warstwa sterowania istnieje i jest solidna, ale jest offline: własny moduł kinematyki dla ramienia z sześcioma osiami, który rozwiązał 8.400 z 8.400 punktów trajektorii, oraz walidator fizyki na MuJoCo 3.10.0 z 34 zaliczonymi testami, plus 14 testów po stronie wizualizacji. Oba deklarują w swoim kodzie źródłowym, że nie ma transportu do hardware i nie mogą komendować rzeczywistego robota. Na widoku mamy własny prototyp — detekcję i śledzenie osób na stałej kamerze IP — z jednym commitem i pustym katalogiem testów. W audio na robocie mamy zero: wszystko, co jest na dysku, to głos call-center albo biblioteka zewnętrzna telefonii, a jedyne własne opracowanie akustyczne zakończyło się wynikiem negatywnym, zapisanym w aplikacji. ROS: zainstalowane zero, napisane zero. Reguła wymaga minimum dwóch własnych implementacji, żeby powiedzieć „zrobione”; w sterowaniu je mam, ale żadna nie sięga hardware, a pozostałe dwie warstwy usługi są poniżej progu. Więc: oferta z warunkami, z narysowanymi granicami.
Oprogramowanie robota ma trzy warstwy, które psują się różnie: to, co widzi i słyszy, to, co decyduje, i to, co wysyła do silników. Na pierwszych dwóch mamy własne prace z testami, które się uruchamiają. Na trzeciej — moście do hardware — nie mamy nic, i to jest granica usługi, a nie detal implementacji. Dwa z naszych kodów mówią to we własnym nagłówku, po angielsku, dokładnie po to, by nie dało się ich odczytać błędnie: moduł kinematyki nie ma transportu do hardware i nie może sterować prawdziwym robotem.
To, co istnieje po stronie ruchu, to weryfikacja przed ruchem. Własny moduł liczy kinematykę prostą, Jacobiego i kinematykę odwrotną dla ramienia sześcioosiowego, z wymuszoną rezerwą względem limitów każdej osi, i został użyty do sprawdzenia całej trajektorii: 8.400 żądanych punktów, 8.400 rozwiązanych, przy czym maksymalna prędkość na osi pozostała poniżej 8% limitu katalogowego. Osobno walidator fizyki działa na MuJoCo 3.10.0 na procesorze, z krokiem obliczeń jednej milisekundy, w sześciu scenariuszach, każdy po dwa razy, z tym samym ziarnem — i dwa uruchomienia dają identyczne odciski. Determinizm nie jest stwierdzeniem, tylko porównaniem sum kontrolnych.
To, co istnieje po stronie wizyjnej, jest mniej, i uczciwie jest powiedzieć ile. Własny prototyp wykrywa i śledzi osoby na strumieniach z kamer IP, z małym detektorem z rodziny YOLO, śledzeniem wielu obiektów, estymacją postawy dla pięciu stanów oraz sterowaniem obrotem, pochyleniem i zoomem kamery. Ma jeden commit i pusty katalog testów. A różnica między tym a widzeniem robota jest rzeczywista, nie formalna: kamera na robocie porusza się razem z nim, scena jest blisko, ekspozycja zmienia się przy każdym kroku, a budżet opóźnienia jest inny, bo obraz musi trafić do decyzji o ruchu, a nie na ekran. Nie mamy kamery głębi, nie mamy kalibracji kamery, nie mamy wizualnej odometrii.
Po stronie audio dla robotów nie mamy niczego zbudowanego i nie będziemy pożyczać dowodów skądinąd. Mamy realne prace głosowe dla telefonii i asystentów konwersacyjnych, ale mikrofon na robocie ma inne problemy: własny hałas maszyny, wentylatory i serwomotory, które uruchamiają się dokładnie wtedy, gdy robot się porusza, kierunek, z którego dochodzi głos, echo w pomieszczeniu i zmienną odległość. Jedyna własna praca akustyczna, którą mamy, zakończyła się wynikiem negatywnym, zapisanym w aplikacji, i publikujemy go w tej postaci — bo zmierzony wynik negatywny jest bardziej użyteczny niż obietnica.