czech english

Space Robotics Challenge

NASA challenge, Phase 2

NASA vyhlásila pokračování soutěže Space Robotics Challenge, která probíhá v simulovaném prostředí Gazebo/ROS. Cílem SRC2 je realizovat plně autonomně dlouhodobou ISRU (in-situ resource utilization) misi na Měsíci. Cílem skupinky robotů je lokalizovat důležité minerály, sbírat je a neztratit se v neznámém prostředí. Update: 18/6/2020 — Arabské tržiště


Blog / Přehled


Soutěžící mají za úkol vyvinout software, který si poradí s úlohami v simulovaném prostředí na měsíčním povrchu. Dostanou k dispozici Gazebo simulátor pro vývoj a testování a ROS API pro komunikaci mezi roboty ve virtualním robotickém týmu.
Pro úspěšné bodování v kvalifikačním kole je třeba splnit všechny 3 úlohy na vlastním domácím počítači. Průběžné výsledky bude možné po celou dobu kvalifikace nahrávat na dedikovanou webovou stránku.

Seznam hledaných zdrojů

  1. Water Ice (H2O)
  2. Hydrogen (H2)
  3. Carbon Dioxide (CO2)
  4. Carbon Monoxide (CO)
  5. Ammonia (NH3)
  6. Hydrogen Sulfite (H2S)
  7. Ethene/Ethylene (C2H4)
  8. Methane (CH4)

Úloha 1 - lokalizace zdrojů (Task 1: Resource localization)

První úloha je vyhledat zdroje v daném prostoru měsíčního povrchu. Objekty se mohou nacházet jak na povrchu, tak pod povrchem. Úkolem je určit polohu co nejvíce objektů s přesností +/- 2 metry vůči startovní pozici robota.
K dispozici budou senzory pro vnímaní, detekci a identifikaci zdrojů. Časově bude tato úloha omezena na 45 simulovaných minut.

Úloha 2 - sběr vzorků (Task 2: Resource collection)

V této úloze půjde o sběr již lokalizovaných objektů.

Úloha 3 - určení vlastní polohy (Task 3: Self-localization)

V poslední úloze má robot za úkol se lokalizovat vůči známé pozici zadaných objektů. 5 bodů bude za určení relativní pozice objektů, 5 za návrat na základnu a 3 za správnou orientaci robota.

17. října 2019 — NASA Webinář

Včerejší „webinář” moc nepřekvapil — v zásadě šlo o zopakování seznamu organizátorů a sponzorů, rychlý přehled pravidel a zdůraznění, že Číňané se za žádných okolností (stejně tak ještě některé další národnosti) nesmí zúčastnit. Asi tuší, že by vyhráli.
Asi jedině překvapení bylo, že každý člen týmu musí být pojištěn na $100000 na období soutěže, resp. kvalifikačního kola. Na dotazy, co budou mít roboti za senzory a pod odpovídali: „to se dozvíte až v lednu až se přihlásíte a pošleme vám balík se simulátorem.”
Udělal jsem alespoň pár motivačních snímků, ale pro detaily bych odkázal na anglická pravidla.
p.s. možná ještě poznámka na kvalitu simulace … prý nebude tak dobrá jako u Space Robot Challenge Phase1 a že hlavně půjde o spolupráci více robotů …

18. ledna 2020 — Informace o robotech

Utekly tři měsíce (hrůza jak to utíká), kdy registrace byla uzavřena 20. prosince 2019. Předpokládám, že jsme se úspěšně registrovali, jelikož včera přišel mail Access to the Space Center Houston / srcp2-competitors project was granted.
Jediný problém je, že vám o tom zatím nesmím skoro nic říci resp. nevím, co mohu a co je „top secret”. NASA zatím postupuje podle plánu popsaného v revidovaných pravidlech SRCPhase2_Official_Rules_rev_01.2020.pdf. Zde najdete informaci: January 15, 2020 --- Packet of Robot Information Delivered to Competitors, tj. NASA již tento bod splnila. Další deadline je March 16, 2020 --- Qualification Round Opens, kdy asi vydají oficiálně ROS simulátor (ten momentálně k dispozici zatím není, resp. jsem ho nikde nenašel).
Jak již bylo řečeno minule případně na webináři bude se jednat o spolupráci více robotů. Vozítka jsou tří druhů a trošku připomínají Spider3:
Vozítka jsou pro hledání minerálů, jejich naložení, případně dokonce vykopání, a transport materiálu na základnu.
Koukám, že oficiální stránka s dokumentací (veřejná) obsahuje i FAQ (často kladené dotazy), kde píšou:
  • Q: Regarding "Task 2: Resource collection": Will the robotic excavator be equipped with a resource sensor, as is the prospecting robot? To perform sensing in permanently shadowed regions, is the excavator equipped with a light or LIDAR?
  • A: Only prospecting robot will have resource sensor. All robot model will be equipped with a light source, LIDAR and depth camera
