czech english

ELROB 2024

Nth European Land Robot Trial (oslí blog)

Jak vypadá ELROB skoro po dvaceti letech existence? Nevím, ale bude to až za necelé dva roky, tak by to mohl být takový milník naše mobilní roboty a algoritmy oprášit a spojit v novém. Blog update: 11/03/2024 — Půlhodina (zbývá 105 dní)

ELROB 2024 - European Land Robot Trial, 12th European Land Robot Trial, 9th Military ELROB24 - 28 June 2024, Trier, Germany
This is the first official announcement for the twelfth European Land Robot Trial 2024! The military ELROB, which takes place for the ninth time now, enables you to get a glance at the latest R&D in the area of unmanned outdoor/off-road ground systems. The scenarios have been developed in closest co-operation with the military users and reflect the up-to-date requirements of the forces. This event offers the fantastic opportunity to mingle with the international experts from the user community, the industry and the R&D sector. ELROB is a strictly non-profit activity! The event is organized and carried out only by non-profit organisations. All participation fees are completely redistributed among the participants to cover travel expenses.

Google translate říká:

ELROB 2024 – European Land Robot Trial, 12. European Land Robot Trial, 9. Military ELROB24 – 28. června 2024, Trier, Německo Toto je první oficiální oznámení pro dvanáctý European Land Robot Trial 2024! Vojenský ELROB, který se koná již podeváté, vám umožní nahlédnout do nejnovějšího výzkumu a vývoje v oblasti bezpilotních venkovních/terénních pozemních systémů. Scénáře byly vypracovány v nejužší spolupráci s vojenskými uživateli a odrážejí aktuální požadavky sil. Tato událost nabízí fantastickou příležitost setkat se s mezinárodními odborníky z komunity uživatelů, průmyslu a sektoru výzkumu a vývoje. ELROB je přísně nezisková aktivita! Akci organizují a provádějí pouze neziskové organizace. Veškeré účastnické poplatky jsou zcela přerozděleny mezi účastníky na pokrytí cestovních nákladů.

Obsah



Blog


22. prosince 2022 - O co jde? (zbývá 550 dní) [MD]

Jirka mne na včerejším pravidelném callu přesvědčil, že by mělo smysl se účastnit „soutěže” ELROB. Naposledy jsem tam byl v roce 2006 jako „novinář”, ale už tehdy mne zarazil rozdíl mezi americkou a evropskou verzí „soutěže”: zatímco americká DARPA vám za vítězství nabídne milión dolarů nebo i více, v evropské dostanete (snad) diplom a ještě si zaplatíte registrační poplatek 500 EUR … ale třeba už to tak není — časem prověříme.
Tak proč se tím vůbec zabývat? ELROB nabízí mnoho srovnávacích kategorií, z nichž se Jirkovi zalíbila mula. Ve zkratce nejprve jede robot za vámi do cílové pozice a následně ho přepnete do autonomního módu. Robot se sám vrátí na start po stejné trase a pak pendluje start-cíl-start-cíl-… a když to začne být přiliš nuda, tak vám tam organizátoři přidají překážku.
Podobná úloha může být i použitelná v praxi a je jedno, jestli robot veze cihlu (md) nebo rohlíky (zw). Prostě tím vytvoříte takový dočasný transportní kanál.
Kdybychom vyráželi dnes, tak Jirka má „na skladě” Freyju, Jakub kloubáky K2 a K3, a vlastně by asi šly použít všechny Robotour roboti. No a je to takový milník, resp. zatím vzdálený deadline, tak uvidíme …

5. října 2023 - Čas začít (zbývá 263 dní) [JI]

