ARBot

Autonomní mobilní robot · projekt ARBot

Robot, který si cestu najde sám.

Dostane zeměpisné souřadnice cíle — a dojede tam po chodnících a pěšinách. Bez řidiče, bez dálkového ovládání, bez čáry na zemi. Tahle stránka ukazuje, co se mu při tom odehrává v hlavě.

Je to malý robot na kolech (rozchod 41 cm) s počítačem velikosti krabičky od cigaret. Všechno, o čem je řeč dál, počítá on sám, na místě, bez internetu a bez cloudu.

10×za sekundu se rozhodne, kam jet dál
2,7 msmu trvá poznat v obraze cestu
5 cmvelká je jedna buňka jeho mapy okolí
1 600+automatických testů hlídá, že se nic nerozbilo

O co jde

Čtyři otázky, které si robot musí pořád dokola odpovídat

Člověk projde po chodníku na konec ulice, aniž by o tom přemýšlel. Robot musí tu samou procházku rozložit na čtyři otázky — a zodpovědět je znovu a znovu, desetkrát za sekundu, celou dobu jízdy.

Jedno kolečko těch čtyř kroků trvá desetinu sekundy. Za tu dobu robot ujede pár centimetrů — a všechno se počítá znovu, protože svět už vypadá jinak.

Dvě kamery barva + hloubka, 30×/s Kompas a gyroskop 100×/s GPS 10×/s Otáčky kol ujetá dráha KROK 1 Co je kolem mě mapa nejbližších 6 metrů KROK 2 Kde jsem poloha a natočení KROK 3 Kudy dál trasa + objetí překážek KROK 4 Jak jet rychlost a zatáčení Motory mapa okolí poloha a směr dráha + rychlost otáčky kol robot se pohnul — za desetinu sekundy je svět kolem něj jinde, počítá se znovu
Řídicí smyčka. Vlevo to, co robot měří; vpravo to, co s tím udělá. Celé kolečko proběhne desetkrát za sekundu a nikdy se nezastaví — i stání je rozhodnutí, které se musí každou desetinu sekundy potvrdit.

Krok 1 · Co je kolem mě

Dvě oči: jedno měří vzdálenost, druhé rozumí tomu, co vidí

Robot má dvě kamery natočené mírně od sebe, aby dohromady pokryly široký výsek před ním. Každá z nich posílá třicetkrát za sekundu dva obrazy: normální barevnou fotku a takzvanou hloubkovou mapu — obrázek, ve kterém každý pixel neříká barvu, ale vzdálenost.

To jsou dvě různé informace a obě jsou potřeba. Hloubka pozná tvar: že je něco vyvýšené, že tam je schod, sloup, noha lavičky. Ale nepozná rozdíl mezi asfaltem a posekaným trávníkem — ten je z pohledu geometrie stejně rovný jako cesta. To je práce pro barvu.

Rozpoznat cestu v obraze

Původní řešení bylo jednoduché: naučit se, jakou barvu má cesta, a podle toho každý pixel zařadit. Funguje to překvapivě dobře — a přesně tak dlouho, dokud na cestu nedopadne stín, nespadne listí nebo nezačne pršet.

Dnes tu práci dělá neuronová síť. Je to stejný druh programu, jaký ve fotkách v telefonu pozná obličeje: dostala k vidění tisíce ručně obarvených snímků cest a naučila se z nich rozhodovat ne podle jednoho pixelu, ale podle celého okolí — podle tvaru, textury a souvislostí. Výsledek není seznam pixelů, ale souvislá plocha: tudy se dá jet.

Čtyři sloupce snímků: vstupní fotografie cesty, výstup barevného histogramu, výstup menší neuronové sítě a výstup větší neuronové sítě.
Co robot vidí a co si o tom myslí. Vlevo vstupní snímek, pak tři různé způsoby, jak v něm najít cestu — bílá je „projedu“, černá „neprojedu“. Barevný histogram (druhý sloupec) rozhoduje o každém pixelu zvlášť, a tak zrní a na okraji trávy se láme. Neuronové sítě (třetí a čtvrtý sloupec) dají souvislou plochu — a všimněte si třetího řádku: kolemjdoucího člověka poznají jako překážku, histogram ho z poloviny přehlédne.

