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: 17/1/2020 — Robotika vítězí v kvalifikačním kole NASA Space Robotics Challenge


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

14. červenec 2020 — Seed, Bulk and Rock

Několik lidí se mne nezávisle ptalo, jestli už jsme NASA challenge vzdali — je to dobra indikace, že bych měl updateovat tento blog. Nevzdali, konec update.
Těma dvaceti body na kvalifikaci to neskončilo. Skoro bych to nazval Impérium vrací úder aneb když si soutěžící vyhádali snížení počtu bodů pro kvalifikaci, tak pojďme změnit simulátor i celý princip vyhodnocovaní! Dobrý trik co?! Myslím, že se máme ještě co učit … ale třeba nejsou tak zlí úmyslně
Simulace je teď 10x rychlejší, resp. místo po 10ms se simuluje po 1ms. Všechny senzory jsou zašuměné (to je prý motivace pro redukci simulačního kroku, aby měl člověk zase šanci to „odšumět”), ale důsledek je ten, že simulace dříve běžící skoro v reálném čase teď je až 10x pomalejší. Pak jeden 45min test na starém stroji může zabrat skoro den … no prima.
Druhá zrada je ve změně tření — teď to všechno klouže jak na ledové ploše a je třeba jezdit velmi opatrně. Na druhou stranu po integraci primitivního PID kontroleru na motory už je to zase skoro použitelné. Změna byla i v kloubech u bagru, ale to nevím, zda už opravili?
A pokud by toho bylo málo, tak se změnil i povrch samotný. Přibyly nové typy kamenů, vše vypadá nějak texturovaně … má to pomoci vizuální odometrii, ale nevím. Také dříve špičaté kameny jsou teď zaoblené, tj. hledání vrcholů, resp. jejich pozice už tak stabilní není.
Proč název Seed, Bulk and Rock aneb Semínko, Dávka a Kámen?
Tento obrázek mi poslal včera Franta, jako jeden z výstupů dávkového testování (viz moon/bulk_test.sh). Prostě to pouští dokola simulace s rozdílným seed pro náhodný generátor Měsíčního světa. To je nová feature, za kterou bych NASA pochválil, i když není 100% spolehlivá. Prostě než testovat na úplně náhodném světě, tak můžete zadat seed parametr a pro stejné číslo by to měl být identický svět. Simulace ale rozhodně stejná není, protože i při vypnutí šumu (další feature) rover dopadne na jiné místo nebo se trošku sklouzne, než nastartuje váš řídící program:
M:\git\osgar>python -m osgar.logger moon-round1-200711_202050.log –stream rpc.response
0:00:00.625548 16 ['0xe3e70682c2094cac629f6fbed82c07cd',
  'origin -1.603658 5.103922 1.096226  -0.182118 -0.014257 0.979283 -0.087379']
0:23:24.037823 16 ['0x1846d424c17c627923c6612f48268673',
  'service [/vol_detected_service] responded with an error: ']
0:29:51.270197 16 ['0x12e0c8b2bad640fb19488dec4f65d4d9',
  'service [/vol_detected_service] responded with an error: ']
vs.
M:\git\osgar>python -m osgar.logger moon-round1-200712_205451.log –stream rpc.response
0:00:00.278639 16 ['0xe3e70682c2094cac629f6fbed82c07cd',
  'origin -1.831382 5.065773 0.974008  -0.167647 -0.008114 0.981975 -0.086912']
0:07:14.362503 16 ['0x7c65c1e582e2e662f728b4fa42485e3a',
  'service [/vol_detected_service] responded with an error: ']
0:13:18.138290 16 ['0x37ebdcd9e87a1613e443df789558867f',
  'service [/vol_detected_service] responded with an error: ']
… prostě je tam rozdíl a naše „náhodná procházka” pak potká trošku jiné „poklady” (volatiles), přestože jsou snad na stejných pozicích.
Co dál? Už se těšíme na zimu, resp. na freeze nebo lépe NASA code freeze. Prostě okamžik, kdy už tu simulaci přestanou měnit a tak váš kód může fungovat déle než týden do nového NASA release. Původně měl být 1. července a nebyl. Další plán je 20. červenec, tak se necháme překvapit …

15. srpen 2020 — Shutdown for Hurricanes