Freyja 2.0 je až na drobné detaily hotová. PatAMat pluje. Nastal čas psát software a jezdit!
Freyja má v tomto trochu náskok, protože psát software jsem začal už v zimě, kdy jsme o soutěži začali mluvit. Testoval jsem na Deedee, což je takový menší domácí robot, kterého jsem už i při SubT používal jako "technologický demonstrátor." Deedee mě následovala po bytě a pak se vracela na start a jezdila tam a zpátky už na jaře. Mezitím jsem dopřestavěl Freyju a začal software "portovat". Tento týden pak poprvé jezdila tam a zpátky i Freyja. Na 34 metrech vedle domu najezdila za 25 minut 830 metrů. Tam, zpátky, tam, zpátky, tam … prostě strhující zážitek.
Co jsem se z těchto pokusů naučil?
  • RealSense tracking camera, kterou používá doma Deedee, je mocná zbraň. Robot vždycky ví, kde je. Freyja venku takovou jistotu s takovou přesností nemá. Je potřeba dál pracovat na lokalizaci a fůzi dat z různých senzorů. Relativní lokalizace vůči vzorové cestě může stačit.
  • "Následuj člověka" a "vyhýbej se překážkám" jsou úkoly, které se navzájem vylučují. Člověk je taky překážka! Tady řešení zatím nevidím. Zkoušel jsem sledovanou osobu vymazávat z lokální mapy, ale jednak detekce vůdčí osoby není na tohle v tuto chvíli dostatečně spolehlivá a přesná a jednak do mě pak robot ochotně nabourá. Což se mi moc nelíbí. Související potíž je, když z mapy odmaže nejen mě, ale i zeď vedle mě, a nabourá do ní.
  • Když robot detekuje překážky (zatím) jen lidarem a z lidaru přestanou chodit data, je to špatné. Kdo by to byl řekl?

18. října 2023 - Achilova pata (zbývá 250 dní) [JI]

Tak dlouho se s robotem jezdí, až se kolo utrhne. Kdo chce psa bít, hůl si vždycky najde. Těmito a dalšími úslovími neohlašuje pan Jiří příjezd tety Kateřiny, ale rozbitého robota. I nějaké to "já jsem ti to říkal" už si vyslechl.
O co jde? Freyja je robotická konstrukce typu Na Programátora Dobré. A občas je to znát. Mechanické uchycení v místě přenosu síly z motoru na kola je výzva. Na K2, sestřence (nebo bratranci?) na SubT, drží kola ve vysoustružených železných blocích. Robík (nebo to byl jeho následovník?) má ve stejném místě vyvrtaný a pečlivě seříznutý železný blok s velmi podobným výsledkem. Freyje drží kola 3D tisk. Úplně to slyším: "Cožééé?" Na svoji obhajobu: "Ja vím." Jednou se budu muset naučit, jak se v místním dialektu, Züritüütsch, řekne: "Potřeboval bych vysoustružit taký onaký bazmek".
Upřímně řečeno, po letošních zátěžových testech, kdy jsem nechal Freyju skákat přes kmeny, jsem už čekal, že to bude držet. Nebylo tomu tak. Při pokusu o smykovou otočku téměř na místě - další "Já jsem ti to říkal!" - to luplo, kolo povolilo a ukroutil se kabel. "Naštěstí" vždycky - no jo, i předchozí zkušenost by byla - nejdřív povolí tenký kabel k hallovým senzorům, ODrive se lekne a zastaví.
Tým expertů povolaný na místo robotického neštěstí, tj. já, pak dospěl k závěru, že konstrukční tým, tj. já, mohl odvést lepší práci. Vytištěný díl je sice z karbonem posíleného PLA, což pomáhá, ale nechal jsem nastavený nízký infill a díl byl spíš prázdný než ne. Navíc tam pro verzi 2.0 zůstala z verze 1.0 díra na šroub, která už není potřeba. Podél ní to prasklo.
Züritüütsch pořád neovládám, takže Freyja obdržela tištěný díl verze 2.1. Bez nadbytečné díry na šroub, s větším infillem a s připevněným kusem hliníku v místě, kde to povolilo. Pro jistotu na všech čtyřech kolech. Freyja tak opět jezdí. Snad teď vydrží více.

3. prosince 2023 - Takhle ne? (zbývá 203 dní) [JI]

Takhle to snad na ELROBu v červnu vypadat nebude:
Anebo ano?
  • Voda ve vzduchu … pršet klidně může.
  • Sníh na zemi … to sice ne, ale bláto se může nabalovat dost podobně.
  • Vizuálně chudé prostředí … písečná plocha, betonová plocha, posekaná plocha, nedefinovaná cesta, to všechno nejspíš bude.
Takže co jsme se s Freyjou naučili?
  • Sníh ve vzduchu pro detekci překážek lidarem nevadí.
  • Nepořádek na kolech do nějaké míry nevadí, ale s bahnem to může být i horší.
  • Když už si Freyja sedne na břicho, nic ji nezachrání.
  • V robotovi zůstalo sucho.
  • Bacha na joystick padající při přenášení robota do závěje. Špatně se pak hledá.

5. ledna 2024 - Neinvertibilní chování (zbývá 171 dní) [JI]