Kolik to vydělá, je změřené na sadě padesáti snímků, u kterých člověk ručně vyznačil, kde cesta doopravdy je:

Barevný histogram78,0 % správně určených pixelů
Neuronová síť88,2 % — a hlavně 2,6× méně často si vymyslí cestu tam, kde žádná není
Větší síť96,7 %, ale spotřebuje tolik výkonu, že klesne počet snímků za sekundu

Ten druhý sloupec je důležitější než první. Když robot cestu přehlédne, jede pomaleji a opatrněji. Když si ji vymyslí, sjede do trávy.

Proč to stihne. Počítač v robotovi má vedle běžného procesoru i malý čip určený právě na neuronové sítě. Na procesoru by síť běžela 9,4 ms, na tomhle čipu 2,7 ms — a obě kamery dohromady si tak vezmou jen kousek výkonu, který zbývá na všechno ostatní. Bez toho by robot musel volit mezi „vidí dobře“ a „stíhá řídit“.
Snímek z kamery barva + hloubka Mračno bodů kde přesně v prostoru co leží a jak je to vysoké Neuronová síť kde v obraze je cesta a kde tráva nebo keř Mapa okolí robota pohled shora, buňky 5 × 5 cm volno překážka nevím volno je jen tam, kde se obě větve shodnou Plánování cesty krok 3 hloubka barva tvar terénu povrch
Ze dvou obrázků jedna mapa. Hloubka řekne, kde něco je; barva řekne, co to je. Robot je slévá do jedné mřížky kolem sebe — a buňku prohlásí za volnou, jen když se obě větve shodnou. Radši se jednou zbytečně zastaví, než aby jednou vjel do keře.

Krok 2 · Kde jsem

Žádný senzor neříká pravdu. Tak je robot poslouchá všechny najednou

Tohle je nejméně vidět a nejvíc na tom záleží. Kdyby si robot myslel, že je o metr vedle, je mu jeho pěkná mapa okolí k ničemu — naplánuje si krásnou cestu do trávy.

Problém je, že každý senzor lže jinak:

Řešení se jmenuje Kalmanův filtr a myšlenka za ním je jednoduchá: každý senzor musí kromě naměřené hodnoty říct i to, jak moc si je jistý. Filtr pak neposlouchá jeden, ani většinu — váží je. Přesný údaj má velkou váhu, nejistý malou. Výsledkem je jediný odhad polohy a natočení, ke kterému si robot navíc nese, jak moc mu věří.

Druhá polovina triku je, že filtr umí předpovídat. Ví, jaké dal motorům povely, takže si dopředu spočítá, kde by měl za desetinu sekundy být. Když pak přijde měření z GPS, neptá se „kde jsem?“, ale „jak moc se to liší od toho, co jsem čekal?“. Díky tomu přežije i chvíli, kdy GPS úplně vypadne — třeba pod mostem.

GPS — kde jsem na metr a půl, 10×/s Kompas — kam mířím ruší ho železo v robotu Gyroskop — jak se točím velmi přesně, 100×/s Kola — jak rychle jedu pokud neprokluzují Kalmanův filtr každý údaj přijde se svou nejistotou filtr je nezprůměruje — zváží a porovná je s tím, co sám čekal Jeden odhad poloha, natočení, rychlost + jak moc si tím robot věří předpověď na další desetinu sekundy silná šipka = filtr tomu senzoru v danou chvíli věří víc
Čtyři nespolehliví svědci, jeden rozsudek. Váhy nejsou pevné — mění se za jízdy. Když GPS ohlásí slabý signál, filtr jí sám od sebe přestane věřit a víc se opře o kola a gyroskop.

Robot, který si sám zkalibruje kompas

Kompas byl dlouho nejhorší článek. Měření ukázalo, že se plete o 24 stupňů, a co hůř, chyba se měnila podle toho, kterým směrem robot mířil — klasický projev železa a magnetického pole ve vlastní konstrukci. Filtr přitom kompasu věřil na desetinu stupně, protože senzor sám o sobě tvrdil, že je takhle přesný.

