czech english

Katarina

fandorama článek/blog

Další hračka od Parrotu, tentokráte čtyřtulka Bebop. Úloha je rozchodit sledování barevné čepice, jako to uměla stará AR Drone 2. Na první pohled je Bebop více profi — součastí balení jsou nahradní baterky, vrtule, GPS, full HD kamera, 8x výkonější počítač, 14 megapixels “Fisheye” foťák, uživatelsky polohovatelná kamera v intervalu 180 stupňů … no jsem zvědav jak to půjde z Pythonu . Blog update: 21/4 — Skrytá kamera a Nao

Toto je další z fandorama blogů o testování a prvních zkušenostech tetokrát s Parrot Bebop drone (pracovní název Katarina … říkal jsem si, že to bude hukot a chtěl jí pojmenovat Katrina, ale pak se mi jí zželelo, dávat jí do vínku tolik destrukce)
Chcete-li si přečíst celý blog o rozchození Katariny podpořte tento projekt.
Stejně jako minidronu Jessica zapůjčil český distributor Parrotu. Díky
Zde je odpovídající fandorama link:
p.s. jsem zvědav, jestli Bebop české publikum zaujme, nebo mi náladu budou muset zase zlepšovat Japonci (viz Jessica github Stargazers)

Odkazy:



Blog

31. leden 2015 — Hukot i bez létání

Dnes jsem Bebop/Katarinu poprvé zapnul. A byl to hukot . Zatím nikoliv od vrtulí, ale nejspíše od chlazení řídícího počítače. Budí to respekt.
Aplikace Free Flight 3 (FF3) se mi odmítla nainstalovat na pracovní tablet (prý pro nedostatek místa), ale na telefonu běžela. Raději jsem ji rovnou upgradeoval — skoro to vypadalo, že ta starší verze podporovala pouze Rolling Spider a'la Jessica a Jumping Sumo. První obrázky z kamery krásné, ale kam se uložily zatím netuším.
Jako první příručku jsem použil Parrot Bebop Drone Hacking. Potvrzuji, že i u Parrotu mají vývojáři rádi číslo 42, tj. IP drony je 192.168.42.1. Fungoval telnet, podíval jsem se do ftp zóny a přečetl si i pár NMEA vět z GPSky:
/ # cat /dev/ttyPA1
GNRMC,104229.986,V,0000.0000,N,00000.0000,E,0.00,N,00000.0000,E,NNN,00,,-18.0,18.0,,,V*64
GNGST,104229.986,,,,,,,*5C
GNGSA,A,1,,,,,,,,,,,,,,,,1*1D
GPGSV,3,1,12,01,84,173,31,07,66,244,1,63,176,,04,54,145,,1*6A
Celkem mne navnadil popis „černé skříňky” (/data/ftp/internal_000/blackbox), která podle všeho obsahuje stejné informace jako stará AR Drone 2 jen v trošku jiném formátu (129 sloupců dat logovaných na 200Hz).
Klasická otázka: „jak to vypnout?” … viz fórum pro nováčky — stačí zadní tlačítko krátce zmáčknout.
Katarina se po spuštění FF3 chtěla rovnou automaticky kalibrovat. Předpokládám, že je to sekvence jako u staré drony, tj. tanec ve vzduchu s otáčením o 360 stupňů. Na to teď tady není prostor, tak možná později venku.
Zkoušel jsem ještě, zda funguje video kanál jako dříve a zatím neúspěšně (nefunguje ani port 5555, ani 5553 ani 43210).

6. únor 2015 — github

Musím přiznat, že psaní české verze mi jde nějak ztuha. Proč? No když jsem zveřejnil i anglickou verzi, tak mi do dvou hodin přišel mail od Darryla (amík?), že narazil na stránky spíše omylem přes Jessicu a jak je to skvělé, že si s tím hraji a jak je SDK od Parrotu nečitelné atd.
Tady vůbec netuším, zda někdo Bebopa má a z nedávných zkušeností soudím, že o to moc zájem není/nebude.
Ve zkratce: podařilo se mi s dronou navázat spojení, jsem schopen dekódovat většinu zpráv co posílá, ale zatím jsem ještě nevzlétl ani nezískal video/foto.

18. únor 2015 — viz anglická verze

Již moc nevěřím, že by prošel tento fandorama projekt. Aleš, kterému díky za mail s komentáři, má asi pravdu, že je to relativně drahá hračka a moc nadšených českých robotiků si jí nekoupí (25kkč s dálkovým ovládáním do 2km, nebo 14kkč jenom Bebop samotný).
Nabídka navíc neustále roste (Aleš zmiňoval ZANO, s úspěchem na Kickstarteru), takže to je těžké.
Možná někteří z vás zaznamenali, že blog v angličtině obsahuje řádově více informací … tak pro ty ostatní, kteří přišli později … viz anglická verze.
Katarina už umí číst video stream, na rozdíl od ARDrone2 je kombinovaný s navigačními daty, umí potvrzovat přijaté zprávy a je skoro připravena na první autonomní takeoff().

23. únor 2015 — Fandorama

To mi to Ondra zavařil!!! Už jsem za tu dobu zapomněl, že není dobré dávat konec fandorama projektů na víkend. Banky nefungují a čítač nezobrazuje aktuální stav konta. Katarinu jsem zrušil z titulní stránky … a teď bych jí měl zase vrátit. Zatím netuším přání jejího jediného stoupence.
Jaký je stav? S ARDrone3 už se lze létat s kódem na githubu. Je to celkem adrenalinová zábava. Přestože jsem v obýváku vyklidil nábytek, aby se dalo testovat, tak v hover-stavu opakovaně „plavala” nalevo. Že je to opakovaně mi došlo až časem — vyřešil to trim() před startem.
Příklad kódu:
robot = Bebop()
robot.videoEnable()
robot.trim()
robot.takeoff()
robot.land()
ARDrone3, na rozdíl od předešlé verze, pracuje trošku jinak s videem. Zatím co na Heidi stačilo otevřít TCP spojení a číst, Bebop, Rolling Spider a Jumping Sumo řeší vše přes jedno jediné spojení. Video je opět posíláno v H.264 codecu, ale každý I nebo P frame je rozkouskován až na 128 dílů velikosti cca 1kB. Je nutné se starat o jejich setřídění a potvrzování. To je realizováno 128bitovým číslem, kdy přijaté díly mají nastavenou jedničku. Tak toto mi už celkem pěkně funguje.
Video lze zatím přehrávat pouze off-line pomocí play.py … není zapojena žádná funkce, která by kousky skládala za letu a předávala procesu na zpracování obrazu.
Ke droně se lze připojit také telnetem a ftp. Z toho co jsem viděl mne zatím nejvíce dráždí adresář scripts … že by bylo možné přímo na dronu uploadovat nějaké prográmky?! To by bylo něco.
O čem teď bloumám je rozpoznávání a sledování dvojbarevné čepice:
Nápady jsou vítané . Důležitá je určitě kombinace oranžové se zelenou, ale jestli nejprve všechny pixely klasifikovat a teprve pak hledat přechody??