Otázka: Jaký mám poslat Freyje řídící signál, aby zatáčela rychlostí 70 stupňů za sekundu? Odpověď: Freyja a zatáčet? To jako vážně?
Kontrolovaně zatočit smykem řízeného robota není nic snadného. Freyja není výjimkou. V roce 2005 jsme na tohle téma na jedné konferenci publikovali článek o řízení pásového robota Ester pomocí neuronových sítí.
Myšlenka byla vcelku přímočará:
  • Budeme chvíli "náhodně" jezdit na joystick.
  • Z logu nasbíráme data <řízení, chování>. Aneb "když udělám X, stane se Y".
  • Data prohodím na <chování, řízení>. Aneb "aby se stalo Y, musím udělat X".
  • Natrénuji neuronovou síť modelující chování -> řízení.
  • Hotovo. Když potřebuji zatočit, zeptám se neuronové sítě, jaký mám poslat řídící signál.
Jenže ono to takhle jednoduše nejde!
Pojďme si to nasimulovat na zjednodušeném, ale dostatečně realistickém problému. Nechť je náš systém lineární s nepřesnostmi / se šumem.
Nejdříve si vygenerujeme vzorová data:
import numpy

N = 1000000
numpy.random.seed(42)
control = numpy.random.normal(scale=6, size=(N,))
behavior = 0.1 * control + numpy.random.normal(scale=2, size=control.shape)
Tj. na řídící signál (control) náš simulovaný robot zatáčí (behavior) rychlostí odpovídající desetině řídícího signálu. Klidně si můžeme představovat, že zatáčení je v radiánech za sekundu. Shodou okolností je to, snad až na měřítko, rozumný zjednodušený model zatáčení Freyji. Zatáčení Freji závisí také na povrchu, aktuální dopředné a rotační rychlosti a pár dalších věcech. Ty náš zjednodušený model explicitně nezahrnuje. Spadají pod šum / nepřesnost.
A teď si pojďme "naučit" inverzní model (control_model). Máme lineární systém, lineární model by měl stačit. Pro jistotu vyrobíme i dopředný model chování (behavior_model).
import scipy

behavior_model = scipy.stats.linregress(control, behavior)
control_model  = scipy.stats.linregress(behavior, control)

print(behavior_model)
> LinregressResult(slope=0.100300724814567, intercept=-0.00048361981064025785, 
      rvalue=0.28784673170627245, pvalue=0.0, stderr=0.0003337044737230931,
      intercept_stderr=0.0020026058962632327)
To vypadá dobře. Model chování pochopil, že rychlost zatáčení je desetinou řídícího signálu a křivka prochází nulou.
Kdo si vsadí na control_model.slope == 10, tj. "opak" dopředného modelu chování? Já! Myšlenka je prostá: Když behavior = 0.1 * control, tak control = 10 * behavior, no ne?
print(control_model)
> LinregressResult(slope=0.8260732024336218, intercept=-0.008403739321622323,
       rvalue=0.28784673170627245, pvalue=0.0, stderr=0.00274837817757052,
       intercept_stderr=0.005747146531042411)
Uhh? Takže podle dopředného modelu chování když pošlu řídící signál 10.0, bude robot zatáčet 1 rad/s, ale podle modelu chování, aby robot zatáčel 1 rad/s, musím poslat řídící signál 0.8? To ale bude robot zatáčet jen 0.08 rad/s, tj. skoro vůbec! O co jde?
Prvně, není to nedostatkem trénovacích dat. Těch jsme si nasimulovali přehršel a scipy si je, podle control_model.stderr, svým výstupem jisté.
Zadruhé, není to tím, že bychom "špatně jezdili na joystick". Data jsou simulovaná, krásně normálně rozložená. Ale tady už přihořívá. Na rozložení dat záleží. A také záleží na tom, co který z těch lineárních modelů minimalizuje.
import matplotlib.pyplot as plt

plt.xlabel('Control')
plt.ylabel('Behavior')

plt.plot(control[:500], behavior[:500], 'bo', label='Training data')
plt.plot(control[:1000], control[:1000] * behavior_model.slope + behavior_model.intercept,
         'ro', label='Model chování: control -> behavior')
plt.plot(behavior[:1000] * control_model.slope + control_model.intercept, behavior[:1000],
         'yo', label='Model řízení: behavior -> control')