Kalibrace takového senzoru je jinak práce pro laboratoř. Tady ji dělá sám robot: spustí se mu mise magcal, obsluha ho vezme do rukou a pomalu s ním otáčí — a na stránce, kterou robot servíruje do telefonu, průběžně vidí, kterým směrem ho ještě musí natočit. Když má dost dat, robot si kalibraci spočítá a sám ji zapíše do paměti senzoru.

Výsledek změřený venku: chyba kurzu klesla z 24 ° na 3 ° a zkreslení od vlastního železa ze 27 ° na 3,6 °. Celé to trvá pár minut a jde to udělat v terénu, s telefonem v ruce, bez notebooku.

Krok 3 · Kudy dál

Plánuje se na dvou úrovních: mapa města a nejbližších šest metrů

Kdyby robot plánoval jenom podle mapy, vjel by do každého odstaveného kola. Kdyby plánoval jenom podle toho, co vidí, dojel by na první křižovatku a nevěděl by, kam zabočit. Takže dělá obojí zároveň — a každé jinak rychle.

Nahoře: trasa po mapě

Robot má v sobě mapu z OpenStreetMap — tu samou volně dostupnou mapu, ze které čerpá spousta navigací. Není to ale mapa pro auta: zajímají ho chodníky, pěšiny a parkové cesty. Z cíle si spočítá trasu po síti cest a z ní vytáhne jediné číslo, které zajímá spodní vrstvu: bod pár metrů před sebou, kterým se má trasa vydat. V projektu se mu říká „mrkev“ — robot za ní jde jako za mrkví na provázku.

Když se ukáže, že je cesta přehrazená, robot si tu hranu v mapě uzavře a trasa se přepočítá jinudy. Mapa tak není jen čtená, ale i opravovaná podle toho, co robot skutečně zažil.

Dole: mřížka kolem robota

Ta mapa okolí z kroku 1 je čtvercová síť buněk 5 × 5 cm, která robota obklopuje a jede s ním. V každé buňce není „ano/ne“, ale pravděpodobnost: čím víckrát tam kamera uvidí volno, tím je si robot jistější. Jeden šum v jednom snímku tak mapu nerozhodí, ale skutečná lavička, kterou vidí desetkrát po sobě, ano.

Nad touhle mřížkou běží hledání cesty (algoritmus A*, tentýž, který používají navigace i hry) — jenže nehledá jen nejkratší cestu, ale takovou, která si drží odstup od překážek. A na každý kousek dráhy se ještě spočítá, jak rychle se tudy smí: blíž u překážky pomaleji, do neprozkoumaného prostoru pomaleji, na volném prostranství naplno.

Snímek obrazovky aplikace: polární pohled kolem robota se zeleně a červeně obarvenými body a žlutou značkou robota uprostřed.
Co robot „vidí“ po zpracování. Žlutá značka dole uprostřed je robot, kroužky jsou vzdálenosti po metrech. Zelené body jsou sjízdné, červené překážka — tady zrovna šikmá hrana obrubníku asi metr a půl před robotem. Z takových bodů se skládá mřížka, nad kterou se plánuje.
Půdorysný pohled: šedá síť cest z mapy, fialová naplánovaná trasa, červená značka robota a žlutý bod cíle.
Tentýž robot o dvě úrovně výš. Šedě síť cest z OpenStreetMap, fialově trasa k cíli, červeně robot, žlutě „mrkev“, za kterou právě jde. Tenhle obrázek si robot kreslí sám a posílá ho do telefonu — není to nic, co by se vyrábělo dodatečně.
Historka o tom, proč se všechno měří. Robot se jednou při zkušební jízdě venku „plazil“ — jel pětinou rychlosti, kterou měl. Nikdo nevěděl proč; z chování to vypadalo na opatrnost kamer. Rozbor záznamu ukázal něco jiného: krok, který dráhu uhlazuje do plynulé křivky, zahazoval odstup od překážek, který mu plánovač pracně vykoupil. Robot tak jel 40 cm od věcí, které měl objet obloukem, a rychlostní pravidlo ho proto drželo dole. Po opravě: odstup 0,40 → 0,49 m, rychlost 0,05 → 0,49 m/s. Desetkrát rychleji, a bezpečněji zároveň.

Krok 4 · Jak jet

Mezi plánem a koly

