DTC Phase 2
jak zvýšit šance na přežití?
DARPA přišla s novou „výzvou”/soutěží: DARPA Triage Challenge. Triage znamená třídění raněných u hromadných neštěstí, přírodních katastrof nebo na bojišti. V zásadě jde o to, že podle úrovně zranění šance na přežití rychle klesá. Mluvíme o zhruba o prvních 15 minutách. Naděje, že v tomto čase bude dostatek kvalifikovaných doktorů je mizivá. Tak nastupují roboti a AI. Update: 17/8/2025 — DTC Systems 2 - W33 (zbývá 6 týdnů) - Skupina 2, 10 týmů
- https://triagechallenge.darpa.mil/ — oficiální stránky soutěže
DARPA Triage Challenge má podobný časový rozvrh jako již ukončená SubT Challenge.
Soutěž bude trvat 3 roky, jsou tři základní kategorie (Primary System, Primary Virtual a Secondary Data) a účastníci
jsou jak DARPA sponzorované týmy, tak self-funded týmy.
Obsah
- 241213 - Pravidla - Event 2
- 250103 - NDAA 2025
- 250319 - Virtuál zrušen
- 250629 - DTC Systems 2 - Robotika
- 250708 - DTC Systems 2 - W27 (zbývá 12 týdnů) - skryté předpoklady
- 250713 - DTC Systems 2 - W28 (zbývá 11 týdnů) - Helena, Audio, grid_map, ...
- 250720 - DTC Systems 2 - W29 (zbývá 10 týdnů) - nedotažené konce
- 250727 - DTC Systems 2 - W30 (zbývá 9 týdnů) - grid map, pose, audio
- 250803 - DTC Systems 2 - W31 (zbývá 8 týdnů) - Matty UGV qualified!
- 250810 - DTC Systems 2 - W32 (zbývá 7 týdnů) - ESP32 IMU FW
- 250817 - DTC Systems 2 - W33 (zbývá 6 týdnů) - Skupina 2, 10 týmů
Blog
13. prosince 2024 — Pravidla - Event 2
Pravidla pro druhý rok DTC jsou konečně oficiální (*):
- System Competition
- Data Competition
- (pravidla pro Virtual Competition ještě nějsou k dispozici)
Asi největší překvapení pro System je, že se DARPA rozhodla už v tomto roce přejít na plnou autonomii!
(to skoro stojí za screenshot, jak nevinné přídání slůvka not změní úplně charakter soutěže)
Také „noční jízda” bude asi zábava: It is anticipated in Challenge 2 that there will be a night course.
Aby šokované týmy trošku uklidnili (ono už pootevření „zadních vrátek” že tým bude moci number of times
zasáhnout je výrazné zjednodušení oproti první verzi pravidel pro rok 2, kde nebyl zbytek modrého textu),
tak se i zvedá hladina odměn:
Workshop 2
- Event Qualification: 12/5/2024 - 1/5/2025 (konec za 3 týdny!)
- Event Date: 3/9/2025 - 3/15/2025 (březen!)
(*) — neoficiální alfa verze byla zveřejněna před týdnem na DTC fóru
(pro přístup je třeba login)
3. ledna 2025 — NDAA 2025
23. prosince 2024 president Biden podepsal National Defense Authorization Act for Fiscal Year 2025. Přišlo mi „vtipné”, že ani po několika dnech
není jasné, jaká jsou tedy omezení na UGV (Unmanned Ground Vehicle) v rámci DARPA Triage Challenge.
… ale už to pomalu chápu! Jen pro představu to má 794 stran …
AI to úplně růžově nevidí:
The National Defense Authorization Act for Fiscal Year 2025 (FY25 NDAA) includes several key restrictions and provisions specifically targeting unmanned ground vehicles (UGVs), particularly those manufactured by foreign entities, especially from China. Here are the primary restrictions:
Key Restrictions on UGVs
1. Prohibition on Procurement:
- The FY25 NDAA mandates a study and report on the Department of Defense's (DoD) use of Chinese-made UGVs. Following this assessment, it prohibits the procurement and operation of covered UGVs from foreign adversaries, particularly those identified as posing cybersecurity risks [1][2][3].
2. Supply Chain Risk Assessment:
- The Act requires the DoD to disassemble and analyze components of commercially available UGVs from foreign adversaries to identify supply chain risks. This includes a comprehensive evaluation of UGVs to enhance the resiliency of the domestic supply chain [3][4].
3. National Security Risk Review:
- A provision directs national security agencies to assess drones from companies like DJI and Autel Robotics, potentially leading to their inclusion on the Federal Communications Commission’s (FCC) Covered List if deemed a national security risk. This would prevent these companies from obtaining FCC authorization for new models [1][5].
4. Long-term Sunset Clause:
- Beginning one year after the enactment of the NDAA, the DoD is prohibited from procuring or operating UGVs manufactured by entities in foreign adversary countries. This aims to phase out reliance on potentially insecure technologies over time [3][4].
5. Increased Oversight and Accountability:
- The legislation emphasizes enhanced oversight regarding the procurement processes for UGVs and other unmanned systems, ensuring that any acquisitions align with national security interests [1][2].
These restrictions reflect a broader strategy to mitigate risks associated with foreign technologies in defense operations, particularly amid growing concerns over cybersecurity and supply chain vulnerabilities.
Citations:
- [1] https://www.auvsi.org/auvsi-applauds-fy-2025-ndaa-support-autonomy-uncrewed-systems-supply-chain-security
- [2] https://www.auvsi.org/auvsi-calls-congress-ban-dod-use-unsecure-autonomous-vehicles-national-defense-authorization-act
- [3] https://www.wiley.law/alert-NDAA-Provisions-Impacting-Governments-Contractors-and-Their-Supply-Chains
- [4] https://ucdrones.github.io/regulatory-updates.html
- [5] https://dronelife.com/2024/12/19/ndaa-fy25-key-takeaways-for-the-drone-industry/
19. března 2025 — Virtuál zrušen
Koukám, že už je ta informace oficiální:
After much consideration, we have made the difficult decision to discontinue the DARPA Triage Challenge Virtual Competition for Year 2.
This decision was not made lightly, and we understand the impact it will have on teams and the community.
… nejspíše to není poslední krok jak „ušetřit”, ale to uvidíme později …
29. června 2025 — DTC Systems 2 - Robotika
OK, asi je pomalu čas oprášit (nebo naopak zadupat do země) původní myšlenku, se kterou vznikla Matty série. Před čtvrtečním callem s DARPA
jsem si narychlo nastudoval ICD Systems, aneb komunikační protokol, jak reportovat
nalezené oběti. Stejně tak jsem si stáhl testovací server a přiohnul reportování z SubT:
(osgar) md@md-ThinkPad-P50:~/git/osgar-apps/dtc-systems$ python report_dtc.py Gas 0 0 0 Reporting: Gas Get Status b'{"clock":6.889369,"run":"Run2","team":"Test Team","user":"testuser"}' Report {'casualty_id': 1, 'team': 'Robotika', 'system': 'Matty M01', 'location': {'latitude': 10, 'longitude': 20, 'time_ago': 1}} b'{"run":"Run2","team":"Test Team","user":"testuser","system":"Matty M01","clock":8.900963, "report_id":"e2ca8f47-da17-4f9b-b258da52389ec7dd","report_timestamp":"2025-06-26T13:33:44.083908", "report_status":"accepted","casualty_id":1}' Traceback (most recent call last): File "report_dtc.py", line 128, inprint(score(artf_type, args.x, args.y, args.z)) File "report_dtc.py", line 104, in score report_artf(artf_type, x, y, z) File "report_dtc.py", line 63, in report_artf assert response.status_code == 201, response.status_code AssertionError: 200
… no asi by z toho úplně 2x nadšený nebyli, ale za mne je důležité "report_status":"accepted". Ono tedy během callu z nich vylezlo, že bude ještě
další meeting, kde budu mít demonstrovat pomocí screensharing automatický report a Control Center pro mediky, ale … TODO.
Včera se zárověň otevřelo „registrační
okno” na Systems Challenge 2, která začíná za 3 měsíce, a součástí přihlášky jsou i demonstrační videa jak robotů, tak právě tohoto reportingu.
Co mne na callu ale překvapilo (ono, moc jsem DTC posledních X měsíců nesledoval, virtuál padnul, data jsme pustili k vodě sami a system je "trošku" úlet), že celý
soutěžní prostor bude zasíťovaný Wi-Fi (5GHz) a bude určena pro soutěžící! Prostě pravý opak toho, co jsme zažili v podzemí na SubT.
To najednou dává možnost přímo streamovat ze všech robotů aktuální video … no nice to have. Stále bych se držel LoRA (Long Range Radio) malých paketů jako
základ pro reporting (pokud vůbec bude co reportovat).
A příprava? Myslím si, že Matty platforma prošla dostatečnou zatěžkávací zkouškou:
- Robotem rovně 2025 - test neuronky, baterky, drncání, AP přes mobil
- Field Robot Event 2025 (Itálie) - horko, prach, stres, noční jízda
- RoboOrienteering 2025 - neznámý terén, GPS, hledání obětí (kužely), výpadek napájení, hodinová jízda
Co dál? Asi hlavně respektovat získané zkušenosti ze SubT, co ze na RoboOrienteeringu „připomněly”, aneb symetrie je krásná vlastnost a pokud se za vámi
nezhroutí strop (oblíbený prvek z finále), tak je možné z každé situace vycouvat. Toto by se rozhodně hodilo v první jízdě.
Dále bych chtěl doplnit geofence (to už asi také mělo být na RO25) a kompas (to už raději … nic neříkam). Pak by robot měl alespoň tušit, zda geofence
opouští nebo jede po její hranici …
8. července 2025 — DTC Systems 2 - W27 (zbývá 12 týdnů) - skryté předpoklady
Minulý týden se to celkem pěkně rozjelo. V úterý jsme s Jakubem dmontovali postříkovač z M02 a připravili tak zeleného Mattyho na další soutěž.
MartinL se pustil do tisku růžového M04 a s Frantou jsme si vyjasnili
nástroje co používal ve Virtuálu. Také jsem udělal první „noční jízdy” abych si potvrdil, že na FRE kamera opravdu vypadávala kvůli slabému
zdroji. Dostal jsem z ní právě jeden snímek:
![]() Zombie s lidarovým vzorem |
Zbytek videa je už jen černo. Lidar jsem vypnul a nechal pouze IR přisvit a to vypadlo celkem dobře (viz mini-video). Zavěr tam slavný není,
ale ono nasvícená bílá zeď moc triangulačních bodů nedává. Nárazníky to jistí! Jinak oak.color stream je zase nepoužitelný a je třeba pro detekce použit šedotónové obrázky z levé nebo
pravé kamery. OAK ale asi nedává všechny 3 streamy najednou, takže je třeba tu barevnou kameru trošku ošidit (viz Jakubův PR #1020
na balení obrázku až na PC).
Zvuk v OSGARovi dosud nemáme, tak jsem se chtěl inspirovat ROSem, ale
v zásadě tam mají AudioData (pole bajtů) a
AudioInfo (popis kódování, vzorkovací frekvence a pod). V zásadě „proč ne?”
No a pomalu se dostávám k těm skrytým předpokladům, aneb jsem nepoučitelný a mám to i tady v historii … hmm, tak nemám. No prostě začátkem března byl workshop, kde by člověk
vše viděl z první ruky, a je to velmi užitečná zkušenost — viz SubT - Colorado. Leč tělo úplně nesouhlasilo a nastoupil „oblíbený” dávivý kašel
při každé myšlence na DTC. Teď to zatím kašel není, ale antibiotika na 14 dní ano.
13. července 2025 — DTC Systems 2 - W28 (zbývá 11 týdnů) - Helena, Audio, grid_map, …
Pokud jste přílišný optimista, jděte testovat. Ono vás to přejde.
Aneb teď jsem byl chvíli testovat M02+M03 a nějak mne ten optimismus přešel. Ale snad si ještě vzpomenu na okamžiky, kdy to vypadalo pozitivně …
Týden začal antibiotikama. Út a St jsem kompletně prospal. I teď bych si skoro šel lehnout, a měl bych jít, … prostě špatně se bojuje na mnoha frontách.
Na středečním callu jsme se bavili, že bych to měl pojmout, stejně jako RoboOrienteering, jako společenskou událost
a že by to pak nebyl takový stress a možná bych si to i trošku užil. A když nejsou lidi, tak až zapojím AI, studenti na FRE
to také dělali, a třeba se mi uleví. Tenkrát jsme nového člena týmu pojmenovali Elena (ChatGPT), tak ja bych to jen o H prodloužil na Helena (Gemini 2.5Pro).
Možná to bylo ještě tu středu, kdy jedna z úloh na seznamu je rozchodit audio v OSGARu. V práci nás stejně neustále tlačí do používání AI, tak jsem to zkusil.
Jirka používá PyAudio, tak jednoduchá úloha byla, „napiš mi program v Pythonu, který pomocí PyAudio nahraje zvuk” (toto není přesný prompt, přeci jenom jsem
to psal v EN). Podle očekávání i Gemini 2.5 Flash (?) to dala bez zadrhnutí. No a pak tak ze srandy jsem připsal „a teď na to udělej driver do OSGARa”. Jako
Flash dost halucinoval (např. v OSGARu konfigurace v TOML opravdu není), ale když jsem přepl do Gemini 2.5 Pro, tak to vystřelila tak, že bych to snad
lépe nenapsal! A okamžité pocity hodně smíšené. OSGAR je open source, tj. vše je k dispozici, ale dokumentace je mizerná, takže je třeba jít do kódu. To Helena
dala. Ale návrhy proměnných, název třídy, návrh konfigurace … jak kdybych si to psal sám. … jediná drobnost byla, že to nefungovalo. Opravdu mne nebavilo
se s ní přít: I've double-checked the OSGAR architecture, and I can confirm that osgar.node.Node does not inherit from threading.Thread., když já vidím:
from threading import Thread class Node(Thread):
ale nechť má svoji pravdu. Připsal jsem tam svůj jednořádkový fix a bylo (viz PR #1024). Jako fakticky testováno je to
pouze na Win11, na ODroidu zatím pouze instalace a pokus, že to nespadne. Budu muset sehnat vhodný mikrofón se stereo (díky PavleS) jackem 3.5mm.
No a když jsem byl tak rozjetý, tak jsem si říkal, že zkusím úlohu, do které se nikomu nechce, ale mne by se to fakt moc hodilo — Python verzi grid_map od ANYmal.
Je v C++, podporuje různé vrstvy a mapě, ale pro mne základ by byla elevation map, kde bych integroval jednotlivé 3D hloubková data z Mattyho OAK-D kamery.
Myslel jsem si, že mne Helena pošle do háje, ale neposlala. Prý je to medium challenge a tak jsme střední dobu zápasili. Nakonec z toho něco vypadlo
(grid_map_py-0.0.1-cp310-cp310-linux_x86_64.whl), ale do gitu jsem to pořádně ještě neposkládal. Vlastně vůbec netuším jestli to co vzniklo je k něcemu použitelné.
Toto tvrzení lehce naznačuje můj stupeň pochopení. Rozhodl jsem se to dat do odděleného repositáře, který jsem před chvílí vytvořil zde,
ale zatím je to prázdné!
Jo ještě jednu úlohu jsem hodil na Helenu a to dala od A do Z, zapracovala připomínky a je to zamergeovaný
(PR #11, DTC Causality Report generation Ver0). Sice jsem si později přečetl, ze DARPA chtěla něco trošku jiného:
Teams must demonstrate a working user interface. This should include features such as marking
objects on a map and the capability to convey casualty features such as Severe Hemorrhage status. … no možná ještě Helenu poprosím, ať to trošku přepracuje.
Teď to jede z JSON reportů, které stejně musíme poslat, pokud chceme bodovat a obrázek situace, který je ale pouze někdy k dispozici. Ver0 vypadá takto.
No a to se obloukem pomalu dostávám k dnešnímu večernímu testování. Říkal jsem si, že bych přeci jenom měl nahrát videa Mobility - For ground systems, the movement must be over
uneven terrain to include dirt, gravel, and grass. The course should include at least two 90-degree turns.
Mám dva roboty, tak bych měl testovat s oběma najednou, ať pak těch pět není takový šok, není-liž pravda? První pozorování — dva roboty najednou v ruce neunesu.
Tak jsem je postupně dostal na louku a M02 se nepřipojil k AP (na mobilu). Sigh. No tak pojedu jen z M03. No a pak byly asi 3-4 pokusy jet 17m rovně zatočit o 90 stupňů
vpravo, dalších 10m, zatočit o 90 stupňů vlevo a ujet ještě 8 metrů. Louka je ale neposekaná, jen jsem vytrhal pruh na auto (a na roboty), takže se skoro vždy někde
zasekl. Peklo.
Demo2 - přejezd hromady štěrku byla brnkačka.
No a pak jsem si říkal, že zkusim denní jízdu v prostředí, kde bych později zkusil i noční jízdu. No to byla katastrofa. Ona M02 si to v mezičase rozmyslela a také se připojila,
tak jsem je oba „na divoko” pustil do „lesa”. Jako bude tam třeba seriózní koordinace všech členů! Vlastně i na SubT jsme roboty vypouštěli postupně, ale tam o čas až tak
nešlo. Tady je za 15min po všem.
Pokud stažená videa z momentálně vybitého telefonu nebo logy z robotů budou nějak použitelné, tak ještě doplnim … ale teď je čas opravdu jít do postele.
p.s. stahuji logy a evidentně jsem updateoval config jenom u jednoho z robotů (aby se používalo H.265 kódování videa:
m03-dtc-day-250713_170143.log 140,168,400 100% 5.90MB/s 0:00:22 (xfr#1, to-chk=16/26) m03-matty-followpath-250713_163357.log 20,199 100% 31.87kB/s 0:00:00 (xfr#2, to-chk=11/26) m03-matty-followpath-250713_163547.log 808,649,552 100% 5.69MB/s 0:02:15 (xfr#3, to-chk=10/26) m03-matty-followpath-250713_163908.log 1,285,921,633 100% 5.94MB/s 0:03:26 (xfr#4, to-chk=9/26) m03-matty-followpath-250713_164134.log
p.s.2 videa:
- mobility: https://youtu.be/MRd-9Yo-vDE
- gravel: https://youtu.be/R8eb7rZRSk0
- forest: https://youtu.be/xvHPZC8R630
20. července 2025 — DTC Systems 2 - W29 (zbývá 10 týdnů) - nedotažené konce
Uplynulý týden bych označil jako nedotažené konce, aneb jak by můj dědeček řekl: „Je to hotové, jen to dodělat”.
DTC User Interface
GUI je součastí registrace a už minule jsem zmiňoval, že si představují mapu obětí se zvýrazněním případů
s vážným krvácením. Toto psala zase Helena (viz PR #12). Je to zase mezi-verze, protože
podkladová mapa je z OpenStreetMap a to samo offline fungovat nebude. Pro aktuální demo viz video
(ne náhodou je unlisted)- Helena má přípravenou ještě verzi s PNG se souřadnicemi, kteoru pomocí GDAL převede
na mapové dlaždice … jako bylo by to pěkné, ale snad později.
Audio
Na této frontě je nový mikrofón (nejlevnější s odpovídajícím 3.5mm jackem) a test na
Odroidu. Selhal. Zvuk se sice krásně komprimoval, ale ano, byly to samé nuly. PavelS mi poslal výřez PDFka, jake je audio zapojené:
tj. nahoře je jack na repráčky, uprostřed je mikrofón a dole nějaka optická vychytávka … píše: „S/PDIF (Sony/Philips Digital Interface) je digitální
rozhraní pro přenos audia. Jako medium se používá koaxialní nebo optický kabel.” https://en.wikipedia.org/wiki/S/PDIF
No a teď proč to sakra nefunguje?! Levný mikrofón je sice mizerný, ale nějaký výstup dává (testováno ještě při callu ve středu). Drivery jsou, ale
při spuštění OSGAR narávání to hrozně nadává:
ALSA lib confmisc.c:855:(parse_card) cannot find card '0' ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
Na doporučení jsem se na OSGAR vykašlal a zkoušel přímo nástroje systému arecord -l … arecord: device_list:274: no soundcards found... . A to jsem
si myslel, že kabelovým mikrofónem se problemům s drivery a pod vyhnu. Chyba lávky.
Druhý den jsem trošku z nedostatku nápadů zkusil zvuk přehrát (aplay) a zase nic?! Jako jsem hodně sklerotický, ale toto mi už na Odroidu snad sakra fungovalo?!
A ano … fungovalo … ale když jsem byl přihlášen, používal monitor a kliknul na nějaký WAV nebo si pustil YouTube video! Aneb zde je ten zakopaný pes.
Pokud pustím příkaz přehrání tak dokonce čeká, dokud se v jiném terminálu nepřihlásím. Sigh.
Jirka pak psal, že Během boje s bluetooth jsem pulseaudio nahradil za pipewire + pipewire-pulse + wireplumber. Klíčový pojem muže být "system-wide pulseaudio".
Tak toto jsem také nedotáhl. Jedna z možnosti je v BIOSu změnit automatické přihlašování na startu, ale … tam se zase nedostanu z bezdrátovou klávesnicí. TODO
Pose Estimation
Jeden ze vstupů pro analýzu zdravotního stavu je pose estimation, aneb kde je hlava, ruce atd.
YOLO modely mají v sobě i variantu pose, jen ty modely jsou v PyTorch. A já bych
do OAK-D Pro potřeboval blob formát. Existuje Luxonis BlobConverter (sice deprecated,
ale stále funguje), ale co použít za vstup? Tady zase díky Jirkovi - ONNX je správný meziformát: https://docs.ultralytics.com/integrations/onnx/. Hmm, teď
čtu ten mail znova celý a jsou tam samozřejmě i další kroky a to jaké extra parametry případně použít a kde se na ONNX podívat … jj, ještě věci dotahovat
a maily číst do konce … tj. TODO je podívat se na ONNX velikosti vstupů a výstupů.
Noční vidění
Jeden z úkolů je demonstrovat autonomní navigaci v noci. A s tím je i spojená detekce zraněných v noci bez extra světla (IR přísvit je povolen). Propojení detektoru
na levou monochromatickou kameru je snad pořešeno (viz PR #1026), ale při testu se mi podařilo zlomit už
třetí nárazník! (až toto bude MartinL číst, tak se na mne naštve a zastaví výrobu M04 a M05 :-( https://youtu.be/C0kljPdg5js
Ani nevím, zda zmiňovat důvod, proč to tam napral do té žídle? Sigh. No to jsou ty mé copy and paste, aneb stále tam byl kus kódu, že „když nemůžeš tak přidej
víc” … ne to si s něčím pletu … myslím tím, pokud není cesta jeď rovně (aneb v poli si ji udělej, v reálném světě to ale občas bolí).
timeout … tj. ani tento zápis pořádně nedodělám. Chybí Terminátor, poděkování za tip Jirkovi roboty prostě nastartovat
v klidu doma, ale kód spouštět až na uvolnění STOP tlačítka (a notebook a telefon ani s sebou nebrat, stejně jako na Robotem Rovně 2025),
vtip proč mi včera v noci tak hloupě robot ujížděl do keřů (hint, bylo to severo-západním směrem), páteční call s DARPA … někdy příště.
p.s. alespoň jedna z delších nočních jízd — https://youtu.be/oqklhJHKlBg
27. července 2025 — DTC Systems 2 - W30 (zbývá 9 týdnů) - grid map, pose, audio
Dnes to bude stručné, aneb ani na report už teď nemam moc sil. Asi první zpráva je, že jsem odeslal Robotika - Systems přihlášku na CE2 (Challenge Event 2).
Žádná sláva, ale tento víkend jsem
byl pryč a uzávěrka je do konce července a to už nic lepšího nedoplním. Podle dřívější zkušenosti se sami ozvou, co jim přijde nedostatečné a pak budeme mít 10 dní na to
to nějak napravit.
Druhá zpráva je, že jsem si koupil naslepo nějaké hračky — chtěl jsem k tomu sepsat malý příspěvek a nazvat ho Zajíc v AlzaBoxu, ale ono to dopadlo relativně OK, tj. žádné drama.
Potřeboval jsem
koupit SSD disky do dalších dvou robotů M04 a M05 a tak jsem do košíku přihodil i „co by se mohlo hodit”. Jednak to byla numerická klávesnice na USB, která ma tlačítko Del.
A funguje, resp. pomocí této klávesnice se už do BIOSu Odroidu (řídící počítač pro všechny Matty roboty) dostanu. (asi kontext, že s bezdrátovou klavesnicí, co jsem
pořízoval na Elrob loni nikoliv)
Druhý zajíc byl C-TECH SPK-08R (klíčová slova byla reproduktor a jack 3.5mm). Je rozmně malinký 6x6x6cm,
ano trošku ďábelský, ale když jsem ho rozbalil, tak na jack zdířce byla ikonka sluchátek?! A ano, bez kabelu … který jsem tedy koupil v druhé vlně. Ale funguje to,
jen je po startu třeba 2x stisknout MODE (Bluetooth, Radio, AUX). A možná i ten Bluetooth bude použitelný? S notebookem i s Odroidem (v GUI) se to spárovalo
a pak to přehrávalo zvuky. A co více je tam i malý mikrofón! Uvidíme, časem, možná. (A ano, koupil jsem další mikrofón s jack 3.5mm, ale ten jsem vlastně ještě ani
nevyzkoušel)
Úprava navigace robota, že když to nikam nejde, tak místo „jeď rovně” se pořádně rozhlédni, pomohla v tom smyslu, že už Matty není tak sebe-destruktivní, ale … ve vysoké trávě nikam
nedojede.
Také jsem upravil offline reporting se staženými mapovými dlaždicemi (viz PR #13), takže teď se vlastně
může každý robot chovat jako webový server a poskytovat info, na jaké pozici koho detekoval, včetně obrázků detekcí, ale nejprve musí někam dojet …
Pro další posun mi už přijde nutná nějaká ta mapa, tak se trošku posunula i grid_map fronta.
Jako není to nic světoborného a k videu PavlaS z Výpustku to má ještě hooodně daleko, ale zase snad malý krůček vpřed.
Pro začátek jsem si postavil malý Stonehenge.
Simuluj zeď v depth kameře ve 2m vzdálenosti a opakuj v 360deg kruhu
No reálným obrázkům zatím vůbec nerozumim:
Jako už jsem si otočil souřadnice, kdy world má X dopředu, Y vlevo a Z nahoru vs. kamera X vpravo, Y dolů a Z dopředu, ale ještě tam bude zakopaný nějaký ten pes, možna
dva a více. Minimálně jsem si vědom, že update grid_mapy je asi natvrdo přířazení poslední hodnoty, takže když jich je tam více s různou výškou, tak vyhraje „libovoný”
(no jede se po řádcích, takže ten úplně dole s malou hodnotou). ATD.
Ještě jsem sliboval tu pose — no Jirka měl pravdu, že AI na toto téma ví všechno (perplexity):
I am trying to use yolo v11n pose model and it returns array 1 x 56 x 8400 - what is it?
The 1 x 56 x 8400 array returned by a YOLOv11n pose model represents the model's raw output for pose estimation.
Here's a breakdown of what each dimension signifies:
- 1 (Batch Size): This indicates that the model processed a single image at a time. If you were processing multiple images simultaneously, this number would change to reflect the number of images in your batch .
- 56 (Features per Detection): This dimension contains the information for each detected object, specifically designed for pose estimation . It's typically broken down as follows:
- First 5 values: These represent the bounding box coordinates and confidence score for a detected object (e.g., a person). This usually includes x, y, width, height, and confidence .
- Remaining 51 values (17 keypoints x 3 values per keypoint): These are the keypoints for pose estimation. YOLO models trained on datasets like COCO typically detect 17 keypoints (e.g., nose, eyes, shoulders, elbows, wrists, hips, knees, ankles) . Each keypoint is represented by three values: its x coordinate, y coordinate, and a visibility score or confidence . So, 17 keypoints * 3 values/keypoint = 51 values.
- 8400 (Number of Potential Detections/Anchors): This is the total number of anchor boxes or potential detections the model considers across the input image. Each of these 8400 entries contains the 56 features described above .
Post-processing is crucial to interpret this raw output . The 8400 potential detections need to be filtered and processed to extract meaningful results. This typically involves:
- Non-Maximum Suppression (NMS): To eliminate redundant bounding box detections that overlap significantly.
- Confidence Thresholding: To filter out detections with low confidence scores.
- Converting Coordinates: The raw keypoint coordinates might be normalized or relative to the bounding box, and often need to be converted to actual image coordinates for visualization or further use .
In essence, the 1 x 56 x 8400 array is the comprehensive set of predictions from the YOLOv11n pose model, which requires specific post-processing steps to yield the final detected objects with their poses.
… no ale zatím jsem s tím nic neudělal. :-(
A vlastně ještě jedna drobnost — OSGAR Matty driver teď publikuje joint_angle (PR #1027), což by se hodilo minimálně u toho „rozhlížení se
na místě”.
3. srpna 2025 — DTC Systems 2 - W31 (zbývá 8 týdnů) - Matty UGV qualified!
We are pleased to inform you that your system, Matty UGV, has qualified for the Challenge Event 2. We look forward to your participation in the coming weeks. … někdo by nám
mohl gratulovat, jiný by pochopil, že padla poslední externí záminka z kola vyskočit. Tak jo, už žádné výmluvy. Ještě uvidíme do jaké skupiny nás zařadí a jestli náhodou
nebudeme ještě v letadle, když už bude úvodní přednáška …
Pokud mám ještě chvíli zůstat u organizátorů, tak bych přihodil páteční Medic Panel Discussion Aug 1st @ 1-3pm EST. Byli to převážně vojenští doktoři co pomáhali před
čtyřmi lety při opuštění Afganistánu … no hrůza. Padala na mne „trošku” bezmoc a marnost. Jestli jsem to dobře pochopil, tak v dnešní válečné době se už ani doktoři nerespektují
a jsou jen další cíl. :-(
Je pak poměrně těžké se v klidu vrátit k našim hračkám, ale nějaký posun tam je. Minimálně na straně „výroby” MartinL ve středu hlásil, že růžový Matty M04 už je celý vytisklý
a oranžový M05 je cca v půlce. Za mne jsem nainstaloval základní systém pro Odroid M05 a M00 (M04 už jsem měl a používal jako base station). Ale jednotlivé knihovny by to chtělo
sjednotit a to jsem ještě neudělal. Také uvažuji, že opustím venv a naházím to vše do systému. Nebude to tak flexibilní, ale možná se tím některé kroky zjednoduší. Ještě nevím.
Několik večerů jsem zápasil s GridMap — asi pomalu tuším, co je zdrojem těch zmatků. Jednak jsou to numpy array, které pro obrázky je první rozměr výška a druhý šířka, tj.
[Y][X]. Do toho Helena používala souřadný systém kamery X-obrázek vpravo, Y-dolu, Z-hloubka. A konečně ta data z hloubkové kamery jsou např. pro boční stěny opravdu špatná. Ono to
tak nevypadá v 2D, ale po přepočítání do 3D to skoro není poznat … nebo tam mám ještě nějakou myšlenkovou mezeru, což je asi i pravděpodobnější. Zatím nic použitelného i když
nevím, zda jsem posledně zmiňoval pure Python implementaci (jen se chová trošku jinak než binding C++, takže špatný) … ale plán je nejprve rozchodit tu Pythonovskou,
jak si představuji a pak to naroubovat do té externí knihovny.
Helenu jsem také nechal včera nakódovat Geofence. Jako ten kód není špatný (toto je už druhá
iterace, kdy jsem jí požádal ať další knihovnu geopy nahradí jen vlastní funkcí) … ale myslím si, že je to špatně. Knihovna shapely podle mne netuší nic o projekci latlonů,
takže to bude potenciálně vybírat špatného kandidata, který je na hranici nejblíž k dané pozici. Možná to s ní ještě proberu, nebo si to přepíšu do planární projekce jako jsme to
dělali vždycky.
Teď ještě koukám na boxy ze základnou 56cm x 38cm — ano, rozměry Mattyho. 1st Checked Bag: Free of Charge, UPTO50LB 23KG AND62LI 158LCM,
2nd Checked Bag: 2133CZK, UPTO50LB 23KG AND62LI 158LCM + palubní zavazadlo CABIN BAGGAGE 12KG 1PC 115CM/CARRY ON UP TO 45 LI 115 LCM,
LB = Weight In Pounds, KG = Weight In Kilos, LI = Linear Inches, LCM = Linear Centimeters, MAX = Maximum Allowed, PC = Number of Pieces.
Jestli to skonči s počtem účastníků tak jak to vypadá momentálně, tak bych potřeboval do 23kg dostat 2x Matty tak, aby součet výšky, šířky a délky byl do 158cm. A na palubu
ještě jednoho. Výška je 24cm … 56+38+24 = 118. To moc nadějně nevypadá. Pořád je tu varianta oddělat kola a na místě to zase zpět poskládat, to by jít mělo. A na provezení deseti
baterek v příručním zavazadle se také těším …
No nic, půjdu shrabat morkou trávu a možná si trošku zajezdit s geofencí.
p.s. s tím přepravním boxem to možná nebude tak zlé — Perplexity nejprve komentovala
rozměr:
Dimensions to consider:
- Base length + width = 56cm + 38cm = 94cm
- Maximum height allowed = 158cm - 94cm = 64cm
So, the box could be as tall as about 64cm to keep within 158cm linear size total.
Custom cardboard boxes tailored to your size requirements can be a great option. Cardboard boxes can be made to exactly fit your device's footprint and provide up to the allowed maximum height. They are cost-effective, lightweight, and airlines generally accept them if within size limits. They lack wheels and handles but can be handled with airport carts and wrapped for durability.
Hard-sided travel cases or luggage designed for electronics might be available close to these dimensions but may have internal components like wheels and handles that reduce internal space or add weight. Most carry-on or checked luggage tends not to have such a large maximum height with your large base size.
… což po pravdě papírové krabice jsem prapůvodně v úvahu vůbec nezahrnul. Na upřesňující dotaz, kde poptat custom box v ČR doporučila Model Obaly a.s. a goodcase.cz. A papírová krabice
600×400×510 mm je k dispozici za 30Kč (tj. 15Kč na robota ). Přepravní box na zakázku ale na druhou stranu vychází na 7200Kč (38x64x55cm). Když jsem o tom přemýšlel, tak je ještě varianta
krabice pro každého robota a dvě svázat dohromady, aby tvořily jedno zavazadlo. Do této varianty by spadala verze D47
s rozměry 550x350x245 mm (vnitřní) a 582x385x277 mm (vnější) 47L 4,5kg. Tj. 9kg na pár a zbývá max 7kg na robota. S cenou 3 590Kč na robota se dostaneme na úroveň jako ten box na zakázku.
p.s.2 teď mi ještě přišel tip od MartinaL: Přepravka EURO s víkem 60x40x43,5 uzavřený úchyt za 580Kč.
10. srpna 2025 — DTC Systems 2 - W32 (zbývá 7 týdnů) - ESP32 IMU FW
Tak jo, je neděle 21:45 a já nemám sepsaný týdenní záznam. Z počátku týdne to vypadalo, že toho bude více než dost a že si to nezapamatuji, tak jsem to sem raději začal sepisovat rovnou. Skončil jsem
u Út a papírových krabic. Hmm, tak si můžete přečíst historii nebo skočit na zkrácenou verzi od St.
Po — v ponděli jsem si trošku hrál s BIOSem u M00, abych to měl stejně jako MartinL i PavelS, tj. po připojení napájení, aby rovnou naběhl systém a uživatel se přihlásil.
Malá numerická klávesnice (na USB kabel) fungovala bez problémů (tlačítko Del) a vlastně by byla pro změny v BIOSu dostatečná … až na jednu drobnost — chybí ESC aneb z
menu nebo i samotného nastavení se nedá dostat. Ale když je už člověk v nastavení, tak jde zbytek pořešit pomocí bezdrátové klávesnice. Ano, ještě ten detail, co je kde třeba změnit
jsem raději diskutoval s AI, protože jsem to sám narychlo nenašel: Chipset - PCH-IO Configuration - State After G3 změna z S5 state na S0 state.
Také jsem si hrál s přehráním zvuku — zase to nefungovalo, ale teď jsem tušil, že minimálně jedna zrada je v defaultním nastavení hlasitosti. Ano, byla tam 0! (netuším, kdo to vymyslel)
A když to hrálo přes repráčky s jackem i nahrávalo z mikrofónu (tam byla také třeba posunout šoupátko vpravo), tak jsem zkusil i Bluetooth:
robot@m00-odroid:~$ bluetoothctl Agent registered [CHG] Controller E0:E1:A9:3D:3E:BC Pairable: yes [bluetooth]# scan on Discovery started [CHG] Controller E0:E1:A9:3D:3E:BC Discovering: yes [NEW] Device 18:9E:40:7D:E4:7E C-TECH SPK-08 [bluetooth]# [bluetooth]# pair 18:9E:40:7D:E4:7E Attempting to pair with 18:9E:40:7D:E4:7E [CHG] Device 18:9E:40:7D:E4:7E Connected: yes [CHG] Device 18:9E:40:7D:E4:7E Modalias: bluetooth:v05D6p000Ad0240 [CHG] Device 18:9E:40:7D:E4:7E UUIDs: 0000110b-0000-1000-8000-00805f9b34fb [CHG] Device 18:9E:40:7D:E4:7E UUIDs: 0000110c-0000-1000-8000-00805f9b34fb [CHG] Device 18:9E:40:7D:E4:7E UUIDs: 0000110e-0000-1000-8000-00805f9b34fb [CHG] Device 18:9E:40:7D:E4:7E UUIDs: 0000111e-0000-1000-8000-00805f9b34fb [CHG] Device 18:9E:40:7D:E4:7E UUIDs: 00001200-0000-1000-8000-00805f9b34fb [CHG] Device 18:9E:40:7D:E4:7E ServicesResolved: yes [CHG] Device 18:9E:40:7D:E4:7E Paired: yes Pairing successful [CHG] Device 18:9E:40:7D:E4:7E ServicesResolved: no [CHG] Device 18:9E:40:7D:E4:7E Connected: no [CHG] Device 18:9E:40:7D:E4:7E RSSI: -62 [bluetooth]# [bluetooth]# pair 18:9E:40:7D:E4:7E Attempting to pair with 18:9E:40:7D:E4:7E Failed to pair: org.bluez.Error.AlreadyExists [bluetooth]# connect 18:9E:40:7D:E4:7E Attempting to connect to 18:9E:40:7D:E4:7E [CHG] Device 18:9E:40:7D:E4:7E Connected: yes Connection successful [CHG] Device 18:9E:40:7D:E4:7E ServicesResolved: yes [C-TECH SPK-08]# exit
ve zkratce spárovalo se to z cmd line a po přípojení (connect) to přehrávalo zvuky přes BT. JJ, je tam jedno ale —- BT mikrofón nefungoval (resp. stále nefunguje). A tam se vracíme na začátek
k „nahradit pulseaudio za pipewire + pipewire-pulse + wireplumber”, alespoň to byl výsledek Jirkova boje loni (?). A s tím jsem zatím nic nedělal.
Ještě jsem měl před odjezdem/přejezdem do Prahy trošku času a na stole mám několik LoRa (Long Range radio) krabiček ze SubT, takže to zkusím „oprášit”. V DTC je ale požadované,
aby veškerá komunikace byla šifrována, takže i LoRa zprávy. To je jednoduché, ne? Zavolám před odesláním nějaky encrypt() a po příjmu decrypt() a je to. Nebo ne? Nevím
kde to bylo, ale u nějakého jiného projektu mne zaujalo from cryptography.fernet import Fernet. A kde je problém? No LoRa posílá jen kratičké zprávy (do 40
znaků, jak jsme to měli nakonfigurované) a když zakódujete Hello, ASCII encryption!, tak dostanete gAAAAABokDr4oj0vhLWfu0rss2f6kcS0nG_-8NEE9IQZ3Q_WZTkOmoy27stTSw
y8o4VdvY7dcwtfsu8QA58JKmeHjZZd8bgcCL0bFuvSPI6BSHr4hI309l4=. Život je hořký!
Út — úterý byl „krabicový den” aneb šel jsem si do Uhřiněvsi (stále Praha) vyzvednout 3 krabice. Krabice stály pár korun, ale rozměr a případné balení a posílání úplně smysl
nemělo. No a byla to klasická „vícedimentionální chyba”, aneb v prostoru to nebylo daleko, ale v časoprostoru se to nepotkávalo (otevírací doba 8-15h). A intervaly autobusů jsem
také trošku podcenil … ale krabice mám i jsem je ochránil před dešťovou smrští co pak odpoledne byla.
Další posun byl na téma politické situace a možných problémů na vstupu — obratem jsem dostaz zvací dopis, tak snad to bude OK. Podobně rychle DARPA reagovala i na obnovu linků
pro stažení trénovacích vzorků (to jsou ta videa, na které se člověk opravdu nechce koukat) a přihodili i několik nahrávek z Workshop Systems 2 z března! Obávám se, že sdílet
to nemůžu, ale z první nahrávky (omylem jsem stáhl UAV, tj. dronu) je vidět prostor louky, na které jsou po různu stojící auta, uprostřed je několik kráterů a hoří tam oheň. Hmmm.
Také se tam některé postavy pohybují (do kruhu), takže to nebyly všechno figuríny, jak jsem očekaval, ale i herci.
St — toto sepisuji až v neděli, takže si podle očekávání nic nepamatuji. Vím, že s TomášemR jsme diskutovali přepravní kufr 100l,
který vypadá bytelně, ale váží 11kg. Také vnitřní rozměry jsou bez polstrování, takže spíše ne.
Čt — to se ukázalo, že úspěchy z Po nefungují, pokud není připojen monitor přes HDMI. Mám v mailu tipy od MartinaL na SW virtuální monitor, ale fakticky jsem to ještě nezkusil.
Také mám obavy, jestli náhodou Odroid nemusí zuřivě vykreslovat na neexistujicí obrazovku a neplýtvá zdroji/baterkou? Uvidíme. Také jsem byl zpět u robotů a konečně jsem vyzkoušel
nový firmware: Add IMU, Servo, Neopixel #14. Asi nejvíce mne zajímá IMU (integrované gyro, akcelerometr a magnetometr), ale pěkné features
jsou i extra příkazy pro další serva případně řízené LEDky od NeoPixelu.
Z logů soudím, že jsem zkoušel ,, praktické použití geofence'' — prostě náhodně vygeneruji waypoint, který je uvnitř, a tam jedu. Ano, bylo tam pár zádrhelů jako, že ten waypoint nemám
odstraňovat, když detekuji osobu (původní kód z RoboOrienteeringu) a občas se zasekával v trávě. A dal jsem i noční jízdu.
Pá — upgradeoval jsem Matty OSGAR driver na rozšířenou verzi a s M02 vyrazil do světa. Ono není robot jako robot — M03 má GPS, takže
teď se nově stále snaží dostat do oblasti zadané geofencí a M02 (bez GPS) je to jedno. Byl jsem zvědav, zda IMU dat poznám cestu do kopce a z kopce … zadní branku trefil krásně a vyrazil
nahoru, zpátky jsem ho dostal tak že jeho „obět” se pohla tím správným směrem. No z dat to vidět nebylo, protože jsem to neměl nakalibrované. Ale sbíral jsem i data z IMU z kamery,
tak tam by to vidět mohlo být. Možná.
So — NO COMPUTERS = NO DTC … bylo krásně a podařilo se mi nic nedělat a jen o DTC bloumat. Ono v ten pátek jsem ještě koukal na noční logy z drony z března — scenář Construction.
Fakticky to asi byla construction zone na dálnici, kde došlo k hromadné havárii. Spousta zraněných, auta na střeše, povalená motorka … no nebyly to pěkně záběry ani v IR …
Ne — tedy dnešek (už přetahuji 11min a to už mi utekly dva díly Podivných robotů :-( … Dnes jsem nahrubo nakalibroval M02 a M03. Statická kalibrace gyra a akcelerometru byla celkem
bez problémů, ale ten kompas! Úplně jsem si vzpomněl na Jirku a kalibraci Freji na houpačce. No nad hlavu jsem robota nedal a nemůžu tvrdit, že tam mám vše pevně přidělané.
Ani obrázky v XY, YZ a XZ řezu mne moc neuklidňovali. Bude to nejspíše třeba předělat — ideálně ve Win, kde poběží MartinemL doporučený kalibrační SW.
Ještě jsem přidal drobnost, která se ukázala spíše jako divočina — pokud ani po rozhlédnutí na místě žádnou cestu nevidíš, přehraj pozpátku posledních 100 příkazů (s opačným znaménkem pro
speed). M03 dokázal jezdit 10min (moc jsem ho v noci neviděl) a kdyby mne to nepřestalo bavit, tak by asi ještě chvíli zkomal svět. Ale to couvání bylo skoro o strach (naslepo) a špatným směrem.
TODO možná v kombinaci s tím IMU.
Dlouho jsem nepřidal žádné obrázky, tak jeden z kalibrace M03, který mne ale vůbec neuklidňuje:
![]() kalibrace kompasu M03 |
17. srpna 2025 — DTC Systems 2 - W33 (zbývá 6 týdnů) - Skupina 2, 10 týmů)
Ano, dnes je to datum z budoucnosti a cílem je zase nezapomenout, co se dělo …
Po — dnes dorazily plastové krabice. Jako kdyby se tam Matty vešel i s kolama, tak by byly úplně super … ale nevejde. A zelený M02 ani s nárazníkama
(měl je na FRE2025 nastavené). Ale bokem se tam vejde:
Út — přiznám se bez mučení, že včera večer jsem už toho moc nenadělal. Zmohl jsem se jen na cvičení se dvěma roboty — ani pokud sudám víko s kamerou, tak se dva na bok nevejdou (překáží
STOP tlačítko) … ale stejně budu sundavat ta kola, což mi přijde zajimavé v kontextu tří robotů (ty dva tam určitě dostanu, tečka).
Také jsem ještě odšrouboval oba nastavované nárazníky z M02, které přesahovaly limit. Ale ty původní mini-šroubky nemám :-( … no snad zůstaly někde ve škole nebo pořídím nové.
No a dnes ráno jsem se vyhecoval a odnesl robota cca 2km na nádraží a vzal si ho s sebou do práce. Motivace byla demo pro GG (nový člen týmu) a podle očekávání se to neobešlo bez
„generálského efektu”, což jsem vlastně rád. Zase zlobil napájecí konektor u Odroidu a na začátku se mi cca 3x resetoval — tj. opravdu musí starý Jack pryč a nový na scénu!
A testování samotné bylo užitečné. Jezdili jsme po firemním lesíku, resp. geofence byla zadaná na lesík, ale až příliš často se robot utrhl a utekl na parkoviště. Bude třeba změnit
priority — teď má nejvyšší prioritu vyhýbání se překážkám, pak detekce a navigace na člověka/oběť a až na posledním místě navigace na waypoint, což jedině udrží robota ve
vymezeném prostoru. Je možné, že to detekovalo nesmysly, nebo že chvílema zapomínal, že má sledovat jenom člověka a auta (těch bylo večer na parkovišti stále mnoho) má ignorovat.
A nebo stačily nějaké obskurní detekce (viděli jsme detekci vlaku … asi mu tak připadly okna v dolní části laboratoří) …
A na závěr info od DTC - jsme Béčka, resp. Group 2 (podle přání). Takže to bude bez výletu, ale snad se alespoň srovná časvý posun. Koukám na
oficiální stránky a tam vídím 15 týmů, ale interně je do skupin rozděleno pouze 10 týmů:
Group 1
- Chiron (DARPA-funded)
- Coordinated Robotics
- DRONE
- RoboScout (DARPA-funded)
- UAS-DTU
Group 2
- AIR TAGS (DARPA-funded)
- DART (DARPA-funded)
- PRONTO (DARPA-funded)
- Robotika
- TTT
(tato informace je i v DTC_Operations_Guide_CE2_20250812.pdf, který je Approved for Public Release, Distribution Unlimited, no jen zatím není na oficiálních stránkách ke stažení)
p.s. „záhada” byla celkem triviální … stačilo přidat více výpisů:
0:00:12.383368 Started tracking … 0:00:12.486322 Lost track 0:00:00.102954
pak v logu bylo (oak.detections stream)
0:00:12.345242 20 [ ['car', 0.55224609375, [0.4383300840854645, 0.45070576667785645, 0.4977783262729645, 0.5154918432235718] ] ]
a v kódu:
def on_detections(self, data): self.last_detections = data[:]
… to aby ho to pak netáhlo na parkoviště! (Ono to filtrování na ""name == 'person' tam je, ale pouze v kontextu vzdálenosti k oběti)
St — dnes jsem si ráno několikrát opakoval mantru: Jedná se o společenskou událost - není třeba se stresovat. Bude to zábava. Funkční roboti jsou nudní! … a trošku to pomáhalo
Zatím moc novinek nemám. Udělal jsem jeden „kancelářský test”, takže jsem viděl v praxi, že jak si běžní uživatelé si představují robota: prostě ho zapnou a už dělá co má.
Asi by to měl být default a pouze pro ladění by vývojář měl připojovat notebook, telefon jako AP atd. Jednou budem dál...
Další pozorování (programové) bylo, že po detekci oběti by
robot neměl vždy odbočovat vpravo, ale (nejlépe už předem) si zjistit, kterým směrem je volná cesta. Nárazník to řeší, ale mohl by se chovat inteligentněji. Low priority
Ještě bych si sem možná dal tabulku, co jsem studoval včera večer, aneb bodování:
Self-Funded Teams must score above a minimum required score in at least 1 run. The minimum required
score is equivalent to the score obtained by reporting on 60% of the ground truth casualties with 6 points
awarded per casualty. … ale ono je to stejně jedno, je to „společenská událost”, nebo ne?
Z bodování je také jasné, že by to chtělo rozchodit ten mikrofón + přehrávání zvuků …
Čt — dnes to asi vezmu „hákem”. Dopoledne jsem, po dohodě s Frantou, objednal ubytování a auto. „Trošku” jsem u toho naříkal, protože když se daná částka rozpočítá mezi 5-10 lidí,
tak je to únosné a největší pálka je letenka. Ale když těch lidí je jen 1-2 tak … no nic, zavřít oči, bude hůř. A teď běží 24h pro potvrzeni od majitele a stejně tak auto se dá
do 24h bezplatně zrušit … a nebyla to kreditka ale debetní karta, takže po minulé zkušenosti z února bych řekl, že zatím ani jedno není jisté.
Musel jsem se trošku v těch vedrech vyhecovat, abych vůbec něco dělal a taková malá domu bylo nastavení dummy monitoru, aby šlo přehrávat a nahrávat zvuk i bez připojeného
fyzického monitoru. Nápovědu jsem měl od MartinaL, přidal jsem ještě trošku od AI, aby se to snáze kopírovalo a … skoro dobrý. Co dobré není je skutečnost, že HDMI na M00 je na
robot@m00-odroid:~$ cat /sys/class/drm/card0-HDMI-A-1/status connected
zatímco na M02 je to card1-HDMI-A-1:
robot@m02-odroid:~$ ls /sys/class/drm/ card1 card1-DP-1 card1-DP-2 card1-HDMI-A-1 card1-HDMI-A-2 card1-HDMI-A-3 renderD128 version
… to mi „lehce” připomíná peklo s USB, ale zrovna tady, u identického HW bych to nečekal. Ještě nevím, co s tím? Zatím jsem skriptík na detekci, zda je HDMI připojeno či nikoliv
ručně upravil pro každý Odroid zvlášť.
Další posun je u M02, kde teď je upravený BIOS a automatické přihlašování a zakázání zamykaní obrazovky … ale evidentně to není dostatečné, protože dnešní test jízdy na západ,
východ, sever a jih nahrál CD kvalitu úplného ticha.
Ještě bych mohl přidat pár zpráv ze včerejšího callu:
- do státu vezmu „jenom” 4 roboty a M01 si MartinL nechá jako referenční vzorek pro vzdálené debugování ESP32. Původně myslel, že pátého vezmu jako přiruční zavazadlo, ale když k tomu přidám těch 10 baterek … raději ne.
- potřeboval bych ještě jeden USB port — momentálně využívám tři (ESP32 řízení, OAK kamera, WiFi dongle), ale ještě je třeba přidat DARPA e-STOP (zigbee) a LoRa pro komunikaci. To MartinL řešil extra destičkou, zapojenou do 24pinového konektoru na Odroidu a i prozíravě rovnou kupoval materiál na 5ks.
- s Jirkou jsme se bavili o Yolo-Pose na OAKu a doporučení je z kamery stáhnout celou velkou matici a až na CPU ji profiltrovat na 17(?) souřadnic jednotlivých kloubů pro X detekovaných osob. A když bude dostatek výpočetních jader na kameře, tak možná běžet souběžně detekci Yolo objektů (80 tříd, potřeba je pouze person) a vedle tu Yolo-Pose a výsledky kombinovat.
… tj. Martine, mám pocit, že robot ví, kterým směrem jede. … TODO náhradit odhad směru ze sekvence GPS pozic
Pá — dnešní téma bych nazval Scoring Submission Verification for CE2, aneb ověření, že správně reportujeme raněné na DARPA server. Dnes večer navíc byly working hours,
kde Rebecca říkala, že to dělají hlavně kvůli nám. Že první rok se jim stalo, že jeden tým na soutěži úplně pohořel, protože to na místě nerozchodil. Ptal jsem se také do kdy
je termín a následně už to probublalo i na fórum: Systems Teams - Please run your submissions on the test server by end of August before attending the Challenge 2 event., tj. konec
srpna (tak to dnes nebylo extra předčasné). Závěr je, že nová verze serveru test_triage_submission_server_20250721 běží a databázi s logy jsem dnes odeslal. Říkal jsem si,
že užitečné by bylo rozchodit i posílání obrázků, i když to letos není povinné, a tam jsem se „trošku” zaseknul. Ale u toho večerního callu jsem to vzal od příkladu
v příloze popisu protokolu a ten po formátovacích úpravách fungoval. Chyba byla v tom, že jsem volal requests.post() s parametrem json a měl jsem být parametr data.
Vyřešeno, případ uzavřen.
V plánu mám uzavřít ještě PR - Add support for DTC geofence and more a pak přejít na „klasiku” ver0, ver1, … soutěž.
Chybí mi upravit (resp. vůbec zjistit jestli používám osgar nebo osgar-apps verzi) skript na spouštění jednotlivých běhů, které se ukončí stiskem STOP tlačítka.
Potřeboval bych tam mít možnost předat další parametry, teď konkrétně -without audio, aby to zůstalo v konfigu, ale na Matty M03, kde to ještě rozchozené není, to obejít.
Úplně slyším Jirku: „tak proč to tam spíše také nerozchodíš?” … ale jo, rozchodím, snad i ještě dnes večer (zítra máme „zavřeno”), ale bude se mi to hodit na podmíněné
připojení LoRa a e-STOP modulu. Možná. Prostě nechci mít 3 konfigurační soubory jako na SubT — stačí udržovat denní a noční verzi.
p.s.
(osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$ ls /sys/class/drm/ card0 card0-DP-1 card0-DP-2 card0-HDMI-A-1 card0-HDMI-A-2 card0-HDMI-A-3 renderD128 version
… prostě při dalším puštění na M02 už je HDMI monitor jako card0, včera byl card1. Změnil jsem to na card?, ale s tou (chybnou) logikou ten viruální monitor stejně
nenastartoval — prostě to nenahrávalo, ani nepřehrávalo zvuky.
(osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$ pactl get-default-sink auto_null (osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$ pactl get-default-source auto_null.monitor
Když jsem „chytré” přepínání vyhodil a nechal natvrdo zapnout viruální monitor, tak vše jede jak má:
(osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$ pactl get-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo (osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$ pactl get-default-source alsa_input.pci-0000_00_1f.3.analog-stereo (osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$
Už toho mám ale pro dnešek celkem dost, tak jen malý důkaz. Až budu přemýšlet, jak jsem k tomu došel, tak
ffmpeg -i video.h265 -itsoffset -3.6 -i audio.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 \ video-with-sound4.mp4
protože té kameře tvrvalo 3.6s než naběhla …
p.s. omlouvám se za kvalitu snímku, ale takto vypadal M02, když večer nahrával video se zvukem:
So — aneb „zavírací den” a počítač jsem opravdu neotevřel (ani jeden). Měl hodně silné cukání, když začalo pršet, ale … udělal jsem si alespoň inventuru.
A nedopadla úplně nejlépe. Našel jsem 2x LoRa moduly (ID=2 a ID=4, pravda ještě ID=1, což je basestation), ale jenom jediný DARPA e-STOP. A žádné kabely. Aby
to bylo zábavnější, tak e-STOP má USB mini-B konektor, LoRa USB micro-B a ESP32 na řízení (a vlastně i OAK-D kamera) USB-C.
Dále to bylo „cvičení s krabicemi”: sundal jsem STOP tlačítko a oba roboti se krásně do krabice vešli. Abych je mohl „postavit do komínku”, tak jsem musel přendat
víko z jednoho na druhého (ano, lenost odšroubovávat kameru) a zbylo tam dost prostoru jak pro víko tak i nějaký molitan. A ano, ještě je možné sundat ta kola.
A nakonec jsem koukal i na druhý mikrofón a jak ho uchytit na Matty M03. Je to sice „cenová bomba”, ale je tak
velký, že ho možná nechám spíše na Pata a nějakou jinou post-DTC zábavu …
Ne — V neděli to byly první pokusy o integraci. Raději jsem zamergeoval větev s geofencí (a spousta dalšího
„balastu”), abych si uvolnil ruce na ver0.
Také ještě nevím, jak moc se budu moci spolehnout na kompas a OSGAR PR
je stále otevřený (a chce to nějaké testy a v klidu se nad tím zamyslet … ty rotační matice, quaterniony, různé soustavy souřadné …
Zapojil jsem do zeleného M02 všechen HW, který bych do ver0 rád použil, tj. co tam bylo + navíc LoRa a e-STOP moduly. A nefungovalo to, ani se nerozjel. To jsem
trošku očekával (pokud připojíte 3 zařízení, tak to vaše oblíbené (ESP32) nutně stále nebude k dispozici na /dev/ttyUSB0. To se standardně řeší pomoci udev pravidel. Ale ani to nefungovalo
(to už očekávané nebylo). Problém byl v tom, že jak řídící deska Mattyho, tak LoRa používají stejný převodník na ESP32:
(osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$ cat /etc/udev/rules.d/lora.rules SUBSYSTEM"tty", ATTRS{idVendor}"10c4", ATTRS{idProduct}"ea60", SYMLINK+="lora" (osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$ cat /etc/udev/rules.d/90-estop.rules SUBSYSTEM"tty" SUBSYSTEMS"usb" ATTRS{idProduct}"6015" ATTRS{idVendor}"0403" SYMLINK+="estop" (osgar) robot@m02-odroid:~/git/osgar-apps/dtc-systems$ cat /etc/udev/rules.d/92-esp32.rules SUBSYSTEM"tty" SUBSYSTEMS"usb" ATTRS{idProduct}"ea60" ATTRS{idVendor}=="10c4" SYMLINK+="esp32"
a dopadlo to takto:
(osgar) robot@m02-odroid:~$ ls -l /dev/lora lrwxrwxrwx 1 root root 7 srp 17 18:14 /dev/lora -> ttyUSB0 (osgar) robot@m02-odroid:~$ ls -l /dev/esp32 lrwxrwxrwx 1 root root 7 srp 17 18:14 /dev/esp32 -> ttyUSB0
AI doporučila použít udevadm info -query=property -name=/dev/ttyUSB0 (vždy se dvěma pomlčkama, možná to generování web někdo někdy upraví, pardon)
a do pravidel přidat ENV{ID_PATH}, tj. kde je přesně zařízení připojeno. Toto se minimálně pro
LoRa bude měnit (dočasný USB hub), ale pro teď to funguje s tímto nastavením:
(osgar) robot@m02-odroid:~$ cat /etc/udev/rules.d/92-esp32.rules SUBSYSTEM"tty" SUBSYSTEMS"usb" ATTRS{idProduct}"ea60" ATTRS{idVendor}"10c4" ENV{ID_PATH}"pci-0000:00:14.0-usb-0:7:1.0" SYMLINK+="esp32" (osgar) robot@m02-odroid:~$ cat /etc/udev/rules.d/lora.rules SUBSYSTEM"tty", ATTRS{idVendor}"10c4", ATTRS{idProduct}"ea60", ENV{ID_PATH}=="pci-0000:00:14.0-usb-0:2.1:1.0", SYMLINK+="lora"
(vždy je to jen jedna řádka, což možná nemusí být?)
Zapojil jsem i LoRa basestation do notebooku a v logu jsem pak našel:
python -m osgar.logger test-lora-250817_164238.log –stream lora.robot_status 0:00:16.102659 3 [2, [0, 0, 0], b'running'] 0:00:17.834660 3 [2, [0, 0, 0], b'running']
… čímž považuji první pokus o integraci na M02 za úspěšný. … vlastně ne úplně. Zelenáč mne občas vytáčel do nepříčetnosti, když vypadávalo napájení serv. Do toho
občas vůbec nefungovala komunikace (kvůli těm špatně namapovaným USB zařízením). Řekl si o to sám a na dovolenou jsem ho s sebou další den nevzal. Naopak jsem mu ještě
„vykuchal” napájecí kabel na Odroid s pérky na jacku a po návratu ho plánuji vzít do Prahy zkušeným hardwarářům (jak se to sakra píše?) na revizi.
Večer jsem se ještě snažil do stejného stavu dostat červeného Matty M03, ale neúspěšně. :-( … jako šlo mi o klíčové věci, kde potřebuji drátovou klávesnici a monitor
na úpravu BIOSu, zaklikání automatického logování a pokus o nastavení virtuálního monitoru. A to se mi asi úplně nepovedlo, protože přehrání zvuku nejprve šlo, ale po
rebootu bez monitoru už nikoliv. A pak bylo 22:00 a další den jsme měli budík na 4:15 a delší cestu … (tolik tedy doplněný záznam z prvního dne dovolené).
24. srpna 2025 — DTC Systems 2 - W34 (zbývá 5 týdnů) - WIP (work in progress)
Po — dnes má svátek Helena … ale nechal jsem ji zavřenou na druhém počítači.
A ještě se mi ozvala DARPA, že v testovacím logu bylo 27 úspěšných initial_report,
žádný update_report a ani jeden úspěšný report obrázku. Tak jsem jim poslal screenshot, kde pro obrázky to vracelo 200 OK a pak napsali, že se omlouvají
a Your image submissions were successful.
(myslím si, že koukali jenom na můj první mail, resp. na první dump databáze, kdy mi to opravdu nešlo, a druhý opravný přehlédli)
Út + St — asi nejhorší úlohy jsou ty, co si člověk myslí, že jsou na 10 minut a po hodině si už není úplně jistý jestli to ještě dnes bude.
A to byla situace s crypt.py a zapojení šifrování do OSGARa. Myšlenka byla, že prostě vložím mezi starý
LoRa modul a odpovídající
lora_serial extra
crypt modul, který na cestě ven zprávu zašifruje a v opačném
směru přijatou zprávu dešifruje. Trivka ne? Sigh.
Asi první detail je, že „zpráva” je ve skutečnosti stream ukončený \n. Takže na přijmu je třeba data nejprve slepit a pak rozkouskovat
podle oddělovače (konec řádky). OK, tak pak asi není možné posílat raw bytes, ale raději text — Helena nabídla base64 (používá písmenka,
čísla a +/, tj. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/). Ještě je tam drobnost, že to kouskuje po čtyřech znacích (modří už
tuší proč) a když to úplně nevyjde, tak doplní =. Tento detail bych asi nevěděl, kdyby mi to stále neházelo chybu: Invalid Base64 string.,
případně Invalid base64-encoded string: number of data characters (1) cannot be 1 more than a multiple of 4 nebo ValueError: Invalid authentication tag. Message integrity compromised. … ano, jen ta druhá chyba je opravdu o špatném počtu znaků ale ostatní se mi tady stále nabízely.
Ono jsme tam na SubT měli ještě jednu vychytávku a to, že LoRa moduly na odeslání zprávy automaticky předřadily ID zařízení a |, takže tato část také
není šifrovaná. Jednou jsem ubral moc, podruhé málo … případně se to sesypalo, když jedna LoRa byla šifrovaná a druhá nikoliv, ale teď už to snad jede:
0:00:14.695118 6 b'Siw6r2EpWLCFf3vIRfrhKhyXxJWM3lk=\n' 0:00:15.291473 8 b'1|Siw6r2EpWLCFf3vIRfrhKhyXxJWM3lk=\r\n' 0:00:15.291572 0 b"{'name': 'lora_serial', 'delay': 0.596355, 'channel': 'raw', 'caller': 'run_input'}" 0:00:15.292091 7 b'1|2|[0, 0, 0]\r\n' 0:00:15.292423 3 [2, [0, 0, 0], b'running'] 0:00:23.995635 8 b'2|ejSI8/n1QMTOml8yj0J' 0:00:23.995733 0 b"{'name': 'lora_serial', 'delay': 9.300517, 'channel': 'raw', 'caller': 'run_input'}" 0:00:24.006094 8 b'PSwX5Mql1\r\n' 0:00:24.006193 0 b"{'name': 'lora_serial', 'delay': 9.310976, 'channel': 'raw', 'caller': 'run_input'}" 0:00:24.006941 7 b'2|[0, 0, 0]\r\n' 0:00:24.007295 3 [2, [0, 0, 0], b'running'] 0:00:24.007374 1 b'2|[0, 0, 0]\n' 0:00:24.007762 6 b'IsbNPedVczSrzlpycYicfY8B+l08Sts=\n' 0:00:25.821620 8 b'1|IsbNPedVczSrzlpycYicfY8B+l08Sts=\r\n' 0:00:25.821719 0 b"{'name': 'lora_serial', 'delay': 1.813858, 'channel': 'raw', 'caller': 'run_input'}" 0:00:25.822225 7 b'1|2|[0, 0, 0]\r\n' 0:00:25.822542 3 [2, [0, 0, 0], b'running']
… ještě bych měl prověřit ty varování na stream 0 — mám pocit, že je to očekávané, protože zprávy se odesílají jen jedna za 10s, ale jistý si
momentálně nejsem.
Jinak druhá zábava bylo to audio — dneska fungovalo, „samo od sebe” … čert aby to spral … nemám rád věci co někdy fungují a někdy úplně ne. Ona
i ta LoRa si ze mne chvílema dělala srandu:
0:00:00.217430 8 b'.' 0:00:00.957976 8 b'.' 0:00:01.711426 8 b'.' 0:00:02.463089 8 b'.' 0:00:03.214048 8 b'.' 0:00:03.965525 8 b'.' 0:00:04.716116 8 b'.'
A konečně jsem nezmínil, proč jsem v Út nenapsal ani řádek — holt notebook je už starší, tedy hlavně baterka, a místo aby detekoval, že už jsem skoro
na konci, tak v půlce kódování umřel … a to mne nějak přešla chuť. A ještě jedna „baterková” — dnes mi na procházce se psem došlo, že jsem zapomněl
vypnout BT repráček, který zatím používam pouze přes kabel, … prostě 3 baterky na robota, notebook a telefon (AP) … je třeba nabíjet skoro pořad.
Čt — dopoledne pršelo, což je ideální čas na spaní, čtení knížky nebo programování robotů. Můžete hádat, jak to dopadlo … dnes to byl nový modul
doctor,
který dostane signál, že robot je u zraněného a nasbírá si audio a video data (oboje jen několik sekund, resp. než dostane zase signál, že robot pokračuje dál).
To následně předhodí neuronkám na určení pose
(a jestli se během té chvíle nějak měnila, tj. zda detekuje pohyb) a speech2text, jestli nešťastník něco říká a zda je to srozumitelné. Oboje jsem měl
rozchozené na druhém počítači a ten sebou na dovolené nemám … tj. až zítra …
Dále jsem nabastlil na Matty M03 mikrofon, repráček a LoRa modul (gumičkama, prostě profi-programátorský přistup). Vypustil jsem USB-hub, když e-STOP mám
stejně jenom jeden, tak ho neotestuji a následně LoRa změnila pozici:
pci-0000:00:14.0-usb-0:2.1:1.0
na
pci-0000:00:14.0-usb-0:2:1.0
… no někdy si třeba dostuduji, jak se ta cesta/konektor kóduje. V prvním běhu LoRa nenaběhla a podruhé jsem jí se změnou konfigurace ještě nepouštěl. S čím
jsem trošku zápasil, jak to SW vypnout v OSGARu? Máme na to extra příkaz -without, ale -without lora estop není to správné řešení. Oba
moduly jsou totiž rozdělené na vícero Node a hlavně je třeba vypnout tu část, co se snaží komunikovat s HW, tj -without lora_serial estop_serial už dělalo
co jsem chtěl.
A na závěr bych zmínil dobíjení baterie. Včera jsem z 15.1V nabíjel 145 minut do 16.6V (a pak už to nevydržel, vypnul to a šel spát). Dnes jsem pokračoval
a ty zbylé 0.2V se dobíjely další 2 hodiny … ale prý je to možné, pokud se snaží balancovat jednotlivé články. No raději nepočítám, jak dlouho budu nabíjet
vše seriově. Po ukončení měly jednotlivé články: 4.16, 4.16, 4.24, 4.21 = 16.8V
p.s. sakra, už zase lije, tak na noční test nedojde :-(
Pá — ono včera večer (spíše v noci) jsem ještě trošku testovat šel, ale žádná sláva to nebyla. V první jízdě mne minul (asi už jsem byl moc blízko) a
pak se chytil do U-čkové pasti. Na konci vždy zjistí, že je to slepé, vycouvá a znova tam vleze. Ve druhé jízdě nenaběhla kamera a ve třetí jsem dostal
assert AssertionError: assert self.wav_fd is None.
A ráno jsem tedy assert opravil (nastával u druhého reportu), ale zjistil jsem, že mi zase nefunguje audio:
robot@m03-odroid:~$ pactl list sources short 0 auto_null.monitor module-null-sink.c s16le 2ch 44100Hz SUSPENDED
a zbytek dne/konec dovolené jsem už byl pouze rozladěný, pokud to mám říci slušně.
Teď večer jsem snad opravil drobnosti v Flush properly log file on Ctrl+C termination #1030 — iritovalo mne,
že musím nastavit duration aby se logy pro base-station správně uložily. A ještě drobný vedlejší efekt
Add tool for listing inputs and outputs of OSGAR module #1029 což dnes vypisuje vstupy a výstupy modulu a někdy
to snad rozšíříme na kontrolu JSON konfigurace.