plt.legend()
plt.show()
Zaprvé, vzorová data jsou hustší kolem nulového řídícího signálu. Na skutečném robotovi by to odpovídalo tomu, že robot jezdí převážně rovně.
Zadruhé, model chování minimalizuje čtverec rozdílu mezi očekávaným a pozorovaným chováním. Model řízení minimalizuje čtverec rozdílu mezi očekávaným řízením a skutečným řízením. První z těch dvou rozdílů se měří v ose Y, druhý v ose X! Všimněte si, že průměrná hodnota řídícího signálu, který způsobil rotaci 1 rad/s, je skutečně velmi blízká nule. Ty dva lineární modely mají rozdílné úkoly a není nejmenší důvod, aby model řízení byl inverzním k modelu chování.
Oba dva body dohromady znamenají, že data táhnou model řízení k nule.
A skutečně, pokud si "pohrajete" z rozložením vzorových dat - ta dvě numpy.random.normal volání - můžete v control_model.slope dostat poměrně široký rozsah hodnot.
Dokonce ani rovnoměrné rozložení řídícího signálu z omezeného intervalu místo normálního rozložení to nespraví.
Na skutečném robotovi pak ani nepřesnost v chování není symetricky normálně rozložená. Je pravděpodobnější, že robotovi se zatočit nepodaří, než že nepředvídaně začne prudce rotovat. To táhne i model chování k nule. Ale k nule na jiné ose než kam je tažen model řízení. Nůžky se rozevřou ještě víc.
Pokud jste teď zmatenější než na začátku, je to dobře. Aspoň při vlastních pokusech se strojovým učením, anebo i s jednoduššími aproximacemi, budete rozvážnější než my ohledně vlivu rozložení dat a vlivu chybové funkce na výsledek.
A pokud je vám to celé zřejmé, blahopřeji. Jste o osmnáct roků rychlejší než já. Upřímně, mám neodbytný pocit, že mi ještě nedochází všechny důsledky.
Takže co s tím? To snad radši nechám na jindy. Pokud nebude okraj této stránky příliš malý.
Komentáře (1) 1/6/24, 12:44 Ahoj Jirko a Martine, dovolil bych si pár poznámek k Neinvertibilnímu chování. Předem se omlouvám. Neuronové sítě mi moc neříkají, ale selský rozum (a trocha z teorie řízení, kterou si pamatuju ze školy) mi říkají, že tudy cesta nevede. To, o se tu snažíš je tzv. dopředné řízení, tj. když budu mít model chování robota, tak inverzí najdu požadovanou akci pro získání kýženého výsledku. Toto funguje, ale za zásadního předpokladu, že systém není ovlivňován dalšími významnými vlivy (to co označuješ za šum/poruchu) - systém je prediktibilní. I tento problém se dá kompenzovat, pokud jsem schopen tu poruchu nějak "změřit" (což v tomto případě asi nepůjde - např. zjišťovat aktuální prokluz). Využívá se to třeba u tzv. ekvitermí regulace. Měřím teplotu venku (porucha/šum) a na základě modelu chování v reakci na poruchu řídím topení abych dosáhl požadované teploty uvnitř. To funguje pokud se podmínky podobají stavu při němž byl sestaven model (když bude např. -10 st. a bude pražit sluníčko, tak už to tak pěkně fungovat nebude, ale tady to moc nevadí, protože dům má obrovskou setrvačnost). To použití neuronky pro řízení otáčení mi přijde, jako bych chtěl řídit vytápění podle obrazu z webkamery, kterou vystrčím z okna (= vyvěštím dle obrázku venkovní teplotu a na základě té, budu topit). Takže podle mě jediná šance je použít osvědčené zpětnovazební řízení, které řídí na základě měření aktuálního stavu. Tj. stále měřím aktuální rychlost otáčení (gyroskop) a porovnávám s požadavkem, rozdíl zpracuji "nějakým" regulátorem. Toto bude zaručeně fungovat, i když seřízení toho regulátoru nebude úplně triviální, protože poruchy, resp. rychlosti jejich změn jsou zde obrovské. Martin PS. Docela mě láká to zkusit.

9. ledna 2024 - Svítí, nesvítí, svítí, nesvítí … (zbývá 167 dní) [JI]

Dnes něco pro odlehčení.
Pravidla Elrobu vyžadují, aby byl každý robot vybaven oranžovým majáčkem. Dostupné oranžové majáčky jsou buď pro stavby, nebo pro náklaďáky. Na malého robota se vejdou jen těžko.
Ale takové hipsterské supersvítívé blikačky na kolo to jistí!
Freyja s majáčky
Freyja s majáčky

11. března 2024 - Půlhodina (zbývá 105 dní) [JI]

