Lamia
Parrot Jumping Sumo v Pythonu
Jumping Sumo patří do rodinky MiniDrones, kterou Parrot představil loni. Na rozdíl od Rolling Spider (Jessica) a Bebop (Katarina) nelítá, ale pouze skáče. Robot dostal jméno Lamia a má stejný úkol jako Jessica loni: zdolat schody na Tour the Stairs … jen je na to tentokrát pouze týden! Blog update: 10/2 — END
Odkazy:
- Stránky českého prodejce: http://www.icornerhightech.cz/
- https://github.com/robotika/lamia
Obsah:
- Předehra
- Pružiny
- Codility
- První pohyb
- FreeFlight 3
- Verze 0
- Soutěž resp. přednášky
- Soutěžní kód
- telnet
- dragon.conf
- Road Plan
- Parrot Developer Fórum
- Panoramatické snímky?
- SICK Pink Cube
- Experiment s ORBou
- END
Blog
16. listopad 2015 — Předehra
Robota ještě nemám. Pokud vše dobře dopadne, tak si ho domu odnesu ve středu
odpoledne … a slavnostní otevření festivalu bude ve čtvrtek, týden na to.
Nebude to nuda . Chci se na to trošku připravit a hned první překvapení:
link https://github.com/ARDroneSDK3 vede na stránku, kde se píše This
organization has no public repositories. Hmm, to jsem zvědav, co se stalo.
Mám ještě staré klony repository, když jsem pracoval na
Jessice a Katarině. OK, konec paniky.
SDK je stále veřejná, jenom se změnilo jméno:
Tak co dál? Možná
inspirativní
video, co by Lamia měla umět. Skáče po schodech, do koše, na postel.
Podle XML příkazů ale moc parametrů k dispozici nebude:
<cmd name="Jump"> Request a jump <arg name="type" type="enum"> Type of jump <enum name="long"> Long jump. </enum> <enum name="high"> High jump </enum> </arg> </cmd>
Zaujalo mne, že Lamia by měla i vydávat zvuky (třída příkazů
AudioSettings/Theme s hodnotami robot, insect a monster).
Nabízí i jednoduché skriptování (asi příliš silné slovo) pomocí
RoadPlan (viz
tutoriál).
Dnešní záznam bych uzavřel odkazem na projekt
Sumo Charge, který má v plánu
autonomní dobíjení se vzdáleným přístupem přes internet. Odkazuje dále na
JumpingSumo-Python, což by
možná mohl být první start (i když jsem plánoval copy & paste
Katariny).
p.s. jdu se koukat na televizi … nějaký seriál Já a robot (ano, obsahuje
v názvu klíčové slovo a to mi teď stačí )
17. listopad 2015 — Pružiny
Robota ještě nemám, venku prší, tak zatím brouzdám po webu. Přes varovné hlášky
typu I have a problem with jumping "wheel" in the center of the jumping sumo
--- broke after a few
uses. nebo
drsnější I tried to show it off to my friends, and not only did it not jump
again, after one minute after power one it started to burn with white flame and
smoke . bych se
začal trošku bát. Přeci jenom pro vylezení schodů bude třeba 21x skočit. Na
druhou stranu uživatelů budou tisíce a toto je snad jenom „špička ledovce”.
Přes rozbité skákání jsem se dostal k videu
How to replace Jump Mechanism on
Parrot Jumping Sumo s detaily natahovacího kolečka:
A toto by mohlo být i mechanické řešení mého problému — Lamia by měla skákat
cca 80cm, ale je nutné se dotknout všech schodů, takže bych potřeboval cca 1/4
výšku … a to by mohla řešit výměna pružiny za slabší. Mechanismus
totiž vypadá jako nabít a pal, tj. žádné mezistavy.
Na téma pružin jsem pak zjistil, ze pérovna je hned „za rohem”
(pruziny.cz), případně že Alcomex má
na webu rovnou
katalog
s tabulkami. Počkal bych ale až jak bude Lamia vypadat ve skutečnosti. A ještě
jeden odkaz na výpočet
pružin.
23. listopad 2015 — Codility
Robota ještě nemám, abych parafrázoval své předešlé příspěvky. Není na skladě a
minulé úterý nedorazil. Alternativa by byla si koupit novější model na
Alze a pak
ho vrátit, ale to se mi nějak příčí. A 4999Kč se mi za to také nechce dát
(starší model byl za 2999Kč … i když teď tam vidím
rozbalený za
4135Kč, tak to asi vánoce dělají paseku).
Co v mezičase dělat? Byl jsem „programátorsky nabuzený”, takže, když jsem
narazil na
Codility
Challenge, jsem to po fyzicky náročném víkendu prubnul . Ještě to není
nejhorší, něco naprogramovat asi umím. Povolený čas 3h na 3 úlohy asi byl OK
(programovací jazyk si můžete zvolit, u mne to byl jednoznačně Python).
Naštěstí nejsem amík, takže mne nemusí trápit, že jsem nevyhrál $2500 = 63000Kč
= 21000Kč/h … to by šlo . Ono i
druhá cena 3x drona Lily by
nebyla špatná … minimálně by bylo zase o čem na robotice psát . No nic, na
to by člověk, resp. programátor, musel mít hodnocení (100, 100, 100).
Okurková sezóna snad zítra skončí …
25. listopad 2015 — První pohyb
Dnešní titulek už zní nadějně, není-liž pravda? Ale růžové to není, ostatně
jak by mohlo … robot bude zítra ráno a zítra večer (18h, NTK Galegie) je
slavnostní zahájení festivalu. Mezi tím normální pracovní den. Nevydržel jsem
to a „zainvestoval” hotovost do ROZBALENO RC model Parrot Jumping Sumo
White s tím, že je to předražené a že jim to zítra (?) vrátím. Na krabici
bylo navíc napsáno „04 Zápůjčky”, což je můj případ, nebo ne? No balení
nebylo kompletní — chyběl nabíjecí kabel! Tak jsem to chtěl vrátit hned a
oni, že na to mám 14dní … OK.
Nabíjení trvá 2 hodiny. Ano, opravdu. Tj. ve 20h jsem přišel z práce a ve 22h
udělal
první
test. Popojel jsem kousek vpřed, kousek vzad a zkusil skočit. Jezdilo to,
ale neskáče. Ono by to bylo divné, kdyby to hned vše fungovalo … nic, zítra
pokračování.
Ještě jeden vtipný (?) detail: po vložení baterie robůtek ožije, rozsvítí se mu
oči a po chvíli začne tancovat! Měl jsem ho na stole, že ho připojím na
nabíječku, tak jsem se trošku lekl.
27. listopad 2015 — FreeFlight 3
Včera večer jsem zkoušel Android aplikaci
FreeFlight
3. Na pracovním testovacím telefonu byla ještě nainstalovaná z loňska (tehdy
to byla minidrona Jessica) a bez problému se připojila,
zobrazila pohled z kamery a mohl jsem hned popojíždět vpřed a vzad. Otáčet mi
ale šlo jen o 90 a 180 stupňů. To mi chvilku trvalo, že musím mačkat display a
naklánět telefon („mrtvá zóna” byla nastavena poměrně široce). A skákalo to!
Tj. problém s pružinovým mechanismem není a je to čistě v „mém” software.
Co bylo trošku zklamání je výdrž baterie. Zkoušel jsem na dálkové ovládání
zdolat soutěžní schody a mám vážnou obavu, že to baterie nevydrží ani když to
budu brát po třech. Samotné skákání mne ale mile překvapilo. Lamia se po
dopadu snaží okamžitě stabilizovat, podobně jako dvojkolka
Segway, a tak v lepším případě jenom dosedne. V
horším, hrana schodu, to po pružných kolečkách dopadne až daleko od schodiště.
Mimochodem i pro Lamiu je dobré, že schodiště mají po obou stranách poměrně
vysoké mantinely. A konečně se snaží udržet směr, takže jako program by mi
stačil for-cyklus, ve kterém by byl jediný příkaz: skoč.
Druhé zklamání bylo, že video se dá nahrávat pouze do externí USB flashky
(navíc s micro USB konektorem), která ale není součástí balení. Chtěl jsem vám
ukázat jak to šlo, ale … sigh, je třeba rozchodit logování a z videopaketů
bych to pak poskládal.
Jinak robůtky mám teď dva: „Lamia A” a „Lamia I” … toto označení jsem
zvolil, aby si žádná nestěžovala „proč zrovna já jsem Béčko” (Cimrman).
Libila se mi i AI kombinace a vlastně i písmeno ukazuje na zdroj
(Alza,
iCorner). Barevně by druhá vypadala spíše na
Emmu Dax z Genetixu , ale
nechť.
p.s. upravil jsem trošku README u
haraisao/JumpingSumo-Python
28. listopad 2015 — Verze 0
Je doslova „za pět minut dvanáct” a konečně mám
Verzi
0. Nevím, co jsem dělal špatně v tom japonském kódu, ale teď to upraveným
kódem z Katariny skočilo.
Z detailů, na které jsem narazil a které později už nebudou zajímavé:
- bílá Lamia se dala z notebooku připojit, ale hnědá nikoliv — problém byl v defaultní WiFi, která je na 5GHz a já potřeboval 2.4GHz. Lze vyřešit tak, že se podrží 3s zapínací tlačítko (u bílé jsem to možná včera udělal nechtěně, když jsem se jí snažil vypnout). Ano, dnes jsem klesl tak hluboko, že jsem si přečetl i manuál
- Jumping Sumo používá jinou IP (192.168.2.1, Katarina měla 192.168.42.1)
- základní příkazy pro pohyb jsou jiné (PCMD má teď jenom rychlost jízdy a zatáčení)
- Sindy (náš pes) se, na rozdíl od dron, skákací potvory bojí (asi jak vydává zvuky)
- Lamia skoro nic neposílá, jenom ping-pong časové známky (tj. změnil jsem vnitřní update() funkci)
- video asi chodí po celých snímcích, protože původní 40960 bajtový buffer nestačil (teď jsem tam dal 240960)
- zase jsem narazil na podraz s enum, který není bajt, ale čtyři bajty
Je čas jít spát. Zítra, resp. už dneska v 13h na viděnou v NTK Galerii …
5:30-7:30
Ještě pár poznatků, než vyrazím do NTK:
- japonský kód stále neskáče … rezignoval jsem na něj a pokud se autor neozve, tak ho asi odstraním (i když jeho knihovna se mi líbí, že je celkem kompaktní)
- zaujal mne identifikátor ARCOMMANDS_ID_JUMPINGSUMO_PILOTING_CMD_ADDCAPOFFSET a tak jsem ho společně s ovládáním hlasitosti (děsně to řvalo a v noci a brzy po ránu to není úplně chtěné) vyzkoušel (diff). Co to dělá? Otáčí robota o přesně definovaný úhel v radiánech a to by se na točitém schodišti mohlo hodit.
- video není H264, ale sada klasických JPEG obrázků. Upravil jsem tedy video.py aby místo frame_XY.bin ukládal s koncovkou .jpg (diff). Včera jsem po skoku měl příliš krátkou pauzu, a tak let a dopad nebyl už logován. Dnešní „duch na židli” = snímek 0131 vypadá takto:
(omlouvám se za mizerné osvětlení)
29. listopad 2015 — Soutěž resp. přednášky
Včerejší soutěž dopadla nakonec celkem dobře, přestože jsem vynechal dopolední
testování. Vedle totiž probíhala sekce robotických přednášek, které byly
naprosto luxusní (!), a akustika v Galerii byla tak mizerná, že stačilo, aby se
na druhé straně místnosti někdo bavil a už bylo špatně slyšet. Přednášky byly o
evoluční robotice, robotech, kteří žijí v symbióze s rostlinami a směřují
jejich růst, rekonfigurovatelní swarm roboti, roboti, kteří se vyrovnají s
defekty svých částí, modulární stavebnice, kdy děti od osmi let jsou schopné
postavit chodící nebo jezdící „tvory”, „genetický” drátový robot, který
podle robotické DNA drát kombinovaný s motory zohýbá a výsledný „1D robot” se
pohybuje v prostoru … fakt luxus a špičkoví přednášející! Bylo nás tam cca 15
a z toho 6 přednášejících — z tohoto pohledu bych plakal.
No nic, to jsem odbočil, ale co mne trošku znáte, tak pochopíte, že jsem si
vedle prostě hrát nemohl. Zmíním k tomu alespoň pár odkazů, co jsem si napsal:
- Joel Lehman, autor knížky Why Greatness Cannot Be Planned … ukončoval to pěknou hláškou, skoro bych řekl „životní motto”: To achieve your highest goals, you must be willing to abandon them. (článek).
- Picbreeder.org — evolutionary art
- REAL - Robotics, Evolution and Art Lab
- florarobotica.eu
- mars-one.com
- Elephants Don’t Play Chess
- Playware
- OpenSource under water robot nebo přímo OpenROV … ale hledal jsem REMORA …
- Human Brain Project
- shaperobotics.com — robotická stavebnice
… nějak mi teď přijde nepatřičné psát dál o problémech s řízením podle stavu
baterek. Asi až … časem.
1. prosinec 2015 — Soutěžní kód
Raději doplním alespoň krátkou zprávu o použitém kódu než to vše zapomenu …
Asi bych začal
odkazem
na github, kde je stav skriptu, pro který Lamia získala maximum bodů (10 na
točitém schodišti v posledním kole). Robot skákal, otáčel se o 10 stupňů po
každém skoku a couval, aby se dotknul přeskočených schodů (jinak by nezískal
bod). A právě s couváním byl největší problém. Řízení robota je asi obyčejné
PWM, tj. když jsou baterky nabité, tak na „padesátku” ujede řádově více než
když baterky dochází.
Včera (?) jsem pustil git pull na
libARCommands a zaujal mne
commit
Add
command to let the JS report its speed. Je tedy možné, že pokud flashnu
firmware, tak Lamia začne reportovat svoji skutečnou rychlost?! Myslím, že to
rozhodně stojí za pokus a pak by to soutěžení bylo o něčem jiném … možná až
moc nuda .
Jinak jestli jste neviděli Lamii v akci, tak viz
ČT
art (no je tam vidět vlastně jenom jeden skok, tak nic).
3. prosinec 2015 — telnet
Prapůvodně jsem chtěl nahrát pouze nový firmware, ale ono i
nejnovější dostupná
verze verze je 1.99.0 a ta je ze začátku roku, tj. velmi pravděpodobně
stejně informace o ujeté vzdálenosti, resp. aktuální rychlosti v cm/s posílat
nebude.
Co jsem našel? Řekl bych, že už standardně se hlavní řídící program jmenuje
dragon, přesněji dragon-prog, kterého pouští DragonStarter.sh.
Zajímavý je adresář /usr/bin, kde jsou pomocné nástroje jako:
[JS] $ ls | grep js_ js_PCA96n js_adc js_motors js_vbat
Předpokládám, že je třeba nejprve „zabít draka” a pak je možné je používat.
Příklady výpisů:
[JS] $ js_motors ***** "js_motors": Version 1.1 Build for Proto A3 ***** js_motors Usage: js_motors –help js_motors –stopall--- Description: This program is made to command Jumping Sumo Motors--- Options: -h, –help Dislay this help -S, –stopall Stop all motors! -r, –right <cmdRight> Right motor command (-255->255) -l, –left <cmdLeft> Left motor command (-255->255) -j, –jump <cmdJump> Jump motor command (-255->255) XXX TODO Add time out!--- Example: TODO *****
[JS] $ js_vbat JS_VBAT : Vbat = 3.614986 V
[JS] $ js_adc ### save_or_print_results_mode = 4 mmap phy@0x400ea000 cpu@ 0x402e0000 ** INIT DONE ** wait 1 sec… START CAPTURE: => Ok __________________________________________________ | N loop | I jump | R wheel | offset | N cycle | | 39 | 518 | 521 | 49152 | 2623983794 | OUT OF LOOP (40 loops) #### The End ! err=0 ; nbLoopBeforeErr=-1 #### munmap… #### close driver… #### close files…
a konečně
[JS] $ js_PCA96n "js_PCA96n": Version 1.0 ***** js_PCA96n Usage: Read reg : js_PCA96n <regAdd> Write reg : js_PCA96n <regAdd> <regVal> *****
Nuže draka jsem nezabil a možná ho dotazem na stav baterky zmátl, tak se zuřivě
rozblikaly červené LEDky a robot se vypnul. Je i možné, že už baterie byla
opravdu vybitá — příště testovat na nabíječce!
p.s. myslíte, že I jump = 518 je čítač dosud provedených skoků? Jestli ano,
tak potěš …
4. prosinec 2015 — dragon.conf
Dnes jsem se moc daleko neposunul. Prohlížel jsem si konfigurace a moc mne
nenadchly:
dragon.conf
{ "JumpingSumo" : { "audio_theme" : 0, "net_outdoor" : 0, "volume" : 10.0, "wifi_autoselect_mode" : "2.4GHz", "wifi_band" : 0, "wifi_channel" : 13 }, "network" : { "auto_country" : 1, "country_code" : "NL", "default_c2dport" : 54321, "default_d2cport" : 43210, "product_name" : "JumpingSumo-PI040318AB4H029718", "service_type" : "_arsdk-0902._udp" } }
system.conf
{ "CKCM":{ "Enable":true, "DisplayTargetTime":true, "DisplayThreadId":true, "DisplayThreadName":true, "DisplayThreadPrio":true, "DisplayPC":false, "PortType":3, "DeviceName":"/data/ftp/ckcm.bin", "UartBaudRate":115200, "SocketPort":23000, "MaxFileSize":1000000, "Delay":500, "TcpPort":23059, "Libraries": [ { "Name":"TANGO", "Verbosity":0 }, { "Name":"TALA", "Verbosity":0 } ] } }
Stále jsem doufal v nějaký debug, který nastavím na True a Lamia začne
posílat debug hlášky, ale nevypadá to nadějně … zatím.
Ještě pár ukázek z pouštění „draka”:
[JS] $ /usr/bin/dragon-prog –help posix init start build on : Aug 4 2014 17:34:44 Use ctrl+\ (SIGQUIT) to end the application plog drop: RR time quantum 0s 0ns tid=(nil), [I] POS: sup log : stack size 16144 is too small, setting to 16384 tid=(nil), [I] dragonprog: Usage: /usr/bin/dragon-prog [options] Options: -h | –help Print this message –version Print version informations -i | –ip <IP> host IP -v | –verbose <V>
[JS] $ /usr/bin/dragon-prog –version posix init start build on : Aug 4 2014 17:34:44 Use ctrl+\ (SIGQUIT) to end the application plog drop: RR time quantum 0s 0ns tid=(nil), [I] POS: sup log : stack size 16144 is too small, setting to 16384 tid=(nil), [I] dragonprog: tid=(nil), [I] dragonprog:----------– tid=(nil), [I] dragonprog: Version Informations : tid=(nil), [I] dragonprog: BUILD_DATE = 2014-08-04 tid=(nil), [I] dragonprog: BUILD_TIME = 17h27m27s tid=(nil), [I] dragonprog: BUILD_COMPILER = pimo tid=(nil), [I] dragonprog: BUILD_COMPUTER = pimoEliteDesk tid=(nil), [I] dragonprog: BUILD_DRAGON_VERSION = 1.0.80 tid=(nil), [I] dragonprog:----------– tid=(nil), [I] dragonprog:
a konečně pokus o verbose
[JS] $ /usr/bin/dragon-prog -v 2 posix init start build on : Aug 4 2014 17:34:44 Use ctrl+\ (SIGQUIT) to end the application plog drop: RR time quantum 0s 0ns tid=(nil), [I] POS: sup log : stack size 16144 is too small, setting to 16384 Initialize PAL log date=000000065711, tid=(nil), tname=init, [E] POS: The callback is NULL CKCM config loaded and started. Enable 0 for TANGO Enable 0 for TALA---------- MPU FACTORY CALIB:---------- sizeof (HAL_mpu6050_factory_file_calibration_t) = 54 SIZE = 52 VERSION = 1 = 0x 1 CHECKSUM = 29574 = 0x 7386 gyro_offset : +0.01827 ; -0.00863 ; -0.05359 gyro_gain : +0.99116 ; +1.00688 ; +0.99578 acc_offset : -0.10199 ; +0.57647 ; -0.23113 acc_gain : +0.99682 ; +0.98458 ; +0.99619---------- pwm_requested_frequency_Hz: 50000, mode : "8 BITS MODE" pwm_num 2 : pwm_actual_frequency_Hz = 54166 pwm_requested_frequency_Hz: 50000, mode : "8 BITS MODE" pwm_num 3 : pwm_actual_frequency_Hz = 54166 pwm_requested_frequency_Hz: 50000, mode : "8 BITS MODE" pwm_num 0 : pwm_actual_frequency_Hz = 54166 pwm_requested_frequency_Hz: 50000, mode : "8 BITS MODE" pwm_num 1 : pwm_actual_frequency_Hz = 54166 libHAL's HAL_P6i_adc_jpsumo_init: mmap kernel_ptr@0x(nil) user_ptr@0x0x40a4d000 [libFSM ERROR] Duplicate stateID [ESTIMATOR] Start estimator state machine state entry : init [DRIVING CONTROLLER] Start control state machine jump state entry : init [JUMP CONTROLLER] Start control state machine No high jump : phi is too low File /tmp/run/init/etron_started already exists. Unknown host init OK !!!! [ANIMATIONS] Start animations state machine : state entry : start jump state entry : unknow jump state entry : stop detection init jump state entry : to_cam_stop cam stop detected jump state entry : learning jump state entry : to_cam_stop [libFSM] stop state entry : driving normal cam stop detected jump state entry : unloaded state entry : stopping normal state entry : waiting
tak asi nic. Můj další cíl je prozkoumat
Road
Plan, což by měl být skipt popisující nějakou animaci, např. jeď 1m rovně,
otoč se o 45 stupňů, skoč, udělej fotku atd. Bohužel popis formátu jsem
nenašel, takže to bude delší cesta přes hackování s Free Flight 3.
Mimochodem FF3 je i na
Windows
Store, ale na Windows 10 zatím upgradeovat nechci.
5. prosinec 2015 — Road Plan
Nedal jsem včera robota na nabíječku a to se mi teď samozřejmě vymstilo. Stihl
jsem akorát zadat první příkaz „jeď 1 metr rovně”, přihlásit se telnem a
podívat se, jak to vypadá:
[JS] $ pwd /data/ftp/internal_000/Jumping_Sumo/scripts [JS] $ ls 2e27a947-16cd-4e50-a181-4a3e0ee39d2d.json [JS] $ cat 2e27a947-16cd-4e50-a181-4a3e0ee39d2d.json { "product": "902", "version": 1, "uuid": "2e27a947-16cd-4e50-a181-4a3e0ee39d2d", "lastModified": 1449291081, "name": "05\/12\/2015 05:51", "description": " ", "instructions": [ { "name": "straight", "comment": " ", "distance": 1.000000, "maxSpeed": 1.000000 } ] }
To vypadá celkem srozumitelně, není-liž pravda? Žádné složité binární
protokoly, jenom textový JSON. Asi bych si teď troufl změnit požadovanou ujetou
vzdálenost a maximální rychlost. Ještě by mne zajímalo, zda funguje záporná
vzdálenost (v té dělám snad vždycky chybu), protože na klávesnici Free Flight
3 jsem mínus neviděl. Pozn. do "description" a "comment" jsem teď vložil
extra mezeru, aby to robotika-parser neinterpretoval jako kurzívu.
Robot se na nabíječce nechce nechat zapnout, tak to dnes bude holt asi jenom
tento „štěk”.
p.s.
{ "product": "902", "version": 1, "uuid": "2e27a947-16cd-4e50-a181-4a3e0ee39d2d", "lastModified": 1449296904, "name": "05\/12\/2015 05:51", "description": " ", "instructions": [ { "name": "straight", "comment": " ", "distance": 0.500000, "maxSpeed": 1.000000 }, { "name": "arc", "comment": " ", "maxSpeed": 1.000000, "angle": 180.000000, "radius": 0.000000 }, { "name": "animation", "comment": " ", "animation": "metronome" }, { "name": "takePicture", "comment": " " }, { "name": "straight", "comment": " ", "distance": 0.500000, "maxSpeed": 0.500000 }, { "name": "ledRed", "comment": " ", "side": "right", "lit": true }, { "name": "ledRed", "comment": " ", "side": "left", "lit": false }, { "name": "ledGreen", "comment": " ", "side": "both", "value": 255 }, { "name": "wait", "comment": " ", "duration": 1.000000 }, { "name": "takePicture", "comment": " " }, { "name": "posture", "comment": " ", "type": "jumper" } ] }
6. prosinec 2015 — Parrot Developer Fórum
Djavan mi odpověděl na
dotaz
ohledně odometrie a přesměroval mne na
Parrot Developer
Fórum (asi je nutné přihlášení). Nic přímo použitelného jsem tam zatím
nenašel, snad jen poznámka ohledně firmware, kde 2.0 je určené pro nové
Jumping Sumo Race. Jestli se tím dá ale flashnout staré Jumping Sumo
netuším.
Narazil jsem ještě na
Hacking
the Parrot Jumping Sumo, kde mne zaujala nápověda Debug options at
/etc/debug.conf, tak se na to jdu podívat … nic tam není :(. Je tedy možné,
že v pozdějším firmware byl odstraněn???
8. prosinec 2015 — Panoramatické snímky?
Přemýšlel jsem co s robotem dál a trošku se nabízí „panoramatické snímky”.
Lamia má mizernou, nebo bych spíše měl psát nedostupnou, odometrii, ale
dokáže se velmi pěkně a přesně natáčet. Pravda, že jak moc přesně to je
nezjistím, dokud to pořádně nezměřím, ale i to co jsem viděl bylo OK.
Dal jsem tedy do gitu jednoduché demo
(diff),
kdy se robot otočí o DEG_STEP, zastaví, uloží snímek a tak celých 360
stupňů.
def demo( robot ): "panoramatic picture" DEG_STEP = 30 robot.setVideoCallback( keepLastImage ) for absAngle in xrange(0, 360, DEG_STEP): robot.update( cmd=addCapOffsetCmd(math.radians(DEG_STEP)) ) robot.wait(1.0) assert g_lastImage is not None open( "scan%03d.jpg" % absAngle, "wb" ).write( g_lastImage )
Pak jsem dal do Google "cv2 image stitching" a mimo jiné vypadl odkaz
na
Multiple
Images/ Panorama Stitching with Python OpenCV i se
zdrojovým kódem. Trošku jsem to
upravil, aby to šlo vůbec pustit
(pull request), ale možná jsem
to špatně pochopil, nevím. V každém případě pro testovací sadu snímků to
nefungovalo, ale pro první dva jsem nějaký výsledek dostal:
Ta distorze je neúnosná a je třeba jí nejprve kompenzovat. Ostatně jsem na
tento problém narazil i na stránkách
stitcheru.
Pokud by si někdo chtěl hrát nezávisle, tak tady je sada obrázků po 30
stupních:
Koukám, že posun křížení dlaždic je cca po 200 pixelech, obrázky jsou 640x480 a
krok byl 30 stupňů, tj. hrubým odhadem má Lamia 90 stupňů FOV — to není
špatné. Ono je to vlastně vidět i na té sekvenci, když se člověk podívá na
sloupec místo na řádek.
Neodolal jsem, a od oka to bez kalibrace nařezal
(diff,
případně
stitcher.py.
Vyříznul jsem zhruba tu 1/3 (s těma pár pixelama by si asi chtělo pohrát) i na
výšku z každé stranu ubral 100 pixelů a na těch 15min práce výsledek není až
tak špatný:
5. leden 2016 — SICK Pink Cube
Je to už nějak hrozně dlouho, co jsem k Lamia nic nepřipsal — i jsem za tu
dobu stačil zapomenout, jak se ten skokan jmenuje :-( … resp. pardón,
skokanka. Alespoň bych tedy zmínil, co se za ty tři neděle dělo (vánoce a Nový
rok trošku ignoruji).
Jednak mi kolega z práce přivezl z Německa kostičky pro
SICK Robot Day 2016 (aktuální anglický externí
odkaz je zde). V
rámci „robotického semináře” měli studenti navrhnout nabírací mechanizmus a
nejlepší by bylo ho rovnou vyzkoušet v akci, tj. detekovat kostku, přijet k ní
a nabrat jí. A ta detekce by vlastně mohla být i pěkné cvičení na zpracování
obrazu co posílá Lamia:
Druhý střípek byla oponentůra práce Martina Döflera spojená s článkem
Vision-Based Pose Recognition, Application for Monocular Robot Navigation
(na webu zatím vidím jen placenou verzi). Je to nápad, jak rozšířit navigační
algoritmus SURFnav o detekci konce segmentů z obrázku, bez použití odometrie.
Jsem na toto téma trošku skeptický a nejlepší by bylo to vyzkoušet. A pokud
občas budu potřebovat „panoramatický snímek”, tak Lamia ho v hrubých rysech
poskladá (ano, otázka, jak moc by byl použitelný pro navigaci).
bezdrátová nabíječka |
A třetí střípek je, že dorazil „čínský vánoční dárek”:
bezdrátová
nabíječka, nebo jak se tomu říká. Myšleno je to pro mobily, které pak stačí
pouze položit na nabíjecí plošku. Chci to zkusit s Lamií a tak trošku
experimentovat s Sumo
Charge myšlenkou. Časem …
8. leden 2016 — Experiment s ORBou
Mám jen 15min, tak to bude jen takový „štek”. Jak jsem psal minule, rád bych
si pohrál s detektory a matchováním obrázku. A ono je to v Pythonu krásně
jednoduché , viz např.
tutoriál
py_surf_intro. Zaujalo mne varování SURF is good at handling images with
blurring and rotation, but not good at handling viewpoint change and
illumination change. Ale změna místa pohledu a osvětlení je jistá …
čert to vem, nějak začít musím.
Pak jsem párkrát stiskl Next, Next, Next … a dostal se na ORB desriptory
(mimochodem, už chápu proč vědecké články obsahují všechny možné typy
deskriptorů — ono je to skoro zadarmo, stačí slovo SURF nahradit ORB,
BRIEF, FAST a je to … no trošku zjednodušuji). A poznámka, co asi všichni
víte: ORB: An efficient alternative to SIFT or SURF in 2011. SIFT and SURF
are patented and you are supposed to pay them for its use. But ORB is not!
Tak jsem místo SURFnavu začal rovnou experimentovat s
ORBou.
Mám starší verzi OpenCV, tak mi nefungovalo zobrazování výsledného matchingu.
Evidentně v tom nejsem sám a nejrychlejší funkční řešení bylo vzít si kousek
kódu ze
stackoverflow.
Ještě zobrazení nefungovalo na barevné obrázky, tak jsem je narychlo transformoval na šedotónové.
a zdrojový kód je pak zde.
Ještě mi zbyly 4min, to bych nečekal … než to pushnu … timeout.
10. únor 2016 — END
Včera jsem Lamii vrátil. Předběžná domluva je, že si jí zase půjčím cca měsíc
do soutěže Tour the Stairs (bude-li dost
zájemců), protože tam přeci jenom pasovala lépe než minidrona
Jessica.
Nechávám tomu tedy „otevřený konec”. Pokud by v experimentování někdo rád
pokračoval, může si robota koupit na
icorner dnes za 2408Kč
(alza
má jenom ty novější za 4000kč) a napsat mi zkušenosti, případně poslat odkaz,
který bych zde doplnil.