Naplánovaná dráha je čára na papíře. Poslední vrstva z ní dělá otáčky dvou kol — a je to jediné místo, kde chyba znamená ránu do obrubníku, ne špatné číslo v logu.

Robot si dráhu nerozdělí jen na „jeď tam“. Plán obsahuje i brzdnou obálku: pro každý bod dráhy nejvyšší rychlost, se kterou tam smí přijet, aby ještě stihl zastavit nebo projet zatáčku. Při jízdě k tomu přidá předstih — nemíří na bod, na kterém stojí, ale na bod kousek před sebou, přesně jako člověk, který se při řízení nedívá na kapotu.

Tři nezávislé způsoby, jak robota zastavit

To „držené zastavení“ zní jako drobnost, ale je za ním zajímavá vlastnost: robot umí sám sebe zastavit, opravit se a jet dál. Když zamrzl obraz z jedné kamery, dohlížecí část programu si robota podržela, zbourala a znovu postavila spojení s kamerami a hold pustila. Od poruchy k plné funkci to trvalo 29 sekund. Předtím ta samá porucha znamenala mrtvou kameru na 22 minut, než si toho někdo všiml a restartoval program.

K čemu to celé je

Tři mise nad stejným základem

Všechno předchozí je motor. Mise je to, co mu řekne, kam. Jsou tři a liší se jen tím, odkud berou cíl — zbytek programu se pro ně nemění.

Bez mapy

Volná jízda

Robot si najde cestu před sebou a jede její pravou polovinou. Překážkám se vyhne podle toho, co vidí. Když cesta zmizí, drží směr. Hodí se na přesuny a na soutěžní homologaci.

Podle seznamu

Objezd míst

Textový soubor se souřadnicemi, řádek na místo. Robot je objede v pořadí a případně dokola. Každé místo si předem přichytí na nejbližší cestu — a když některé leží moc daleko od jakékoli cesty, řekne to hned na startu, ne až u něj.

Soutěžní

Doručení zásilky

Depo → nakládka → vykládka → zpět. Cíl si robot přečte z QR kódu, který mu obsluha ukáže před kamerou. Jede bez operátora; jediné lidské vstupy jsou ten papír s kódem a stop tlačítko.

Obsluha

Celý robot se ovládá z mobilu, přes prohlížeč

Na robotovi neběží žádná aplikace s okny — je to služba, která nastartuje sama s počítačem. Místo obrazovky servíruje obyčejnou webovou stránku: půdorys s trasou, živý snímek z kamery, stav senzorů, rychlost, poloha, zatížení procesoru. Stačí se připojit na stejnou síť a otevřít ji v telefonu. Nic se neinstaluje.

Jedna věc je na té stránce schválně nepohodlná. Misi jde vybrat jen ve chvíli, kdy je stisknuté nouzové zastavení — a robot se rozjede teprve tehdy, když ho člověk uvolní. Stránka tedy misi jen připraví; rozjet ji musí ruka u robota. Robot, který se rozjede sám od sebe, protože si někdo na druhém konci města ťukl do telefonu, je horší než robot, který stojí.

Snímek webové stránky robota v mobilu: přepínače pohledů, půdorys s cestou a plánem, seznam senzorů a tabulka stavu.
Stránka, kterou robot sám servíruje. Nahoře přepínače mezi půdorysem, kamerou a pohledem na cestu, pod tím živý obraz a všechna čísla, která se jinak dají číst jen z logu. Vpravo nahoře červené Zastavit robota. Když se na stránku nikdo nedívá, robot ji ani nekreslí — aby tím netrávil výkon potřebný na řízení.

Jak se to dá vůbec vyvíjet

Robot, který jezdí uvnitř počítače

Kdyby se každá změna musela zkoušet venku na trávě, byl by vývoj nekonečný. Proto má robot druhé tělo: úplně stejný program, ale místo kamer, GPS a motorů má simulaci.

Není to hra ani animace. Virtuální kamera bere mapu z OpenStreetMap a renderuje z ní to, co by robot ze své polohy skutečně viděl — barevný obraz i hloubku. Virtuální kola se otáčejí podle stejných povelů, které by dostal motorový regulátor. Řídicí program o tom vůbec neví: dostává data ze stejných rozhraní jako na železe.