Včera přišel mail:
Due to impending weather as a result of Hurricanes Marco and Laura, NASA JSC (located in Houston, TX, USA) needs to shut down power to the Center’s servers.
As a result, the SRC Development Team will be unable to access the competition servers until power is restored. Development, support and deployment is paused until the storms pass.
We hope everyone in the path of this storm stays safe, and we will keep all of the teams updated as we are able.
… jak člověk nechce sledovat zprávy, tak je pak občas překvapený …
V kontextu soutěže je asi ještě důležitější mail, co poslal NASA Automated Education Robot před čtyřmi dny:
As we are nearing the qualification round deadline, and finalizing the infrastructure to receive your submissions, we need the following pieces of information from each team ...
We will be opening the submission repo for teams to push their submission images on August 21, 2020, 4:00pm Central Time (ideally, as this email is being sent). The submission scripts provided should push to this repo on command.
The Qualification Round closes to submissions on September 16, 2020, at 5:00pm Central Time. At this time, competitor access to this repo will be revoked.
We will be grading submissions over the remainder of the calendar year, with results to be announced in early January 2021. Teams will receive their scores at least two weeks prior to the announcement being made. From the moment scores are sent to each team, the Team Leader has three days to submit an appeal...
tak už je to tady …

13. září 2020 — NASA update a R2 video

Už mne pomalu přišlo líto času si stěžovat na vesmírnou agenturu … na druhou stranu není jednoduché se všem zavděčit. Poslední „zářez” byl, když v rámci submission window zablokovali přístup na jejich dockerhub, kam soutěžící měli uploadovat svá řešení. Myslím si, že Frantova domněnka, že je to z důvodu velmi špatné bezpečnosti — ostatní týmy mohly nejen vidět ostatní řešení, ale nejspíše si je i stáhnout a „kouknout se dovnitř” (netestováno). To že submission script ani teď nefunguje, už mne vůbec nevzrušuje … a mimochodem konec měl být za dva dny. Výjimečně mne potěšil mail, že We recognize that this is an additional layer for your submission, and in the spirit of supporting the teams, we are extending the submission deadline to Friday, September 18th, 5pm Central Time. Přidali tam možnost (nepovinnou) šifrovat ten docker image — detaily jsem nestudoval a ani to nemáme v plánu, když i zdrojové kódy jsou za nás k dispozici.
Minulý týden dělal Franta „testovací submission” a to jsme byli třetí tým, který to na dockerhub nahrál. Teď už je to nepřístupné a je pouze vidět, že někdo z scheducation/srcp2_qualification_submissions stahoval image 43x.
Aby tento „měsíční report” nevyzněl tak plně negativně, tak bych zveřejnil Frantovo 45min video pro Run 2, kdy robotický bagr (excavator) spolupracuje s robotickým náklaďáčkem (hauler) a společně se snaží vytěžit co nejvíce volatiles, jejichž absolutní pozice dostanou jako vstup.
V tomto pokusu získali společně 6 bodů, což by na kvalifikaci stačilo (za předpokladu 13 bodů z R3 a alespoň jednoho bodu v R1).

19. září 2020 — 15+ Qualification Submissions

Game is over — v pátek organizátoři uzavřeli „okénko pro odeslání řešení” — On 9/19/2020 2:01 AM, srcp2-dev-1 wrote: The submission window for the SRCP2 Qualification Rounds is now closed. We would like to thank all the teams who participated, and we look forward to assessing the results.
Den před uzávěrkou bylo pouze 7 podaných řešení, v pátek pak 15 a těsně před uzávěrkou přibyly ještě další 2. Teď už jsou stránky nedostupné, takže jak to bylo doopravdy se dozvíme asi až v lednu 2021.
Za sebe jsem zvědavý, jak to nakonec budou vyhodnocovat. Pokud pro každé kolo zkusí tři různé světy a do bodování vezmou maximum, tak snad nějaká šance získat nutných 20 bodů je, ale čert ví, co si ještě vymyslí. Co jsem psal Frantovi — pokud bych tušil, jak se pravidla a simulátor od zahájení soutěže změní, tak bych do toho nešel. Ale zase to byl dobrý protipól DARPA SubT, na který si už tak moc nestěžuji.
p.s. možná je tady teď vhodné místo veřejně poděkovat Frantovi, že to, na rozdíl od mne, nevzdal a dotáhl to až do konce … díky!!!