Robotika je aktivita pro trpělivé. Anebo pro blázny. Když sebou robot po patnácti letech práce někde zase práskne, je mi z toho smutno.
Teď se mi ale poštěstilo zajímavé pozorování. Potřeboval jsem promazat logy a uvolnit místo na disku. Tak jsem se díval, které ELROB logy chci nechat a které ne. Na konci července se robot nerozjel. Na konci srpna se rozjel, ale na špatnou stranu. Včera jezdil 29.5 minuty a najezdil 1720 metrů. A pak zaparkoval pod dodávku, no. Pokrok to je, ne?
29.5 minuty je dostatečně blízko půlhodinovému limitu v Elrobu, abych cítil nějaké to uspokojení. Výmluva pro dodávku je, že řešení asi existuje. Taková dodávka totiž robota trápí výškou svého podvozku. Freyja lidarem vidí spodem a jediná viditelná překážka jsou kola, kdesi daleko. Dobrá zpráva je, že na Freyje jsou i čtyři stereo kamery. Jedna z nich překážku detekovala. Detekce z kamer "akorát" zatím ignoruji, protože s bočními malými kamerami zatím spokojený nejsem. Lezou z nich časté falešné poplachy. V zájmu ochrany dodávek v blízkém okolí bych měl asi začít používat přední a zadní kameru. Ty jsou OK. Ony i ty boční po překalibrování a při konzervativnějším nastavení začínají vypadat lépe.
Co tedy posunulo Freyju ke světlejším zítřkům? Nechal jsem si poradit od MartinaL. PavelS potvrdil, že dělá něco podobného. Přidal jsem jednu zpětnovazební smyčku pro řízení zatáčení. V původním řešení konzumovalo kompas a gyroskop vysokoúrovňové řízení, které vyprodukovalo požadovanou dopřednou a rotační rychlost. Ty jsem transformoval na požadovanou rychlost kole na levé a na pravé straně, které by, podle jednoduchého matematického modelu (inverze k odometrii), měly vést k žádoucímu efektu. Kontroléry motorů vlevo a vpravo pak s pomocí PI řízení dbaly na to, aby se kola točila správnými rychlostmi. Bohužel toto vede ke správné rychlosti a k několikanásobně podhodnocenému zatáčení.
Nové řešení ruší onen model a rozklad na levou a pravou rychlost. Přidává střední úroveň PID řízeni se zpětnou vazbou z gyroskopu a z enkodérů, resp. hallovek. Pokud robot nezatáčí dost rychle, víc zabere. Nízká úroveň řízení rychlosti jednotlivých kol zůstává. A je to. Robot je teď mnohem hbitější.
Jenom jsem se nenechal od MartinaL přesvědčit, že k tomu potřebuji mikrokontrolér. Real-time priorita procesů na PC a komunikace po USB vedou k tomu, že i z PC tu novou smyčku zvládnu dostatečně pravidelně na 100 Hz, aniž by se počítač zadýchal. To mi stačí.
Tím je vyřešená jedna ze dvou motivací - ta veřejná - pro nedávnou dlouhou úvahu na téma dopředného a zpětného modelování. Druhá motivace vydá na samostatný konferenční článek, takže ji nechám na jindy.
Hbitější robot odhalil chybu v novém experimentálním vyhýbání se překážkám. Nějak si nemůžu vzpomenout, proč jsem nepoužil starší, funkční řešení. Asi jsem měl chytrý nápad :-/ Něčím se bavit musím Každopádně chybu jsem opravil a to taky hodně pomohlo.
Jo, a ve vysokoúrovňovém plánování trajektorie taky byla bota jak vrata. Ono to mělo důvod, když jsem před Vánocemi 2022 říkal, že rok a půl do ELROBu 2024 bude s odřenýma ušima tak akorát.
A co dál? Druhý důvod Freyjiny výpravy pod dodávku byl, že se po té půlhodině ztratila. Pro mě překvapivě věděla správně svoji pozici, ale byla o šedesát stupňů ztracená v orientaci, takže zamířila špatným směrem. Chápu, že dva palubní GPS kompasy nemají vždycky dostatečný signál, ale CMPS14 kombinující magnetometr a gyro (BNO080) by se takhle ztratit neměl, ne? Až na to, že to dělá. Nejen mě. Zdravím PavlaJ! Na netu jsem se dočetl, že je velmi citlivý na své umístění. Takže dneska ho stěhuji. Kompas. Ne Pavla.

Pokud máte nějaké doplňující informace či komentáře napište nám.