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: 29/06/2024 — Pat jako mula
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
- 240311 - Půlhodina (zbývá 105 dní)
- 240403 - Halí, belí (zbývá 81 dní)
- 240610 - Mrzne (zbývá čtrnáct dní)
- 240625 - ELROB 1. a 2. den
- 240626 - C'est la vie
- 240629 - Pat jako mula
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 |
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.
3. dubna 2024 - Halí, belí (zbývá 81 dní) [JI]
Tak jsem ho vyměnil. Kompas. Ne Pavla.
UM7, další pokus o "prostě koupím hotové řešení", dopadl špatně. Senzor dobře drží náklony (roll, pitch), ale nehorázně driftuje otočení podle svislé osy (yaw). Za dva dny práce s ním jsem nezjistil, jestli ukazuje otočení od severu, od počáteční polohy, od východu, nebo odkud vlastně. Doporučení na fórech zní: "Nainstalujte starší firmware." To se snadno řekne, ale hůř udělá. Jak "současný" výrobce, tak původní výrobce už nejspíš zkrachovali. Každopádně jejich weby nefungují. Když ten kompas vidím, ani se moc nedivím.
Nastává tedy čas totální nadvlády (total control). Aneb Udělej si sám. Jako MartinL a PavelS. Protože jsem tvor podezíravý a času do Elrobu zbývá málo, s UM7 jsem rovnou pro jistotu koupil i AltIMU-10 v5 - destičku s akcelerometrem, gyroskopem, magnetometrem a tlakovým senzorem. Na tlakový senzor dojde později. V SubT velmi pomohl se stabilizací lokalizace. K AltIMU jsem přihodil i Arduino Nano ESP32. Tím se i na Freyju dostává první Arduino. Můžete si udělat čárku. Ne že by bylo nějak nutné. Nějaký USB-I2C převodník se tu v šuplíku najde a jak už jsem ukázal s CMPS14, 200 Hz komunikace se přes něj zvládne a AHRS (attitude and heading reference system) by se dalo klidně počítat na PC. Možná na to jednou i dojde. Teď jsem si prostě ze vzdělávacích důvodů chtěl pohrát s ESP32. Možná dojde i na nějaký ten Micropython. Když už zbývá tak málo času
Odbočka: Arduino Nano ESP32 obsahuje dvoujádrový RISC-V procesor na 240 MHz, wifi, bluetooth. Běží na tom FreeRTOS. Pro můj účel je to "totální overkill". Tímhle by měl jít řídit celý robot. Co mě ale ohromilo je, že díky Arduino HAL (hardware abstraction layer) na tom na první dobrou fungují všechny ty existující Arduino knihovny pro práci s akcelerometrem, s gyrem, s magnetometrem. Nějaký RISC-V, dvě jádra nebo FreeRTOS nehrají roli! Bohužel ale chybí podpora v Arduino-Makefile a Arduino Studio vážně, ale vážně nemusím. To snad i v roce 2000 existovala lepší vývojová prostředí. A nezamrzala. Sakra. Konec odbočky.
Zpátky k totální nadvládě. S velkou mocí přichází i velká zodpovědnost. Už jste někdy kalibrovali magnetometr? "To ho prostě vezmeš a otočíš do všech směrů." OK, to zvládnu. "A musíš to udělat i s robotem, abys odkalibroval vlastní rušení." Už jste někdy otáčeli třicetikilovým objektem, který nejde pořádně uchopit, s křehkými vyčuhujícími anténami, do všech směrů, jo? Naštěstí pro základní kalibraci jde o extrémní hodnoty. Těch člověk dosáhne namířením každé ze tří os směrem na sever a směrem na jih. Nejsou potřeba všechny směry. V naší zeměpisné poloze vedou siločáry mezi čtyřiceti a šedesáti stupni směrem dolů. S tím je taky potřeba počítat. Takže vzít robota, naklonit a, protože přesný sever a přesný sklon pochopitelně nemůžu trefit, pohoupat. Šla kolem žena a ptala se, jestli k tomu Freyje nechci zazpívat ukolébavku. No nic.
To byla kalibrace na balkóně, které jsem nakonec moc nevěřil. Kdo ví, kde je okolo co železného a kudy teče nějaká elektřina. "To rozhodně musíš venku!" Potud MartinL. Takže na dvůr. A protože nechci zpívat, nastal čas na vynalézavost:
Se zavěšeným robotem se hned mává snáz!
S kalibrovaným magnetometrem nastává čas na software. Že prý Madgwick Filter (pdf) nabízí vhodný poměr mezi kvalitou chování a výpočetní náročností. PavelS ho používá. MartinL je spokojený s Mahony filtrem. Madgwickpro Arduino existuje, šup tam s ním! Říkal někdo něco o velké zodpovědnosti? Ale ouha! Chová se to "nějak divně". Tak přenastavím gain (parametr beta), jedinou věc, která přenastavit jde. No, to nejde. Ne v té knihovně. Tam je beta "private" parametr. Proč?? A když už do toho vrtám, proč se to inicializuje nulovým směrem a ne z prvního měření? Takhle jsou první odhady úplně blbě! Velká zodpovědnost, vlastní fork kódu. Jako všichni ostatní. Přesně tyhle věci jsem řešit nechtěl!
Vlastní fork, inicializace, přenastavený gain, pořád je to divné. Mno. Různé kopie Madgwick filtru, které tak kolují světem, obsahují různé chyby. Např. v té mojí chybí na dvou místech *2. V kopii MartinaL, který beztak používá Mahonyho, taky. Není to hezký kód na čtení a článek taky ne, ale ano, to *2 tam opravdu patří.
Přidat *2, ještě jednou přenastavit bias magnetometru a začíná to vypadat smysluplně. Až na to, že prostředí hraje pořád proti. Ten "dvůr" je totiž střecha podzemní garáže. Železobeton, sem tam nějaké to elektrické vedení. Rozhodně venku! Jo. Buzola v jednom místě ukazuje sever směrem, kde vychází slunce. To asi není správně, že? Nový kompas na robotovi v tom místě dokonce ukazuje směrem na jih.
Zajímavé je, že ty kopírované filtry nejeví snahu ignorovat zjevně neplatná měření. No nic, teď je to moje zodpovědnost. Jedna zajímavá možnost je sledovat sílu magnetického pole. Při vnějším rušivém vlivu je šance, že se to s magnetickým polem Země sečte, nebo odečte. Když přijde takováhle zjevně neplatná hodnota, může Madgwick chvíli držet směr jen z gyra.
Když si nakreslím histogram síly magnetického pole během ježdění kolem domu, vidím výraznou špičku správných měření, výrazná špatná příliš silná a příliš slabá měření a spoustu "tak nějak mezi" měření.
Není tam zjevný interval správných hodnot. S trochou hystereze se to ale dá. Když síla přesáhne 0.46, je to určitě zkreslené měření. A od té chvíle magnetometru nevěřím, dokud neklesne zpátky pod 0.42. Podobně na straně nízkých hodnot. S touhle metodou IMU ignoruje magnetometr při ježdění sem a tam opakovaně na těch stejných místech. Mimo jiné i v tom místě, kde je buzola úplně mimo. To vypadá nadějně. Ještě budu muset vyzkoušet, jak se chová Madgwick jen s gyrem. Doufám, že tam nejsou další chyby.
Další metodou detekce neplatného měření je podle směru magnetického pole. Má mířit těch svých čtyřicet až šedesát, nebo kolik, stupňů směrem dolů. Směr dolů poznám z … světě drž se … mám IMU! Tohle zatím nedělám a tiše doufám, že nebudu muset.
Trochu mám obavy, že tyhle pečlivě vybrané hraniční hodnoty a očekávaný sklon magnetického pole platí tady, ale ne tak úplně na druhém konci Německa, kde bude ELROB. Snad je to dost blízko na to, aby se magnetické pole až tak moc neměnilo.
Začínám si myslet, že hotové řešení neexistuje, protože ani nemůže :-/
9. června 2024 - Mrzne (zbývá čtrnáct dní) [JI]
Do soutěže zbývají dva týdny, je čas přestat robota rozbíjet. Poslední měsíc byl náročný. Pod tlakem se lidé i roboti bortí. Došlo i na únik kouzelných čmoudíků, bez kterých pak už elektronika nefunguje. Následující dva týdny a soutěž by takové být neměly. Takže! Konec předělávání hardwaru. Nastává hardware freeze. Nastává i software freeze. Konec zásadních změn v programu - žádné nové strategie, žádné nové programové moduly, žádné nové vlastnosti. Odteď "jen" opravy a ladění už existujících částí.
Co všechno se do robota před mírně posunutou deadline ještě dostalo?
- Nové lidary pro detekci srázu a odpovídající software.
- Posílání zpráv přes XBee na GPS modulech na základní stanici ("base station") a odtud ukládání trajektorie na WebDav serveru organizátorů. Tohle bude potřeba otestovat na místě, protože WebDav má podle všeho různé verze a příchutě a jejich server a můj klient si nemusí rozumět.
- Hlášení stavu robota přes palubní http server. Společně s už dříve existujícím spouštěním a vypínáním to znamená, že můžu program zapnout, zkontrolovat i vypnout z prohlížeče na mobilním telefonu. Kdo kdy stál s notebookem na dešti, ocení.
- Nevyhýbání se vysoké trávě. Kdo by to byl řekl, že nedetekovat překážku může být těžká věc? Na předloňských videích z Elrobu jsem vykoukal vysokou trávu a nakonec nás i organizátoři varovali, že tam schválně na několika místech nechávají trávu po pás. Freyja je, na tuto úlohu, malý robot a do takové trávy se schová celá. Navíc, aby nemuseli malí roboti jezdit cestou rozježděnou velkými roboty, pojedou malí roboti první. Takže ta tráva nebude ani uježděná. Freyja je letos možná i nejmenší robot soutěžící jako mula. Hádejme, kdo pojede první.
Kterým směrem není překážka?
25. června 2024 - ELROB 1. a 2. den [MD, foto SP]
Utíká to hrozně rychle a po celodenním testování na vojenské základně nedaleko Trieru (kousek od Lucemburka), je člověk rád, když se osprchuje a jde spát, a „report” pokulhává.
Pro začátek přikládám alespoň několik fotek od Standy z prvního dne:
Dnes Jirka testoval ve vysoké trávě (blázen), ale Freyja to dávala až zahučela do nějaké neviditelné díry. Pat si ani neškrtl i když ho Standa zatížil. Ono to bylo jasné
už dávno, že Pat ve skutečnosti žádná záloha není a to jak po SW tak po HW stránce. Soutěž je zítra, tak uvidíme — držte nám, resp. Jirkovi/Freyje palce!
26. června 2024 - C'est la vie [JI]
Před soutěží jsem vcelku veřejně vyhlásil, po vzoru japonské vesmírné agentury, tři úrovně cílů:
- Minimální: Vyjet ze startu.
- Ku spokojenosti: Dovést robota ze startovního bodu do cílového bodu.
- Vynikající: Autonomně se pak vrátit na start.
Jakákoli další jízda znovu na cíl a případně zpátky by byl bonus.
Splnili jsme minimální cíl.
To včerejší testování, které Martin komentoval slovem "blázen", nebylo jen o vysoké trávě, ale také o louce rozryté divokými prasaty. Od organizátorů jsme měli echo, že to nás čeká na soutěžní ploše. Freyja se z těch děr sice jakž takž vyhrabávala, ale moc jí to nešlo. Takže mě čekala obtížná volba: Něco s tím dělat, nebo to nechat být? Soutěžní povrch, ke kterému jsme neměli přístup, jsem čekal ještě horší.
Takže jsem posunul maximální výkon motoru. Výsledek byl … no, byla to těžká volba mezi neprojedu a nepojedu. Se zvýšeným výkonem regulátory každou chvíli při soutěžní jízdě narazily na proudový limit, software je resetoval, což u ODRive znamená krásných dvacet sekund nečinnosti, a robot zase kousek popojel.
Po chvilce poskakování robot vjel do úzkého úvozu kde, připravený na průjezd metr vysokou travou, trávu po stranách nepovažoval za překážku. Místo po cestě to Freyja vzala tou travou. Chvíli se sice úspěšně probíjela, ale nakonec se jí namotala tráva na kola takovým způsobem, že jsem ji pak nemohl sundat, a regulátory to vzdaly úplně. V tu chvíli jsem byl přesvědčený, že mám po robotovi. A Martin, že ho čeká odpolední jízda a Patem.
K našemu velkému překvapení se Freyja po úplném restartu probrala. O Patovi jsme věděli, že ten offroad tak úplně nedává. Takže druhá šance pro Freyju.
Zpátky předchozí nastavení regulátorů, trošku konzervativnější nastavení Follow Me, aby tolik nekličkovala do stran, když je trasa téměř rovně, a už nás hledají organizátoři, že máme jet o hodinu dřív proti plánu a že tam máme být za čtyři minuty. Rychle všechno povypínat, vyměnit baterie za nabité, rychlý přesun na start, zapnout robota … a nic.
Někdy během toho vypínání a přesunu se jeden ze dvou regulátorů rozhodl, že už mu to pro dnešek opravdu stačilo a že končí. Zjistit, co přesně se stalo, bude práce pro forenzní detektivy.
Pro ilustraci počasí ještě dodám, že mi během zhruba patnácti minut prvního kola roztál 3D-tištěný držák na stojan GPS antény na základnové stanici (PLA). Notebook byl při přípravě druhé jízdy tak horký, že se na něj nedalo sáhnout. Pokud se nějaká elektronika rozhodla, že dává výpověď, ani se jí nedivím.
Teď nás čeká rozmyšlení, co jsem se z toho naučili, co z toho vyplývá a co dál. Asi tady někde narážíme na limity našich schopností, možností a motivace.
29. června 2024 - Pat jako mula [MD]
Vypadáš jak Smrtka! — tak to byla první slova mé ženy, když jsem v pátek večer konečně dorazil na chatu. A asi to i bylo/je vystižné. Bylo mi zle od okamžiku, kdy jsme
dorazili na místo určení (vesnička kousek od Trieru/Trevíru) až na poslední odpočivadlo na cestě domu před Rozvadovem. Jestli to byla nějaka geofence nevím — jako zle je mi stále a
jako preview stáří to bylo/je rozhodně varovné. Tak motivační foto z Trevírského kostela
To je jeden pohled na věc, který jsem si moc neužil.
Druhý byl trošku zábavnější a to setkávání a diskuse s ostatními týmy. Přiletěly i týmy z Kanady nebo Finska, tak to je Česká republika (i Švýcarsko) „za rohem”. Dobrý byl sousední týpek:
SWX-Robotics |
… aneb to byl první člověk, kterého jsem za život potkal, který se aktivně účastnil RobotWars. A povídal, jak byl i v Indii, že tam mají kategorii těžkých robotů … a teď, když
se dohaduji s perplexity.ai, tak se tvaří, že limit byl 60kg, ale tam zase nezapada jeho váha 115kg?
Možná jiné jednotky? Jinak kola u robota měl prostřílená, aby dokázal, že to nevadí. Prostě jiný svě — jak se asi koukal na nás ve slamáčku? (po celou dobu akce měl vojenský mundur
a občas si nasazovat přilbu a vyrážel s robotem „na lov” klidně 5m/s (hrubý odhad).
Jinak to jako social event pojal hlavně Jirka, tak možná časem přihodi ještě nějaké dojmy.
A do třetice, jak to viděl robot Pat? Konečně větší výlet, spousta diváků, spousta betonu, kde se dá jezdit maximálkou, :) Asi se nejvíce líbil jednomu polskému týmu, že je hezčí než
zelená konkurence. Většinu jsem ladil až na místě, tak byl dost v pohybu a to se také lidem líbí. V samotné úloze až tak moc neuspěl — to jsem vlastně psal, že potřeboval zatížit,
ale váha člověka už byla moc. Cestou na hrací pole Scenario Mule jsme si vytipovali několik rozlamaných betonu, a Standa z toho poskladal krásně osedlanou mulu. To dokonce pozitivně
hodnotilo i několik vyšších pohlavárů. Ale na samotný test už čas nebyl, protože 2 týmy odpolední druhý pokus zrušili … jen nám to nějak zapomněli řící. :-( Byli jsme tím pádem poslední
tým, sudí (typicky starší osoby) se tam „vařili” pod přístřeškem, a tak z původního slibu, že v daném časovém okně můžeme nasadit oba roboty, sešlo. Bertu to tak, že jsme jim byly uplně
ukradený a více si užívali, když mohli ruzné „tanky” teleoperovat. Prostě na superautonomii až tak nebazírovali.
ELROB is
- not organised as a competition but as a trial,
- a strictly non-profit activity and
- strictly R&D oriented. (zdroj elrob.org)
A to je asi vše, co jsem teď schopen vypotit. Ještě můžu přidat link na video, jak ta celá jízda vypadala z pohledu robota: https://youtu.be/7JkO5qXuSZ0
(je to raw zaznam, takže dlouhá nuda)
p.s. ješte video od Standy z úvodní sekce — to je trošku svižnější a kratší
Pokud máte nějaké doplňující informace či komentáře
napište nám.