13. prosinec 2020 — NASA leak

Jak jsem psal v září, nějaké užitečné informace o soutěži se nejspíše dozvíme až v lednu 2021. Na SRC2 fóru byl před měsícem dotaz, jestli alespoň nemůžou prozradit jaké světy (random seeds) použili pro vyhodnocení? Zatím stále bez odpovědi. Co jsem ale v daném příspěvku přehlédl byl odkaz na facebook. Je tam video, kde už první náhled mne vytáčí
Proč? No připomíná vám to rovery z kvalifikačního kola? Případně ta základna? Ani náhodou! Tj. všechny detektory bude třeba ladit znova (já vím, já to nedělal, tak ať si nestěžuji). To samé původně výrazný přistávací modul je teď sotva vidět, sigh. (jediný garantovaný landmark)
V textu je: Our judges are currently reviewing the qualifying round submissions for the Space Robotics Challenge, presented by BHP. We had 458 participants competing in 123 teams from around the world. We can’t wait to see who qualifies for the next round!, tj. 458 účastníků a 123 týmů … zpětně mi to přijde trošku nadsazené, ale je možné, že to jsou týmy, co vyplnili registraci, ale fakticky nikdy nic neudělali.
No to jsem tedy zvědav, co si ještě vymysli!
Jo a ten leak — někdo si v tom videu na konzoli všiml, že to běží pod jiným ROSem a jiným Gazebem:

25. prosinec 2020 — A Holiday Gift from Us to You

NASA jsou fakt vtipálci. Na vánoce psal Automated Education Robot:
If you are receiving this email, then we are excited to inform you that you will be invited to participate in the Competition Round of the Space Robotics Challenge starting in January! This is not the official announcement, but we thought we'd share the good news with you during the holiday season as a special gift.
tj. pokud jste dostali tento mail, tak to znamená, že se můžete účastnit soutěžního kola SRC, které začíná v lednu! To zní dobře, protože to znamená, že Robotika In Space skončila do dvacátého místa (postupuje pouze 20 týmů z kvalifikace).
On Sunday afternoon, a scheduled email will go out to each team leader discussing their scores and any money that may be awarded. As a part of that email, we will discuss an appeal process if you have evidence that your scores may not reflect your work. In short, there will be a form through which you can submit an appeal. The deadline for the appeal will be 5 pm CST, Wednesday, December 30, 2020.
(ano, jsem si vědom, že tato informace nejspíše neměla být zveřejněná a tak jí asi brzy nahradím)
That's all for now. Happy Holidays, and we look forward to the Competition Round!

17. leden 2021 — Robotika vítězí v kvalifikačním kole NASA Space Robotics Challenge

Six teams completed the three tasks or met the threshold score for the maximum award of $15,000:
  • Olympus Mons, Barcelona, Spain (U.S. Citizen)
  • Robotika, Annapolis, Maryland
  • Runaround Robots, Cedar Falls, Iowa
  • Team Capricorn, Worcester Polytechnic Institute, Worcester, Massachusetts
  • Team Mountaineers, West Virginia University, Morgantown
  • Walk Softly, Niskayuna, New York
One team completed two tasks and qualified for a $10,000 award:
  • Mingo Mountain Robotics, Kettle Falls, Washington
Nine teams completed one task qualified for a $5,000 award:
  • AMI Technologies LLC, Edina, Minnesota
  • Future Robotics, Franklin, North Carolina
  • God & Golem, Inc., New York
  • Lycanthropic Lunar Lunatics, Ramona, California
  • MoonrAlders, Johnstown, Colorado
  • Team Swarmathon, University of New Mexico, Albuquerque
  • The University of Adelaide, Australia (U.S. Citizen)
  • UHCL/SJC, University of Houston – Clear Lake and San Jacinto College, Texas
  • Whalers, Nantucket, Massachusetts
Six additional teams qualified to compete in the competition round:
  • Columbia Space Initiative, New York
  • Team Schmidty, Bridgeville, Pennsylvania
  • The Luminosity Lab, Tempe, Arizona
  • Team Olrun, Evansville, Indiana
  • PRIME, Cypress, Texas
  • Purdue-Hongik Team, West Lafayette, Indiana