Tím se ale otevře něco, co venku nikdy nejde: v simulaci se ví, kde robot doopravdy je. Můžete tedy změřit, o kolik se jeho vlastní odhad plete — a to je jediný způsob, jak zjistit, jestli byla změna ve fúzi zlepšení, nebo zhoršení. Navíc se dají poruchy zadat: prokluz kol, vychýlený kompas, chyba polohy o zvolený kus. Jde dokonce nechat kamery kreslit podle jiné mapy, než podle které robot jede — takže chyba je prokazatelně v datech, ne v pozorovateli.

Skutečný hardware kamery, GPS, kompas, motory jede se venku, po trávě Virtuální hardware obraz renderovaný z mapy, simulovaný pohyb kol přepínač jedna vrstva rozhraní Tentýž řídicí program vnímání · fúze · plánování řízení · mise ani řádka kódu se nemění Povely motorům Záznam celého běhu dá se pustit znovu u stolu tady se navíc ví, kde robot doopravdy je
Jeden šev, dvě těla. Výměna proběhne na jediné vrstvě rozhraní — nad ní je program v obou případech bit po bitu stejný. To je podmínka, aby výsledky ze simulace vůbec něco znamenaly.
Snímek obrazovky aplikace se dvěma obrazy z virtuálních kamer: zelená tráva, šedá cesta a vyznačená hranice mezi nimi.
Pohled virtuální kamery. Zjednodušený svět — šedá cesta, zelená tráva — ale vyrobený z opravdové mapy a z opravdové polohy robota, a poslaný do programu úplně stejnou cestou jako obraz ze skutečné kamery. Fialová linka je nalezená hrana cesty.

A všechno se nahrává

Každá jízda se zapisuje: všechny zprávy ze všech senzorů, všechna rozhodnutí, s časovými razítky. Když se venku stane něco divného, nemusí se to zkoušet znovu — záznam se u stolu přehraje a je vidět přesně to, co v tu chvíli viděl robot. Na rozbor záznamů existuje zvláštní nástroj, který umí odpovědět na otázky typu „jak často a proč robot zpomalil“ nebo „o kolik se kompas pletl proti GPS“.

Nad tím vším hlídá přes 1 600 automatických testů, které proběhnou při každé změně. Většina z nich nekontroluje, jestli program spadne — ale jestli pořád vrací tatáž čísla jako dřív.

Pod kapotou

Co v tom vlastně běží

JazykC# / .NET 10 — jeden zdrojový kód pro vývojový počítač s Windows i pro robota s Linuxem na ARM
Počítač robotaOrange Pi 5 Ultra: osm jader a zvláštní čip na neuronové sítě, spotřeba řádu wattů
Kamerydvě hloubkové kamery Intel RealSense, k tomu sledovací kamera pro odhad vlastního pohybu
Ostatní senzoryinerciální jednotka VN100 (kompas + gyroskop + akcelerometr), GPS u-blox, motorový regulátor Roboteq
MapyOpenStreetMap, i offline — robot nepotřebuje internet
Vývojová aplikacedesktopová aplikace s dokovatelnými panely: mapa, obraz z kamer, telemetrie, přehrávání záznamů
Fotografie jednodeskového počítače Orange Pi 5 Ultra s měděným chladičem a ventilátorem.
Celý mozek. Deska o velikosti dlaně pod měděným chladičem. Běží na ní vnímání, fúze, plánování, řízení, webová stránka i neuronová síť — a ve chvílích, kdy robot jen čeká na povel, zatěžuje procesor asi 6 %.

Upřímně

Kde to dnes je

Jádro běží. Robot venku jezdí, vidí, lokalizuje se, kreslí si mapu okolí, drží se cesty a servíruje svou stránku do telefonu; služba startuje sama, přežije SIGTERM i výpadek kamery. Kompas je zkalibrovaný a ověřený třemi nezávislými měřeními.

Část toho, co je na téhle stránce popsaná, je ale zatím ověřená hlavně v simulaci a měřením nad záznamy — celý průchod soutěžní misí na skutečném robotu teprve čeká. Je to průběžně vedený projekt, ne hotový produkt; ke každému tvrzení výš existuje v repozitáři měření nebo test, a tam, kde měření chybí, je to napsané.