Tak to vám asi prozradit můžu … tj. průzkumný robot má senzor na detekci a jinak všichni roboti mají světlo, LIDAR (2D) a kameru. Měl jsem za to, že je obyčejná, ale v této odpovědi tvrdí, že je hloubková (RGBD) … neuvěřím, dokud neuvidím první data. Aha, už to vidím ... this is preliminary robot information and they are subject to change without notice, takže nakonec to bude možná úplně jinak, ideálně jako byla oficiální odpověd.
  • Q: In the qualifiers, is the sensor suite specified by each team, or is it generic and the same for all teams?
  • A: Same for all teams.
… tj. všichni budou mít stejnou sadu senzorů.
  • Q: We'd like to know if we'll have to handle a handful of robots (3-5), or we need to prepare for a fleet of 10-20 robots.
  • A: Handful of robots.
… no že roboti budou alespoň tři je jasné už teď, ale kolik jich bude celkem moc jasné není. Je i možné, že počet robotů bude proměnný.
  • Q: What kind of capabilities need to be developed to identify the regolith? Do we need a computer vision expert, or will the robots have some sensor that gives analyzes the environment for us?
  • A: Did you meant "volatile"? The simulation will be provided with volatile sensor that detects different types of volatiles.
… prostě průzkumný robot bude mít senzor schopný rozpoznat všechny druhy minerálů.
  • Q: When will the ROS simulation environment be available for download?
  • A: Qualification round opens on March 16th 2020.
už je jasné, proč jsem simulaci nikde nenašel. Pokračování v březnu 2020.
p.s. v pravidlech vidím u popisu kvalifikačních kol:
  • Competitors will be provided with a prospecting robot equipped with sensors that allow for autonomous perception, as well as resource detection and identification.
  • Competitors will be provided with a robotic excavator and multiple robotic haulers that are equipped with sensors that allow for autonomous perception.
… prostě informace, že se v simulátoru budou používat 3 druhy robotů je oficiální.
p.s.2
Date: Sat, Jan 25, 2020, 01:48
Subject: SRC2 - Insurance Approved
This email is official acknowledgement that your insurance has been reviewed and accepted by Space Center Houston and thus your team is officially accepted into the Qualification Round.
Congratulations! Regards, The SRC2 Team

5. března 2020 — NASA Webinář 2

Včera byl již druhý NASA webinář. V první části organizátoři procházeli instrukce na wiki na GitLabu, kde od 16. března bude ke stažení simulátor a testovací světy. Druhá část se pak věnovala dotazům.
Za nás bych řekl několik pozitivních zpráv:
  • je možné o SRC2 blogovat a publikovat screenshoty
  • je podporováno nahrávání a publikování videí zajímavých simulací
  • kód může být Open Source včetně soutěžního kódu a je to náš problém, pokud by ho použili soupeři
Co mne trošku zklamalo byl fakt, že rover byl pouze inspirován reálným vozítkem a odpovídající platforma tedy v reálu neexistuje.
Pro zajímavost, NASA má v plánu pravidelné týdenní updates a stejně tak plánuje „dávkově” reagovat na dotazy a reporty chyb.
p.s. ještě před seminářem jsem si pročítal pravidla a zaujala mne věta: BHP is a resources company based in Melbourne, Australia ... (an mining company). … prostě někoho zajímá autonomní dolování natolik, aby soutěž sponzoroval.

17. března 2020 — Kvalifikační kolo začalo