25. únor 2015 — Čepice a capdet.py

Dnes jsem zaspal, tak alespoň krátce …
Začal jsem experimentovat s detekcí dvojbarevné čepice. Používám pravidlo: „když nevíš, zkus něco triviálního”, tj. koukám jak vypadají barvy čepice vůči okolí.
Vzpomínám si, jak na workshopu Robotour 2014 Jirka mluvil o důležitosti klikacích nástrojů … a tak jsem si také jeden vyzoušel capdet.py, který zobrazoval všechny výskyty dané barvy a po drobné úpravě i barvy z blízkého okolí definované poloměrem (spíše polovinou strany krychle) rad=10.
Na této obrazovce (nerad dělám celoobrazovkový "PrintScreen", ale tady mají smysl všechny čtyři okna), je vidět původní obrázek vpravo nahoře, jeho HSV konverze vlevo nahoře, pak dosud naklikané barvičky a v pravo dole "terminal", kam se vypisuji souřadnice a hodnoty barev. Troufnl jsem si rozlišovat zelenou od oranžové: pokud je barevná složka v G větší než R a B, tak je to zelená, jinak oranžová:
if col[1] > max(col[0],col[2]):
    imgResult[mask] = (0,255,0) # green
else:
    imgResult[mask] = (0,128,255) # orange
Za zmínku asi také stojí bitové operace nad NumPy polem, konkrétně np.logical_and:
maskB = np.logical_and( imgB < col[0]+rad, imgB > col[0]-rad )
… toto vytvoří Boolean pole, kde True je pouze u prvků z daného okolí v modré složce.
Jinak s NumPy maskou jsem si včera odpoledne trošku naběhl (bylo to na robotu Husky a kód pro Follow Me, případně video). Ona ta maska z vícerozměrného pole udělá jednorozměrné a operace jako arr[mask].min() jsou v pořádku, ale běda u arr[mask].argmin(), která vrací index, kde se daný minimální prvek vyskytuje:
>>> import numpy as np
>>> a = np.array([2,0,3])
>>> a
array([2, 0, 3])
>>> a.argmin()
1
>>> mask = a > 0
>>> a[mask].argmin()
0
>>> a[mask].argmax()
1
Je to pořadí prvku, které splňují danou masku. Rozhodně tedy pak není dobrý nápad slepě usuzovat na pozici prvku z návratové hodnoty, když nevíte kolik prvky bylo „odmaskovaných” …
Co se detekce čepice týče, tak jsem ještě přemýšlel, jestli by nestačilo hledat oblasti s dominancí červené a dominancí zelené a jejich přechody. Ale to by asi byly moc velké plochy??
Ještě jsem nezmínil proč to HSV (hue-saturation-value). To je zatím příprava. Skoro v každém článku se dočtete, že dělat min/max barev v RGB není dobrý nápad, ale že v HSV to dopadne celkem rozumně. Možná si vystačím i bez toho, nevím.

26. únor 2015 — Kontury čepice

Dnes to není žádná krása (viz diff), ale nechť to jsou ty třísky co lítají při kácení lesa. Původní klikátko capdet.py jsem teď „lehce” zašpinil několika natvrdo vybranými barvami oranžové a zelené — ano, mohl jsem to číst ze souboru … a asi měl. Šlo mi o to, abych rychle měl stále stejné zadání a mohl experimentovat.
Co tím hackováním zkouším? Myšlenka je následující:
  • pro vybrané oranžové a zelené barvy vytvořím černobílou masku
  • trošku jí nafouknu pomocí dilate, aby se mi spojili jednotlivé díly čepice
  • hledám kontury, kde mne zajímají jen bílé objekty (s tím jsem si myslím už jednou naběhl, když byl daný objekt na hranici obrázku … no uvidíme … mluvím o oriented=True)
  • pro danou vyplněnou konturu spočítám podíl oranžové barvy
Příklad:
Výsledky [plocha, počet oranžových, podíl oranžových]:
3139.5 1854 0.590539894888
51.5 3 0.0582524271845
Na první pohled to nevypadá špatně. Asi bych mohl odfiltrovat malé body pomocí erode(), ale bojím se, abych nepřišel o „švy” čepice. Plán je vylepšit klasifikaci barev a pak to pustit na testovací videa. Výsledkem by měly být odhady na požadovaný podíl barev (59% mi přijde pěkné) a nějaké min/max velikosti. V dalším asi mohu zkoumat pod-objekty, případně tvar čepice. To asi ale nechám až narazím (viděl jsem včera v květinářství krásný protipříklad barevných mističek pod květináč … to by Katarinu určitě spletlo).
Jinak z poznámek pod čarou — nepodařilo se mi rozumně nakreslit masku kontury, tak jsem jí nejprve nakreslil do šedotonového obrázku a pak definoval jako mask = tmpMask > 0. Ono by to asi šlo, ale ty bitové obrázky nutně nefungují všude (pamatují Honzu a pokusy s RasPy na SICK Robot Day 2014).
Co se mi ale zase celkem líbilo je počítání oranžových pixelů pro danou oblast. Rozhodnutí, zda je pixel zelený nebo oranžový dělám porovnáním R a G složky:
cmpRG = imgR > imgG
orange = np.count_nonzero(np.logical_and( mask, cmpRG ))
kde mask je vybraná oblast kontury a imgR a imgG jsou výsledkem cv2.split(img).

27. únor 2015 — Editace barev z videa