Včera večer začalo kvalifikační kolo, které končí až někdy v srpnu 2020, tj. relativně dost času. Vzhledem k situaci je to možná dobré téma jak trávit večery. … jediný problém je, že už README začíná Unauthorized Distribution Strictly Prohibited, takže to budou jenom drobné střípky. :-(
Nemám u sebe stroj, kde bych simulaci mohl snadno pustit (Ubuntu s NVidia GPU) a pro vzdálený přístup to nemám úplně připravené. Franta to doma ale již rozchodil a přislíbil nějaké screenshoty (ty podle posledního webináře povolené jsou). Založil jsem tedy i první Issue (#44) a to jestli jde obejít stisk „Play” tlačítka v simulačním okně. Píšu, že času je dost, ale termín je zhruba stejný jako DARPA Cave Circuit, takže čím dříve kvalifikaci sfoukneme, tím lépe.
Ptáte se, co bude první krok? samozřejmě Go 1 meter! aneb Robotem Rovně (asi další z akcí, která letos nebude). Očekávám pád do kráteru nebo náraz na hranici světa … a ano, je třeba z toho natočit video a to zde pak zveřejnit. (nechápu, kde teď beru tu dobrou náladu, ale možná je to tím, že zrovna nekoukám na zprávy...)

25. března 2020 — První data z Měsíce

No asi to nikoho extra nenadchne, ale toto je první RGB obrázek z scout_1:
Trošku mne mrzí, že jsem měl před dvěma měsíci pravdu: ... neuvěřím, dokud neuvidím první data., takže to opravdu budou pouze RGB data a nikoliv hloubková data: They are supposed to be RGB. They are stereo cameras, so you can use this to compute depth-from-stereo if you wish
Jinak s pořádnou GPU kartou ty obrázky budou asi hezčí (já byl vděčný za CPU verzi dokud No GUI automaticky nepouští simulaci … known bug).
A tady je ještě pohled z lidarview:
Laser scan má rozsah záběr +/- 75 stupňů s rozlišením 1.5 stupně (tj. 100 měření). Dosah zatím nevím, ale ten „šutr” vpředu je zhruba v 15 metrech.

1. dubna 2020 — První ujetý metr

No není to žádný velký odvaz, ale rover scout_1 se konečně pohnul z místa a ujel slibovaný metr (viz video). Ono to vypadá, že tam není žádný watchdog, tj. když přestaneme posílat příkazy, tak jede dál podle posledního …
Jinak řízení je pomocí třinácti kloubů, u kterých se nastavuje točivý moment (torque) v Nm. 10Nm bylo málo, ale pro 100Nm to už jelo jak vidíte.
Na druhou stranu těchto 13 kloubů má JointState, který obsahuje vedle jména, pozice a rychlosti i effort … tak možná půjde poznat, že se rover zrovna pere s překážkou.
Ještě přidám jedno mini-video, kde je hezky vidět jak kamera „šumí” a robotovi se podaří asi mírným couváním udělat kotrmelec do kráteru.
p.s. přidal jsem ještě do playlitu video od Franty nahrané přímo z GUI Gazeba … přeci jenom člověk získá lepší představu, jak to okolí vypadá (mimochodem, počáteční pozice robota je pokaždé náhodná).

6. dubna 2020 — Zatáčení

Organizátorům se podařil pěkný bug, který už je ale teď možná odstraněn — obě kamery jsou otočené o 90 stupňů vlevo a tak máme pěkné záběry levého kola:

V posledním release už jsou k dispozici kompresované JPEG obrázky, takže něco s čím si náš OSGAR lépe rozumí a umí snadno vygenerovat video ze dvou kamer.
Zároveň to beru jako jasný důkaz, že už zatáčíme. Ale pokud rover náhodný generátor umístí do kráteru, tak jsou překážky všude kolem a robot trošku propadá klaustrofobii …

8. dubna 2020 — Našli jsme poklad!

Přiznám se, že včera jsem měl zase „slabší chvilku”. Proč? No řešil jsem proč mi nechodí měření z detektoru minerálů:
root@gpu-desktop:/osgar# rostopic echo /scout_1/volatile_sensor
WARNING: no messages received and simulated time is active.
Is /clock being published?
A pak mi došlo, že možná to posílá data pouze v přítomnosti minerálů(!) (což mi následně potvrdili organizátoři i jeden další tým). No super … takže abych ověřil, že mi funguje dobře zpracování dat ze senzoru, tak nejprve musím nějaký vzorek nalézt.
Ale ono to má více rovin (viz Pohádka o slepičce a kohoutkovi ). Protože pokud chcete zkusit report nalezeného pokladu, tak:
root@gpu-desktop:/# rosservice call /vol_detected_service "pose:
>   x: 60.0
>   y: -7.0
>   z: 0.0
> vol_type: 'ethene'"
ERROR: service [/vol_detected_service] responded with an error:
… jo ten error je prázdný.
Tentokrát jsem si prošel většinu z 100 issues této soutěže na gitlabu a Chris (také soutěží v SubT) se tam ptal na podobnou věc … volatile/poklad/minerál lze reportovat pouze pokud je robot v jeho blízkosti a detekoval ho jeho senzor. A aby to nebylo moc jednoduché, tak pro každý běh je startovní pozice robota náhodná a mám pocit, že i rozložení pokladů je pokaždé jiné. Prostě jedna velká radost …
Tak k tomu dnešnímu titulku — poklad vypadá takto:
root@gpu-desktop:/osgar# python3 -m osgar.logger /scout1-200408_100943.log
 0                                               sys       6527 |    25 |   0.3Hz
 1                                 app.desired_speed       3817 |   439 |   5.0Hz
 2                                      app.artf_xyz          0 |     0 |   0.0Hz
 3                                      app.artf_cmd          0 |     0 |   0.0Hz
 4                                        app.pose2d       4343 |   658 |   7.5Hz
 5                                        app.pose3d          0 |     0 |   0.0Hz
 6                                app.request_origin          0 |     0 |   0.0Hz
 7                                   transmitter.raw          0 |     0 |   0.0Hz
 8                                      receiver.raw   34957762 | 20990 | 238.3Hz
 9                                        rosmsg.rot      79492 |  8528 |  96.8Hz
10                                        rosmsg.acc      79949 |  8528 |  96.8Hz
11                                       rosmsg.scan     134207 |   439 |   5.0Hz
12                                      rosmsg.image          0 |     0 |   0.0Hz
13                                     rosmsg.pose2d       3944 |   658 |   7.5Hz
14                               rosmsg.sim_time_sec          0 |     0 |   0.0Hz
15                                        rosmsg.cmd      17864 |   659 |   7.5Hz
16                                     rosmsg.origin          0 |     0 |   0.0Hz
17                               rosmsg.gas_detected          0 |     0 |   0.0Hz
18                                      rosmsg.depth          0 |     0 |   0.0Hz
19                                   rosmsg.t265_rot          0 |     0 |   0.0Hz
20                              rosmsg./qual_1_score      26334 |  8778 |  99.6Hz
21                   rosmsg./scout_1/volatile_sensor        398 |   398 |   4.5Hz
22  rosmsg./scout_1/camera/left/image_raw/compressed   17606034 |   875 |   9.9Hz
23 rosmsg./scout_1/camera/right/image_raw/compressed   17228123 |   874 |   9.9Hz

Total time 0:01:28.095461
Vlastně dost pochybuji, že by to ocenil ještě někdo jiný než já , ale klíčový řádek s nenulovýma hodnotama je: rosmsg./scout_1/volatile_sensor 398 | 398 | 4.5Hz. Ona radost mne asi rychle přejde, protože 398 zpráv mělo dohromady 398 bajtů, což bude None … ale snad to půjde extrahovat z nahraných receiver.raw.
OK, tak je to methanol:
('methanol', 1.9950698614120483)
('methanol', 1.986070156097412)
…
('methanol', 0.688122034072876)
…
('methanol', 1.9825676679611206)
('methanol', 1.9922877550125122)
… tj. v okamžiku vzdálenosti menší než 2 metry od volatile se dozvíme vzdálenost a typ. Jinak na kameře není vidět vůbec nic, takže ten methanol je pod povrchem.
p.s. poslední týden byl opravdu pěkný pohled na reálný Měsíc

12. dubna 2020 — ROS Python vs. ROS C++

Tuto zprávičku jsem chtěl zapsat už během naší pravidelné středeční telekonference … ale nestalo se tak. Rozhodně si však zaslouží být „zaprotokolována” a spadá do přihrádky proč nemám rád ROS.
NASA Space Robotics Challenge se liší od DARPA Subterannean Challenge tím, že pro komunikaci s ROS simulátorem lze přímo použít rospy, tedy Pythonovské rozhraní. DARPA tam má navíc binární knihovny, které je třeba přilinkovat a to už je celé snazší udělat v malém C++ wrapperu. V obou soutěžích používáme stejnou strategii: OSGAR běží v Python3 a tak přes ZeroMQ komunikujeme buď s Python2 (NASA podporuje pouze starší Ubuntu 18.x) nebo C++. Vše je ještě takové neusazené a na simulátoru se stále pracuje, ale následující výpisy mne rozhodně vyděsily:
double free or corruption (out)
…
Assertion failed: check () (src/msg.cpp:347)
Původně jsem si myslel, že je to rospy, resp. ROS hláška, ale po hledání na Google vyskočilo ZeroMQ pokud se používá z více vláken?! Jak je to možné, vždyť tam máme jenom jedno hlavní?? Odpověď je možná horší, než by programátor čekal: implementace stejného API je v Pythonu a C++ zásadně odlišná!!!. Teď už chápu, proč některé příklady v jednom jazyce nefungují v jiném. Je to jak když dáte dětem na hraní zápalky … na tady máš vlákna a užij si to!
V C++ je dost zásadní volat spin() nebo spinOnce(). Kupodivu spinOnce() (odbav jednu zprávu) v Pythonu vůbec není a teď konečně chápeme proč … ona totiž implementace spin() v Pythonu vůbec nic nedělá — je to pouze hodně složitý sleep na několik řádek. Sigh. Zkrátím to: pokud v Pythonu si vyžádáte čtení nového topicu (rospy.Subscriber()), tak pro každý subscriber vznikne nové vlákno. Pokud toto uděláte v C++, tak se žádné vlákno nevytváří a nový subscriber se pouze zařadí do fronty.
Pokud v tom velký rozdíl nevidíte, tak ROS je pro vás jak stvořený. Pokud však používáte oba programovací jazyky, tak berte toto jako varování, že v ROSu některé základní (programátorské) předpoklady splněné nejsou …

18. dubna 2020 — Nuda na Měsíci

Nečekal bych to, ale už to je skoro nuda, když to „srovnám s výletem na Kokořín ... co je tady? Prd. Tam byly alespoň stánky” (kdo nezná viz Dobytí severního pólu nebo youtube shot). Ono to asi bude i tím, že jsem se zatím moc daleko nedostal a to už teď byl druhý milestone pro task2 (bagrování), který jsem zatím ještě ani nezprovoznil. :-(
Tak alespoň malý status report. Zkouším řízení s tím, že měřená rychlost kol je „nějaká divná” (strašně osciluje). Issue #110 (private)):
Na všechna kola posílám 80Nm, tj. teoreticky se to muže rozkmitat, ale i organizátoři to považují spíše za chybu simulace.
Vyřadil jsem LocalPlanner a už zase jezdím jenom rovně, dokud se nějak nezaseknu a zjišťuji, zda jsem schopen ten stav poznat. Přešel jsem na řízení jako u kloubáků s pohonem pouze na přední a měření „odometrie” na pasivních zadních (v závislosti na směru pohybu) … ono je tam totiž pěkně vidět kolize s monolitem nebo příliš strmý kráter. Pak si couvnu a smykově zatáčím (zase lenost, není tam třeba nic počítat). A tak jezdím, bourám, zatáčím, jezdím … a nic extra zajímavého tam není … „na sever a na jih!”.
Asi jediná vtipnější epizoda byla, když jsem rover převrátil na záda a přišlo mi, že kamera s laserem je stále nějak stabilizovaná a po převrácení, že má divný úhel. Na to jeden z vývojářů odpověděl: if you flip the rover, all bets are off. In reality, US Congress would then want to know why you've totaled their shiny, multi-million dollar robot, assuming the Ames and JPL teams don't get you first!
No nevím, zda to tu můžu zveřejňovat, ale myslím, že je to výstižné!

20. dubna 2020 — Úloha číslo 3 a barevné fleky

Už asi tuším co je na tom Měsíci tak fádní … ta šedivá „barva”!
Přeskočil jsem teď na úlohu číslo 3, kdy je třeba přesně (tolerance 5 metrů) lokalizovat satelit:
Jedná se o žlutý krychlový satelit CubSat … jenom ta velikost mi nějak nesedí :-( … rozhodně to není 10 cm x 10 cm x 10 cm, ale při druhém přečtení toto je pouze unit a The cube-shaped satellites are spacecraft size in units or U’s, typically up to 12 U, kde krychle o straně 1.2m už by pravda být mohla. V každém případě visí někde mezi 5 až 25 metrů nad povrchem.
Po určení polohy satelitu (za 5 bodů) je třeba dojet na základnu (Processing Plant), ohlásit se do vzdálenosti 5 metrů od vchodu (zase 5 bodů) a konečně se zarovnat na značku s přesnosti do 10 stupňů (3 body).
Včera Franta natočil externí video (no jo no, je to normální uživatel, který má GUI) a člověk si pak udělá o tom povrchu Měsíce lepší představu:

p.s. no nečekal bych, že se mi po tom černobílém světe bude ještě stýskat!
a ani nekomentuji, že JPEG se mi jinak rozbaluje v ROS Linuxovém dockeru a Win7, tj. nesedí mi „počty žlutých pixelů”
p.s.2 tak jo, ještě jedno vtipné video robotického tělocviku (jak to celé stojí za houby, tak toto mi zase vrátilo chuť pokračovat … plus mail od NASA, že našli důvod resetu kontrolleru, ale oscilace stále zkoumají)

25. dubna 2020 — První body a první rvačka …

Není nad tým! Koukal jsem, kam jsem to robotické desatero psal a na Field Robot 2012 bych to rozhodně nehledal. Ale Ctrl+F fungovalo
Zpět k tématu … nějak to na mne padlo (neschopnost získat po více jak měsíci snažení na Měsíci jediný bod) a v tomto okamžiku to převzal Franta. A výsledek?
Requesting true pose
Volatile detection, getting closer: 1.935847
origin scout_1 43.153003 33.652192 0.129002  -0.172170 -0.117561 -0.419139 -0.883662
Origin received, internal position updated
Loc: 2.283263 -0.596569 -0.111458; Score: 0
Volatile detection, getting closer: 0.885438
…
Volatile detection, getting closer: 0.873248
Volatile detection, starting to go further, reporting 44.673080 33.116856
Reporting artefact carbon_dio at position 44.670000 33.120000 0.000000
Volatile report result: True
Loc: 4.313170 -1.963797 -0.193626; Score: 2
Loc: 6.051630 -3.997004 -0.260722; Score: 2
Z tohoto pohledu Verze 0 pro úlohu 1 je hotová!. Byla tam ještě zrada, že aby rover mohl bodovat, tak střed robota musel být do vzdálenosti 2 metrů od volatile. Ten byl ale detekován senzorem, který je umístěn vpředu od robota, tj. když došlo k první detekci na hranici 2m, tak střed robota byl typicky ještě dál než požadovaná hranice.
Řešení, co Franta nakonec použil, je vyžádat si jednorázově informaci o pozici robota v globální soustavě souřadné, ale reportovat detekovaný volatile až při dosažení minimální vzdálenosti. Pozice z první detekce byla navíc korigovaná a ten zhruba ujetý metr z dat z odometrie.
A než jsem se nadál, tak se Franta pustil do úlohy číslo 2, kde mají dva roboti spolupracovat. Robotický bagr (Excavator) má nabrat horninu v blízkosti získané pozice volatile a vysypat jí do robotického náklaďáku (Houler). Po dosažení kritické hmotnosti tým získá bod.
Na rozdíl třeba od SubT je zde možné řídit všechny roboty z jednoho programu, aneb na problémy komunikace mezi roboty se tady nehraje. Pro první kolo to Franta ale na mé přání stejně udělal „postaru”, tj. pouští se dva nezávislé programy (navíc každý s vlastní ROS proxy) a zbytek uvidíme. A už jedna z prvních jízd byla celkem ke koukání:

Mě to přišlo, jako když se ti roboti perou, ale PavelS to komentoval slovy: Mě se spíše zdálo, že se pokoušejí o rozmnožování
Asi poznámka na okraj, že v soutěži samotné robotů bude daleko více, tj. „rozmnoží se”…

1. května 2020 — Verze 0, 4 body, proměnné světy

OK, tak verze 0, kdy rover jezdí náhodně a při první detekci se zeptá na skutečnou pozici (tuto možnost má pouze jednou) a reportuje pozici při nejbližším průjezdu, už je v masteru. Při posledním testu jsem ho nechal jezdit 40 minut (reálného času a po pravdě nevím, kolik to bylo simulovaného času — v pravidlech je Time constraint: 45 simulation minutes for this task) a dokonce dal celkem 4 body, tj. podařilo se mu dostatečně dlouho držet platnou absolutní pozici. Jezdíme na 4WD, tj. klouže to a odometrie je nedostatečná, ale pro jednou to vyšlo.
…
0:14:27.685843 Volatile 7 detection at 0.185m, reporting 58.066348 -56.896968
0:14:30.666018 Loc: 55.43 -56.83 0.17; Score:  [2, 1] 66.37 -76.02 1.89
…
0:14:46.584770 Volatile 25 detection at 2.000m, reporting 57.488306 -47.546196
0:14:50.676024 Loc: 57.94 -47.15 0.08; Score:  [2, 1] 68.89 -66.33 1.80
0:14:57.949699 Volatile 1 detection at 1.867m, reporting 58.432105 -46.585204
0:15:00.679811 Loc: 58.58 -46.39 0.33; Score:  [2, 2] 69.53 -65.57 2.05
…
0:15:24.390609 Volatile 25 detection at 1.748m, reporting 59.121294 -45.884399
0:15:24.451381 Volatile 1 detection at 1.749m, reporting 59.115627 -45.907418
0:15:30.693607 Loc: 59.06 -47.97 0.29; Score:  [4, 3] 70.01 -67.15 2.01
0:15:40.697581 Loc: 59.94 -48.54 0.28; Score:  [4, 3] 70.89 -67.72 2.00
…
0:29:38.361666 Volatile 0 detection at 1.717m, reporting 64.249616 18.268521
0:29:41.184570 Loc: 64.81 19.94 1.57; Score:  [4, 3] 75.76 0.76 3.30
…
0:41:21.512480 Loc: 30.38 24.95 4.06; Score:  [4, 3] 41.33 5.76 5.78
maximum delay: 0:00:00.003831
Tak tady potkal čtyři „poklady” s indexy 7, 25, 1 a 0. První skoro krásně přejel (18cm od středu), ostatní měl na hranici detekce dvou metrů. Poznámka, že jenom kouká jestli něco neleží na cestě a k artefaktu aktivně nezajíždí, zatím.
Ještě vás možná pobaví skutečnost, že rover jede rovně (100m s timeoutem 2 minuty), při nárazu si couvne, otočí se náhodně o 90 až 180 stupňů na místě a zase jede rovně. Ale ty křivky úplně nevypadají rovné, není-liž pravda?! No to je tím, že jezdíme v 3D terénu a není zde žádná regulace na směr z IMU … prostě v kráteru to klidně bude jezdit dokolečka.
Ještě bych přidal „důkazový materiál” od Franty, že pozice „šutrů” se mezi jednotlivými simulacemi mění:
… skoro je to hra „najděte pět rozdílů”
cbd (což bylo dokázati)

3. květen 2020 — 5 bodů v úloze číslo 3

Včera psal Franta: Teda nechci se nějak vytahovat
Loc: [-21.366298 22.239406 -0.522004] [-0.002443 -0.028798 1.969255]; Score: 0
Starting to track cubesat
Someone else is driving True
1100
1101
Loc: [-17.641294 29.011444 -0.891152] [-3.119078 0.000175 1.038995]; Score: 0
1200
1201
Loc: [-12.882595 37.612236 -0.894276] [0.018675 -0.048695 1.081231]; Score: 0
Someone else is driving False
Requesting true pose
origin scout_1 3.415957 -7.723545 0.907761  0.014314 -0.028405 0.523845 0.851219
Origin received, internal position updated
Calculated angles roll=-0.005402, pitch=-0.063397, yaw=1.103511
Set camera angle to: 0.780000
1300
1301
Final frame x=234 y=227 w=45 h=45
Using pose: xyz=[3.415957 -7.723545 0.907761] orientation=[-0.005402 -0.063397 1.103511]
In combination with view angle 1.380944 0.809511 and distance 23.000000
Object offset calculated at: [2.994253 15.581522 16.650844]
Reporting estimated object location at: [6.410210,7.857977,17.558605]
Reporting artefact cubesat at position 6.410000 7.860000 17.560000
result: True
Loc: [3.457205 -7.635774 0.919047] [0.001396 0.153764 1.078963]; Score: 5
0:01:32.597836 turn - timeout at -63.9deg
1400
1401
0:01:34.662325 stop at 0:00:02.064489
Sleep and finish

Ptal jsem se, co se skrývá za Someone else is driving a jedná se přepínání režimu náhodné procházky a navigaci směrem na detekovaný artefakt.
Je to prý opakovatelné, tak si to zkusím pustit také.
p.s. víte, že mají na Měsíci kanalizaci? Po dnešní projížďce na kole jsem už pochopil, co mi ty volatiles nejvíce připomínají … poklopy u kanálů!

13. červen 2020 — Měsíc po měsíci

… na rovinu ono je to už měsíc a deset dní, co jsem psal poslední report a je tam jistá korelace s tím, že projekt Moon systematicky posouval Franta sám …
10. května 2020 — Já jsem hotov, co děláš ty? … tak toto poslal s přiloženým obrázkem:
Tj. po lokalizaci a úspěšném reportování pozice satelitu se robot vrátil na základu, oznámil, že je doma (dalších 5 bodů) a pak vyhledal basemarker s logem soutěže, upravil orientaci roveru a reportoval konec (poslední 3 body). Celkem tedy 13 bodů, což je i maximum v této úloze.
Pak jsme trošku řešili infrastrukturu pro request/response požadavky. Ono totiž poměrně hodně věcí je ve Space Robotics Challenge Phase 2 řešeno pomocí ROS Services: reporty, šlápnutí na brzdu, změna náklonu laseru s kamerou, dotaz na globální souřadnici robota (je možné se zeptat nejvýše jednou) a pod. No je to ještě na TODO listu … testovali jsme asi už tři verze, ale stále to není „to ono” (za mne, tj. jsem navíc brzda :-(
2. června 2020 — 13 bodů za 30 sekund … aneb Franta posunul spolehlivost detekce modrého trojúhelníka a pak už je to na mne „skoro moc rychlé”
11. června 2020 — R2 bod, Máš tam logy od prvního bodu v R2, ale byl to boj. Nakládalo to jeden volatile asi 6 minut (čím jsi dále od středu, tím toho nabereš míň a musíš to vícekrát opakovat).
Ona druhá úloha je možná nejtěžší, protože vyžaduje kooperaci dvou robotu. Bagr (excavator) musí bagrovat dostatečně blízko pozice „naleziště” a pak obsah lžíce vysypat na korbu náklaďáku (hauler) a to opakovat dokud nenasbírá požadované množství. Viz video kopání a nakládání.

Skyline Lokalizace

Jedna z klíčových dovedností je schopnost robotů se lokalizovat (navíc v systému NASA, protože jinak nezískáte body na nalezené artefakty ani nevíte kde kopat v druhé úloze). Na gitlab issue #159 (private) se poměrně široce diskutovalo téma o spolehlivosti odometrie a penalizované „nápovědy” za dotaz „kde jsem?”. Výrazně jsem se tomu bránil (a Franta nakonec souhlasil), jen zatím nemáme v kapse spolehlivé lokalizační řešení … a rozhodně to není jednoduché.
Jeden návrh byl hledat vrcholy meteoritů (šutrů), které jsou při každém běhu náhodně po testovacím prostoru rozmístěny.
Detekce vrcholu
Detekce vrcholu
On ten přechod nebe a povrchu Měsíce je relativně dobře definovaný, pokud není obrázek úmyslně zašuměný.
No daleko jsem se neposunul a ano, např. v kráteru, kde nic z okolí vidět není je jediná možnost vyjet ven (vylézt na strom, „Jeníček a Mařenka TM”) a rozhlédnout se tam. Robot nutně bude i v situacích, kdy opravdu nebude vědět, kde se přesně nachází.
Nicméně jak vidíte, Frantu to nezastavilo a vlastně splnil všechny tři úlohy. Pokud by k tomu byl již i ROSbag, tak možná splňujeme podmínky kvalifikace … asi by to chtělo prověřit.
Ještě přikládám mapku meteoritů z Gazeba od Franty … jsou pouze tři druhy:

15. červen 2020 — The threshold score is 86

Necelých 24 hodin po té, co jsem zveřejnil „měsíční report” přišel mail od Automated Education Robot:
Hello Team Leaders,
An update has been made to the Rules Document for the Qualification Round that provides more clarification around scoring and tiebreakers. Attached, you will find the current Rules Document, and it will also be posted in GitLab and the Space Robotics Challenge site.
The specific changes to the doc are in section 4.0 and 8.1, but here's a quick summary:
  • In order to qualify for the Competition Round, you must meet a threshold of 86 points in the Qualifying Round across the three tasks as well as being in the top 25 teams
  • Each task will be worth $5,000, and you are eligible for all $5,000 if you have a score greater than 0
  • We added a second and third tiebreaker that we don't expect to use, but are happy to have in place.
For complete details, please review the document. All updates are in red. Best, AER
Mimochodem, pravidla jsou volně ke stažení na http://www.spaceroboticschallenge.com.
Neovládl jsem se a napsal NASA jestli si z nás dělají srandu?! (#175, private repo). A vypadá to, že to nebyl omyl: The threshold of 86 is a function of the total maximum points and our expectations of a minimum "passing" score for the simulation to be valuable to NASA, thus the odd number.
Task 3 je za 13 bodů max a toho již Franta opakovaně dosáhl, tj. tam už toho více nevymačkáme. 86-13=73 … za nalezeni volatile a reportovaní lokace s toleranci 2 metry v tasku 1 jsou 2 body. Za vykopání a naložení pak jeden bod na osvícené straně a dva body na odvrácené straně. Na rovinu si myslím, že získání toho prvního bodu už je úspěch a většina týmů to nedá. Ale teď nově za kvalifikaci NASA nikomu nedá ani cent, pokud nedosáhne nedosažitelné hranice … i jeden soutěžící počítal, když bude mapovat prostor maximální rychlosti jaká je šance, ze objeví 2/3 artefaktů (podle Franty je úplné maximum 110 bodů, ale to je třeba vykopat i artefakty, které se nachází na strmých svazích kráterů nebo pod meteority …
NO COMMENT

18. červen 2020 — Arabské tržiště

No snad nikoho (zase) neurazím, ale trošku mi to dohadování s NASA připomnělo arabské tržiště. Nejprve neuvěřitelně přepálená cena a když se zákazník chvíli dohaduje, tak to postupně zkonverguje k nějaké rozumné částce: After taking another look, a threshold score of 20 seems fair for the Qualification Round.. Tak jo (*)
To nás vrací zpátky do hry, resp. to nám dává smysl pokračovat ve hře o $15k za kvalifikaci. Franta mezi tím připravil pull request s verzi 0 pro druhou úlohu, která získá 0 až 3 body. Suma sumárum 4 + 3 + 13 = 20 … ty jo, oni nás snad vzali jako referenci.
Ještě možná stránka ze včerejšího callu: Astrobotic wins NASA contract to deliver VIPER lunar rover … tak to možná má smysl dělat …
(*) viz knížku Cesta/Cormac McCarthy