Včera večer jsem brousil nástroje. Nejprve jsem upravil hack s tabulkou barev a předělal to na externí soubor (diff), který podporuje i komentáře a mix copy a paste barev s čárkami a '[' a ']'.
Poté jsem to skoro celé smazal a přeházel (diff), aby detektor byla pouze jedna jediná funkce a mohl jsem zkoušet chování na videu. Barvy stále používám jako vzorky s okolím, tj. pole barev, které nejprve v obrázku „vybarvuji”. Je to možná pomalé, ale umožňuje mi to lepší editaci — mezerníkem zastavuji video, klikáním přidávám barvy a Backspace odebírám poslední přidanou barvu. Barvy se vypisují do terminálu, takže je můžu, když chci, snadno přidat do vzorového souboru cap-colors.txt. Konečně přes ESCape, lze program předčasně ukončit.
Asi největší problémy dělají tmavé barvy, resp. tam pro jejich okolí přibude příliš mnoho kandidátů. Zvažuji, zda detekované jasné barvy pak ještě nenafukovat „hraničními”, ale … není to teď kritické. Důležité je to rozběhat za letu, to znamená poskládat a utřídit H.264 kousky a získat obrázek. Na to ale budu muset zatáhnout do projektu Céčkovou knihovnu (použitá byla už na Heidi-cvideo). Dříve se mi nepodařilo OpenCV přesvědčit, aby akceptovalo postupně buffery s daty :-(. Na druhou stranu jsem včera zjistil, ze i obyčejný JPEG snímek lze otevřít jako video. Po pravdě IF jsem tam nakonec přidal (kód), protože video jsem chtěl rovnou spustit přehrávat, ale jednotlivé snímky „pustit zastavené”.
Teď bych revidoval příjem videa. U každého je výpadek a následná duplicita několika paketů, tak jestli tam nemám ještě nějakou chybu. Následně chybí i několik snímků — že by Python nestíhal vyčítat data po síti? Nebo je třeba posílat ještě nějaké extra časové známky??

1. březen 2015 — Víkendové testování

Přemýšlím, co z toho je zveřejnitelné. Vzpomínkám dominuje poslední start, než v neděli začalo pršet: Katarina se vznesla, hodila assert (kterého jsem si nevšiml), přesunula se nad svah a jabloně, udělala jarní řez bříze a spadla vrtulemi směrem dolu. Asi. Byl jsem tak konsternovaný, že tento detail si už pořádně nevybavím.
Když jsem kód opravil (ty asserty se hodí při ladění, ale v letu to fakt není dobrý nápad) (diff), tak už lilo :-(, takže základní poletování nahoru a dolů jsem v reálu funkční neviděl.
A co se tedy stalo? Drona poslala zprávu ARCOMMANDS_ID_PROJECT_COMMON = 0, na kterou jsem měl assert, abych si jí všiml, až nějaká bude. A jak vidíte, trvalo to skoro měsíc, než přišla první! Navíc její obsah mne dost zklamal:
02 7F 61 0D 00 00 00 00 05 07 00 D4 FF
tj. ARCOMMANDS_ID_COMMON_COMMONSTATE_CMD_WIFISIGNALCHANGED s popiskem RSSI of the signal between controller and the product (in dbm). Ta hodnota byla 1280 a vůbec netuším, co tím autoři chtěli říci.
Že se mírně odsunula nad svah mohla být zase nepřesná kalibrace, přeci jenom ta tráva není úplně v rovině. Zvláštní ale bylo, jak se drona zvedla ještě více do výšky — myslel jsem, že běží můj kód, ale spíše detekovala koruny stromů sonarem/spodní kamerou a upravila to na 1 meter „nad”.
Přemýšlím, zda uploadovat to video … ona jedna z věcí, co jsem o víkendu rozchodil bylo zapínaní automatického nahrávání, tj. i když jsem ztratil komunikaci sama dál nahrávala co se děje (autorecording diff). Vtipné je, že na tom videu není pád vůbec vidět!!! Ta softwareová kompenzace náklonu si s tím poradila. Už jsem to viděl na tomto videu, kdy drona dělá kotrmelce a z nahrávaného videa to nepoznáte …
Ne, není to publikovatelné … zas taková sranda to není (let trval 15s), sigh. Ale přežila to a vypadá, že i bez větších šrámů … padla do trávy.
A co jinak? Začaly mi chodit GPS data, dokonce debug info o počtu satelitů (diff). „Indiáni” jsou v pořádku, tj. GPS souřadnice dávají rovnou smysl.
Udělal jsem také několik fotek pomocí drone.takePicture() — ukládají se zase lokálně a mají rozlišení 4096x3072. V názvu souboru je datum a čas, který se ale z GPS automaticky neupravuje, tj. 1/1/1970.

2. březen 2015 — metalog.now()

Dneska jsem nějaký unavený. Zadrátoval jsem do startovní konfigurace nastavování času (diff), protože už mne štvalo, že je vše z roku 1970 a není tedy poznat co je nové a co staré. Zlobilo nějak nastavování času — má tam být prý ISO-8601 formát, ale asi zlobily milisekundy. Naformátoval jsem si to tedy po svém a už to funguje. Zde je příklad snímku Bebop_Drone_2015-03-02T201736+0000_.jpg.
Možná za zmínku stojí to zjištění aktuálního času a data. Kdybych to používal ze systému pomocí datetime.datetime.now() tak se mi rozbije přehrávání logů. A na to jsem hrozně alergický . Řešení je logovat i každý podobný dotaz (zavolám ho 1x, takže to není žádné drama) a nechal jsem třídu MetaLog, aby se o to starala. A funguje to dobře.
Do gitu jsem také dal ignorování assertu při parsování dat (diff). Jestli jste četli report ze včerejška, tak tušíte proč. Ono ty asserty jsou užitečné, ale jenom když si pak log v klidu přehrávám, tj. možná try..except ještě obalím podmínkou, zda přehrávám … ale možná ne.
Začal jsem ráno také pracovat na integraci všech kousků (zatím jedno-vláknitě), ale více o demo.py až to začne něco dělat …
p.s. Pavel S. mi poslal video o automatickém přistání Ardu Copter — jó, to by se mi také líbilo … lepší než větve břízy.

3. březen 2015 — roll, pitch a yaw

Kdy já už se konečně naučím, co z toho je co? Dnes jsem lítal ve škole. Nakonec jenom po budově a to ještě malinko, ale … nějaký mikro-progres je snad vidět.
Začal jsem s triviálním testFying:
robot.trim()
robot.takeoff()
robot.flyToAltitude( 2.0 )
robot.wait( 2.0 )
robot.flyToAltitude( 1.0 )
robot.land()
Při prvním pokusu to spadlo ve funkci wait(). Volal jsem tam self.update() bez parametrů, které ale byly vyžadované. Chytnout, otočit vzhůru nohama (naštěstí do dvou metrů dosáhnu), fix a znova.
Při druhém letu to spadlo na klesání:
File "M:\git\ARDroneSDK3\katarina\commands.py", line 39, in movePCMDCmd
    return struct.pack("BBHBBBBBf", 1, 0, 2, flag, roll, pitch, yaw, gaz, psi )
struct.error: ubyte format requires 0 <= number <= 255
No jo no, mají tam být znaménkové bity (diff).
Jako další test jsem chtěl nahrát let chodbou. Nevím jaká je má skrytá motivace, ale drona co systematicky prolétává koridory a straší děti mi asi přijde cool . Ale chyba lávky. Nějak mi zlobí nahrávání videa. Když jsem koukal přes telnet na velikost volného místa, tak vše bylo zaplněné — asi ty pády programu z předešlých testů. Prostě to stále nahrávalo video, dokud nedošlo místo??? Teď je vhodná chvíle na revizi všech logů …
Jo a ten titulek! Já si stále nepamatuji, co z těch třech slov je náklon dopředu … mám i pocit, že na toto téma už je na robotice stažený pěkný obrázek … tak nevím, asi myslím ten z wikipedie. Ono když mi Katarina systematicky uhýbala vlevo, tak jsem zkusil změnit druhý parametr a pak už letěla skoro rovně vpřed.
První log bez videa — ani ťuk zajímavosti :-(. Tedy alespoň je vidět, jak se mění rychlost, takže bude možné doplnit nějakou „pseudo-regulaci”.
Tak obráceně — poslední log se záznamem videa … prostě ho přestal v půlce letu posílat, bez jakékoliv notifikace :-(. Tomu moc nerozumím.

4. březen 2015 — opraveno nahrávání videa

Ano, byla to samozřejmě moje chyba. Pustil jsem si teď dronu „na dobrou noc” s tím, že jsem zrušil automatické spouštění videa ve startovní konfiguraci a změnil to na ruční zapnutí při takeoff() a vypnutí u land(). Přidal jsem testovací rutinu … a nic. Nic to nenahrálo, ale na /data/ftp/internal_000/Bebop_Drone/media/ leželo divné video, které jsem tam včera neviděl. Prostě po prvním startu se spustilo nahrávání a nahrávalo se dokud jsem to nevypnul. Je tam tedy i krátký (poslední) let chodbou:
A jakou chybu jsem udělal? Pro zapínání a vypínání videa je enum, což ale znamená 4 bajty :-( … a já tam měl jenom jeden bajt (diff).

5. březen 2015 — OpenCV okno

Dnes jenom takový „štěk”, něco jako rada, že není dobré si svítit zapálenou sirkou, aby jste zjistili, kolik máte v nádrži benzínu … prostě věděl jsem to, přišel domu unavený, ale zkusil alespoň jednou odstartovat než bude moc pozdě … a zapomněl na dříve „potenciální”, později „reálný” problém s otevřeným OpenCV oknem přehrávajícím živé video.
Modří už tuší, co červení? Jo, to okno převezme focus, takže pak můžete mačkat ANY KEY a žádný Emergency STOP se nekoná. Ono by stačilo si prohodit okna, ale v těch pár sekundách (cca 1.5s) člověk moc racionálně neuvažuje. Reflex už byl vystartovat po droně než narazí do topení a otočit ji vzhůru nohama. Teprve pak mi došlo, v čem byl problém.

9. březen 2015 — video problémy

O víkendu bylo krásně a zbylo i trošku času na létání. Chtěl jsem znova zkusit demo.py, které by sledovalo kšiltovku. V první variantě Katarina vzlétne a jenom „pohybem očí” sleduje cíl z místa. Ve druhé variantně se pak za cílem otáčí.
V realitě to bouchlo už při prvním startu:
File "M:\git\ARDroneSDK3\katarina\bebop.py", line 106, in update
    data = self._update( createVideoAckPacket(data) )
  File "M:\git\ARDroneSDK3\katarina\navdata.py", line 321, in createVideoAckPacket
    assert fragmentsPerFrame < 64, fragmentsPerFrame # lazyness, to get started
AssertionError: 81
… ta lenost je hrozná věc . Navíc oprava byla hotova a vyzkoušena za pár minut (diff) … ale ono dříve bych neměl testovací příklady. Tady byly a bylo jich hodně. Hned další let přišel snímek 69, 74 a mám pocit, že jsem viděl i 92 dílků. Vypadá to, že oprava funguje a dostávám celé i velké snímky (typicky I-frame).
Co je tedy problém? Přestávalo mi chodit video. Podle logů jsem udělal 10 pokusů. Selhání u prvního pokusu je jasné — je fakt, že nahrávání se spustilo a díky assertu už nevypnulo, tj. trošku delší 1.4GB video.
Druhé video chybí, ale podle časů ve jménech souborů vidím, že příkaz stop video funguje. Stejně tak se i video průběžně posílalo ke zpracování. OK
Třetí video by bylo bývalo v pořádku, až na detail při přistání. Katarina nalétala trošku na skleník (ano, po minulém víkendu jsem se poučil a testuji jenom na „robo-louce”) a tak jsem přistál. Přistála ale asi do 10cm trávy a nechtěla se vypnout. V logu jsou nepříjemné hlášky jako:
Altitude -0.50595164299
Asi by to chtělo trávu posekat nebo alespoň naučit Katarinu se vracet na místo/základnu …
Po tomto pokusu jsem dronu zvedl a „zakroutil jí krkem” — ano myslím tím otočením vzhůru nohama, emergency a STOP. Hele, jestli právě toto není důvod, proč mi pak neposílá video??! Ne, v následujícím pokusu ještě pár (doslova, 2x I-frame a 5+1 P-frame) snímků poslala. Je fakt, že 71-dílný snímek posílala ve třech průchodech (normální, opravy a opravy oprav) a následující P-frame musela také opravovat:
…
Video 48 1 64 71
GPSDebugState, numSat = 8
Video 49 0 0 12
Video 49 0 1 12
Video 49 0 2 12
Video 49 0 3 12
Video 49 0 4 12
Video 49 0 5 12
Video 49 0 6 12
Video 49 0 7 12
Video 49 0 8 12
Video 49 0 9 12
GPSDebugState, numSat = 6
GPSDebugState, numSat = 6
GPSDebugState, numSat = 7
GPSDebugState, numSat = 7
GPSDebugState, numSat = 7
Video 49 0 0 12
Video 49 0 10 12
Video 49 0 11 12
… trošku to vypadá, že GPS status to rozhodí a pak už nepřišlo nic. Nikdy, až do vypnutí a testu druhý den. Je tedy potřeba video znova povolovat?? I v dalším logu na začátku vidím Video Enabled State 0 enabled (je to enum, kde hodnota 0 znamená enabled), tj. vše by mělo být OK?!
Druhý den jsem přidal nastavování konfigurace, že jsem venku a používám ochranný štít (diff), ale přišlo mi, že to stabilitě nijak nepomohlo.
Teď koukám na první pokus z neděle a tam je dokonce 101 dílků … jo, asi bylo opravdu na čase přejít od 64-bit potvrzování na 128-bit. Je zvláštní, jak je ten indoor fádní a bohatě si s 64 bity vystačí.
Ono to jenom vypadalo, že to funguje. Video přestalo posílat po skončení takeoff(). Pak další dva starty nic a teprve po výměně baterky zase chvíli pár snímků :-(.
Picture State Changed: 1 0
Co tím autor míní? A přišlo to cca 10x krátce po poslání příkazu k odstartování. Nevím. Podle ARDrone3_commands.xml to znamená, že v PictureStateChanged 1 if picture has been taken a ta 0 je Mass storage id where the picture was recorded … ale já žádný snímek nedělal?! Myslí automatický náhled pro video??
V tomto posledním pokusu se spojení „kouslo”. Přestaly chodit data. Aktuální plán je odsunout video zpracování do vlastního procesu a přidat timeout na spojení, i když zatím nevím co dělat pokud k němu dojde.

9./10. březen 2015 — Hledá se Bebop (Blansko)

Dnes jsem dostal první česky psaný mail od jednoho majitele Bebopa . Bohužel možná bývalého :-(. Radimův Bebop totiž uletěl (na severu Blanska). Netuším kolik lidí z této oblasti čte robotika.cz … asi 0. Pokud přeci jenom někdo najdete Bebopa, dejte mi vědět a přepošlu mail majiteli …
V první fázi mi zamrazilo, jestli nebyl řízen mým kódem … ale asi chyba Free Flight 3. Spojení se přerušilo v náklonu a Bebop uletěl přes pole … a po minutě asi došla baterka. Nebo si špatně definoval Home. Darryl také psal: Since the latest Firmware update from Parrot, GPS, with the associated "Return-To-Home (RTH)" feature have become unreliable/unusable, and has even caused several "fly-a way's" according to the forum. It's hard to say exactly where the issues are, either Firmware, or Free Flight App, but I have a feeling it's actually the Free Flight App. … těžko říci, jenom papouškuji.

11. březen 2015 — Fórum - Holy Crap!

„Trošku” se trápím s tím H264 kodkem pro Katarinu a tak jsem si dovolil (a to jsem si asi dovolil dost) pro zlepšení nálady „hodit návnadu” na britské fórum Parrotu. Nešťastník se sháněl po dokumentaci a tak jsem ho odkázal na github Katariny. No a před chvílí se ozval EnderFFX, že to četl a dal na americké fórum … titulek „Holy Crap, Details about Bebop Protocol, did anyone notice ?” … je čas jít se psem a spát.

15. březen 2015 — Oriented Roundel

Američan, Čech, Němec, Mexičan, Angličan, Francouz … možná to trošku přerovnat a byl by to pěkný úvod k nějakému vtipu . Nedělám si iluze, ale třeba se nakonec najde někdo na světě, kdo ten kód také zkusí. V každém případě při vzpomínce na Darrylův komentář na americkém fóru se musím vždy zasmát (až to přejde v záchvat kašle).
Něco nového? Poskládal jsem „dokument” Parrot Bebop Protocol — je to spíše přehled základních informací, co jsem o Bebopu/Katarině zjistil. Asi je to lepší začátek než odkazovat na Pythonovský kód, resp. takové doplnění, které v oficiálním SDK zatím stále chybí.
Víkend propršel a tak jsem udělal pár pokusů doma. Konkrétně se vracím k dva roky starému problému přistání. Chci použít Oriented Roundel k definici přistávací základny. ARDrone2 ho automaticky detekovala a posílala jeho pozici, ale pro novou dronu to bohužel neplátí. Nechci už přepínat na spodní kameru (resp. mám pocit, že to u ARDrone3 vůbec nejde), tak alespoň pár pokusů s
drone.moveCamera( tilt=-100, pan=0 )
Jenom pozorování, že dokud drona neodstartuje, tak stále posílá nulovou rychlost a výšku, ale úhly jsou snad aktualizovány. V prvním testCamera(), kdy jsem jenom sbíral obrázky data o pozici nebyly. A klasicky, když jsem odstartoval, tak jsem zapomněl sklopit kameru dolu [ale jó, když jsem stáhl videa a vše vypnul tak mi to došlo].
Přemýšlel jsem, kam takovýto kousek kódu dát. Až bude fungovat, tak asi nebude úplně triviální a zároveň by to mohla být poslední scéna po běžném letu, nebo jenom na nějaké tlačítko by se snažil chvíli hledat značku a teprve pak přistál … Je to vlastně behavior z tří-vrstvé architektury, kterou jsme na přednáškách před mnoha lety doporučovali, ale prakticky asi nikdy moc nepoužili. Tož adresář behaviors (je pěkné, že když na githubu do adresáře dáte README.md, tak ho automaticky zobrazuje za seznamem souborů).
Kód navigace na krabici zatím nic nedělá. Volá na snímky osvědčený MSER a pak získané kontury aproximuje obdélníkem a časem i kruhem. Z trojkombinace „klíčové dírky” by už snad vypadl jen jeden kandidát. No zatím mám problém ho vůbec vidět.
Naházel jsem tři pokusy do jednoho videa, jestli si chcete udělat lepší představu, co drona vidí, když se kouká (kamerou směřující dopředu) směrem dolů . Možná značku trošku posunu a budu startovat kolmo na oba symboly … ještě nevím. Nějaké nápady?

16. březen 2015 — BlackBox a NavData

To „zakázané ovoce” je vždycky problém … v případě Kateřiny Bebopové je to modifikace souboru /data/dragon.conf. Jsou tam takové položky, kterým prostě nelze odolat . Odkaz na zdroj jsem dával už na začátku tohoto blogu, ale včera jsem narazil ještě na zmínku na americkém fóru a to už bylo moc. Cvičně jsem nastavil jak blackbox_enable tak i navdata_enable na true.
BlackBox fungoval. Vznikl soubor light_run_0, který během pár minut měl 53MB. Pak jsem zkoušel blackbox_to_csv.py (parametry nejsou úplně zřejmé … –csv <filename>). Vznikl podobně veliký CSV soubor s 129ti sloupci: index, time_s, sensor_acc_raw_x_m_s2, sensor_acc_raw_y_m_s2, sensor_acc_raw_z_m_s2, sensor_gyro_raw_x_rad_s, sensor_gyro_raw_y_rad_s, sensor_gyro_raw_z_rad_s, sensor_mag_raw_x_mG, sensor_mag_raw_y_mG, sensor_mag_raw_z_mG, phi_EST_rad, theta_EST_rad, psi_EST_rad, gyro_filt_x_rad_s, gyro_filt_y_rad_s, gyro_filt_z_rad_s, p_EST_rad_s, q_EST_rad_s, r_EST_rad_s, acc_x_EST_m_s2, acc_y_EST_m_s2, acc_z_EST_m_s2, speed_horiz_x_m_s, speed_horiz_y_m_s, speed_horiz_z_m_s, sensor_ultrasound_height_m, sensor_pressure_Pa, height_EST_m, height_vision_m, sensor_vision_speed_x_m_s, sensor_vision_speed_y_m_s, sensor_vision_speed_z_m_s, phi_REF_rad, theta_REF_rad, psi_REF_rad, p_REF_rad_s, q_REF_rad_s, r_REF_rad_s, r_wanted_rad_s, motor_cmd_pitch, motor_cmd_roll, motor_cmd_yaw, height_REF_m, height_REF_filt_m, speed_z_REF_m_s, motor_cmd_height, motor_cmd_ff, motor_cmd_1_rpm, motor_cmd_2_rpm, motor_cmd_3_rpm, motor_cmd_4_rpm, controler_state, acc_bias_x_m_s2, acc_bias_y_m_s2, acc_bias_z_m_s2, gyro_bias_x_rad_s, gyro_bias_y_rad_s, gyro_bias_z_rad_s, gyro_unbias_x_rad_s, gyro_unbias_y_rad_s, gyro_unbias_z_rad_s, speed_body_x_m_s, speed_body_y_m_s, speed_body_z_m_s, sensor_imu_ref_temperature_degC, sensor_imu_obs_temperature_degC, sensor_barometer_temperature_degC, battery_dV, motor1_obs_speed_rpm, motor2_obs_speed_rpm, motor3_obs_speed_rpm, motor4_obs_speed_rpm, BLDC_error, BLDC_motors_fault, BLDC_status, BLDC_temperature_degC, calage_x_rad, calage_y_rad, biais_pression_m, use_US, estimator_drone_position_m_x, estimator_drone_position_m_y, estimator_drone_position_m_z, estimator_psi_fused_rad, sensor_ultrasound_id, vision_indicator, sensor_ultrasound_mode, magneto_bias_x, magneto_bias_y, magneto_bias_z, magneto_radius, sensor_gps_flags, sensor_gps_latitude_deg, sensor_gps_longitude_deg, sensor_gps_altitude_m, sensor_gps_speed_m_s, sensor_gps_bearing_deg, sensor_gps_accuracy, sensor_gps_num_svs, sensor_gps_used_in_fix_mask, heading_magneto_rad, magneto_calibration_state, altitude_pression_m, altitude_pression_filt_m, dynamic_model_b, dynamic_model_f0, dynamic_model_Cz, dynamic_model_rpm_eq, psi_VIDEOREF_rad, airspeed_body_x_m_s, airspeed_body_y_m_s, airspeed_body_z_m_s, wind_body_x_m_s, wind_body_y_m_s, wind_body_z_m_s, stateFlightPlan, gpsDeviationPostionErrorLat_m, gpsDeviationPostionErrorLong_m, gpsDeviationPostionErrorAlt_m, gpsLatitudeRelative_m, gpsLongitudeRelative_m, gpsNorthSpeed_m_s, gpsEstSpeed_m_s, gpsDataOk, gpsNewValidData, battery_filt, magneticDeclination_rad, magneticDeclinationLocked
No není to nádhera?!
Skoro bych řekl, že to jsou všechna data, jaká kdy posílala stará ARDrone2. Proto ten muj „tik” s navdata. Pokud je drona schopna ukládaná data do černé skřínky i posílat, tak by řízení mohlo být skoro 1:1. Ale zatím bez úspěchu. Možná to chrlí na jiný port?? A možná i Jessica měla podobné nastavení?

17. březen 2015 — Navdata zklamání

Tak to vypadá, že "navdata_enable" : true jenom zase ukládá nějaká data přímo na droně. Vznikl soubor navdatasMykonos3 (70MB), ale je to vlastně blackbox jenom textově, sloupce oddělené tabulátorem. Další zklamání jsem našel na githubu: Access to NavData. Nikolas od Parrotu tam potvrzuje, že ani Rolling Spider ani Bebop navdata na 200Hz neposílají: If you refer to the full navdata/200Hz mode of the AR.Drone and AR.Drone 2, this was a debug feature, which has been removed in the new drones. :-(

18. březen 2015 — Kolečka a obdélníky

Dnes ráno jsem si trošku hrál se základními geometrickými tvary (viz diff):
Přemýšlím, koho ten XP přístup, kdy nejprve to naprogramujete „špatně”, tj. co nejjednodušeji, a teprve pak „pořádně”, tak rozčiloval. Jestli to byl Zbyněk nebo kolegové v práci … nevím. Každopádně jsem měl málo času a tak jsem to „schválně” naprogramoval „špatně”. Ale začal jsem psát i unit test, tj. superšpatné to zase nebylo .
A co jde? Je třeba najít značku přistávací plochy. Ta je kombinací kruhu a dvou na sebe kolmých obdélníků. Zatím jsem z MSERu posbíral kandidáty, vybral si takové, které alespoň ze 70% vyplňují nejmenší obklopující kruh či obdélník, vyfiltroval duplicity a pak už jenom to rozhodnutí, co je a co není značka. A tady jsem to zatím odflákl:
  • když není ani jeden kruh nebo nejsou dva obdélníky, tak značka nenalezena
  • jinak vrať spojnici středu prvního kruhu a druhého obdélníku
Možná se zeptáte, proč právě druhého obdélníku?! … protože jinak by ten můj první unit test neprošel. Na druhou stranu už takto triviální algoritmus by šel zapojit do zbytku navigačního kódu a kdybych byl hodně drzý, tak s ním i odstartuji, abych nasbíral reálné protipříklady.
Jinak mám stále trápení s videem, které se po nějakém čase přestane posílat a v dalších startech už vůbec nenaběhne :-(. Funguje pouze nahrávání, ale to pak není vhodný vstup jako reference …
p.s. i v tak triviálním kódu lze udělat chybu (přehrávám si včerejší logy):
File "M:\git\ARDroneSDK3\katarina\behaviors\navbox.py", line 54, in matchCircRect
    return (circles[0][0], rectangles[1][0])
IndexError: list index out of range

20. březen 2015 — Sedm vteřin

Procházel jsem logy z úterního poletování a jediné co mi zatím přišlo podezřelé je, že video se přestalo posílat vždy po sedmi vteřinách?! Počet snímků a přenesených bloků byl různý a zhruba to odpovídalo okamžiku, kdy drona vystoupala do 1.5m a přešla do „levitování”. Po přistání už video nenaběhlo. Bylo nutné stroj vypnout a znova zapnout.
Chtělo by to další test, ale už je zase pozdě a není volný prostor. Když drona jenom leží na stole, tak je schopná posílat video i několik minut (tedy minimálně déle než 7 sekund). Je tam na 90% vazba na to létání, ale jaká?
Pro uklidnění jsem alespoň trošku vylepšil detekci přistávací plochy (viz diff). Konkrétně jsem chtěl ošetřit toto selhání:
Dosud jsem vybíral nejbližší obdélník velikosti průměru kruhu. Co jsem teď doplnil je, že mne zajímá jenom podmnožina z okolí kruhu. Přidal jsem i pár řádek na analýzu celého videa, místo jen jednotlivých snímků, a zpomalování při úspěšné detekci … prostě to co se mi na podzim líbilo na SICK Robot Day videu.

22. březen 2015 — PCMD @40Hz

Tak tento oříšek bych asi nerozlouskl :-(. V sobotu jsem přišel na způsob jak nasimulovat výpadek videa bez létání (viz diff). Následně jsem test ještě zjednodušil (diff), tj. jakmile pošlu první PCMD příkaz, tak přijdu o video. A pak už se nevrátí dokud Katarinu nevypnu a znova nezapnu.
Prima a teď jak to opravit?! Jsem rád, že jsem napsal na ARDroneSKD3/libARCommands/issues a k mému velkému překvapení mne dnes večer čekala odpověď:
When using the PCMDs, you should make sure that your send them with a fixed frequency (we use 40Hz / 25ms in FreeFlight), even if you're sending the same command every 25ms.
A change in the PCMD frequency is considered by the Bebop to be a "bad wifi" indicator. In this case, the bebop will decrease the video bandwidth (up to a "no video" condition if the indicator is really bad) in order to save the bandwidth for the piloting commands. When the PCMD frequency become stable again, the video bandwidth will rise again.
Pro neanglicky mluvící to ve zkratce znamená, že příkazy pohybu je třeba posílat s pevnou frekvencí (Free Flight používá 40Hz) a pokud tomu tak není, tak drona dojde k závěru, že je problém se spojením a minimalizuje počet posílaných paketů až video vypne úplně.
To i vysvětluje, proč to fungovalo tak „na půl”. Když jsem stoupal do nějaké výšky nebo letěl dopředu, tak to byl cyklus s pevným opakováním. Jak ale daný blok skončil časování se rozbilo a už do vypnutí nenaběhlo :-(.
Napsal jsem malý hack s posílacím vláknem (diff), který Nikolasovu odpověď potvrzuje. Teď je třeba to nějak integrovat, aby šly přehrávat logy a nepralo se více vláken o čítač u posílaných UDP paketů.
p.s. ráno mi došla ještě jedna hrozná chyba. Bebop protokol je trošku „naruby”, kdy data ze senzorů přicházejí zřídka (5Hz) a je třeba posílat často příkazy (40Hz) … a že jak mám update() smyčku „jako vždy”, čekej na data a pak pošli příkaz, a to je zde špatně! (fix). Proč? Protože jako příkaz se počítá i potvrzení video paketu … a v kombinaci s 40Hz mám konečně kompletní streamované video!

25. březen 2015 — Revize posílání příkazů

Zapojení vlákna posílajícího PCMD na 40Hz byla trošku otrava :-(. Ale je to teď snad hotové (diff). Asi největší „problém” byla má neústupnost z deterministického přehrávání logů … chtěl jsem jednak vědět jaké příkazy se přesně droně posílaly a dále jaké příkazy jsem já předával z hlavního kódu k poslání. Je to zmatené? No, když máte pevnou vysílací frekvenci a pošlete dva různé příkazy hned po sobě, tak v závislosti na implementaci se pravděpodobně buď první ztratí nebo druhý přijde do fronty a bude poslán „časem”. Vzhledem k tomu, že Katarina posíla informace o stavu jen na 5Hz, tak asi nemá smysl chrlit řídící příkazy … a navíc implementace bez fronty je snazší .
Do logovaných příkazů jsem přidal prefix INTERNAL_COMMAND_PREFIX a EXTERNAL_COMMAND_PREFIX podle toho, jestli jsem příkaz já poslal externě nebo samotné vlákno už mělo potřebu PCMD poslat. Externí PCMD příkazy také loguji, ale pouze jako separátor, tj. jenom ověřuji, že daný blok sedí.
Malá perlička — celou dobu jsem posílal vadné PCMD!!! Příkaz pohybu se totiž skládá z Booleanu (bajt) a čtyř dalších bajtů určující náklon nebo pohyb nahoru/dolu, vpravo/vlevo. Poslední parametr je float (4 bajty) … a modří už tuší, že na to je třeba dávat bacha, protože 5 není dělitelné 4 a tak se to defaultně zarovná a celý příkaz má navíc tři bajty! On ten poslední parametr je nepoužívaný (má znamenat azimut řídícího zařízení), takže jsou tam nuly a asi to droně moc nevadilo. Minimálně příkazy akceptovala.
Když už mám oddělené posílací vlákno, tak jsem tam dodělal i to indexovaní paketů v jednotlivých „kanálech”. Nyní je to poslední krok před posláním a uživatel se o to už nemusí nijak starat. Tímto zmizely z navdata.py všechny ty globální g_seq, g_seq2, g_seqAck, g_seqPongAck, g_seqVideoAck

30. březen 2015 — Vybité baterky

V pátek jsem byl už nějaký vyřízený — ráno jsem oživoval Arduino Uno s GPS a čtyřmi gyroskopy pro jeden školní experiment, pak se snažil sepsat příklad pro dk863 ohledně zpoždění videa a vznikl video2stdout.py, který streamuje Bebop video na stdout. Do toho v práci „záhada dvaceti sedmi zákazů na španělské tranzitní křižovatce” … prostě bylo toho nějak moc a těšil jsem se na víkend, až vysadím. Prostě programátor na baterky
Na toto téma mne celkem zaujalo 4. doporučení Romana Staňka: v sobotu nepracujte . [Forbes nám minulý týden poslal odkaz na článek Lidem nakonec pravděpodobně zakážou řídit auta, ale ten mne až tak nezaujal … ostatně to tušíme všichni, když i Apple hledá robo-programátory a i spřátelené robotauto na tom již pracuje na plný úvazek …]
Aby alespoň něco málo relevantního k Bebopovi, tak Vincent poslal link, jak upravit nastavení komprese videa … minimálně musím ocenit jeho prezentační schopnosti … jinak to je ten Francouz z vtipu před pár dny.

31. březen 2015 — Video Results Queue

Dnes to bylo dost přemáhání vstát a začít kódovat, do čeho se mi ani moc nechtělo a pořádně stále nevím jak … integraci výsledků ze zpracování videa. Nakonec jsem to udělal pomocí dvou Qeueue, kde zpracování (včetně dekódování z H.264) probíhá v odděleném procesu. Změnil jsem tedy i význam funkce setVideoCallback() — má teď dva parametry, kde první je funkce pro zpracování video dat a druhá vrací poslední výsledek nebo None, pokud žádný výsledek není (diff).
Teď přijde ta zábavnější část na výsledky zpracování reagovat.
p.s. včera jsem ani nezmínil, že už existuje alespoň jeden člověk, který kód Katariny nezávisle na mně zkusil. Soudím tak podle té stížnosti na pomalost videa … Linux (Ubuntu 14.04) … no doufám, že to trošku nastuduje, než zavolá drone.takeoff()

1. duben 2015 — Navigace na přistávací plochu

Včera jsem dělal první pokusy udržet se nad přistávací plochou (diff). Venku fičelo, že by mi Katarina ulítla i zabalená v krabici, a trošku se to projevovalo i v budově. Dávám tedy částečnou vinu průvanu, ale jen malou … prostě to ještě nefunguje.
Důležitou změnou oproti předešlému sběru dat bylo logování výsledků zpracování obrazu. Výsek z logu cv2_150331_155530.txt vypadá takto:
143
(2, None)
210
(32, None)
314
(62, None)
199
(92, None)
344
(122, None)
310
(152, None)
386
(182, ((236, 239), (231, 282)))
280
(212, ((204, 239), (200, 276)))
374
(242, None)
220
(272, None)
…
Je hned jasné, že vzor přistávací plochy byl detekován pouze 2x a to ve snímku číslo 182 a 212. Je také pěkně vidět, že I-frame je jeden z třiceti snímků (32-2, 62-32,…). Počet cyklů mezi jednotlivými snímky je ale spíše zavádějící … ono je to počet zpracovaných paketů, včetně video paketů, jejichž počet je proměnný v závislosti na složitosti scény a pohybu kamery.
Obrázky jsem si uložil a pak ručně procházel. Konkrétně mne zajímaly snímky časově sousedící s úspěšnou detekci:
Na obou snímcích je přistávací plocha evidentně viditelná. Problém u snímku číslo 152 byl, že střed detekovaného obdélníku byl dál než dvojnásobek poloměru. Po změně tolerance na 2.1 už prošel i snímek 242. U 272 byla zase příliš velká deformace kruhu — vyžaduji, že 70% plochy jsou „černé body” a tady bylo nutné posunout hranici na 64%.
Testoval jsem ve dvou sériích: 6 pokusů vzletu a přistání se stoupáním do 1.5 a pak 8 pokusů s korekcemi. Jelikož už v první sérii se stávalo, že přistávací plocha byla vidět pouze krátce po vzletu z výšky 1m, tak jsem i stoupání změnil na „stoupání s korekcemi do strany”. Vtipný byl pokus meta_150331_191314.log, kdy místo stoupání Katarina začala klesat! Je to i pěkně vidět na video záznamu, ale drone.altitude stále stoupá :-(. Fakt mne štvou, že už neposílají odděleně i data ze sonaru, kamery a barometru. Sigh. Nevydržel jsem to a založil libARCommands issue #6.
p.s. na obhajobu Parrotu musím zmínit, že Radimovi opravdu poslali nový kus …
p.s.2 nezmínil jsem, že pokud si chcete sami zkusit detekci, tak stačí zavolat
./navbox.py –test roundelnav_272.jpg

7. duben 2015 — Konec zápůjčky.

Přišlo to dnes trošku jak blesk z čistého nebe. Bebop/Katarina je potřeba na nějakou předváděčku. Asi to není úplně konečná, ale částečně asi jo. Řeší se tím účast na Robotem rovně 2015 (zbývá 7 dní do ukončení registrace!), potřeba dekódovat složitější H.264 video
Murphy se mi zase šklebí za zády — dnes jsem si stáhl ardupilot-mpng a paparazzi repository, protože o víkendu jsem změnil názor na psaní nízkoúrovňového software pro řízení dron. Po dlouhé době jsem se viděl s Ondrou a bavili jsme se, mimo jiné, o článku Build cargo drones, get rich a o tom, že existují alternativní SW pro hračky od Parrotu … no možná je dobře, že dronu vrátím teď. Na skříni je zaprášená Heidi a tam se to dá zkusit také … jen to nebude tolik bolet.
S Ondrou jsme se také bavili o tom, že je pěkné, že moje práce ostatní zaujala natolik, že si udělali fork Katariny . „Nu wot, što dělať. Děduška stárij i pojezd bystrij”.

16. duben 2015 — Remote Testing

Teď to teprve začíná mít pořádné „grády” . Programování bez drony. Testovací oblast Mexiko: ...in México there are no rules to fly drones yet (zones out of danger) and I have a big area. Zatím mám první logy včetně videa končícího crashem. Ti dobrovolníci (zatím dva Aldo/Mexiko a Charles/Francie) jsou odvážní … ale chtěli nějaké funkce a já nemám jak to zkusit (tedy ten crash byl z nulté iterace testFlyForward). Začal jsem tedy raději oddělenou větev DEVELOP a arénu pro kaskadéry najdete zde:

20. duben 2015 — Mexické video

Ze čtyř současných „testerů” je Aldo z Mexika asi nejaktivnější. Uploadnul i video z první kolize:
Řešíme teď navigaci na Home, kdy lze zadat souřadnice, ale skončí to ve stavu pending — tipoval bych, že ten příkaz bude nutné zadat ještě jednou, ale nechal bych Parrotu ještě 24h na odpověď.
Jinak jsem snad konečně vyřešil import z různých adresářů (diff) a to podle vzoru na stackoverflow.

21. duben 2015 — Skrytá kamera a Nao

Tak jsme s Charlesem snad odladili počáteční inicializaci všech proměnných. Ono to místo AllSettings totiž spíše chtělo AllStates. Tak nechť toto (diff) je první „vzdáleně odladěný” kód.
V posledním pokusu (meta_150420_173419.log) asi ještě běžela kamera, Charles delá nějaké trackování barvy, a tak se z toho stala „skrytá kamera” s pohledem do jeho kanceláře. Snímek sem doplním až po souhlasu Charlese. A co na něm bylo? Humanoidní robot Nao, pózující na druhém stole . Tak se mi to hned spojilo s Tanečně-performačním konceptem postaveném na bázi robotického fotbalu., co jsem viděl před dvěma týdny v La Fabrika.
Jinak v Mexiku prý prší, takže další NavigateHome test se zatím odkládá … ono tedy ještě není jasné, co jsou nutné podmínky, aby to fungovalo — viz Issue #7.