<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Robotika.cz</title>
<link rel='self' type='application/atom+xml' href='http://localhost/feed/cs'/>
<link rel='alternate' type='text/html' href='http://localhost/cs'/>
<id>http://localhost/cs</id>
<updated>2017-05-16T00:00:00Z</updated>
<entry>
	<title>Robotem rovně 2017</title>
	<link rel='alternate' href="http://localhost/competitions/robotem-rovne/2017/cs"/>
	<id>http://localhost/competitions/robotem-rovne/2017/cs</id>
	<updated>2017-05-16T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Devátý ročník soutěže autonomních robotů a autíček pořádaný Radioklubem Písek
rozhodně nezklamal. Počasí nám přálo a to se projevilo i na divácké
návštěvnosti. Roboti se tedy vedle schopnosti jet rovně musí ještě naučit
&lt;i>prodrat se davem&lt;/i>, např. jevištěm rockového koncertu mezi stánky &amp;hellip; &lt;span class='smile'>&lt;/span>
&lt;b>Update:&lt;/b>
24/5 &amp;mdash; &lt;a href='/competitions/robotem-rovne/2017/cs#170524'>Short Circuits, ARBot a NDteam&lt;/a>
 </summary>
	<content type='html'> 
&lt;div class='p'>Soutěž &lt;i>Robotem rovně&lt;/i> mám rád. Sice je rok od roku těžší doma vysvětlovat,
proč někde musíme dokazovat, že náš robot neumí ani jezdit rovně, ale když
k tomu vyjde počasí, jako letos, tak je to radost. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>V první řadě se na jednom místě sejdou všichni, kdo si s mobilními outdoor
roboty hrají. Letos mi přišlo, že ani nezáleží jak daleko je jejich robotická
základna od Písku vzdálena: přijelo několik týmů z německého Deggendorfu,
loňský vítěz &lt;a href='/competitions/robotour/2016/results/cs'>Robotour&lt;/a> z Bratislavy, ND
Team&amp;hellip; Troufl bych si říci, že většina
soutěžících v Písku byla opakovaně (i když to nemám statisticky podložené).
Proč? Je to jedinečná (nebo dokonce jediná?) šance se probudit ze „zimního
spánku”, oprášit stroje a připomenout si, o čem ten reálný svět je. A
samozřejmě &lt;a href='http://pisekrobots.rajce.idnes.cz/od_cumila/#41_51243.jpg' class='external'>spousty dalších důvodů&lt;/a>.&lt;/div>

&lt;h1>John Deere X300R (CZU/TF + robotika.cz)&lt;/h1>

&lt;div class='p'>Zahradní traktůrek &lt;i>John Deere X300R&lt;/i> už účastníci viděli loni. Mojí motivaci
bylo ukázat, že jsme se od &lt;a href='/competitions/robotem-rovne/2016/cs'>cihly na pedálu&lt;/a>
za ten rok trošku posunuli. Hydraulické řízeni má zpětnou vazbu z měření na
levém předním kole, odometrie se počítá z enkoderů na obou předních kolech,
jsou zapojena čtyři bezpečnostní STOP tlačítka (o kterých se i řídící program
dozví, tj. nejenom zastaví motor, ale pošlou i signály po CANu), funguje dvojitý
nárazník, integrován je laserový dálkoměr LMS100, kamera.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/kids.jpg'>&lt;img src='/competitions/robotem-rovne/2017/kids_t.jpg' alt='hračka pro děti' title='hračka pro děti' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2017/kids.jpg'>hračka pro děti&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>CAN modul si teď lépe filtruje měření polohy pedálu a v kombinaci s daty z
enkodérů je již možnost regulace rychlosti (letos jsme jeli 0.5m/s). Tolerance
zatáčení kol byla ale 2.5 stupně, což by ale v soutěži znamenalo, že robot
sjede z cesty cca po 10m max. Dodělávali jsme tedy &lt;i>integrační složku&lt;/i>, kdy
pro akumulovanou chybu v natočení kol jsme jednorázově do nich „kopli”
(otevření hydraulických ventilu na jeden cyklus = 1/20s = 50ms). Toto řádově
pomohlo a hodí se to i do dalších, nesoutěžních, úkolů.&lt;/div>

&lt;div class='p'>Jaká byla AIQ robota v sobotu 13. května 2017 ráno? Řekl bych nízká &amp;mdash; robot
uměl reagovat na tlačítka a zastavovat na překážky detekované laserem. Jak už
to &lt;b>pokaždé&lt;/b> bývá, tak robot nechtěl v prvním kole vůbec odstartovat. Myslím,
resp. logy to pak potvrdily, že byl moc paranoidní a bál se vyrazit. Dav po
obou stranách byl blíže než 1.3m (asi o 2cm) a tak nechtěl jet (přesněji, pokud
je překážka blíže jak 1m, tak přejde do &lt;i>STOP stavu&lt;/i> a rozjede se až při
zmiňovaných 1.3m volného místa &amp;hellip; a někdo před robotem při startu přeběhl). No
nic, eXtrémní programování to sice nebylo, ale v tom dvou, možná tří, minutovém
okně jsem tam po dvou neúspěšných startech na vhodné místo &lt;i>zasekl&lt;/i>:&lt;/div>

&lt;pre>dist = 10.0&lt;/pre>

&lt;div class='p'>&amp;hellip; &lt;i>vše je v pohodě, všemi směry je 10m volného místa&lt;/i>. A pak bylo dobře, že
na traktůrku seděl Zbyněk. Nic by ho nezastavilo (tedy až na STOP tlačítka a
nárazníky). &lt;b>44m&lt;/b>&lt;/div>

&lt;div class='p'>Do druhého kola jsme toto trošku poladili. 270 stupňů jsme rozdělili na tři
sekce, kdy v levé a pravé byl limit snížen na 60cm a rozjezdová vzdálenost
70cm. Vpředu to zůstalo na původním 1m a rozjezd 1.3m. Sice jsme nedojeli tak
daleko jako v prvním kole, ale jen o pár metrů. &lt;b>38m&lt;/b>&lt;/div>

&lt;div class='p'>Pro třetí kolo jsme již měli nasbírána reálná data a vymýšleli &lt;i>chytrost&lt;/i>.
Konkrétně byl v Parku krásně zelený trávník, tak se od něj „odrážet” (i když
to bylo proti vnitřnímu přesvědčení sekačky). Nejjednodušší to bylo zapojit do
hlavní řídící smyčky, což ale zároveň je špatné místo &amp;hellip; a i se to v třetím
kole trošku projevilo. Traktůrek občas „pozastavil” protože systém
vyhodnotil, že laserová data jsou opožděna o více jak 0.3s a je tedy nebezpečné
pokračovat. Ale byli jsme svědkem dvoustupňové korekce a to nám stačilo.
&lt;b>74m&lt;/b>&lt;/div>

&lt;div class='p'>Do čtvrtého kola jsme kód trošku optimalizovali a pak robot stíhal zpracovávat
obrázky v hlavní smyčce. Skončili jsme na hnědé zadupané zemi u stolu
štamgastů, který přijíždějící traktůrek nijak nevyděsil &amp;mdash; možná to bylo tím,
že byl tiší než právě hrající kapela. &lt;b>84m&lt;/b>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/jd1.jpg'>&lt;img src='/competitions/robotem-rovne/2017/jd1_t.jpg' alt='' title='' class='border'  width='220' height='147'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/jd2.jpg'>&lt;img src='/competitions/robotem-rovne/2017/jd2_t.jpg' alt='' title='' class='border'  width='220' height='147'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/jd3.jpg'>&lt;img src='/competitions/robotem-rovne/2017/jd3_t.jpg' alt='' title='' class='border'  width='220' height='147'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Proč mám rád Python a jeho pomocné knihovny pochopíte z výsledného kódu:&lt;/div>

&lt;pre>#
                img = cv2.imread(filename)
                if img is not None:
                    img = img[2*768/3:,:,:]
                    r = img[:,:,0]
                    g = img[:,:,1]
                    b = img[:,:,2]
                    mask = np.logical_and(g > b, g > r)
                    left = mask[:, :512].sum()
                    right = mask[:, 512:].sum()
                    if left > GREEN_LIMIT or right > GREEN_LIMIT:
                        if left &lt; right:
                            global_offset = math.radians(2.5)
                        else:
                            global_offset = math.radians(-2.5)
                    else:
                        global_offset = 0.0
                robot.set_desired_steering(0.0 + global_offset)&lt;/pre>

&lt;div class='p'>&amp;hellip; tak s ním jsme to letos dotáhli na 11. místo.&lt;/div>

&lt;hr/>

&lt;h1>Bebop2 (CZU/INFO)&lt;/h1>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/ejLchCwiIm4" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;h1>Výsledky&lt;/h1>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/results.jpg'>&lt;img src='/competitions/robotem-rovne/2017/results_t.jpg' alt='výsledky' title='výsledky' class='border'  width='320' height='119'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2017/results.jpg'>výsledky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/winners.jpg'>&lt;img src='/competitions/robotem-rovne/2017/winners_t.jpg' alt='vítězové' title='vítězové' class='border'  width='320' height='213'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2017/winners.jpg'>vítězové&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h1>Odkazy&lt;/h1>

&lt;ul>
&lt;li>&lt;a href='http://pisekrobots.rajce.idnes.cz/' class='external'>fotky na rajce.idnes.cz&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;b>P.S. Omlouvám se za zveřejněný rozdělaný článek, ale nevím kdy dostanu
odstavečky od vítězů ani zda je stihnu v rozumném čase zveřejnit, tj. plánuji
ješte update&lt;/b>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170524">&lt;/a>&lt;/div>

&lt;h2>24. květen 2017 &amp;mdash; vítězné týmy&lt;/h2>

&lt;h1>Short Circuits Prague (Pavel Jiroutek)&lt;/h1>

&lt;div class='p'>Robotem Rovně byla naše první soutěž po tříleté pauze způsobené mým pobytem v
zahraničí, kde průměrná strmost domovního schodiště téměř neumožňuje chůzi,
natož přenášení těžkého robota (NL). Plán byl využít soutěž jako pevný milník
pro znovuzprovoznění původně funkčního HW a SW. Jak to ale bývá, plán byl až
příliš optimistický.&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/2ofthGwQmr0" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Největší ranou pro hladkou přípravu na soutěž bylo rozhodnutí (cca 2 měsíce
před soutěží) zmigrovat ze starého Pythonu 2.7 na 3.5. Důvodem byl plán začít
zkoumat DNN sítě ve frameworku, který novější python vyžaduje. Po hladké
základní migraci kódu se robotický SW úspěšně otestoval na přehrávači
historických dat a v simulátoru (používám V-REP). S optimismem a nákladem
jiných pracovních i nepracovních povinností jsem odložil další přípravu na
soutěž na čtvrtek před odjezdem do Písku. Bohužel se po prvním spuštění HW
ukázalo, že nefunguje vůbec nic. Nový python pracuje jinak s daty a jejich
kódováním, takže veškerou low-level komunikaci bylo nutné znovu odladit (po
mnoha letech bez zásahu už jsem na to nebyl psychicky připraven).&lt;/div>

&lt;div class='p'>Z pohledu HW došlo před soutěží k několika drobným změnám. Podařilo se mi
rozbít USB konektor u kamery, pořídil jsem tedy novou, outdoorovou, 170 stupňů
FOV. Také se mi nepodařilo najít IMU (našel jsem ji náhodně teprve včera pod
stolem v troskách jiného robota), tak jsem na robota umístil starý kompas.
Baterie naštěstí dlouhou odstávku přežily v pořádku (kromě baterie v řídícím
notebooku, kterou bylo nutné vyměnit a projít si neočekávaným kolečkem
kalibrace).&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/WiNX935XCSQ" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Jinak robot zůstal beze změn takto: Robot je na platformě podvozku modelu
monster trucku velikosti 1:5. Hlavní výpočetní jednotku tvoří standardní
notebook s Windows 10. Hardware je monitorován deskou Arduino Duemilanove.
Senzorické vybavení robota tvoří magnetický kvadraturní enkodér, kompas, zadní
sonary (pro tuto soutěž neaktivní), lidar (mířící šikmo na zem cca 3m před
robota), GPS (pro tuto soutěž neaktivní) a kamera. Software je psaný v jazyce
Python. Program získává aktuální informace o stavu HW prostřednictvím USB.
Informace o stavu HW získává Arduino, které je v pravidelných intervalech
posílá dále do hlavního programu. Hlavní program zajišťuje transformace stavu
HW do jednotek a struktur nezávislých na HW platformě, PID kontrolér rychlosti,
lokalizaci z odometrie a kompasu, detekci překážek a strmosti cesty (z lidaru)
a také hlavní funkční logiku řídící chování robota - navigaci po zadané trase.
Robot využívá strukturu Occupancy Grid Map pro fúzi vstupů z jednotlivých
senzorů a metodu Vector Field Histogram pro navigaci v grid mapě.&lt;/div>

&lt;div class='p'>Soutěž samotná proběhla až překvapivě hladce (na to, že jsem před soutěží
nestihl robota ani jednou otestovat jako celek). První kolo bylo trochu
kostrbaté, ale dojeli jsme až do konce a využili nasbíraných dat pro přesné
nakalibrování směru robota pro další kola. Cestovní rychlost byla 0.3 m/s,
takže jsme trať urazili za klidných cca 1200 sekund. Druhé kolo bylo o mnoho
lepší, asi hlavně kvůli provedené kalibraci. Také jsme dojeli až do cíle a to v
podobném čase.&lt;/div>

&lt;div class='p'>Před třetím kolem nám kolega z jiného týmu prozradil, že se před několika lety
změnila pravidla a že se roboti, kteří urazili celou trať alespoň jednou,
celkově rozřadí podle nejrychlejšího kola. Nemělo tedy cenu pokračovat v
hlemýždím tempu (viz &lt;a href='https://www.youtube.com/watch?v=2ofthGwQmr0' class='external'>první
video&lt;/a>), které jsme měli před třemi lety otestované. Abychom překonali
nejrychlejšího robota, nastavil jsem rychlost na 1.5 m/s. Tuto hodnotu jsem
použil spíše ve významu "maximální rychlost", protože jsem se domníval, že
robot této rychlosti nedokáže dosáhnout. Ani jsem neočekával, že by dojel nějak
daleko, protože veškerá konstanty (např. pro statistický update grid mapy) byly
laděny pro velmi nízkou rychlost, aby se nemusel příliš optimalizovat kód. K
mému velkému překvapení se této rychlosti robot skutečně celou cestu držel a
navíc se mu podařilo celou trať opět projet.  Tentokrát v čase 3:34 m (214
sekund). V cíli nám někdo řekl, že to na vítězství stejně není, protože to
někdo před námi projel za 3:05. I tak jsem měl vítězný pocit, že jsme z daného
HW a situace dostali maximum. Když jsme se vrátili na start, z výsledkové
listiny jsem zjistil, že ARBot neměl 3:05 minut, ale 305 sekund, takže náš čas
bohatě na první místo stačí (když to vidím teď zpětně, tak i těch 305 sekund mi
přijde jako neskutečná rychlost).&lt;/div>

&lt;div class='p'>Poslední kolo bylo už spíše exhibiční. Nechal jsem na robotovi nastavenou
vysokou rychlost, protože jsem si chtěl tentokrát udělat pěkné video (odkaz
níže) a potvrdit obecenstvu, že jsme si vítězství zasloužili. Tentokrát byl ale
dojezd do cíle mnohem více vydřený. Přibylo hodně lidí a náš týmový rozrážeč
davů (moje maminka běžící na videu před robotem) na to už sama nestačila. Robot
proto musel řešit i několik skoro-kolizí (viz další video níže). Do cíle se ale
dostal i tentokrát (za cca 288s). Tímto bych chtěl na cenu fair play nominovat
Aleše z ARBotu, který skončil druhý. Zásadně nám pomohl v druhé půlce tratě
udělat prostor pro dojezd opět až do cíle.&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/se4_BKLEwZk" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Závěrem bych chtěl zdůraznit, že Robotem Rovně je výborná vstupní soutěž do
robotické sezóny, ale i do outdoorové robotiky celkově. Díky zdánlivě
jendoduchému zadání se v ní lze dobře zúčastnit jak se začátečnickým tak i s
pokročilým robotem. Příště určitě pojedeme znovu. Mezi tím si ale dáme ještě
&lt;a href='http://robotika.vosrk.cz/roboorienteering/index.php' class='external'>Roboorienteering&lt;/a> a
samozřejmě &lt;a href='/competitions/robotour/2017/cs'>Robotour&lt;/a>.&lt;/div>

&lt;hr/>

&lt;h1>ARBot (Aleš Ruda)&lt;/h1>

&lt;div class='p'>Pro letošní sezónu jsem opustil technologii FPGA se stereoskopickou kamerou
vlastní konstrukce, ale ve 3D vnímání světa vidím mnoho výhod a tak jsem se
rozhodl použit komerční RGBD kameru Intel RealSense R200 a SBC UP2, který jsem
podpořil na Kistarteru. SW jsem upravil z linuxu pro windows. Nakódoval jsem
algoritmy pro detekci překážek z 3D kamery. Sonary jsem vyměnil za lidar
Slamtec RPLIDAR A2. Algoritmus VFH jsem nahradil navigací na gridu. No pak jsem
už jen čekal až mi dorazí  UP2.  Jenže SBC mi do závodu nedorazil a tak jsem ho
narychlo nahrazoval notebookem Acer Aspire ES13. A ejhle, notes lidar neutáhne.
Nu což, pojedu bez lidaru. A takhle jsem dorazil do Písku&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/arbot.jpg'>&lt;img src='/competitions/robotem-rovne/2017/arbot_t.jpg' alt='ARBot' title='ARBot' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2017/arbot.jpg'>ARBot&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>1. Kolo&lt;/h2>

&lt;div class='p'>Po startovním hvizdu robot vyrazí kupředu, ale něco je špatně. Jede mírně
doleva a po cca 30 metrech vyjíždí do trávy. Krátká analýza problému, vypnutí
všech neklíčových algoritmů, vlastně zbyl jediný – jízda podle kompasu a
posunul jsem požadovaný směr jízdy o 5 stupňů doprava.&lt;/div>

&lt;h2>2. Kolo&lt;/h2>

&lt;div class='p'>Tentokrát byl výsledek mnohem lepší. 108 metrů bylo výrazné zlepšení, ale zase
to táhlo doleva. Do třetího kola bylo spousta času a tak jsem se pustil do
testování. Z logů vyplynulo, že do levého motoru je nutné posílat o cca 6%
vyšší akční zásah, aby robot jel rovně. V několika iteracích jsem zvýšil
zesílení regulátoru, upravil požadovaný směr jízdy a vše důkladně přetestoval
na závodní dráze.&lt;/div>

&lt;h2>3. Kolo&lt;/h2>

&lt;div class='p'>Již první metry naznačily, co bude následovat. Robot jel krásně středem. Minul
značku 100m, 150m, 200m, 250m a 314m v čase 305 sekund. Hurááááá. V tu chvíli
to byl nejlepší výsledek závodu.  Jenže dlouho nevydržel. Famózních 214 sekund
týmu Short Circuits je nepřekonatelných. Zvýšil jsem tedy rychlost na
maximum.&lt;/div>

&lt;h2>4. Kolo&lt;/h2>

&lt;div class='p'>Vyšší rychlost se projevila jemným kmitáním robotu a opět táhnul doleva.
Závodní dráhu opustil u značky 120m.&lt;/div>

&lt;h2>Co se pokazilo?&lt;/h2>

&lt;div class='p'>Tak to bych taky rád věděl. Robot jel po cestičce, ale modrá čára
v následujícím obrázku ukazuje kudy si robot „myslel“, že jede. Velmi dobře to
souhlasí se zadaným směrem.  Zelená čára reprezentuje údaje z GPS. Domníval
jsem se, že problém by mohl být v motorové jednotce, ale její testování
neukázalo žádný problém. Že by magnetická deklinace? Ta je v ČR cca 3.5 stupně
východně, ale já mám odchylku 7.5 stupně západně. Záhada.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/arbot-map.png'>&lt;img src='/competitions/robotem-rovne/2017/arbot-map_t.png' alt='' title='' class='border'  width='320' height='205'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h1>ND Team (Pavel Skoták)&lt;/h1>

&lt;div class='p'>Na letošní (2017) Robotem Rovně jsem se vyloženě těšil, a to hned z několika
důvodů: Loni na podzim se mi podařilo integrovat na robota Speedyho homemade
360° skenující lidar, konečně jsem přišel na to, jak pořešit pthreads a tedy
vícevláknové programování v linuxu na mém oblíbeném Odroidu U3 a nakonec se
podařilo připravit i integraci kamery.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2017/ndteam.jpg'>&lt;img src='/competitions/robotem-rovne/2017/ndteam_t.jpg' alt='NDTeam' title='NDTeam' class='border'  width='165' height='220'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2017/ndteam.jpg'>NDTeam&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Účast v soutěži tedy měla být především ostrým testem nových senzorů a
algoritmu vyhýbání překážkám včetně detekce cesty kamerou.  Samozřejmě se
podělalo co mohlo, počínaje odřeknutím účasti mého kolegy a konče generální
stávkou napájení celého robota, která, jak se záhy ukázalo, byla pouze iluzí
způsobenou drobným opomenutím zásadního významu (blbě nastavená proudová
pojistka na laboratorním zdroji).  V každém případě další cenný čas v háji v
důsledku lokálního zatmění mysli.  Nefunkční budík v sobotu ráno a tím
způsobený hodinový lag byl už jenom ponurou třešničkou na dortu podrazů ze
strany škodolibého osudu.&lt;/div>

&lt;div class='p'>Nicméně, přijel jsem relativně včas, homologoval se, pokecal s kolegy a při
první soutěžní jízdě ujel celých 50m! Tak špatný výsledek jsem na této soutěži
ještě neměl. Takže plánované testy kamery šly stranou a začalo se upravovat
nastavení regulátoru azimutu, který zůstal od podzimu rozvrtaný, na což jsem
úspěšně zapomněl. Druhá soutěžní jízda ukázala, že je to téměř ono, pouze robot
trochu táhl doprava.&lt;/div>

&lt;div class='p'>Během přestávky na oběd byl čas obejít depo a ukázalo se, že valná většina
kolegů přes zimu rozhodně nezahálela a poměrně zásadním způsobem upravila
hardware i software svých strojů nezanedbatelným směrem vpřed, což potvrzuje
výsledková listina, kde šest robotů dojelo do cíle.  V každém případě bylo na
co koukat a o čem diskutovat.&lt;/div>

&lt;div class='p'>Třetí jízda se zdála být jízdou jistoty - Speedy se držel uprostřed cesty a
dělal čest svému jménu.  Na 290. metru mě kolemjdoucí jemně upozornil, že
robotovi odpadlo kolo. Nepublikovatelné výrazy jsem naštěstí udržel za zuby,
ale dojezd do cíle po nasazení kola mi paní rozhodčí stejně neuznala &lt;span class='smile'>&lt;/span> Letos
poprvé jsem před soutěží zapomněl dotáhnout kola a hned se mi to vymstilo.&lt;/div>

&lt;div class='p'>Čtvrtá jízda byla spíše jízdou v korytě kolemstojících a v cestě překážejících
diváků. Algoritmus vyhýbání překážkám naštěstí fungoval spolehlivě, takže jízda
skončila až u pomníku na konci cesty.&lt;/div>

&lt;div class='p'>Nakonec se ukázalo, že poslední výkon stačil na třetí místo, což bylo sice
nečekané ale milé překvapení.&lt;/div>

&lt;div class='p'>Letošní soutěž se opravdu vydařila, panovala družná atmosféra, bylo k vidění
několik zajímavých novinek a především nám nezvykle přálo počasí, takže roboti
letos nemuseli být vodotěsní.  Doufám, že příští, již desátý ročník, bude
podobně hojně obsazen a bude to ještě větší zábava.&lt;/div>

&lt;div class='p'>&lt;a href='/competitions/robotem-rovne/2017/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Formula-E Roborace</title>
	<link rel='alternate' href="http://localhost/competitions/formula-e-roborace/cs"/>
	<id>http://localhost/competitions/formula-e-roborace/cs</id>
	<updated>2015-12-21T00:00:00Z</updated>
	<author><name>Matin Dlouhý</name></author>
	<summary type='html'> Závod autonomních elektrických formulí &lt;i>ROBORACE&lt;/i> by se měl poprvé konat v
sezóně 2016-2017. Deset týmů, každý se dvěma vozy bez řidiče, bude soutěžit v
jednohodinovém závodě na závodních okruzích po celou sezónu. Všechny týmy
budou mít stejná auta, takže to bude soutěž použitých řídicích AI programů.
Jeden soutěžící bude „crowd-sourced community team”, tj. otevřený veřejnosti.
Máme se nač tešit &amp;hellip; &lt;span class='smile'>&lt;/span>  &lt;b>Blog update:&lt;/b>
22/5 &amp;mdash; &lt;a href='/competitions/formula-e-roborace/cs#170522'>Roborace Paris 2017&lt;/a>
 </summary>
	<content type='html'> 
&lt;div class='p'>&lt;iframe
src='http://fandorama.cz/projekty/921778164/formula-e-roborace-2016/status.html'
width='200' height='120' align='right' style='border: none;'>&lt;/iframe>&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://www.fiaformulae.com/en/news/2015/november/formula-e-kinetik-announce-roborace-a-global-driverless-championship.aspx' class='external'>Oficiální oznámení FIA Formula E&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.wired.co.uk/news/archive/2015-11/27/roborace-autonomous-cars-formula-e' class='external'>Formula E announces 300kph &amp;#039;RoboRace&amp;#039; championship (wired.co.uk)&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>Autonomní auta mne zajímají už od &lt;a href='/competitions/grandchallenge/cs'>DARPA Grand
Challenge&lt;/a> z roku 2004. Co ale nevím, jestli by to zajímalo i vás, čtenáře? Má
smysl přepisovat útržky nalezených článků do češtiny? Případně zajímavé kusy
kódu, pokud opravdu desátý tým bude vše zveřejňovat? Proto
&lt;a href='/articles/fandorama/cs'>fandorama&lt;/a> blog, který by měl pokrýt celou první
soutěžní sezónu.&lt;/div>

&lt;div class='p'>Zde je odpovídající fandorama link:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://fandorama.cz/projekty/921778164/formula-e-roborace-2016/' class='external'>http://fandorama.cz/projekty/921778164/formula-e-roborace-2016/&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="151222">&lt;/a>&lt;/div>

&lt;h2>22. prosinec 2015 &amp;mdash; fandorama do 24h&lt;/h2>

&lt;div class='p'>To jsem opravdu nečekal, že do 24 hodin od zveřejnění se naplní
&lt;a href='http://fandorama.cz/projekty/921778164/formula-e-roborace-2016/' class='external'>fandorama
rozpočet&lt;/a>! &lt;span class='smile'>&lt;/span> velké díky prvnímu stoupenci:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://cortexpilot.cz/' class='external'>cortexpilot.cz&lt;/a>.&lt;/li>
&lt;/ul>

&lt;div class='p'>Oficiální informace k soutěži jsou přislíbené až začátkem příštího roku, tak
alespoň přehled odkazů:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://www.linkedin.com/company/kinetik.vc' class='external'>LinkedIn Kinetik&lt;/a> &amp;mdash; investor,
 zakladatel Denis Sverdlov (zástupce ministra v ruské vládě v letech 2012
 a 2013)&lt;/li>

&lt;li>&lt;a href='http://www.kinetik.vc/' class='external'>kinetik.vc&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://roborace.com/' class='external'>roborace.com&lt;/a> &amp;mdash; budoucí stránky soutěže&lt;/li>

&lt;li>&lt;a href='http://www.charge.org/' class='external'>charge.org&lt;/a> &amp;mdash; EV technologie pro náklaďáky a autobusy&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/alejandro-agag.jpg'>&lt;img src='/competitions/formula-e-roborace/alejandro-agag_t.jpg' alt='Alejandro Agag - CEO Formula E, (motorsport.com)' title='Alejandro Agag - CEO Formula E, (motorsport.com)' class='border'  width='320' height='213'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/alejandro-agag.jpg'>Alejandro Agag - CEO Formula E, (motorsport.com)&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Asi zatím nejvíce informací je na již zmiňovaném
&lt;a href='http://www.wired.co.uk/news/archive/2015-11/27/roborace-autonomous-cars-formula-e' class='external'>wired.co.uk&lt;/a>.
Teď se snaží získat firmy, které již autonomní vozy vyvíjí (Google, Uber,
Continental a Bosh). Existuje i první verze API, aby týmy mohly začít se
simulátory &amp;hellip; dokumentaci jsem si vyžádal, tak uvidíme jestli odpoví.&lt;/div>

&lt;div class='p'>A hle &lt;a href='https://github.com/roborace/roborace' class='external'>https://github.com/roborace/roborace&lt;/a> &lt;span class='smile'>&lt;/span> jen tam zatím nic není.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160115">&lt;/a>&lt;/div>

&lt;h2>15. leden 2016 &amp;mdash; Wikipedia&lt;/h2>

&lt;div class='p'>Zatím je na všech „informačních frontách” klid. Jedinou novou informaci, co
jsem dnes našel je na stránkách
&lt;a href='https://en.wikipedia.org/wiki/Roborace' class='external'>Wikipedia/Roborace&lt;/a>. Je tam odkaz na
&lt;a href='https://en.wikipedia.org/wiki/2016%E2%80%9317_Formula_E_season' class='external'>Formula E
sezónu 2016-2017&lt;/a> a první závod se pojede v září 2016 v
&lt;a href='https://en.wikipedia.org/wiki/Montreal' class='external'>Montrealu/Kanada&lt;/a>.&lt;/div>

&lt;div class='p'>Možná za zmínku i stojí poslední odstavec z
&lt;a href='http://www.theverge.com/2015/11/27/9807456/formula-e-roborace-driverless-self-driving-car-racing' class='external'>The
Verge článku&lt;/a>:&lt;/div>

&lt;div class='p'>&lt;i>Roborace fills a gap left by the School Series, an electric kit car
competition for kids that was run before a number of races in Formula E's first
season. The School Series was dropped from the season two schedule shortly
before the first race in Beijing, leaving room for a new support series like
Roborace.&lt;/i> &amp;hellip; tj. ruší
&lt;a href='http://www.theverge.com/2015/4/29/8465307/electric-race-cars-formula-e-for-teens' class='external'>závody
pro děti&lt;/a> a nahrazují je závody pro roboty &amp;hellip; a co děti, mají si kde hrát?
&lt;span class='wink'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160216">&lt;/a>&lt;/div>

&lt;h2>16. únor 2016 &amp;mdash; API na výsledky&lt;/h2>

&lt;div class='p'>Koukám, že už je to měsíc, co jsem zde naposledy napsal odstaveček. Ono se
stále nic neděje. Alespoň jednou týdně projdu oficiální stránky a github &amp;hellip; a
nic. Jen různé polemiky typu
&lt;a href='http://www.motorsport.com/formula-e/news/opinion-10-reasons-not-to-dismiss-roborace/' class='external'>deseti
důvodů proč neignorovat robotrace&lt;/a>, kde pozorování, že publikum bude trošku
jiné a možná to přiláká i ostatní, kteří k F1 závodům nemají žádný vztah, mne
moc nenadchly.&lt;/div>

&lt;div class='p'>Zkouším také hledat &lt;b>"e-formula api"&lt;/b> a na to jsem dnes skoro poskočil, když
vyběhl odkaz na &lt;a href='http://ergast.com/mrd/' class='external'>Ergast Developer API&lt;/a>. &lt;i>The Ergast
Developer API is an experimental web service which provides a historical record
of motor racing data for non-commercial purposes. The API provides data for the
Formula One and Formula E series, from the beginning of the world championships
in 1950 and 2014 respectively.&lt;/i> Tj. není to API na řízení formule :-(, ale
přístup do databáze výsledků. Třeba se i toto bude časem hodit &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160405">&lt;/a>&lt;/div>

&lt;h2>5. duben 2016 &amp;mdash; Nový design&lt;/h2>

&lt;div class='p'>Informaci, že elektrická závodní auta budou mít nový design, jsem četl už zhruba před
mesícem. Ale byla to agentura JPP (Jedna Paní Povídala), resp.
&lt;a href='http://www.theverge.com/2016/2/18/11045278/roborace-car-design-tron-light-cycles-autonomous' class='external'>Roborace
hired the man behind Tron: Legacy&amp;#039;s light cycles to design its driverless
cars&lt;/a>. Musím uznat, že některé návrhy &lt;a href='http://danielsimon.com/about/' class='external'>Daniela
Simona&lt;/a> jsou opravdu „cool”, ale nějak mne spíše trápí technická stránka
soutěže a toto patří spíše do kategorie „nice to have”. No nic, už
&lt;a href='http://fiaformulae.com/en/news/2016/march/roborace-car-revealed/' class='external'>je to
oficiální&lt;/a> a tak si můžete prohlédnout „vyrenderovaný obrázek”:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/roborace-preview.jpg'>&lt;img src='/competitions/formula-e-roborace/roborace-preview_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Originál, v plném rozlišení, naleznete &lt;a href='http://roborace.com/i/preview.png' class='external'>zde&lt;/a>.&lt;/div>

&lt;div class='p'>p.s. mezi řádky &lt;i>The first Roborace 'shows' will take place during the
2016/2017 Formula E season.&lt;/i>, tj. už to nevypadá, že by závodilo pokaždé a
začalo to letos &amp;hellip; ???&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160427">&lt;/a>&lt;/div>

&lt;h2>27. duben 2016 &amp;mdash; Nvidia&lt;/h2>

&lt;div class='p'>Když jsem se koukal posledně, tak jsem zaznamenal nějaké útržky, že Roborace
podpoří Nvidia, ale teprve teď vidím
&lt;a href='https://blogs.nvidia.com/blog/2016/04/05/roborace/' class='external'>relevantní článek&lt;/a>. Každé
auto bude tedy vybaveno počítačem
&lt;a href='http://www.nvidia.com/object/drive-px.html' class='external'>NVIDIA DRIVE PX 2&lt;/a>. Už podle
obrázků to vypadá moc pěkně &amp;hellip; no to by bylo zlé, kdyby Nvidia neměla
pěkné obrázky &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>&lt;i>DRIVE PX is a powerful auto-pilot car computer designed to run deep neural
networks paving the way for the autonomous car.&lt;/i>&lt;/div>

&lt;div class='p'>Ještě přidám odkaz s informacemi o
&lt;a href='http://nvidianews.nvidia.com/news/nvidia-boosts-iq-of-self-driving-cars-with-world-s-first-in-car-artificial-intelligence-supercomputer' class='external'>Nvidia
na letošním CESu&lt;/a>. 10x výkonější než starší generace (Dual
&lt;a href='http://www.nvidia.com/object/tegra-x1-processor.html' class='external'>NVIDIA Tegra® X1
processors&lt;/a> = 2.3 Teraflops) &amp;hellip; asi bych udělal malou
odbočku. Cogito posílal před časem odkaz na nahrávané přednášky ze Stanfordu z
ledna letošního roku &amp;mdash; jestli o &lt;i>Deep Neural Networks&lt;/i> nic netušíte (ale
i když tušíte) tak vřele doporučuji (já se tím prokousávam jenom pomalinku,
přeci jenom je to 15h videa, ale lepší zdroj asi nenajdete):
&lt;a href='https://www.youtube.com/watch?v=NfnWJUyUJYU&amp;amp;list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC' class='external'>CS231n
Winter 2016&lt;/a> Tam člověk pochopí, jaká revoluce proběhla nárůstem výpočetní
síly a množstvím vstupních dat.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 405px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/formula-e-roborace/dnn-pipeline.jpg' alt='ukázka klasifikace (zdroj Nvidia)' title='ukázka klasifikace (zdroj Nvidia)' class='border'  width='399' height='198'/>&lt;/span>&lt;br/>
&lt;span>ukázka klasifikace (zdroj Nvidia)&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;i>DRIVE PX 2 can process the inputs of 12 video cameras, plus lidar, radar and
ultrasonic sensors. It fuses them to accurately detect objects, identify them,
determine where the car is relative to the world around it, and then calculate
its optimal path for safe travel.&lt;/i>&lt;/div>

&lt;div class='p'>Hm, tak to už tam pro programátora snad nezbývá ani co dělat?? &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160505">&lt;/a>&lt;/div>

&lt;h2>5. květen 2016 &amp;mdash; Vzdělání škodí lidem?!&lt;/h2>

&lt;div class='p'>Teď se mnou cloumá vztek, tak ho ventiluji alespoň do jednoho odstavečku tohoto
blogu. Jestli jste se nestihli podívat na ty DNN videa ze Stanfordu, co jsem o
nich psal minule, tak už máte smůlu. Jsou stažená: &lt;b>This video is private.&lt;/b>
:-(.  Vysvětlení je na
&lt;a href='https://twitter.com/karpathy/status/727618058471112704?lang=en' class='external'>Karpathyho
twitteru&lt;/a>. Sigh. Prostě pokud něco uděláte pro vzdělané lidi, tak vás za to
můžou i zažalovat, viz odkaz z toho twitteru:
&lt;a href='http://www.nytimes.com/2015/02/13/education/harvard-and-mit-sued-over-failing-to-caption-online-courses.html?_r=0' class='external'>Harvard
and M.I.T. Are Sued Over Lack of Closed Captions&lt;/a>. Už vidím, jak se budou
ilegálně kopírovat vysokoškolské přednášky &amp;hellip; nebylo to tu už někdy? Proletáři
všech zemí vy&amp;hellip;&lt;/div>

&lt;div class='p'>p.s. díky za komentář &amp;mdash; ještě že existuje &lt;a href='https://www.reddit.com/r/MachineLearning/comments/4hqwza/andrej_karpathy_forced_to_take_down_stanford/' class='external'>underground&lt;/a>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160802">&lt;/a>&lt;/div>

&lt;h2>2. srpen 2016 &amp;mdash; Self Racing Cars&lt;/h2>

&lt;div class='p'>Na poli „Roborace” je trošku „okurková sezóna”. Proto mne celkem potěšil
newsletter od NVIDIA (přihlásil jsem se do jejich
&lt;a href='http://www.nvidia.com/object/automotive-news.html' class='external'>NVIDIA Automotive News&lt;/a>),
kde byl
&lt;a href='https://blogs.nvidia.com/blog/2016/06/03/autonomous-vehicles/' class='external'>článek o
prvním testování závodních autonomních aut&lt;/a>. A z něj se pak dostanete na
stránku &lt;a href='http://selfracingcars.com/' class='external'>selfracingcars.com&lt;/a>. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Vedle akce samotné mne na první pohled upoutal
&lt;a href='https://www.dropbox.com/s/tt055gyb9of02uj/polysync-self-racing-cars-logfile.tar.gz?dl=0' class='external'>dataset
ke stažení&lt;/a>. Má 4.57GB, zabalený tar, takže si ho asi moc na svém notebooku
neprohlédnu, ale už samotný fakt, že si náhodný kolemjdoucí může stáhnout data
z Lidaru (na autech jsem viděl Velodyne 32) a kamer (?) mne těší &lt;span class='smile'>&lt;/span>.  Asi budu
potřebovat viewer od &lt;a href='https://polysync.io/request-trial/' class='external'>PolySync&lt;/a>, ale
věřím, že někde bude formát popsán. Až dojde na Roborace, tak to asi bude
podobné &amp;hellip;&lt;/div>

&lt;div class='p'>Koukám, že ke stažení jsou i čistě data z Velodyne HDL-32 na
&lt;a href='http://data.selfracingcars.com/' class='external'>data.selfracingcars.com&lt;/a> (1.2GB).&lt;/div>

&lt;div class='p'>&lt;a href='https://www.youtube.com/watch?v=bNTm7jWLwZ4' class='external'>YouTube video&lt;/a> zas tak moc odvaz
není.  Je celkem dobře vidět vnitřek auta, ale závodní dráha v ostrém slunci je
spíše bílá &amp;hellip; a je to jenom demo, sběr dat, jen jedno auto na trati. Ale nějak
se začít musí.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160817">&lt;/a>&lt;/div>

&lt;h2>17. srpen 2016 &amp;mdash; Roborace welcomes you&lt;/h2>

&lt;div class='p'>Asi jsem zase zaspal. To je mi podobný! Na druhou stranu jsem skoro
přesvědčený, že tlačítko &lt;b>ENQUIRE&lt;/b> bylo na &lt;a href='http://roborace.com/' class='external'>oficiálních
stránkách Roborace&lt;/a> už od začátku a že jsem ho v únoru (?) použil, když jsem
organizátorům psal. Jen vedlo na jiný formulář :-(.&lt;/div>

&lt;div class='p'>Ono je i možné, že se to změnilo nedávno?? Každopádně, když teď na to tlačítko
kliknete, tak se vám objeví &lt;b>Join us as&lt;/b> a můžete zvolit &lt;b>Team or
Roboracer&lt;/b> a dále jestli registrujete tým nebo hledáte místo v týmu &amp;hellip; pak
vás čeká dotaz na znalosti a když správně odpovíte robotovi:&lt;/div>

&lt;pre>Hi, it’s Roborace AI speaking.
I believe you are one of us. Aren’t you?

4 + seven is:&lt;/pre>

&lt;div class='p'>tak dostanete mail s &lt;a href='http://roborace.com/nda' class='external'>linkem na NDA&lt;/a> (non-disclosure
agreement). Je nutné podepsat, naskenovat a poslat &amp;hellip; skoro mám obavy, jestli
potom ještě budu moci v tomto blogu pokračovat. Uvidíme. Ještě jsem to
neposlal &amp;mdash; to tlačítko jsem dnes stiskl, protože jsem se chtěl zeptat jestli
už nějaké týmy jsou &amp;hellip; nepřidáte se ještě někdo? &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160824">&lt;/a>&lt;/div>

&lt;h2>24. srpen 2016 &amp;mdash; DevBot&lt;/h2>

&lt;div class='p'>Z Roborace organizátorů se po mailu zatím nikdo neozval (automatické odpovědi
nepočítám), ale teď jsem narazil na
&lt;a href='https://www.cnet.com/roadshow/news/roborace-unveils-self-driving-formula-e-race-car-prototype/' class='external'>článek&lt;/a>
a &lt;a href='https://www.youtube.com/watch?v=aSbSUeKEj00' class='external'>youtube video&lt;/a>, kde je první
zmínka o stroji &amp;mdash; &lt;b>DevBot&lt;/b>. Příliš krátké = skoro nezajímavé, ale snad už
brzy bude známo více.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/dev-bot.jpg'>&lt;img src='/competitions/formula-e-roborace/dev-bot_t.jpg' alt='DevBot - zdroj The Verge' title='DevBot - zdroj The Verge' class='border'  width='320' height='180'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/dev-bot.jpg'>DevBot - zdroj The Verge&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>p.s.
&lt;a href='http://www.theverge.com/2016/8/22/12592938/roborace-self-driving-car-test-prototype-watch' class='external'>ještě
jeden článek&lt;/a>, nesoucí stejnou informaci, kde je ale zmínka, že &lt;i>Roborace's
DevBot will make its public debut on August 24th, at the Formula E open
practice sessions at Donington Park.&lt;/i> (to bylo včera) Na &lt;i>The Verge&lt;/i> je také
podrobnější
&lt;a href='http://www.theverge.com/2016/8/4/12377262/roborace-car-images-technology-self-driving' class='external'>článek
o plánovaných senzorech&lt;/a>, i když se obávám, že je to zatím spíše spekulace a
je to definované možnostmi vstupů Nvidia Drive PX2.&lt;/div>

&lt;div class='p'>&lt;a href='http://www.eurosport.com/formula-e/roborace-test-mule-makes-public-debut_sto5760242/story.shtml' class='external'>Tady&lt;/a>
je zmínka, že demo již proběhlo, ale chtělo by to více &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160829">&lt;/a>&lt;/div>

&lt;h2>29. srpen 2016 &amp;mdash; První autonomní jízdy&lt;/h2>

&lt;div class='p'>Na webu jsou už k vidění první videa s autonomní jízdou. Přiznám se, že bych v
DevBot-u moc sedět nechtěl. První video je s Lucas Di Grassi &amp;hellip; trošku, jak když
vás vystřelí na měsíc:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/MEC7K7aofD8" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>A toto je první veřejná jízda &amp;mdash; škoda, že je video oříznuté:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/xrfCQ7qwPh8" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>&lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160918">&lt;/a>&lt;/div>

&lt;h2>18. zaří 2016 &amp;mdash; TORCS?&lt;/h2>

&lt;div class='p'>Včera na &lt;a href='/competitions/robotour/2016/cs'>Robotour večeři&lt;/a> byla vyslovena
hypotéza, že Roborace bude možná postavené na &lt;a href='/software/torcs/cs'>TORCS&lt;/a> (The
Open Racing Car Simulator), a
&lt;a href='https://sourceforge.net/p/speed-dreams/mailman/message/35006387/' class='external'>zde je
důkaz&lt;/a>, že o tom organizátoři uvažovali &amp;hellip; pro případ, že by
link přestal fungovat, zde je originalní text:&lt;/div>

&lt;pre>> On 4/8/2016 3:52 PM, Vadim Butakov wrote:
>
>     Hi,
>
>     I'm a member of Roborace:
>     http://spectrum.ieee.org/cars-that-think/transportation/self-driving/
         nvidia-to-supply-roborcar-brains-for-roborace-formula-e-series
>
>     I'm evaluating an idea of modifying Speed Dreams to create a free
>     open-source platform that anyone can use to develop, test their ai
>     algorithms and compete with each other in virtual Roborace events.
>     It can be an alternative to a high-end (hence inaccessible to the
>     general public) sim that will be used by the actual teams.
>
>     The questions to you guys are:
>
>     - what do you think of this idea?
>
>     - are you willing to help us to build such a platform? The to-do
>     list will be to create a udp bot server addon (similar to one used
>     in TORCS championships), create a Robocar model, (if there is
>     enough time) crate tracks that will be used in the championship
>     and a Roborace event in the game.
>
>     Let me know what you think!
>
>     Cheers,
>
>     Vadim&lt;/pre>

&lt;ul>
&lt;li>&lt;a href='https://www.linkedin.com/in/vadim-butakov-87244472' class='external'>Vadim Butakov&lt;/a>
 &amp;mdash; Autonomous Driving Software Lead at Roborace&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="160926">&lt;/a>&lt;/div>

&lt;h2>26. zaří 2016 &amp;mdash; Speed Dreams&lt;/h2>

&lt;div class='p'>Jako první krok Vadim doporučuje &lt;a href='/software/speed-dreams/cs'>Speed Dreams&lt;/a>, což
je simulátor, který z &lt;a href='/software/torcs/cs'>TORCS&lt;/a> vychází.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 166px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/software/speed-dreams/thumb.jpg' alt='' title='' class='border'  width='160' height='120'/>&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;i>At some point we considered it as an option because it's an open source and
there is a great community around it, but unfortunately it's quite outdated and
there is plenty of work has to be done in order to get it to standards we aim.
We might suggest Speed Dreams as a free simulator for very early algorithms
testing, but no more than that.&lt;/i>&lt;/div>

&lt;div class='p'>OK, má pravdu, že už je to trošku &lt;i>outdated&lt;/i>. Zdrojáky si můžete stáhnout na
&lt;a href='https://sourceforge.net/p/speed-dreams/code/HEAD/tree/trunk/src/libs/' class='external'>SourceForge&lt;/a>,
ale zabalené mají 2.98GB a rozbalené pak asi 4.5GB. Kód je psaný primárně v
C/C++. Začít bude asi nejlepší v složce &lt;b>doc/tutorials/robot&lt;/b> &amp;hellip; ale ta je i
&lt;a href='http://www.berniw.org/tutorials/robot/tutorial.html' class='external'>online&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;i>A robot is a program that drives a car (technically it's a function
encapsulated into a shared object in Linux, into a DLL in Windows). It is
executed from TORCS and gets as input information about the current status of
its car and the situation on the track. Based on this it can compute how much
it wants to steer, to brake or accelerate, which gear it needs and if it wants
to pit. Your robot returns the data to TORCS and the next simulation step will
be performed.&lt;/i>&lt;/div>

&lt;div class='p'>&amp;hellip; a
&lt;a href='http://www.berniw.org/tutorials/robot/torcs/robot/ch1/basic-drive-1.html' class='external'>první
lekce&lt;/a> jak řídit robota středem závodní dráhy vypadá dobře &lt;span class='smile'>&lt;/span> &amp;hellip; uvidíme
&amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161006">&lt;/a>&lt;/div>

&lt;h2>6. říjen 2016 &amp;mdash; DevBot v Hong Kongu&lt;/h2>

&lt;div class='p'>Ten čas hrozně utíká! Dnes jsem dostal info, že
&lt;a href='https://www.instagram.com/p/BLOG8p3h6AB/' class='external'>DevBot je v Hong Kongu&lt;/a> a po chvíli
hledání mi vyskočil &lt;a href='http://www.digitaltrends.com/cars/roborace-devbot/' class='external'>starý
článek&lt;/a>, kde psali: &lt;i>The first Roboraces will take place during the upcoming
Formula E season, which kicks off in Hong Kong October 9.&lt;/i> &amp;hellip; tj. závody
začínají už tuto neděli!&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/devbot-at-hong-kong.jpg'>&lt;img src='/competitions/formula-e-roborace/devbot-at-hong-kong_t.jpg' alt='DevBot v Hong Kongu' title='DevBot v Hong Kongu' class='border'  width='320' height='240'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/devbot-at-hong-kong.jpg'>DevBot v Hong Kongu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Přes
&lt;a href='http://www.fiaformulae.com/en/news/2016/october/hong-kong-government-welcomes-formula-e/' class='external'>FIA
Formula E&lt;/a> se dostanenete na
&lt;a href='http://www.fiaformulae.com/en/championship/tv-schedule/' class='external'>televizní
program&lt;/a>:&lt;/div>

&lt;pre>HKT Hong Kong ePrix - Qualifying LIVE 	09/10/2016 	Sunday 	05:45 CEST 	07:10 CEST
HKT Hong Kong ePrix - Race LIVE 	09/10/2016 	Sunday 	09:30 CEST 	11:30 CEST&lt;/pre>

&lt;hr/>

&lt;div class='p'>&lt;a id="161009">&lt;/a>&lt;/div>

&lt;h2>9. říjen 2016 &amp;mdash; Závod Formule-E v Hong Kongu&lt;/h2>

&lt;div class='p'>Přestože podle
&lt;a href='https://www.reddit.com/r/FormulaE/comments/56l1ux/2016_hong_kong_eprix_race_discussion/' class='external'>časového
rozvrhu&lt;/a> měla být ukázka Roborace jak v sobotu tak v neděli, tak jsem jí zatím
na YouTube nenašel. Během dne jsem alespoň narazil na
&lt;a href='https://youtu.be/paMuZ48-c4k?t=29538' class='external'>stream&lt;/a> z kvalifikace a závodů
Formule-E.  Stojí to za shlédnutí, co že všechno bude muset ten počítač zvládat
&lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>[&lt;b>video bylo změněno na "private" a není již k dispozici&lt;/b>]&lt;/div>

&lt;div class='p'>(start závodu je cca v 8:12:00)&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161012">&lt;/a>&lt;/div>

&lt;h2>12. říjen 2016 &amp;mdash; DevBot měl v Hong Kongu problémy&lt;/h2>

&lt;div class='p'>Už vím, proč &lt;span class='wink'>&lt;/span> &amp;hellip; DevBot nebyl na žádných záběrech, viz
&lt;a href='http://edition.cnn.com/2016/10/10/motorsport/roborace-devbot-formula-e-hong-kong/' class='external'>článek
na CNN&lt;/a>:&lt;/div>

&lt;div class='p'>&lt;i>However, things didn’t quite go to plan for its first scheduled street track
outing at the inaugural Formula E Hong Kong ePrix this weekend.&lt;/i>&lt;/div>

&lt;div class='p'>&lt;i>There were no high-speed figures of eight, only seven engineers struggling to
push the 1.1-ton car through a three-point turn outside its temporary home in
Hong Kong — problems recharging the battery the reason given for the no
show.&lt;/i>&lt;/div>

&lt;div class='p'>&lt;i>We are calling this a Beta season — getting people on board and getting them
up to speed.&lt;/i>&lt;/div>

&lt;div class='p'>&lt;i>The Roborace team will try again at next month’s Marrakech ePrix on November
12 with Tomlinson hopeful that they will be running races before the third
season of Formula E ends next July.&lt;/i>&lt;/div>

&lt;div class='p'>Uvidíme tedy za měsíc v Maroku &amp;hellip; (viz
&lt;a href='https://en.wikipedia.org/wiki/2016%E2%80%9317_Formula_E_season' class='external'>seznam
závodů&lt;/a>).&lt;/div>

&lt;div class='p'>p.s. stream z víkendu je již nedostupný, tak alespoň sestřih:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/zPaggopePqA" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>p.s.2 vypadá to, že &lt;b>14. října 2016&lt;/b>
&lt;a href='https://www.youtube.com/roborace' class='external'>Roborace začne vysílat&lt;/a> dokument &lt;i>Inside
Roborace&lt;/i> (viz &lt;a href='https://www.instagram.com/p/BLQvlwuBmkp/' class='external'>Instagram&lt;/a>, )&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161013">&lt;/a>&lt;/div>

&lt;h2>13. říjen 2016 &amp;mdash; github Roborace-Dreams&lt;/h2>

&lt;div class='p'>Včera jsem víceméně omylem narazil na Vadimův repozitář
&lt;a href='https://github.com/vadbut/Roborace-Dreams' class='external'>Roborace-Dreams&lt;/a>. Na první pohled
to vypadalo jako prázdné repo, podobně jako
&lt;a href='https://github.com/roborace/roborace' class='external'>roborace/roborace&lt;/a>, ale klonování
trvalo nějak hrozně dlouho. Důvod? On je skoro prázdný &lt;b>master&lt;/b>, ale větev
&lt;b>dev&lt;/b> obsahuje modifikovanou verzi &lt;a href='/software/speed-dreams/cs'>Speed Dreams&lt;/a>!&lt;/div>

&lt;div class='p'>Konkrétně by vás mohl zajímat adresář
&lt;a href='https://github.com/vadbut/Roborace-Dreams/tree/dev/Info_Roborace' class='external'>Info_Roborace&lt;/a>.
Je to 3 měsíce staré a asi opuštěné, ale zároveň v tom &lt;i>Info.docx&lt;/i> je popis
UDP stavový paketů a paketů pro řízení formule:&lt;/div>

&lt;div class='p'>&lt;p>The protocol for the simulator out stream is defined below.&lt;/p>&lt;/div>

&lt;div class='p'>&lt;table width="623" cellpadding="5" cellspacing="0">
	&lt;col width="127">
	&lt;col width="80">
	&lt;col width="67">
	&lt;col width="100">
	&lt;col width="197">
	&lt;tr valign="top">
		&lt;td width="127" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Signal&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Start Byte&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Type&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Units&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Description&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>LapTime&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>0&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>seconds&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>current lap time&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>DistStart&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>4&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>meters&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>distance from start line&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>LastLapTime&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>8&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>seconds&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>last lap time&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>RacePos&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>12&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>int32&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>race position&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>RPM&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>16&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rev/min&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>RPM&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>EnergyLevel&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>20&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>TBD&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>battery level&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>GearPos&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>24&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>int32&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>gear position&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>WheelVelFR&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>28&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad/sec&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>wheel speed front right&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>WheelVelFL&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>32&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad/sec&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>wheel speed front left&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>WheelVelRR&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>36&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad/sec&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>wheel speed rear right&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>WheelVelRL&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>40&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad/sec&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>wheel speed rear left&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AbsPosX&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>44&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>meters&lt;/p>
		&lt;/td>
		&lt;td rowspan="3" width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>position of vehicle CG in abs CS&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AbsPosY&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>48&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>meters&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AbsPosZ&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>52&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>meters&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AngX&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>56&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad&lt;/p>
		&lt;/td>
		&lt;td rowspan="3" width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>roll (X), pitch (Y) and yaw (Z) angles of the vehicle&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AngY&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>60&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AngZ&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>64&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AngRateX&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>68&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad/s&lt;/p>
		&lt;/td>
		&lt;td rowspan="3" width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>angle rates&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AngRateY&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>72&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad/s&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AngRateZ&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>76&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad/s&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AbsVelX&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>80&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>m/s&lt;/p>
		&lt;/td>
		&lt;td rowspan="3" width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>absolute speeds along the axis of the global CS&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AbsVelY&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>84&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>m/s&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AbsVelZ&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>88&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>m/s&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AccelX&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>92&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>m/s&lt;sup>2&lt;/sup>&lt;/p>
		&lt;/td>
		&lt;td rowspan="3" width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>vehicle acceleration in the local CS&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AccelY&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>96&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>m/s&lt;sup>2&lt;/sup>&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AccelZ&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>100&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>m/s&lt;sup>2&lt;/sup>&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>SteerAngle&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>104&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>deg&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>current road wheel angle&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>WheelReactionFL&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>108&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>N&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>front left wheel reaction&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>WheelReactionFR&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>112&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>N&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>front right wheel reaction&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>WheelReactionRR&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>116&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>N&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rear right wheel reaction&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>WheelReactionRL&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>120&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>N&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rear left wheel reaction&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Collision&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>124&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>int32&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>collision state (0-no collision)&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>V2xN&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>128&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>uint8&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>number of V2x objects&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>V2xType&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>129&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>uint8 [39]&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p style="margin-bottom: 0in">type of the objects:&lt;/p>
			&lt;p style="margin-bottom: 0in">0 &amp;ndash; unknown, 1 &amp;ndash; ai
			racing car&lt;/p>
			&lt;p>2 &amp;ndash; human driver, 3 - slow car, 10 - static object&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>V2xXPos&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>168&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float [39]&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>meters&lt;/p>
		&lt;/td>
		&lt;td rowspan="2" width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>position of the objects in the absolute CS&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td width="127" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>V2xYPos&lt;/p>
		&lt;/td>
		&lt;td width="80" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>324&lt;/p>
		&lt;/td>
		&lt;td width="67" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float [39]&lt;/p>
		&lt;/td>
		&lt;td width="100" valign="top" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>meters&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>V2xSpeed&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>480&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float [39]&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>m/s&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>speed of the object&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>V2xYaw&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>636&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float [39]&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>rad&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>yaw angle of the object&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>SimStatus&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>792&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>uint8&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>3 &amp;ndash; active, 5 - stopped&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1.00pt solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>SimCounter&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1.00pt solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>793&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1.00pt solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>uint8&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1.00pt solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1.00pt solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>increments every send cycle&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td colspan="5" width="611" valign="top" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Total size: 794 bytes&lt;/p>
		&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;p style="margin-bottom: 0in; line-height: 100%">&lt;br/>&lt;/div>

&lt;div class='p'>&lt;/p>
&lt;p style="text-indent: 0.25in; margin-bottom: 0.11in; line-height: 108%">
The protocol for the simulator in stream is defined below.&lt;/p>
&lt;table width="623" cellpadding="5" cellspacing="0">
	&lt;col width="127">
	&lt;col width="80">
	&lt;col width="67">
	&lt;col width="100">
	&lt;col width="197">
	&lt;tr valign="top">
		&lt;td width="127" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Signal&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Start Byte&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Type&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Units&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Description&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>SteerAng&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>0&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>deg&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1.00pt solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>&amp;ldquo;+&amp;rdquo; &amp;ndash; left, &amp;ldquo;-&amp;ldquo; - right&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>AccelRequest&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>4&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>N&amp;#8729;m or % gas&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Overall torque request or gas pedal percentage (depending on
			CtrlMode)&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>BrakeRequest&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>8&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>float&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>% brake&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>brake pedal request (0 to 1)&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>GearPos&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>12&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>int32&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p style="margin-bottom: 0in">gear position: -1 &amp;ndash; reverse, 
			&lt;/p>
			&lt;p>0 &amp;ndash; neutral, 1 - drive&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>CtrlMode&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>16&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>uint8&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p style="margin-bottom: 0in">control mode:&lt;/p>
			&lt;p style="margin-bottom: 0in">3 &amp;ndash; torque request, N&amp;#8729;m&lt;/p>
			&lt;p>11 &amp;ndash;gas pedal request, %&lt;/p>
		&lt;/td>
	&lt;/tr>
	&lt;tr valign="top">
		&lt;td width="127" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>Ctr&lt;/p>
		&lt;/td>
		&lt;td width="80" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>20&lt;/p>
		&lt;/td>
		&lt;td width="67" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>uint8&lt;/p>
		&lt;/td>
		&lt;td width="100" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>-&lt;/p>
		&lt;/td>
		&lt;td width="197" style="border-top: 1px solid #00000a; border-bottom: 1px solid #00000a; border-left: 1.00pt solid #00000a; border-right: 1.00pt solid #00000a; padding: 0.02in 0.05in">
			&lt;p>the simulator checks if controller is alive using this counter&lt;/p>
		&lt;/td>
	&lt;/tr>
&lt;/table>&lt;/div>

&lt;div class='p'>Je to kompromis mezi &lt;i>Speed Dreams&lt;/i> a &lt;i>Roborace&lt;/i>. Vedle absolutní pozice na
trati máte k dispozici i rychlosti, zrychlení, úhly, derivace úhlů, rychlosti
jednotlivých kol, úhel zatáčení, reakci kol (to moc netuším co je) a informace
o stavu baterie, kolize a absolutní pozici soupeřů (X, Y, směr a rychlost).&lt;/div>

&lt;div class='p'>Pro řízení pak posíláte příkaz na otočení volantu, sešlápnutí „plynu”, brzdy
a řazení.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161014">&lt;/a>&lt;/div>

&lt;h2>14. říjen 2016 &amp;mdash; pyroborace ver0&lt;/h2>

&lt;div class='p'>Neodolal jsem. Vytvořil jsem si VirtualBox s Ubuntu, abych mohl snadno
postupovat podle
&lt;a href='https://github.com/vadbut/Roborace-Dreams/blob/dev/linux_fix/Ubuntuinstall.pdf' class='external'>instrukcí&lt;/a>.
Až na to, že je to PDFko, celkem OK (obyčejný text by šel lépe kopírovat,
případně ideálně rovnou pustit nebo patchovat). Drobnost s &lt;i>mkdir bild&lt;/i> (má
být &lt;b>mkdir build&lt;/b>) a pak mi neprošla kompilace kvůli Windows socketům. Ono
hned vedle je
&lt;a href='https://github.com/vadbut/Roborace-Dreams/blob/dev/linux_fix/fix.zip' class='external'>linux_fix/fix.zip&lt;/a>,
který po rozbalení skrývá &lt;i>README.md&lt;/i>:&lt;/div>

&lt;pre># Roborace Ubuntu Fix

#Install:

- Clone the original repo (https://github.com/vadbut/Roborace-Dreams)
- Copy the 'drivers' folder into 'Roborace-Dreams/src/' and choose to
     overwrite all conflicting files&lt;/pre>

&lt;div class='p'>&amp;hellip; no asi bych to dělal jinak, ale vzhledem k tomu, že to fungovalo a jinak je
to asi mrtvá větev OK. Prostě natvrdo překopírovat zdrojáky z toho ZIPu přes ty
trackované v repozitory a pak zkompilovat a nainstalovat.&lt;/div>

&lt;div class='p'>Chvilku jsem hledal, co mám vlastně pustit &amp;hellip; odpověď je &lt;b>speed-dreams-2&lt;/b>. V
samotném programu pak vyberete závod (&lt;i>Quick Race&lt;/i> pro test stačí), účastníky
si vyberete ze skupinky UDP (v mém případě první byl &lt;i>UDP Nico Watt&lt;/i>) a po
odstartování, kdy vaše auto stojí a všichni vás předjedou, je vidět na konzoli,
že nepřicházela žádná UDP data a spojení bylo ukončeno.&lt;/div>

&lt;div class='p'>K &lt;i>Hello World!&lt;/i> už je jenom krůček: opakovaně posílat 21 bajtů na port 3001,
viz
&lt;a href='https://github.com/robotika/pyroborace/blob/dev/ver0.py' class='external'>pyroborace/ver0.py&lt;/a>:&lt;/div>

&lt;pre># simplest version = just go straight with 50% gas

import socket
import struct

soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ctr = 0
while True:
    data = struct.pack('fffiBB', 0, 0.5, 0, 1, 11, ctr &amp;amp; 0xFF)
    soc.sendto(data, ('127.0.0.1', 3001))
    ctr += 1&lt;/pre>

&lt;div class='p'>Když si představím, že toto by šlo pustit na závodní formuli, tak mne až
zamrazí &lt;span class='wink'>&lt;/span>. Co to v simulátoru udělá? Částečně šlápne na plyn, jede to rovně a
v první zatáčce to nabourá.&lt;/div>

&lt;div class='p'>Co dál? Asi bych si rozchodil přesměrování portů, abych řízení mohl pouštět
mimo VirtualBox (pro pohodlí), a pak &lt;i>ver1&lt;/i>, která zároveň bude číst stavy a
popojede s formulí 1 metr.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161015">&lt;/a>&lt;/div>

&lt;h2>15. říjen 2016 &amp;mdash; pyroborace ver1&lt;/h2>

&lt;div class='p'>Přidání čtení stavu simulované formule je v Pythonu poměrně triviální:&lt;/div>

&lt;pre>soc.bind( ('', 4001) )
soc.settimeout(1.0)&lt;/pre>

&lt;div class='p'>s tím, že ten timeout je pouze pro pohodlnost (nechci teď ještě řešit nějaká
vlákna).&lt;/div>

&lt;div class='p'>&lt;a href='https://github.com/robotika/pyroborace/blob/dev/ver1.py' class='external'>pyroborace/ver1.py&lt;/a>
opravdu dostával požadovanou strukturu velikosti 794 bajtů, včetně absolutní
pozice na trati, a tak veškerá „logika” byla zapamatovat si pozici startu
(není to (0, 0)) a když je vzdálenost (math.hypot()) větší než 10 metrů, jeden
metr mi přeci jenom přišlo málo, sundej nohu z plynu.&lt;/div>

&lt;div class='p'>Celkem to fungovalo, jenom mne překvapilo, když po chvíli formule začala
couvat?! Že by tam byl kopec?? Přidal jsem si vypisování ještě Z-ové souřadnice
a byl &amp;hellip;&lt;/div>

&lt;div class='p'>Po těch 10 metrech jsem tedy ještě začal zuřivě dupat na brzdu (soupeři za mnou
se to moc nelíbilo a obratem do mne naboural) a celkově jsem zastavil až na
116 metru.&lt;/div>

&lt;div class='p'>Další krok bude nastudovat trasu (netuším, jak ten 3D model popisují) a zkusit
objet celé kolo. Pomalu.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161016">&lt;/a>&lt;/div>

&lt;h2>16. říjen 2016 &amp;mdash; Inside Roborace - Episode 1&lt;/h2>

&lt;div class='p'>&amp;hellip; úplně jsem na to zapomněl &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/xUOJVWV5Ej0" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Z toho záznamu z Hong Kongu je vidět, že
&lt;a href='https://www.linkedin.com/in/vadim-butakov-87244472' class='external'>Vadim Butakov&lt;/a> hraje
poměrně aktivní roli a další důležitou osobou je
&lt;a href='https://www.linkedin.com/in/gregory-forostovsky-b40b6348' class='external'>Gregory
Forostovsky&lt;/a>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161109">&lt;/a>&lt;/div>

&lt;h2>9. listopad 2016 &amp;mdash; pyroborace track&lt;/h2>

&lt;div class='p'>Tento víkend se pojede závod v Maroku a tentokrát to snad DevBot alespoň jednou
objede. Předpokládám, že následně sestříhají Epizodu 2.&lt;/div>

&lt;div class='p'>Na poli &lt;a href='https://github.com/robotika/pyroborace' class='external'>Pythonovské Roborace&lt;/a> je
drobný update: přibyl jednoduchý parser popisu trasy
&lt;a href='https://github.com/robotika/pyroborace/blob/dev/track.py' class='external'>track.py&lt;/a>. Řeší
zatím jenom 2D trasu a ignoruje náklony a stoupání. Mezi problematické
segmenty patří zatáčky s proměnnou křivostí (popisují se pomocí poloměru na
začátku a na konci), které u některých tras nesedí. Defaultní &lt;b>Espie Grand
Prix Circuits&lt;/b> ale funguje a tak je na čase se pohnout z místa „alespoň
trošku inteligentně”.  &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Jinak potvrzuji, co mi psal Vadim, že souřadnice ostatních závodních aut jsou k
dispozici pouze pro UDP roboty. Vedle &lt;i>Nico Watta&lt;/i> jsem si přidal ještě UDP
robota &lt;i>Petera Fleminga&lt;/i> a začala chodit lepší data &lt;span class='smile'>&lt;/span>. Není to dokonalé,
ale krůček to je.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161110">&lt;/a>&lt;/div>

&lt;h2>10. listopad 2016 &amp;mdash; DevBot #2 a Epizoda 2&lt;/h2>

&lt;div class='p'>Díky Jirkovi za korekci, že Epizoda 2 už je skoro týden online &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/sNErAQm7YLg" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161117">&lt;/a>&lt;/div>

&lt;h2>17. listopad 2016 &amp;mdash; Roborace-Dreams ve Windows&lt;/h2>

&lt;div class='p'>Minulý týden se do &lt;i>Roborace&lt;/i> aktivně zapojil i &lt;a href='/contacts/cs'>Zbyněk&lt;/a> a
prošlapal minimalistickou verzi simulátoru &lt;i>Roborace&lt;/i> ve Windows. A klasicky
„když dva dělají totéž není to totéž” &amp;mdash; výsledek stojí za to (myslím, že i
střípky z jeho trnité cesty), tak bych to zde zmínil &amp;hellip;&lt;/div>

&lt;div class='p'>Začal bych ale ještě pár poznámkami k „mé” Ubuntu verzi ve VirtuálBoxu (ta
vlastně zavdala popud k větší revizi a vytvoření
&lt;a href='https://github.com/robotika/Roborace-Dreams' class='external'>forku Roborace-Dreams&lt;/a>). Lze si
totiž zapnout &lt;i>Port Forwarding&lt;/i> (Network >> Advanced >> Port Forwarding >>
'+' >> UDP 127.0.0.1 3001 10.0.2.15 3001 a UDP 127.0.0.1 3002 10.0.2.15 3002),
povolit ve firewall oba porty jak na straně Windows, tak ve VirtualBoxu (&lt;b>sudo
ufw 3001&lt;/b> a &lt;b>sudo ufw 3002&lt;/b>), restartovat VirtualBox a pak ověřit, že
spojení funguje (&lt;i>netcat -lu 3001&lt;/i> &amp;mdash; testovat to přímo ve speed-dreams-2
není moc dobrý nápad).&lt;/div>

&lt;div class='p'>Cvičně jsem si pustil proti sobě
&lt;a href='https://github.com/robotika/pyroborace/blob/dev/ver0.py' class='external'>ver0.py&lt;/a> vs.
&lt;a href='https://github.com/robotika/pyroborace/blob/dev/ver2.py' class='external'>ver2.py&lt;/a> (u
&lt;i>ver0.py&lt;/i> jsem si změnil číslo portu na 3002), jedno auto dal na začátek a
druhé na konec startovního pole a &amp;hellip; začala mi chodit nesmyslná data jak pro
mé auto, tak pro pozici soupeře:&lt;/div>

&lt;pre>(1,) 813.676025391 764.784240723 0.0
(873.676025390625, 764.78466796875)
0.0
(1,) 873.676025391 764.784667969 0.0
60.0000000015
(1,) 813.676025391 764.784240723 0.0
0.0
(1,) 873.676025391 764.784667969 0.0
60.0000000015
(1,) 813.676025391 764.784240723 0.0
0.0
(1,) 873.676025391 764.784667969 0.0
60.0000000015&lt;/pre>

&lt;div class='p'>&amp;hellip; prostě to vypadá, že všechny informace se chybně posílají na port 4001 a
pokud by druhé auto poslouchalo na 4002, tak nic nedostane &amp;hellip; což byla
motivace, proč zasahovat do
&lt;a href='https://github.com/vadbut/Roborace-Dreams' class='external'>Vadimových zdrojáků&lt;/a>.&lt;/div>

&lt;div class='p'>Následující sekci Zbyněk možná brzy zcenzuruje &lt;span class='wink'>&lt;/span> &amp;hellip; ale v mezičase &amp;hellip;
začalo to mailem se subj. &lt;b>speed dreams (nebo spíš nightmares?)&lt;/b> &amp;hellip; jen pár
výseků ze série mailů:&lt;/div>

&lt;div class='p'>&lt;i>
Tak jsem se do toho pustil&amp;hellip;&lt;/div>

&lt;div class='p'>[ale nakonec jsem nic užitečného nesepsal, takže to klidně ignorujte]&lt;/div>

&lt;div class='p'>Klonuji&lt;/div>

&lt;div class='p'>gitgithub.com:robotika/Roborace-Dreams.git&lt;/div>

&lt;div class='p'>ale už to nějakou dobu běží, mám staženo 1.3G a píše to 60% - hmm, docela
nářez. Snažím se postupovat dle&lt;/div>

&lt;div class='p'>&lt;a href='https://github.com/robotika/Roborace-Dreams/blob/dev/INSTALL.txt#L655' class='external'>https://github.com/robotika/Roborace-Dreams/blob/dev/INSTALL.txt#L655&lt;/a>&lt;/div>

&lt;div class='p'>neb mám rozchozené MSVC express 2008 včetně qmake a cmake. Jinak ale vůbec
netuším, co vlastně dělám. Potřebuji to vlastně kompilovat? No nic, časem snad
asi jo, tak to nebude zbytečná práce. Ze souborů&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/robotika/pyroborace/blob/dev/ver0.py' class='external'>https://github.com/robotika/pyroborace/blob/dev/ver0.py&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/pyroborace/blob/dev/ver1.py' class='external'>https://github.com/robotika/pyroborace/blob/dev/ver1.py&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>soudím, že to asi potřebuji.&lt;/div>

&lt;div class='p'>&amp;hellip;&lt;/div>

&lt;div class='p'>Mimochodem, už mám 2.2G a říká to, že je to 80%. Prostě je to na dýl.&lt;/div>

&lt;div class='p'>&amp;hellip;&lt;/div>

&lt;div class='p'>Jinak pokračuji v rozchozování pod win 7 a vc express 2008. První problém je,
že to nemá inttypes (a to tvrdí, že msvc 2008 je podporované). Proboha chápete
někdo, proč má CMake gui tak strašně malé to okno s logem? No, pak nemohl najít
3rdparty - tak vězte, že mají být "vedle" checkoutu (../3rdParty). Pak prošel
jak Configure, tak Generate, takže mám otevřené msvc a v něm sln se spoustou
projektů. Dávám build all a "odcházím na párek" &lt;span class='smile'>&lt;/span>. Builduje se to v 21
paralelních jobech a stejně to v součtu nevytíží mé 4 procesory na víc jak na
30%. Tak uvidíme. A, už to frčí na 100% (je 12:36).&lt;/div>

&lt;div class='p'>Můj nynější plán je, podívat se v debugeru, jak se vlastně parsují ty xml
tracky.&lt;/div>

&lt;div class='p'>Uhh, ho. Je 12:42 a je dobuildováno a žádný error! Teď už jen zjistit, jestli
je tam ten udp driver. Projekt udp tam je, ale z roku 2006.&lt;/div>

&lt;div class='p'>&amp;#64;Martine, co tam ten Vadim vlastně přidával či měnil?&lt;/div>

&lt;div class='p'>SpeedDreams2 jde pustit. První věc - chci vypnout hudbu. Bohužel dostávám
access violation :-(. A to v nějakém loggeru :-(. Protože _pStream není
inicializovaný. Nicméně po ručním restartu už to alespoň nehraje, &amp;hellip; a budu
mít ještě chvilku čas se v tom vrtat &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>Vybírám Race => QuickRace, ale nemůžu najít, jak tam vybrat nějakého UDP
závodníka :-(. Tj. asi končím. Respektive nepustím si ver0.py, ale furt můžu
zkusit kouknout na ty xml tracks.&lt;/div>

&lt;div class='p'>&amp;hellip;&lt;/div>

&lt;div class='p'>Bingo (další polední spánek)! Jinak já teda nevím, ale asi máme o UI úplně jiné
představy (tím myslím já vs. vývojáři Speed Dreams). Takže, když vyberete Quick
Race, tak si nevybírejte jezdce kliknutím na tlačítko "Players", ne ne. Tím se
jezdci nevybírají. Jak píše Martin, vybírají se tlačítkem Configure. A ta
"herní" myš mě taky pěkně štve - vždycky, když to nad něčím přemýšlí, tak myš
zmizí a člověk vůbec netuší, co se děje. A že to před startem přemýšlí fakt
dlouho. Ale možná je to tou debug verzí.&lt;/div>

&lt;div class='p'>Jestli to celé dobře chápu, tak na to, aby člověk programoval UDP bota, tak na
to vůbec nemusí kompilovat vlastní Speed Dreams, ale stačí stáhnout binární
instalaci. Ještě jsem to neověřoval, ale nemám dojem, že tam Vadim něco přidal
či změnil. A to repozitory je teda mega nepříjemné na práci - 2.2G na stahování
a po checkoutu a buildu to má 7.5G.&lt;/div>

&lt;div class='p'>Čili první milník dosažen! Již druhý člověk po prvním průkopníkovi byl schopen
spustit ver0.py!
&lt;/i>&lt;/div>

&lt;div class='p'>&lt;span class='smile'>&lt;/span> &amp;hellip; přijde mi, že kdybych sem dal pouze dvouřádkový návod, jak si to celé
rozchodit, tak by si málokdo uvědomil, že to nebylo úplně „zadarmo” &amp;hellip;&lt;/div>

&lt;ol>
&lt;li>nainstalujte si minimalistickou verzí Speed Dreams 2 
&lt;a href='https://sourceforge.net/projects/speed-dreams/files/2.2.1/speed-dreams-base-2.2.1-r6404-win32-setup.exe/download' class='external'>speed-dreams-base-2.2.1-r6404-win32-setup.exe&lt;/a> (148MB)&lt;/li>

&lt;li>přidejte Zbyňkův build UDP robota s Vadimovu konfiguraci a modelem Robocar &lt;a href='https://drive.google.com/file/d/0B1UoOlZhZcoiR0Q1eU9abGFPTUk/view?usp=sharing' class='external'>speed-dreams-2.2.1-roborace.zip&lt;/a> (10MB)&lt;/li>
&lt;/ol>

&lt;div class='p'>A je to. A je to celkem sranda. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Zbyňkova pozorování (resp. „detaily”, kterých jsem si já dříve nevšiml):&lt;/div>

&lt;ul>
&lt;li>simulace je včetně zvuku (já ho mám na notebooku skoro permanentně vypnutý)&lt;/li>

&lt;li>UDP roboti ve Speed Dreams  byli ještě před Roborace&lt;/li>

&lt;li>Roborace autíčka udp_1 až udp_20 jsou, včetně Robocar modelu, k dispozici pod složkou Roborace&lt;/li>

&lt;li>ver0.py na Windows funguje a je to dost agresivní strategie (ve starších pokusech mi zůstávala v první zatáčce, ale s Robocar se odráží od mantinelů a i někam dojede)&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/sd2-helicopter-view.jpg'>&lt;img src='/competitions/formula-e-roborace/sd2-helicopter-view_t.jpg' alt='Pohled z vrtulníku (F10)' title='Pohled z vrtulníku (F10)' class='border'  width='320' height='196'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/sd2-helicopter-view.jpg'>Pohled z vrtulníku (F10)&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/sd2-roborace-ver2-in-mirror.jpg'>&lt;img src='/competitions/formula-e-roborace/sd2-roborace-ver2-in-mirror_t.jpg' alt='Robocar ve zpětném zrcátku' title='Robocar ve zpětném zrcátku' class='border'  width='320' height='196'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/sd2-roborace-ver2-in-mirror.jpg'>Robocar ve zpětném zrcátku&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161119">&lt;/a>&lt;/div>

&lt;h2>19. listopad 2016 &amp;mdash; Episode 3 (Maroko/12 autonomních okruhů)&lt;/h2>

&lt;div class='p'>Tentokrát díky za mailové echo od Martina &amp;hellip; &lt;i>už je k vidění Inside Roborace — Episode 3&lt;/i>:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/tMqB1OrKHr0" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Konečně pořádné záběry! Podle
&lt;a href='https://twitter.com/cnnsport/status/797521848221061120' class='external'>CNN Twitteru z
minulého víkendu&lt;/a> bylo sice vidět, že DevBot #1 jel v Maroku autonomně bez řidiče, ale
info žádné.&lt;/div>

&lt;div class='p'>Články ze včerejška:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://edition.cnn.com/2016/11/18/motorsport/roborace-marrakech-cop22-formula-e/' class='external'>Driverless &amp;#039;Roborace&amp;#039; car makes street track debut in Marrakech&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.dailymail.co.uk/sciencetech/article-3949408/Move-Lewis-Self-driving-Roborace-car-makes-street-track-debut-Marrakech.html' class='external'>Move over Lewis! Self-driving Roborace car makes its street track debut in Marrakech&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>(oba asi vychází ze stejné tiskové zprávy)&lt;/div>

&lt;div class='p'>Ve zkratce:&lt;/div>

&lt;ul>
&lt;li>DevBot #1 úspěšně dokončil 12 autonomních objezdů (bez řidiče) s tím, že v každém
kole zrychloval&lt;/li>

&lt;li>na příště plánují již „závod” dvou aut (pravděpodobně DevBot #1 a DevBot #2)&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="161128">&lt;/a>&lt;/div>

&lt;h2>28. listopad 2016 &amp;mdash; pyroborace - end_radius a predikce&lt;/h2>

&lt;div class='p'>Na poli Roborace byl minulý týden klid (jestli jsem zase něco nepřehlédnul) a
tak bych alespoň zmínil, co nového s
&lt;a href='https://github.com/robotika/pyroborace' class='external'>pyroborace&lt;/a> &amp;mdash; řízení Roborace-Dreams simulované formule
programované v Pythonu.&lt;/div>

&lt;div class='p'>Asi první zásadní změna je, že s
&lt;a href='https://github.com/robotika/pyroborace/blob/master/demo.py' class='external'>demo.py&lt;/a> už je
možné jezdit po libovolném okruhu a ne nutně pouze
&lt;a href='https://github.com/robotika/Roborace-Dreams/blob/56a8771d1ab385c4c81677ee66a46686749b3135/data/tracks/circuit/espie/espie.xml' class='external'>Espie&lt;/a>.
Zbyněk vyřešil &lt;a href='https://github.com/robotika/pyroborace/issues/3' class='external'>problém s
offsetem&lt;/a> tak, že teď je startovní čára vždy na pozici (0, 0, 0). Je k tomu
potřeba jiná
&lt;a href='https://github.com/robotika/pyroborace/files/606895/udp_Roborace.zip' class='external'>udp_Roborace.dll&lt;/a>
(viz &lt;a href='https://github.com/robotika/pyroborace/pull/17' class='external'>Remove offset, fix #3&lt;/a>,
kde je detailněji řešení popsáno).&lt;/div>

&lt;div class='p'>Druhý problém, který je snad již vyřešen (hrubou silou), ale zatím není v
&lt;i>masteru&lt;/i>, byly zatáčky s proměnlivou křivostí. Poznají se tak, že vedle
&lt;b>radius&lt;/b> mají v XML popisu také &lt;b>end radius&lt;/b>. Jak se s tím pracuje je
vidět v
&lt;a href='https://github.com/robotika/Roborace-Dreams/blob/56a8771d1ab385c4c81677ee66a46686749b3135/src/modules/track/trackv1/track4.cpp#L1568' class='external'>Roborace-Dreams
zdroji&lt;/a>, ale přiznám se, že mi to trvalo poměrně dlouho to pochopit (viz
&lt;a href='https://github.com/robotika/pyroborace/pull/23' class='external'>druhý pokus&lt;/a>).&lt;/div>

&lt;div class='p'>Algoritmus:&lt;/div>

&lt;ul>
&lt;li>odhadni délku segmentu: &lt;i>arc * (radius + end_radius)/2&lt;/i>&lt;/li>

&lt;li>definuj počet dělících kroků jako podíl délky segmentu a hodnoty parametru &lt;b>profil steps length&lt;/b>&lt;/li>

&lt;li>přepočítej jednotlivé kousky tak, aby první měl poloměr &lt;i>radius&lt;/i>, poslední &lt;i>end_radius&lt;/i>
  a délka trajektorie byla v každém kousku stejná (tj. odpovídající úhel &lt;i>arc&lt;/i> se pro proměnný
  poloměr také mění, stejně tak střed kružnice)&lt;/li>
&lt;/ul>

&lt;div class='p'>Výsledkem je výřez ze spirálovité křivky, kde ale každý jednotlivý úsek je stále
„micro zatáčka” s pevným poloměrem.&lt;/div>

&lt;div class='p'>K dalším drobnostem patří lepší počítání nejbližšího segmentu (chyba se
projevila na okruhu
&lt;a href='https://github.com/robotika/Roborace-Dreams/blob/56a8771d1ab385c4c81677ee66a46686749b3135/data/tracks/circuit/aalborg/aalborg.xml' class='external'>Aalborg&lt;/a>,
kde jsou celkem divoké zatáčky) a řízení s 0.5s predikci, kdy Robocar už
pěkně řeže zatáčky. S lepší regulací plynu se Robocar čas okruhu Espie snížil z 3 minut na
2:28 &amp;hellip; ale stejně je stále na posledním místě. &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/sd2-aalborg.jpg'>&lt;img src='/competitions/formula-e-roborace/sd2-aalborg_t.jpg' alt='bouračka u Aalborg' title='bouračka u Aalborg' class='border'  width='320' height='196'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/sd2-aalborg.jpg'>bouračka u Aalborg&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ještě doplním krátký návod od Ondry aneb „pyroborace snadno a rychle”:&lt;/div>

&lt;pre>git clone git&amp;#64;github.com:robotika/pyroborace.git
cd pyroborace
git checkout XXX&lt;/pre>

&lt;div class='p'>(poslední krok je nutný pouze v případě, že chcete testovat nějakou „feature větev”)&lt;/div>

&lt;ul>
&lt;li>spustit:
&lt;i>c:\Program Files (x86)\speed-dreams-2.2.1\bin\speed-dreams-2.exe&lt;/i>&lt;/li>

&lt;li>naklikat &lt;b>Race->Quick Race->Configure->next&lt;/b>&lt;/li>

&lt;li>Z competitors odebrat &lt;i>player&lt;/i>&lt;/li>

&lt;li>Pod candidates přepnout na &lt;i>Roborace&lt;/i> a do competitors přidat &lt;i>udp1&lt;/i>&lt;/li>

&lt;li>Next Next Start&lt;/li>

&lt;li>Blokne se to na čekaní na UDP&lt;/li>

&lt;li>spustit:
&lt;b>ver0.py&lt;/b>&lt;/li>

&lt;li>nebo:
&lt;b>demo.py "c:\Program Files (x86)\speed-dreams-2.2.1\data\tracks\circuit\espie\espie.xml"&lt;/b>&lt;/li>
&lt;/ul>

&lt;div class='p'>A je to! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161129">&lt;/a>&lt;/div>

&lt;h2>29. listopad 2016 &amp;mdash; sada senzorů&lt;/h2>

&lt;div class='p'>Dnes jenom „štěk” z
&lt;a href='https://twitter.com/roborace/status/803178752154988548' class='external'>Twitteru&lt;/a>: &lt;i>17
ultrasonics, 6 cameras, 5 lidars, 2 radars and 2 optical speed sensors&lt;/i>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/robocar-sensors.jpg'>&lt;img src='/competitions/formula-e-roborace/robocar-sensors_t.jpg' alt='Sada senzorů na Robocar' title='Sada senzorů na Robocar' class='border'  width='320' height='320'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/robocar-sensors.jpg'>Sada senzorů na Robocar&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161204">&lt;/a>&lt;/div>

&lt;h2>4. prosince 2016 &amp;mdash; pyroborace - kreslení trasy&lt;/h2>

&lt;div class='p'>Na poli &lt;a href='https://github.com/robotika/pyroborace' class='external'>pyroborace&lt;/a> je drobný posun.
Předevnším už si můžete vykreslit trasu a do ní pozice auta nalogované během
závodu. Kreslení je pomocí &lt;a href='http://matplotlib.org/' class='external'>matplotlib&lt;/a>, což je trošku
„monstrum”, ale na kreslení grafů z Pythonu vřele doporučuji.&lt;/div>

&lt;div class='p'>Merge kreslícího nástroje zatím probíhá
&lt;a href='https://github.com/robotika/pyroborace/pull/26' class='external'>zde&lt;/a>, tj. v tuto chvíli v
&lt;i>masteru&lt;/i> ještě není. Já se ale zatím naučil spousty užitečných triků: &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://matplotlib.org/users/path_tutorial.html' class='external'>jak kreslit cestu (Path)&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.whizkidtech.redprince.net/bezier/circle/' class='external'>jak kreslit kružnici
pomocí Bezierových křivek&lt;/a> (o něco přesnější a podrobnější popis je pak
&lt;a href='http://www.tinaja.com/glib/ellipse4.pdf' class='external'>zde&lt;/a>)&lt;/li>

&lt;li>&lt;a href='http://matplotlib.org/devel/transformations.html#matplotlib.transforms.Bbox' class='external'>jak
pracovat s bounding boxem&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://matplotlib.org/faq/howto_faq.html#make-the-aspect-ratio-for-plots-equal' class='external'>jak si vynutit stejný rozměr v x-ové i y-ové ose&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>Další plán byl rozchodit logování přes &lt;a href='http://www.winpcap.org/' class='external'>WinCap&lt;/a>, ale
jelikož je komunikace pouze lokální, tak je ještě třeba
&lt;a href='https://wiki.wireshark.org/CaptureSetup/Loopback' class='external'>Loopback&lt;/a> a to už mi přišlo
na „minimalistickou verzi” nějak nezdravě složité :-(. Dočasné řešení je
tedy pouze:&lt;/div>

&lt;pre>log.write('{} {}\n'.format(absPosX, absPosY))&lt;/pre>

&lt;div class='p'>a drobné rozšíření &lt;i>plot.py&lt;/i>.&lt;/div>

&lt;div class='p'>A nějaké výsledky?! Co mne asi nejvíce překvapilo, jak je trajektorie po třech
(resp. 2.5) kolech opakovatelná:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/espie-nice-turn.png'>&lt;img src='/competitions/formula-e-roborace/espie-nice-turn_t.png' alt='tady se to povedlo' title='tady se to povedlo' class='border'  width='320' height='161'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/espie-nice-turn.png'>tady se to povedlo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/espie-problematic-turn.png'>&lt;img src='/competitions/formula-e-roborace/espie-problematic-turn_t.png' alt='a tady moc ne' title='a tady moc ne' class='border'  width='320' height='161'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/espie-problematic-turn.png'>a tady moc ne&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/espie.png'>&lt;img src='/competitions/formula-e-roborace/espie_t.png' alt='Celý Espie okruh' title='Celý Espie okruh' class='border'  width='320' height='161'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/espie.png'>Celý Espie okruh&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>p.s. tak ještě video (zdroj má 4.7GB, 4806 PNG souborů, konverze pomocí
upraveného
&lt;a href='https://github.com/robotika/eduro/blob/master/img2video.py' class='external'>img2video.py&lt;/a>).
Je to bez zvuku, i když Speed Dreams zvuk generuje &amp;hellip; někdy příště.&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/Jn0O1h7qmAI" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161213">&lt;/a>&lt;/div>

&lt;h2>13. prosince 2016 &amp;mdash; pyroborace - AmBot Espie 1:45&lt;/h2>

&lt;div class='p'>Včera mne potěšil &lt;a href='http://ambot6.webnode.cz/' class='external'>AmBot&lt;/a>, který v mailu píše:&lt;/div>

&lt;div class='p'>&lt;i>
Posílám jen informaci o tom, že také zkouším Roborace-Dreams a pyroborace.&lt;/div>

&lt;div class='p'>Díky tvému blogu na robotika.cz se mi před pár dny podařilo systém zprovoznit
(na Windows 10) a funguje jak ver0.py, tak i demo.py.&lt;/div>

&lt;div class='p'>Už jsem si s tím i trochu hrál a hrubou silou se mi podařilo dosáhnout času pod
5:30 (v Quick race na trati Espie). Ta hrubá síla spočívala v tom, že jsem do
skriptu pro každou zatáčku zadal maximální rychlost průjezdu a k tomu udělal
jednoduchý regulátor rychlosti. Funguje to docela hezky. Zjistil jsem přitom,
že když nechám jet to auto moc "tvrdě" (prudké přidávání plynu, prudké brzdění
a rychlé průjezdy zatáčkami), tak se "rozbije" ještě před dojetím do cíle
(selže na "damage", zastaví a je odtažen mimo trať). Také jsi to už zjistil?&lt;/div>

&lt;div class='p'>Každopádně chci v pokusech pokračovat. Mám v plánu dopočítávat vhodnou rychlost
v zatáčkách z parametrů trati (a ne to tam mít zadané natvrdo) a také se chci
pokusit vyhýbat soupeřům (zatím na ně neberu ohled a počítám s tím, že uhnou
oni).
&lt;/i>&lt;/div>

&lt;div class='p'>a přiložil i link na video, jako důkaz:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/A4AI3hOGqqA" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Na titulním snímku je i vidět &lt;b>Best: 01:45.129&lt;/b>, takže můj
&lt;a href='https://github.com/robotika/pyroborace/milestone/2' class='external'>vánoční milestone&lt;/a> už
Aleš dosáhnul! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>p.s. u Alešova videa si i můžete pustit zvuk &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161217">&lt;/a>&lt;/div>

&lt;h2>17. prosince 2016 &amp;mdash; Episode 4 (Michelin HQ)&lt;/h2>

&lt;div class='p'>Testování na okruhu Michelinu&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/qPSIRzwb3wQ" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170113">&lt;/a>&lt;/div>

&lt;h2>13. leden 2017 &amp;mdash; Nvidia Autopilot&lt;/h2>

&lt;div class='p'>Tomáš S. mi poslal na první pohled &lt;i>nevinný link&lt;/i>
&lt;a href='http://kevinhughes.ca/blog/tensor-kart' class='external'>http://kevinhughes.ca/blog/tensor-kart&lt;/a> s komentářem: „Pěkný článek, umělá
inteligence pro Mario Kart pomocí Tensor Flow.” &lt;span class='smile'>&lt;/span> Nemusíte se bát na něj
kliknout, jen varování, že přes pár odkazů se dostanete ke zdrojákům a datasetu
&lt;a href='https://devblogs.nvidia.com/parallelforall/deep-learning-self-driving-cars/' class='external'>Nvidia
Autopilota&lt;/a>! Ten původní článek se snaží ovládat počítačovou hru
&lt;a href='http://mariokart8.nintendo.com/' class='external'>Mario Kart&lt;/a> s využitím neuronových sítí a
&lt;a href='https://github.com/tensorflow/tensorflow' class='external'>Tensor Flow&lt;/a> frameworku.&lt;/div>

&lt;div class='p'>Autor ve svém blogu zmiňuje, že &lt;i>Later, I switched to use Nvidia’s Autopilot
developed specifically for self-driving vehicles.&lt;/i> Cože?! Má tam odkaz na
&lt;a href='https://github.com/SullyChen/Autopilot-TensorFlow' class='external'>github
Autopilot-TensorFlow&lt;/a>, který implementuje nápady z Nvidia článku
(&lt;a href='https://arxiv.org/pdf/1604.07316.pdf' class='external'>pdf&lt;/a>). Aby toho nebylo úplně málo, tak
dává k dispozici i
&lt;a href='https://drive.google.com/file/d/0B-KJCaaF7ellQUkzdkpsQkloenM/view?usp=sharing' class='external'>2.2GB
dataset&lt;/a>, kde naleznete 45405 JPEG obrázků a soubor &lt;i>data.txt&lt;/i> obsahující
referenční úhel pro zatáčení. Nevím, zda úplně přesně implementoval, co bylo v
článku. Tam je to &lt;i>1/r&lt;/i>, kde &lt;i>r&lt;/i> je poloměr otáčení se znaménkem a rovné
jízdě odpovídá hodnota 0.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 461px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/formula-e-roborace/10070.jpg' alt='obrázek 10070.jpg z datasetu' title='obrázek 10070.jpg z datasetu' class='border'  width='455' height='256'/>&lt;/span>&lt;br/>
&lt;span>obrázek 10070.jpg z datasetu&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Nvidia pro učení použila stejný trik jako dříve švýcarská skupinka s učením
drony (viz &lt;a href='https://www.youtube.com/watch?v=umRdt3zGgpU' class='external'>starší video&lt;/a> od
Cogito) &amp;mdash; 3 kamery. Dopředná se učí kam má auto/drona jet/letět a levá a
pravá jsou reference, pro které je třeba nějaká korekce. Nvidia ještě navíc
generovala umělé pohledy s posunem z kombinace více snímků, ale základní
myšlenka je stejná. Po naučení stačí už jen jedna (prostřední) kamera pro
navigaci. Požadovaná reakce je sbírána ze senzoru na volantu auta.&lt;/div>

&lt;div class='p'>Jestli vás to alespoň trošku vyvedlo z míry jako mne &lt;span class='wink'>&lt;/span>, tak toto cvičení máte
skoro zadarmo.  Je třeba si
&lt;a href='https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/get_started/os_setup.md' class='external'>nainstalovat
TensorFlow&lt;/a>, k tomu ještě &lt;i>numpy&lt;/i>, &lt;i>scipy&lt;/i>, &lt;i>pillow" a &lt;/i>opencv"" (de
facto jsem vše instaloval z &lt;a href='http://www.lfd.uci.edu/~gohlke/pythonlibs/' class='external'>http://www.lfd.uci.edu/~gohlke/pythonlibs/&lt;/a> pro
Windows a Python 3.5) a můžete nechat váš počítač zatopit. &lt;span class='smile'>&lt;/span> Pokud nemáte
pořádnou grafickou kartu, tak to holt bude déle trvat, ale &amp;hellip; uvidíme.&lt;/div>

&lt;div class='p'>A proč to zmiňuji v tomto blogu? Nvidia je partner Roborace a řídicí algoritmy
poběží na jejich DRIVE PX-2&amp;hellip;&lt;/div>

&lt;div class='p'>Ještě poznámka k velikosti zdrojového kódu:
&lt;a href='https://github.com/SullyChen/Autopilot-TensorFlow/blob/master/model.py' class='external'>model.py&lt;/a>
má 88 řádek,
&lt;a href='https://github.com/SullyChen/Autopilot-TensorFlow/blob/master/train.py' class='external'>train.py&lt;/a>
55 řádek a
&lt;a href='https://github.com/SullyChen/Autopilot-TensorFlow/blob/master/run.py' class='external'>run.py&lt;/a>,
který z video kamery určuje úhel pro zatočení, má 32 řádek. Nevím jak vás, ale
mne to trošku děsí. &lt;span class='wink'>&lt;/span> Toto je předzvěst konce programátorů.&lt;/div>

&lt;div class='p'>p.s. Udacity stejný kód použila pro svoji
&lt;a href='https://medium.com/udacity/challenge-2-using-deep-learning-to-predict-steering-angles-f42004a36ff3' class='external'>druhou
lekci&lt;/a>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170121">&lt;/a>&lt;/div>

&lt;h2>21. leden 2017 &amp;mdash; Episode 5&lt;/h2>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/nCOWvTlL66k" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170201">&lt;/a>&lt;/div>

&lt;h2>1. únor 2017 &amp;mdash; Nvidia DRIVE PX2&lt;/h2>

&lt;div class='p'>Minulý týden jsem se snažil zjistit více informací k plánovanému řídicímu
počítači &lt;a href='http://www.nvidia.com/object/drive-px.html' class='external'>Nvidia DRIVE PX2&lt;/a>.
Nevím, zda je to záměrné, ale je kolem toho docela guláš. Teď myslím sporné
zprávy, že DRIVE PX2 má spotřebu 250W a musí být chlazený vodou vs. informace
na že &lt;i>The new single-processor configuration of DRIVE PX 2 for AutoCruise
functions —which include highway automated driving and HD mapping—consumes just
10 watts of power.&lt;/i>&lt;/div>

&lt;div class='p'>Zajímavá byla i informace, že &lt;i>DRIVE PX2&lt;/i> bude vedle &lt;i>Roborace&lt;/i> používat i
&lt;a href='https://blogs.nvidia.com/blog/2016/10/20/tesla-motors-self-driving/' class='external'>Tesla
Motors&lt;/a> ve všech svých autech (Model S, Model X a brzy i Model 3). To hned
zvedlo
&lt;a href='https://teslamotorsclub.com/tmc/threads/us-15-000-nvidia-drive-px-2-supercomputer-in-every-tesla.79475/' class='external'>diskusi
na Tesla Motors Club&lt;/a>, jak je možné dodávat počítač v ceně 15000 USD do aut,
která mají stát 35000 USD? &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Ono důvodem bude nejspíše více variant &lt;i>platformy&lt;/i>, kde ta minimální by měla
být brzy výrazně levnější, se spotřebou 10W, a na druhém konci spektra je
výkoná se zdvojenou GPU i CPU jednotkou. Že se jedná spíše o &lt;i>platformu&lt;/i>
naznačuje i článek
&lt;a href='https://techcrunch.com/2017/01/04/zf-debuts-proai-a-production-self-driving-system-based-on-nvidias-drive-px-2/' class='external'>ZF
debuts ProAI, a production self-driving system based on Nvidia’s Drive PX
2&lt;/a>.&lt;/div>

&lt;h3>Představení DRIVE PX2 na loňském CESu&lt;/h3>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/2ZHxGyQqQw4" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>&lt;i>Product Specifications: NVIDIA DRIVE PX 2 is powered by the company's newest
system-on-a-chip, featuring a GPU based on the NVIDIA Pascal™ architecture. A
single NVIDIA Parker system-on-chip (SoC) configuration can process inputs from
multiple cameras, plus lidar, radar and ultrasonic sensors. It supports
automotive inputs/outputs, including ethernet, CAN and Flexray.&lt;/i>&lt;/div>

&lt;div class='p'>P.S. ještě bych přidal
&lt;a href='https://youtu.be/YuyT2SDcYrU?list=PLZHnYvH1qtOZPJtv1WNYk0TU4L3M_rnj4&amp;amp;t=114' class='external'>link
na video&lt;/a>, kde s tím Nvidia teprve začínala a auto, podle očekávání, dělalo
pěkné skopičiny &lt;span class='wink'>&lt;/span> &amp;hellip; je to jenom cca 20s předehra, pak už je prezentace, jak
je to dokonalé po trénovaní 3000 mil z března 2016 &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170217">&lt;/a>&lt;/div>

&lt;h2>17. únor 2017 &amp;mdash; Zítra DevBotí duel v Buenos Aires!&lt;/h2>

&lt;div class='p'>Zítra se v Buenos Aires jede další kolo závodů
&lt;a href='http://www.fiaformulae.com/en/calendar' class='external'>FIA Formule E&lt;/a>. V Čechách by to měla
vysílat &lt;a href='http://arenatv.sk/tv-program/' class='external'>Sport Aréna TV&lt;/a> (resp. na Slovensku),
kdy kvalifikace je v sobotu v 15:45:&lt;/div>

&lt;pre>Buenos Aires  Qualifying LIVE  18/02/2017  Saturday  15:45 CET  17:10 CET
Buenos Aires  Race LIVE        18/02/2017  Saturday  19:45 CET  21:30 CET&lt;/pre>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/buenos-aires-stand.jpg'>&lt;img src='/competitions/formula-e-roborace/buenos-aires-stand_t.jpg' alt='Stánek Roborace' title='Stánek Roborace' class='border'  width='320' height='320'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/buenos-aires-stand.jpg'>Stánek Roborace&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Roborace je ale pouze
&lt;a href='http://www.batravelguide.com/2017/02/the-third-round-of-20162017-fia-formula.html' class='external'>doplňkový
program&lt;/a>, který ale televize vysílat neplánuje:&lt;/div>

&lt;pre>Schedule - Saturday 18 February 2017
8:00 am - 8:45 am: PRACTICE 1
8:55 - 9:15 am: Roborace Practice
10:00 am - 10:20 am: Qualifying Group Lottery
10:30 - 11:00 am: PRACTICE 2
12:00 pm - 12:36 pm: QUALIFYING
12:45 pm - 13.00 pm: SUPER POLE
2:00 pm - 3:00 pm: ROBORACE
1:45 pm - 2:00 pm: eRace
2:00 pm - 2:30 pm: Drivers autograph session
3.00 pm - 3:18 pm: Drivers parade
3:30 pm: GRID POSITIONING
4:00 pm FORMULA E BUENOS AIRES ePRIX RACE 1
5.00 pm: Podium ceremony
6:00 pm: Gates close&lt;/pre>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 356px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/buenos-aires-track.jpg'>&lt;img src='/competitions/formula-e-roborace/buenos-aires-track_t.jpg' alt='Závodní okruh' title='Závodní okruh' class='border'  width='350' height='327'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/buenos-aires-track.jpg'>Závodní okruh&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Jestli dobře počítám, tak 20-16 je časový posun jen 4h &amp;hellip; hmm, tak to by
Roborace byl snad někde ke shlédnutí mezi 18-19h. No uvidíme. Při nejhorším to
bude určitě další Roborace Epizoda.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170219">&lt;/a>&lt;/div>

&lt;h2>19. únor 2017 &amp;mdash; ibeo Wide Angle Scanning (ScaLa) Sensor&lt;/h2>

&lt;div class='p'>Včerejší závod stál za houby, resp. já z něj nic neviděl :-(.
&lt;a href='https://www.youtube.com/watch?v=RFJtPmsDrOE' class='external'>YouTube video stream&lt;/a> byl
povolen jenom v británii (&lt;i>The uploader has not made this video available in
your country.&lt;/i>) a proxy přes UK mi nefungovala. Veškeré info je tedy pouze z
&lt;a href='https://twitter.com/roborace' class='external'>Roborace Twitteru&lt;/a>, konkrétně &lt;i>Devbot 2 while
pushing the boundaries of AI had a racing incident on track, leaving Devbot 1
to win. No drivers were harmed though&lt;/i> &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>Co mne ale včera potěšilo je &lt;b>spekulace&lt;/b> o použitých laserových senzorech.
Tipoval bych (95%), že to jsou
&lt;a href='http://www.autonomoustuff.com/product/ibeo-scala/' class='external'>IBEO ScaLa&lt;/a> senzory. &lt;span class='smile'>&lt;/span>
Uznávám, že vycházím pouze z „podobnosti krabiček”, umístění úchytů a
konektoru a z &lt;a href='/competitions/formula-e-roborace/cs#161129'>obrázku z listopadu&lt;/a>,
kde pět laserů má rozsah cca slibovaných 145 stupňů.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 306px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/formula-e-roborace/SCALA-Laser-Scanner-Nov-2015-1b-mit-Valeo-Logo-300x208.jpeg' alt='Foto z autonomoustuff.com' title='Foto z autonomoustuff.com' class='border'  width='300' height='208'/>&lt;/span>&lt;br/>
&lt;span>Foto z autonomoustuff.com&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 350px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/formula-e-roborace/scala-maybe.jpg' alt='' title='' class='border'  width='344' height='271'/>&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 258px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/formula-e-roborace/scala-maybe2.jpg' alt='' title='' class='border'  width='252' height='182'/>&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 370px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/formula-e-roborace/scala-maybe3.jpg' alt='' title='' class='border'  width='364' height='289'/>&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Tento senzor jsem viděl poprvé loni na &lt;a href='/articles/den-chytrych-aut/cs'>Dni
chytrých aut&lt;/a>. Moc pěkný &amp;mdash; skenuje ve čtyřech rovinách, rozlišení 0.25
stupně a záběr zmíněných 145 stupňů. Navíc se jedná o „chytrý” senzor, což
znamená že snímaná data rovnou zpracovává
(viz &lt;a href='http://www.autonomoustuff.com/wp-content/uploads/2016/07/ibeo-Object-Tracking-3.pdf' class='external'>ibeo-Object-Tracking-3.pdf&lt;/a>).&lt;/div>

&lt;div class='p'>Pro představu přikládám toto &lt;b>veřejné&lt;/b> video &amp;hellip; možná to místo poznáte &amp;hellip;
mám pocit, že jsem tam za rohem roky chodil do školy &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/7CWNh_6MBzE" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170225">&lt;/a>&lt;/div>

&lt;h2>25. únor 2017 &amp;mdash; Episode 6 - kolize při závodu v Buenos Aires&lt;/h2>

&lt;div class='p'>V šesté epizodě je alespoň malý střípek toho co se minulý víkend v Buenos Aires
stalo: DevBot2 narazil na pravý mantinel, zlomil přední osu a &lt;i>demo závod&lt;/i>
byl ukončen.&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/xMPW57QeahE" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170303">&lt;/a>&lt;/div>

&lt;h2>3. březen 2017 &amp;mdash; LEGO?!&lt;/h2>

&lt;div class='p'>Koukal jsem se teď na video s detailními záběry Robocar z Barcelony (viz
&lt;a href='https://www.engadget.com/2017/03/02/how-roborace-is-building-driverless-race-cars/' class='external'>Engadget.com&lt;/a>)
a zaskočilo mne logo LEGA?! Chvíli jsem hledal a jedno podezření bylo, že
původní název &lt;b>Roborace&lt;/b> používalo před mnoha lety LEGO
(&lt;a href='https://www.researchgate.net/publication/3207541_The_ROBORACE_contest' class='external'>IEEE
článek z 2004&lt;/a>).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/robocar-lego.jpg'>&lt;img src='/competitions/formula-e-roborace/robocar-lego_t.jpg' alt='Logo LEGO na Robocar' title='Logo LEGO na Robocar' class='border'  width='320' height='200'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/robocar-lego.jpg'>Logo LEGO na Robocar&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Další nápověda je přímo na
&lt;a href='https://twitter.com/roborace/status/763277289668968448' class='external'>Roborace twitteru z
loňského léta&lt;/a> s pěkným komentářem &lt;i>Please tell me the Roborace cars aren't
using Mindstorms. They are really great for kids... not so much racing cars&lt;/i>
&lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>No a podle všeho LEGO zvažuje výrobu hraček Formula E (tři dny starý update):
&lt;a href='https://ideas.lego.com/projects/169283' class='external'>https://ideas.lego.com/projects/169283&lt;/a>&lt;/div>

&lt;div class='p'>&lt;i>Licensing: Potentially a big issue as this will need the approval of all the
featured teams, their sponsors, drivers and Formula E themselves. However,
Formula E's support series, Roborace, has already partnered up with Lego Speed
Champions and placed the logo on the Roborace car; this means that a Roborace
set is quite likely to be announced in the future. If the support series with
close ties to FE decides to go for the Lego option, how long until the main
series follows suit? In terms of attracting a younger audience, which is what
both Formula E and Roborace set out to do, it makes perfect sense.&lt;/i>&lt;/div>

&lt;div class='p'>No čím nás ještě Roborace nepřekvapí &lt;span class='wink'>&lt;/span> &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170331">&lt;/a>&lt;/div>

&lt;h2>31. březen 2017 &amp;mdash; Episode 7 - představení Robocar v Barceloně&lt;/h2>

&lt;div class='p'>&lt;center>
&lt;iframe width="854" height="480" src="https://www.youtube.com/embed/6jgewbR9hv0" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>p.s. jenom připomínám, že zítra je závod v &lt;a href='http://www.fiaformulae.com/en/championship/tv-schedule/' class='external'>Mexico City&lt;/a>&lt;/div>

&lt;div class='p'>p.s.2 tak nakonec se Roborace v Mexico City neprezentovala :( &amp;hellip; jako důkaz
viz &lt;a href='http://roborace.com/' class='external'>http://roborace.com/&lt;/a>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 366px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/no-roborace-in-mexico.jpg'>&lt;img src='/competitions/formula-e-roborace/no-roborace-in-mexico_t.jpg' alt='Mexico 2017 bez Roborace' title='Mexico 2017 bez Roborace' class='border'  width='360' height='260'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/formula-e-roborace/no-roborace-in-mexico.jpg'>Mexico 2017 bez Roborace&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170412">&lt;/a>&lt;/div>

&lt;h2>12. duben 2017 &amp;mdash; Vstupenky na závody v Paříži již v prodeji&lt;/h2>

&lt;div class='p'>Pokud uvažujete o výletu do Paříže &lt;b>20. května 2017&lt;/b>, tak
&lt;a href='http://www.fiaformulae.com/en/calendar' class='external'>vstupenky na závody Formule E jsou již
v prodeji&lt;/a> (55 EUR).&lt;/div>

&lt;div class='p'>Jinak nic extra nového/zajímavého. Možná za zmínku stoji informace z
&lt;a href='http://ht3.cdn.turner.com/money/big/technology/2017/03/01/roborace-electric-car.cnnmoney_1024x576.mp4' class='external'>tohoto
videa&lt;/a> (zdroj
&lt;a href='http://money.cnn.com/2017/04/11/technology/formula-1-3d-printing/index.html' class='external'>CNN
Money&lt;/a>), kde na otázku kolik to auto stojí Denis Sverdlov odpovídá:&lt;/div>

&lt;div class='p'>&lt;i>How much did it cost you? To me? Yeah. Around 1 million pounds, to make this
car. So a little more than a million dollars.&lt;/i>&lt;/div>

&lt;div class='p'>No mně 31 milionů korun nepřijde „o trošku více” než 25 milionů, ale nechť
&lt;span class='wink'>&lt;/span> &amp;hellip; prostě rozflákat by to byla škoda.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170519">&lt;/a>&lt;/div>

&lt;h2>19. květen 2017 &amp;mdash; Roborace Paris (pátek)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-entry.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-entry_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-robocar-red.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-robocar-red_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-closed-tent.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-closed-tent_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-allianz-robocar.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-allianz-robocar_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/zbynek-racing.jpg'>&lt;img src='/competitions/formula-e-roborace/zbynek-racing_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-devbot-test.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-devbot-test_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-devbot1.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-devbot1_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-devbot-programming.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-devbot-programming_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-devbot-on-circuit1.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-devbot-on-circuit1_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-devbot-on-circuit-after-crash.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-devbot-on-circuit-after-crash_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-devbot-on-circuit2.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-devbot-on-circuit2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-eifel-tower.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-eifel-tower_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-robocar-yellow.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-robocar-yellow_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-robocar-brain.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-robocar-brain_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/formula-e-roborace/paris-robocar-yellow2.jpg'>&lt;img src='/competitions/formula-e-roborace/paris-robocar-yellow2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/saEN1LTJq34" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="170522">&lt;/a>&lt;/div>

&lt;h2>22. květen 2017 &amp;mdash; Roborace Paris 2017&lt;/h2>

&lt;div class='p'>&lt;center>
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?list=PL2gPpyBs1e20J-QcpHp7ZqxzP-EbzHv0M" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>&amp;hellip; tak toto je vše, co bylo z Roborace v Paříži k vidění. Možná trošku
zklamání, ale když si přečtu Jirkův „věštecký mail”: &lt;i>Mluvis o vstupu do
zakulisi, nebo o sezeni na tribune, kdy kolem dvakrat projede devbot (v
lepsim pripade)?&lt;/i>, tak se musím jenom smát. Jak to věděl?! &lt;span class='wink'>&lt;/span> Ale od začátku.
Závody FormulaE se konaly na
&lt;a href='https://www.google.cz/maps/place/Invalides,+75007+Paris,+France/@48.8574212,2.3090047,15z/data=!3m1!4b1!4m5!3m4!1s0x47e66fd5a1f61e57:0x3c0518fc678bf8b7!8m2!3d48.8593608!4d2.3138127' class='external'>Invalides&lt;/a>,
což je opravdu v centru Paříže. Po nedávných událostech jsou všude ozbrojenci
a policie. Platí podobné zákazy jako na letišti, lahve s pitím do 500ml, pouze
malé batůžky a pod.&lt;/div>

&lt;div class='p'>Na místo jsme se Zbyňkem dorazili v pátek okolo 11h, ujasnili si, že v poledne
nás pustí dovnitř (trať a veškerá infrastruktura již byla hotova) a obešli celý
okruh z vnějšku. S nejrůznějšími zátarasy to vyšlo na tu zbývající hodinu.
&lt;i>Invalides&lt;/i> je palác s parkem, závody se jely okolo paláce. V parku byly
na jedné straně pity jednotlivých týmů a na druhé pak reklamní stany převážně
výrobců elektrických aut. Centrální trávník byl ohraničen dvěma obrovskými
obrazovkami (eVillage).&lt;/div>

&lt;div class='p'>Obešli jsme cca 90% a o Roborace ani zmínka. Info stánky vůbec netušily o čem
mluvíme (a to nebylo jen z důvodu anglo-francouzského komunikačního problému) a
tak jsem začal propadat depresi. Čekal jsem ledacos, ale že by Roborace do
Paříže vůbec nedorazila (jak do Mexika), tak na to jsem psychicky připravený
nebyl. Pak jsem ale zahlédl zadek auta na stánku pojišťovny Allianz a &amp;hellip; to
musí být Robocar! Byl, jenom nějak divně pomalovaný. Klučina, co měl
dávat návštěvníkům informace, věděl jenom &lt;i>že to jezdí samo&lt;/i> a víc nic. Ale
šéfová stánku mluvila dobře anglicky a nasměrovala nás zpět na začátek s tím, že
Roborace pit je hned první stánek a že jsme ho nemohli minout &amp;hellip;&lt;/div>

&lt;div class='p'>A stánek tam byl, jenom byl zavřený a za plotem a nikde nikdo. První osoby,
kterou jsme viděli, jsme se ptali na Vadima, což byl jediný člověk z Roborace,
co s námi občas komunikoval. A byl tam &amp;hellip; ale moc nadšený nebyl a ukázalo se,
že po Paříži s Roborace končí. Super, tím se počet kontaktů snížil na nula.&lt;/div>

&lt;div class='p'>A tak jsme čekali dál za plotem a civěli na stánek Roborace. Po nějakém čase
odtáhli pravou polovinu a hle DevBot1 a vedle DevBot3! Vida, tak alespoň něco
nového. DevBot2 tu kolizi v Buenos Aires asi nerozdýchal. :-(
O něco později jsme viděli DevBot1 na okruhu. Při druhé jízdě narazil. Podle
všeho ale nebyl v autonomním módu a byla to chyba testovacího pilota.&lt;/div>

&lt;div class='p'>Milé překvapení nastalo okolo 18:30 &amp;mdash; otevřeli vstup všem do pitů. Zamířili
jsme rovnou k Roborace, kde tentokrát pootevřeli i levou polovinu stanu. A tam
byla „žlutá kára”, která mi byla daleko více povědomá než ta červená u
Allianz. Bavili jsme se i s vývojáři a dozvěděli se, že jedna z věcí, co je
trápí, je nízký framerate laserů (pouze 25Hz) a že ochranné sklo moc nevydrží.
Dozvěděli jsme se i časy sobotního dema: ráno test v 8:55 a odpoledne v 14:00&lt;/div>

&lt;div class='p'>A co sobota? Na okruh vyrazila žlutá robokára, ale na přechodech zastavovala a
dávala asi přednost virtuálním chodcům. Chápu, že jí tvůrci nechtěli rozbít už
při první příležitosti, ale &amp;hellip; alespoň se to hýbe a není to jenom pěkná maketa.
&lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Uvidíme, jak to bude dál, ale do &lt;b>Berlína 10. června 2017&lt;/b> nejspíše
nepojedeme &amp;hellip;&lt;/div>

&lt;div class='p'>P.S. &lt;a href='http://roborace.com/static/docs/ROBORACE_PARIS_200517.pdf' class='external'>Roborace
vydalo tiskovou zprávu&lt;/a>, ale názor si musíte udělat sami &amp;hellip; &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>P.P.S.S. 24/5 Roborace vydalo svoji verzi (zatím to není ani Epizoda)&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/p5Pgh8D1TSM" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a href='/competitions/formula-e-roborace/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Grand Challenge 2005</title>
	<link rel='alternate' href="http://localhost/competitions/grandchallenge/2005/cs"/>
	<id>http://localhost/competitions/grandchallenge/2005/cs</id>
	<updated>2005-10-15T00:00:00Z</updated>
	<author><name>Jiří Iša a Tomáš Severýn</name></author>
	<summary type='html'> Studenti, doktorandi a profesoři Stanfordovy univerzity, spolu se zaměstnanci
VW ERL (Volkswagen Electronics Research Laboratory) oslavují vítězství. Robot
Stanley, kterého sestrojili, zvítězil ve druhém ročníku DARPA Grand Challenge.
Závod pořádaný Americkou vojenskou organizací DARPA (Defense Advanced Research
Projects Agency) s cenou pro vítěze dva miliony dolarů se konal o víkendu
8.-10. září 2005. Trasa letošního závodu měřila 132 mil.
&lt;b>Update:&lt;/b> &lt;a href='/competitions/grandchallenge/2005/cs#video'>film pro pamětníky - The Great Robot Race&lt;/a>
 </summary>
	<content type='html'> 
&lt;div class='p'>&lt;table class='image_panel left' style='width: 180px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/grandchallenge/2005/logo.png' alt='Logo soutěže' title='Logo soutěže' class='border'  width='174' height='87'/>&lt;/span>&lt;br/>
&lt;span>Logo soutěže&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>
Mapa trasy s vyznačenými kontrolními body byla týmům předána dvě hodiny před
startem. Do finále postoupilo celkem dvacet tři družstev. Po 
&lt;a href='/competitions/grandchallenge/2004/cs'>loňském debaklu&lt;/a>,
kdy nejdelší ujetá vzdálenost činila necelých osm mil, letos překvapivě soutěž
dokončilo pět robotů, z toho čtyři se vešli do desetihodinového limitu.
Poslední, největší a nejtěžší, nákladní automobil TerraMax, zdolal trať za
necelých třináct hodin čistého času.&lt;/div>

&lt;div class='p'>Prémii dva miliony dolarů si ovšem mohl odnést pouze jeden, a to ten, který
trasu projede nejrychleji. 
&lt;table class='image_panel right' style='width: 253px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/grandchallenge/2005/stanley.jpg'>&lt;img src='/competitions/grandchallenge/2005/stanley_t.jpg' alt='Stanley' title='Stanley' class='border'  width='247' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/grandchallenge/2005/stanley.jpg'>Stanley&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Výsledky&lt;/h2>

&lt;div class='p'>&lt;table border="1">
	&lt;tr>
		&lt;th>Pořadí&lt;/th>
		&lt;th>Robot&lt;/th>
		&lt;th>Družstvo&lt;/th>
		&lt;th>Čas&lt;/th>
	&lt;/tr>
	&lt;tr bgcolor="yellow">
		&lt;td align="right">1.&lt;/td>
		&lt;td>&lt;b>Stanley&lt;/b>&lt;/td>
		&lt;td>Stanford Racing Team&lt;/td>
		&lt;td>6:53&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="right">2.&lt;/td>
		&lt;td>&lt;b>Sandstorm&lt;/b>&lt;/td>
		&lt;td>Red Team Too&lt;/td>
		&lt;td>7:14&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="right">3.&lt;/td>
		&lt;td>&lt;b>H1ghlander&lt;/b>&lt;/td>
		&lt;td>Red Team&lt;/td>
		&lt;td>7:14&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="right">4.&lt;/td>
		&lt;td>&lt;b>GrayBot&lt;/b>&lt;/td>
		&lt;td>Gray Team&lt;/td>
		&lt;td>7:30&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="right">5.&lt;/td>
		&lt;td>&lt;b>TerraMax&lt;/b>&lt;/td>
		&lt;td>Team TerraMax&lt;/td>
		&lt;td>12:51&lt;/td>
	&lt;/tr>
&lt;/table>&lt;/div>

&lt;h2>Stanley&lt;/h2>

&lt;div class='p'>Letošní vítěz, Stanley, je od normálního VW Touareg takřka k nerozeznání.
Pomineme-li množství čidel na střeše. Také jako jeden z mála přihlášených
robotů se smí účastnit běžného silničního provozu. Mozkem robota je šest (dle
některých pramenů sedm) základních desek osazených procesorem Pentium-M a
uložených v robustním rámu. Vedoucí týmu Sebastian Thrun tvrdí, že i při
výpadku dvou jednotek by byl robot schopný pokračovat v závodu.&lt;/div>

&lt;div class='p'>Vývoj na tomto robotovi začal v červenci 2004 a jako testovací trasu používali
vývojáři původní trasu Grand Challenge z roku 2004.&lt;/div>

&lt;div class='p'>Komu nedělá potíže mluvená angličtina, nebo kdo si užije i jen záběry, tomu
doporučujeme shlédnout některé filmy z 
&lt;a href='http://www.stanfordracing.org' class='external'>oficiálních stránek Stanford racing teamu.&lt;/a>&lt;/div>

&lt;h3>Stanleyho senzory&lt;/h3>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/grandchallenge/2005/techn-sample.jpg'>&lt;img src='/competitions/grandchallenge/2005/techn-sample_t.jpg' alt='Vizualizace sledování cesty' title='Vizualizace sledování cesty' class='border'  width='220' height='183'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/grandchallenge/2005/techn-sample.jpg'>Vizualizace sledování cesty&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Pro snímání okolí:&lt;/div>

&lt;ul>
&lt;li>LIDAR &amp;mdash; pět laserových dálkoměrů, slouží obdobně jako radar.&lt;/li>

&lt;li>Kamera &amp;mdash; některé zdroje uvádějí stereo kameru.&lt;/li>

&lt;li>Radar &amp;mdash; pro měření na delší vzdálenosti.&lt;/li>
&lt;/ul>

&lt;div class='p'>Pro určení pozice:&lt;/div>

&lt;ul>
&lt;li>GPS s dvaceticentimetrovým rozlišením.&lt;/li>
&lt;/ul>

&lt;div class='p'>Pro určení orientace vozidla:&lt;/div>

&lt;ul>
&lt;li>Měření posunu a náklonu podel všech tří os.&lt;/li>

&lt;li>GPS kompas, založený na dvou GPS anténách.&lt;/li>

&lt;li>Měření ujeté vzdálenosti.&lt;/li>
&lt;/ul>

&lt;h2>Red Team Too (Také červený tým) &amp;mdash; SANDSTORM&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 268px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/grandchallenge/2005/sandstorm.jpg'>&lt;img src='/competitions/grandchallenge/2005/sandstorm_t.jpg' alt='Red Team Too - Sandstorm' title='Red Team Too - Sandstorm' class='border'  width='262' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/grandchallenge/2005/sandstorm.jpg'>Red Team Too - Sandstorm&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Loňský veterán Červeného týmu z univerzity Carnegie Mellon ve Spojených
státech. Toto vozidlo armádního typu HMMWV (Hummer), vyrobené v roce 1986, se
zúčastnilo již loňské soutěže Grand Challenge. Loni se stalo neoficiálním
vítězem, neboť jako jediné ujelo téměř osm mil.&lt;/div>

&lt;div class='p'>V letošním roce bylo jeho úkolem dojet na bezpečném třetím místě. Řídící systém
byl na závod nastaven na "bezpečnou jízdu", která měla zajistit jistý dojezd.&lt;/div>

&lt;div class='p'>O to větší bylo překvapení tvůrců, když SANDSTORM převálcoval H1GHLANDER, druhé
vozidlo z univerzity Carnegie Mellon.&lt;/div>

&lt;h2>Red Team (Červený tým) - H1GLANDER&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 274px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/grandchallenge/2005/h1ghlander.jpg'>&lt;img src='/competitions/grandchallenge/2005/h1ghlander_t.jpg' alt='Red Team - H1ghlander' title='Red Team - H1ghlander' class='border'  width='268' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/grandchallenge/2005/h1ghlander.jpg'>Red Team - H1ghlander&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Tento 1999 H1 Hummer měl, podle autorů, "vyhrát závod s půlhodinovým náskokem
před zbytkem závodního pole." Nestalo se. Technici Červeného týmu stále ještě
analyzují počítačové záznamy jízdy, aby zjistili, co se stalo s motorem. Zdá
se, že došlo k technické závadě a motor nemohl jet na požadovaný výkon. Řídící
systém proto stále prudce zrychloval a opět zpomaloval, aby udržel požadovanou
průměrnou rychlost. Za této situace je překvapivé, že H1GHLANDER vůbec dojel do
cíle.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/grandchallenge/2005/sensor_coverage_red_team.png'>&lt;img src='/competitions/grandchallenge/2005/sensor_coverage_red_team_t.png' alt='Senzorické vjemy' title='Senzorické vjemy' class='border'  width='165' height='127'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/grandchallenge/2005/sensor_coverage_red_team.png'>Senzorické vjemy&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h3>Senzory a řídící systém obou robotů&lt;/h3>

&lt;div class='p'>Nejviditelnějším prvkem je odpružený otočný laserový scanner umístěný na
střechách obou vozidel. Ten se společně s dalšími lasery a radary stará o
snímání okolí. Sedm počítačů s procesory Pentium-M pak řídí vozidlo na základě
naměřených údajů, pozice naměřné pomocí GPS a ujeté vzdálenosti.&lt;/div>

&lt;div class='p'>Více informací o obou vozidlech univerzity Carnegie Mellon se můžete dočíst na
&lt;a href='http://www.redteamracing.org' class='external'>anglických stránkách týmu&lt;/a>.&lt;/div>

&lt;h2>Gray Team - překvapení závodu&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 306px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/grandchallenge/2005/graybot.jpg' alt='Gray Team (Šedý tým)- GrayBot' title='Gray Team (Šedý tým)- GrayBot' class='border'  width='300' height='159'/>&lt;/span>&lt;br/>
&lt;span>Gray Team (Šedý tým)- GrayBot&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>
O tomto družstvu není mnoho dostupných informací. Ačkoli to podle názvu tak
vypadá, nejedná se o další družstvo Carnegie Mellon. Za touto skupinou nestojí
žádný významný sponzor typu Volkswagen, ani renomovaná univerzita. Hlavním
tahounem a organizátorem se stali ředitelé a majitelé pojišťovny The Gray
Insurance Company. To, a skutečnost, že tento tým z Luisiany přišel kvůli
hurikánu Katrina o své vývojové laboratoře, vyvolalo v mnohých novinářích
pocit, že se jedná o outsidery.&lt;/div>

&lt;div class='p'>Po shlédnutí &lt;a href='http://darpa.grayinsco.com/videos.html' class='external'>krátkých informačních filmů&lt;/a>
nezbývá než zamyslet se nad tím, o
koho se jedná, když si může koupit pozemek o rozloze 52 000 akrů a na něm
postavit 200 mil (zhruba 300 km) trénovacích cest a překážek.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/grandchallenge/2005/gray_sensors.png'>&lt;img src='/competitions/grandchallenge/2005/gray_sensors_t.png' alt='Senzory GrayBota' title='Senzory GrayBota' class='border'  width='220' height='174'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/grandchallenge/2005/gray_sensors.png'>Senzory GrayBota&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Zdá se, že hlavní výhodou týmu se stala schopnost jeho vedoucích přenést vývoj
a testování nových technologií na dodavatele senzorů a jiných potřebných částí.&lt;/div>

&lt;h3>Technické parametry&lt;/h3>

&lt;div class='p'>2005 Ford Escape Hybrid, nejužší, a tedy nejmanévrovatelnější, SUV na americkém
trhu, byl zvolen nejen kvůli svým jízdním vlastnostem, ale i pro svou mimořádně
nízkou energetickou náročnost. Díky optimálnímu využití výkonu a solárním
panelům na střeše vozidla není potřeba žádný speciální zdroj energie pro
palubní počítače.&lt;/div>

&lt;div class='p'>Vjemy obstarává známá sestava lasery/radary/kamery/GPS. Rozhodování a řízení má
na starosti, trochu netradičně, pouze dvojice počítačů. A to navíc jeden z nich
pouze zaznamenává údaje o jízdě a do řídícího procesu nijak nezasahuje.&lt;/div>

&lt;div class='p'>Další informace jsou dostupné na 
&lt;a href='http://darpa.grayinsco.com/' class='external'>stránkách týmu (v angličtině)&lt;/a>.&lt;/div>

&lt;h2>TerraMax&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 259px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/grandchallenge/2005/terramax.jpg'>&lt;img src='/competitions/grandchallenge/2005/terramax_t.jpg' alt='I na této robotické soutěži jsou k vidění velmi rozdílná řešení' title='I na této robotické soutěži jsou k vidění velmi rozdílná řešení' class='border'  width='253' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/grandchallenge/2005/terramax.jpg'>I na této robotické soutěži jsou k vidění velmi rozdílná řešení&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Největší vozidlo na startu, šestnáctitunový kolos TerraMax, dojel sice jako
poslední, ale dojel až do cíle a to se počítá. Jako konstrukční základ
posloužilo americké armádní nákladní vozidlo střední třídy.&lt;/div>

&lt;div class='p'>Jako senzory používá:&lt;/div>

&lt;ul>
&lt;li>LIDAR - čtyři dopředu (dva na dálku a dva na bližší vzdálenost) a jeden vzad
zaměřený laserový systém&lt;/li>

&lt;li>Kamery - tři vpředu, dvě vzadu pro couvání&lt;/li>
&lt;/ul>

&lt;div class='p'>Pro určení pozice a orientace:&lt;/div>

&lt;ul>
&lt;li>GPS a blíže nespecifikované inerční zařízení&lt;/li>
&lt;/ul>

&lt;div class='p'>Software pro kamery, které jsou namířeny dopředu, byl vyvinut na univerzitě v
Parmě v Itálii. Byly použity jednoduché VGA kamery.&lt;/div>

&lt;div class='p'>Na &lt;a href='http://www.terramax.com' class='external'>oficiálních stránkách týmu&lt;/a> (v angličtině) jsou
k dispozici různá povídání, videa a fotografie.&lt;/div>

&lt;h2>Zajímavosti&lt;/h2>

&lt;ul>
&lt;li>Pro vyšší diváckou atraktivitu letos soutěž začínala i končila na stejném místě.&lt;/li>

&lt;li>Trasa vedla několika tunely, aby roboti ztratili signál ze satelitního
navigačního systému GPS a museli se bez něj chvíli obejít.&lt;/li>

&lt;li>Roboti museli překonat několik mostů a velmi úzkých průsmyků. Robot TerraMax
při zdolávání jednoho takového úzkého úseku skutečně zacouval jedním zadním
kolem nad propast.&lt;/li>

&lt;li>Když soutěž skončila, bylo jasné, že někdo vyhrál, nikdo však nevěděl kdo.
První čtyři vozidla dorazila s několikaminutovými rozestupy a přitom byla v
průběhu závodu občas zastavována. Tento čas stání tedy bylo potřeba zjistit a
odečíst od naměřené doby jízdy.&lt;/li>

&lt;li>Šedý tým dokončil závod za tmy v sobotu v noci, neboť jako jediný nebyl závislý
na denním světle. Oproti tomu robot TerraMax byl na noc zastaven a dojížděl až
v neděli ráno.&lt;/li>

&lt;li>Americký slogan VW hlásí "Drivers wanted" - "hledáme řidiče", Staley má na
kapotě: "Drivers not required" - "řidičů netřeba."&lt;/li>

&lt;li>"Kdyby se neporouchal motor, byl by H1ghlander první" (člen Červeného týmu).&lt;/li>

&lt;li>"Letošní soutěž byla příliš lehká. TerraMax byl připraven na mnohem těžší
podmínky. V těch by zvítězil" (člen týmu TerraMax).&lt;/li>

&lt;li>"&lt;span class='smile'>&lt;/span>" (členové týmu Stanford Racing Team).&lt;/li>
&lt;/ul>

&lt;h2>Odkazy a zdroje (vše v angličtině)&lt;/h2>

&lt;ul>
&lt;li>&lt;a href='http://www.grandchallenge.org' class='external'>Oficiální stránky soutěže&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.stanfordracing.org' class='external'>Stránky Stanford racing teamu&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.redteam.org' class='external'>Stránky obou Červených týmů&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://darpa.grayinsco.com/' class='external'>Stránky Šedého týmu&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.terramax.com' class='external'>Stránky TerraMaxu&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.tgdaily.com/2005/10/08/darpagrandchallenge2005' class='external'> Reportáž z průběhu závodu&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="video">&lt;/a>&lt;/div>

&lt;h1>The Great Robot Race (video)&lt;/h1>

&lt;div class='p'>&lt;b>Update 2017&lt;/b> (Martin Dlouhý)&lt;/div>

&lt;div class='p'>Přišla mi reklama z &lt;a href='https://www.udacity.com/' class='external'>Udacity&lt;/a> na jejich revidovaný
kurz &lt;i>Self-Driving Car Engineer Nanodegree Preview&lt;/i>. Neodolal jsem a podíval
se, co se změnilo od doby, kdy jsem původní kurz (tehdy zdarma) absolvoval.
Asi zásadní rozdíl je, že nyní si můžete váš kód nakonec pustit v reálném autě
&amp;hellip;  ale to odbočuji. Co mne dojalo až k slzám bylo následující video. Je to
film pro pamětníky. Když budete pozorní, tak mezi soutěžícími najdete snad
všechny velké hráče v oblasti vývoje autonomních aut &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="854" height="480" src="https://www.youtube.com/embed/saVZ_X9GfIM" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Máte-li jakékoli dotazy či připomínky &amp;mdash;
&lt;a href='/competitions/grandchallenge/2005/cs#email'>kontaktujte nás&lt;/a>.
Rádi vám odpovíme.&lt;/div>
 </content>
</entry>
<entry>
	<title>Robotour 2017</title>
	<link rel='alternate' href="http://localhost/competitions/robotour/2017/cs"/>
	<id>http://localhost/competitions/robotour/2017/cs</id>
	<updated>2017-03-08T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Dvanáctý ročník soutěže outdoorových autonomních robotů se bude konat na
Slovensku a stejně jako v roce 2010 přinese významné změny pravidel. Opustíme
společný start všech robotů a zavedeme dvě povinné zastávky (v nakládací a ve
vykládací zóně &amp;mdash; soudek jako náklad zůstává). Dále zavedeme &lt;i>autonomní
oblast&lt;/i>, kde si roboti musí poradit sami, a &lt;i>servisní oblast&lt;/i>, kde je možné
provádět „servisní úpravy”. Kdy a kde se bude akce konat? &lt;b>Žilina, 16. září
2017&lt;/b>.
 </summary>
	<content type='html'> 
&lt;h1>Pravidla&lt;/h1>

&lt;div class='p'>Letos dochází k významnější změně pravidel: již nebude nutné startovat v chumlu s
ostatními roboty ve vymezeném úzkém časovém rozmezí. Roboti se prostě v čase
0:00 dozví, jakou mají realizovat donášku (pozice nakládky a vykládky) s tím,
že to je třeba realizovat do jedné hodiny od vyhlášení. Extra body zůstávají za
automatickou nakládku a vykládku, i když ji vzhledem ke složitosti úkonu
nedoporučujeme implementovat. Nakládka a vykládka bude v tzv. „autonomní
oblasti” a je na týmu, kterou příjezdovou cestu zvolí. Ruší se i bodování
ujetých metrů &amp;mdash; body tým získá pouze za úspěšně realizovaný úkon (nakládka,
vykládka a opuštění autonomní oblasti).&lt;/div>

&lt;div class='p'>Detailní pravidla jsou k dispozici na GitHubu s tagem ROBOTOUR2017:
&lt;a href='https://github.com/robotika/robotour/blob/ROBOTOUR2017/rules/pravidla.md' class='external'>česky&lt;/a>
a
&lt;a href='https://github.com/robotika/robotour/blob/ROBOTOUR2017/rules/rules.md' class='external'>anglicky&lt;/a>.&lt;/div>

&lt;h2>Ukázky cestiček v Žilině (park Ľudovíta Štúra)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2017/zilina-113023.jpg'>&lt;img src='/competitions/robotour/2017/zilina-113023_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2017/zilina-113655.jpg'>&lt;img src='/competitions/robotour/2017/zilina-113655_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2017/zilina-114218.jpg'>&lt;img src='/competitions/robotour/2017/zilina-114218_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2017/zilina-114334.jpg'>&lt;img src='/competitions/robotour/2017/zilina-114334_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2017/zilina-114624.jpg'>&lt;img src='/competitions/robotour/2017/zilina-114624_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2017/zilina-114712.jpg'>&lt;img src='/competitions/robotour/2017/zilina-114712_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2017/zilina-115451.jpg'>&lt;img src='/competitions/robotour/2017/zilina-115451_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2017/zilina-120138.jpg'>&lt;img src='/competitions/robotour/2017/zilina-120138_t.jpg' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Lokalita&lt;/h2>

&lt;div class='p'>Soutěž bude probíhat primárně v
&lt;a href='http://www.openstreetmap.org/way/123697463/' class='external'>parku Ľudovíta Štúra&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 476px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/robotour/2017/map.png' alt='přehledová mapa' title='přehledová mapa' class='border'  width='470' height='703'/>&lt;/span>&lt;br/>
&lt;span>přehledová mapa&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 306px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/robotour/2017/logo-uz.jpg' alt='' title='' class='border'  width='300' height='292'/>&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 306px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/robotour/2017/logo-icm.jpg' alt='' title='' class='border'  width='300' height='214'/>&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>Pokud chcete soutěž nějakým způsobem podpořit nebo máte nějaké doplnění/dotaz,
tak se nám prosím ozvěte pomocí &lt;a href='/competitions/robotour/2017/cs#email'>kontaktního formuláře&lt;/a>.&lt;/div>
 </content>
</entry>
<entry>
	<title>SICK Robot Day 2016</title>
	<link rel='alternate' href="http://localhost/competitions/sick-robot-day/2016/cs"/>
	<id>http://localhost/competitions/sick-robot-day/2016/cs</id>
	<updated>2016-09-07T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Letos se koná další ročník soutěže „SICK Robot Day”. Tentokrát to bude desetiminutová etuda
(nebo ostuda?) pouze pro dva roboty na poli hustě osázeném RFID čipy. Jejich
úkolem bude nabrat žluté nebo růžové kostky a umísťovat je do 5x5 metrů
velké „šachovnice”.  Po položení se kostky stávají překážkami a kolize jsou
penalizovány. &lt;b>Blog update:&lt;/b> 11/10 &amp;mdash;
&lt;a href='/competitions/sick-robot-day/2016/cs#161011'>Oficiální výsledky&lt;/a>

 </summary>
	<content type='html'> 
&lt;h2>Pravidla v kostce&lt;/h2>

&lt;div class='p'>Hrací aréna má rozměry cca 7x13m. Dva autonomní roboti startují ze žluté a
růžové 3x3m nakládací zóny. Jejich úkolem je dopravit kostky do střední 5x5m
velké šachovnice. Kostky je nutné vozit jednotlivě a roboti získávají body za
každý pokrytý 1x1m čtverec. Bod získává robot, který kostku na daný čtverec
umístí první. Jakmile kostku položí stává se automaticky překážkou (pro oba
roboty) a kontakt je penalizován ztrátou 0.5 bodu.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/playing-field.png'>&lt;img src='/competitions/sick-robot-day/2016/playing-field_t.png' alt='' title='' class='border'  width='320' height='152'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Zápas trvá 10 minut a každý tým odehraje jenom dva. Soupeř a barva jsou náhodně
losovány. Pro usnadnění lokalizace je v každém křížení RFID čip.  Kód jednak
určuje (X, Y) pozici a dále typ „zóny”. Týmy mají od pořadatele zapůjčené
senzory
&lt;a href='https://www.sick.com/media/pdf/2/52/052/dataSheet_RFU620-10100_1062599_de.pdf' class='external'>RFU
620&lt;/a>, pomocí kterých lze pres Ethernet nebo CAN data číst.&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://www.sick.com/de/en/robotday-2016/w/robotday2016/' class='external'>hlavní stránka soutěže&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://www.sick.com/medias/Reglement-EN-final.pdf?context=bWFzdGVyfHJvb3R8MjEzMTk5fGFwcGxpY2F0aW9uL3BkZnxoMWEvaDNmLzg5MTQ4MDI4MDI3MTgucGRmfGE3N2M1OTYyY2ZhNDI0Y2M4YzVjNWYyYzgxYmMwZTg2NjQzMGJmMzdkNzI4ZTNmNmExN2M5NThmMmRlYjBiMmU
' class='external'>detailní pravidla v angličtině (PDF)&lt;/a>&lt;/li>
&lt;/ul>

&lt;h2>Obsah:&lt;/h2>

&lt;ul>
&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#160907'>160907 / ver0&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#160914'>160914 / Velodyne Black Hole&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#160925'>160925 / ver1&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#160928'>160928 / kabeláž&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#160929'>160929 / Svatováclavské testování&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#161002'>161002 / Příprava ver2&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#161003'>161003 / Posedlost absolutní pozicí?&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#161005'>161005 / Společné testování&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#161006'>161006 / Odometrie&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#161007'>161007 / Prohozená kola?&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#161008'>161008 / Show Time&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#161009'>161009 / Eduro a Cogito log videa&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/sick-robot-day/2016/cs#161011'>161011 / Oficiální výsledky&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;hr/>

&lt;h1>Blog&lt;/h1>

&lt;div class='p'>&lt;a id="160907">&lt;/a>&lt;/div>

&lt;h2>7. září 2016 &amp;mdash; ver0&lt;/h2>

&lt;div class='p'>Začínám s textem jako klasický &lt;i>Copy &amp;amp; Paste&lt;/i>
&lt;a href='/competitions/sick-robot-day/2014/cs'>předloňského&lt;/a> a tak vidím, že před dvěma
lety byl první záznam s titulkem „Měsíc do soutěže” &amp;hellip; tak to sedí &lt;span class='smile'>&lt;/span>. Soutěž se totiž
koná v sobotu &lt;b>8. října 2016&lt;/b> ve Waldkirchu/Německo &amp;hellip; jako vždy.&lt;/div>

&lt;div class='p'>Náš tým je v zásadě stále stejný, jenom se k nám nově přidal Ondra z prvních MARTů
&amp;mdash; původně se přišel podívat na autonomní traktůrek, ale na tento měsíc jsme
přesměrovali veškeré kapacity na „SICK robota”. A už se i plně zapojil &lt;span class='smile'>&lt;/span>
(viz &lt;a href='https://github.com/robotika/eduro/pull/3' class='external'>Pull request - simple interface
for RFU620 sensor&lt;/a>).&lt;/div>

&lt;div class='p'>Promazávám starý text &amp;hellip; a github, kde naleznete kód (za včerejší commit se
fakt stydím) stále platí:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/robotika/eduro' class='external'>https://github.com/robotika/eduro&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>Ten ošklivý commit odpovídá naší
&lt;a href='https://github.com/robotika/eduro/commit/a99ef59ad5bac7ed7af9a0b18b8f636b1a7e5228' class='external'>verzi
0&lt;/a>, tj. nejjednodušší verze, kdy robot boduje. Naslepo zavře klepeta, popojede
2m, otevře a trošku si couvne, aby mu přihlížející mohli tleskat &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cam160906_200824_002.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cam160906_200824_002_t.jpg' alt='pohled na kostky z Edura' title='pohled na kostky z Edura' class='border'  width='320' height='256'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/cam160906_200824_002.jpg'>pohled na kostky z Edura&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Po rozchození &lt;i>verze 0&lt;/i> jsme upgradeovali hardware, takže to už nefunguje a
jsme zase na začátku &lt;span class='wink'>&lt;/span>. No nejsme &amp;mdash; stačí prohodit Alix s APU2 a ver0 by
zase měla fungovat. Co je za problém? APU2 není ještě pořádně nastavené a tak
vypisuje systémový log do CAN komunikace &amp;hellip; a to není pěkné. Možná jsou ve hře
ještě další faktory, ale to zatím nevíme. Hlavní podezřelý je
&lt;i>/boot/grub/menu.lst&lt;/i>. (konzoli nechceme úplně zaslepit, protože v případě
problémů je to jediná(?) cesta jak se s APU2 bavit)&lt;/div>

&lt;div class='p'>p.s. podle posledních zpráv &lt;b>dmesg -D&lt;/b> problém řeší &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160914">&lt;/a>&lt;/div>

&lt;h2>14. září 2016 &amp;mdash; Velodyne Black Hole&lt;/h2>

&lt;div class='p'>Výsledky včerejšího testování byly zajímavé. Primárně šlo o integraci všech
plánovaných senzorů a nasbírání dat. Standa si nechal (naštěstí) říci, že servo
ručičky během prvních jízd urveme, a tak přidělal ochranný kryt (a hned jsme ho
2x využili). Přibyla také polohovatelná základna pro
&lt;a href='http://velodynelidar.com/vlp-16.html' class='external'>Velodyne VLP-16&lt;/a>, protože vodorovně
kostky skoro neviděl.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-with-velodyne.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-with-velodyne_t.jpg' alt='Eduro s nakloněným Velodyne' title='Eduro s nakloněným Velodyne' class='border'  width='320' height='180'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-with-velodyne.jpg'>Eduro s nakloněným Velodyne&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ta změť drátů vzadu skoro odpovídá současnému stavu &amp;mdash; navíc přibyl
router/switch, protože na řídícím počítači APU2 nám již došly Ethernet zástrčky
(kamera, Velodyne laser, RFU620 čtečka a terminál k notebooku). Což mi
připomíná, že pokud se nějakému týmu podařilo rozchodit RFU620 po CAN sběrnici,
tak nás to zajímá (ten router bych rád zase odstranil).&lt;/div>

&lt;div class='p'>První dobrá zpráva byla, že nějaké RFID čipy jízdou po hřišti detekujeme:&lt;/div>

&lt;pre>(31, [scan(id=17592236638209, RSSI=-67.2, power=24.0)])
2
(32, [scan(id=17592236638209, RSSI=-69.2, power=24.0)])
3
(33, [scan(id=17592236638209, RSSI=-70.8, power=24.0)])
2
(34, [scan(id=17592236638209, RSSI=-73.1, power=24.0)])
2
(35, [scan(id=17592236638209, RSSI=-76.6, power=24.0), 
      scan(id=17592253415427, RSSI=-71.2, power=24.0)])
2
(36, [scan(id=17592253415427, RSSI=-64.5, power=24.0)])
3
(37, [scan(id=17592253415427, RSSI=-67.4, power=24.0)])
2
(38, [scan(id=17592253415427, RSSI=-73.8, power=24.0)])
2
(39, [scan(id=17592253415427, RSSI=-69.7, power=24.0), 
      scan(id=17592236638209, RSSI=-77.9, power=24.0)])
3
(40, [scan(id=17592253415427, RSSI=-67.5, power=24.0)])&lt;/pre>

&lt;div class='p'>Jak moc se z toho bude dát lokalizovat teprve uvidíme. Zatím to vypadá celkem
dobře: vždy nějaké detekce a někdy i dvojité &amp;hellip; ale neplatí to pro celý log.&lt;/div>

&lt;div class='p'>Horší to bylo s Velodyne. Takto vypadá jízda s nakloněným senzorem:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/black-hole-1.jpg'>&lt;img src='/competitions/sick-robot-day/2016/black-hole-1_t.jpg' alt='' title='' class='border'  width='320' height='172'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/black-hole-2.jpg'>&lt;img src='/competitions/sick-robot-day/2016/black-hole-2_t.jpg' alt='' title='' class='border'  width='320' height='172'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/black-hole-3.jpg'>&lt;img src='/competitions/sick-robot-day/2016/black-hole-3_t.jpg' alt='' title='' class='border'  width='320' height='172'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/black-hole-4.jpg'>&lt;img src='/competitions/sick-robot-day/2016/black-hole-4_t.jpg' alt='' title='' class='border'  width='320' height='172'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Neviděl blízkou kostku a na konci pokusu „prošel zdí” a zmizel v „černé
díře”. Ono to dává smysl, že senzor má nějakou slepou zónu, jen jsme nečekali,
že to bude s poloměrem 50cm &amp;hellip; to ty SICK LIDARy mají méně. A tak jsme
dočasně Velodyne odstranili a nahradili ho „malým SICKem” vpředu vedle
klepet.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cube-detection-with-laser.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cube-detection-with-laser_t.jpg' alt='Detekované kostky laserem' title='Detekované kostky laserem' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/cube-detection-with-laser.jpg'>Detekované kostky laserem&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Jednu slabinu to ale má? Když se nabere kostka, tak ztratíme polovinu výhledu.
&lt;span class='wink'>&lt;/span> Jako &lt;i>brute force&lt;/i> řešení je dát druhý malý SICK i zleva, ale třeba
přijdeme na něco elegantnějšího.&lt;/div>

&lt;div class='p'>A co vy? MARTi se snad pomalu „probouzí”, Alpaca zatím „mlčí” &amp;hellip; kdo dál
se chystáte na soutěž?&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160925">&lt;/a>&lt;/div>

&lt;h2>25. září 2016 &amp;mdash; ver1 (zbývá 11dní)&lt;/h2>

&lt;div class='p'>Je neděle, krásné počasí (nesrovnatelné s
&lt;a href='/competitions/robotour/2016/results/cs'>minulým týdnem na Robotour&lt;/a>), ale místo
relaxace na zahrádce zase koukám do logů. A moc uklidňující to není.&lt;/div>

&lt;div class='p'>Cílem verze 1 je dokázat umístit více kostek (tři na nejbližší pozice). To by
možná fungovalo, kdyby robot „zavřel oči” a nesledoval potenciální kolizi s
nepřítelem a neinspiroval se RFID tagy pro určení pozice. V úterý jsme částečně
přešli na čtení dat z RFU620 přes CANOpen, tj. místo Ethernetu teď chodí
packety po CAN sběrnici. Ale chová se to nějak divně. Robot jede 2 metry rovně
a na konci přejezdu čtečka hlásí, že zase vidí RFID tag, co byl na začátku
:-(.&lt;/div>

&lt;div class='p'>Ani s detekcí nepřátelského robota to není moc růžové. KISS řešení, kdy se v
daném úhlu vezme nejmenší vzdálenost a pokud je menší než řekněme 20cm, tak
prohlásí cestu za neprůjezdnou, kupodivu nefunguje (viz raw data z laseru v
milimetrech):&lt;/div>

&lt;pre>[   56    68    62    59    62    66    68    64    66    84   287   496
   535   549   559   570   583   597   606   619  2227  2240   644  2261
  2273  2285  2300  2314  2332   743   758   777   795   818 10000 10000
 10000 10000 10000 10000 10000  2632  2666  2703  2739  1172  1210  2802
  2744  2722  2758  2718  7839  1687  1651    21    18    41    65     2
  2369  2339  2311  2281  2261  2232  2122  2092  2079  2061  2038  2019
  2004  1987  1979  1969  1960  1938  1933  1926  1912  1898  1890  1891
  1880  1867  1863  1854  1846  1841  1843  1840  1836  1824  1830  1828
  1827  1827  1817  1822  1816  1822  1825  1830  1840  1843  1838  1850
  1854  1856  1866  1874  1886  1899  1902  1921  1924  1946  1953  1965
  1986  1989  2007  2033  2043  2060  2081 10000 10000 10000 10000  1956
  1972  2002  2024  2045  2030  1983  1948  1909  1864  1500  1576 10000
 10000   805 10000  1665  1641  1625  1608  1583  1563  1541  1527  1517
  1487  1474  1191  1353  1436  1414 10000   623   613   619   615  3003
  1330  1320  1307  1297  1290  1285  1279  1275  1268  1260  1257  1248
  1257]&lt;/pre>

&lt;div class='p'>Ať žijí duchové! Teď nemyslím ty malé hodnoty na začátku, to by šlo vyřešit
menším úhlem, ale &lt;b>21 18 41 65 2&lt;/b> už je marnost, opakovatelná. Navíc hodnoty
odrazivosti jsou až na poslední dvojku rozumné, takže ani tak nelze měření
profiltrovat &amp;hellip;&lt;/div>

&lt;div class='p'>Uvidíme na dalším testování v úterý. Snad alespoň navigace na kostku bude
fungovat lépe (teď se místo nejbližší hodnoty vezme skupinka, snad odpovídající
detekované kostce, a pro ní se vezme středový úhel).&lt;/div>

&lt;div class='p'>p.s. Alpaca potvrdila účast na společném testování 4. října &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160928">&lt;/a>&lt;/div>

&lt;h2>28. září 2016 &amp;mdash; kabeláž (zbývá 8dní)&lt;/h2>

&lt;div class='p'>Přemýšlel jsem, co se včera posunulo a jediné, co mne napadá, je kabeláž. Tomáš
nahradil několikametrové „industriální” Ethernet kabely menšími, takže teď
jsou už zase vidět LEDky na horním panelu. Ale to je asi vše. :-(&lt;/div>

&lt;div class='p'>Rezignovali jsme na CANopen u RFID čtečky &amp;mdash; pro zapnutí skenu je třeba
posílat textovou SDO zprávu, rozdělenou do více packetů, a to se nelíbilo ani
mně ani Tomášovi.  RFU620 tedy bude pouze na Ethernetu. Tečka.&lt;/div>

&lt;div class='p'>Co se týče detekci kostky z malého laseru, tak stále potvrzuji přítomnost
„duchů”. Jakub to do mailu komentoval: &lt;i>Martine, když už je to&lt;/i>
&lt;a href='https://github.com/robotika/eduro/commit/1ce79793df023138d38dafa68e73db1d86f50077' class='external'>Jakub&amp;#039;s
idea&lt;/a>, &lt;i>nechceš tam přidat i tu část, která umí rozlišit mezi kostkou a
stěnou?&lt;/i> a měl pravdu. Teď se pro hlouček bodů ověří i velikost a tím se
některé zavádějící detekce (např. [ 438  211 1767] &amp;hellip; tj. ojedinělý bod v
0.211m) odstraní.&lt;/div>

&lt;div class='p'>Problém s duchy, resp. rušícími odrazy od konstrukce, asi nastává i pro detekci
blokované cesty. Zde bude nutné filtrovat na překážky veliké alespoň jako
kostka.&lt;/div>

&lt;div class='p'>Ještě jeden vtipný test s navigací na kostku (vlastně jeden z mála pseudo
„úspěšných”). Bral se nejbližší bod, ale slepá zóna byla nastavena na 20cm.
Zároveň se kostka musela nacházet v prostoru osy středu robota do 40cm. V této
kombinaci robot najel na první kostku a „ztratila se mu z výhledu”.  Uviděl
však další a pak ještě jednu. &lt;span class='smile'>&lt;/span> Vypadalo to celkem zábavně:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cam160927_160233_000.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cam160927_160233_000_t.jpg' alt='' title='' class='border'  width='320' height='256'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cam160927_160234_003.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cam160927_160234_003_t.jpg' alt='' title='' class='border'  width='320' height='256'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cam160927_160236_007.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cam160927_160236_007_t.jpg' alt='' title='' class='border'  width='320' height='256'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cam160927_160239_012.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cam160927_160239_012_t.jpg' alt='' title='' class='border'  width='320' height='256'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&amp;hellip; ale kdo ví, co přesně dělal. Teď je tam
&lt;a href='https://github.com/robotika/eduro/commit/4520561a1b88b718f708090c2b8073307315a0ac' class='external'>slepá
zóna 1cm&lt;/a> a doplněno
&lt;a href='https://github.com/robotika/eduro/commit/6225a384dc077114f8e6f689d0f5266dfd810f86' class='external'>filtrování
na velikost kostky&lt;/a>.&lt;/div>

&lt;div class='p'>Navigace na kostku ale dobrá není. Použitý
&lt;a href='https://github.com/robotika/eduro/blob/master/driver.py#L212' class='external'>driver.goToG&lt;/a>
generátor hrozně osciluje. Je na čase to po sobě po několika letech zase
přečíst &amp;hellip; tak nastavit se dá jak daleko od cíle skončit. Teď naviguje na
pozici kostky, aby byla ve středu robota a to není dobré (nutně jí netrefí
napřímo a kostka mine klepeta). Pak lze omezit rychlost otáčení, default je 10
stupňů za sekundu &amp;hellip; to je asi hrozně málo??&lt;/div>

&lt;div class='p'>Samotný &lt;i>goToG&lt;/i> algoritmus je jednoduchý:&lt;/div>

&lt;ul>
&lt;li>pokud cíl vidíš pod příliš velkým úhlem otáčej se na místě (velký úhel
defaultně znamená také 10 stupňů)&lt;/li>

&lt;li>pokud jsi blíž než &lt;i>finishRadius&lt;/i> zastav a konec jinak otáčej rychlosti&lt;/li>

&lt;li>proporcionální úhlu na cíl (zhruba)
OK, zvětším úhel i cílový poloměr a snad to bude lepší.&lt;/li>
&lt;/ul>

&lt;div class='p'>Jirkovi (Cogito) jsem přislíbil nějaké foto naběráku, tak tady je:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-cables.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-cables_t.jpg' alt='Eduro před revizí kabeláže' title='Eduro před revizí kabeláže' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-cables.jpg'>Eduro před revizí kabeláže&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-gripper.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-gripper_t.jpg' alt='naběrák' title='naběrák' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-gripper.jpg'>naběrák&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-front.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-front_t.jpg' alt='pohled zpředu' title='pohled zpředu' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-front.jpg'>pohled zpředu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>p.s. za větší počet kostek vděčíme Davidovi/MART týmu, díky. A mimochodem
vznikla „Cogito MART” koalice, tak jsem zvědav.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160929">&lt;/a>&lt;/div>

&lt;h2>29. září 2016 &amp;mdash; Svatováclavské testování&lt;/h2>

&lt;div class='p'>Svátek v půlce týdne &amp;hellip; jak stvořený pro testování. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;h3>Navigace na kostku&lt;/h3>

&lt;div class='p'>Není nad „hloupé” algoritmy a dnes se mi to znova potvrdilo. Původní
implementace si spočítala polohu kostky a pomocí &lt;i>GoTo&lt;/i> navigovala robota
(ostatně viz výše).  Ale vhodně naladit parametry nebylo úplně triviální a tak
nastoupil KISS (Keep It Simple Stupid).&lt;/div>

&lt;div class='p'>Co takhle: když je kostka vlevo, toč vlevo. A když je vpravo, tak toč vpravo.
Zní to dostatečně triviálně? Asi čekáte šílené oscilace, ale co když definujete
&lt;i>střed&lt;/i> +/- 1cm, kde nic neděláte, a rychlost otáčení jen 10 stupňů/sekundu?
Kupodivu se Eduro trošku vrtělo, ale jinak dobrý! Tak se vám otáčí za
detekovanou kostkou a když se neotáčí, tak je něco špatně. Vzhledem ke
složitosti algoritmu je špatně detekce kostky.&lt;/div>

&lt;div class='p'>Předešlý algoritmus skončí na TIMEOUT a nikdy nic nenabere. Co drobné
vylepšení, kdy ve střední poloze se robot pomalinku rozjede vpřed? A je to!
Pravda ještě podmínku, že když je kostka už v klepetech, tak konec, popojeď
rovně a spusť nabírání.&lt;/div>

&lt;div class='p'>Robot buď popojíždí ke kostce nebo „se kousne” a v daném laserovém skenu nic
nevidí &amp;hellip; a to je vzorek dat hodný prozkoumání (celkem z 37 jízd a 20MB
laserových dat).&lt;/div>

&lt;div class='p'>Případně viz
&lt;a href='https://github.com/robotika/eduro/commit/b9841139f7781f21f075560341d0dc7ed4d0d40a' class='external'>odpovídající
commit&lt;/a> (ano, zase ostuda, je tam namícháno i vypínání serv po ukončení jízdy
&amp;hellip; prostě mne ten zvuk při testování rozčiloval a &lt;i>git commit -p&lt;/i> úplně
ještě neovládám :-(&lt;/div>

&lt;h3>Verze 1&lt;/h3>

&lt;div class='p'>Cíl umístit 3 kostky: vlevo, rovně a vpravo. Opakovaně. Spolehlivě. Aneb „bylo
nebylo” &amp;hellip; no zatím to není. Využívá to již navigaci na kostku a ano, často
se to „kousne” (zatím), ale to je řešitelný problém. Spíš už pomalu nastupuje
úloha: a co když místo jedné kostky jich je 25?! Ono i 4 kostky jsou pro
začátek dost:&lt;/div>

&lt;ul>
&lt;li>pokud robot nabere jednu kostku, ale jinou hrne, tak ztrácí body (a v našem
případě se sám sebe lekne, kostky odhodí a vrátí se do domečku/nakládací zóny).&lt;/li>

&lt;li>když jsou kostky blízko sebe, tak nefunguje klasifikace podle velikosti.&lt;/li>

&lt;li>když si už jednu kostku vybere, tak se nesmí nechat zmást jinou, bližší. Aby
robot neskončil jako oslík mezi dvěma kupkami sena.&lt;/li>
&lt;/ul>

&lt;h3>Kostka viděna laserem&lt;/h3>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 350px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cube-edge-detection.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cube-edge-detection_t.jpg' alt='Problémová detekce hrany kostky (vyřez)' title='Problémová detekce hrany kostky (vyřez)' class='border'  width='344' height='258'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/cube-edge-detection.jpg'>Problémová detekce hrany kostky (vyřez)&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Toto je příklad dat, kdy hrana kostky je detekována blíž než stěna kostky.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161002">&lt;/a>&lt;/div>

&lt;h2>2. říjen 2016 &amp;mdash; Příprava ver2&lt;/h2>

&lt;div class='p'>Je asi chyba začít pracovat na „verzi 2”, když „verze 1” ještě není ani
odladěná ani spolehlivá. Čas už se krátí. Verze 2 by měla být schopna se
absolutně lokalizovat a měla by zajistit funkčnost robota po celých 10 minut
soutěže.  Z dřívějších zkušeností víme, že na klouzavém povrchu ve sportovní
hale ve Waldkirchu se samotnou odometrií dlouho nevydržíme. Letos tam mají
položit koberec, ale jestli to bude posun k lepšímu těžko říci.&lt;/div>

&lt;div class='p'>Pro absolutní lokalizaci se nabízí:&lt;/div>

&lt;ul>
&lt;li>kompas&lt;/li>

&lt;li>RFID tagy&lt;/li>

&lt;li>detekce mantinelů hřiště&lt;/li>

&lt;li>použití již položených kostek&lt;/li>

&lt;li>???&lt;/li>
&lt;/ul>

&lt;h3>Kompas&lt;/h3>

&lt;div class='p'>Obecně mu moc nedůvěřuji, ale po posledním projektu s „robo-lodičkou” bych ho
zase vzal v úvahu. Cvičně jsem si zobrazil hrubá data a trošku jsem se
zalekl:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/compass_xy.png'>&lt;img src='/competitions/sick-robot-day/2016/compass_xy_t.png' alt='kompas XY' title='kompas XY' class='border'  width='220' height='166'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/compass_xy.png'>kompas XY&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/compass_xz.png'>&lt;img src='/competitions/sick-robot-day/2016/compass_xz_t.png' alt='kompas XZ' title='kompas XZ' class='border'  width='220' height='166'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/compass_xz.png'>kompas XZ&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/compass_yz.png'>&lt;img src='/competitions/sick-robot-day/2016/compass_yz_t.png' alt='kompas YZ' title='kompas YZ' class='border'  width='220' height='166'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/compass_yz.png'>kompas YZ&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ono toto už byla před-zpracovaná data! OK, druhý pokus, teď už snad opravdu
&lt;b>raw&lt;/b>:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/raw_compass_xy.png'>&lt;img src='/competitions/sick-robot-day/2016/raw_compass_xy_t.png' alt='raw kompas XY' title='raw kompas XY' class='border'  width='220' height='166'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/raw_compass_xy.png'>raw kompas XY&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/raw_compass_xz.png'>&lt;img src='/competitions/sick-robot-day/2016/raw_compass_xz_t.png' alt='raw kompas XZ' title='raw kompas XZ' class='border'  width='220' height='166'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/raw_compass_xz.png'>raw kompas XZ&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/raw_compass_yz.png'>&lt;img src='/competitions/sick-robot-day/2016/raw_compass_yz_t.png' alt='raw kompas YZ' title='raw kompas YZ' class='border'  width='220' height='166'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/raw_compass_yz.png'>raw kompas YZ&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Viděl jsem už hezčí kružnice, ale dal bych mu šanci (zase mám pocit, že i s
kompasem byl u SICKů nějaký problém, ale &amp;hellip; uvidíme).&lt;/div>

&lt;h3>RFU620&lt;/h3>

&lt;div class='p'>Data z jízd pomocí ver1 lze použít i pro vizualizaci detekce jednotlivých tagů
(ono hezčí by byl nějaký animovaný gif, ale ten teď asi neposkládám):&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-3-4.png'>&lt;img src='/competitions/sick-robot-day/2016/rfu620-3-4_t.png' alt='x=3, y=4' title='x=3, y=4' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-3-4.png'>x=3, y=4&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-4-4.png'>&lt;img src='/competitions/sick-robot-day/2016/rfu620-4-4_t.png' alt='x=4, y=4' title='x=4, y=4' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-4-4.png'>x=4, y=4&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-3-5.png'>&lt;img src='/competitions/sick-robot-day/2016/rfu620-3-5_t.png' alt='x=3, y=5' title='x=3, y=5' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-3-5.png'>x=3, y=5&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-4-5.png'>&lt;img src='/competitions/sick-robot-day/2016/rfu620-4-5_t.png' alt='x=4, y=5' title='x=4, y=5' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-4-5.png'>x=4, y=5&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-3-6.png'>&lt;img src='/competitions/sick-robot-day/2016/rfu620-3-6_t.png' alt='x=3, y=6' title='x=3, y=6' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-3-6.png'>x=3, y=6&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-4-6.png'>&lt;img src='/competitions/sick-robot-day/2016/rfu620-4-6_t.png' alt='x=4, y=6' title='x=4, y=6' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/rfu620-4-6.png'>x=4, y=6&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Rozptyl u (3, 5) bude již pravděpodobně způsoben chybou v odometrii. Pro hrubé
určení, kde se na hřišti nacházíme (s přesností na 1m) by to asi mohlo stačit.
Pro přesnou navigaci mezi kostkami ale nikoliv.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161003">&lt;/a>&lt;/div>

&lt;h2>3. říjen 2016 &amp;mdash; Posedlost absolutní pozicí?&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-playground.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-playground_t.jpg' alt='Eduro na mini-hřišti' title='Eduro na mini-hřišti' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-playground.jpg'>Eduro na mini-hřišti&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Dnes jsem něco přes hodinku testoval Eduro a aktuální
&lt;a href='https://github.com/robotika/eduro/commit/d4c575dbc8799149ef2a55f7299505946e9c5837' class='external'>verzi
1&lt;/a>. Když jsem ho tam v té cca 3x4m veliké ohrádce pozoroval, říkal jsem si,
jestli to neděláme úplně špatně a jestli to bazírování na absolutní pozici není
nějaká posedlost?! Na „hromadě” tam leží laserem nepřehlédnutelných 25 kostek
a cílový prostor lze spolehlivě poznat z RFID tagů a je také dost veliký na
umístění mnoha kostek s rozumným odstupem &amp;hellip;&lt;/div>

&lt;div class='p'>Místo toho se Eduro zatím spíše leká samo sebe, kostky klidně položí dvě vedle
sebe, tj.  získá body jen za první kostku, a jezdí-li po „osvědčených
koridorech”, tak stačí jedna chyba („nechtěně” položená kostka) a pak už je
klíčové křižovatce položí všechny [dnes se mi to stalo snad 2x].&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/play-ver1.png'>&lt;img src='/competitions/sick-robot-day/2016/play-ver1_t.png' alt='Schema startu a problémové křižovatky' title='Schema startu a problémové křižovatky' class='border'  width='320' height='152'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/play-ver1.png'>Schema startu a problémové křižovatky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Asi je nejvyšší čas vymyslet kde startovat. Na start pomocí dálkového ovládání
se nechystáme, takže by to mělo být někde u mantinelu a zároveň na kraji
&lt;i>storage area&lt;/i>, aby robot nehrnul kostky a měl šanci se vymotat vedlejším
koridorem. Mimochodem do „mantinelu” jsem dnes narazil asi 3x. Je to tím, že
ve &lt;i>storage area&lt;/i> vypínam detekci překážek, aby mohl v klidu sbírat kostky,
ale zdí neprojde &amp;hellip; TODO.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161005">&lt;/a>&lt;/div>

&lt;h2>5. říjen 2016 &amp;mdash; Společné testování&lt;/h2>

&lt;div class='p'>Včerejší společné testování s týmem &lt;a href='https://alpaca.siliconhill.cz/' class='external'>Alpaca&lt;/a>
dopadlo trošku jinak, než jsem si původně představoval, ale snad to mělo i
pozitivní přínos pro oba týmy. Byl jsem rád, že dorazili. Jejich všesměrový
robot se i po oddělání koleček horko-těžko vešel do obřího kufru a cestovat s
tím MHD chce už hodně vysokou motivaci! Díky &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Do skoro zaplněné haly by se nakonec hřiště 13x7 metrů nevešlo a tak byla
klika, že sousední „kruhovka” měla prostor vyklizený (navíc se ukázalo, že jí
ten večer hlídá spřízněná robo-duše). Jak už název budovy napovídá výsledné
hřiště rozhodně nebylo obdélníkové (i když by se nakonec dalo ze dvaceti stolů
„vyrobit”, ale tady motivace byla malá &amp;hellip; možná až doplníme korekci na
pozici???).&lt;/div>

&lt;div class='p'>Rozchodili jsme WiFi na Eduru (ještě, že ty Windows ukazují heslo),
předefinovali absolutní souřadnice &amp;mdash; (0, 0) je od teď na obrázku vlevo dole a
odpovídá tagu 0007 0000, resp. 0D00 0000 pro start z opačného rohu,
provizorně zase vypnuli detekci nepřítele (především kvůli kostkám, které si
Eduro nechtěně vyhrne ze &lt;i>storage area&lt;/i>), a vytvořili seznam tras pokrývající
13 míst (zubatá hradba) &amp;hellip; viz
&lt;a href='https://github.com/robotika/eduro/commit/224a991b10eff5253cdd0416aa9345e80b614876' class='external'>git&lt;/a>.&lt;/div>

&lt;div class='p'>Návrat přes potemnělou halu ale nebyl úplně šťastný. Ale vlastně to mohlo
dopadnout i o řád hůř, např. zničeným laserem. Bilance: ulomený konektor k
RFU620 (Tomáš udělal nové kabely, tj. nebylo to ani 2h staré), ohnuté pravé
hliníkové Lko (nevěřil bych, že to lze ohnout) a nefunkční motor číslo 2. S tím
motorem doufáme, že je to pouze vypadlý CAN modul, jako důsledek tahání za
kabely při návratu k původním (jen je třeba rozdělat spodní krabici Edura).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/alpaca.jpg'>&lt;img src='/competitions/sick-robot-day/2016/alpaca_t.jpg' alt='Alpaca' title='Alpaca' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/alpaca.jpg'>Alpaca&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/bended-gripper.jpg'>&lt;img src='/competitions/sick-robot-day/2016/bended-gripper_t.jpg' alt='ohnuté pravé rameno' title='ohnuté pravé rameno' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/bended-gripper.jpg'>ohnuté pravé rameno&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/broken-connector.jpg'>&lt;img src='/competitions/sick-robot-day/2016/broken-connector_t.jpg' alt='ulomený konektor' title='ulomený konektor' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/broken-connector.jpg'>ulomený konektor&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Dost lamentování. Zbývá 56h do odjezdu a TODO-list se zatím moc nezkrátil &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161006">&lt;/a>&lt;/div>

&lt;h2>6. říjen 2016 &amp;mdash; Odometrie&lt;/h2>

&lt;div class='p'>Dofukovat kola den před odjezdem není sice nejrozumnější, ale bude to nutné
udělat. Do teď jsme to neřešili (chyba) a teprve při jízdách na větší
vzdálenosti je to hodně poznat. Test na 10m jízdy rovně ani neujel, protože po
9m robot „narazil” do překážky 2.5m vlevo. To má teď asi nejvyšší prioritu ať
se to stihne ještě párkrát zkusit.&lt;/div>

&lt;div class='p'>Druhá nepříjemnost je důsledkem úterní destrukce. Vypadá to, že pozice laseru
není jako dříve a o pár stupňů je pootočený(?). Dříve nabíral kostky dost „na
hraně” a včera to již několikrát selhalo. Vypadá to, že tam necháme
&lt;a href='https://github.com/robotika/eduro/commit/6f9861e8b245116e08f52fc966639e4d234219c2' class='external'>hack
na 5cm offset&lt;/a>, se kterým to víceméně fungovalo.&lt;/div>

&lt;div class='p'>Z předchozího textu je zřejmé, že už jsme zase jezdili. &lt;span class='smile'>&lt;/span> Ano, byl to vypadlý
resp. vytažený konektor na motoru &amp;mdash; fixed. Tomáš také udělal nový kabel k
RFU620 a zatím bych to zaklepal ťuk, ťuk, ťuk snad vše funguje jako dříve a už
to není změť klubek kabelů.&lt;/div>

&lt;div class='p'>Z věcí, co se nemají dělat na poslední chvíli, jsem instaloval OpenCV na
případné zpracování obrazu. Na traktůrku ještě kamera není a tak jsem na to
pozapomněl. Přiznám se, že mne trošku znervóznil upgrade samotného Pythonu:&lt;/div>

&lt;pre>The following packages will be upgraded:
  libpython2.7-minimal libpython2.7-stdlib python2.7 python2.7-minimal&lt;/pre>

&lt;div class='p'>Ale snad také OK (do školního alarmu už jsme udělali jen jednu testovací jízdu
s novou instalací).&lt;/div>

&lt;div class='p'>Ze zajímavostí bych zmínil chybu v
&lt;a href='https://github.com/robotika/eduro/blob/master/driver.py#L80' class='external'>driver.py&lt;/a>, což
je jeden z nejstarších kusů kódu. Konkretně se projevovala tak, že když robot
detekoval blížící se kolizi, tak pouze poslal příkaz na odhození kostky a
couvnutí si 30cm. V realitě to ale bylo jinak: vůbec si necouvl a kostka mu
zůstala v klepetech.  Dokonce to sám věděl!&lt;/div>

&lt;div class='p'>Kód:&lt;/div>

&lt;pre>print "COUVAM", self.robot.localisation.pose()
self.driver.goStraight(-0.3, timeout=30)
print "COUVAM done", self.robot.localisation.pose()&lt;/pre>

&lt;div class='p'>Výstup:&lt;/div>

&lt;pre>COUVAM (5.315444919738929, 1.4719470617866883, 0.0005103738339570794)
0x100005050003L (5L, 5L) -75.9 (1/1)
0x100005050003L (5L, 5L) -66.3 (1/1)
0x100005050003L (5L, 5L) -67.0 (1/1)
0x100005050003L (5L, 5L) -69.2 (1/1)
0x100005050003L (5L, 5L) -71.2 (1/1)
0x100005050003L (5L, 5L) -70.7 (1/1)
COUVAM done (5.524286769635407, 1.4720695179939571, 0.06971353374260535)&lt;/pre>

&lt;div class='p'>Tj. z pozice x=5.31m si „couvnul” na x=5.52?! Není to chyba znaménka, je to
chyba skrytého předpokladu, že robot je před vykonáním příkazu v klidu. Ten ale
jel svých 50cm/s, spočítal si brzdnou dráhu (absolutní hodnotu), ale pak jí
přiřadil špatné znaménko pro vyhodnocení „jestli už to couvání ubrzdí”. Fixed
přidáním zastavení před couváním (viz
&lt;a href='https://github.com/robotika/eduro/commit/46299cb89ba8e9bd13e647fca360570c4d4b2ea0' class='external'>git&lt;/a>
&amp;mdash; zase jsem byl líny ten commit rozdělit). Mimochodem asi není překvapení, že
do překážky (opakovaně) narazil. V dalších pokusech jsem raději zeď nahradil
taškou se spacákem a celkem ji decimoval. Ono detekce na 20cm, nějaká reakční
doba a pak 5.31 + 0.2 vs. 5.52 &amp;hellip;&lt;/div>

&lt;div class='p'>Teď už jen pár obrázku z testování v hale, kde asi největší adrenalín bylo
přeparkování Spidera. Jednou s tím začít musíš! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cam161005_182228_201.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cam161005_182228_201_t.jpg' alt='David a Goliáš' title='David a Goliáš' class='border'  width='320' height='256'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/cam161005_182228_201.jpg'>David a Goliáš&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cam161005_185853_013.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cam161005_185853_013_t.jpg' alt='testování v hale' title='testování v hale' class='border'  width='320' height='256'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/cam161005_185853_013.jpg'>testování v hale&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161007">&lt;/a>&lt;/div>

&lt;h2>7. říjen 2016 &amp;mdash; Prohozená kola? (7h do odjezdu)&lt;/h2>

&lt;div class='p'>Po včerejším reportu mi bylo trošku smutno. Když si vzpomenu, jak před lety
Jirka/Cogito testoval Eduro před &lt;a href='/competitions/robotour/2010/results/cs'>Robotour
2010&lt;/a> a následně (zaslouženě) vyhrál, tak to „smíření” s chybou 1.5m na 10m
&amp;hellip;  nezkousnu to. Jirka tehdy kalibroval na cca 100m cestičce, 2m široké, s
tím, že došel k závěru, že kola jsou různě veliká. Konkrétně o &lt;b>0.00015m&lt;/b>!
Asi čitelnější to je jako 0.15mm &amp;hellip; fakt malý rozdíl. Ale opakovatelnost byla
neuvěřitelná a tak do kódu zavedl různě velká kola. Teď jsem jeho korekční
člen přenesl do
&lt;a href='https://github.com/robotika/eduro/blob/master/sickday2016.py' class='external'>sickday2016.py&lt;/a>
(viz
&lt;a href='https://github.com/robotika/eduro/commit/8849beae2f5c6deda98b4a0cfbe3e92c29428c95' class='external'>git diff&lt;/a>),
kdy nejprve jsem rozdíl nastavil na 0.0 a robot po přehrání logu byl necelý
metr vlevo. Prohodil jsem znaménko na &lt;b>-0.00015&lt;/b> a až neuvěřitelně se to
blíží realitě. Sherlock by asi řekl: někdo nám prohodil kola. &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161008">&lt;/a>&lt;/div>

&lt;h2>8. říjen 2016 &amp;mdash; Show Time&lt;/h2>

&lt;div class='p'>„Hele, mně se to líbilo!” &lt;span class='smile'>&lt;/span> Je pravda, že jsme nevyhráli, ale mise vlastně
byla splněna na 66.6% &amp;hellip; a co že bylo cílem mise? Obsadit první tři místa
českými týmy.&lt;/div>

&lt;div class='p'>Z pohledu „generálů v kožených křeslech” byl tréning nedostatečný. Zakopaný
pes nebyl až tak ve velkém množství kostek jako hrubý povrch koberce, na kterém
kostky držely jak přilepené! Resp. kombinace mnoha kostek s kobercem byla
smrtící.&lt;/div>

&lt;div class='p'>Krátce po prvních testech bylo nutné povolat HW sekci kvůli přestavbě robota.
Eduro bylo schopné kostky i přejet! Z různých kousků dřeva, zbytků hliníkových
profilů a „NASA lepící pásky” vznikla ochrana obou kol a středu robota:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/protect-right-wheel.jpg'>&lt;img src='/competitions/sick-robot-day/2016/protect-right-wheel_t.jpg' alt='pravý hák' title='pravý hák' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/protect-right-wheel.jpg'>pravý hák&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/protect-center.jpg'>&lt;img src='/competitions/sick-robot-day/2016/protect-center_t.jpg' alt='revize středu' title='revize středu' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/protect-center.jpg'>revize středu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/protect-left-wheel.jpg'>&lt;img src='/competitions/sick-robot-day/2016/protect-left-wheel_t.jpg' alt='ochrana zleva' title='ochrana zleva' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/protect-left-wheel.jpg'>ochrana zleva&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-game1.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-game1_t.jpg' alt='Eduro - konec prvního kola' title='Eduro - konec prvního kola' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-game1.jpg'>Eduro - konec prvního kola&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>1. kolo&lt;/h2>

&lt;div class='p'>V kódu byl nedostatek &lt;i>timeoutů&lt;/i> &amp;mdash; prostě jestli se snažíte jet 1m rovně a
to se vám za 60s nepodaří, tak je něco špatně a „měla by se” zkusit nějaká
alternativa. U základních operací, jako je couvání, zatáčení nebo hledání
kostky, tato kontrola byla, ale u navigace po lomené čáře už nikoliv. A za to
jsme zaplatili už v prvním kole. Eduro pěkně položilo dvě kostky, ale pak v
domečku najelo na jednu a to znamenalo konec. Byl to velmi smutný pohled na
robota 9 minut v křečích.&lt;/div>

&lt;h2>2. kolo&lt;/h2>

&lt;div class='p'>Během soutěže bych na kód normálně nesahal, ale ten pohled z první jízdy byl
fakt tristní. Přidal jsem timeout na minutu, ale co má dělat robot potom?
Dostal za úkol couvnout, 90 stupňů vlevo a 90 stupňů vpravo. A pak? Hmm.
Nejprve tam byla chyba a pak pokus o kód: nastav si znova timeout na 60s a
zopakuj původní (neúspěšnou) akci dovezení kostky na cílové místo.&lt;/div>

&lt;div class='p'>V realitě to nefungovalo dobře, ale i tak se robotu podařilo položit asi pět
(?) kostek. Pak si najel moc do domečku (&lt;i>storage area&lt;/i>) a to už bylo jak v
bažinách. No alespoň s sebou jednou za minutu zuřivě cukal a dokonce se mu
podařilo se vymotat. &lt;span class='smile'>&lt;/span> &amp;hellip; no ale myslím, že si tím vykoledoval jen trestné
body (náraz na mantinel). Za tu snahu ten půlbod stál (nevím, jestli jsme tím
nepřišli o druhé místo??).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/gentlemans-game.jpg'>&lt;img src='/competitions/sick-robot-day/2016/gentlemans-game_t.jpg' alt='Hra gentlemanů' title='Hra gentlemanů' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/gentlemans-game.jpg'>Hra gentlemanů&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/cogito-winning-game2.jpg'>&lt;img src='/competitions/sick-robot-day/2016/cogito-winning-game2_t.jpg' alt='Cogito MART zápas vyhrává' title='Cogito MART zápas vyhrává' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/cogito-winning-game2.jpg'>Cogito MART zápas vyhrává&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-game2.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-game2_t.jpg' alt='Eduro - konec druhého kola' title='Eduro - konec druhého kola' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-game2.jpg'>Eduro - konec druhého kola&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>3. kolo (Show Time)&lt;/h2>

&lt;div class='p'>Třetí jízda ze dvou?! Za to vděčíme týmu „Smelý Zajko”, který nakonec
nedorazil, a iterpelaci „Cogito MART” týmu, že zápas bez soupeře není fér
vůči ostatním týmům a že klidně obětují svého robota i bez bodového zisku.
Podle neověřených zpráv &lt;i>Smelý Zajko&lt;/i> v sobotu ráno havaroval na cestě cca
50km do Waldkirchu :-(. Zranění snad nebyli, ale jak dopadlo jejich auto
nevím.&lt;/div>

&lt;div class='p'>Na poslední zápas tedy místo slovenského týmu nastoupilo Eduro. Nevím, jestli
vidím do budoucna, ale stejně jako jsem tušil, že budeme „náhodně” vylosovaní
do zápasu s &lt;i>Cogito MART&lt;/i>, tak v poslední jízdě Eduro excelovalo, získalo by
nejvíce bodů ze všech zápasů za celý den &amp;mdash; byla radost na to koukat! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/slovak-flag.jpg'>&lt;img src='/competitions/sick-robot-day/2016/slovak-flag_t.jpg' alt='Slovenská vlajka' title='Slovenská vlajka' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/slovak-flag.jpg'>Slovenská vlajka&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-game3.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-game3_t.jpg' alt='Eduro - exhibice' title='Eduro - exhibice' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-game3.jpg'>Eduro - exhibice&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eduro-team-sick-2016.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eduro-team-sick-2016_t.jpg' alt='Eduro Team SICK 2016' title='Eduro Team SICK 2016' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eduro-team-sick-2016.jpg'>Eduro Team SICK 2016&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Ostatní zápasy a roboti&lt;/h2>

&lt;div class='p'>Letos dorazilo do Waldkirchu osm týmů. Většinu tvořily německé týmy + tři české
týmy &amp;hellip; i když je otázka, zda „švýcarské” Cogito, poskytující RaS (&lt;i>robot
as a service&lt;/i>), vlastně &lt;i>klasifikovat&lt;/i> &amp;hellip; &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/alpaca-vs-cogito.jpg'>&lt;img src='/competitions/sick-robot-day/2016/alpaca-vs-cogito_t.jpg' alt='Alpaca vs. Cogito MART' title='Alpaca vs. Cogito MART' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/alpaca-vs-cogito.jpg'>Alpaca vs. Cogito MART&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/freiburg-vs-sickubos.jpg'>&lt;img src='/competitions/sick-robot-day/2016/freiburg-vs-sickubos_t.jpg' alt='CS Freiburg vs. SicKubOS Osnabrück' title='CS Freiburg vs. SicKubOS Osnabrück' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/freiburg-vs-sickubos.jpg'>CS Freiburg vs. SicKubOS Osnabrück&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/kamaro-vs-wingmen.jpg'>&lt;img src='/competitions/sick-robot-day/2016/kamaro-vs-wingmen_t.jpg' alt='Kamaro Engineering vs. WINGmen Furtwangen' title='Kamaro Engineering vs. WINGmen Furtwangen' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/kamaro-vs-wingmen.jpg'>Kamaro Engineering vs. WINGmen Furtwangen&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Většina týmů se snažila posbírat pár bodů a jenom dva týmy měly součástí
strategie agresivní výpad a blokaci nepřítele. Nechci být škodolibý, ale
potěšilo mne, když nastoupily proti sobě &lt;span class='smile'>&lt;/span>. Podle očekávání to ublížilo
spíše jim než soupeři. Kousek tohoto zápasu je i na
&lt;a href='http://www.regiotrends.de/de/schon-gelesen/index.video.322070.0.html' class='external'>přehledovém
videu&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/robot-kamaro.jpg'>&lt;img src='/competitions/sick-robot-day/2016/robot-kamaro_t.jpg' alt='Kamaro Engineering' title='Kamaro Engineering' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/robot-kamaro.jpg'>Kamaro Engineering&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/eye-for-eye.jpg'>&lt;img src='/competitions/sick-robot-day/2016/eye-for-eye_t.jpg' alt='Oko za oko, ...' title='Oko za oko, ...' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/eye-for-eye.jpg'>Oko za oko, ...&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/robot-sickubos-osnabrueck.jpg'>&lt;img src='/competitions/sick-robot-day/2016/robot-sickubos-osnabrueck_t.jpg' alt='SicKubOS Osnabrück' title='SicKubOS Osnabrück' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/robot-sickubos-osnabrueck.jpg'>SicKubOS Osnabrück&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/robot-alpaca.jpg'>&lt;img src='/competitions/sick-robot-day/2016/robot-alpaca_t.jpg' alt='Alpaca' title='Alpaca' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/robot-alpaca.jpg'>Alpaca&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/robot-fredt.jpg'>&lt;img src='/competitions/sick-robot-day/2016/robot-fredt_t.jpg' alt='FREDT' title='FREDT' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/robot-fredt.jpg'>FREDT&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/robot-wingmen-furtwangen.jpg'>&lt;img src='/competitions/sick-robot-day/2016/robot-wingmen-furtwangen_t.jpg' alt='WINGmen Furtwangen' title='WINGmen Furtwangen' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/robot-wingmen-furtwangen.jpg'>WINGmen Furtwangen&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/czech-prices.jpg'>&lt;img src='/competitions/sick-robot-day/2016/czech-prices_t.jpg' alt='Mise splněna na 66.6%' title='Mise splněna na 66.6%' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/czech-prices.jpg'>Mise splněna na 66.6%&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/sick-playground.jpg'>&lt;img src='/competitions/sick-robot-day/2016/sick-playground_t.jpg' alt='Hrací plocha' title='Hrací plocha' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/sick-playground.jpg'>Hrací plocha&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/what-is-it.jpg'>&lt;img src='/competitions/sick-robot-day/2016/what-is-it_t.jpg' alt='Kvíz - co je to?' title='Kvíz - co je to?' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/what-is-it.jpg'>Kvíz - co je to?&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/sick-robot-day/2016/waves.png'>&lt;img src='/competitions/sick-robot-day/2016/waves_t.png' alt='... a zase oscilace' title='... a zase oscilace' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/sick-robot-day/2016/waves.png'>... a zase oscilace&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Video (Cogito MART - první zápas)&lt;/h2>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/XGcGBP-hDKI" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;h2>Odkazy&lt;/h2>

&lt;ul>
&lt;li>&lt;a href='http://www.regiotrends.de/de/schon-gelesen/index.news.322070.html' class='external'>regiotrends.de&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="161009">&lt;/a>&lt;/div>

&lt;h2>9. říjen 2016 &amp;mdash; Eduro a Cogito log videa&lt;/h2>

&lt;h3>1. kolo&lt;/h3>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/GWn8h20Iac4" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;h3>2. kolo&lt;/h3>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/91B9cHhLNHA" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;h3>Exhibice&lt;/h3>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/_-hQbw1Y640" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;h3>&amp;hellip; a stereo očima Clementine/Cogito&lt;/h3>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/WLbLYncry34" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="161011">&lt;/a>&lt;/div>

&lt;h2>11. říjen 2016 &amp;mdash; Oficiální výsledky&lt;/h2>

&lt;div class='p'>Na &lt;a href='https://www.sick.com/de/en/robotday-2016/w/robotday2016/' class='external'>stránkách SICKu&lt;/a>
oficiální výsledky vyvěšené zatím stále ještě nejsou, ale Def mi poslal konečné
PDFko obsahující toto info:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;table border="1">
	&lt;tr>
		&lt;th>Team&lt;/th>
		&lt;th>Lauf 1&lt;/th>
		&lt;th>Lauf 2&lt;/th>
		&lt;th>Bestes&lt;/th>
		&lt;th>Platz&lt;/th>
	&lt;/tr>
	&lt;tr bgcolor="yellow">
		&lt;td>&lt;b>Karlsuni Prag&lt;/b>&lt;/td>
		&lt;td>7.0&lt;/td>
		&lt;td>6.0&lt;/td>
		&lt;td>7.0&lt;/td>
		&lt;td>1&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;b>Uni FR&lt;/b>&lt;/td>
		&lt;td>-0.5&lt;/td>
		&lt;td>5.0&lt;/td>
		&lt;td>5.0&lt;/td>
		&lt;td>2&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;b>EDURO&lt;/b>&lt;/td>
		&lt;td>2.0&lt;/td>
		&lt;td>4.5&lt;/td>
		&lt;td>4.5&lt;/td>
		&lt;td>3&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;b>Kamaro Engineering e.V.&lt;/b>&lt;/td>
		&lt;td>4.0&lt;/td>
		&lt;td>4.0&lt;/td>
		&lt;td>4.0&lt;/td>
		&lt;td>4&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;b>Osnabrück&lt;/b>&lt;/td>
		&lt;td>1.0&lt;/td>
		&lt;td>2.5&lt;/td>
		&lt;td>2.5&lt;/td>
		&lt;td>6&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;b>FRED&lt;/b>&lt;/td>
		&lt;td>X&lt;/td>
		&lt;td>1.0&lt;/td>
		&lt;td>1.0&lt;/td>
		&lt;td>6&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;b>Alpaca&lt;/b>&lt;/td>
		&lt;td>0.0&lt;/td>
		&lt;td>0.0&lt;/td>
		&lt;td>0.0&lt;/td>
		&lt;td>7&lt;/td>
	&lt;/tr>
	&lt;tr>
   &lt;td>&lt;b>WINGmen&lt;/b>&lt;/td>
		&lt;td>X&lt;/td>
		&lt;td>X&lt;/td>
		&lt;td>0.0&lt;/td>
		&lt;td>7&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td>&lt;b>Smelý Zajko&lt;/b>&lt;/td>
		&lt;td>-&lt;/td>
		&lt;td>-&lt;/td>
		&lt;td>-&lt;/td>
		&lt;td>-&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;/center>&lt;/div>

&lt;div class='p'>Pár zajímavostí:&lt;/div>

&lt;ul>
&lt;li>nepočítal se součet bodů, ale nejlepší kolo (Def mne uklidnil, že i pro součet bychom
dopadli stejně, protože na druhé místo by se dostalo Kamaro)&lt;/li>

&lt;li>ten náraz v druhé jízdě nás opravdu stál druhé místo&lt;/li>

&lt;li>&lt;i>kdyby&lt;/i> exhibice byla normální jízda, tak by to &amp;hellip; &lt;span class='smile'>&lt;/span>&lt;/li>
&lt;/ul>

&lt;div class='p'>Cogito MART vítězný zápas byl tedy ten první a zápas s Edurem byl tedy bodově
nejlepší pouze pro Eduro. Zde je video od Davida/MART:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/3uaT7xsMJnM?list=PL1slVS532sQBkc6ujGt-5oI5I4hIp3YQA" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>případně viz Davidův kompletní &lt;a href='https://goo.gl/TcBvBu' class='external'>SICK Robot Day 2016 video list&lt;/a>.&lt;/div>

&lt;h3>Video od Andrease/CS Freiburg (2. místo) s SicKubOS&lt;/h3>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/UegNz-ERm9k" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;h3>Eduro Exhibice&lt;/h3>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/F_SzsSTY5og?list=PL1slVS532sQBkc6ujGt-5oI5I4hIp3YQA" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a href='/competitions/sick-robot-day/2016/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Robotour v praxi?!</title>
	<link rel='alternate' href="http://localhost/articles/starship-delivery-robots/cs"/>
	<id>http://localhost/articles/starship-delivery-robots/cs</id>
	<updated>2016-09-27T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Přiznám se, že mne informace, že &lt;i>v Praze se po Staroměstkém náměstí
promenovali futurističtí donáškoví roboti&lt;/i> trošku vyvedla z míry. Dozvěděl
jsem se to tři dny po Robotour, kde se o podobnou úlohu snažíme už několik let!
Jak je to tedy doopravdy? Další „investigativní robotika” &amp;hellip; &lt;span class='smile'>&lt;/span>
 </summary>
	<content type='html'> 
&lt;div class='p'>Začal bych tím, že se mi to nezdálo a opravdu na Staroměstském náměstí proběhlo
&lt;a href='https://blog.rohlik.cz/2016/09/19/fotogalerie-kdyz-se-po-staromaku-prohaneji-roboti/' class='external'>demo
robotů&lt;/a> (+
&lt;a href='https://www.facebook.com/tomas.cupr/videos/10154544912118593/' class='external'>video&lt;/a>). Je
zřejmé, že to byla spíše mediální kampaň, ale &amp;hellip; roboti jsou od firmy
&lt;a href='https://www.starship.xyz/' class='external'>Starship Technologies&lt;/a>, která má sídlo v
Británii a Estonsku. Podle jejich &lt;a href='https://www.starship.xyz/about-us/' class='external'>webových
stránek&lt;/a>: &lt;i>Starship Technologies was launched in 2014 by Ahti Heinla and
Janus Friis. Our business headquarter is in London and our engineering in
Estonia.&lt;/i> A na rovinu to nejsou žádní začátečníci a podíleli se např. na
vývoji &lt;b>Skype&lt;/b> &amp;hellip; hmmm.&lt;/div>

&lt;div class='p'>Z toho mála, co jsem zatím zjistil na českých webových stránkách, asi nejvíce
info bylo na
&lt;a href='http://connect.zive.cz/clanky/rohlikcz-roboti-snakupem-budou-brazdit-ceske-ulice-uz-pristi-rok/sc-320-a-184165/default.aspx' class='external'>connect.cz&lt;/a>.
Konkrétně&lt;/div>

&lt;ul>
&lt;li>Starship Technologies poskytují roboty jako službu, tj. starají se o jejich
provoz a umožňuje jim to další vývoj a průběžný upgrade&lt;/li>

&lt;li>roboti mají dojezd 3 až 5 kilometrů, max rychlost 6km/h&lt;/li>

&lt;li>primárním senzorem jsou kamery&lt;/li>

&lt;li>na Staroměstském náměstí firma ukazovala dva modely (starší a novější)&lt;/li>

&lt;li>hmotnost robota je 15 kg a nosnost pak 10 kg (na videu říká 18kg &amp;hellip; prostě
zhruba)&lt;/li>

&lt;li>roboti jsou neustále připojení do internetu pomocí mobilní sítě&lt;/li>

&lt;li>první cesta k zákazníkovi vyžaduje výrazný manuální zásah a ovládání
operátorem, další už je ale plně automatická&lt;/li>
&lt;/ul>

&lt;div class='p'>Přímo od zdroje se mi moc informací získat nepodařilo. Jediné, co je zřejmé je,
že to myslí naprosto vážně. Jejich roboti už navštívili několik evropských a
amerických (Washington, San Francisco) měst. Procházel jsem
&lt;a href='https://www.google.cz/search?q=starship+technologies+robot' class='external'>výsledky na
Google&lt;/a> (&lt;i>starship technologies robot&lt;/i>) a trošku mi to přišlo jak z filmu
&lt;a href='http://www.csfd.cz/film/29221-amelie-z-montmartru/prehled/' class='external'>Amélie&lt;/a>, kdy její
otec dostává fotky s trpaslíkem z celého světa.&lt;/div>

&lt;div class='p'>Pár detailnějších záběrů naleznete zde (původ snímků je na 95% přímo od
&lt;a href='https://www.starship.xyz/' class='external'>Starship technologies&lt;/a>):&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/starship-delivery-robots/boogie.jpg'>&lt;img src='/articles/starship-delivery-robots/boogie_t.jpg' alt='pohyblivá zadní osa' title='pohyblivá zadní osa' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/articles/starship-delivery-robots/boogie.jpg'>pohyblivá zadní osa&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/starship-delivery-robots/front.jpg'>&lt;img src='/articles/starship-delivery-robots/front_t.jpg' alt='senzory vpředu' title='senzory vpředu' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/articles/starship-delivery-robots/front.jpg'>senzory vpředu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/starship-delivery-robots/side-camera.jpg'>&lt;img src='/articles/starship-delivery-robots/side-camera_t.jpg' alt='detail kola a boční kamera' title='detail kola a boční kamera' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/articles/starship-delivery-robots/side-camera.jpg'>detail kola a boční kamera&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Tak alespoň rozměry kol jsou vidět &amp;mdash;
&lt;a href='https://www.quickie-wheelchairs.com/Wheelchair-Parts-Accessories/Wheelchair-Parts/Wheelchair-Tires/8-x-1-1-4-Pneumatic-Tire-Light-Gray/2269p' class='external'>8 x 1 1/4&lt;/a>,
což je velikost, která používá pro invalidní vozíky.&lt;/div>

&lt;div class='p'>Tento obrázek pochází z
&lt;a href='https://www.roboticsbusinessreview.com/starship_goes_the_last_mile_for_deliveries/' class='external'>Robotics
Bussiness Review&lt;/a>, ale článek je zamčený a registrovat se mi nechce (navíc je
z loňského prosince = starý).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 235px;'>&lt;tr>&lt;td>
&lt;a href='/articles/starship-delivery-robots/sensors.jpg'>&lt;img src='/articles/starship-delivery-robots/sensors_t.jpg' alt='pokrytí senzory' title='pokrytí senzory' class='border'  width='229' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/starship-delivery-robots/sensors.jpg'>pokrytí senzory&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Za zmínku stojí i scénář vyvíjený ve spolupráci s Mercedes-Benz. Ve spodním
patře je 8 robotů a v dalších je pak zboží pro zákazníky:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="500" height="281" src="https://www.youtube.com/embed/2q0dh9C6xCI" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Z pravidelných reportů je i vidět, jak firma roste:&lt;/div>

&lt;h3>&lt;a href='https://www.starship.xyz/press-release/' class='external'>London, United Kingdom, 2 November 2015(?)&lt;/a>&lt;/h3>

&lt;div class='p'>&lt;i>The company employs 30 people and has offices in London, United Kingdom, and
Tallinn, Estonia. Former Skype co-founder Ahti Heinla serves as the company’s
CEO and CTO, serial tech entrepreneur Allan Martinson is Chief Operating
Officer and tech and mobile industry veteran Keith Cornell is Chief Commercial
Officer.&lt;/i>&lt;/div>

&lt;h3>&lt;a href='https://www.starship.xyz/starship-launches-in-uk/' class='external'>První předváděčka v Londýně&lt;/a>&lt;/h3>

&lt;div class='p'>&lt;i>First launched in November 2015, the robot is designed for local delivery of
goods and groceries for consumers for under £1 per shipment.&lt;/i>&lt;/div>

&lt;h3>&lt;a href='https://www.starship.xyz/starship-technologies-launches-testing-program-self-driving-delivery-robots-major-industry-partners/' class='external'>London, United Kingdom, 6 July&lt;/a>&lt;/h3>

&lt;div class='p'>&lt;i>The company employs 55 people.&lt;/i>&lt;/div>

&lt;h3>&lt;a href='http://www.inc.com/kevin-j-ryan/automated-food-delivery-robots-are-coming-to-the-us.html' class='external'>Automatická donáška zboží v USA&lt;/a>&lt;/h3>

&lt;div class='p'>&lt;i>Starship said in July that its robots had traveled close to 5,000 miles and
encountered over 400,000 people without a single accident. It claimed that
during testing, about two-thirds of people ignored the bots entirely, while the
rest reacted to them mostly favorably, often by snapping photos. The robots are
programmed to avoid collisions with inanimate objects as well as people and
pets. Of course, people and pets aren't programmed to avoid collisions with the
bots.&lt;/i>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/articles/starship-delivery-robots/dozen.jpg'>&lt;img src='/articles/starship-delivery-robots/dozen_t.jpg' alt=',,tucet špinavců&amp;#039;&amp;#039;' title=',,tucet špinavců&amp;#039;&amp;#039;' class='border'  width='320' height='228'/>&lt;/a>&lt;br/>
&lt;a href='/articles/starship-delivery-robots/dozen.jpg'>,,tucet špinavců&amp;#039;&amp;#039;&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Další odkazy&lt;/h2>

&lt;ul>
&lt;li>&lt;a href='http://www.theverge.com/2016/2/23/11099334/starship-self-driving-delivery-robot-video-mwc-2016' class='external'>The Verge - foto a video&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>Máte-li jakékoli dotazy, připomínky, či postřehy &amp;ndash;
&lt;a href='/articles/starship-delivery-robots/cs#email'>kontaktujte nás&lt;/a>.&lt;/div>
 </content>
</entry>
<entry>
	<title>Výsledky</title>
	<link rel='alternate' href="http://localhost/competitions/robotour/2016/results/cs"/>
	<id>http://localhost/competitions/robotour/2016/results/cs</id>
	<updated>2016-09-22T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Jedenáctý ročník soutěže Robotour byl rozhodně nejdeštivější. Pršelo až cedilo
bez přestávky celý den, chvílemi i vodorovně, protože od Dunaje i dost fičelo.
Byla to tedy &lt;i>challenge&lt;/i> nejen pro senzory a elektroniku, ale také pro týmy
samotné.  Přesto to 12 robotů nevzdávalo a soutěžilo! Istrobotics byl jasný
vítěz s více jak 600 body &amp;hellip;
 </summary>
	<content type='html'> 
&lt;h1>Soutěž&lt;/h1>

&lt;h2>Účast&lt;/h2>

&lt;div class='p'>Letos se přihlásilo 14 týmů a z toho jich 12 aktivně soutěžilo. Český MART to
vzdal v pátek a německý WallE také z důvodu neopravitelné závady (robot byl
obratem rozebrán a jeho součástky použity pro tým „No! This is Patrick”).&lt;/div>

&lt;h2>Lokace&lt;/h2>

&lt;div class='p'>&lt;b>Technische Hochschule Deggendorf&lt;/b> má moc pěkný areál university. Je na břehu
řeky Dunaj a obklopuje ho hned několik parků. &lt;i>Stadthallenpark&lt;/i> je klasický
parčík s fontánou, růžemi a pískovými cestičkami. V okolí ale najdete i
několik dlouhých rovných cest podél potoku Bogenbach a řeky Dunaj. Konečně jsou
zde i anomálie jako kovový koridor na střeše parkoviště &lt;i>Parkdeck
Deichgarten&lt;/i> nebo pro ztížení soutěže lze použít mosty, podjezdy, rampy,
železnici, schody atd. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 564px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/robotour/2016/map.png' alt='Přehledová mapa' title='Přehledová mapa' class='border'  width='558' height='453'/>&lt;/span>&lt;br/>
&lt;span>Přehledová mapa&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Počasí&lt;/h2>

&lt;div class='p'>&amp;hellip; bylo prostě příšerné. Další úroveň obtížnosti by byl asi už jen sníh a
kroupy! Pršelo celý den a soutěžní prostor byl pokryt mnoha loužemi (i několik
centimetrů hlubokými), plus studený vichr &amp;hellip; ale co tě nezabije, to tě posílí,
takže možná letošní zkušenost bude hnací silou k vylepšení robotů i soutěže
samotné.&lt;/div>

&lt;h2>Homologace&lt;/h2>

&lt;div class='p'>Páteční homologace byla jak procházka rájem, ve srovnání s počasím, co nás
čekalo v sobotu. Ukázalo se, že automatickou nakládku piva řešily pouze dva
týmy: Cogito využilo možnosti s 500ml plechovkou a Radioklub Písek vytvořil
pneumatický jeřáb schopný nakládat plný pětilitrový soudek. Ostatní týmy byly
rozumnější a tento extra bonus ignorovaly (do dalších let se je budeme snažit
od toho odradit, dokud nebudou mít plně funkční realizaci základní úlohy).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/istrobotics.jpg'>&lt;img src='/competitions/robotour/2016/results/istrobotics_t.jpg' alt='Istrobotics' title='Istrobotics' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/istrobotics.jpg'>Istrobotics&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/jecc.jpg'>&lt;img src='/competitions/robotour/2016/results/jecc_t.jpg' alt='JECC - Fesl' title='JECC - Fesl' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/jecc.jpg'>JECC - Fesl&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/raptors.jpg'>&lt;img src='/competitions/robotour/2016/results/raptors_t.jpg' alt='Raptors' title='Raptors' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/raptors.jpg'>Raptors&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Zažili jsme i vzrušující moment hodný &lt;i>bulvární novinařiny&lt;/i>: Quadrons tým
nechal po úspěšné homologaci zaparkovaného robota vedle cesty (snad se
stisknutým STOP tlačítkem?), když tu z ničehož nic se sám robot rozjel naplno
ostře vlevo a z kopce do potoka. Nebýt stromků a keřů v těsné blízkosti vody,
tak je tam. Náraz vytrhal olověné baterky, ale jinak se prý nic snad nestalo.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/run-away-robot.jpg'>&lt;img src='/competitions/robotour/2016/results/run-away-robot_t.jpg' alt='Robot na útěku' title='Robot na útěku' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/run-away-robot.jpg'>Robot na útěku&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/quadrons.jpg'>&lt;img src='/competitions/robotour/2016/results/quadrons_t.jpg' alt='Quadrons' title='Quadrons' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/quadrons.jpg'>Quadrons&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/lois.jpg'>&lt;img src='/competitions/robotour/2016/results/lois_t.jpg' alt='Lois' title='Lois' class='border'  width='165' height='220'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/lois.jpg'>Lois&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Kupodivu něco podobného se stalo i Raptorům cca o hodinu později (ale nebylo to
tak dramatické).&lt;/div>

&lt;h2>Soutěžní kola&lt;/h2>

&lt;div class='p'>Na nulté trénovací kolo v 9 hodin skoro nikdo nepřišel. Jenom Aleš z týmu AmBot
odstartoval a udělal si testovací jízdu. Všichni ostatní doufali v pozdější
lepší počasí a asi je do deště nic nemotivovalo (nulté kolo není bodované).&lt;/div>

&lt;div class='p'>Soutěž oficiálně začala v 10h u hlavního stanu a tak se první kolo posunulo na
10:30. Start byl v &lt;i>Stadthallenpark&lt;/i> poblíž mostu a cíl na druhé straně parku
(křižovatka na náspu). Istrobotics byli schopní získat několik set bodů a také
AmBot, Smelý Zajko, JECC, Raptors a Quadrons trošku bodovali.&lt;/div>

&lt;div class='p'>Druhé kolo bylo v 11:30, takže se jelo skoro bez přestávky. Tentokrát se vše
odehrávalo na střeše krytého parkoviště. Hodně tam foukalo a všude spousty
vody. Zde se již použilo pravidlo, že nejlepší týmy startují na konci řady a
tak AmBot (předposlední) zkusil úhybný manévr do sousedního koridoru, aby se
vyhnul dopravní zácpě, ale neúspěšně. Jeho robot osciloval, jestli ta orezlá
stěna je nebo není sjízdná a v tomto kole nezabodoval. Vlastně bodoval jediný
Istrobotics, který se prokličkoval mezi ostatními roboty a dostal se až na
vzdálený konec parku. Kousek od cíle se ale rozhodl pro odbočku vlevo, kde ho
čekaly tři podlouhlé schody. K mému překvapení ho Pavol nechal jet dál a pád
z prvního schodu autíčko s barelem na zádech rozdejchalo, ale pak jsme Pavla
přesvědčili, že to není dobrý nápad, a na dalším schodu robota zastavil.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/run2.jpg'>&lt;img src='/competitions/robotour/2016/results/run2_t.jpg' alt='2. kolo u řeky' title='2. kolo u řeky' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/run2.jpg'>2. kolo u řeky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/run2-cogito.jpg'>&lt;img src='/competitions/robotour/2016/results/run2-cogito_t.jpg' alt='Cogito' title='Cogito' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/run2-cogito.jpg'>Cogito&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Třetí kolo bylo pro mne rozhodně nejemotivnější. Všech 12 robotů stálo v řadě
na cestě rovnoběžné se železniční tratí. Tým &lt;i>Kamaro Beteigeuze&lt;/i>, loňský vítěz,
získal své první body. V plánu měli přejet most a pak vpravo do podjezdu, ale
jejich robot si to rozmyslel, odbočil ještě před mostem a druhé vynucené
odbočení vpravo ho „svedlo z cesty”.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/run3.jpg'>&lt;img src='/competitions/robotour/2016/results/run3_t.jpg' alt='3. kolo' title='3. kolo' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/run3.jpg'>3. kolo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/run3-back.jpg'>&lt;img src='/competitions/robotour/2016/results/run3-back_t.jpg' alt='3. kolo pokračování řady' title='3. kolo pokračování řady' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/run3-back.jpg'>3. kolo pokračování řady&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/kamaro.jpg'>&lt;img src='/competitions/robotour/2016/results/kamaro_t.jpg' alt='Kamaro Beteigeuze' title='Kamaro Beteigeuze' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/kamaro.jpg'>Kamaro Beteigeuze&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Také Istrobotics měli problém s mostem a robot odmítal na něj vstoupit. V tomto
kole bylo hned několik kolizí na startu (Radioklub Písek to např. nacouval do
soupeře vzadu). Několik týmů potvrdilo problémy s kompasem, takže buď to byl
vliv kolejí nebo skrytého kabelu vysokého napětí podobně jako v Písku na
&lt;a href='/competitions/robotem-rovne/cs'>Robotem rovně&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/run4.jpg'>&lt;img src='/competitions/robotour/2016/results/run4_t.jpg' alt='4. kolo' title='4. kolo' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/run4.jpg'>4. kolo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Čtvrté (poslední) kolo začínalo na druhé straně problematického mostu a roboti
se měli vrátit zpět do školy. Bylo zde zase všech 12 robotů. Tým Cogito změnil
strategii na jízdu 25 metrů po cestě, vyložení piva a návrat na start. Tímto
by získal extra body za automatickou nakládku a vykládku. Ale úplně se to
nepovedlo: ARBot vystartoval ve stejnou dobu a nacházel se ve slepé zóně
senzorů.  Vypadalo to jak opravdový závod, kdy se ale v jeden okamžik oba
roboti rozhodli zahnout směrem k druhému a „vytlačit ho z cesty”. ARBot
natáčel video, tak se na to můžete podívat i vy:&lt;/div>

&lt;div class='p'>&lt;center> 
&lt;iframe width="640" height="360"
src="https://www.youtube.com/embed/dB2YhL4bpEY" frameborder="0"
allowfullscreen>&lt;/iframe> 
&lt;/center>&lt;/div>

&lt;div class='p'>Bylo zajímavé, že Smelý Zajko a JECC skončili na identickém místě (toto se
stalo již v prvním kole). Oba roboti narazili na betonový kvádr u nájezdu na
most. Byla to náhoda, nebo neuronové sítě obou robotů vyhodnotily situaci
stejně špatně?&lt;/div>

&lt;h2>Celkové bodování&lt;/h2>

&lt;div class='p'>&lt;center>
&lt;table border="1">
	&lt;tr>
		&lt;th>Místo&lt;/th>
		&lt;th>Tým&lt;/th>
		&lt;th>1. kolo&lt;/th>
		&lt;th>2. kolo&lt;/th>
		&lt;th>3. kolo&lt;/th>
		&lt;th>4. kolo&lt;/th>
		&lt;th>celkem&lt;/th>
	&lt;/tr>
	&lt;tr bgcolor="yellow">
		&lt;td align="center">1.&lt;/td>
		&lt;td>&lt;b>Istrobotics&lt;/b>&lt;/td>
		&lt;td>156&lt;/td>
		&lt;td>272&lt;/td>
		&lt;td>90&lt;/td>
		&lt;td>94&lt;/td>
		&lt;td>612&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">2.&lt;/td>
		&lt;td>&lt;b>Kamaro Beteigeuze&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>76&lt;/td>
		&lt;td>94&lt;/td>
		&lt;td>170&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">3.-5.&lt;/td>
		&lt;td>&lt;b>Smelý Zajko&lt;/b>&lt;/td>
		&lt;td>28&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>40&lt;/td>
		&lt;td>68&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">3.-5.&lt;/td>
		&lt;td>&lt;b>JECC - Fesl&lt;/b>&lt;/td>
		&lt;td>28&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>40&lt;/td>
		&lt;td>68&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">3.-5.&lt;/td>
		&lt;td>&lt;b>AmBot&lt;/b>&lt;/td>
		&lt;td>66&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>66&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">6.&lt;/td>
		&lt;td>&lt;b>Raptors&lt;/b>&lt;/td>
		&lt;td>20&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>3&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>23&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">7.&lt;/td>
		&lt;td>&lt;b>Cogito&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>1+5&lt;/td>
		&lt;td>6&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">8.-9.&lt;/td>
    &lt;td>&lt;b>Quadrons&lt;/b>&lt;/td>
		&lt;td>1&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>1&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">8.-9.&lt;/td>
		&lt;td>&lt;b>ARBot&lt;/b>&lt;/td>
		&lt;td>1&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>1&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">10.-12.&lt;/td>
		&lt;td>&lt;b>Lois&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">10.-12.&lt;/td>
		&lt;td>&lt;b>No! This is Patrick!&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">10.-12.&lt;/td>
		&lt;td>&lt;b>Radioklub Písek TCVVI&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
	&lt;/tr>
&lt;/table>
&lt;/center>&lt;/div>

&lt;h1>Závěr&lt;/h1>

&lt;div class='p'>Soutěž byla letos dost vyčerpávající, ale bylo vidět neuvěřitelné odhodlání
týmů posunout se dál. Tisíceré díky profesoru Kurprisovi a jeho kolegům za
organizaci &amp;mdash; byla dokonalá! Také díky sponzorům a městu Deggendorf za pokrytí
nákladů na ubytování a společnou večeři.&lt;/div>

&lt;div class='p'>A co dál? Diskutovali jsme to na nedělním workshopu (jako součást
&lt;a href='http://robotics.fel.cvut.cz/pair16/' class='external'>PAIR&amp;#039;16 konference&lt;/a>) a nechal bych to
teď do samostatného článku. Naše další plány se shodovaly i s týmy, které už
nikdy nechtějí zadávat souřadnice přes mokré nefunkční klávesnice z promočených
papírků. Je čas posunout se k větší autonomii &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/polish-teams.jpg'>&lt;img src='/competitions/robotour/2016/results/polish-teams_t.jpg' alt='Polské týmy Quadrons a Raptors' title='Polské týmy Quadrons a Raptors' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/polish-teams.jpg'>Polské týmy Quadrons a Raptors&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/radioklub-pisek-crane.jpg'>&lt;img src='/competitions/robotour/2016/results/radioklub-pisek-crane_t.jpg' alt='Radioklub Písek - jeřáb' title='Radioklub Písek - jeřáb' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/radioklub-pisek-crane.jpg'>Radioklub Písek - jeřáb&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/cogito2.jpg'>&lt;img src='/competitions/robotour/2016/results/cogito2_t.jpg' alt='Cogito' title='Cogito' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/cogito2.jpg'>Cogito&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>ARBot foto (2. kolo)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/ar-arbot.jpg'>&lt;img src='/competitions/robotour/2016/results/ar-arbot_t.jpg' alt='ARBot' title='ARBot' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/ar-arbot.jpg'>ARBot&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/ar-2nd-run.jpg'>&lt;img src='/competitions/robotour/2016/results/ar-2nd-run_t.jpg' alt='2. kolo - střecha parkoviště' title='2. kolo - střecha parkoviště' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/ar-2nd-run.jpg'>2. kolo - střecha parkoviště&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/ar-ambot-and-istrobotics.jpg'>&lt;img src='/competitions/robotour/2016/results/ar-ambot-and-istrobotics_t.jpg' alt='AmBot a Istrobotics' title='AmBot a Istrobotics' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/ar-ambot-and-istrobotics.jpg'>AmBot a Istrobotics&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/ar-kamaro.jpg'>&lt;img src='/competitions/robotour/2016/results/ar-kamaro_t.jpg' alt='Kamaro Beteigeuze' title='Kamaro Beteigeuze' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/ar-kamaro.jpg'>Kamaro Beteigeuze&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/results/ar-smely-zajko.jpg'>&lt;img src='/competitions/robotour/2016/results/ar-smely-zajko_t.jpg' alt='Smelý Zajko' title='Smelý Zajko' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2016/results/ar-smely-zajko.jpg'>Smelý Zajko&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>Kamaro Betelgeuse Video&lt;/h2>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/IrkcsHbpMHo" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>Pokud chcete nějak podpořit tuto soutěž nebo máte nějaký komentář/dotaz, tak
prosím použijte &lt;a href='/competitions/robotour/2016/results/cs#email'>kontaktní formulář&lt;/a>.&lt;/div>
 </content>
</entry>
<entry>
	<title>Den chytrých aut</title>
	<link rel='alternate' href="http://localhost/articles/den-chytrych-aut/cs"/>
	<id>http://localhost/articles/den-chytrych-aut/cs</id>
	<updated>2016-09-14T00:00:00Z</updated>
	<author><name>Martin Dlouhý, foto Zdeněk Sluka</name></author>
	<summary type='html'> Víte, že je v Praze vývojové centrum pro autonomní vozidla? A co se podívat
rovnou „pod kapotu” a zjistit, co se pod tím skrývá? Zní to zajímavě?
Pokud ano, tak už máte smůlu &amp;mdash; &lt;b>Den chytrých aut&lt;/b> byl 8. září 2016 na
testovacím polygonu v Milovicích. Věřím ale, že firma Valeo časem uspořádá
další demo a možná vás bude motivovat i tato krátká reportáž.
 </summary>
	<content type='html'> 
&lt;div class='p'>Že firma &lt;a href='http://www.valeo.com/en' class='external'>Valeo&lt;/a> pořádá dny otevřených dveří v
Milovicích jsem se dozvěděl krátce po zveřejnění &lt;i>skoro bulvárního&lt;/i> článku na iDnes
(&lt;a href='http://auto.idnes.cz/auto-bez-ridice-test-v-cesku-dp6-/automoto.aspx?c=A151215_233753_automoto_fdv' class='external'>Záhadný
prototyp: v Česku se testuje auto, které nepotřebuje řidiče&lt;/a>). Ve skutečnosti
to bylo právě Valeo, které na dálnici testovalo nikoli autonomní jízdu, ale
kalibrovalo senzory pomocí referenčního Velodyne LIDARu.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 279px;'>&lt;tr>&lt;td>
&lt;a href='/articles/den-chytrych-aut/airport-milovice.jpg'>&lt;img src='/articles/den-chytrych-aut/airport-milovice_t.jpg' alt='Letiště Milovice' title='Letiště Milovice' class='border'  width='273' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/den-chytrych-aut/airport-milovice.jpg'>Letiště Milovice&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Letos akci byla věnována už dedikovaná webová stránka
&lt;a href='http://denchytrychaut.cz/' class='external'>denchytrychaut.cz&lt;/a> a viděl jsem i nejednu reklamu
po Praze či v Google Ads. Do Milovic bylo možné dokonce jet „Valeo busem” a
tak mne zaskočilo, ze byl skoro prázdný (čtvrtek holt není úplně ideální pro
běžné pracující).&lt;/div>

&lt;div class='p'>Na akci jsem se těšil jak malej kluk a tak první překvapení bylo, že se na ní
nesmí fotografovat :-(. Navíc bylo třeba podepsat cosi na způsob NDA &amp;hellip; tak
jsem zvědav, jestli to nebude v rozporu s tímto článkem a nebude nutné ho
odstranit.&lt;/div>

&lt;div class='p'>Akce byla koncipována jako půldenní s tím, že návštěvníci se rozdělili do sedmi
barevných skupinek a měli vždy 20 minut pro danou „atrakci”. Z tohoto pohledu
jsem vlastně rád, že lidí bylo málo &amp;mdash; odhad 42, což je ale
&lt;a href='https://en.wikipedia.org/wiki/42_%28number%29' class='external'>pěkné číslo&lt;/a> a šest lidí ve
skupince lze dělit na dvojice a trojice (a více se do aut s řidičem případně
ještě nahrávacím rackem počítačů stejně nevejde).&lt;/div>

&lt;div class='p'>Jako „zelenáči” (zelené vesty) jsme začali u kamer. Valeo integruje čipy od
&lt;a href='http://www.mobileye.com/' class='external'>Mobileye&lt;/a> a po CAN sběrnici posílá buď info nebo
přímo příkazy na brzdění/zatáčení. Neuronové sítě prý zatím Valeo neučí, ale s
izraelskou firmou jsou v oboustranně výhodné kooperaci. Modul s kamerou
dodávají hned několika automobilkám. Na autě ho najdete typicky za předním
sklem v místě středového zpětného zrcátka. Pokud by někoho zajímalo, co přesně
Mobileye vyvíjí, tak vřele doporučuji cca hodinové video
&lt;a href='https://www.youtube.com/watch?v=n8T7A3wqH3Q' class='external'>Amnon Shashua CVPR 2016 keynote:
Autonomous Driving, Computer Vision and Machine Learning&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 261px;'>&lt;tr>&lt;td>
&lt;a href='/articles/den-chytrych-aut/blind-spot.jpg'>&lt;img src='/articles/den-chytrych-aut/blind-spot_t.jpg' alt='Demo detekce v mrtvém bodě' title='Demo detekce v mrtvém bodě' class='border'  width='255' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/den-chytrych-aut/blind-spot.jpg'>Demo detekce v mrtvém bodě&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Druhá zastávka byla o SSL, zde ve významu &lt;i>Solid State LIDAR&lt;/i> (16 paprsků
pokrývajících 60 stupňů), a senzoru &lt;i>ScaLa&lt;/i> (laser skener s rotačním mechanismem,
4 roviny, 0.25 stupňů rozlišení).  Senzor SSL je typicky umístěn v bočních
zrcátkách pro detekci aut v mrtvém bodě. Toto demo již bylo spojeno s jízdou,
kdy do nás druhé auto lehce najíždělo. Součástí prezentace byla i navigace
v úzkém koridoru (zde je potřeba &lt;i>ScaLa&lt;/i> senzor), např. při opravách dálnice, kdy
je dočasný pruh určen betonovými bloky (tady pouze kužely). Nebyl čas, tak na
to řidič šlápnul a toto už byla čistá autonomie &amp;hellip; skoro jak na horské dráze
to samo prokličkovalo připravené esíčko (v rychlosti okolo 80km/h).  Do třetice
jsme na této zastávce ještě viděli automatickou navigaci za předjezdcem &amp;mdash;
auto sledovalo kudy přesně jel a v daném odstupu trajektorii opakovalo.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 254px;'>&lt;tr>&lt;td>
&lt;a href='/articles/den-chytrych-aut/laser-navigation.jpg'>&lt;img src='/articles/den-chytrych-aut/laser-navigation_t.jpg' alt='Navigace pomocí ScaLa' title='Navigace pomocí ScaLa' class='border'  width='248' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/den-chytrych-aut/laser-navigation.jpg'>Navigace pomocí ScaLa&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Třetí zastávka byla ukázka radarů. Dnes pracují na 24GHz, ale už při 10% nasazení začnou
vznikat problémy se vzájemným rušením. Z tohoto důvodu se přechází na vyšší
frekvence (79GHz), kde jednak kratší vlnová délka umožňuje vyšší přesnost a
dále se využívá širšího povoleného pásma. Od radaru se očekává jak odhad vzdálenosti, tak
směr a z Dopplerovského efektu i rozdíl rychlostí obou vozidel.&lt;/div>

&lt;div class='p'>Z různých zajímavostí mne zaujal scénář, kdy stojící auto zjistí, že do něj
někdo zezadu za chvíli nabourá. Jako reakci na tuto situaci sešlápne brzdu, aby došlo k
deformaci karoserie a energie se nepředala jako u kulečníkových koulí &amp;mdash; prý tento
ráz je jednou z nejčastějších nehod s poraněním krční páteře.&lt;/div>

&lt;div class='p'>Čtvrtá zastávka „Safety Braking” byla asi největší adrenalin. &lt;span class='smile'>&lt;/span> Pro
testování se používají nafukovací auta, do kterého to „napálíte” rychlostí
50km/h. A ke kolizi by nemělo dojít, protože automat to ve stavu nejvyšší nouze
„zadupne”. Seděl jsem vepředu na místě spolujezdce a celkem křečovitě jsem
držel madlo dveří. I bezpečnostní pás jsem si připnul bez komentáře &lt;span class='wink'>&lt;/span>.
Druhá jízda byla za pomalu jedoucím autem, kdy ale řidič (člověk) na poslední
chvíli strhne volant mimo kolizi. V tom případě automat musí brzdy okamžitě
odblokovat.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 246px;'>&lt;tr>&lt;td>
&lt;a href='/articles/den-chytrych-aut/safety-braking.jpg'>&lt;img src='/articles/den-chytrych-aut/safety-braking_t.jpg' alt='Safety Braking' title='Safety Braking' class='border'  width='240' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/den-chytrych-aut/safety-braking.jpg'>Safety Braking&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Pátá a šestá zastávka byla pak už jen na zklidnění. Sonary a parkovací
automaty, jak pro paralelní tak pro podélné parkování. Pokud vás nebaví sedět v
autě, tak se připojíte telefonem přes Bluetooth (nejnespolehlivější část celého
systému) a kroucením palcem, jako důkaz, ze manévr kontrolujete, potvrdíte
automatické parkování. Demo bylo na nejnovějším Mercedesu, který už je
„běžně” na trhu.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 270px;'>&lt;tr>&lt;td>
&lt;a href='/articles/den-chytrych-aut/automatic-parking.jpg'>&lt;img src='/articles/den-chytrych-aut/automatic-parking_t.jpg' alt='Automatické parkování' title='Automatické parkování' class='border'  width='264' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/den-chytrych-aut/automatic-parking.jpg'>Automatické parkování&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 262px;'>&lt;tr>&lt;td>
&lt;a href='/articles/den-chytrych-aut/remote-parking.jpg'>&lt;img src='/articles/den-chytrych-aut/remote-parking_t.jpg' alt='Parkování z mobilu' title='Parkování z mobilu' class='border'  width='256' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/den-chytrych-aut/remote-parking.jpg'>Parkování z mobilu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Sedmá zastávka byla o kamerách a zpětných zrcátkách. Byl tam překryv s
parkovacími automaty, kdy pomocí 4 kamer (vpředu, vzadu a pod bočními zrcátky)
poskládáte 360 stupňový pohled. Pěkné. Kamerky jsou s rybím okem, FOV prý 190
stupňů &amp;hellip;  a na autě skoro nejsou vidět &amp;mdash; takové špendlíky z Návštěvníků
&lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>A pak už konec a autobusem do Prahy.&lt;/div>

&lt;div class='p'>Vynechal jsem detaily, jako úvodní přednášku, kde mimo jiné bylo zmíněno, že se
v Čechách opravdu realizují autonomní testovací jízdy (první proběhla 25. září
2015 na dálnici Praha-Liberec), „svačinku” (možná spíše oběd) v podobě
švédských stolů, a celkově lákadlo pro potenciální nové zaměstnance do
nově budovaného vývojového centra v Hostivaři &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 233px;'>&lt;tr>&lt;td>
&lt;a href='/articles/den-chytrych-aut/autonomous-driving.jpg'>&lt;img src='/articles/den-chytrych-aut/autonomous-driving_t.jpg' alt='Autonomní jízda' title='Autonomní jízda' class='border'  width='227' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/den-chytrych-aut/autonomous-driving.jpg'>Autonomní jízda&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Bude-li se akce příští rok opakovat, tak vřele doporučuji.&lt;/div>

&lt;div class='p'>p.s. některá dema je lépe vidět v pohybu &amp;mdash; viz
&lt;a href='https://youtu.be/9hOb_uszGxE' class='external'>video z květnové akce&lt;/a>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a href='/articles/den-chytrych-aut/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>RoboOrienteering 2016</title>
	<link rel='alternate' href="http://localhost/competitions/roboorienteering/2016/cs"/>
	<id>http://localhost/competitions/roboorienteering/2016/cs</id>
	<updated>2016-06-07T00:00:00Z</updated>
	<author><name>Martin Dlouhý, foto Zdeněk Kakáč</name></author>
	<summary type='html'> RoboOrienteering v Rychnově nad Kněžnou už má mnohaletou tradici. Letos jsme
soutěž, se souhlasem organizátora Martina Lockera, „zneužili” k dosažení
dalšího milníku ve vývoji autonomního zahradního traktoru John Deere X300R.
&lt;b>Update:&lt;/b>
14/6 &amp;mdash; &lt;a href='/competitions/roboorienteering/2016/cs#160614'>video ze soutěže&lt;/a>
 </summary>
	<content type='html'> 
&lt;div class='p'>Po soutěži &lt;a href='/competitions/robotem-rovne/2016/cs'>Robotem rovně 2016&lt;/a>, kde se
upravený zahradní traktůrek John Deere X300R poprvé automaticky rozjel, jsem
přemýšlel, jak projekt posunout dál. Soutěž RORO16 nás nastartovala, ale robot
dosud neuměl zatáčet, což v Písku nevadilo. Jako jediná cesta se jevila další
soutěž a ve výhledu (nezdravě blízko) byl právě RoboOrienteering.  Tomáš
Roubíček, který na robotu dělá veškerou elektroniku, to komentoval se slovy:
&lt;i>Martine, tobě jedna "Mission impossible" nestačila? RR byla šílenost, ale RO
je mega šílenost, ne-li utopie.  Pokud ale myslíš, že ten SW za 2 týdny dáš, tak
ten HW nějak dohromady taky dáme.&lt;/i> &amp;hellip; a klobouk dolu, opravdu dali &lt;span class='smile'>&lt;/span>. Tak
postupně.&lt;/div>

&lt;div class='p'>[&lt;i>Mezi RR a RO byly sice 3 týdny, ale to víceméně znamenalo 2-(3) večery.
S RO se nepočítalo, takže se to začalo řešit až 14 dní do soutěže.&lt;/i>]&lt;/div>

&lt;div class='p'>JD nikdy automaticky nezatáčel. Navíc se ukázalo, že to ani nejde &amp;mdash; byla
potřeba jedna z dalších netriviálních revizí, kdy Standa opravil směr otáčení
(pro jednou prohození otáčení byla sranda, ale stačilo to). První měření
naznačovala, že ventily jsou sice 12V, ale vyžadují 5A elektroniku. Nic
podobného neměl Tomáš „po kapsách” a objednávky přece jenom nějaký den
trvají. Rychlé řešení Tomáš nakonec vymyslel, ale v úterý, 3 dny do soutěže,
součástky pro toto řešení ještě nedorazily.&lt;/div>

&lt;div class='p'>Kdy John poprvé „zahnul”? V pátek večer, cca v době, kdy jsem slíbil Martinovi
Lockerovi, že už budeme v Rychnově (a ano, byli jsme ještě tou dobou v hale na
ČZU).&lt;/div>

&lt;div class='p'>Ono se to vlastně všechno dalo do pohybu teprve týden před soutěže. První cíl
bylo rozchození verze s &lt;a href='http://velodynelidar.com/vlp-16.html' class='external'>Velodyne
VLP-16&lt;/a> senzorem, aby, když traktor vidí překážku, zastavil. Toto mělo být připravené už v
Písku, ale úplně se to nestihlo. První ostrý test proběhl v úterý (viz 
&lt;a href='https://youtu.be/xc4WignNlh0' class='external'>video&lt;/a>), kdy jsme traktoru dali do cesty sloup z
&lt;a href='/competitions/robotsintellect/cs'>AirRace&lt;/a> a zastavil cca 10cm do nárazu. Při
druhém pokusu natvrdo narazil a situaci řešila STOP tlačítka.&lt;/div>

&lt;div class='p'>Další test jsme chtěli udělat venku s dobrým GPS příjmem &amp;mdash; přece jenom
RoboOrienteering je outdoor soutěž. To přece vyjedeme automaticky ne? Robot
lehce poskočil a jen tak tak líznul vstupní bránu! :-(&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/velodyne.jpg'>&lt;img src='/competitions/roboorienteering/2016/velodyne_t.jpg' alt='Velodyne Puck' title='Velodyne Puck' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/velodyne.jpg'>Velodyne Puck&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Pořádná komedie nastala teprve venku. Před halou technické fakulty měl Standa
zaparkované auto, ale tomu se kupodivu nic nestalo. „Zkusíme překážku?”, ptá
se Standa. Souhlas a poměrně nečekaná reakce traktůrku &amp;mdash; nejen, že zastavil,
ale doslova skočil zpět a začal rychle couvat. STOP tlačítko.&lt;/div>

&lt;div class='p'>To nám pro poprvé jako zdroj adrenalinu stačilo, ale dat jsme zatím moc
nenasbírali. Standa přepnul na manuální řízeni, sedl na traktor a že ho odveze
zpět. Já pustil prográmek, který dál hýbal s pedálem, jenom teď byl
spojovací čep vytažený. Vše v pohodě, jen na cestě zpět se na mne Standa divně
podíval a traktor vyrazil rychle vpřed. Říkal jsem si, že chtěl asi zkusit
rychlejší jízdu, ale ten pohled byl &lt;i>co to tam děláš?! Jede to samo a pedál je
u podlahy!&lt;/i>  Posun pro automatické řízení totiž vypadl a zasekl se mimo a
navíc se snažil přidat kvůli dostatku volného místa před traktorem. To byla
opravdu poslední kapka/třešnička na dortu a stačilo. Nehledě na to, že bylo
skoro 22h a každou chvíli se měl zapnout školní alarm.&lt;/div>

&lt;div class='p'>Na středu jsme si dali volno, resp. pokračovali každý sám. Když se podíváte na
video znovu, tak si všimnete, že tam problikávají takové zuby/výřezy. Procházel
jsem logy z Velodyne a opravdu tam chyběly některé pakety (mají 1206 bajtů a
odpovídá to cca pěti stupňům dat). Systém je tedy nestíhal dostatečně rychle
odbavovat a byla to i indikace zběsilého chování, kdy robot vnímal realitu ze
starých dat.&lt;/div>

&lt;div class='p'>Důvod byl nakonec celkem prostý (vyřešeno v pátek ráno): po nastartování
programu se vytvoří Velodyne objekt, ale tím už začne dostávat data. Vlákno na
zpracování jsem ale zapínal až po stisknutí startovacího tlačítka a tak
nejprve musel vyčíst vše co tam za to mezidobí zůstalo. Fixed.&lt;/div>

&lt;div class='p'>Páteční plán byl vyrazit cca v 17h z Prahy, v Rychnově povečeřet a případně
udělat ještě nějaké testy v parku. Ono ale na JD bylo ještě hodně práce (Tomáš
si na to vzal celý den dovolenou) a v kombinaci s opožděnou dodávkou součástek
to bylo fakt kruté. Nicméně v 20:18 proběhl první test s otáčením bez motoru
(tj. že správně cvakají ventily) a 20:39 traktor poprvé elektronicky zatočil,
řízen z APU2 počítače. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Řízení v té době bylo zcela bez zpětné vazby, tj. pouze délkou pulzu se
určovala doba otevřeného ventilu, nesymetricky. Hodnoty 0.8s a 1.2s pro
zatáčení vlevo a vpravo vypadaly rozumně. Robot by se poprvé homologoval ve 21:13
(v pravidlech je, že se musí vyhnout překážce, ale pak jsme se dozvěděli, že by
stačilo zastavit).&lt;/div>

&lt;h2>Příjezd&lt;/h2>

&lt;div class='p'>Do Rychnova jsme, k nemalé radosti Martina Lockera (ironie), dorazili až po
půlnoci, vlastně skoro v jednu hodinu. Chvíle spánku a od 5:00 pokračování.
Tomáš se mne ptal, jestli chci raději funkční enkodéry umožnující zpětnou
vazbu alespoň při jízdě nebo zařízení na vyhazování míčku. Volil jsem vyhazovač
&amp;mdash; náš cíl je dát alespoň jeden bod a bez vyhazovače to fakt nedáme &lt;span class='smile'>&lt;/span>.
Racionálně bychom měli spíše řešit ty enkodéry, které se budou hodit i
později, ale jsme na soutěži a chceme bodovat!&lt;/div>

&lt;div class='p'>Outdoor testy na parkovišti proběhly celkem fajn. Na Jakubovo doporučení jsme
pravo-levé zóny z Velodyne zjemnili po pěti stupních, aby při zatáčení vpravo
robot ignoroval překážky vlevo, ale ve finále jsme tento kus kódu nevyužili.
Někomu by mohlo přijít smutné, že z 8Mbit/s prostorových dat ze šestnácti
laserů vezmeme jen minimum v dané sekci a to je vše, ale nějak se začít musí
&lt;span class='wink'>&lt;/span>. Po revizi tedy 6 čísel odpovídajících limitům -25, -20, -15, 0, 15, 20 a
25 na 10Hz.&lt;/div>

&lt;div class='p'>Řídicí logika byla jednoduchá: když je překážka na 4m zatoč vpravo, když je moc
blízko (2.5m) zastav, a když široko daleko nic není (více jak 4.5m) a zatáčíš,
tak srovnej kola.  Tímto způsobem jsme alespoň tušili, kterým směrem traktor
vyrazí a ano, nebylo to dvakrát inteligentní chování. Pokud byla překážka vpravo, tak
do ní ještě více zatočil.&lt;/div>

&lt;div class='p'>Pro homologaci už volil lepší směr, ale chyba lávky. Startovalo se uprostřed
parku, mírně do kopečka a tak se traktor s malým plynem nerozjel. Změnil jsem
požadovanou polohu pedálu z 18000 na 20000, vystartoval, u překážky zatočil
vpravo a následně se snažil srovnat a prásk! Rána a evidentně se uvnitř něco
pokazilo. Po odstranění krytu se ukázalo, že vylítlo těsnění z desky rozvaděče
(hned vedle
&lt;a href='http://www.eaton.com/EatonComJapan/e-index/Products/EFPL/SteeringControlUnit/TypicalSteeringwithOrbitrol/index.htm' class='external'>orbitrolu&lt;/a>).
Hydraulika není sranda a toto de-facto byla konečná. Neměli jsme ani nástroje
ani náhradní součástky. Problém byl na 90% špatně nastavený tlakový ventil.&lt;/div>

&lt;div class='p'>První pokus o opravu naslepo nevyšel a Milan zodpovědně kapituloval. Standa
odmítal (přece jenom s tímto strojem zápasí už nějaký čas) a vyrazil s Jakubem
na procházku po místních obchodech s autodíly. Já jsem šel psát kód na vyhazování
míčku na GPS souřadnicích (částečně Copy &amp;amp; Paste z roku 2012?) a Tomáš vymýšlel
mechaniku na vyhození míčku.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-ball.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-ball_t.jpg' alt='Vyhazovač míčků' title='Vyhazovač míčků' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-ball.jpg'>Vyhazovač míčků&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Jak to dopadlo? Provizorní těsnění částečně fungovalo, ale zatáčení jsme se
rozhodli omezit na minimum. A software status? Výsledný algoritmus byl postaven
čistě na GPS souřadnicích a míček se odhazoval, pokud se vzdálenost od cíle
zvětšila. Toto vše o okruhu 10m od kuželu. Otázka byla jak volit cíl?  Stačilo
by nám vybrat jeden, ale na startu je trošku stres, soutěžící dostane pouze USB
disk se zadáním a není rozumné cokoliv editovat.  Řešení bylo nakonec triviální
&amp;mdash; naviguj na všechny cíle najednou, tj. použij minimum ze všech vzdáleností.
&lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>V mezičase Tomáš připravil servo s CAN modulem na vyhazování míčků.
Alternativní plán byl jet rovně (pokud z důvodů problémů s hydraulikou nelze
zatáčet) a u prvního cíle odhodit míček. První vyhazovací test proběhl v
11:33.  Nefungoval, protože modul nedostal domluvené ID=5, změna na ID=0x7F.
Další pokus v 11:35 s novým ID.  Stále nefunguje. Tomáš zkouší znovu ze svého
notebooku a nachází špatný kontakt u prastarého CAN modulu. Fixed. 11:46 první
úspěšné vyhození.&lt;/div>

&lt;h2>Kolo 2&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-2nd-run.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-2nd-run_t.jpg' alt='John Deere 2.kolo' title='John Deere 2.kolo' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-2nd-run.jpg'>John Deere 2.kolo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Soutěžíme! Start je na cestě u dětského hřiště, podezřele blízko cíle (GPS
hlásí 14m) &amp;mdash; úplně to vidím, že se chytne cíle místo prvního kuželu a krátce
před startem edituji kód. Ono v tom Pythonu je to jen změna na
&lt;b>waypoints[1:-1]&lt;/b>, ale znáte to &lt;span class='wink'>&lt;/span>.  Přehrání logu funguje, tak snad
odstartujeme. Traktor jede mírně vpravo a tak kužel míjíme sice do vzdálenosti
10m, ale mimo bodovaný kruh (5m). Vyhazuje nebodovaný míček, ale necháváme ho
jet dál. Zastaví se pod nižší větví, nadzvedáme větev a traktor pokračuje na
další kužel.  Druhý výhoz není implementovaný a přestože Tomáš nabízel ještě
druhý podavač, tak jsem odmítl. Nicméně traktor u kužele pozastavil, což
rozhodčí klasifikoval jako motivační výhoz &amp;hellip; ale tyto body nejsou
„košér” a nezasloužíme si je.&lt;/div>

&lt;h2>Kolo 3&lt;/h2>

&lt;div class='p'>Do posledního kola reviduji waypointy (po dosažení odmaž ze seznamu), a před
vyhozením se zastavuje a podavač vrací do nulové polohy. Hydraulika prý jeden
pokus vydrží, tak odkomentovávám posílání pulzů na ventily. Máme jen jednu
šanci, tak si jí užijeme. Kužel, který jsme si vybrali, se ukázalo, že je cíl a
za něj žádné body nedostaneme. Traktor pouštíme na „náhodnou procházku” s
vyhazováním, kdyby jel okolo nějakého kužele. Věřte nevěřte vyhnul se pár
stromům a bodoval u&lt;/div>

&lt;div class='p'>K4:	50.166352	16.278328	55&lt;/div>

&lt;div class='p'>&lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Dostáváme zasloužené body a dokonce porážíme TeaPack Systems, viz
&lt;a href='http://robotika.vosrk.cz/roboorienteering/2016/vysledky.htm' class='external'>výsledky&lt;/a>. Jsem
rád, že by tomu tak bylo i v případě nepočítání druhého kola. Prima.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/rychnov-velodyne.png'>&lt;img src='/competitions/roboorienteering/2016/rychnov-velodyne_t.png' alt='VeloView z Rychnova' title='VeloView z Rychnova' class='border'  width='320' height='172'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/rychnov-velodyne.png'>VeloView z Rychnova&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Závěr&lt;/h2>

&lt;div class='p'>Pokud se chcete podívat na soutěžní kód, viz&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/robotika/osgar/releases/tag/ROBOORIENTEERING2016' class='external'>https://github.com/robotika/osgar/releases/tag/ROBOORIENTEERING2016&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>(očekávám masivní revizi, tak jsem to raději otagoval).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/czu-tf-robotika-cz-team.jpg'>&lt;img src='/competitions/roboorienteering/2016/czu-tf-robotika-cz-team_t.jpg' alt='CZU/TF + robotika.cz' title='CZU/TF + robotika.cz' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/czu-tf-robotika-cz-team.jpg'>CZU/TF + robotika.cz&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Za sebe jsem spokojen, vlastně velmi spokojen! Mise splněna (bodovali jsme),
tým fungoval skvěle, jen jsem ještě teď po třech dnech stále unavený &lt;span class='wink'>&lt;/span>.
Pomalu přemýšlím o třetím kvantovém skoku, ale &lt;a href='http://nasepole.cz/' class='external'>show pro
ministra&lt;/a> to pozítří v Nabočanech asi nebude. Potřebujeme „dobít baterky”
(lidské).&lt;/div>

&lt;div class='p'>Čtenářům se omlouvám, že tento report je čistě egoisticky o našem týmu.
Mariánky byly jednoznačný vítěz, Aleš s autíčkem se jim snažil dělat soupeře,
ale přesto dostatečně nebodoval. TeaPack bych pochválil za snahu (celý den
tam Honza něco kutil a nakonec robot alespoň jednou skóroval). Co měli za
problém matfyzáci netuším a Pavla (ND Team) bych pokáral, že nefunkční robot ve
dvě hodiny ráno není omluva &lt;span class='wink'>&lt;/span>. Ale Pavel je sám a ono je to hodně o týmu. Což
mi připomíná návrh na změnu pravidel, kterou Martin Locker komentoval, že to
bude těžké, když jenom dva týmy jezdí, ale &amp;hellip; stejně ji ventiluji. Třeba se
někdo chytne &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h1>Foto&lt;/h1>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/ales-with-car.jpg'>&lt;img src='/competitions/roboorienteering/2016/ales-with-car_t.jpg' alt='Aleš s autíčkem' title='Aleš s autíčkem' class='border'  width='165' height='248'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/ales-with-car.jpg'>Aleš s autíčkem&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/ambot-navigation.jpg'>&lt;img src='/competitions/roboorienteering/2016/ambot-navigation_t.jpg' alt='Android navigace' title='Android navigace' class='border'  width='165' height='248'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/ambot-navigation.jpg'>Android navigace&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/martin-and-son.jpg'>&lt;img src='/competitions/roboorienteering/2016/martin-and-son_t.jpg' alt='Organizátoři' title='Organizátoři' class='border'  width='165' height='248'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/martin-and-son.jpg'>Organizátoři&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/ambot.jpg'>&lt;img src='/competitions/roboorienteering/2016/ambot_t.jpg' alt='Ambot' title='Ambot' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/ambot.jpg'>Ambot&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/collision-course.jpg'>&lt;img src='/competitions/roboorienteering/2016/collision-course_t.jpg' alt='Kolizní kurs' title='Kolizní kurs' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/collision-course.jpg'>Kolizní kurs&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/teapack.jpg'>&lt;img src='/competitions/roboorienteering/2016/teapack_t.jpg' alt='TeaPack' title='TeaPack' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/teapack.jpg'>TeaPack&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/david.jpg'>&lt;img src='/competitions/roboorienteering/2016/david_t.jpg' alt='David' title='David' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/david.jpg'>David&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/explorer.jpg'>&lt;img src='/competitions/roboorienteering/2016/explorer_t.jpg' alt='Explorer' title='Explorer' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/explorer.jpg'>Explorer&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/follow-me.jpg'>&lt;img src='/competitions/roboorienteering/2016/follow-me_t.jpg' alt='Následujte mne ...' title='Následujte mne ...' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/follow-me.jpg'>Následujte mne ...&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-competing.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-competing_t.jpg' alt='JD v akci' title='JD v akci' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-competing.jpg'>JD v akci&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-explorer.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-explorer_t.jpg' alt='Kolize s Explorerem' title='Kolize s Explorerem' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-explorer.jpg'>Kolize s Explorerem&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-marsh.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-marsh_t.jpg' alt='Rychlá chůze' title='Rychlá chůze' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-marsh.jpg'>Rychlá chůze&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-nav1.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-nav1_t.jpg' alt='vyhýbání se - 1/2' title='vyhýbání se - 1/2' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-nav1.jpg'>vyhýbání se - 1/2&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-nav2.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-nav2_t.jpg' alt='vyhýbání se - 2/2' title='vyhýbání se - 2/2' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-nav2.jpg'>vyhýbání se - 2/2&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-team.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-team_t.jpg' alt='John Deere tým' title='John Deere tým' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-team.jpg'>John Deere tým&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/john-deere.jpg'>&lt;img src='/competitions/roboorienteering/2016/john-deere_t.jpg' alt='John Deere' title='John Deere' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/john-deere.jpg'>John Deere&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/marianske-lazne.jpg'>&lt;img src='/competitions/roboorienteering/2016/marianske-lazne_t.jpg' alt='Mariánské Lázně' title='Mariánské Lázně' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/marianske-lazne.jpg'>Mariánské Lázně&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/mart-team.jpg'>&lt;img src='/competitions/roboorienteering/2016/mart-team_t.jpg' alt='MART Team' title='MART Team' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/mart-team.jpg'>MART Team&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/roboorienteering/2016/mart.jpg' alt='MART' title='MART' class='border'  width='220' height='146'/>&lt;/span>&lt;br/>
&lt;span>MART&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/mart2.jpg'>&lt;img src='/competitions/roboorienteering/2016/mart2_t.jpg' alt='MART u překážky' title='MART u překážky' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/mart2.jpg'>MART u překážky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/milan.jpg'>&lt;img src='/competitions/roboorienteering/2016/milan_t.jpg' alt='Bitevní pole' title='Bitevní pole' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/milan.jpg'>Bitevní pole&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/obstacles.jpg'>&lt;img src='/competitions/roboorienteering/2016/obstacles_t.jpg' alt='Překážky' title='Překážky' class='border'  width='220' height='149'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/obstacles.jpg'>Překážky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/scoring.jpg'>&lt;img src='/competitions/roboorienteering/2016/scoring_t.jpg' alt='Bodování' title='Bodování' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/scoring.jpg'>Bodování&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/teapack-robot.jpg'>&lt;img src='/competitions/roboorienteering/2016/teapack-robot_t.jpg' alt='TeaPack Robot' title='TeaPack Robot' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/teapack-robot.jpg'>TeaPack Robot&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/jd-3rd-place.jpg'>&lt;img src='/competitions/roboorienteering/2016/jd-3rd-place_t.jpg' alt='3. místo' title='3. místo' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/jd-3rd-place.jpg'>3. místo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160614">&lt;/a>&lt;/div>

&lt;h1>Video (autor David Obdržálek)&lt;/h1>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/3ARlfJ3d5a0" frameborder="0" allowfullscreen>&lt;/iframe>&lt;/div>

&lt;div class='p'>&lt;/center>&lt;/div>

&lt;h3>foto od Davida:&lt;/h3>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/david-mart.jpg'>&lt;img src='/competitions/roboorienteering/2016/david-mart_t.jpg' alt='MART' title='MART' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/david-mart.jpg'>MART&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/david-kids.jpg'>&lt;img src='/competitions/roboorienteering/2016/david-kids_t.jpg' alt='děti' title='děti' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/david-kids.jpg'>děti&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2016/david-john-deere.jpg'>&lt;img src='/competitions/roboorienteering/2016/david-john-deere_t.jpg' alt='John Deere team' title='John Deere team' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2016/david-john-deere.jpg'>John Deere team&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h1>Odkazy&lt;/h1>

&lt;ul>
&lt;li>&lt;a href='http://robotika.vosrk.cz/roboorienteering/index.php' class='external'>Hlavní stránky soutěže RoboOrienteering&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://robodoupe.cz/2016/roboorienteering-2016/' class='external'>Zpráva na RoboDoupě&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://ambot6.webnode.cz/a2016/' class='external'>AmBot a jeho Ferda v roce 2016&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;h1>Návrh na rozšíření pravidel&lt;/h1>

&lt;h3>Motivace&lt;/h3>

&lt;div class='p'>Robotické soutěže jsou primárně o soupeření a spolupráce týmu je spíše vedlejší
efekt (něco jako nemá někdo měřák, náhradní sonar, klíč 22 a pod). Z toho to
pohledu se mi líbil &lt;a href='/competitions/fieldrobot/2012/cs'>Field Robot Event 2012&lt;/a>,
kde byl i &lt;i>Cooperation Task&lt;/i>. Dva náhodně spárované týmy měli během dopoledne
připravit demo nějaké spolupráce robotů. Byla to sranda, pořádný „brain
storming” a oba týmy se lépe poznaly, včetně detailů obou robotů.&lt;/div>

&lt;div class='p'>Druhou inspirací je &lt;a href='/competitions/eurobot/cs'>Eurobot&lt;/a>, který měl vždy pravidla
stavěná tak, aby jedna úloha byla triviální a její rozšíření těžké. Každý tým
si tedy našel to své a, pokud byl rozumný, tak začal nejprve s jednoduchou
úlohou, aby zjistil, že až tak jednoduchá není.&lt;/div>

&lt;h3>Kvalifikace&lt;/h3>

&lt;div class='p'>Dopolední kola by byla úplně stejná jako letos, tj. start/waypointy/cíl,
vyhazování míčků pro poloměry 2.5m a 5m. Obě kola by se ale počítala, aby
součet bodů lépe definoval výsledné pořadí.&lt;/div>

&lt;h3>Capture the Kužel&lt;/h3>

&lt;div class='p'>&lt;span class='smile'>&lt;/span> v odpoledním programu by se týmy rozdělily na dvě skupiny. První a druhý
tým podle kvalifikačního pořadí by byly vedoucí a buď by si vybíraly nebo
losovaly nebo nějak systematicky přibíraly další týmy. Každý tým by měl svoji
barvu golfových míčků (jsou bílé a zlaté např.), která by se losovala a ve
druhém kole prohodila. Obě skupiny by se &lt;b>společně&lt;/b> snažily obsadit co
nejvíce kuželů. Obsazení znamená položit více bodovaných míčků než soupeř
(na začátku by každý dostal zase 5 míčků).  Startovali by všichni současně od
různých kuželů (asi by se tím rušil start a cíl?) a na „souboj” by bylo zase
30 minut (nebo možná hodina?).&lt;/div>

&lt;div class='p'>A teď ta těžká úloha &amp;mdash; míčky by bylo možné během soutěžního času i
automaticky sbírat a ubírat tak nepříteli body. Asi má Martin pravdu, toto
je asi v našich současných podmínkách zatím nepředstavitelné &amp;hellip; &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;a href='/competitions/roboorienteering/2016/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Robotem rovně 2016</title>
	<link rel='alternate' href="http://localhost/competitions/robotem-rovne/2016/cs"/>
	<id>http://localhost/competitions/robotem-rovne/2016/cs</id>
	<updated>2016-05-18T00:00:00Z</updated>
	<author><name>Martin Dlouhý, foto David Obdržálek</name></author>
	<summary type='html'> Letos se konal již osmý ročník soutěže autonomních robotů a autíček pořádaný
Radioklubem Písek. Stejně jako loni je tato mini reportáž především poděkování
organizátorům za skvělou možnost testování robota v plenkách a doplnění
informací o &lt;i>John Deere X300R&lt;/i>, se kterým jsme soutěžili.

 </summary>
	<content type='html'> 
&lt;div class='p'>Pokud chcete prezentovat
své zážitky (úspěchy i nepřekonatelné probémy) z letošního
&lt;a href='http://www.kufr.cz/view.php?nazevclanku=vyhlasujeme-jiz-8-rocnik-souteze-robotem-rovne-aneb-auticka-v-parku&amp;amp;cisloclanku=2016010002' class='external'>RORO2016&lt;/a>, tak ať se mi prosím ozvěte a pomozte tak rozšířit tento článek &amp;hellip;&lt;/div>

&lt;h1>John Deere X300R (CZU/TF + robotika.cz)&lt;/h1>

&lt;div class='p'>John Deere X300R je malý zahradní traktor (viz
&lt;a href='https://www.deere.com/en_ASIA/products/equipment/riding_lawn_equipment/lawn_tractors/x300_series/x300r_42_in_rear_discharge_deck/x300r_42_in_rear_discharge_deck.page' class='external'>specifikace
výrobce&lt;/a>), který patří &lt;a href='http://www.tf.czu.cz/cs/' class='external'>Technické fakultě České
zemědělské univerzity v Praze&lt;/a>. Co ale není na první pohled zřejmé, je že pod
kapotou se skrývá zásadní přestavba (na hydraulicko-elektronické řízení), která
otevírá cestu k realizaci autonomního mobilního robota.
&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/jd-inside.jpg'>&lt;img src='/competitions/robotem-rovne/2016/jd-inside_t.jpg' alt='pod kapotou' title='pod kapotou' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/jd-inside.jpg'>pod kapotou&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Po pravdě projekt trošku stagnoval ačkoliv výjimku pro účast na soutěži jsme si
vyprosili už loni (spalovací motory nejsou povoleny). Letos to bylo nadějnější,
protože &lt;i>John Deere X300R&lt;/i> měl být začátkem dubna prezentován na stánku výstavy
&lt;a href='http://www.bvv.cz/techagro/techagro-2016/' class='external'>Techagro 2016&lt;/a> v Brně. Ale ani to
nevyšlo a vypadalo to na rezignaci. Zásluha patří Standovi Petráskovi, který
dělal hlavní přestavbu traktůrku, že nás ještě s Tomášem Roubíčkem (kompletní
řídicí elektronika) vyhecoval, že když ne teď, tak už asi nikdy.  Verze 0
vypadala realizovatelně: cihla na pedál a propojení sedačky jako STOP tlačítko.
Standa přislíbil zapůjčení přívěsu a tak se i mně otevřela cesta, jak tuto
šílenost realizovat &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Spíše pro pobavení bych sem dal kopii mailu kolegům ze školy z 12/4/2016, tj.
cca jeden měsíc do soutěže:&lt;/div>

&lt;pre>Zdravim,
registroval jsem X300R na Robotem Rovne 2016. 
Standa mne presvedcil, ze to vlastne muzu dat vlastnima silama i se svoji Fabii
- prives mi pujci, pokud by skolni byl potreba a verze 0 muze vypadat takto:
1) emergency tlacitka propojena na kontakt na sedacce
2) volant chyceny gumicukem
3) cihla na plynu
a jedem &lt;span class='wink'>&lt;/span>. Namitky?

Mesic je takovy idealni cas na "robo-maraton" (viz FRE2012), takze - pokud se
vam ver0 nelibi, tak muze byt i lepsi.  

ver 0.1:
- elektronicke rizeni plynu
- maly sick na overovani volneho mista
- maly ridici pocitac ~ Alix2016

ver 0.2:
- zapojeni Velodyne 16, pokud by do konce dubna bylo
- elektronicke zataceni

Robotum zdar
  m.&lt;/pre>

&lt;div class='p'>To s tou cihlou to byl spíše vtip, ale jak diváci homologace a prvního kola
mohli vidět, tak jen částečně.&lt;/div>

&lt;div class='p'>Do soutěže nám tedy zbývaly čtyři &lt;i>robotické úterky&lt;/i>. Že jsem byl hodně
naivní jsem pochopil už první úterek, kdy ani zmiňovaná verze 0 nešla
otestovat/realizovat. Znamenalo by to poskládání traktoru, zapojení hadic,
napuštění hydrauliky olejem, udělat pokus s cihlou a pak zase vše rozdělat, aby
se dalo dál pracovat kabeláži. Teď zpětně, ostatně jako většina generálů, to
vidím tak, že jsme to stejně měli udělat, viz odjezd.&lt;/div>

&lt;div class='p'>Na konci dubna posílá Milan Kroulík mail &lt;i>A nyní hlavní zpráva, Velodyne je
tu!&lt;/i> V té době je již k dispozici i řídící počítač pro nízko-úrovňové řízení
&lt;a href='http://www.pcengines.ch/apu2c4.htm' class='external'>APU2&lt;/a>, který našel a doporučil Tomáš &amp;mdash;
je to další generace počítače použitého třeba na &lt;a href='/robots/eduro/cs'>&lt;span class='en'>Eduru&lt;/span>&lt;/a>.  Tj.
začátkem května si mám i já s čím hrát. Ostatně chcete-li sledovat průběh
projektu, tak viz &lt;a href='https://github.com/robotika/osgar/graphs/contributors' class='external'>graf
na gitu&lt;/a>.&lt;/div>

&lt;h2>Odjezd&lt;/h2>

&lt;div class='p'>Původní plán byl s traktůrkem v pátek odjet na chatu, udělat ještě pár testů na
louce a pak v sobotu brzy ráno vyrazit do Písku. Během dne volá Standa, ať do
školy raději moc brzy se ženou nejezdím, ať se tam nenudí. Nakonec tam vyrážím
sám (naštěstí) a traktůrek nacházím ještě rozdělaný, Tomáš tahá kabeláž a
nevypadá to na závěrečné dokončování. Je 20:00, tj. 12h do soutěže a v
rozvodech ještě není olej a celý systém se ještě nikdy nepohnul. Žádná verze
nula.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/standa.jpg'>&lt;img src='/competitions/robotem-rovne/2016/standa_t.jpg' alt='Standa' title='Standa' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/standa.jpg'>Standa&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/tomas.jpg'>&lt;img src='/competitions/robotem-rovne/2016/tomas_t.jpg' alt='Tomáš' title='Tomáš' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/tomas.jpg'>Tomáš&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/switch-board.jpg'>&lt;img src='/competitions/robotem-rovne/2016/switch-board_t.jpg' alt='Rozvodová deska a APU2' title='Rozvodová deska a APU2' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/switch-board.jpg'>Rozvodová deska a APU2&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Podle očekávání ani po doplnění oleje (bez něj by se po nastartování zadřelo
čerpadlo a bylo by po srandě) stroj nerozjede. Trvalo asi hodinu (?) než se
našly příčiny &amp;mdash; jednak někdo prozkratoval nikoliv kabel na sedačku, ale kabel
na koš, tj. STOP tlačítka jsou propojena špatně a motor okamžitě chcípá.  Když
bylo toto vyřešeno, tak se traktůrek stále nehýbal. Chyběl drátek na přepnutí
mezi volnoběhem a normální jízdou. V mezičase Tomáš zapojuje lineární motor pro
řízení plynu (všechny kabely je nutné nastavit) a já spíše dělám pomocníka
Standovi &amp;hellip; přece jenom mi přijde zbytečné teď řešit IP sítě pro Velodyne na
APU2, pokud nemáme ver0.&lt;/div>

&lt;div class='p'>Zkrátím to: největší problém byl dostat olej tam, kde má být (a z míst, kde nemá být) &amp;mdash;
v systému jsou i teď ještě vzduchové bubliny. Detaily, jako že hadice
jsou prohozené a traktor zatáčí opačným směrem, neřešíme. Není to priorita. Když
v 2:00 najíždím na rampu vozíku, tak se ozve šílená rána &amp;mdash; spadne nepřidělaný
řídící box s počítačem a baterkou, který naštěstí chytá Standa. Jsme úplně
vyřízení, v 3:00 přijíždíme na chatu, 5:30 vstáváme a pokračujeme do Písku
&amp;hellip;&lt;/div>

&lt;h2>Homologace a 1. kolo (cihla)&lt;/h2>

&lt;div class='p'>Homologovali jsme se s verzí 0, tj. cihla na plyn (nebyla to žádná obyčejná
cihla, před odjezdem jsem ji vytáhl ze základů boudy na traktůrek) a STOP
tlačítka na zastavení. Kupodivu ani toto nebylo bez problémů: cihla byla lehká,
resp. byla potřeba větší síla na stlačení pedálu. Nakonec fungovalo ji
vystředěně položit na pedál a doufat, že hned nespadne.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/brick-on-gas.jpg'>&lt;img src='/competitions/robotem-rovne/2016/brick-on-gas_t.jpg' alt='cihla na plynu' title='cihla na plynu' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/brick-on-gas.jpg'>cihla na plynu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/first-run.jpg'>&lt;img src='/competitions/robotem-rovne/2016/first-run_t.jpg' alt='první kolo' title='první kolo' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/first-run.jpg'>první kolo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/jd-base.jpg'>&lt;img src='/competitions/robotem-rovne/2016/jd-base_t.jpg' alt='základna' title='základna' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/jd-base.jpg'>základna&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>1. kolo bylo záhy po homologaci a tak jsme se chystali scénář zopakovat.
Jakžtakž to šlo, „John” ujel asi 10 metrů a vyjel vpravo. A pak nastala druhá
chyba &amp;mdash; nemohl jsem s traktůrkem odjet, i když jsem měl „plyn na podlaze”. V
rámci trojité páteční přestavby totiž pedál nebyl úplně dotažený (má
nastavitelnou střední polohu) a povolily se šrouby.&lt;/div>

&lt;h2>2. kolo (USB-serial + notebook)&lt;/h2>

&lt;div class='p'>Do druhého kola jsme měli cca hodinu času, tak začaly první pokusy o integraci
lineárního pohonu řídícího jízdu vpřed a vzad po CAN sběrnici.  Ovládání z APU2
se nám nedařilo rozchodit, tak jsme jako nouzové řešení resp. mezikrok použili
k ovládání notebook a USB-serial převodník.  To mi připomíná ještě jeden
detail, který jsme zjistili při vybalování v Písku — Tomáš, v ranní
rozespalosti, zapomněl svůj notebook s programy pro programování a ladění CAN
modulů na chatě. Ve zkratce, na CAN se nedalo šahat, vše bylo třeba ošetřit
přímo na řídícím počítači a ladění bylo také &amp;hellip; netriviální.&lt;/div>

&lt;div class='p'>Traktor se řídí pedálem, který ve střední poloze nic nedělá, v jednom směru
uvede stroj do pohybu vpřed a ve druhém do pohybu vzad (X300R má vyvedená táhla
na každý směr zvlášť). Lineární pohon zase zapnete a posouvá se jedním
směrem, přepólujete a jede druhým.  Pro zpětnou vazbu je tam integrovaný
potenciometr, ale díky relativně dlouhému přívodu nebyl údaj zrovna stabilní.
Triviální úloha se začala komplikovat.  Na začátku nebylo ani jasné, který směr
je dopředu a jak moc je třeba posouvat s pedály, aby se traktor rozjel. Tomáš
počítal pár desítek milisekund a tak jsme první pokusné časovaní řešili jenom
&lt;i>time.sleep(0.1)&lt;/i> na počítači.  Hodnoty z A/D převodníku celkem plavaly, ale
bylo vidět, že se v průměru buď zvětšují nebo snižují. Mimochodem, bylo skvělé,
že šlo s pedálem hýbat aniž by byl motor traktoru zapnutý!&lt;/div>

&lt;div class='p'>Když už jsme pulzy uřídili, tak přišel ostrý test se zapnutým motorem. 100ms
nic. 200ms nic &amp;hellip; to už bylo divné, ale &amp;hellip; zvedáme na 400ms a dokonce na
0.5s. Pokud někdo slyšel kolem 10 hodiny dopoledne velkou ránu, tak to jsme
byli my. Došlo mi, že je zamáčnutý &lt;b>parking&lt;/b> (na mém traktůrku na to mám
kontrolku, JD ji nemá) a odblokoval jsem ho. Traktor vyskočil vpřed, ale
rozvaděč s elektronikou a baterkou díky dobře namazanému posuvnému mechanismu
zůstal na místě! Naštěstí kabeláž byla důkladná a udržela to.  Stejně tak
baterka i počítač byly v bedně přidělané, ale &amp;hellip; Stando, proč to bylo proboha
namazané?! &lt;span class='wink'>&lt;/span> Já vím, že říkal, že to musíme připevnit, ale kdo si to má
všechno pamatovat :-(.  Tak už víme, který směr je dopředu a že 500ms je
opravdu hodně.&lt;/div>

&lt;div class='p'>Aby traktor sám zastavil je nutné dostat pedál do střední polohy. Do druhého
kola jsme to tam dostávali ručně &amp;mdash; krátké pulzy dokud to „zhruba nesedělo”
(stejně dlouhý pulz opačným směrem časem „oddriftuje”). Vyžádali jsme si
možnost sedět na robotu, kdyby se náhodou traktůrek splašil, a skříň s
elektronikou jsme pro všechny případy fixovali gumicukem. Soutěžní start byl
zase hektický, takže se nepodařilo robota dostatečně srovnat (přeci jen 300kg
snadno neposunete), a proto robot vyjel už po cca 2 metrech.&lt;/div>

&lt;h2>3. kolo (APU2)&lt;/h2>

&lt;div class='p'>Problém s ovládáním z APU2 nebyl v kabelech, jak se zprvu zdálo, ale v
nastavení sériové linky. Defaultní nastavení v Linuxu (APU2) a ve Windows
(notebook) se jaksi liší. Narychlo se nám to daří rozchodit, a zdá se, že to
bude už ok. Ke spuštění programu je potřeba ještě notebook, ale jinak už vše
běží na APU2. Pro start robota se doplnil provizorní spínač a terminál běží ve
screenu, takže by nemělo vadit, že není notebook připojený. John ale
neodstartoval. Připojuji narychlo notebook a zkouším znova &amp;mdash; tady je minutové
startovací okno „trošku” stres. Druhý pokus a robot vyráží. Dokonce ujel asi
cca 15 metrů?? Lepšíme se.&lt;/div>

&lt;h2>4. kolo&lt;/h2>

&lt;div class='p'>Zatímco robotická špička se předhání v jakých časech dosáhnou cílených 314
metrů, my řešíme, proč nestartujeme. Upravil jsem kód, aby se pulz potvrdil, tj.
pokud je poloha nedostatečná, tak dalším pulzem to posune dál &amp;hellip; ale stále
stejný problém. S otevřeným notebookem to jede, jinak ne. Zatím nerozluštěná
záhada.&lt;/div>

&lt;div class='p'>Do posledního kola tedy nastupujeme s otevřeným notebookem (občas do něj trošku
kápne &amp;mdash; naštěstí vody a ne oleje). Traktůrek jede krásně, prostředkem cesty,
radost pohledět a na cca 25(?) metrech se zastavuje. Došel benzín.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/jd-2nd-run.jpg'>&lt;img src='/competitions/robotem-rovne/2016/jd-2nd-run_t.jpg' alt='druhé kolo' title='druhé kolo' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/jd-2nd-run.jpg'>druhé kolo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/jd-3rd-run.jpg'>&lt;img src='/competitions/robotem-rovne/2016/jd-3rd-run_t.jpg' alt='třetí kolo' title='třetí kolo' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/jd-3rd-run.jpg'>třetí kolo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/jd-4th-run-no-gas.jpg'>&lt;img src='/competitions/robotem-rovne/2016/jd-4th-run-no-gas_t.jpg' alt='čtvrté kolo bez benzínu' title='čtvrté kolo bez benzínu' class='border'  width='220' height='147'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/jd-4th-run-no-gas.jpg'>čtvrté kolo bez benzínu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Závěr&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 106px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotem-rovne/2016/jd-md.jpg'>&lt;img src='/competitions/robotem-rovne/2016/jd-md_t.jpg' alt='autor článku' title='autor článku' class='border'  width='100' height='67'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotem-rovne/2016/jd-md.jpg'>autor článku&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Máme příběh, jak to JD málem mohl „vyhrát” &lt;span class='smile'>&lt;/span>. No nic, i tak to považujeme
za úspěch. Jezdilo to, nikomu to neublížilo, senzor za $8000 jsme nerozbili
(ani ho nikdo neukradl) a je jasné, co je třeba dělat dál. Robotem rovně byl
skvělý dead-line, který nás donutil k max výkonu a teď to nejspíše zase poleví.
Skoro zvažujeme ve spolupráci se „Zemědělkou” uspořádat nějakou soutěž v
sekání trávy &amp;hellip; reálné prostředí, všichni roboti současně, asi někdy v době
prázdnin. Uvidíme. Bez dead-line nic nebude &amp;hellip; zájemci piště &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h1>Komentáře&lt;/h1>

&lt;hr/>

&lt;h1>Odkazy&lt;/h1>

&lt;ul>
&lt;li>&lt;a href='http://www.kufr.cz/view.php?nazevclanku=8-rocnik-roro-2016-za-nami&amp;amp;cisloclanku=2016050002' class='external'>oficiální výsledky&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;a href='/competitions/robotem-rovne/2016/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Robotour 2016</title>
	<link rel='alternate' href="http://localhost/competitions/robotour/2016/cs"/>
	<id>http://localhost/competitions/robotour/2016/cs</id>
	<updated>2016-05-04T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Jedenáctý ročník soutěže outdoorových autonomích robotů se bude konat v
Německu, našeho posledního, dosud nenavštíveného, souseda. Pro zpestření bude
nově možné náklad automaticky na startovní pozici nakládat a v cíli vykládat.
Toto je pouze extra bonus, tj. loňské stroje je možné použít i nadále. Některé
soutěžící možná potěší kombinace menšího nákladu spojeného s automatikou. Kdy
a kde se bude akce konat? &lt;b>Deggendorf, 17. září 2016&lt;/b>.
 </summary>
	<content type='html'> 
&lt;h1>Pravidla&lt;/h1>

&lt;div class='p'>Letos dochází k drobné změně pravidel: robot může automaticky naložit a
případně i v cíli vyložit náklad. Jsou za to bonusové body. Jako alternativa k
sudu jsou teď i možné 500ml plechovky, pokud jsou automaticky nakládány.
Loňské pravidlo, kdy bodově nejlepší tým startuje na konci konvoje, zůstává v
platnosti.&lt;/div>

&lt;div class='p'>Detailní pravidla jsou k dispozici na GitHubu s tagem ROBOTOUR2016:
&lt;a href='https://github.com/robotika/robotour/blob/ROBOTOUR2016/rules/pravidla.md' class='external'>česky&lt;/a>
a
&lt;a href='https://github.com/robotika/robotour/blob/ROBOTOUR2016/rules/rules.md' class='external'>anglicky&lt;/a>.&lt;/div>

&lt;h2>Ukázky cestiček v Deggendorfu&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/deggendorf-7831.jpg'>&lt;img src='/competitions/robotour/2016/deggendorf-7831_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/deggendorf-7836.jpg'>&lt;img src='/competitions/robotour/2016/deggendorf-7836_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/deggendorf-7846.jpg'>&lt;img src='/competitions/robotour/2016/deggendorf-7846_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/deggendorf-7853.jpg'>&lt;img src='/competitions/robotour/2016/deggendorf-7853_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/deggendorf-7855.jpg'>&lt;img src='/competitions/robotour/2016/deggendorf-7855_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2016/deggendorf-7857.jpg'>&lt;img src='/competitions/robotour/2016/deggendorf-7857_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Lokalita&lt;/h2>

&lt;div class='p'>Soutěž bude probíhat v několika sousedních lokalitách, viz přehledovou
&lt;a href='http://www.openstreetmap.org/relation/959809#map=16/48.8305/12.9544&amp;amp;layers=D' class='external'>mapu&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 564px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/robotour/2016/map.png' alt='přehledová mapa' title='přehledová mapa' class='border'  width='558' height='453'/>&lt;/span>&lt;br/>
&lt;span>přehledová mapa&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Základna bude na
&lt;a href='https://en.wikipedia.org/wiki/Deggendorf_Institute_of_Technology' class='external'>Technishe
Hochschule Deggendorf&lt;/a>, část soutěže bude v
&lt;a href='https://de.wikipedia.org/wiki/Landesgartenschau_Deggendorf_2014#Donaupark' class='external'>Donaupark&lt;/a>,
dále v
&lt;a href='https://de.wikipedia.org/wiki/Landesgartenschau_Deggendorf_2014#Stadthallenpark' class='external'>Stadthallenpark&lt;/a>
a konečně v univerzitním campusu.&lt;/div>

&lt;hr/>

&lt;div class='p'>Pokud chcete soutěž nějakým způsobem podpořit nebo máte nějaké doplnění/dotaz,
tak se nám prosím ozvěte pomocí &lt;a href='/competitions/robotour/2016/cs#email'>kontaktního formuláře&lt;/a>.&lt;/div>
 </content>
</entry>
<entry>
	<title>Lamia</title>
	<link rel='alternate' href="http://localhost/robots/lamia/cs"/>
	<id>http://localhost/robots/lamia/cs</id>
	<updated>2015-11-16T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Jumping Sumo patří do rodinky MiniDrones, kterou Parrot představil loni. Na
rozdíl od Rolling Spider (&lt;i>Jessica&lt;/i>) a Bebop (&lt;i>Katarina&lt;/i>) nelítá, ale pouze
skáče.  Robot dostal jméno &lt;i>Lamia&lt;/i> a má stejný úkol jako Jessica loni: zdolat
schody na &lt;b>Tour the Stairs&lt;/b> &amp;hellip; jen je na to tentokrát pouze týden!  &lt;b>Blog
update:&lt;/b> 10/2 &amp;mdash; &lt;a href='/robots/lamia/cs#160210'>END&lt;/a>
 </summary>
	<content type='html'> 
&lt;h2>Odkazy:&lt;/h2>

&lt;ul>
&lt;li>Stránky českého prodejce:
&lt;a href='http://www.icornerhightech.cz/' class='external'>http://www.icornerhightech.cz/&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/lamia' class='external'>https://github.com/robotika/lamia&lt;/a>&lt;/li>
&lt;/ul>

&lt;h2>Obsah:&lt;/h2>

&lt;ul>
&lt;li>&lt;a href='/robots/lamia/cs#151116'>Předehra&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151117'>Pružiny&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151123'>Codility&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151125'>První pohyb&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151127'>FreeFlight 3&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151128'>Verze 0&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151129'>Soutěž resp. přednášky&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151201'>Soutěžní kód&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151203'>telnet&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151204'>dragon.conf&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151205'>Road Plan&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151206'>Parrot Developer Fórum&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#151208'>Panoramatické snímky?&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#160105'>SICK Pink Cube&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#160108'>Experiment s ORBou&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/lamia/cs#160210'>END&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;hr/>

&lt;h1>Blog&lt;/h1>

&lt;div class='p'>&lt;a id="151116">&lt;/a>&lt;/div>

&lt;h2>16. listopad 2015 &amp;mdash; Předehra&lt;/h2>

&lt;div class='p'>Robota ještě nemám. Pokud vše dobře dopadne, tak si ho domu odnesu ve středu
odpoledne &amp;hellip; a slavnostní otevření festivalu bude ve čtvrtek, týden na to.
Nebude to nuda &lt;span class='smile'>&lt;/span>. Chci se na to trošku připravit a hned první překvapení:
link &lt;a href='https://github.com/ARDroneSDK3' class='external'>https://github.com/ARDroneSDK3&lt;/a> vede na stránku, kde se píše &lt;b>This
organization has no public repositories.&lt;/b> Hmm, to jsem zvědav, co se stalo.&lt;/div>

&lt;div class='p'>Mám ještě staré klony repository, když jsem pracoval na
&lt;a href='/robots/jessica/cs'>Jessice&lt;/a> a &lt;a href='/robots/katarina/cs'>Katarině&lt;/a>. OK, konec paniky.
SDK je stále veřejná, jenom se změnilo jméno:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/Parrot-Developers/' class='external'>https://github.com/Parrot-Developers/&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>Tak co dál? Možná
&lt;a href='https://www.youtube.com/watch?feature=player_detailpage&amp;amp;v=vThsmpo-TV0#t=260' class='external'>inspirativní
video&lt;/a>, co by &lt;i>Lamia&lt;/i> měla umět. Skáče po schodech, do koše, na postel.
Podle XML příkazů ale moc parametrů k dispozici nebude:&lt;/div>

&lt;pre>&amp;lt;cmd name="Jump"&amp;gt;
    Request a jump
    &amp;lt;arg name="type" type="enum"&amp;gt;
        Type of jump
        &amp;lt;enum name="long"&amp;gt;
            Long jump.
        &amp;lt;/enum&amp;gt;
        &amp;lt;enum name="high"&amp;gt;
            High jump
        &amp;lt;/enum&amp;gt;
    &amp;lt;/arg&amp;gt;
&amp;lt;/cmd&amp;gt;&lt;/pre>

&lt;div class='p'>Zaujalo mne, že Lamia by měla i vydávat zvuky (třída příkazů
&lt;i>AudioSettings/Theme&lt;/i> s hodnotami &lt;i>robot&lt;/i>, &lt;i>insect&lt;/i> a &lt;i>monster&lt;/i>).
Nabízí i jednoduché &lt;i>skriptování&lt;/i> (asi příliš silné slovo) pomocí
&lt;i>RoadPlan&lt;/i> (viz
&lt;a href='http://blog.parrot.com/2014/07/24/tutorial-perform-choreography-with-jumping-sumo/' class='external'>tutoriál&lt;/a>).&lt;/div>

&lt;div class='p'>Dnešní záznam bych uzavřel odkazem na projekt
&lt;a href='https://github.com/thisismyrobot/sumo-charge' class='external'>Sumo Charge&lt;/a>, který má v plánu
autonomní dobíjení se vzdáleným přístupem přes internet. Odkazuje dále na
&lt;a href='https://github.com/haraisao/JumpingSumo-Python' class='external'>JumpingSumo-Python&lt;/a>, což by
možná mohl být první start (i když jsem plánoval copy &amp;amp; paste
&lt;a href='/robots/katarina/cs'>Katariny&lt;/a>).&lt;/div>

&lt;div class='p'>p.s. jdu se koukat na televizi &amp;hellip; nějaký seriál &lt;i>Já a robot&lt;/i> (ano, obsahuje
v názvu klíčové slovo a to mi teď stačí &lt;span class='wink'>&lt;/span>)&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151117">&lt;/a>&lt;/div>

&lt;h2>17. listopad 2015 &amp;mdash; Pružiny&lt;/h2>

&lt;div class='p'>Robota ještě nemám, venku prší, tak zatím brouzdám po webu. Přes varovné hlášky
typu &lt;i>I have a problem with jumping "wheel" in the center of the jumping sumo
--- broke after a few
uses&lt;/i>&lt;a href='http://forum.parrot.com/english/viewtopic.php?id=15419' class='external'>.&lt;/a> nebo
drsnější &lt;i>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 &lt;/i>&lt;a href='http://forum.parrot.com/english/viewtopic.php?id=15670' class='external'>.&lt;/a> 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”.&lt;/div>

&lt;div class='p'>Přes rozbité skákání jsem se dostal k videu
&lt;a href='https://www.youtube.com/watch?v=1nePU5mz8Z4' class='external'>How to replace Jump Mechanism on
Parrot Jumping Sumo&lt;/a> s detaily natahovacího kolečka:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/jumping-mechanism.jpg'>&lt;img src='/robots/lamia/jumping-mechanism_t.jpg' alt='pružinový mechanismus' title='pružinový mechanismus' class='border'  width='320' height='160'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/jumping-mechanism.jpg'>pružinový mechanismus&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>A toto by mohlo být i mechanické řešení mého problému &amp;mdash; 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 &amp;hellip; a to by mohla řešit výměna pružiny za slabší. Mechanismus
totiž vypadá jako &lt;i>nabít a pal&lt;/i>, tj. žádné mezistavy.&lt;/div>

&lt;div class='p'>Na téma pružin jsem pak zjistil, ze &lt;i>pérovna&lt;/i> je hned „za rohem”
(&lt;a href='http://www.pruziny.cz/tlacne-pruziny' class='external'>pruziny.cz&lt;/a>), případně že Alcomex má
na webu rovnou
&lt;a href='http://www.alcomex.cz/wp-content/uploads/2014/07/drukveren_02-09.pdf' class='external'>katalog&lt;/a>
s tabulkami. Počkal bych ale až jak bude Lamia vypadat ve skutečnosti. A ještě
jeden odkaz na &lt;a href='http://www.mitcalc.com/doc/springs/help/cz/springs.htm' class='external'>výpočet
pružin&lt;/a>.  &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151123">&lt;/a>&lt;/div>

&lt;h2>23. listopad 2015 &amp;mdash; Codility&lt;/h2>

&lt;div class='p'>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
&lt;a href='https://www.alza.cz/parrot-jumping-night-diesel-d2914891.htm?o=3' class='external'>Alze&lt;/a> 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č &amp;hellip; i když teď tam vidím
&lt;a href='https://www.alza.cz/parrot-jumping-sumo-white-d2365859.htm?o=1' class='external'>rozbalený&lt;/a> za
4135Kč, tak to asi vánoce dělají paseku).&lt;/div>

&lt;div class='p'>Co v mezičase dělat? Byl jsem „programátorsky nabuzený”, takže, když jsem
narazil na
&lt;a href='https://codility.com/l/indeedprime/leaderboard/?t=ER2G69-4U7' class='external'>Codility
Challenge&lt;/a>, jsem to po fyzicky náročném víkendu prubnul &lt;span class='smile'>&lt;/span>. 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 &amp;hellip; to by šlo &lt;span class='wink'>&lt;/span>. Ono i
&lt;a href='https://codility.com/l/indeedprime/#prizes' class='external'>druhá cena&lt;/a> 3x drona Lily by
nebyla špatná &amp;hellip; minimálně by bylo zase o čem na robotice psát &lt;span class='smile'>&lt;/span>. No nic, na
to by člověk, resp. programátor, musel mít hodnocení (100, 100, 100).
&lt;i>Okurková sezóna&lt;/i> snad zítra skončí &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151125">&lt;/a>&lt;/div>

&lt;h2>25. listopad 2015 &amp;mdash; První pohyb&lt;/h2>

&lt;div class='p'>Dnešní titulek už zní nadějně, není-liž pravda? &lt;span class='wink'>&lt;/span> Ale růžové to není, ostatně
jak by mohlo &amp;hellip; 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 &lt;i>ROZBALENO RC model Parrot Jumping Sumo
White&lt;/i> 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í &amp;mdash; chyběl nabíjecí kabel! Tak jsem to chtěl vrátit hned a
oni,  že na to mám 14dní &amp;hellip; OK.&lt;/div>

&lt;div class='p'>Nabíjení trvá 2 hodiny. Ano, opravdu. Tj. ve 20h jsem přišel z práce a ve 22h
udělal
&lt;a href='https://github.com/robotika/lamia/commit/f65b3c0b571965653f91f95ae3e59ee230fc9542' class='external'>první
test&lt;/a>. 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 &amp;hellip; nic, zítra
pokračování.&lt;/div>

&lt;div class='p'>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. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151127">&lt;/a>&lt;/div>

&lt;h2>27. listopad 2015 &amp;mdash; FreeFlight 3&lt;/h2>

&lt;div class='p'>Včera večer jsem zkoušel Android aplikaci
&lt;a href='https://play.google.com/store/apps/details?id=com.parrot.freeflight3&amp;amp;hl=en' class='external'>FreeFlight
3&lt;/a>. Na pracovním testovacím telefonu byla ještě nainstalovaná z loňska (tehdy
to byla minidrona &lt;a href='/robots/jessica/cs'>Jessica&lt;/a>) 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!
&lt;span class='smile'>&lt;/span> Tj. problém s pružinovým mechanismem není a je to čistě v „mém” software.&lt;/div>

&lt;div class='p'>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
&lt;a href='http://www.segway.com/' class='external'>Segway&lt;/a>, 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. &lt;span class='smile'>&lt;/span> 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č.&lt;/div>

&lt;div class='p'>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 &amp;hellip; sigh, je třeba rozchodit logování a z videopaketů
bych to pak poskládal.&lt;/div>

&lt;div class='p'>Jinak robůtky mám teď dva: „Lamia A” a „Lamia I” &amp;hellip; 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
(&lt;a href='https://www.alza.cz/parrot-jumping-sumo-white-d2146355.htm' class='external'>Alza&lt;/a>,
&lt;a href='http://www.icorner.cz/' class='external'>iCorner&lt;/a>). Barevně by druhá vypadala spíše na
&lt;a href='https://en.wikipedia.org/wiki/Sexmission' class='external'>Emmu Dax&lt;/a> z Genetixu &lt;span class='wink'>&lt;/span>, ale
nechť.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/lamia-white.jpg'>&lt;img src='/robots/lamia/lamia-white_t.jpg' alt='bílá varianta' title='bílá varianta' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/lamia-white.jpg'>bílá varianta&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/both-drones.jpg'>&lt;img src='/robots/lamia/both-drones_t.jpg' alt='tandem' title='tandem' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/both-drones.jpg'>tandem&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/box.jpg'>&lt;img src='/robots/lamia/box_t.jpg' alt='balení' title='balení' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/box.jpg'>balení&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>p.s. upravil jsem trošku README u
&lt;a href='https://github.com/haraisao/JumpingSumo-Python/pull/2' class='external'>haraisao/JumpingSumo-Python&lt;/a>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151128">&lt;/a>&lt;/div>

&lt;h2>28. listopad 2015 &amp;mdash; Verze 0&lt;/h2>

&lt;div class='p'>Je doslova „za pět minut dvanáct” a konečně mám
&lt;a href='https://github.com/robotika/lamia/commit/3ed423f3c188ddce31f9d6e7d9f84223c628a02d' class='external'>Verzi
0&lt;/a>. Nevím, co jsem dělal špatně v tom &lt;i>japonském&lt;/i> kódu, ale teď to upraveným
kódem z &lt;a href='https://github.com/robotika/katarina' class='external'>Katariny&lt;/a> skočilo. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Z detailů, na které jsem narazil a které později už nebudou zajímavé:&lt;/div>

&lt;ul>
&lt;li>bílá Lamia se dala z notebooku připojit, ale hnědá nikoliv &amp;mdash; 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 &lt;a href='https://parrotcontact.parrot.com/website/user-guides/download-user-guides.php?pdf=jumping-sumo/Jumping-sumo_User-guide_UK.pdf' class='external'>manuál&lt;/a>&lt;/li>

&lt;li>Jumping Sumo používá jinou IP (192.168.2.1, Katarina měla 192.168.42.1)&lt;/li>

&lt;li>základní příkazy pro pohyb jsou jiné (PCMD má teď jenom rychlost jízdy a zatáčení)&lt;/li>

&lt;li>Sindy (náš pes) se, na rozdíl od dron, skákací potvory bojí (asi jak vydává zvuky)&lt;/li>

&lt;li>Lamia skoro nic neposílá, jenom ping-pong časové známky (tj. změnil jsem vnitřní update() funkci)&lt;/li>

&lt;li>video asi chodí po celých snímcích, protože původní 40960 bajtový buffer nestačil (teď jsem tam dal 240960)&lt;/li>

&lt;li>zase jsem narazil na podraz s &lt;b>enum&lt;/b>, který není bajt, ale čtyři bajty&lt;/li>
&lt;/ul>

&lt;div class='p'>Je čas jít spát. Zítra, resp. už dneska v 13h na viděnou v NTK Galerii &amp;hellip;&lt;/div>

&lt;h2>5:30-7:30&lt;/h2>

&lt;div class='p'>Ještě pár poznatků, než vyrazím do NTK:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/robotika/lamia/blob/master/stairs_ver0.py' class='external'>japonský kód&lt;/a>
stále neskáče &amp;hellip; 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í)&lt;/li>

&lt;li>zaujal mne identifikátor
&lt;i>ARCOMMANDS_ID_JUMPINGSUMO_PILOTING_CMD_ADDCAPOFFSET&lt;/i> 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 (&lt;a href='https://github.com/robotika/lamia/commit/b33a1e8627ae9d7367aa6f094c335abd054258f1' class='external'>diff&lt;/a>).
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. &lt;span class='smile'>&lt;/span>&lt;/li>

&lt;li>video není H264, ale sada klasických JPEG obrázků. Upravil jsem tedy
&lt;i>video.py&lt;/i> aby místo &lt;i>frame_XY.bin&lt;/i> ukládal s koncovkou &lt;i>.jpg&lt;/i>
(&lt;a href='https://github.com/robotika/lamia/commit/fc26b6bb55488487a469deee8de426c98eafea45' class='external'>diff&lt;/a>).
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:&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/frame0131.jpg'>&lt;img src='/robots/lamia/frame0131_t.jpg' alt='Mezipřistání na židli' title='Mezipřistání na židli' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/frame0131.jpg'>Mezipřistání na židli&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>(omlouvám se za mizerné osvětlení)&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151129">&lt;/a>&lt;/div>

&lt;h2>29. listopad 2015 &amp;mdash; Soutěž resp. přednášky&lt;/h2>

&lt;div class='p'>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 &amp;hellip; fakt luxus a špičkoví přednášející! Bylo nás tam cca 15
a z toho 6 přednášejících &amp;mdash; z tohoto pohledu bych plakal.&lt;/div>

&lt;div class='p'>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:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://joellehman.com/' class='external'>Joel Lehman&lt;/a>, autor knížky
&lt;a href='http://www.amazon.com/Why-Greatness-Cannot-Planned-Objective/dp/3319155237' class='external'>Why
Greatness Cannot Be
Planned&lt;/a> &amp;hellip; ukončoval to pěknou hláškou, skoro bych řekl „životní motto”:
&lt;i>To achieve your highest goals, you must be willing to abandon them.&lt;/i> (&lt;a href='http://www.cs.swarthmore.edu/~meeden/DevelopmentalRobotics/lehman_ecj11.pdf' class='external'>článek&lt;/a>).&lt;/li>

&lt;li>&lt;a href='http://picbreeder.org/' class='external'>Picbreeder.org&lt;/a> &amp;mdash; &lt;i>evolutionary art&lt;/i>&lt;/li>

&lt;li>&lt;a href='https://real.itu.dk/' class='external'>REAL - Robotics, Evolution and Art Lab&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.florarobotica.eu/' class='external'>florarobotica.eu&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.mars-one.com/' class='external'>mars-one.com&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://people.csail.mit.edu/brooks/papers/elephants.pdf' class='external'>Elephants Don’t Play Chess&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://en.wikipedia.org/wiki/Playware' class='external'>Playware&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.popularmechanics.com/technology/robots/a10957/a-broken-robot-saved-my-life-17039281/' class='external'>OpenSource under water robot&lt;/a> nebo přímo &lt;a href='http://www.openrov.com/' class='external'>OpenROV&lt;/a> &amp;hellip; ale hledal jsem REMORA &amp;hellip;&lt;/li>

&lt;li>&lt;a href='https://www.humanbrainproject.eu/' class='external'>Human Brain Project&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.shaperobotics.com/' class='external'>shaperobotics.com&lt;/a> &amp;mdash; robotická stavebnice&lt;/li>
&lt;/ul>

&lt;div class='p'>&amp;hellip; nějak mi teď přijde nepatřičné psát dál o problémech s řízením podle stavu
baterek. Asi až &amp;hellip; časem.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151201">&lt;/a>&lt;/div>

&lt;h2>1. prosinec 2015 &amp;mdash; Soutěžní kód&lt;/h2>

&lt;div class='p'>Raději doplním alespoň krátkou zprávu o použitém kódu než to vše zapomenu &amp;hellip;&lt;/div>

&lt;div class='p'>Asi bych začal
&lt;a href='https://github.com/robotika/lamia/commit/64da5522b211be558b26449aef9a40560a8ae2a7' class='external'>odkazem
na github&lt;/a>, 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í.&lt;/div>

&lt;div class='p'>Včera (?) jsem pustil &lt;i>git pull&lt;/i> na
&lt;a href='https://github.com/ARDroneSDK3/libARCommands' class='external'>libARCommands&lt;/a> a zaujal mne
commit
&lt;a href='https://github.com/Parrot-Developers/libARCommands/commit/233ae5eeaba2fd57a3e2c8ba653160c6a0086a22' class='external'>Add
command to let the JS report its speed.&lt;/a> 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 &amp;hellip; možná až
moc nuda &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>Jinak jestli jste neviděli Lamii v akci, tak viz
&lt;a href='http://www.ceskatelevize.cz/ivysilani/1097206490-udalosti-v-kulture/215411000121128/obsah/437896-prehlidka-robotiky' class='external'>ČT
art&lt;/a> (no je tam vidět vlastně jenom jeden skok, tak nic).&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151203">&lt;/a>&lt;/div>

&lt;h2>3. prosinec 2015 &amp;mdash; telnet&lt;/h2>

&lt;div class='p'>Lamia, stejně jako &lt;a href='/robots/heidi/cs'>Heidi&lt;/a> nebo &lt;a href='/robots/katarina/cs'>Katarina&lt;/a>
podporuje &lt;b>telnet&lt;/b>:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/telnet.png'>&lt;img src='/robots/lamia/telnet_t.png' alt='Jumping Sumo telnet' title='Jumping Sumo telnet' class='border'  width='320' height='201'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/telnet.png'>Jumping Sumo telnet&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Prapůvodně jsem chtěl nahrát pouze nový firmware, ale ono i
&lt;a href='http://www.parrot.com/usa/support/parrot-jumping-sumo/' class='external'>nejnovější dostupná
verze&lt;/a> verze je &lt;b>1.99.0&lt;/b> 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.&lt;/div>

&lt;div class='p'>Co jsem našel? Řekl bych, že už standardně se hlavní řídící program jmenuje
&lt;i>dragon&lt;/i>, přesněji &lt;i>dragon-prog&lt;/i>, kterého pouští &lt;i>DragonStarter.sh&lt;/i>.
Zajímavý je adresář &lt;i>/usr/bin&lt;/i>, kde jsou pomocné nástroje jako:&lt;/div>

&lt;pre>[JS] $ ls | grep js_
js_PCA96n
js_adc
js_motors
js_vbat&lt;/pre>

&lt;div class='p'>Předpokládám, že je třeba nejprve „zabít draka” a pak je možné je používat.
Příklady výpisů:&lt;/div>

&lt;pre>[JS] $ js_motors
&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>
"js_motors": Version 1.1
 Build for Proto A3

&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>
     js_motors Usage:
 js_motors &amp;ndash;help
 js_motors &amp;ndash;stopall
   &lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>-
    Description:
  This program is made to command Jumping Sumo Motors
   &lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>-
    Options:
  -h,   &amp;ndash;help
                              Dislay this help
  -S,   &amp;ndash;stopall
                              Stop all motors!
  -r,   &amp;ndash;right  &lt;cmdRight>
                              Right motor command (-255->255)
  -l,   &amp;ndash;left  &lt;cmdLeft>
                              Left motor command (-255->255)
  -j,   &amp;ndash;jump  &lt;cmdJump>
                              Jump motor command (-255->255) XXX TODO Add time out!
   &lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>-
    Example:
 TODO
&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;/pre>

&lt;pre>[JS] $ js_vbat
JS_VBAT : Vbat = 3.614986 V&lt;/pre>

&lt;pre>[JS] $ js_adc
 ### save_or_print_results_mode = 4
mmap phy0x400ea000 cpu 0x402e0000

&lt;b>*&lt;/b>&lt;b>*&lt;/b> INIT DONE &lt;b>*&lt;/b>&lt;b>*&lt;/b>

wait 1 sec&amp;hellip;
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&amp;hellip;
#### close driver&amp;hellip;
#### close files&amp;hellip;&lt;/pre>

&lt;div class='p'>a konečně&lt;/div>

&lt;pre>[JS] $ js_PCA96n
"js_PCA96n": Version 1.0

&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>
     js_PCA96n Usage:
 Read  reg : js_PCA96n &lt;regAdd>
 Write reg : js_PCA96n &lt;regAdd> &lt;regVal>
&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;b>*&lt;/b>&lt;/pre>

&lt;div class='p'>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á &amp;mdash; příště testovat na nabíječce!&lt;/div>

&lt;div class='p'>p.s. myslíte, že &lt;i>I jump = 518&lt;/i> je čítač dosud provedených skoků? Jestli ano,
tak potěš &amp;hellip; &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151204">&lt;/a>&lt;/div>

&lt;h2>4. prosinec 2015 &amp;mdash; dragon.conf&lt;/h2>

&lt;div class='p'>Dnes jsem se moc daleko neposunul. Prohlížel jsem si konfigurace a moc mne
nenadchly:&lt;/div>

&lt;h3>dragon.conf&lt;/h3>

&lt;pre>{
      "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"
      }
}&lt;/pre>

&lt;h3>system.conf&lt;/h3>

&lt;pre>{
    "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
            }
        ]
    }
}&lt;/pre>

&lt;div class='p'>Stále jsem doufal v nějaký &lt;i>debug&lt;/i>, který nastavím na &lt;i>True&lt;/i> a Lamia začne
posílat debug hlášky, ale nevypadá to nadějně &amp;hellip; zatím.&lt;/div>

&lt;div class='p'>Ještě pár ukázek z pouštění „draka”:&lt;/div>

&lt;pre>[JS] $ /usr/bin/dragon-prog &amp;ndash;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 | &amp;ndash;help                     Print this message
     &amp;ndash;version                  Print version informations
-i | &amp;ndash;ip         &lt;IP>          host IP
-v | &amp;ndash;verbose    &lt;V>&lt;/pre>

&lt;pre>[JS] $ /usr/bin/dragon-prog &amp;ndash;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: &lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&amp;ndash;
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: &lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&amp;ndash;
tid=(nil), [I] dragonprog:&lt;/pre>

&lt;div class='p'>a konečně pokus o &lt;i>verbose&lt;/i>&lt;/div>

&lt;pre>[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

&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>-
     MPU FACTORY CALIB:
&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>-
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
&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>-

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_ptr0x(nil) user_ptr0x0x40a4d000
[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&lt;/pre>

&lt;div class='p'>tak asi nic. Můj další cíl je prozkoumat
&lt;a href='http://blog.parrot.com/2014/07/24/tutorial-perform-choreography-with-jumping-sumo/' class='external'>Road
Plan&lt;/a>, 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 &lt;i>Free Flight 3&lt;/i>.
Mimochodem FF3 je i na
&lt;a href='https://www.microsoft.com/en-us/store/apps/freeflight-3/9wzdncrdjq4d' class='external'>Windows
Store&lt;/a>, ale na &lt;i>Windows 10&lt;/i> zatím upgradeovat nechci.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151205">&lt;/a>&lt;/div>

&lt;h2>5. prosinec 2015 &amp;mdash; Road Plan&lt;/h2>

&lt;div class='p'>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 &lt;i>telnem&lt;/i> a
podívat se, jak to vypadá:&lt;/div>

&lt;pre>[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 } ] }&lt;/pre>

&lt;div class='p'>To vypadá celkem srozumitelně, není-liž pravda? &lt;span class='smile'>&lt;/span> Žá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 &lt;i>Free Flight
3&lt;/i> jsem mínus neviděl. Pozn. do "description" a "comment" jsem teď vložil
extra mezeru, aby to robotika-parser neinterpretoval jako &lt;i>kurzívu&lt;/i>.&lt;/div>

&lt;div class='p'>Robot se na nabíječce nechce nechat zapnout, tak to dnes bude holt asi jenom
tento „štěk”.&lt;/div>

&lt;div class='p'>p.s.&lt;/div>

&lt;pre>{ "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" }
 ] }&lt;/pre>

&lt;hr/>

&lt;div class='p'>&lt;a id="151206">&lt;/a>&lt;/div>

&lt;h2>6. prosinec 2015 &amp;mdash; Parrot Developer Fórum&lt;/h2>

&lt;div class='p'>Djavan mi odpověděl na
&lt;a href='https://github.com/Parrot-Developers/libARCommands/commit/233ae5eeaba2fd57a3e2c8ba653160c6a0086a22#commitcomment-14802312' class='external'>dotaz
ohledně odometrie&lt;/a> a přesměroval mne na
&lt;a href='http://forum.developer.parrot.com/c/drone-sdk/jumping-sumo' class='external'>Parrot Developer
Fórum&lt;/a> (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é
&lt;i>Jumping Sumo Race&lt;/i>. Jestli se tím dá ale flashnout staré &lt;i>Jumping Sumo&lt;/i>
netuším.&lt;/div>

&lt;div class='p'>Narazil jsem ještě na
&lt;a href='http://ka010.com/post/108890023092/hacking-the-parrot-jumping-sumo' class='external'>Hacking
the Parrot Jumping Sumo&lt;/a>, kde mne zaujala nápověda &lt;i>Debug options at
/etc/debug.conf&lt;/i>, tak se na to jdu podívat &amp;hellip; nic tam není :(. Je tedy možné,
že v pozdějším firmware byl odstraněn???&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151208">&lt;/a>&lt;/div>

&lt;h2>8. prosinec 2015 &amp;mdash; Panoramatické snímky?&lt;/h2>

&lt;div class='p'>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 &lt;i>nedostupnou&lt;/i>, 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.&lt;/div>

&lt;div class='p'>Dal jsem tedy do gitu jednoduché demo
(&lt;a href='https://github.com/robotika/lamia/commit/e22b2c5b42d4e3e5a26045b39fefd85d0cf73bef' class='external'>diff&lt;/a>),
kdy se robot otočí o &lt;i>DEG_STEP&lt;/i>, zastaví, uloží snímek a tak celých 360
stupňů.&lt;/div>

&lt;pre>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 )&lt;/pre>

&lt;div class='p'>Pak jsem dal do Google "cv2 image stitching" a mimo jiné vypadl odkaz
na
&lt;a href='http://dawinproject.blogspot.cz/2014/01/multiple-images-panorama-stitching-with.html' class='external'>Multiple
Images/ Panorama Stitching with Python OpenCV&lt;/a> i se
&lt;a href='https://github.com/cbuntain/stitcher' class='external'>zdrojovým kódem&lt;/a>. Trošku jsem to
upravil, aby to šlo vůbec pustit
(&lt;a href='https://github.com/cbuntain/stitcher/pull/4' class='external'>pull request&lt;/a>), 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:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan000.jpg'>&lt;img src='/robots/lamia/scan000_t.jpg' alt='scan000.jpg' title='scan000.jpg' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/scan000.jpg'>scan000.jpg&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 210px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/stitched00and030.jpg'>&lt;img src='/robots/lamia/stitched00and030_t.jpg' alt='mix' title='mix' class='border'  width='204' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/stitched00and030.jpg'>mix&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan030.jpg'>&lt;img src='/robots/lamia/scan030_t.jpg' alt='scan030.jpg' title='scan030.jpg' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/scan030.jpg'>scan030.jpg&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ta distorze je neúnosná a je třeba jí nejprve kompenzovat. Ostatně jsem na
tento problém narazil i na stránkách
&lt;a href='https://github.com/cbuntain/stitcher/issues/1' class='external'>stitcheru&lt;/a>. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Pokud by si někdo chtěl hrát nezávisle, tak tady je sada obrázků po 30
stupních:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan000.jpg'>&lt;img src='/robots/lamia/scan000_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan030.jpg'>&lt;img src='/robots/lamia/scan030_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan060.jpg'>&lt;img src='/robots/lamia/scan060_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan090.jpg'>&lt;img src='/robots/lamia/scan090_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan120.jpg'>&lt;img src='/robots/lamia/scan120_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan150.jpg'>&lt;img src='/robots/lamia/scan150_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan180.jpg'>&lt;img src='/robots/lamia/scan180_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan210.jpg'>&lt;img src='/robots/lamia/scan210_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan240.jpg'>&lt;img src='/robots/lamia/scan240_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan270.jpg'>&lt;img src='/robots/lamia/scan270_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan300.jpg'>&lt;img src='/robots/lamia/scan300_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/scan330.jpg'>&lt;img src='/robots/lamia/scan330_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>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 &amp;mdash; 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. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Neodolal jsem, a od oka to bez kalibrace nařezal
(&lt;a href='https://github.com/robotika/lamia/commit/206ba902c139baa33785b001c77cb022f4dd0595' class='external'>diff&lt;/a>,
případně
&lt;a href='https://github.com/robotika/lamia/blob/master/stitcher.py' class='external'>stitcher.py&lt;/a>.
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ý:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 646px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/result.jpg'>&lt;img src='/robots/lamia/result_t.jpg' alt='výsledek jednoduchého spojení obrázků' title='výsledek jednoduchého spojení obrázků' class='border'  width='640' height='93'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/result.jpg'>výsledek jednoduchého spojení obrázků&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160105">&lt;/a>&lt;/div>

&lt;h2>5. leden 2016 &amp;mdash; SICK Pink Cube&lt;/h2>

&lt;div class='p'>Je to už nějak hrozně dlouho, co jsem k Lamia nic nepřipsal &amp;mdash; i jsem za tu
dobu stačil zapomenout, jak se ten skokan jmenuje :-( &amp;hellip; 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).&lt;/div>

&lt;div class='p'>Jednak mi kolega z práce přivezl z Německa kostičky pro
&lt;a href='/competitions/sick-robot-day/cs'>SICK Robot Day&lt;/a> 2016 (aktuální anglický externí
odkaz je &lt;a href='https://www.sick.com/de/en/robotday-2016/w/robotday2016/' class='external'>zde&lt;/a>). 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:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/pink.jpg'>&lt;img src='/robots/lamia/pink_t.jpg' alt='růžová kostka na SICK Robot Day 2016' title='růžová kostka na SICK Robot Day 2016' class='border'  width='320' height='240'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/pink.jpg'>růžová kostka na SICK Robot Day 2016&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Druhý střípek byla oponentůra práce Martina Döflera spojená s článkem
&lt;i>Vision-Based Pose Recognition, Application for Monocular Robot Navigation&lt;/i>
&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/wireless-charger.jpg'>&lt;img src='/robots/lamia/wireless-charger_t.jpg' alt='bezdrátová nabíječka' title='bezdrátová nabíječka' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/lamia/wireless-charger.jpg'>bezdrátová nabíječka&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
(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).&lt;/div>

&lt;div class='p'>A třetí střípek je, že dorazil „čínský vánoční dárek”:
&lt;a href='http://www.aliexpress.com/item/Universal-Android-Phone-Wireless-charger-Kits-Charging-Receiver-Card-and-Charging-Pad-for-5-Pin-Micro/32411287589.html' class='external'>bezdrátová
nabíječka&lt;/a>, 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  &lt;a href='https://github.com/thisismyrobot/sumo-charge' class='external'>Sumo
Charge&lt;/a> myšlenkou. Časem &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160108">&lt;/a>&lt;/div>

&lt;h2>8. leden 2016 &amp;mdash; Experiment s ORBou&lt;/h2>

&lt;div class='p'>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é &lt;span class='smile'>&lt;/span>, viz např.
&lt;a href='http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_surf_intro/py_surf_intro.html' class='external'>tutoriál
py_surf_intro&lt;/a>. Zaujalo mne varování &lt;i>SURF is good at handling images with
blurring and rotation, but not good at handling viewpoint change and
illumination change.&lt;/i> Ale změna místa pohledu a osvětlení je jistá &amp;hellip;
čert to vem, nějak začít musím.&lt;/div>

&lt;div class='p'>Pak jsem párkrát stiskl Next, Next, Next &amp;hellip; a dostal se na ORB desriptory
(mimochodem, už chápu proč vědecké články obsahují všechny možné typy
deskriptorů &amp;mdash; ono je to skoro zadarmo, stačí slovo SURF nahradit ORB,
BRIEF, FAST a je to &amp;hellip; no trošku zjednodušuji). A poznámka, co asi všichni
víte: &lt;i>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!&lt;/i>
Tak jsem místo SURFnavu začal rovnou experimentovat s
&lt;a href='http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_orb/py_orb.html' class='external'>ORBou&lt;/a>.&lt;/div>

&lt;div class='p'>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
&lt;a href='http://stackoverflow.com/questions/20259025/module-object-has-no-attribute-drawmatches-opencv-python' class='external'>stackoverflow&lt;/a>.
Ještě zobrazení nefungovalo na barevné obrázky, tak jsem je narychlo transformoval na šedotónové.&lt;/div>

&lt;div class='p'>Zde jsou dva úspěšné příklady:
&lt;table class='image_panel center' style='width: 406px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/orb-match.jpg'>&lt;img src='/robots/lamia/orb-match_t.jpg' alt='' title='' class='border'  width='400' height='150'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel center' style='width: 406px;'>&lt;tr>&lt;td>
&lt;a href='/robots/lamia/orb-match2.jpg'>&lt;img src='/robots/lamia/orb-match2_t.jpg' alt='' title='' class='border'  width='400' height='150'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>a zdrojový kód je pak &lt;a href='https://github.com/robotika/lamia/commit/408d6ffcd708ba757abf778a0fd04c3317e78e4c' class='external'>zde&lt;/a>.&lt;/div>

&lt;div class='p'>Ještě mi zbyly 4min, to bych nečekal &lt;span class='smile'>&lt;/span> &amp;hellip; než to pushnu &amp;hellip; timeout.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160210">&lt;/a>&lt;/div>

&lt;h2>10. únor 2016 &amp;mdash; END&lt;/h2>

&lt;div class='p'>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 &lt;a href='/competitions/tour-the-stairs/cs'>Tour the Stairs&lt;/a> (bude-li dost
zájemců), protože tam přeci jenom pasovala lépe než &lt;a href='/robots/jessica/cs'>minidrona
Jessica&lt;/a>.&lt;/div>

&lt;div class='p'>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
&lt;a href='http://www.icorner.cz/jumping-sumo' class='external'>icorner&lt;/a> dnes za 2408Kč
(&lt;a href='https://www.alza.cz/parrot-jumping-race-jett-d3039487.htm?catid=18857171' class='external'>alza&lt;/a>
má jenom ty novější za 4000kč) a napsat mi zkušenosti, případně poslat odkaz,
který bych zde doplnil.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a href='/robots/lamia/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Tour the Stairs 2015</title>
	<link rel='alternate' href="http://localhost/competitions/tour-the-stairs/2015/cs"/>
	<id>http://localhost/competitions/tour-the-stairs/2015/cs</id>
	<updated>2015-09-25T00:00:00Z</updated>
	<author><name>Matin Dlouhý & Christian Gjørret</name></author>
	<summary type='html'> Druhý ročník soutěže „Tour the Stairs” se bude konat v sobotu &lt;b>28. listopadu
2015&lt;/b>. Aby se účastníci z loňska nenudili, tak vedle chození do schodů nově
přibude i bodované chození/jízda ze schodů dolů. Kde to bude? Opět v galerii
NTK v Praze v Dejvicích. &lt;b>UPDATE:&lt;/b> 7/1 &amp;mdash;
&lt;a href='/competitions/tour-the-stairs/2015/cs#160107'>minivideo&lt;/a>
 </summary>
	<content type='html'> 
&lt;h1>Pravidla pro rok 2015&lt;/h1>

&lt;div class='p'>Základní pravidla zůstávají stejná jako
&lt;a href='/competitions/tour-the-stairs/2014/cs'>loni&lt;/a>. Rozšíření pravidel se vás bude
týkat až pokud se vám podaří splnit loňský úkol, tj. vyšplhat po schodech
nahoru. Robot totiž může následně bodovat i za slezení schodů dolů.&lt;/div>

&lt;div class='p'>Za každý zdolaný schod (počítá se nejnižší část robota) získá tým
jeden bod. Aby robot bodoval i za sestup musí dosáhnout nejvyššího schodu, v
opačném případě vlastně o body přichází. Bodově 1 schod = 1 bod.&lt;/div>

&lt;div class='p'>Christian si vymyslel ještě „umělecké bodování”, které se mi nepodařilo mu
rozmluvit. Pokud bude více jak 50% robota vyrobeno &lt;b>ze dřeva&lt;/b> a zdolá alespoň
v jednom ze čtyř kol alepoň jeden schod, tak získává bonus 25 bodů. Celkově lze
letos získat maximálně 4*2*21+25=193 bodů.&lt;/div>

&lt;div class='p'>Mimochodem vznikla přímo dedikovaná stránka soutěže:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://tour-the-stairs.com/' class='external'>http://tour-the-stairs.com/&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>p.s. &lt;a href='/competitions/tour-the-stairs/cs#registration'>registrační formulář&lt;/a>
zůstane stejný pro všechny ročníky a naleznete ho tedy na hlavní stránce
soutěže.&lt;/div>

&lt;hr/>

&lt;h1>UPDATES&lt;/h1>

&lt;div class='p'>&lt;a id="151101">&lt;/a>&lt;/div>

&lt;h2>1. listopadu 2015 &amp;mdash; Registrační video KRA Písek&lt;/h2>

&lt;div class='p'>Mám pro vás dvě zprávy: jednu dobrou a jednu špatnou. Dobrá zpráva je, že
„Klub robotiky a automatizace” z Písku dosáhl svého slibu a již natočil
zdolání jednoho schodu pavoučí platformou:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/A1QM6_73UWQ?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Špatná zpráva je, že včera skončila registrace a toto je v danou chvíli jediný
registrovaný soutěžící! Pokud jste pouze přehledli termín, tak nezoufejte,
vyplňte registrační formulář a raději mi i napiště mail.&lt;/div>

&lt;div class='p'>S Christianem jsme se předběžně domluvili, že v této situaci nasadím oponenta
já &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151109">&lt;/a>&lt;/div>

&lt;h2>9. listopadu 2015 &amp;mdash; Husky schody nedá&lt;/h2>

&lt;div class='p'>Minulý den jsme cvičně zkusili robota &lt;a href='/robots/husky/cs'>Husky&lt;/a>, jak se vypořádá
se schody &amp;hellip; a nedá to:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/zCQURTvGf6U?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;div class='p'>Mluvil jsem s Christianem a dostal mne jeden komentář, že pro některé robotiky
je úloha TTS jenom mechanická záležitost a není potřeba žádná inteligence. Asi
bych už teď odkryl karty na rok 2016, kdy je v plánu dělat „okruh”: robot po
jedněch schodech vyleze a po druhých se vrátí zpět a znova na start. Možná ta
navigace už nějakou inteligenci bude potřebovat. Proč to zmiňuji teď? No není
nad to vyzkoušet si mechaniku rok předem &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>Ještě poznámka, že v sobotu se soutěž bude prolínat s
&lt;a href='http://cafe-neu-romance.com/program/cnr-2015-lectures' class='external'>přednáškami&lt;/a> a
konkrétně např.
&lt;a href='http://cafe-neu-romance.com/program/cnr-2015-lectures/cnr-2015-lectures-jean-baptiste-mouret-%28fra%29-robots-that-can-adapt-to-damage-in-minutes' class='external'>
Jean-Baptiste Mouret&lt;/a>, který bude mluvit o zotavení robotů po nehodě, by mohl
být zajímavý &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151126">&lt;/a>&lt;/div>

&lt;h2>26. listopadu 2015 &amp;mdash; Pozvánka na zahájení festivalu&lt;/h2>

&lt;div class='p'>Dnes v 18h se koná slavnostní zahájení festivalu v Galerii NTK v Praze
Dejvicích. Detailní program naleznete
&lt;a href='http://cafe-neu-romance.com/program/cnr-2015-program' class='external'>zde&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/tour-the-stairs/2015/fpv-drone.jpg'>&lt;img src='/competitions/tour-the-stairs/2015/fpv-drone_t.jpg' alt='First Person View drona, co je v plánu jí tisknout na 3D tiskárně' title='First Person View drona, co je v plánu jí tisknout na 3D tiskárně' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/tour-the-stairs/2015/fpv-drone.jpg'>First Person View drona, co je v plánu jí tisknout na 3D tiskárně&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/tour-the-stairs/2015/robot-theater-lecture.jpg'>&lt;img src='/competitions/tour-the-stairs/2015/robot-theater-lecture_t.jpg' alt='Přednáška o robotickém divadle' title='Přednáška o robotickém divadle' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/tour-the-stairs/2015/robot-theater-lecture.jpg'>Přednáška o robotickém divadle&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/tour-the-stairs/2015/posthuman-research.jpg'>&lt;img src='/competitions/tour-the-stairs/2015/posthuman-research_t.jpg' alt='Posthuman Research Performance' title='Posthuman Research Performance' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/tour-the-stairs/2015/posthuman-research.jpg'>Posthuman Research Performance&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/tour-the-stairs/2015/makerslab.jpg'>&lt;img src='/competitions/tour-the-stairs/2015/makerslab_t.jpg' alt='MakersLab' title='MakersLab' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/tour-the-stairs/2015/makerslab.jpg'>MakersLab&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/tour-the-stairs/2015/interactive-lego.jpg'>&lt;img src='/competitions/tour-the-stairs/2015/interactive-lego_t.jpg' alt='Interaktivní robot z LEGO' title='Interaktivní robot z LEGO' class='border'  width='165' height='220'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/tour-the-stairs/2015/interactive-lego.jpg'>Interaktivní robot z LEGO&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://makerslab.cz/' class='external'>www.MakersLab.cz&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="151128">&lt;/a>&lt;/div>

&lt;h2>28. listopadu 2015 &amp;mdash; Výsledky a Lamia video&lt;/h2>

&lt;div class='p'>Dva soutěžící týmy není moc, ale přesto si myslím, že pro návštevníky NTK
Galerie to bylo mile zpestření &lt;span class='smile'>&lt;/span>. Pro mne pak bylo překvapení, když oba
roboti po posledním kole skončili stejně:&lt;/div>

&lt;div class='p'>&lt;table border="1">
	&lt;tr>
		&lt;th>Pořadí&lt;/th>
		&lt;th>Tým&lt;/th>
		&lt;th>1.rovné&lt;/th>
		&lt;th>1.točité&lt;/th>
		&lt;th>2.rovné&lt;/th>
		&lt;th>2.točité&lt;/th>
		&lt;th>3.rovné&lt;/th>
		&lt;th>3.točité&lt;/th>
		&lt;th>4.rovné&lt;/th>
		&lt;th>Celkem&lt;/th>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">1.-2.&lt;/td>
		&lt;td>&lt;b>KRA Písek&lt;/b>&lt;/td>
		&lt;td>4&lt;/td>
		&lt;td>2&lt;/td>
		&lt;td>5&lt;/td>
		&lt;td>2&lt;/td>
		&lt;td>5&lt;/td>
		&lt;td>2&lt;/td>
		&lt;td>6&lt;/td>
		&lt;td>26&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">1.-2.&lt;/td>
		&lt;td>&lt;b>Lamia&lt;/b>&lt;/td>
		&lt;td>2&lt;/td>
		&lt;td>2&lt;/td>
		&lt;td>3&lt;/td>
		&lt;td>3&lt;/td>
		&lt;td>3&lt;/td>
		&lt;td>10&lt;/td>
		&lt;td>3&lt;/td>
		&lt;td>26&lt;/td>
	&lt;/tr>
&lt;/table>&lt;/div>

&lt;h3>Lamia - Tour the Stairs 2015 (straight)&lt;/h3>

&lt;div class='p'>&lt;center> &lt;iframe width="640" height="360"
src="https://www.youtube.com/embed/q4me_P9ja3M?feature=player_detailpage"
frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;h3>Lamia - Tour the Stairs 2015 (twisted)&lt;/h3>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360"
src="https://www.youtube.com/embed/-a-FW6YXUgc?feature=player_detailpage"
frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="151201">&lt;/a>&lt;/div>

&lt;h2>1. prosinec 2015 &amp;mdash; Přehlídka robotiky na ČT art&lt;/h2>

&lt;ul>
&lt;li>&lt;a href='http://www.ceskatelevize.cz/ivysilani/1097206490-udalosti-v-kulture/215411000121128/obsah/437896-prehlidka-robotiky' class='external'>ceskatelevize.cz/ivysilani/1097206490-udalosti-v-kulture&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 362px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/tour-the-stairs/2015/ct-art.jpg'>&lt;img src='/competitions/tour-the-stairs/2015/ct-art_t.jpg' alt='KRA Písek na ČT art' title='KRA Písek na ČT art' class='border'  width='356' height='200'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/tour-the-stairs/2015/ct-art.jpg'>KRA Písek na ČT art&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="160107">&lt;/a>&lt;/div>

&lt;h2>7. leden 2016 &amp;mdash; minivideo&lt;/h2>

&lt;div class='p'>Zde jsou krátká videa od Christiana, co mi včera poslal:&lt;/div>

&lt;h3>KRA Písek
&lt;center>
&lt;iframe src="https://player.vimeo.com/video/150148266" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/h3>

&lt;h3>Lamia
&lt;center>
&lt;iframe src="https://player.vimeo.com/video/150147833" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/h3>

&lt;hr/>

&lt;div class='p'>&lt;a href='/competitions/tour-the-stairs/2015/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Výsledky</title>
	<link rel='alternate' href="http://localhost/competitions/robotour/2015/results/cs"/>
	<id>http://localhost/competitions/robotour/2015/results/cs</id>
	<updated>2015-09-09T00:00:00Z</updated>
	<author><name>Martin Dlouhý, foto Zdeněk Kakáč</name></author>
	<summary type='html'> Desátý ročník soutěže Robotour, který se konal v Písku, měl hned několik
specialit. Vedle parků se jezdilo i po městě a novému německému týmu z
Karlsruhe se rovnou podařilo vyhrát! &lt;span class='smile'>&lt;/span>
 </summary>
	<content type='html'> 
&lt;h1>Soutěž&lt;/h1>

&lt;h2>Účast&lt;/h2>

&lt;div class='p'>Přihlášeno bylo devět týmu a dorazilo devět týmů &lt;span class='smile'>&lt;/span>. Ve skutečnosti ale místo
AmBota, který měl den před soutěží vážné problémy s robotem a účast odvolal,
nastoupil další německý tým &lt;a href='https://www.youtube.com/watch?v=29UI9oZJr1c' class='external'>JECC2&lt;/a>. Jediným opravdovým nováčkem na Robotour byl
tým &lt;i>Kamaro Engineering&lt;/i>, který jsme potkali na soutěži
&lt;a href='/competitions/fieldrobot/2015/cs'>Field Robot Event 2015&lt;/a>, a po pravdě jsem úplně
nevěřil, že dorazí. Ale oni nejen dorazili, on jim dokonce robot jezdil a dobře
a s trochou štěstí i vyhráli!&lt;/div>

&lt;h2>Místo soutěže&lt;/h2>

&lt;div class='p'>To by nebyli Písečaci, aby si nevymysleli něco speciálního. &lt;span class='wink'>&lt;/span> Pod záminkou,
že desátý ročník si něco takového zaslouží, byly na roboty nastraženy opravdové
chuťovky. Jelo se částečně v parcích, resp. po parkových cestičkách, ale stejně
tak po silnici, dlažkách a površích s různou barvou. Nechyběl hřbitov, resp.
„pietní místo”, ze kterého jsem byl zprvu trošku nesvůj, ale ony se tam konají i
svatby a mládež si tam hrála fotbal, tak to se roboti k nebožtíkům chovali
řádově s větší úctou.&lt;/div>

&lt;div class='p'>Další vychytávka byl most pro pěší s bezbariérovým sjezdem na ostrov. A pokud
vám to stále přijde málo, tak co taková pasáž skrz dům, kterou se dostanete z
náměstí do Palackého sadů, kde se každoročně konává
&lt;a href='/competitions/robotem-rovne/cs'>Robotem rovně&lt;/a>?! &lt;span class='smile'>&lt;/span> Co mne potěšilo, že skoro
žádný tým si nestěžoval. Naopak si to několik týmů pochvalovalo, že soutěž byla
spojena i s prohlídkou města.&lt;/div>

&lt;h2>0. a 1. kolo&lt;/h2>

&lt;div class='p'>Nulté kolo, kde si opakujeme startovací proceduru, kupodivu nebylo tak
chaotické jako předešlé ročníky. Pro ostré 1. kolo pak platil stejný start a
cíl.&lt;/div>

&lt;div class='p'>Murphyho zákony v praxi jsme mohli vidět u &lt;i>Kamaro Engineering&lt;/i> &amp;mdash; projeli
rovnou parkovou cestičku, přejeli silnici, trefili branku na hřbitov, ale pak
se vyhybali stromu ze špatné strany a vyjeli z cesty. To bylo cvičné kolo. V
ostrém kole vůbec nevyjeli.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/kamaro.jpg'>&lt;img src='/competitions/robotour/2015/results/kamaro_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/kamaro2.jpg'>&lt;img src='/competitions/robotour/2015/results/kamaro2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/kamaro-gate.jpg'>&lt;img src='/competitions/robotour/2015/results/kamaro-gate_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;i>JECC2&lt;/i> jel bez GPS, zatím čistě na odometrii. Robot byl sotva pár hodin starý a
tak jsem byl mile překvapený, že celkem spolehlivě jezdil a plný sud mu nedělal
žádný problém.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/jecc2.jpg'>&lt;img src='/competitions/robotour/2015/results/jecc2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/jecc2b.jpg'>&lt;img src='/competitions/robotour/2015/results/jecc2b_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/jecc2c.jpg'>&lt;img src='/competitions/robotour/2015/results/jecc2c_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Loňský vítěz &lt;i>Smelý Zajko&lt;/i> nastoupil se svojí neuronovou sítí zase s novou dávkou odvahy.
Nově přibyl laserový scanner Hokuyo, který robota zrazoval od hřbitovní zdi. Po
několikaminutovém rozmýšlení s přejezdy mám tam jet, nemám tam jet, směr
udávaný kamerou nakonec vyhrál a v ostrém kole jenom &lt;i>Smelý Zajko&lt;/i> dokázal
projet branou, místem odpočinku a i vyjet brankou na druhé straně. Skončil ale
v jiné pasti: bílé auto na parkovišti. Barevně totiž bílá byla vyhodnocena jako
potenciální cesta, ale černé pneumatiky nikoliv. A tak robot osciloval a bílé
auto už neopustil. Příští ročník by tuto situaci prý měl už řešit nový LIDAR.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/smely-zajko3.jpg'>&lt;img src='/competitions/robotour/2015/results/smely-zajko3_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/smely-zajko2.jpg'>&lt;img src='/competitions/robotour/2015/results/smely-zajko2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/zajko-wall.jpg'>&lt;img src='/competitions/robotour/2015/results/zajko-wall_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ze smolařů bych zmínil ještě &lt;i>MarS&lt;/i>. Zde také hrála kamera primární roli při
navigaci a betonové sloupky v barvě cesty robota nalákaly a uvedly v kolizi.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/mars.jpg'>&lt;img src='/competitions/robotour/2015/results/mars_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/mars2.jpg'>&lt;img src='/competitions/robotour/2015/results/mars2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/column.jpg'>&lt;img src='/competitions/robotour/2015/results/column_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>A co &lt;i>E_liška&lt;/i> Radioklubu Písek? Jela pěkně, ale branku na hřbitov netrefila.
Chvili koketovala se hřbitovní zdí a pak jsme byli svědky AI v praxi (štouralové by
možná řekli štěstí), kdy přeplánovala a zvolila alternativu okolo hřbitova. A
to se jí téměř podařilo (selhání 46m před cílem).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/radioklub-pisek.jpg'>&lt;img src='/competitions/robotour/2015/results/radioklub-pisek_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/radioklub-pisek2.jpg'>&lt;img src='/competitions/robotour/2015/results/radioklub-pisek2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run1.jpg'>&lt;img src='/competitions/robotour/2015/results/run1_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>2. kolo&lt;/h2>

&lt;div class='p'>Druhé kolo natáčel Dan Polák ze vzduchu, tak se můžete podívat:&lt;/div>

&lt;div class='p'>&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/U-IakVdhsRg?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>&lt;/div>

&lt;div class='p'>Mně osobně to z těchto záběrů připadá jako nějaká hromadná havárie na robotické
dálnici. Měl to být snadný úsek, ale nebyl. Startovalo se na cyklistické stezce
podél řeky Otavy, mírně do zatáčky. Směr jih &amp;mdash; že by slunce byl problém? Na
cestě byly nakresleny pruhy pro cyklisty a pěší, problém? Nevím, v každém
případě robotům se moc nedařilo a první oblouk nezvládl nikdo. Nedostalo se tak
ani na první odbočku na most a druhou na ostrov. Chvíli to byl ale adrenalin,
když např. &lt;i>E_liška&lt;/i> špatně vyhodnotila změnu povrchu a odbočila vlevo. Vlevo totiž
byl příkrý svah dolu a řeka.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run2.jpg'>&lt;img src='/competitions/robotour/2015/results/run2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run2b.jpg'>&lt;img src='/competitions/robotour/2015/results/run2b_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run2c.jpg'>&lt;img src='/competitions/robotour/2015/results/run2c_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>3. kolo&lt;/h2>

&lt;div class='p'>Po zkušenostech z prvních dvou kol jsme se rozhodli roboty netrápit výjezdem k
Putimské bráně, ale posunout start až na pěší zónu za převýšením. Týmy i
baterky se v polední pauze posilnily a bylo to poznat. Někdo by řekl, že toto
byl snadný úsek, jiný by tvrdil pravý opak.&lt;/div>

&lt;div class='p'>Ono nebylo moc kam uhnout: vlevo byla zeď a vpravo domy. Ale nízký obrubník byl
smrt pro několik robotů. Také široký tmavý kanál mnoho robotů zastrašil a např.
MarS to otočil o 180 stupňů.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/mars-stop.jpg'>&lt;img src='/competitions/robotour/2015/results/mars-stop_t.jpg' alt='kanál jako překážka' title='kanál jako překážka' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2015/results/mars-stop.jpg'>kanál jako překážka&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/broken-eliska.jpg'>&lt;img src='/competitions/robotour/2015/results/broken-eliska_t.jpg' alt='zlomené kolo' title='zlomené kolo' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2015/results/broken-eliska.jpg'>zlomené kolo&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/ndteam3.jpg'>&lt;img src='/competitions/robotour/2015/results/ndteam3_t.jpg' alt='NDTeam' title='NDTeam' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2015/results/ndteam3.jpg'>NDTeam&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Tragické bylo toto kolo pro dosud vítěznou &lt;i>E_lišku&lt;/i> z týmu &lt;i>Radioklub
Písek&lt;/i>. Neustálým přejížděním zlomila kolo a zbytek soutěže už nebodovala.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/kamaro-run3.jpg'>&lt;img src='/competitions/robotour/2015/results/kamaro-run3_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/kamaro-run3b.jpg'>&lt;img src='/competitions/robotour/2015/results/kamaro-run3b_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/kamaro-near-bridge.jpg'>&lt;img src='/competitions/robotour/2015/results/kamaro-near-bridge_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Naopak bodovaly &lt;i>NDTeam&lt;/i> a nejvíce &lt;i>Kamaro Engineering&lt;/i>. Ti měli
problém s palubním počítačem, tak na robota přivázali notebook. A ten fungoval.
Po zkušenostech odstranili z kódu návrat z cíle zpět do startu &amp;hellip; a věřím, že
kdyby to neudělali, tak se do toho cíle nedostanou. &lt;span class='wink'>&lt;/span> Jako jediní tedy dojeli
mezi domy a úzkými uličkami po nábřeží až ke Kamennému mostu a tam skončili
(poloměr detekce cíle měli 10m, tj. skončili cca 8 metrů od přesné pozice).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run3.jpg'>&lt;img src='/competitions/robotour/2015/results/run3_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run3b.jpg'>&lt;img src='/competitions/robotour/2015/results/run3b_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run3c.jpg'>&lt;img src='/competitions/robotour/2015/results/run3c_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>4. kolo&lt;/h2>

&lt;div class='p'>To se startovalo na široké silnici, dlažba a do kopce. Tyto podmínky především
nevyhovovaly &lt;i>MarSu&lt;/i> &amp;mdash; malý robot neměl sílu utáhnout vozík s pivem a malá
kolečka se protáčela zaseklá ve spáře mezi dlažkami. Kamaro zase bodoval a
hodně. Myslel jsem, že pasáže do parku jsou dvě, ale oni našli třetí. Bohužel
byla hodně úzká se stolky restaurace po obou stranách a lokální indikace byly
nedostatečné. I tak cíl byl hned na druhé straně domu a celkově to stačilo na
přesvědčivé vítězství.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run4.jpg'>&lt;img src='/competitions/robotour/2015/results/run4_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/run4b.jpg'>&lt;img src='/competitions/robotour/2015/results/run4b_t.jpg' alt='' title='' class='border'  width='220' height='147'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/winners.jpg'>&lt;img src='/competitions/robotour/2015/results/winners_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Celkové bodování&lt;/h2>

&lt;div class='p'>&lt;table border="1">
	&lt;tr>
		&lt;th>Pořadí&lt;/th>
		&lt;th>Tým&lt;/th>
		&lt;th>1.kolo&lt;/th>
		&lt;th>2.kolo&lt;/th>
		&lt;th>3.kolo&lt;/th>
		&lt;th>4.kolo&lt;/th>
		&lt;th>Celkem&lt;/th>
	&lt;/tr>
	&lt;tr bgcolor="yellow">
		&lt;td align="center">1.&lt;/td>
		&lt;td>&lt;b>Kamaro Engineering&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>12&lt;/td>
		&lt;td>385&lt;/td>
		&lt;td>221&lt;/td>
		&lt;td>618&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">2.&lt;/td>
		&lt;td>&lt;b>Radioklub Písek&lt;/b>&lt;/td>
		&lt;td>148&lt;/td>
		&lt;td>74&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>-&lt;/td>
		&lt;td>222&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">3.&lt;/td>
		&lt;td>&lt;b>Smelý Zajko&lt;/b>&lt;/td>
		&lt;td>122&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>3&lt;/td>
		&lt;td>31&lt;/td>
		&lt;td>156&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">4.&lt;/td>
		&lt;td>&lt;b>ARBot&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>28&lt;/td>
		&lt;td>12&lt;/td>
		&lt;td>86&lt;/td>
		&lt;td>126&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">5.&lt;/td>
		&lt;td>&lt;b>NDTeam&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>2&lt;/td>
		&lt;td>75&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>77&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">6.&lt;/td>
		&lt;td>&lt;b>MarS&lt;/b>&lt;/td>
		&lt;td>44&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>2&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>46&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">7.&lt;/td>
		&lt;td>&lt;b>JECC2&lt;/b>&lt;/td>
		&lt;td>26&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>9&lt;/td>
		&lt;td>35&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">8.&lt;/td>
		&lt;td>&lt;b>Istrobotics&lt;/b>&lt;/td>
		&lt;td>4&lt;/td>
		&lt;td>-&lt;/td>
		&lt;td>17&lt;/td>
		&lt;td>2&lt;/td>
		&lt;td>23&lt;/td>
	&lt;/tr>
	&lt;tr>
		&lt;td align="center">9.&lt;/td>
		&lt;td>&lt;b>JECC&lt;/b>&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>1&lt;/td>
		&lt;td>0&lt;/td>
		&lt;td>0&lt;/td>
	&lt;/tr>
&lt;/table>&lt;/div>

&lt;h1>Workshop a PAIR'15&lt;/h1>

&lt;div class='p'>V neděli proběhl „klasický” workshop. Tentokrát byl v koordinaci se
studentskou konferencí &lt;a href='http://robotics.fel.cvut.cz/pair15/' class='external'>PAIR&amp;#039;15&lt;/a>
(Planning in Artificial Intelligence and Robotics) organizovanou ČVUT FEL
Praha. Překryv byl myslím užitečný pro obě strany: studenti se dozvěděli něco
ze zkušeností účastníků Robotour a ti zase něco ze současného vědeckého bádání.
Zvaná přednáška byla o Roboautu od Honzy Najvárka.&lt;/div>

&lt;h1>Technologie&lt;/h1>

&lt;div class='p'>Ze zajímavých technologií, co některé týmy letos zkoušely, byly:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://en.wikipedia.org/wiki/Odroid' class='external'>Odroid&lt;/a> (NDTeam, Istrobotics)&lt;/li>

&lt;li>laser scanner z vysavače (Istrobotics, Kamaro Engineering)&lt;/li>

&lt;li>&lt;a href='https://en.wikipedia.org/wiki/Field-programmable_gate_array' class='external'>FPGA&lt;/a> (ARBot)&lt;/li>

&lt;li>upravené BLDC motory v kole (Radioklub písek)&lt;/li>
&lt;/ul>

&lt;h1>Roboauto&lt;/h1>

&lt;div class='p'>Milé zpestření soutěže byla návštěva Roboauta z Brna. Možná je pamatujete z
dřívějších ročníků, kdy jejich roboti končili na předních pozicích. Teď už
experimentují s upraveným autem Hundai i40 a malé demo předváděli po skupinkách
robotikům v Písku. Pokud jste to propásli, netruchlete &amp;mdash; budete mít ještě
šanci na &lt;i>Robotem rovně 2016&lt;/i>, kde je předběžná domluva účasti autonomního
auta, které by samo projelo parkem &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/roboauto.jpg'>&lt;img src='/competitions/robotour/2015/results/roboauto_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/roboauto2.jpg'>&lt;img src='/competitions/robotour/2015/results/roboauto2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/roboauto-back.jpg'>&lt;img src='/competitions/robotour/2015/results/roboauto-back_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/roboauto-in.jpg'>&lt;img src='/competitions/robotour/2015/results/roboauto-in_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/roboauto-side.jpg'>&lt;img src='/competitions/robotour/2015/results/roboauto-side_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/roboauto-run1.jpg'>&lt;img src='/competitions/robotour/2015/results/roboauto-run1_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h1>Plány na Robotour 2016&lt;/h1>

&lt;div class='p'>Pokud vše dobře dopadne, tak příští ročník bude v Německu
(&lt;a href='http://www.openstreetmap.org/relation/959809#map=17/48.83164/12.95056&amp;amp;layers=N' class='external'>Deggendorf&lt;/a>)
a plánujeme i drobné změny pravidel. Konkrétně bodované nakládání a vykládání
sudu (50 bodů, pokud robot následně projede startovní čárou). Vedle sudu budou
povoleny i 500ml plechovky, které si ale robot musí sám naložit (5 bodů za
plechovku, max 10ks). Zachováme otočené pořadí startů (nejlepší startuje na
konci).&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/hexacopter.jpg'>&lt;img src='/competitions/robotour/2015/results/hexacopter_t.jpg' alt='kameraman' title='kameraman' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2015/results/hexacopter.jpg'>kameraman&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/istrobotics.jpg'>&lt;img src='/competitions/robotour/2015/results/istrobotics_t.jpg' alt='Istrobotics' title='Istrobotics' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2015/results/istrobotics.jpg'>Istrobotics&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/jecc.jpg'>&lt;img src='/competitions/robotour/2015/results/jecc_t.jpg' alt='JECC' title='JECC' class='border'  width='220' height='146'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotour/2015/results/jecc.jpg'>JECC&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/jeccb.jpg'>&lt;img src='/competitions/robotour/2015/results/jeccb_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/jeccc.jpg'>&lt;img src='/competitions/robotour/2015/results/jeccc_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/arbot.jpg'>&lt;img src='/competitions/robotour/2015/results/arbot_t.jpg' alt='' title='' class='border'  width='220' height='147'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/arbot2.jpg'>&lt;img src='/competitions/robotour/2015/results/arbot2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/ndteam.jpg'>&lt;img src='/competitions/robotour/2015/results/ndteam_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/ndteam2.jpg'>&lt;img src='/competitions/robotour/2015/results/ndteam2_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/ndteam-istrobotics.jpg'>&lt;img src='/competitions/robotour/2015/results/ndteam-istrobotics_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/robots.jpg'>&lt;img src='/competitions/robotour/2015/results/robots_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/taking-pictures.jpg'>&lt;img src='/competitions/robotour/2015/results/taking-pictures_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>Poděkování&lt;/h2>

&lt;div class='p'>Ještě jednou bych velice rád poděkoval Radioklubu Písek, za přípravu a skvělou
realizaci výročního ročníku Robotour. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>Pokud chcete soutěž nějakým způsobem podpořit nebo máte nějaké doplnění/dotaz,
tak se nám prosím ozvěte pomocí &lt;a href='/competitions/robotour/2015/results/cs#email'>kontaktního formuláře&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/results/noname.jpg'>&lt;img src='/competitions/robotour/2015/results/noname_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>
 </content>
</entry>
<entry>
	<title>Představení týmů</title>
	<link rel='alternate' href="http://localhost/competitions/robotour/2015/teams/cs"/>
	<id>http://localhost/competitions/robotour/2015/teams/cs</id>
	<updated>2015-08-04T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Vítáme nový tým KaMaRo Engineering (známe z Field Robot Event), nové stroje
(ARBot, JECC) a všechny vytrvalce &lt;span class='smile'>&lt;/span>.  Kdy a kde roboty uvidíte?
&lt;b>Centrum města Písek, 5. září 2015&lt;/b>.  Hromadné starty robotů v &lt;b>10h, 11h,
14h a 15h&lt;/b>.
 </summary>
	<content type='html'> 
&lt;h1>Týmy&lt;/h1>

&lt;h1>&lt;a href='https://www.youtube.com/playlist?list=PL2gPpyBs1e23JrcQralHGYVZ8UIHfuWcS' class='external'>YouTube playlist všech registrací&lt;/a>&lt;/h1>

&lt;h2>&lt;a href='http://ambot6.webnode.cz/' class='external'>AmBot&lt;/a> (CZ)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/ambot.jpg'>&lt;img src='/competitions/robotour/2015/teams/ambot_t.jpg' alt='' title='' class='border'  width='320' height='177'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='https://youtu.be/y_J8i0tHYjw' class='external'>https://youtu.be/y_J8i0tHYjw&lt;/a>&lt;/div>

&lt;div class='p'>Robot Ferda pro Robotour 2015 je upravené dětské elektrické autíčko 
("ride-on"). Doplňkem je kontrolér na bázi Arduina s ATmega2560, který 
ovládá motory autíčka, využívá magnetometr jako kompas, tři sonary pro 
detekci překážek, čte data z externího GPS přijímače a komunikuje s 
bluetooth převodníkem (aby mohl reagovat na příkazy z nadřazeného 
systému). Tím nadřazeným systémem je smartphone s autorskou Android 
aplikací (RoboNav) pro GPS navigaci podle mapy (získané z OpenStreetMap) 
doplněnou o vizuální navigaci podle obrazu z kamery smartphonu (pro 
udržení se na cestě).&lt;/div>

&lt;h2>&lt;a href='http://www.arbot.cz' class='external'>ARBot&lt;/a> (CZ)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/arbot.jpg'>&lt;img src='/competitions/robotour/2015/teams/arbot_t.jpg' alt='' title='' class='border'  width='320' height='178'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='https://youtu.be/DsKR7kcO96o' class='external'>https://youtu.be/DsKR7kcO96o&lt;/a>&lt;/div>

&lt;div class='p'>Robot je řízen vývojovou deskou Zedboard s SoC Zynq 7020 od Xilinx. K 
dispozici je 512 MB RAM, 32 GB SD, srdcem je dvoujádrový ARM Cortex A9 + 
NEON na 600 MHz a hlavně hradlové pole o 85 tisících logických jednotkách. 
Zedboard běží na Linuxu a jako hlavní programovací platforma je použito 
mono a jazyk C#.&lt;/div>

&lt;div class='p'>Podovzek je diferenciální s 3. pasivním kolem. Modelářská kola o průměru 
17 cm a dva motory PG36555126000-50.9K s enkodéry řízené profesionální 
jednotkou SDC2160 od Robotequ poskytují potřebnou trakci.&lt;/div>

&lt;div class='p'>Pro lepší odečet pozice jsou použity dva optické odometry založené na 
ADNS 3080. Dalším smyslem je "hmat". Robot má dva taktilní FSR senzory 
integrované v předním nárazníku.&lt;/div>

&lt;div class='p'>Osvědčená AHRS VN-100 od VectorNav poskytuje informaci o orientaci 
robotu. Globální informaci o pozici dodává GPS uBlox NEO 7M.&lt;/div>

&lt;div class='p'>Robot je osazen dvěma sonary HC-SR04, které je možné natáčet pomocí 
serv.&lt;/div>

&lt;div class='p'>Serva ovládá jednotka SSC-32.&lt;/div>

&lt;div class='p'>Robot má stereoskopickou kameru s čipy Aptina MT9V032, které mají 
globální závěrku a jsou schopny pracovat v HDR režimu. Kamera je 
pohyblivá ve dvou osách pomocí serv.&lt;/div>

&lt;div class='p'>Energii dodávají 4 LiFePo články o kapacitě 14.5 Ah chráněné SBM.&lt;/div>

&lt;div class='p'>Šasí je postaveno z letecké 2 mm překližky a smrkových nosníků 7 mm. 
Prostě modelařina. Jednotlivé dily byly řezány laserem.&lt;/div>

&lt;h2>Istrobotics (SK)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/istrobotics.jpg'>&lt;img src='/competitions/robotour/2015/teams/istrobotics_t.jpg' alt='' title='' class='border'  width='320' height='178'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='https://youtu.be/rTmW52ScBX0' class='external'>https://youtu.be/rTmW52ScBX0&lt;/a>&lt;/div>

&lt;div class='p'>Zaklad robota je upraveny RC model TRAXXAS E-MAXX (3903) vybaveny 
kamerou, GPS, sonarmi HC-SR04, IMU s 3D kompasom a magnetickym IRC. 
Zakladne senzory spracovava Arduino mega. Oproti minulemu roku sme 
nahradili tablet, ktory spracovava obraz a GPS za Odroid C1 s linuxom. 
Robot je naprogramovany v C++ a OpenCV.&lt;/div>

&lt;h2>&lt;a href='http://www.jecc.de' class='external'>JECC&lt;/a> (DE)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/jecc.jpg'>&lt;img src='/competitions/robotour/2015/teams/jecc_t.jpg' alt='' title='' class='border'  width='320' height='178'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='https://youtu.be/0WH-PPUnL6c' class='external'>https://youtu.be/0WH-PPUnL6c&lt;/a>&lt;/div>

&lt;ul>
&lt;li>rozpoznávání obrazu pomocí webové kamery&lt;/li>

&lt;li>SICK PLS 101 pro detekci překážek&lt;/li>

&lt;li>embedded pc modul s Intel Core i7&lt;/li>

&lt;li>DRV8432 motor driver&lt;/li>
&lt;/ul>

&lt;h2>&lt;a href='http://www.kamaro.kit.edu' class='external'>Kamaro Engineering&lt;/a> (DE)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/kamaro.jpg'>&lt;img src='/competitions/robotour/2015/teams/kamaro_t.jpg' alt='' title='' class='border'  width='320' height='178'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='https://www.youtube.com/watch?v=txRV6iRba_w' class='external'>https://www.youtube.com/watch?v=txRV6iRba_w&lt;/a>&lt;/div>

&lt;div class='p'>Našeho robota jsme si udělali celého sami, od mechaniky až po software. Robot
má čtyři kola, dvě nezávisle zatáčené osy, jeden hlavní motor a váži cca 40kg.
Robot byl především vyvíjený pro zemědělskou soutěž
&lt;a href='/competitions/fieldrobot/cs'>Field Robot Event&lt;/a>. Spodní část SW je napsaná v
C++, vyšší pak v C# a Javě. Hlavními senzory jsou dva LIDARy a kamera.&lt;/div>

&lt;h2>&lt;a href='http://cyber.felk.cvut.cz/research/theses/detail.phtml?id=484' class='external'>MarS&lt;/a>&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/mars.jpg'>&lt;img src='/competitions/robotour/2015/teams/mars_t.jpg' alt='' title='' class='border'  width='320' height='178'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='https://www.youtube.com/watch?v=xDHrKi1u2z0' class='external'>https://www.youtube.com/watch?v=xDHrKi1u2z0&lt;/a>&lt;/div>

&lt;div class='p'>Robot je postaven na podvozku terénního RC modelu s nahonem 4x4.&lt;/div>

&lt;div class='p'>K lokalizaci se využívají data z GPS a kompasu, která umožní následnou 
lokalizaci na mřížce. Z mřížky se vybere kandidát s nejvyšší 
pravděpodobností, který zároveň jistým poměrem převyšuje všechny 
ostatní, čímž je zajištěn výběr až ve chvíli, kdy si je robot svou 
polohou opravdu jistý.&lt;/div>

&lt;div class='p'>Z vybraného vítěze se naplánuje cesta do cíle algoritmem A*.&lt;/div>

&lt;div class='p'>Při průjezdu cesty se robot drží na cestě díky zpracování obrazu z čelní 
kamery. Zároveň pomocí odometrie a GPS odhaduje vzdálenost od 
křižovatky. Křižovatky řeší jednoduchým wall-following algoritmem, 
případně koriguje směr na základě azimutu.&lt;/div>

&lt;h2>NDTeam (CZ)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/ndteam.jpg'>&lt;img src='/competitions/robotour/2015/teams/ndteam_t.jpg' alt='' title='' class='border'  width='320' height='178'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='http://youtu.be/2vXgi8JW6GU' class='external'>http://youtu.be/2vXgi8JW6GU&lt;/a>&lt;/div>

&lt;div class='p'>Robot Robík:&lt;/div>

&lt;ul>
&lt;li>hmotnost cca 20 kg bez sudu&lt;/li>

&lt;li>řízen vlastní řídící jednotkou na bázi Cortex M3 (LPC1765)&lt;/li>

&lt;li>9 DOF AHRS, GPS&lt;/li>

&lt;li>Napájení 8S1P 5Ah LiPol&lt;/li>

&lt;li>Credit card sized Linux computer Odroid U3 pro zpracování videa&lt;/li>

&lt;li>OpenCV pro rozpoznání cesty&lt;/li>

&lt;li>5x sonar pro vyhýbání překážkám&lt;/li>
&lt;/ul>

&lt;h2>&lt;a href='http://www.kufr.cz' class='external'>Radioklub Písek&lt;/a> (CZ)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/radioklub-pisek.jpg'>&lt;img src='/competitions/robotour/2015/teams/radioklub-pisek_t.jpg' alt='' title='' class='border'  width='320' height='239'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='https://youtu.be/Elczrq4C2Rw' class='external'>https://youtu.be/Elczrq4C2Rw&lt;/a>&lt;/div>

&lt;div class='p'>E-liška má přibližné rozměry 95x60x48 cm a hmotnost je zhruba 40 kg. 
Palubní napětí 24V zajišťují 2 gelové akumulátory 12V/18Ah. E-liška má 
odpružený čtyřkolový podvozek s Ackermannovým řízením a pohonem všech 
čtyř kol, každé samostatnou pohonnou jednotkou.Pro letošní ročník jsme 
nahradili pohony zadních kol  dvěma BLDC . Pro orientaci využíváme Lidar 
Sick , GPS a 9 DOF inerciální jednotku. Hlavní řízení robota zajišťuje 
notebook s operačním systémem Linux-Debian, řízení pohonů zajišťuje 
vlastní modul s STM32. Výkonové řízení řeší vlastní konstrukce H-můstků 
a 3f řízení BLDC motorů. Řídící navigační program je napsán v Pythonu .&lt;/div>

&lt;h2>&lt;a href='http://dai.fmph.uniba.sk/projects/smelyzajko/' class='external'>Smely Zajko&lt;/a> (SK)&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/teams/smely-zajko.jpg'>&lt;img src='/competitions/robotour/2015/teams/smely-zajko_t.jpg' alt='' title='' class='border'  width='320' height='178'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>youtube        &lt;a href='http://youtu.be/aixAzwEohaI' class='external'>http://youtu.be/aixAzwEohaI&lt;/a>&lt;/div>

&lt;div class='p'>Parallax (Motor Mount and Wheel Kit), encoders, 2xHB25 motor drivers
Sbot board (based on AVR ATmega128, low-level control board)
PC ASUS UL30V (main control computer)
5x SRF-08 (ultrasonic sensors)
GPS NaviLock NL-302U USB SiRF III
Compass with tilt compensation (HMC6343)
AVR ATmega8 (compass driver)
Camcorder Panasonic SDR-T50 or webcam
usual usb hub
Power: HAZE HZS 12V 9Ah
handmade wood &amp;amp; aluminium base
red power switch and power circuitry&lt;/div>

&lt;hr/>

&lt;div class='p'>Pokud chcete soutěž nějakým způsobem podpořit nebo máte nějaké doplnění/dotaz,
tak se nám prosím ozvěte pomocí &lt;a href='/competitions/robotour/2015/teams/cs#email'>kontaktního formuláře&lt;/a>.&lt;/div>
 </content>
</entry>
<entry>
	<title>Field Robot 2015</title>
	<link rel='alternate' href="http://localhost/competitions/fieldrobot/2015/cs"/>
	<id>http://localhost/competitions/fieldrobot/2015/cs</id>
	<updated>2015-06-25T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Letos jsme se soutěže &lt;i>Field Robot Event&lt;/i> účastnili hned se dvěma roboty:
Eduro a FireAnt. Chodící robot byla spíše taková provokace, která měla připoutat
pozornost a ukázat, že polní robot může vypadat docela jinak. Eduro pak byla
„osvědčená záloha”. Oba roboti svůj osud naplnili a tak jsme do Prahy
přivezli i nějaké medaile &amp;hellip;
 </summary>
	<content type='html'> 
&lt;div class='p'>Přiznám se, že letos se mi na FREčko do Slovinska (kousek od Mariboru, cca
550km) moc nechtělo. V kombinaci s „trénovacími předvaděčkami” (alias
&lt;i>Robotický cirkus&lt;/i>) na akcích &lt;a href='http://dnipola.sk/' class='external'>dnipola.sk&lt;/a> a
&lt;a href='http://nasepole.cz/' class='external'>nasepole.cz&lt;/a> mi &lt;a href='http://fre2015.um.si/' class='external'>fre2015&lt;/a>
sežralo polovinu roční dovolené. Navíc Eduro dosáhlo svého vrcholu loni, kdy
zvítězilo v celkové soutěži &amp;hellip; co od toho chtít víc?&lt;/div>

&lt;div class='p'>Asi hlavní motivací bylo oprášit kontakty na lidi, kteří se robotizací
zemědělství zabývají. Akce se zúčastnily zhruba dvě desítky týmů z různých
Evropských univerzit, tj. spousta nadšených studentů a zkušených mentorů.&lt;/div>

&lt;div class='p'>Jsem rád, že si Jakub vzal za vlastní přípravu &lt;a href='/robots/fireant/cs'>FireAnta&lt;/a> a
já se staral pouze o &lt;a href='/robots/eduro/cs'>&lt;span class='en'>Eduro&lt;/span>&lt;/a>. Jako výzva mi pi přišla hlavně
třetí úloha: detekce a mapování plevele (na hnědo nastříkaná kukuřice).&lt;/div>

&lt;hr/>

&lt;h1>FireAnt&lt;/h1>

&lt;div class='p'>Rozpoznat zelenou kukuřici od zelené trávy vůbec nebylo triviální:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/fireant-field-view.jpg'>&lt;img src='/competitions/fieldrobot/2015/fireant-field-view_t.jpg' alt='Pohled na políčko z RasPI kamery' title='Pohled na políčko z RasPI kamery' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/fieldrobot/2015/fireant-field-view.jpg'>Pohled na políčko z RasPI kamery&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Soutěž se totiž letos nekonala na klasickém poli, ale na „zámeckém trávníku”,
kde byly vyvrtány díry pro květináče s kukuřicí.&lt;/div>

&lt;div class='p'>Jakub pro rozpoznání kukuřice nakonec použil statistiku kontur: musí být
dostatečně velké a když jich je více vlevo zatoč vpravo a obráceně. K mému
překvapení tento přístup při testování fungoval překvapivě dobře &lt;span class='smile'>&lt;/span>. V ostrých
jízdách to bylo horší, ale pak se ukázalo, že jednou v kódu „hnil” nějaký
testovací krok a podruhé měl mravenec mechanické problémy s předním levým
servem. Úspěšná autonomní navigace bez dotyku byla tedy až ve třetí úloze (viz
&lt;a href='http://youtu.be/94Z8gC6_CHU' class='external'>video&lt;/a>).&lt;/div>

&lt;div class='p'>Během soutěžních dní Jakub na mravencovi intenzivně pracoval a finální
algoritmus prý používal tři druhy korekce: mírné otočení s krokem vpřed, větší
otočení s krokem vpřed a velké otočení s úkrokem stranou. Kód je na
&lt;a href='https://github.com/tajgr/RasPI_and_robots/tree/master/fire_ant' class='external'>githubu&lt;/a>, ale
poslední verze je prý ještě pouze na mravencovi.&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://youtu.be/rACIY9DtFf8' class='external'>video z testování&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;h1>Eduro&lt;/h1>

&lt;div class='p'>&lt;a href='/robots/eduro/cs'>&lt;span class='en'>Eduro&lt;/span>&lt;/a> jelo na 80% pomocí loňského kódu. Novinka byl skript
mapování pomocí
&lt;a href='https://github.com/robotika/eduro/blob/master/frelog2map.py' class='external'>frelog2map.py&lt;/a>,
který ze zalogovaných dat z laserového dálkoměru a výsledků zpracování kamery
vytvořil mapku:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/eduro-map.png'>&lt;img src='/competitions/fieldrobot/2015/eduro-map_t.png' alt='Eduro mapka' title='Eduro mapka' class='border'  width='320' height='207'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/fieldrobot/2015/eduro-map.png'>Eduro mapka&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Vyžadovaný formát byl TIFF, rozlišení je pixel=1cm a červené tečky jsou
poničené hnědé kukuřice. Eduro, na rozdíl od většiny robotů, jezdilo ob řádek a
mělo vlastně nejlepší mapovací čas 1m:20s (který se nepočítal &lt;span class='wink'>&lt;/span>).&lt;/div>

&lt;div class='p'>Druhá větší změna, kterou jsme ladili z úterka na středu, byla detekce překážky.
Listy kukuřice občas zcela zakrývaly výhled laseru a aby robot zbytečně
nepanikařil, tak byla přidána detekce výstražného kuželu. Otázka byla, jak
tyto dva zdroje zkombinovat, což se samozřejmě projevilo v ostré jízdě (viz
&lt;a href='http://youtu.be/U-0mmlXkZUQ' class='external'>video&lt;/a>), kdy Eduro sice detekovalo spousta
červené, ale zároveň dostatek místa na objížďku.&lt;/div>

&lt;hr/>

&lt;h1>Průběh soutěže&lt;/h1>

&lt;h2>Basic Navigation&lt;/h2>

&lt;div class='p'>V první úloze měli roboti systematicky projíždět jednotlivé řádky. Řádky lehce
připomínaly symbol blesku (viz foto).  &lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/field-task1.jpg'>&lt;img src='/competitions/fieldrobot/2015/field-task1_t.jpg' alt='políčko pro Basic
Navigation' title='políčko pro Basic
Navigation' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/fieldrobot/2015/field-task1.jpg'>políčko pro Basic
Navigation&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>. Mravenec měl velké problémy, přestože před tím podobnou řádku
prošel bez dotyku, a tak počet trestných bodů převýšil odkráčené metry.&lt;/div>

&lt;div class='p'>Pro Eduro to byla „klasika”, ale &amp;hellip; vyrazilo a hned v prvním řádku špatně
odbočilo. Restart naštěstí fungoval a pak už jelo bez problémů, čistě, bez
zničené kukuřice a doteků. Bodově se umístilo na šestém místě a já začal silně
pochybovat, že letos přivezeme nějakou cenu &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/results-task1.jpg'>&lt;img src='/competitions/fieldrobot/2015/results-task1_t.jpg' alt='výsledky první úlohy' title='výsledky první úlohy' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/fieldrobot/2015/results-task1.jpg'>výsledky první úlohy&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Mám pocit, že Jurij (organizátor) říkal, že první řádka je o něco užší, ale
neověřoval jsem to. Po 180 stupňové otočce Eduro směřovalo do kukuřice a menší
rozdíl byl o řádek dále:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/eduro-bad-turn.png'>&lt;img src='/competitions/fieldrobot/2015/eduro-bad-turn_t.png' alt='špatné otočení na konci prvního řádku' title='špatné otočení na konci prvního řádku' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/fieldrobot/2015/eduro-bad-turn.png'>špatné otočení na konci prvního řádku&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Z logů to odhadem vypadá na cca &lt;b>5*9 + 14 + 7&lt;/b> ujetých metrů, tj. 66 bodů - 2
z dotek. Oficiálně 62.5m a lepší Cornstar (domácí tým) měl 82m.&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://youtu.be/eHcy1WS4UGo' class='external'>Video z Basic Navigation (Standa)&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/nNTwqe6NSVQ' class='external'>Video z Basic Navigation (Petr)&lt;/a>&lt;/li>
&lt;/ul>

&lt;h2>Advanced Navigation&lt;/h2>

&lt;div class='p'>Průběh druhé úlohy, kdy roboti měli jet podle vzoru &lt;b>S-3L-1R-2L-3L-5R-F&lt;/b>, jsem
už nakousl (letos dokonce předem prozradili, ve které řádce bude překážka a jak
bude vypadat). FireAnt měl těžké problémy, protože běžel se špatným testovacím
kódem &amp;mdash; extra úkrok po každé korekci.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/results-task2.jpg'>&lt;img src='/competitions/fieldrobot/2015/results-task2_t.jpg' alt='výsledky druhé úlohy' title='výsledky druhé úlohy' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/fieldrobot/2015/results-task2.jpg'>výsledky druhé úlohy&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Eduro startovalo deváté a tak jsem viděl &lt;i>Banat robot&lt;/i>, se strategií, která
už mne několik let vytáčí: na konci řádku robota vzít a posunout ho do dalšího
řádku podle vyžadovaného vzoru. Banati to navíc dotáhly do stavu, že robot na
konci řádku automaticky zastavoval, aby se snáze chytal. 66 bodovaných metrů!
Letos za špatný přejez byla malá penalizace a tak můj interní cíl byl porazit
tuto „advanced” technologii. Štěstí nám přálo a přestože Eduro ujelo „jen”
59m (ono těch 66m byla asi celá trasa), tak s trestnými body za dotek Banaty
porazilo a celkově získalo druhé místo &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://youtu.be/U-0mmlXkZUQ' class='external'>video Eduro (Standa)&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/xXJ_vLpH9Q0' class='external'>video Eduro (Petr)&lt;/a>&lt;/li>
&lt;/ul>

&lt;h2>Weed Detection&lt;/h2>

&lt;div class='p'>Ve třetí úloze jsem měl radost z obou robotů. FireAnt šel bez jediného dotyku
(servo z nohy kluci prohodili za servo na ocasu), ušel několik metrů a dokonce
analyzoval průměrnou barvu jednotlivých velkých kontur, klasifikoval obarvené
kukuřice a vytvářel mapku.&lt;/div>

&lt;div class='p'>Eduro jelo bez problémů a po zpětné analýze logů zjištuji, že detekovalo
všechny nastříkané kukuřice! Bylo tam ale i několik (4) chybných detekcí, kdy
teď na obrázcích vidím nohy rozhodčích &amp;mdash; říkali, že šestou řadu kukuřice
budou ignorovat (tam přímo rozhodčí šel vedle robota a v kombinaci s ostrým
stínem vytvářel „temnou kukuřici”). Jak to nakonec vyhodnotili netušíme, ale
třetí místo je pěkné &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Včera jsem koukal na obrázky a od této úlohy jsou všechny rozmazané. Že by
nějaký záškodník?! &lt;span class='wink'>&lt;/span> &amp;hellip; asi se povolil šroubek u ostření &amp;hellip; ale proč bych
na to šahal &amp;hellip; nevím. Naší detekci to nijak neovlivnilo, ale obrázky nejsou
moc pěkné na prezentaci :(.Tak alespoň těch 6 úspěšných detekcí (z vícenásobné
detekce vybírám tu, kde si byl nejjistější):&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/cam150617_144404_013.jpg'>&lt;img src='/competitions/fieldrobot/2015/cam150617_144404_013_t.jpg' alt='' title='' class='border'  width='220' height='176'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/cam150617_144407_022.jpg'>&lt;img src='/competitions/fieldrobot/2015/cam150617_144407_022_t.jpg' alt='' title='' class='border'  width='220' height='176'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/cam150617_144435_097.jpg'>&lt;img src='/competitions/fieldrobot/2015/cam150617_144435_097_t.jpg' alt='' title='' class='border'  width='220' height='176'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/cam150617_144444_120.jpg'>&lt;img src='/competitions/fieldrobot/2015/cam150617_144444_120_t.jpg' alt='' title='' class='border'  width='220' height='176'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/cam150617_144505_176.jpg'>&lt;img src='/competitions/fieldrobot/2015/cam150617_144505_176_t.jpg' alt='' title='' class='border'  width='220' height='176'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&amp;hellip; a ty špatné:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/cam150617_144432_089.jpg'>&lt;img src='/competitions/fieldrobot/2015/cam150617_144432_089_t.jpg' alt='' title='' class='border'  width='220' height='176'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/cam150617_144437_101.jpg'>&lt;img src='/competitions/fieldrobot/2015/cam150617_144437_101_t.jpg' alt='' title='' class='border'  width='220' height='176'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/cam150617_144504_172.jpg'>&lt;img src='/competitions/fieldrobot/2015/cam150617_144504_172_t.jpg' alt='' title='' class='border'  width='220' height='176'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ještě bych měl zmínit, že pro mapování jsem poprvé použil kompas (díky Standovi
&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/results-task3.jpg'>&lt;img src='/competitions/fieldrobot/2015/results-task3_t.jpg' alt='hodnocení třetího úkolu' title='hodnocení třetího úkolu' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/fieldrobot/2015/results-task3.jpg'>hodnocení třetího úkolu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table> za nápovědu &lt;span class='smile'>&lt;/span>). Přemýšlel
jsem, jak ty jinak náhodně překřížené řádky narovnat a použití, již napsaného,
Kalmanova filtru s kompasem byla nejpřímější cesta. Z dřívějších zkušeností
víme, že s dešťníčkem se kompas choval úplně jinak, tak jsem měl připravené dvě
různé „kalibrace” (jen pro nakreslení mapy z logu, pro navigaci se
nepoužíval).&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://youtu.be/crd-S0aP5Ww' class='external'>Video Eduro (Standa)&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/BhtivN5pGco' class='external'>Video Eduro (Petr)&lt;/a>&lt;/li>
&lt;/ul>

&lt;h2>Free Style&lt;/h2>

&lt;div class='p'>Toto byla úloha, která se mi líbila nejvíce, ale porotu nijak neoslovila. Ono
se sice později ukázalo, že mezivýsledky neměly být veřejné (naše ukázka byla
úplně první) a sudí by je bývali upravovali/škálovali podle dalších, ale na mé
depce to už nic nezměnilo &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>Předváděli jsme současně všechny roboty co jsme měli: FireAnt pochodoval „v
řádku”, tj. překážky ho mohli vychýlit z rovné trasy. Eduro se naučilo nový
tanec
&lt;a href='https://github.com/robotika/eduro/blob/master/spinner.py' class='external'>spinner.py&lt;/a>, kdy
místo následování objektu kolem něho kroužilo. Konečně &lt;a href='/robots/heidi/cs'>Heidi&lt;/a>
to vše pozorovala shora a snažila se navigovat na značku na Eduru. Možná trošku
chaos?? &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>Aby to nebyla taková nuda, tak se vše odehrávalo v proluce mezi zámkem a novou
budovou, takže pro dronu s indoor krytem tam nezdravě foukalo. A na celé akci
bylo wifin, že se to nedalo spočítat &amp;mdash; spojení s dronou vypadlo asi 10x. Jaký
to byl „tanec” je vidět z logu Heidi (růžové body odpovídají úspěšné detekci
přistávací plochy, přerušovaná čára výpadek spojení):&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/drone-dance.png'>&lt;img src='/competitions/fieldrobot/2015/drone-dance_t.png' alt='Tanec drony' title='Tanec drony' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/fieldrobot/2015/drone-dance.png'>Tanec drony&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>a určitou představu získáte i z Petrova videa:&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/6pJ22xGdMLg?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;h1>Závěr&lt;/h1>

&lt;div class='p'>Akce se mi nakonec líbila &amp;mdash; ano, přispělo k tomu &lt;b>druhé místo&lt;/b> v celkovém
hodnocení Edura, o které jsme se dělili s Dánským týmem (proto ta pilka na
rozříznutí trofeje) a všeobecně velký zájem o FireAnta (dokonce se nám ozvala
BBC, ale asi z toho nic nebude). Líbil se mi zámeček, okolí, příjemní lidé,
dobře zorganizované &amp;hellip;  a nářky nad naší školou si nechám na jindy &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;h1>Foto&lt;/h1>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/castle.jpg'>&lt;img src='/competitions/fieldrobot/2015/castle_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/castle2.jpg'>&lt;img src='/competitions/fieldrobot/2015/castle2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/castle-front.jpg'>&lt;img src='/competitions/fieldrobot/2015/castle-front_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/czu-team.jpg'>&lt;img src='/competitions/fieldrobot/2015/czu-team_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/czu-work-area.jpg'>&lt;img src='/competitions/fieldrobot/2015/czu-work-area_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/maize-with-weeds.jpg'>&lt;img src='/competitions/fieldrobot/2015/maize-with-weeds_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/our-robots.jpg'>&lt;img src='/competitions/fieldrobot/2015/our-robots_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/prices.jpg'>&lt;img src='/competitions/fieldrobot/2015/prices_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/results-free-style.jpg'>&lt;img src='/competitions/fieldrobot/2015/results-free-style_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/robots.jpg'>&lt;img src='/competitions/fieldrobot/2015/robots_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/sign.jpg'>&lt;img src='/competitions/fieldrobot/2015/sign_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/tower-view.jpg'>&lt;img src='/competitions/fieldrobot/2015/tower-view_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/fieldrobot/2015/tower.jpg'>&lt;img src='/competitions/fieldrobot/2015/tower_t.jpg' alt='' title='' class='border'  width='165' height='220'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Video Eduro (Stanislav Petrásek)&lt;/h2>

&lt;ul>
&lt;li>&lt;a href='http://youtu.be/eHcy1WS4UGo' class='external'>1st task&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/U-0mmlXkZUQ' class='external'>2nd task&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/crd-S0aP5Ww' class='external'>3rd task&lt;/a>&lt;/li>
&lt;/ul>

&lt;h2>Video Eduro (Petr Zábranský)&lt;/h2>

&lt;ul>
&lt;li>&lt;a href='http://youtu.be/nNTwqe6NSVQ' class='external'>1st task&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/xXJ_vLpH9Q0' class='external'>2nd task&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/BhtivN5pGco' class='external'>3rd task&lt;/a>&lt;/li>
&lt;/ul>

&lt;h1>&lt;a href='https://www.youtube.com/watch?v=rACIY9DtFf8&amp;amp;list=PL2gPpyBs1e204RN9i4nc2NGPziVb-_JJD' class='external'>Field Robot Event: FireAnt and Eduro playlist&lt;/a>&lt;/h1>

&lt;hr/>

&lt;div class='p'>&lt;a href='/competitions/fieldrobot/2015/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Robotour 2015</title>
	<link rel='alternate' href="http://localhost/competitions/robotour/2015/cs"/>
	<id>http://localhost/competitions/robotour/2015/cs</id>
	<updated>2015-05-25T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Letos se koná již desátý (!) ročník soutěže autonomních robotů. &lt;span class='smile'>&lt;/span> Rozhodli
jsme se tentokrát vydat do Písku, kde Radioklub Písek každoročně zahajuje
outdoor robotickou sezonu „Robotem rovně” a letos by jí i zakončil s
„Robotour”. Současně budou probíhat „Slavnosti piva”, tak snad to náležitě
oslavíme. Kdy a kde? &lt;b>Písek, 5. září 2015&lt;/b>. (&lt;b>Update: upřesnění lokace&lt;/b>)
 </summary>
	<content type='html'> 
&lt;h1>Pravidla&lt;/h1>

&lt;div class='p'>Pravidla pro pozemní roboty zůstavají stejná jako loni. K dispozici jsou v PDF
formátu: &lt;a href='/competitions/robotour/2013/Robotour-pravidla.pdf'>česky&lt;/a> a
&lt;a href='/competitions/robotour/2013/Robotour-rules.pdf'>anglicky&lt;/a>.&lt;/div>

&lt;div class='p'>Jedinou změnou je startovní pořadí týmu do dalšího kola:&lt;/div>

&lt;ul>
&lt;li>bodově nejlepší tým startuje na konci konvoje&lt;/li>
&lt;/ul>

&lt;h2>Foto potenciálních průjezdů&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-001.jpg'>&lt;img src='/competitions/robotour/2015/pisek-001_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-006.jpg'>&lt;img src='/competitions/robotour/2015/pisek-006_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-008.jpg'>&lt;img src='/competitions/robotour/2015/pisek-008_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-009.jpg'>&lt;img src='/competitions/robotour/2015/pisek-009_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-011.jpg'>&lt;img src='/competitions/robotour/2015/pisek-011_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-018.jpg'>&lt;img src='/competitions/robotour/2015/pisek-018_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-019.jpg'>&lt;img src='/competitions/robotour/2015/pisek-019_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-033.jpg'>&lt;img src='/competitions/robotour/2015/pisek-033_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotour/2015/pisek-045.jpg'>&lt;img src='/competitions/robotour/2015/pisek-045_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Lokalita&lt;/h2>

&lt;div class='p'>Soutěž samotná bude na několika místech v centru Písku. Ohraničit to lze
obdélníkem minlat='49.304811' minlon='14.1398335' maxlat='49.3107989'
maxlon='14.1518927'.  První start a homologace bude v místě blízko ulice "U
Výstaviště" (49.308258, 14.143379)
&lt;a href='http://www.openstreetmap.org/search?query=49.308258%2C%2014.143379#map=19/49.30826/14.14338&amp;amp;layers=D' class='external'>mapa&lt;/a>.&lt;/div>

&lt;hr/>

&lt;div class='p'>Pokud chcete soutěž nějakým způsobem podpořit nebo máte nějaké doplnění/dotaz,
tak se nám prosím ozvěte pomocí &lt;a href='/competitions/robotour/2015/cs#email'>kontaktního formuláře&lt;/a>.&lt;/div>
 </content>
</entry>
<entry>
	<title>Katarina</title>
	<link rel='alternate' href="http://localhost/robots/katarina/cs"/>
	<id>http://localhost/robots/katarina/cs</id>
	<updated>2015-01-28T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Další hračka od Parrotu, tentokráte čtyřtulka &lt;b>Bebop&lt;/b>. Úloha je rozchodit
sledování barevné čepice, jako to uměla stará AR Drone 2. Na první pohled je
Bebop více profi &amp;mdash; 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ňů &amp;hellip; no jsem zvědav jak to půjde z
Pythonu &lt;span class='wink'>&lt;/span>. &lt;b>Blog update:&lt;/b> 21/4 &amp;mdash; &lt;a href='/robots/katarina/cs#150421'>Skrytá kamera a Nao&lt;/a>
 </summary>
	<content type='html'> 
&lt;div class='p'>&lt;iframe
src='http://fandorama.cz/projekty/921778164/katarina-bebop/status.html'
width='200' height='120' align='right' style='border: none;'>&lt;/iframe>&lt;/div>

&lt;div class='p'>Toto je další z  &lt;a href='/articles/fandorama/cs'>fandorama blogů&lt;/a> o testování a prvních
zkušenostech tetokrát s &lt;a href='http://www.icornerhightech.cz/' class='external'>Parrot Bebop drone&lt;/a>
(pracovní název &lt;i>Katarina&lt;/i> &amp;hellip; říkal jsem si, že to bude hukot a chtěl jí
pojmenovat &lt;a href='http://en.wikipedia.org/wiki/Hurricane_Katrina' class='external'>Katrina&lt;/a>, ale pak
se mi jí zželelo, dávat jí do vínku tolik destrukce)&lt;/div>

&lt;div class='p'>Chcete-li si přečíst celý blog o rozchození Katariny podpořte tento projekt.&lt;/div>

&lt;div class='p'>Stejně jako minidronu &lt;a href='/robots/jessica/cs'>Jessica&lt;/a> zapůjčil
&lt;a href='http://www.icornerhightech.cz/' class='external'>český distributor Parrotu&lt;/a>. Díky &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/box.jpg'>&lt;img src='/robots/katarina/box_t.jpg' alt='krabice' title='krabice' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/box.jpg'>krabice&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/packed.jpg'>&lt;img src='/robots/katarina/packed_t.jpg' alt='zabalená Katarina' title='zabalená Katarina' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/packed.jpg'>zabalená Katarina&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/katarina.jpg'>&lt;img src='/robots/katarina/katarina_t.jpg' alt='rozměry' title='rozměry' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/katarina.jpg'>rozměry&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Zde je odpovídající fandorama link:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://fandorama.cz/projekty/921778164/katarina-bebop/' class='external'>http://fandorama.cz/projekty/921778164/katarina-bebop/&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>p.s. jsem zvědav, jestli Bebop české publikum zaujme, nebo mi náladu budou
muset zase zlepšovat Japonci &lt;span class='wink'>&lt;/span> (viz
&lt;a href='https://github.com/robotika/jessica/stargazers' class='external'>Jessica github Stargazers&lt;/a>)&lt;/div>

&lt;h2>Odkazy:&lt;/h2>

&lt;ul>
&lt;li>Stránky českého prodejce:
&lt;a href='http://www.icornerhightech.cz/' class='external'>http://www.icornerhightech.cz/&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.parrot.com/usa/products/bebop-drone/' class='external'>Parrot Bebop&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://github.com/matthewlloyd/bebop' class='external'>Parrot Bebop Drone Hacking&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://github.com/ARDroneSDK3' class='external'>ARDroneSDK3&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;hr/>

&lt;h1>Blog&lt;/h1>

&lt;div class='p'>&lt;a id="150131">&lt;/a>&lt;/div>

&lt;h2>31. leden 2015 &amp;mdash; Hukot i bez létání&lt;/h2>

&lt;div class='p'>Dnes jsem Bebop/Katarinu poprvé zapnul. A byl to hukot &lt;span class='smile'>&lt;/span>. Zatím nikoliv od
vrtulí, ale nejspíše od chlazení řídícího počítače. Budí to respekt.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/hull.jpg'>&lt;img src='/robots/katarina/hull_t.jpg' alt='Kryt a čepice' title='Kryt a čepice' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/hull.jpg'>Kryt a čepice&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Aplikace &lt;b>Free Flight 3&lt;/b> (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 &amp;mdash; skoro to vypadalo, že ta starší verze podporovala pouze
&lt;i>Rolling Spider&lt;/i> a'la &lt;a href='/robots/jessica/cs'>Jessica&lt;/a> a &lt;i>Jumping Sumo&lt;/i>. První
obrázky z kamery krásné, ale kam se uložily zatím netuším.&lt;/div>

&lt;div class='p'>Jako první příručku jsem použil &lt;a href='https://github.com/matthewlloyd/bebop' class='external'>Parrot
Bebop Drone Hacking&lt;/a>. Potvrzuji, že i u Parrotu mají vývojáři rádi
&lt;a href='http://en.wikipedia.org/wiki/42_%28number%29' class='external'>číslo 42&lt;/a>, tj. IP drony je
&lt;b>192.168.42.1&lt;/b>. Fungoval &lt;i>telnet&lt;/i>, podíval jsem se do &lt;i>ftp zóny&lt;/i> a
přečetl si i pár NMEA vět z GPSky:&lt;/div>

&lt;pre>/ # cat /dev/ttyPA1
&lt;i>GNRMC,104229.986,V,0000.0000,N,00000.0000,E,0.00,N,00000.0000,E,NNN,00,,-18.0,18.0,,,V*64
&lt;/i>GNGST,104229.986,,,,,,,*5C
&lt;i>GNGSA,A,1,,,,,,,,,,,,,,,,1*1D
&lt;/i>GPGSV,3,1,12,01,84,173,31,07,66,244,1,63,176,,04,54,145,,1*6A&lt;/pre>

&lt;div class='p'>Celkem mne navnadil popis „černé skříňky”
(&lt;i>/data/ftp/internal_000/blackbox&lt;/i>), která podle všeho obsahuje stejné
informace jako stará &lt;a href='/robots/heidi/cs'>AR Drone 2&lt;/a> jen v trošku jiném formátu
(129 sloupců dat logovaných na 200Hz).&lt;/div>

&lt;div class='p'>Klasická otázka: „jak to vypnout?” &amp;hellip; viz
&lt;a href='http://forum.parrot.com/usa/viewtopic.php?id=29012' class='external'>fórum pro nováčky&lt;/a> &amp;mdash;
stačí zadní tlačítko krátce zmáčknout.&lt;/div>

&lt;div class='p'>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.&lt;/div>

&lt;div class='p'>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).&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150206">&lt;/a>&lt;/div>

&lt;h2>6. únor 2015 &amp;mdash; github&lt;/h2>

&lt;div class='p'>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 &lt;a href='/robots/jessica/cs'>Jessicu&lt;/a> a
jak je to skvělé, že si s tím hraji a jak je SDK od Parrotu nečitelné atd.&lt;/div>

&lt;div class='p'>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.&lt;/div>

&lt;div class='p'>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.&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/robotika/katarina' class='external'>https://github.com/robotika/katarina&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="150218">&lt;/a>&lt;/div>

&lt;h2>18. únor 2015 &amp;mdash; viz anglická verze&lt;/h2>

&lt;div class='p'>Již moc nevěřím, že by prošel tento &lt;i>fandorama projekt&lt;/i>. 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ý).&lt;/div>

&lt;div class='p'>Nabídka navíc neustále roste (Aleš zmiňoval
&lt;a href='https://www.kickstarter.com/projects/torquing/zano-autonomous-intelligent-swarming-nano-drone' class='external'>ZANO&lt;/a>,
s úspěchem na Kickstarteru), takže to je těžké.&lt;/div>

&lt;div class='p'>Možná někteří z vás zaznamenali, že blog v angličtině obsahuje řádově více
informací &amp;hellip; tak pro ty ostatní, kteří přišli později &amp;hellip; viz anglická verze.&lt;/div>

&lt;div class='p'>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í &lt;b>takeoff()&lt;/b>. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/first-video.jpg'>&lt;img src='/robots/katarina/first-video_t.jpg' alt='první úspěšně přijatý video frame' title='první úspěšně přijatý video frame' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/first-video.jpg'>první úspěšně přijatý video frame&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150223">&lt;/a>&lt;/div>

&lt;h2>23. únor 2015 &amp;mdash; Fandorama&lt;/h2>

&lt;div class='p'>&lt;span class='smile'>&lt;/span> &lt;span class='smile'>&lt;/span> &lt;span class='smile'>&lt;/span> To mi to Ondra zavařil!!! &lt;span class='wink'>&lt;/span> Už jsem za tu dobu zapomněl, že není
dobré dávat konec &lt;a href='/articles/fandorama/cs'>fandorama projektů&lt;/a> na víkend. Banky
nefungují a čítač nezobrazuje aktuální stav konta. Katarinu jsem zrušil z
titulní stránky &amp;hellip; a teď bych jí měl zase vrátit. Zatím netuším přání jejího
jediného stoupence.&lt;/div>

&lt;div class='p'>Jaký je stav? S ARDrone3 už se lze létat s kódem na
&lt;a href='https://github.com/robotika/katarina' class='external'>githubu&lt;/a>. 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
&amp;mdash; vyřešil to &lt;i>trim()&lt;/i> před startem.&lt;/div>

&lt;div class='p'>Příklad kódu:&lt;/div>

&lt;pre>robot = Bebop()
robot.videoEnable()
robot.trim()
robot.takeoff()
robot.land()&lt;/pre>

&lt;div class='p'>ARDrone3, na rozdíl od předešlé verze, pracuje trošku jinak s videem. Zatím co
na &lt;a href='/robots/heidi/cs'>Heidi&lt;/a> stačilo otevřít TCP spojení a číst, Bebop,
&lt;a href='/robots/jessica/cs'>Rolling Spider&lt;/a> 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. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Video lze zatím přehrávat pouze off-line pomocí
&lt;a href='https://github.com/robotika/katarina/blob/master/play.py' class='external'>play.py&lt;/a> &amp;hellip; není
zapojena žádná funkce, která by kousky skládala za letu a předávala procesu na
zpracování obrazu.&lt;/div>

&lt;div class='p'>Ke droně se lze připojit také telnetem a ftp. Z toho co jsem viděl mne zatím
nejvíce dráždí adresář &lt;i>scripts&lt;/i> &amp;hellip; že by bylo možné přímo na dronu
uploadovat nějaké prográmky?! To by bylo něco.&lt;/div>

&lt;div class='p'>O čem teď bloumám je rozpoznávání a sledování dvojbarevné čepice:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/md-cap.jpg'>&lt;img src='/robots/katarina/md-cap_t.jpg' alt='týpek v čepici' title='týpek v čepici' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/md-cap.jpg'>týpek v čepici&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Nápady jsou vítané &lt;span class='wink'>&lt;/span>. Důležitá je určitě kombinace oranžové se zelenou, ale
jestli nejprve všechny pixely klasifikovat a teprve pak hledat přechody??&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150225">&lt;/a>&lt;/div>

&lt;h2>25. únor 2015 &amp;mdash; Čepice a capdet.py&lt;/h2>

&lt;div class='p'>Dnes jsem zaspal, tak alespoň krátce &amp;hellip;&lt;/div>

&lt;div class='p'>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í.&lt;/div>

&lt;div class='p'>Vzpomínám si, jak na workshopu &lt;a href='/competitions/robotour/2014/results/cs'>Robotour
2014&lt;/a> Jirka mluvil o důležitosti klikacích nástrojů &amp;hellip; a tak jsem si také
jeden vyzoušel
&lt;a href='https://github.com/robotika/katarina/commit/271f1d5b6599cf7a403328c995c149fb235cfe2f' class='external'>capdet.py&lt;/a>,
který zobrazoval všechny výskyty dané barvy a po
&lt;a href='https://github.com/robotika/katarina/commit/fccd678571d20421443e89fc214189d6604332a9' class='external'>drobné
úpravě&lt;/a> i barvy z blízkého okolí definované &lt;i>poloměrem&lt;/i> (spíše polovinou
strany krychle) &lt;b>rad=10&lt;/b>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/screen.jpg'>&lt;img src='/robots/katarina/screen_t.jpg' alt='pracovní obrazovka' title='pracovní obrazovka' class='border'  width='320' height='180'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/screen.jpg'>pracovní obrazovka&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>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 &lt;b>G&lt;/b> větší než &lt;b>R&lt;/b> a &lt;b>B&lt;/b>, tak je to
zelená, jinak oranžová:&lt;/div>

&lt;pre>if col[1] > max(col[0],col[2]):
    imgResult[mask] = (0,255,0) # green
else:
    imgResult[mask] = (0,128,255) # orange&lt;/pre>

&lt;div class='p'>Za zmínku asi také stojí bitové operace nad NumPy polem, konkrétně
&lt;i>np.logical_and&lt;/i>:&lt;/div>

&lt;pre>maskB = np.logical_and( imgB &lt; col[0]+rad, imgB > col[0]-rad )&lt;/pre>

&lt;div class='p'>&amp;hellip; toto vytvoří Boolean pole, kde &lt;i>True&lt;/i> je pouze u prvků z daného okolí v
modré složce.&lt;/div>

&lt;div class='p'>Jinak s NumPy maskou jsem si včera odpoledne trošku naběhl (bylo to na robotu
&lt;a href='/robots/husky/cs'>Husky&lt;/a> a kód pro
&lt;a href='https://github.com/robotika/husky/commit/e81585704e795a5110f9e8c835d695fdaec79a3d' class='external'>Follow
Me&lt;/a>, případně &lt;a href='http://youtu.be/GX3MSfMEuTM' class='external'>video&lt;/a>). Ona ta maska z
vícerozměrného pole udělá jednorozměrné a operace jako &lt;i>arr[mask].min()&lt;/i> jsou
v pořádku, ale běda u &lt;i>arr[mask].argmin()&lt;/i>, která vrací index, kde se daný
minimální prvek vyskytuje:&lt;/div>

&lt;pre>&amp;gt;&amp;gt;&amp;gt; import numpy as np
&amp;gt;&amp;gt;&amp;gt; a = np.array([2,0,3])
&amp;gt;&amp;gt;&amp;gt; a
array([2, 0, 3])
&amp;gt;&amp;gt;&amp;gt; a.argmin()
1
&amp;gt;&amp;gt;&amp;gt; mask = a > 0
&amp;gt;&amp;gt;&amp;gt; a[mask].argmin()
0
&amp;gt;&amp;gt;&amp;gt; a[mask].argmax()
1&lt;/pre>

&lt;div class='p'>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” &amp;hellip; &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>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??&lt;/div>

&lt;div class='p'>Ještě jsem nezmínil proč to &lt;a href='http://en.wikipedia.org/wiki/HSL_and_HSV' class='external'>HSV&lt;/a>
(hue-saturation-value). To je zatím &lt;i>příprava&lt;/i>. 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.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150226">&lt;/a>&lt;/div>

&lt;h2>26. únor 2015 &amp;mdash; Kontury čepice&lt;/h2>

&lt;div class='p'>Dnes to není žádná krása (viz
&lt;a href='https://github.com/robotika/katarina/commit/bbf9b522394beed4ae6cad9101169b45ae8c272f' class='external'>diff&lt;/a>),
ale nechť to jsou ty třísky co lítají při kácení lesa. Původní klikátko
&lt;i>capdet.py&lt;/i> jsem teď „lehce” zašpinil několika natvrdo vybranými barvami
oranžové a zelené &amp;mdash; ano, mohl jsem to číst ze souboru &amp;hellip; a asi měl. Šlo mi o
to, abych rychle měl stále stejné zadání a mohl experimentovat.&lt;/div>

&lt;div class='p'>Co tím hackováním zkouším? Myšlenka je následující:&lt;/div>

&lt;ul>
&lt;li>pro vybrané oranžové a zelené barvy vytvořím černobílou masku&lt;/li>

&lt;li>trošku jí nafouknu pomocí &lt;i>dilate&lt;/i>, aby se mi spojili jednotlivé díly čepice&lt;/li>

&lt;li>hledám kontury, kde mne zajímají jen &lt;i>bílé&lt;/i> objekty (s tím jsem si myslím už
  jednou naběhl, když byl daný objekt na hranici obrázku &amp;hellip; no uvidíme &amp;hellip;
  mluvím o &lt;i>oriented=True&lt;/i>)&lt;/li>

&lt;li>pro danou vyplněnou konturu spočítám podíl oranžové barvy&lt;/li>
&lt;/ul>

&lt;div class='p'>Příklad:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/cap-contour.jpg'>&lt;img src='/robots/katarina/cap-contour_t.jpg' alt='Detekované kontury' title='Detekované kontury' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/cap-contour.jpg'>Detekované kontury&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Výsledky [plocha, počet oranžových, podíl oranžových]:&lt;/div>

&lt;pre>3139.5 1854 0.590539894888
51.5 3 0.0582524271845&lt;/pre>

&lt;div class='p'>Na první pohled to nevypadá špatně. Asi bych mohl odfiltrovat malé body pomocí
&lt;i>erode()&lt;/i>, 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 &lt;i>pod-objekty&lt;/i>, 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áč &amp;hellip; to by Katarinu určitě spletlo).&lt;/div>

&lt;div class='p'>Jinak z poznámek &lt;i>pod čarou&lt;/i> &amp;mdash; nepodařilo se mi rozumně nakreslit masku
kontury, tak jsem jí nejprve nakreslil do šedotonového obrázku a pak definoval
jako &lt;i>mask = tmpMask > 0&lt;/i>. Ono by to asi šlo, ale ty bitové obrázky nutně
nefungují všude (pamatují Honzu a pokusy s RasPy na
&lt;a href='/competitions/sick-robot-day/2014/cs'>SICK Robot Day 2014&lt;/a>).&lt;/div>

&lt;div class='p'>Co se mi ale zase celkem líbilo je počítání &lt;i>oranžových&lt;/i> pixelů pro danou
oblast. Rozhodnutí, zda je pixel zelený nebo oranžový dělám porovnáním R a G
složky:&lt;/div>

&lt;pre>cmpRG = imgR > imgG
orange = np.count_nonzero(np.logical_and( mask, cmpRG ))&lt;/pre>

&lt;div class='p'>kde &lt;i>mask&lt;/i> je vybraná oblast kontury a &lt;i>imgR&lt;/i> a &lt;i>imgG&lt;/i> jsou výsledkem
&lt;i>cv2.split(img)&lt;/i>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150227">&lt;/a>&lt;/div>

&lt;h2>27. únor 2015 &amp;mdash; Editace barev z videa&lt;/h2>

&lt;div class='p'>Včera večer jsem brousil nástroje. Nejprve jsem upravil hack s tabulkou barev a
předělal to na externí soubor
(&lt;a href='https://github.com/robotika/katarina/commit/9c2cb3b9488ffca32036497bf3e1ae6ff5046e35' class='external'>diff&lt;/a>),
který podporuje i komentáře a mix copy a paste barev s čárkami a '[' a ']'.&lt;/div>

&lt;div class='p'>Poté jsem to skoro celé smazal a přeházel
(&lt;a href='https://github.com/robotika/katarina/commit/a535f3ffc1fd54de98477f36276a45e9b1503abf' class='external'>diff&lt;/a>),
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 &amp;mdash; 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
&lt;a href='https://github.com/robotika/katarina/blob/master/cap-colors.txt' class='external'>cap-colors.txt&lt;/a>.
Konečně přes ESCape, lze program předčasně ukončit.&lt;/div>

&lt;div class='p'>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 &amp;hellip; 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 &lt;a href='https://github.com/robotika/heidi/tree/master/cvideo' class='external'>Heidi-cvideo&lt;/a>).
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. &lt;span class='smile'>&lt;/span> Po pravdě IF jsem tam nakonec přidal
(&lt;a href='https://github.com/robotika/katarina/commit/a535f3ffc1fd54de98477f36276a45e9b1503abf#diff-5ea39e5e829197f519d01fe7a95c67a2R81' class='external'>kód&lt;/a>),
protože video jsem chtěl rovnou spustit přehrávat, ale jednotlivé snímky
„pustit zastavené”. &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>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ů &amp;mdash; ž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??&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150301">&lt;/a>&lt;/div>

&lt;h2>1. březen 2015 &amp;mdash; Víkendové testování&lt;/h2>

&lt;div class='p'>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.&lt;/div>

&lt;div class='p'>Když jsem kód opravil (ty asserty se hodí při ladění, ale v letu to fakt není
dobrý nápad)
(&lt;a href='https://github.com/robotika/katarina/commit/dec3ced48bdd38d3712e5e8ece68e472a389da03' class='external'>diff&lt;/a>),
tak už lilo :-(, takže základní poletování nahoru a dolů jsem v reálu funkční
neviděl.&lt;/div>

&lt;div class='p'>A co se tedy stalo? Drona poslala zprávu &lt;i>ARCOMMANDS_ID_PROJECT_COMMON = 0&lt;/i>,
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:&lt;/div>

&lt;pre>02 7F 61 0D 00 00 00 00 05 07 00 D4 FF&lt;/pre>

&lt;div class='p'>tj. &lt;i>ARCOMMANDS_ID_COMMON_COMMONSTATE_CMD_WIFISIGNALCHANGED&lt;/i> s popiskem
&lt;i>RSSI of the signal between controller and the product (in dbm)&lt;/i>. Ta hodnota
byla 1280 a vůbec netuším, co tím autoři chtěli říci.&lt;/div>

&lt;div class='p'>Ž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 &amp;mdash; myslel jsem, že běží můj kód, ale spíše detekovala koruny stromů
sonarem/spodní kamerou a upravila to na 1 meter „nad”.&lt;/div>

&lt;div class='p'>Přemýšlím, zda uploadovat to video &amp;hellip; 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
(&lt;a href='https://github.com/robotika/katarina/commit/8068b84c1d8ad4abb4c4427679e6ed770537b428' class='external'>autorecording
diff&lt;/a>). 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
&lt;a href='https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=OaHZ73Uqqpg' class='external'>tomto
videu&lt;/a>, kdy drona dělá kotrmelce a z nahrávaného videa to nepoznáte &amp;hellip;&lt;/div>

&lt;div class='p'>Ne, není to publikovatelné &amp;hellip; zas taková sranda to není (let trval 15s), sigh.
Ale přežila to a vypadá, že i bez větších šrámů &amp;hellip; padla do trávy.&lt;/div>

&lt;div class='p'>A co jinak? Začaly mi chodit GPS data, dokonce &lt;i>debug info&lt;/i> o počtu satelitů
(&lt;a href='https://github.com/robotika/katarina/commit/cfb4e1112b752226f58f33d2f3b831dc7f1792e8' class='external'>diff&lt;/a>).
„Indiáni” jsou v pořádku, tj. GPS souřadnice dávají rovnou smysl.&lt;/div>

&lt;div class='p'>Udělal jsem také několik fotek pomocí &lt;i>drone.takePicture()&lt;/i> &amp;mdash; 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.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150302">&lt;/a>&lt;/div>

&lt;h2>2. březen 2015 &amp;mdash; metalog.now()&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/bebop-drone.jpg'>&lt;img src='/robots/katarina/bebop-drone_t.jpg' alt='pohled z drony na krabici' title='pohled z drony na krabici' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/bebop-drone.jpg'>pohled z drony na krabici&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Dneska jsem nějaký unavený. Zadrátoval jsem do startovní konfigurace
nastavování času
(&lt;a href='https://github.com/robotika/katarina/commit/2df80fdcd4f447f68be710c4f1b4e91e80f0303c' class='external'>diff&lt;/a>),
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 &amp;mdash; 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 &lt;b>Bebop_Drone_2015-03-02T201736+0000_.jpg&lt;/b>.&lt;/div>

&lt;div class='p'>Možná za zmínku stojí to zjištění aktuálního času a data. Kdybych to používal
ze systému pomocí &lt;i>datetime.datetime.now()&lt;/i> tak se mi rozbije přehrávání
logů. A na to jsem hrozně alergický &lt;span class='wink'>&lt;/span>. Řešení je logovat i každý podobný
dotaz (zavolám ho 1x, takže to není žádné drama) a nechal jsem třídu
&lt;i>MetaLog&lt;/i>, aby se o to starala. A funguje to dobře.&lt;/div>

&lt;div class='p'>Do gitu jsem také dal ignorování assertu při parsování dat
(&lt;a href='https://github.com/robotika/katarina/commit/bd8fad45e0d09ff1500d6e07be31c33ee662d060' class='external'>diff&lt;/a>).
Jestli jste četli report ze včerejška, tak tušíte proč. &lt;span class='wink'>&lt;/span> Ono ty asserty jsou
užitečné, ale jenom když si pak log v klidu přehrávám, tj. možná
&lt;i>try..except&lt;/i> ještě obalím podmínkou, zda přehrávám &amp;hellip; ale možná ne.&lt;/div>

&lt;div class='p'>Začal jsem ráno také pracovat na integraci všech kousků (zatím jedno-vláknitě),
ale více o &lt;a href='https://github.com/robotika/katarina/blob/master/demo.py' class='external'>demo.py&lt;/a>
až to začne něco dělat &amp;hellip;&lt;/div>

&lt;div class='p'>p.s. Pavel S. mi poslal &lt;a href='https://www.youtube.com/watch?v=PeUOq_Y305U' class='external'>video o
automatickém přistání Ardu Copter&lt;/a> &amp;mdash; jó, to by se mi také líbilo &lt;span class='smile'>&lt;/span> &amp;hellip;
lepší než větve břízy.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150303">&lt;/a>&lt;/div>

&lt;h2>3. březen 2015 &amp;mdash; roll, pitch a yaw&lt;/h2>

&lt;div class='p'>Kdy já už se konečně naučím, co z toho je co? &lt;span class='wink'>&lt;/span> Dnes jsem lítal ve škole.
Nakonec jenom po budově a to ještě malinko, ale &amp;hellip; nějaký mikro-progres je
snad vidět.&lt;/div>

&lt;div class='p'>Začal jsem s triviálním &lt;i>testFying&lt;/i>:&lt;/div>

&lt;pre>robot.trim()
robot.takeoff()
robot.flyToAltitude( 2.0 )
robot.wait( 2.0 )
robot.flyToAltitude( 1.0 )
robot.land()&lt;/pre>

&lt;div class='p'>Při prvním pokusu to spadlo ve funkci &lt;i>wait()&lt;/i>. Volal jsem tam
&lt;i>self.update()&lt;/i> bez parametrů, které ale byly vyžadované. Chytnout, otočit
vzhůru nohama (naštěstí do dvou metrů dosáhnu), fix a znova.&lt;/div>

&lt;div class='p'>Při druhém letu to spadlo na klesání:&lt;/div>

&lt;pre>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 &lt;= number &lt;= 255&lt;/pre>

&lt;div class='p'>No jo no, mají tam být znaménkové bity
(&lt;a href='https://github.com/robotika/katarina/commit/d94164f95df5e029ade8b80e13a8af0df1659bc9' class='external'>diff&lt;/a>).&lt;/div>

&lt;div class='p'>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 &lt;i>cool&lt;/i> &lt;span class='smile'>&lt;/span>. 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é &amp;mdash;
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ů &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/corridor.jpg'>&lt;img src='/robots/katarina/corridor_t.jpg' alt='školní chodba' title='školní chodba' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/corridor.jpg'>školní chodba&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Jo a ten titulek! Já si stále nepamatuji, co z těch třech slov je náklon
dopředu &amp;hellip; mám i pocit, že na toto téma už je na robotice stažený pěkný
obrázek &amp;hellip; tak nevím, asi myslím ten z
&lt;a href='http://en.wikipedia.org/wiki/Flight_dynamics' class='external'>wikipedie&lt;/a>. Ono když mi
Katarina systematicky uhýbala vlevo, tak jsem zkusil změnit druhý parametr a
pak už letěla skoro rovně vpřed. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>První log bez videa &amp;mdash; ani ťuk zajímavosti :-(. Tedy alespoň je vidět, jak se
mění rychlost, takže bude možné doplnit nějakou „pseudo-regulaci”.&lt;/div>

&lt;div class='p'>Tak obráceně &amp;mdash; poslední log se záznamem videa &amp;hellip; prostě ho přestal v půlce
letu posílat, bez jakékoliv notifikace :-(. Tomu moc nerozumím.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150304">&lt;/a>&lt;/div>

&lt;h2>4. březen 2015 &amp;mdash; opraveno nahrávání videa&lt;/h2>

&lt;div class='p'>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 &lt;i>takeoff()&lt;/i> a vypnutí u &lt;i>land()&lt;/i>. Přidal jsem
testovací rutinu &amp;hellip; a nic. Nic to nenahrálo, ale na
&lt;i>/data/ftp/internal_000/Bebop_Drone/media/&lt;/i> 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:&lt;/div>

&lt;div class='p'>&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/3pzLRF1-KkM?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>&lt;/div>

&lt;div class='p'>A jakou chybu jsem udělal? Pro zapínání a vypínání videa je &lt;i>enum&lt;/i>, což ale
znamená 4 bajty :-( &amp;hellip; a já tam měl jenom jeden bajt
(&lt;a href='https://github.com/robotika/katarina/commit/4ec60b413eaadfa58d809ffa9cbd4b43d48ab241' class='external'>diff&lt;/a>).&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150305">&lt;/a>&lt;/div>

&lt;h2>5. březen 2015 &amp;mdash; OpenCV okno&lt;/h2>

&lt;div class='p'>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 &amp;hellip; prostě věděl jsem to,
přišel domu unavený, ale zkusil alespoň jednou odstartovat než bude moc pozdě
&amp;hellip; 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.&lt;/div>

&lt;div class='p'>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.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150309">&lt;/a>&lt;/div>

&lt;h2>9. březen 2015 &amp;mdash; video problémy&lt;/h2>

&lt;div class='p'>O víkendu bylo krásně a zbylo i trošku času na létání. Chtěl jsem znova zkusit
&lt;a href='https://github.com/robotika/katarina/blob/master/demo.py' class='external'>demo.py&lt;/a>, 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áčí.&lt;/div>

&lt;div class='p'>V realitě to bouchlo už při prvním startu:&lt;/div>

&lt;pre>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 &lt; 64, fragmentsPerFrame # lazyness, to get started
AssertionError: 81&lt;/pre>

&lt;div class='p'>&amp;hellip; ta lenost je hrozná věc &lt;span class='wink'>&lt;/span>. Navíc oprava byla hotova a vyzkoušena za pár
minut
(&lt;a href='https://github.com/robotika/katarina/commit/e1751e3ab5fffd340991bf2f1e81dd367922021d' class='external'>diff&lt;/a>)
&amp;hellip; 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).&lt;/div>

&lt;div class='p'>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é &amp;mdash; je fakt, že nahrávání se spustilo
a díky assertu už nevypnulo, tj. trošku delší 1.4GB video.&lt;/div>

&lt;div class='p'>Druhé video chybí, ale podle časů ve jménech souborů vidím, že příkaz &lt;i>stop
video&lt;/i> funguje. Stejně tak se i video průběžně posílalo ke zpracování. OK&lt;/div>

&lt;div class='p'>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:&lt;/div>

&lt;pre>Altitude -0.50595164299&lt;/pre>

&lt;div class='p'>Asi by to chtělo trávu posekat nebo alespoň naučit Katarinu se vracet na
místo/základnu &amp;hellip;&lt;/div>

&lt;div class='p'>Po tomto pokusu jsem dronu zvedl a „zakroutil jí krkem” &amp;mdash; 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:&lt;/div>

&lt;pre>&amp;hellip;
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&lt;/pre>

&lt;div class='p'>&amp;hellip; 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 &lt;i>Video Enabled State 0 enabled&lt;/i> (je to enum, kde
hodnota 0 znamená &lt;i>enabled&lt;/i>), tj. vše by mělo být OK?!&lt;/div>

&lt;div class='p'>Druhý den jsem přidal nastavování konfigurace, že jsem venku a používám
ochranný štít
(&lt;a href='https://github.com/robotika/katarina/commit/2f9039f3ea3e74974864ae3d202b4b8e7294bbdf' class='external'>diff&lt;/a>),
ale přišlo mi, že to stabilitě nijak nepomohlo.&lt;/div>

&lt;div class='p'>Teď koukám na první pokus z neděle a tam je dokonce 101 dílků &lt;span class='smile'>&lt;/span> &amp;hellip; jo, asi
bylo opravdu na čase přejít od 64-bit potvrzování na 128-bit. Je zvláštní, jak
je ten &lt;i>indoor&lt;/i> fádní a bohatě si s 64 bity vystačí. &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>Ono to jenom vypadalo, že to funguje. Video přestalo posílat po skončení
&lt;i>takeoff()&lt;/i>. Pak další dva starty nic a teprve po výměně baterky zase chvíli
pár snímků :-(.&lt;/div>

&lt;pre>Picture State Changed: 1 0&lt;/pre>

&lt;div class='p'>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 &lt;i>ARDrone3_commands.xml&lt;/i> to znamená, že v
&lt;i>PictureStateChanged&lt;/i> &lt;b>1 if picture has been taken&lt;/b> a ta 0 je &lt;i>Mass
storage id where the picture was recorded&lt;/i> &amp;hellip; ale já žádný snímek nedělal?!
Myslí automatický &lt;i>náhled&lt;/i> pro video??&lt;/div>

&lt;div class='p'>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.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150310">&lt;/a>&lt;/div>

&lt;h2>9./10. březen 2015 &amp;mdash; Hledá se Bebop (Blansko)&lt;/h2>

&lt;div class='p'>Dnes jsem dostal první česky psaný mail od jednoho majitele Bebopa &lt;span class='smile'>&lt;/span>. 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 &lt;a href='http://robotika.cz/' class='external'>robotika.cz&lt;/a> &amp;hellip; asi 0.
Pokud přeci jenom někdo najdete Bebopa, dejte mi vědět a přepošlu mail majiteli
&amp;hellip;&lt;/div>

&lt;div class='p'>V první fázi mi zamrazilo, jestli nebyl řízen mým kódem &amp;hellip; ale asi chyba
&lt;i>Free Flight 3&lt;/i>. Spojení se přerušilo v náklonu a Bebop uletěl přes pole &amp;hellip;
a po minutě asi došla baterka. Nebo si špatně definoval &lt;b>Home&lt;/b>. Darryl také
psal: &lt;i>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.&lt;/i> &amp;hellip; těžko říci, jenom papouškuji.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150311">&lt;/a>&lt;/div>

&lt;h2>11. březen 2015 &amp;mdash; Fórum - Holy Crap! &lt;span class='smile'>&lt;/span>&lt;/h2>

&lt;div class='p'>„Trošku” se trápím s tím &lt;a href='/articles/h264-drone-vision/cs'>H264 kodkem&lt;/a> pro
Katarinu a tak jsem si dovolil (a to jsem si asi dovolil dost) pro zlepšení
nálady „hodit návnadu” na
&lt;a href='http://forum.parrot.com/english/viewtopic.php?id=15772' class='external'>britské fórum
Parrotu&lt;/a>. Nešťastník se sháněl po dokumentaci a tak jsem ho odkázal na
&lt;a href='https://github.com/robotika/katarina' class='external'>github Katariny&lt;/a>. No a před chvílí se
ozval EnderFFX, že to četl a dal na
&lt;a href='http://forum.parrot.com/usa/viewtopic.php?id=30005' class='external'>americké fórum&lt;/a> &amp;hellip;
titulek „Holy Crap, Details about Bebop Protocol, did anyone notice ?” &lt;span class='smile'>&lt;/span>
&amp;hellip; je čas jít se psem a spát.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150315">&lt;/a>&lt;/div>

&lt;h2>15. březen 2015 &amp;mdash; Oriented Roundel&lt;/h2>

&lt;div class='p'>Američan, Čech, Němec, Mexičan, Angličan, Francouz &amp;hellip; možná to trošku
přerovnat a byl by to pěkný úvod k nějakému vtipu &lt;span class='wink'>&lt;/span>. 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
&lt;a href='http://forum.parrot.com/usa/viewtopic.php?pid=60964#p60964' class='external'>Darrylův
komentář&lt;/a> na americkém fóru se musím vždy zasmát &lt;span class='smile'>&lt;/span> (až to přejde v záchvat
kašle).&lt;/div>

&lt;div class='p'>Něco nového? Poskládal jsem „dokument”
&lt;a href='https://github.com/robotika/katarina/blob/master/bebop-protocol.md' class='external'>Parrot
Bebop Protocol&lt;/a>  &amp;mdash; 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í.&lt;/div>

&lt;div class='p'>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
&lt;a href='http://ardrone2.parrot.com/media/cms_page_media/38/special_target_1.pdf' class='external'>Oriented
Roundel&lt;/a>  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&lt;/div>

&lt;pre>drone.moveCamera( tilt=-100, pan=0 )&lt;/pre>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/roundel-mser-1m.jpg'>&lt;img src='/robots/katarina/roundel-mser-1m_t.jpg' alt='Oriented Roundel z jednoho metru s MSER detekcí' title='Oriented Roundel z jednoho metru s MSER detekcí' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/roundel-mser-1m.jpg'>Oriented Roundel z jednoho metru s MSER detekcí&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>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 &lt;i>testCamera()&lt;/i>,
kdy jsem jenom sbíral obrázky data o pozici nebyly. A klasicky, když jsem
odstartoval, tak jsem zapomněl sklopit kameru dolu &lt;span class='wink'>&lt;/span> [ale jó, když jsem stáhl
videa a vše vypnul tak mi to došlo].&lt;/div>

&lt;div class='p'>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
&amp;hellip; Je to vlastně &lt;b>behavior&lt;/b> z
&lt;a href='http://en.wikipedia.org/wiki/Three-layer_architecture' class='external'>tří-vrstvé
architektury&lt;/a>, kterou jsme na přednáškách před mnoha lety doporučovali, ale
prakticky asi nikdy moc nepoužili. Tož adresář
&lt;a href='https://github.com/robotika/katarina/tree/master/behaviors' class='external'>behaviors&lt;/a> (je
pěkné, že když na githubu do adresáře dáte &lt;i>README.md&lt;/i>, tak ho automaticky
zobrazuje za seznamem souborů).&lt;/div>

&lt;div class='p'>Kód
&lt;a href='https://github.com/robotika/katarina/blob/master/behaviors/navbox.py' class='external'>navigace
na krabici&lt;/a> zatím nic nedělá. Volá na snímky osvědčený
&lt;a href='http://en.wikipedia.org/wiki/Maximally_stable_extremal_regions' class='external'>MSER&lt;/a> 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.&lt;/div>

&lt;div class='p'>Naházel jsem tři pokusy do jednoho &lt;a href='http://youtu.be/JlxH9q5TTV4' class='external'>videa&lt;/a>,
jestli si chcete udělat lepší představu, co drona vidí, když se kouká (kamerou
směřující dopředu) směrem dolů &lt;span class='smile'>&lt;/span>. Možná značku trošku posunu a budu startovat
kolmo na oba symboly &amp;hellip; ještě nevím. Nějaké nápady?&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150316">&lt;/a>&lt;/div>

&lt;h2>16. březen 2015 &amp;mdash; BlackBox a NavData&lt;/h2>

&lt;div class='p'>To „zakázané ovoce” je vždycky problém &amp;hellip; v případě Kateřiny Bebopové je to
modifikace souboru &lt;i>/data/dragon.conf&lt;/i>. Jsou tam takové položky, kterým
prostě nelze odolat &lt;span class='wink'>&lt;/span>. Odkaz na
&lt;a href='https://github.com/matthewlloyd/bebop' class='external'>zdroj&lt;/a> jsem dával už na začátku tohoto
blogu, ale včera jsem narazil ještě na zmínku na
&lt;a href='http://forum.parrot.com/usa/viewtopic.php?id=29088' class='external'>americkém fóru&lt;/a> a to už
bylo moc. Cvičně jsem nastavil jak &lt;b>blackbox_enable&lt;/b> tak i &lt;b>navdata_enable&lt;/b>
na &lt;i>true&lt;/i>.&lt;/div>

&lt;div class='p'>BlackBox fungoval. Vznikl soubor &lt;i>light_run_0&lt;/i>, který během pár minut měl
53MB. Pak jsem zkoušel
&lt;a href='https://github.com/matthewlloyd/bebop/blob/master/blackbox_to_csv.py' class='external'>blackbox_to_csv.py&lt;/a>
(parametry nejsou úplně zřejmé &amp;hellip; &amp;ndash;csv &amp;lt;filename&amp;gt;). 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&lt;/div>

&lt;div class='p'>No není to nádhera?! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>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 &lt;a href='/robots/jessica/cs'>Jessica&lt;/a> měla
podobné nastavení?&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150317">&lt;/a>&lt;/div>

&lt;h2>17. březen 2015 &amp;mdash; Navdata zklamání&lt;/h2>

&lt;div class='p'>Tak to vypadá, že &lt;b>"navdata_enable" : true&lt;/b> jenom zase ukládá nějaká data
přímo na droně. Vznikl soubor &lt;i>navdatasMykonos3&lt;/i> (70MB), ale je to vlastně
blackbox jenom textově, sloupce oddělené tabulátorem. Další zklamání jsem našel
na githubu: &lt;a href='https://github.com/ARDroneSDK3/ARSDKBuildUtils/issues/2' class='external'>Access to
NavData&lt;/a>. Nikolas od Parrotu tam potvrzuje, že ani Rolling Spider ani Bebop
navdata na 200Hz neposílají: &lt;i>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.&lt;/i> :-(&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150318">&lt;/a>&lt;/div>

&lt;h2>18. březen 2015 &amp;mdash; Kolečka a obdélníky&lt;/h2>

&lt;div class='p'>Dnes ráno jsem si trošku hrál se základními geometrickými tvary
(viz &lt;a href='https://github.com/robotika/katarina/commit/97eca4a14119b1506e549f88d8df02f948b1e0ed' class='external'>diff&lt;/a>):&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/roundel-bad-detection.jpg'>&lt;img src='/robots/katarina/roundel-bad-detection_t.jpg' alt='Příklad špatné detekce' title='Příklad špatné detekce' class='border'  width='320' height='180'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/roundel-bad-detection.jpg'>Příklad špatné detekce&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>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 &amp;hellip; 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
&lt;a href='https://github.com/robotika/katarina/blob/97eca4a14119b1506e549f88d8df02f948b1e0ed/behaviors/navbox_test.py' class='external'>unit
test&lt;/a>, tj. superšpatné to zase nebylo &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>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:&lt;/div>

&lt;ul>
&lt;li>když není ani jeden kruh nebo nejsou dva obdélníky, tak značka nenalezena&lt;/li>

&lt;li>jinak vrať spojnici středu prvního kruhu a druhého obdélníku&lt;/li>
&lt;/ul>

&lt;div class='p'>Možná se zeptáte, proč právě druhého obdélníku?! &lt;span class='smile'>&lt;/span> &amp;hellip; protože jinak by ten
můj první &lt;i>unit test&lt;/i> 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 &lt;b>reálné&lt;/b> protipříklady.&lt;/div>

&lt;div class='p'>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 &amp;hellip;&lt;/div>

&lt;div class='p'>p.s. i v tak triviálním kódu lze udělat chybu (přehrávám si včerejší logy):&lt;/div>

&lt;pre>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&lt;/pre>

&lt;div class='p'>&amp;hellip; &lt;a href='https://github.com/robotika/katarina/commit/b3e8e2cb64b99297ca81111e95b0fc6120f2b4c1' class='external'>opraveno&lt;/a>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150320">&lt;/a>&lt;/div>

&lt;h2>20. březen 2015 &amp;mdash; Sedm vteřin&lt;/h2>

&lt;div class='p'>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.&lt;/div>

&lt;div class='p'>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á?&lt;/div>

&lt;div class='p'>Pro uklidnění jsem alespoň trošku vylepšil detekci přistávací plochy (viz
&lt;a href='https://github.com/robotika/katarina/commit/fc37d1b916aac1d22531fbf234293a0c1b57cea1' class='external'>diff&lt;/a>).
Konkrétně jsem chtěl ošetřit toto selhání:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/roundel-too-far.jpg'>&lt;img src='/robots/katarina/roundel-too-far_t.jpg' alt='špatně vybraný obdélník' title='špatně vybraný obdélník' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/roundel-too-far.jpg'>špatně vybraný obdélník&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>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 &amp;hellip; prostě to co se mi na podzim líbilo na SICK Robot Day
&lt;a href='https://www.youtube.com/watch?v=uQu2PFR1fB0' class='external'>videu&lt;/a>. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150322">&lt;/a>&lt;/div>

&lt;h2>22. březen 2015 &amp;mdash; PCMD &amp;#64;40Hz&lt;/h2>

&lt;div class='p'>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
&lt;a href='https://github.com/robotika/katarina/commit/63116ec5886c5c28a79ed348f4fecac8e3f8198c' class='external'>diff&lt;/a>).
Následně jsem test ještě zjednodušil
(&lt;a href='https://github.com/robotika/katarina/commit/99b0b0b12f4f03e530b4d370b5f6437247c49aab' class='external'>diff&lt;/a>),
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.&lt;/div>

&lt;div class='p'>Prima a teď jak to opravit?! Jsem rád, že jsem napsal na
&lt;a href='https://github.com/ARDroneSDK3/libARCommands/issues/4' class='external'>ARDroneSKD3/libARCommands/issues&lt;/a>
a k mému velkému překvapení mne dnes večer čekala odpověď:&lt;/div>

&lt;div class='p'>&lt;i>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.&lt;/i>&lt;/div>

&lt;div class='p'>&lt;i>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.&lt;/i>&lt;/div>

&lt;div class='p'>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ě.&lt;/div>

&lt;div class='p'>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 :-(.&lt;/div>

&lt;div class='p'>Napsal jsem malý hack s posílacím vláknem
(&lt;a href='https://github.com/robotika/katarina/commit/a4f81c15abfd4cb4cf97b9c16837011794fbfcab' class='external'>diff&lt;/a>),
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ů.&lt;/div>

&lt;div class='p'>p.s. ráno mi došla ještě jedna &lt;i>hrozná&lt;/i> 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) &amp;hellip; a že jak mám &lt;i>update()&lt;/i> smyčku „jako vždy”, čekej
na data a pak pošli příkaz, a to je zde špatně!
(&lt;a href='https://github.com/robotika/katarina/commit/7b1c7e208d4537b526e226a7918b2100638e4557' class='external'>fix&lt;/a>).
Proč? Protože jako příkaz se počítá i potvrzení video paketu &amp;hellip; a v kombinaci
s 40Hz mám konečně kompletní streamované video! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150325">&lt;/a>&lt;/div>

&lt;h2>25. březen 2015 &amp;mdash; Revize posílání příkazů&lt;/h2>

&lt;div class='p'>Zapojení vlákna posílajícího PCMD na 40Hz byla trošku otrava :-(. Ale je to teď
snad hotové
(&lt;a href='https://github.com/robotika/katarina/commit/6674f2faa8c0beef5e58f8ba2fb3cabeb08c3a7c' class='external'>diff&lt;/a>).
Asi největší „problém” byla má neústupnost z deterministického přehrávání
logů &amp;hellip; 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 &amp;hellip; a
navíc implementace bez fronty je snazší &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>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 &lt;i>separátor&lt;/i>, tj. jenom ověřuji, že daný blok sedí.&lt;/div>

&lt;div class='p'>Malá perlička &amp;mdash; celou dobu jsem posílal &lt;b>vadné PCMD&lt;/b>!!! 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 &lt;i>float&lt;/i> (4 bajty) &amp;hellip; 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.&lt;/div>

&lt;div class='p'>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 &lt;i>navdata.py&lt;/i> všechny
ty globální &lt;i>g_seq, g_seq2, g_seqAck, g_seqPongAck, g_seqVideoAck&lt;/i> &amp;hellip; &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150330">&lt;/a>&lt;/div>

&lt;h2>30. březen 2015 &amp;mdash; Vybité baterky&lt;/h2>

&lt;div class='p'>V pátek jsem byl už nějaký vyřízený &amp;mdash; ráno jsem oživoval
&lt;a href='https://github.com/tf-czu/gyrorad' class='external'>Arduino Uno s GPS a čtyřmi gyroskopy&lt;/a> pro
jeden školní experiment, pak se snažil sepsat příklad pro &lt;i>dk863&lt;/i> ohledně
&lt;a href='https://github.com/robotika/katarina/issues/3' class='external'>zpoždění videa&lt;/a> a vznikl
&lt;a href='https://github.com/robotika/katarina/blob/master/samples/video2stdout.py' class='external'>video2stdout.py&lt;/a>,
který streamuje Bebop video na &lt;i>stdout&lt;/i>. Do toho v práci „záhada dvaceti
sedmi zákazů na španělské tranzitní křižovatce” &amp;hellip; prostě bylo toho nějak
moc a těšil jsem se na víkend, až vysadím. Prostě programátor na baterky
&lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Na toto téma mne celkem zaujalo
&lt;a href='http://www.forbes.cz/zmizte-odsud-a-dalsich-12-rad-romana-stanka-nejuspesnejsiho-cecha-v-silicon-valley/' class='external'>4.
doporučení Romana Staňka&lt;/a>: &lt;b>v sobotu nepracujte&lt;/b> &lt;span class='smile'>&lt;/span>. [Forbes nám minulý
týden poslal odkaz na článek
&lt;a href='http://www.forbes.cz/zakladatel-tesly-elon-musk-lidem-nakonec-stejne-zakazou-ridit-auta/' class='external'>Lidem
nakonec pravděpodobně zakážou řídit auta&lt;/a>, ale ten mne až tak nezaujal &amp;hellip;
ostatně to tušíme všichni, když i
&lt;a href='http://byznys.ihned.cz/c1-63566390-apple-planuje-vyrobu-elektromobilu-hleda-experty-na-robotiku-a-baterie' class='external'>Apple
hledá robo-programátory&lt;/a> a i spřátelené robotauto na tom již
&lt;a href='https://twitter.com/roboauto' class='external'>pracuje na plný úvazek&lt;/a> &amp;hellip;]&lt;/div>

&lt;div class='p'>Aby alespoň něco málo relevantního k Bebopovi, tak Vincent poslal link, jak
upravit nastavení komprese videa &amp;hellip; minimálně musím ocenit jeho prezentační
schopnosti &lt;span class='wink'>&lt;/span> &amp;hellip; jinak to je ten Francouz z &lt;i>vtipu&lt;/i> před pár dny.&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/d9u24jhTGic?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150331">&lt;/a>&lt;/div>

&lt;h2>31. březen 2015 &amp;mdash; Video Results Queue&lt;/h2>

&lt;div class='p'>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 &amp;hellip; integraci výsledků ze zpracování videa.
Nakonec jsem to udělal pomocí dvou &lt;i>Qeueue&lt;/i>, 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 &lt;i>setVideoCallback()&lt;/i> &amp;mdash; 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í
(&lt;a href='https://github.com/robotika/katarina/commit/5c6af7d009ab56492e3ca2f3d6ee9fa040756f3a' class='external'>diff&lt;/a>).&lt;/div>

&lt;div class='p'>Teď přijde ta zábavnější část na výsledky zpracování reagovat.&lt;/div>

&lt;div class='p'>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é
&lt;a href='https://github.com/robotika/katarina/issues/3' class='external'>stížnosti na pomalost videa&lt;/a>
&amp;hellip; Linux (Ubuntu 14.04) &amp;hellip; no doufám, že to trošku nastuduje, než zavolá
&lt;b>drone.takeoff()&lt;/b> &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150401">&lt;/a>&lt;/div>

&lt;h2>1. duben 2015 &amp;mdash; Navigace na přistávací plochu&lt;/h2>

&lt;div class='p'>Včera jsem dělal první pokusy udržet se nad přistávací plochou
(&lt;a href='https://github.com/robotika/katarina/commit/be626857ff5986c3fa65eacc4b4970fd5d4adfba' class='external'>diff&lt;/a>).
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 &amp;hellip;
prostě to ještě nefunguje.&lt;/div>

&lt;div class='p'>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 &lt;i>cv2_150331_155530.txt&lt;/i> vypadá takto:&lt;/div>

&lt;pre>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)
&amp;hellip;&lt;/pre>

&lt;div class='p'>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,&amp;hellip;). Počet cyklů mezi jednotlivými snímky je ale spíše zavádějící
&amp;hellip; 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.&lt;/div>

&lt;div class='p'>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:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/roundelnav_152.jpg'>&lt;img src='/robots/katarina/roundelnav_152_t.jpg' alt='Snímek č. 152' title='Snímek č. 152' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/roundelnav_152.jpg'>Snímek č. 152&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/katarina/roundelnav_272.jpg'>&lt;img src='/robots/katarina/roundelnav_272_t.jpg' alt='Snímek č. 272' title='Snímek č. 272' class='border'  width='320' height='184'/>&lt;/a>&lt;br/>
&lt;a href='/robots/katarina/roundelnav_272.jpg'>Snímek č. 272&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>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 &amp;mdash; vyžaduji, že 70% plochy jsou „černé body” a
tady bylo nutné posunout hranici na 64%.&lt;/div>

&lt;div class='p'>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
&lt;i>meta_150331_191314.log&lt;/i>, 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
&lt;a href='https://github.com/ARDroneSDK3/libARCommands/issues/6' class='external'>libARCommands issue
#6&lt;/a>.&lt;/div>

&lt;div class='p'>p.s. na obhajobu Parrotu musím zmínit, že &lt;a href='/robots/katarina/cs#150310'>Radimovi&lt;/a>
opravdu poslali nový kus &amp;hellip;&lt;/div>

&lt;div class='p'>p.s.2 nezmínil jsem, že pokud si chcete sami zkusit detekci, tak stačí zavolat&lt;/div>

&lt;pre>./navbox.py &amp;ndash;test roundelnav_272.jpg&lt;/pre>

&lt;hr/>

&lt;div class='p'>&lt;a id="150407">&lt;/a>&lt;/div>

&lt;h2>7. duben 2015 &amp;mdash; Konec zápůjčky.&lt;/h2>

&lt;div class='p'>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
&lt;a href='http://www.kufr.cz/view.php?nazevclanku=prehled-tymu-roro15&amp;amp;cisloclanku=2015010004' class='external'>Robotem
rovně 2015&lt;/a> (zbývá 7 dní do ukončení registrace!), potřeba dekódovat
složitější &lt;a href='/articles/h264-drone-vision/cs'>H.264 video&lt;/a> &amp;hellip;&lt;/div>

&lt;div class='p'>Murphy se mi zase šklebí za zády &amp;mdash; dnes jsem si stáhl
&lt;a href='https://github.com/MegaPirateNG/ardupilot-mpng/tree/master' class='external'>ardupilot-mpng&lt;/a> a
&lt;a href='https://github.com/paparazzi/paparazzi' class='external'>paparazzi&lt;/a> 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
&lt;a href='https://medium.com/message/build-cargo-drones-get-rich-9b858dffaba' class='external'>Build
cargo drones, get rich&lt;/a> a o tom, že existují alternativní SW pro hračky od
Parrotu &amp;hellip; no možná je dobře, že dronu vrátím teď. Na skříni je zaprášená
&lt;a href='/robots/heidi/cs'>Heidi&lt;/a> a tam se to dá zkusit také &amp;hellip; jen to nebude tolik
bolet.&lt;/div>

&lt;div class='p'>S Ondrou jsme se také bavili o tom, že je pěkné, že moje práce ostatní zaujala
natolik, že si udělali
&lt;a href='https://github.com/robotika/katarina/network/members' class='external'>fork Katariny&lt;/a> &lt;span class='smile'>&lt;/span>.
„Nu wot, što dělať. Děduška stárij i pojezd bystrij”.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150416">&lt;/a>&lt;/div>

&lt;h2>16. duben 2015 &amp;mdash; Remote Testing&lt;/h2>

&lt;div class='p'>Teď to teprve začíná mít pořádné „grády” &lt;span class='smile'>&lt;/span>. Programování bez drony.
Testovací oblast Mexiko: &lt;i>...in México there are no rules to fly drones yet
(zones out of danger) and I have a big area.&lt;/i> 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í &amp;hellip; ale chtěli nějaké funkce a já nemám jak to
zkusit (tedy ten crash byl z nulté iterace &lt;i>testFlyForward&lt;/i>). Začal jsem tedy
raději oddělenou větev &lt;b>DEVELOP&lt;/b> a arénu pro kaskadéry najdete zde:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/robotika/katarina/tree/DEVELOP/remote_testing' class='external'>https://github.com/robotika/katarina/tree/DEVELOP/remote_testing&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="150420">&lt;/a>&lt;/div>

&lt;h2>20. duben 2015 &amp;mdash; Mexické video&lt;/h2>

&lt;div class='p'>Ze čtyř současných „testerů” je Aldo z Mexika asi nejaktivnější. Uploadnul i
video z první kolize:&lt;/div>

&lt;div class='p'>&lt;iframe width="640" height="360" src="https://www.youtube.com/embed/A1jhtuq6VY0?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>&lt;/div>

&lt;div class='p'>Řešíme teď navigaci na &lt;b>Home&lt;/b>, kdy lze zadat souřadnice, ale skončí to ve
stavu &lt;i>pending&lt;/i> &amp;mdash; tipoval bych, že ten příkaz bude nutné zadat ještě
jednou, ale nechal bych Parrotu ještě 24h na
&lt;a href='https://github.com/ARDroneSDK3/libARCommands/issues/7' class='external'>odpověď&lt;/a>.&lt;/div>

&lt;div class='p'>Jinak jsem snad konečně vyřešil import z různých adresářů
(&lt;a href='https://github.com/robotika/katarina/commit/c6426312c3f7e35bc6b24f5c57b7b459e789d0fa' class='external'>diff&lt;/a>)
a to podle vzoru na
&lt;a href='http://stackoverflow.com/questions/279237/import-a-module-from-a-relative-path' class='external'>stackoverflow&lt;/a>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150421">&lt;/a>&lt;/div>

&lt;h2>21. duben 2015 &amp;mdash; Skrytá kamera a Nao&lt;/h2>

&lt;div class='p'>Tak jsme s Charlesem snad odladili počáteční inicializaci všech proměnných. Ono
to místo &lt;i>AllSettings&lt;/i> totiž spíše chtělo &lt;i>AllStates&lt;/i>. Tak nechť toto
(&lt;a href='https://github.com/robotika/katarina/commit/899ad58f02f1249342514c9ea02ac9385504907e' class='external'>diff&lt;/a>)
je první „vzdáleně odladěný” kód.&lt;/div>

&lt;div class='p'>V posledním pokusu (&lt;i>meta_150420_173419.log&lt;/i>) 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
&lt;a href='https://www.aldebaran.com/en/humanoid-robot/nao-robot' class='external'>Nao&lt;/a>, pózující na
druhém stole &lt;span class='smile'>&lt;/span>. Tak se mi to hned spojilo s
&lt;a href='http://www.lafabrika.cz/program.php?subsect=read&amp;amp;co=&amp;amp;p_id=1576' class='external'>Tanečně-performačním
konceptem postaveném na bázi robotického fotbalu.&lt;/a>, co jsem viděl před dvěma
týdny v La Fabrika. &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Jinak v Mexiku prý prší, takže další &lt;i>NavigateHome&lt;/i> test se zatím odkládá &amp;hellip;
ono tedy ještě není jasné, co jsou nutné podmínky, aby to fungovalo &amp;mdash; viz
&lt;a href='https://github.com/ARDroneSDK3/libARCommands/issues/7' class='external'>Issue #7&lt;/a>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a href='/robots/katarina/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>H.264 pro vidění dravce</title>
	<link rel='alternate' href="http://localhost/articles/h264-drone-vision/cs"/>
	<id>http://localhost/articles/h264-drone-vision/cs</id>
	<updated>2013-07-18T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> H.264 je video codec, který používá AR.Drone 2.0 pro streamování videa. Co bych
rád prozkoumal je, zda už přímo z těchto dat nelze detekovat překážky, aniž by
se obrázek rozbaloval. Cílem by bylo proletět 100m vzrostlým lesem bez
kolize. &lt;b>Blog update:&lt;/b> 12/3 &amp;mdash; &lt;a href='/articles/h264-drone-vision/cs#150312'>ARDrone3 - první řada&lt;/a>
 </summary>
	<content type='html'> 
&lt;div class='p'>&lt;iframe
src='http://fandorama.cz/projekty/921778164/h264-drone-vision/status.html'
width='200' height='120' align='right' style='border: none;'>&lt;/iframe>&lt;/div>

&lt;h2>Motivace&lt;/h2>

&lt;div class='p'>Když jsem před více jak deseti lety kráce pracoval pro firmu IXOS, tak jejich
úspěch byl, mimo jiné, postaven na možnosti zpracovávat rovnou zabalené
obrázky, aniž by je bylo nutné nejprve rozbalovat. Pokud má video výstup z
drony rozlišení 1280x720 v RGB, tak to máte 2.7MB na jeden obrázek. Pokud ale
použijete přímo pakovanou verzi, tak jeden „rozdílový” snímek (P-frame) má
běžně pod 10kB. P-frame obsahuje informaci o pohybu jednotlivých makro-bloků,
ze které by se možná dalo zjistit, zda v daném směru je objekt blízko či
daleko&amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/mix2.jpg'>&lt;img src='/articles/h264-drone-vision/mix2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Fandorama&lt;/h2>

&lt;div class='p'>Toto je první „průzkumný” &lt;a href='/articles/fandorama/cs'>fandorama projekt&lt;/a>. Jedná se
možná o slepou uličku, ale možná také ne. Pokud by vás výsledky zajímaly, s
tím, že průběžné pozorování budou popisovány již ve třetím „létajícím
blogu”, tak projekt podpořte. V případě úspěchu získáte slevu ve výši vašeho
příspěvku na nákup Parrot AR.Drone 2.0 či náhradních dílů u firmy
&lt;a href='http://www.profitec.cz/elektronicke-hracky-1.php' class='external'>Profitec&lt;/a>, českého
distributora firmy Parrot.&lt;/div>

&lt;div class='p'>&lt;a href='/articles/h264-drone-vision/cs#email'>kontaktní formulář&lt;/a>&lt;/div>

&lt;ul>
&lt;li>Detaily tohoto projektu: &lt;a href='http://fandorama.cz/projekty/921778164/h264-drone-vision/' class='external'>http://fandorama.cz/projekty/921778164/h264-drone-vision/&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;hr/>

&lt;h1>Blog&lt;/h1>

&lt;div class='p'>Toto je třetí „létající blog” o autonomní navigaci &lt;a href='/robots/heidi/cs'>Heidi&lt;/a>.
Už nevím na kterou soutěž jet (a 450EUR se mi za
&lt;a href='http://www.imav2013.org/' class='external'>IMAV 2013&lt;/a> dávat nechtělo), tak toto bude malé
„samo-studium”.&lt;/div>

&lt;div class='p'>Předešlé díly blogu případně naleznete zde:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='/competitions/iarc/2013/cs'>I. blog&lt;/a>&lt;/li>

&lt;li>&lt;a href='/competitions/roboorienteering/2013/cs'>II. blog&lt;/a>&lt;/li>

&lt;li>&lt;a href='/robots/heidi/cs'>rozcestník&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>Stejně jako dříve i tady předem se omlouvám za texty bez korekcí.&lt;/div>

&lt;hr/>

&lt;h2>22. července 2013 &amp;mdash; BEGIN&lt;/h2>

&lt;div class='p'>Teď ráno toho už asi moc nestihnu, tak alespoň začnu. Nejprve díky za první
„anonymní” podporu na
&lt;a href='http://fandorama.cz/projekty/921778164/h264-drone-vision/' class='external'>fandorama.cz&lt;/a> (do
zprávy pro příjemce prosím dávejte kontaktní mail, ať vám pak mohu napsat).&lt;/div>

&lt;div class='p'>AR.Drone 2.0 používá pro kódování videa
&lt;a href='http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC' class='external'>H.264 codec&lt;/a>, který je relativně
nový (hmm, 2003 == deset let). Vedle online videa se běžně používá třeba Blue-ray
discích.&lt;/div>

&lt;div class='p'>Pro čtení videa z drony stačí otevřít TCP spojení na portu 5555, přeskakovat
PaVE hlavičky a co vám zbude jsou obrázky kódované H.264 codecem. Někteří
(např. &lt;a href='https://github.com/puku0x/cvdrone' class='external'>CVDrone&lt;/a>) se s PaVE hlavičkami
vůbec netrápí a rovnou hledají začátky takzvaných „NAL bloků” (zájemcům bych
asi doporučil PDFko &lt;a href='http://www.img.lx.it.pt/~fp/artigos/H264_final.pdf' class='external'>Video
coding with H.264/AVC: Tools, Performance, and Complexity&lt;/a> &amp;mdash; je to celkem
čitelné a zároveň tam naleznete dostatek užitečných detailů pro první vhled).&lt;/div>

&lt;h3>NAL bloky&lt;/h3>

&lt;div class='p'>NAL je zkratka za Network Adaptation Layer. Jednotlivý obrázek (frame) je
popsán několika díly (slice) a každý začíná kódem &lt;b>00 00 00 01&lt;/b>. Následuje
bajt určující typ &amp;mdash; když jsem jednoduchý prográmek pustil na jedno z videí,
tak jsem dostal 0x67, 0x68, 0x65, 0x61 (mnohokrát), 0x3D (omyl?), &amp;hellip; Nás budou
zajímat 0x61, což jsou P-slices (predicted) a měly by obsahovat i informace o
pohybu jednotlivých makrobloků (oblastí velikosti 16x16 pixelů).&lt;/div>

&lt;div class='p'>Timeout &amp;hellip; musím do práce. Pokračování příště.&lt;/div>

&lt;hr/>

&lt;h2>23-24. července 2013 &amp;mdash; PaVE&lt;/h2>

&lt;div class='p'>Dnes jsem začal úklidem a odstraňováním PaVE (Parrot Video Encapsulation)
hlaviček. Zatímco v zabaleném videu je kód 00 00 00 01 velice nepravděpodobný,
v PaVE hlavičce je skoro jistý. 0x3D ze včerejška tedy zmizí a dostanete něco
jako:&lt;/div>

&lt;pre>h264.py logs\video_rec_130714_140929.bin | uniq -c
      1 0x67
      1 0x68
      1 0x65
     29 0x61
      1 0x67
      1 0x68
      1 0x65
     29 0x61
       . . .
      1 0x67
      1 0x68
      1 0x65
     29 0x61
      1 0x67
      1 0x68
      1 0x65
     29 0x61
      1 0x67
      1 0x68
      1 0x65
     18 0x61&lt;/pre>

&lt;div class='p'>Videa jsou 30fps, takže každou sekundu je to vždy jeden celý snímek a 29
predikovaných (P-slice).&lt;/div>

&lt;h3>&lt;a href='http://ffmpeg.org/' class='external'>ffmpeg&lt;/a>&lt;/h3>

&lt;div class='p'>Stáhl jsem si &lt;a href='http://ffmpeg.org/download.html' class='external'>ffmpeg&lt;/a>, abych měl
dokumentaci i z druhého extrému. Zdrojový kód i s git repository má 126MB.
Musím přiznat, že používání gitu pro Open Source projekty je opravdu velmi
pohodlné (jak už jednou máte git nainstalovaný):&lt;/div>

&lt;pre>git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg&lt;/pre>

&lt;div class='p'>Asi vhodné místo pro začátek je &lt;i>ffmpeg/libavcodec/h264_parser.c&lt;/i>. Pro určení
typu části (slice) je důležitých spodních 5 bitů, tedy z 0x67, 0x68, 0x65 a
0x61 dostaneme 7=NAL_SPS, 8=NAL_PPS, 5=NAL_IDR_SLICE a 1=NAL_SLICE. Žádný další
typ AR.Drone 2.0 neposílá.&lt;/div>

&lt;div class='p'>Nás zajímá 1=NAL_SLICE &amp;hellip; ale nejsem si jistý, zda je čitelnější zdrojový kód
nebo
&lt;a href='http://stackoverflow.com/questions/10612893/h264-parsing-slice-header-detection?rq=1' class='external'>dokumentace&lt;/a>
(sekce 7.3.3).&lt;/div>

&lt;h3>&lt;a href='http://en.wikipedia.org/wiki/Exponential-Golomb_coding' class='external'>Exp-Golomb codes&lt;/a>&lt;/h3>

&lt;div class='p'>Po jednobajtové hlavičce, flag a level bajtu jsou v NAL_SLICE čísla už převážně
kódovaná proměnným počtem bitů. Používají se „Exp-Golomb” kódy, které se
jmenují podle &lt;a href='http://en.wikipedia.org/wiki/Golomb_coding' class='external'>Solomon W.
Golomba&lt;/a>, jenž je v roce 1960 vymyslel. Pro popis čísel stačí zhruba
dvojnásobek logaritmu bitů. 1 =&amp;gt; 0; 01x =&amp;gt; 1,2; 001xx =&amp;gt; 3,4,5,6; atd. Pěkné
tabulky najdete např. na
&lt;a href='http://en.wikipedia.org/wiki/Exponential-Golomb_coding' class='external'>wikipedii&lt;/a>.  Podobným
způsobem se kódují i čísla se znaménkem.&lt;/div>

&lt;div class='p'>Trošku váhám, zda má smysl takto, málem po větách, to dávat na web. Ještě hodně
tápu, ale když tam nic nedám, tak se nic nedozvíte &lt;span class='wink'>&lt;/span> &amp;hellip; snad to brzy začne
mít hlavu a patu.&lt;/div>

&lt;div class='p'>p.s. díky za další podporu &amp;mdash; vypadá to, že minimálně tři další lidi toto téma
zajímá &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;h2>26. července 2013 &amp;mdash; firmware 2.4.1&lt;/h2>

&lt;div class='p'>Dnes malá odbočka, flashnul jsem na &lt;a href='/robots/heidi/cs'>Heidi&lt;/a> nový firmware 2.4.1
s podporou GPS modulu. Jak jsem psal už
&lt;a href='/competitions/roboorienteering/2013/cs'>dříve&lt;/a>, získal jsem ho od kamaráda, co
má iPhone, a pak i našel na
&lt;a href='http://www.digitalsirup.com/downloads/ardronefirmware/list.html' class='external'>webu
vývojářů&lt;/a>. Flashoval jsem to z PC Windows, tj. byla to kombinace informaci
&lt;a href='http://ardrone2.parrot.com/update-ardrone-1/' class='external'>jak flashnout starou dronu&lt;/a>,
tak &lt;a href='http://www.ardrone-flyers.com/forum/viewtopic.php?t=3357' class='external'>postup pro
downgrade firmware nové drony&lt;/a>.&lt;/div>

&lt;div class='p'>Postup ve zkratce:&lt;/div>

&lt;ul>
&lt;li>zapnout dronu (raději s plně nabitými bateriemi)&lt;/li>

&lt;li>ve Windows Exloreru otevřít &lt;b>ftp://192.168.1.1:5551/&lt;/b> a Copy &amp;amp; Paste soubor
&lt;b>ardrone2_update.plf&lt;/b> (zkoušel jsem ještě dva jiné způsoby, ale buď jsem byl
málo trpělivý, nebo prostě nefungovaly)&lt;/li>

&lt;li>připojit se přes telnet a oeditovat verzi update:&lt;/li>
&lt;/ul>

&lt;pre># echo "2.4.1" &amp;gt; /update/version.txt&lt;/pre>

&lt;ul>
&lt;li>vypnout a zapnout napájení&lt;/li>

&lt;li>počkat 2-3 minuty než se rozsvítí zelené LEDky&lt;/li>
&lt;/ul>

&lt;div class='p'>Vše snad proběhlo OK, zvedla se verze firmware a zmizel updateovací soubor:&lt;/div>

&lt;pre>BusyBox v1.14.0 () built-in shell (ash)
Enter 'help' for a list of built-in commands.

# cat /firmware/version.txt
2.4.1
# ls /update/
version.txt
#&lt;/pre>

&lt;div class='p'>A teď důsledky:&lt;/div>

&lt;ol>
&lt;li>zvětší se navdata paket, takže pokud čtete např. pevných 2048 bajtů, vyletí
výjimka (to bylo snadné opravit)&lt;/li>

&lt;li>přestanou fungovat staré drivery, u mne konkrétně sonar:&lt;/li>
&lt;/ol>

&lt;pre>insmod /data/video/driver2/cdc-acm.ko
insmod: can't insert '/data/video/driver2/cdc-acm.ko': invalid module format&lt;/pre>

&lt;div class='p'>&amp;hellip; změnila se totiž i verze kernelu a je tedy třeba vše znova zkompilovat.
Původní 2.6.32.9-gbb4d210 se změnila na &lt;b>2.6.32.9-g1dd1a2a&lt;/b> (tady jsem se teď
zasekl, protože zjišťuji, že prostředí, co jsem měl v práci, už není k
dispozici, takže to bude náročnější krok, než jsem čekal).&lt;/div>

&lt;div class='p'>Hmm, tak ono se toho změnilo více, ne jenom nová datová struktura &amp;hellip; dříve:&lt;/div>

&lt;pre>CTRL STATE 2
1 8
2 52
3 46
4 16
5 12
6 88
7 16
8 24
9 76
10 56
11 16
12 44
13 92
14 108
15 364
16 328
17 8
18 40
19 65
20 12
21 18
22 83
23 56
24 72
25 32
26 8
27 12
65535 8&lt;/pre>

&lt;div class='p'>nyní:&lt;/div>

&lt;pre>CTRL STATE 2
1 8
2 52
3 46
4 16
5 12
6 88
7 16
8 24
9 92
10 56
11 16
12 44
13 92
14 108
15 364
16 328
17 8
18 40
19 65
20 12
21 18
22 83
23 64
24 72
25 32
26 8
27 480
28 6
29 32
65535 8&lt;/pre>

&lt;div class='p'>Struktura 9 (72 na 92), 23 (56 na 64), 27 (12 na 480) a nové 28 a 29.
Nepoužívám žádnou z nich a chápu, že některé programy se změnou velikosti
struktury mohou mít celkem problémy. NAVDATA_PWM_TAG, NAVDATA_WIND_TAG,
NAVDATA_ZIMMU_3000_TAG(?? možná to použili pro něco jiného). No to jsem zvědav,
zda to vůbec poletí &amp;hellip; pokračování po víkendu.&lt;/div>

&lt;hr/>

&lt;h2>1. srpna 2013 &amp;mdash; Sequence Parameter Set (SPS)&lt;/h2>

&lt;div class='p'>Tak konečně mikro-krůček ve zpracování H264 kódovaného videa &amp;hellip;&lt;/div>

&lt;div class='p'>Jako vždy jsem chtěl nejprve použít zkratku a parsovat pouze P-slice, které
snad obsahují ty zajímavé informace. V proudu bitů se ale střídají jak dříve
zmiňovaná čísla v Golomb formátu, tak i čísla s pevným počtem bitů. A chyba
lávky. Jak velký tento fixní počet je, je zase kódované jinde, konkrétně v
SPS-slice(Sequence Parameter Set). Na čem jsem klopýtnul byl &lt;b>frame_num&lt;/b>, kde
počet bitů je v &lt;b>log2_max_frame_num_minus4&lt;/b>.&lt;/div>

&lt;div class='p'>&lt;a href='http://www.itu.int/rec/dologin_pub.asp?lang=e&amp;amp;id=T-REC-H.264-200305-S!!PDF-E&amp;amp;type=items' class='external'>Dokumentaci&lt;/a>
používám z linku přes
&lt;a href='http://stackoverflow.com/questions/10612893/h264-parsing-slice-header-detection?rq=1' class='external'>stack
overflow&lt;/a> a jako velmi užitečnou jsem shledal i C-implementaci, co mi link
poslal jeden fandorama přispěvovatel: &lt;a href='http://www.w6rz.net/h264_parse.zip' class='external'>http://www.w6rz.net/h264_parse.zip&lt;/a>.
Je tam jak EXE, tak zdrojáky, takže si můžu po kouskách snadno ověřovat, že parsuji to samé
co ostatní &amp;hellip;&lt;/div>

&lt;div class='p'>A nějaká pozorování?&lt;/div>

&lt;ul>
&lt;li>&lt;i>log2_max_frame_num_minus4&lt;/i> je zatím všude rovno 10, tedy na uložení
pořadového čísla se používá 14bitů.&lt;/li>

&lt;li>&lt;i>pic_order_cnt_type&lt;/i> je 2, takže jednotlive makro-bloky snad jdou postupně po řádcích&lt;/li>

&lt;li>bloků je 80x45, což odpovídá rozlišení 1280x720&lt;/li>
&lt;/ul>

&lt;div class='p'>Ostatnímu zatím moc nerozumím. Asi bych si přepsal/napsal BitStreamReader, aby
se jak čísla tak „golomby” jednoduššeji četly.&lt;/div>

&lt;hr/>

&lt;h2>19. srpna 2013 &amp;mdash; Picture Parameter Set (PPS)&lt;/h2>

&lt;div class='p'>Byl jsem teď 14 dní na dovolené, tak všechno trošku zahálelo. Na druhou stranu
suma se ještě nepřehoupla, tak tento „výzkum” zatím není závazný &amp;hellip;&lt;/div>

&lt;div class='p'>Tak co nového, resp. starého, protože informace jsou z před-dovolené? Dostal
jsem se snad už konečně až k dekódování makro-bloků, ale nemám žádnou zpětnou
kontrolu, tak asi bude nutné dekódovat celý P-slice. Bylo pro změnu nutné
použít i několik bitů z PPS (Picture Parameter Set). Skoro by bylo na čase to
udělat pořádně, ale to bych nebyl já :-(. SPS a PPS byly stejné ve všech video
záznamech co mám, takže nejrychlejší parsování je to přeskakovat (resp.
assertovat, že jsou stále stejné).&lt;/div>

&lt;div class='p'>PPS je bajtově [0xce, 0x1, 0xa8, 0x77, 0x20], což odpovídá výpisu z minule zmiňovaného parseru:&lt;/div>

&lt;pre>Nal length 10 start code 4 bytes
 ref 3 type 8 Picture parameter set
   pic_parameter_set_id: 0
   seq_parameter_set_id: 0
   entropy_coding_mode_flag: 0
   pic_order_present_flag: 0
   num_slice_groups_minus1: 0
   num_ref_idx_l0_active_minus1: 0
   num_ref_idx_l1_active_minus1: 0
   weighted_pred_flag: 0
   weighted_bipred_idc: 0
   pic_init_qp_minus26: -26
   pic_init_qs_minus26: -14
   chroma_qp_index_offset: 0
   deblocking_filter_control_present_flag: 1
   constrained_intra_pred_flag: 0
   redundant_pic_cnt_present_flag: 0&lt;/pre>

&lt;div class='p'>Ještě doplním SPS, které je také stále stejné:&lt;/div>

&lt;pre>Nal length 14 start code 4 bytes
 ref 3 type 7 Sequence parameter set
   profile: 66
   constaint_set0_flag: 1
   constaint_set1_flag: 0
   constaint_set2_flag: 0
   constaint_set3_flag: 0
   level_idc: 31
   seq parameter set id: 0
   log2_max_frame_num_minus4: 10
   pic_order_cnt_type: 2
   num_ref_frames: 1
   gaps_in_frame_num_value_allowed_flag: 0
   pic_width_in_mbs_minus1: 79 (1280)
   pic_height_in_map_minus1: 44
   frame_mbs_only_flag: 1
     derived height: 720
   direct_8x8_inference_flag: 0
   frame_cropping_flag: 0
   vui_parameters_present_flag: 0&lt;/pre>

&lt;div class='p'>Tak teď už hurá na makro bloky! &lt;span class='smile'>&lt;/span> &amp;hellip; pokračování snad brzy.&lt;/div>

&lt;hr/>

&lt;h2>22. srpna 2013 &amp;mdash; CAVLC vs. CABAC&lt;/h2>

&lt;div class='p'>To jsem si naběhl &amp;mdash; teď už nemám žádnou výmluvu &lt;span class='wink'>&lt;/span>. Na druhou stranu mám
radost, že existuje několik lidí, které výsledky opravdu zajímají &lt;span class='smile'>&lt;/span>. Zpátky
ni krok &amp;hellip;&lt;/div>

&lt;div class='p'>Zatím stále tápu, teď nad souborem &lt;i>m:\git\ffmpeg\libavcodec\h264_cavlc.c&lt;/i>.
Až včera mi došlo, že jsem možná na špatné koleji a bych měl možná studovat
raději &lt;i>m:\git\ffmpeg\libavcodec\h264_cabac.c&lt;/i>?! Co to tedy ten CAVLC a CABAC
je?&lt;/div>

&lt;div class='p'>Jedná se od dva různé způsoby kódování, kde CAVLC je zkratka za
&lt;a href='http://en.wikipedia.org/wiki/Context-adaptive_variable-length_coding' class='external'>Context-adaptive
variable-length coding&lt;/a> a CABAC je
&lt;a href='http://en.wikipedia.org/wiki/Context-based_adaptive_binary_arithmetic_coding' class='external'>Context-adaptive
binary arithmetic coding&lt;/a>.  Celkem pěkný popis je v IEEE článku
&lt;a href='http://www.img.lx.it.pt/~fp/artigos/H264_final.pdf' class='external'>Video coding with
H.264/AVC: Tools, Performance, and Complexity&lt;/a>, ze kterého pochází následující
obrázek: &lt;table class='image_panel center' style='width: 289px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/cavlc-cabac.png'>&lt;img src='/articles/h264-drone-vision/cavlc-cabac_t.png' alt='CAVLC vs. CABAC' title='CAVLC vs. CABAC' class='border'  width='283' height='200'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/cavlc-cabac.png'>CAVLC vs. CABAC&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Matice se linearizuje podle vzoru do 1D pole. U CAVLC se nejprve zjistí počet
nenulových prvků (po transformaci obrazu je většina prvků nulová) a
ukončujících +/- jedniček (často se vyskytují a označují se T1).  Ten se vyšle
v kombinovaném slově (použité jsou kódovací tabulky). Pak jsou jednotlivé
koeficienty procházeny od konce a ukládá se znaménko a hodnota, s použitím
předešlé hodnoty, pomocí šesti kódovacích tabulek. Konečně nulové elementy jsou
indikovány celkovým počtem nul před posledním nenulovým prvkem.  Hm, to jsem to
pěkně odpapouškoval, ale moc tomu tak po ránu nerozumím :-(.&lt;/div>

&lt;div class='p'>Tak ještě jednou podle obrázku. Nenulových prvků je 5, OK. „Trailing” budou
pouze ty koncové jedničky, tj. ta 1,1,-1 a počet 3, OK. Znaménka jedniček od
konce bude to -1,1,1 a pak následují 2 a 1 (pozpátku), OK. Počet nul/mezer jsou
2, OK. A mezi poslední a předposlední žádná nula není, tj. 0, pak jsou dvě
mezery, tj. 1, 1 a zbytek už je nezajímavý (0), protože vím, že nuly měly být
2, OK. Jako hypotéza pochopení CAVLC to teď asi stačí.&lt;/div>

&lt;div class='p'>Mám se s CABAC vůbec zabývat? Standard H264 podporuje oba způsoby, ale který
používá AR Drone 2.0? (timeout, musím do práce&amp;hellip;)&lt;/div>

&lt;div class='p'>p.s. Picture Parameter Set &amp;mdash; int cabac; ///&lt; entropy_coding_mode_flag, který
pro AR Drone 2.0 je vždy 0, tj. CAVLC byla správná volba.&lt;/div>

&lt;hr/>

&lt;h2>23. srpna 2013 &amp;mdash; ./ffprobe -report s TRACE&lt;/h2>

&lt;div class='p'>Když jsem pročítal zdrojový kód &lt;a href='http://www.ffmpeg.org/' class='external'>ffmpeg&lt;/a> na
&lt;a href='http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavcodec/h264_cavlc.c;h=8facf5571f2c5a3bf716ace683312b2f78f55f78;hb=HEAD' class='external'>dekódovaní
CAVLC&lt;/a>, tak na mnoha místech byl &lt;b>tprintf&lt;/b>, který by vypisoval přesně to
co mne zajímalo. Implementace této funkce ale je na &lt;b>#ifdef TRACE&lt;/b>, který je
třeba odkomentovat v &lt;i>m:\git\ffmpeg\libavcodec\get_bits.h:588&lt;/i> a nově
zkompilovat. Přešel jsem tedy na Linux, kde příprava a kompilace byla otázkou
pár minut.&lt;/div>

&lt;div class='p'>Bylo třeba udělat následující kroky:&lt;/div>

&lt;ul>
&lt;li>git clone git://source.ffmpeg.org/ffmpeg.git&lt;/li>

&lt;li>./configure&lt;/li>

&lt;li>editace ffmpeg/libavcodec/get_bits.h&lt;/li>

&lt;li>make&lt;/li>

&lt;li>./ffprobe -report &amp;lt;moje video&amp;gt;&lt;/li>
&lt;/ul>

&lt;div class='p'>Výsledek zcela předčil mé očekávání. V automaticky vygenerovaném logu (je nutné
použít parametr &lt;b>-report&lt;/b>) je vedle mnoha &lt;b>tprintf&lt;/b> výpisů i bitový vypis s
odkazem do kódu, kde přesně byl dekódován. Ještě varování: ten log je
obrovský, protože pár bitů nahrazujete jednou nebo více řádkami textu a není
možné parsovat  pouze váš P-slice bez úvodních SPS, PPS a I-slice &amp;hellip;&lt;/div>

&lt;div class='p'>Malý výsek pro představu &amp;mdash; odpovídající začátku P-slice:&lt;/div>

&lt;div class='p'>&lt;pre style="font-size:x-small;">
1                           1  1   0 ue      2 in libavcodec/h264.c decode_slice_header:3363
00000000000001              1 14   1 bit     3 in libavcodec/h264.c decode_slice_header:3500
1                           1  1   1 bit    17 in libavcodec/h264.c decode_slice_header:3779
1                           1  1   0 ue     18 in libavcodec/h264.c decode_slice_header:3782
[h264  0x2a02580] List0: ST fn:0 0x0x7f64e315a250
0                           0  1   0 bit    19 in libavcodec/h264_refs.c ff_h264_decode_ref_pic_list_reordering:215
0                           0  1   0 bit    20 in libavcodec/h264_refs.c ff_h264_decode_ref_pic_marking:759
00000111110                62 11  31 se     21 in libavcodec/h264.c decode_slice_header:3870
1                           1  1   0 se     33 in libavcodec/h264.c decode_slice_header:3900
1                           1  1   0 se     34 in libavcodec/h264.c decode_slice_header:3901
[h264  0x2a02580] pic:1 mb:0/0
1                           1  1   0 ue     36 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:733
[h264  0x2a02580] topright MV not available
[h264  0x2a02580] pred_motion match_count=0
[h264  0x2a02580] pred_motion (-2  0  0) (-2  0  0) (-2  0  0) -> ( 0  0  0) at  0  0 0 list 0
1                           1  1   0 se     37 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:966
1                           1  1   0 se     38 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:967
[h264  0x2a02580] final mv:0 0
0001011                    11  7  10 ue     39 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:1054
1                           1  1   0 se     46 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:1101
[h264  0x2a02580] pred_nnz L40 T0 n8 s28 P0
1                           1  1   0 vlc    47 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pred_nnz L0 T0 n9 s29 P0
01                          1  2   5 vlc    48 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] trailing:1, total:1
011                         3  3   1 vlc    51 in libavcodec/h264_cavlc.c decode_residual:581
[h264  0x2a02580] pred_nnz L40 T0 n10 s36 P0
1                           1  1   0 vlc    54 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pred_nnz L0 T1 n11 s37 P1
1                           1  1   0 vlc    55 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pred_nnz L1 T0 n12 s30 P1
01                          1  2   5 vlc    56 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] trailing:1, total:1
00011                       3  5   5 vlc    59 in libavcodec/h264_cavlc.c decode_residual:581
[h264  0x2a02580] pred_nnz L1 T0 n13 s31 P1
1                           1  1   0 vlc    64 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pred_nnz L0 T1 n14 s38 P1
1                           1  1   0 vlc    65 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pred_nnz L0 T0 n15 s39 P0
1                           1  1   0 vlc    66 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pic:1 mb:1/0
1                           1  1   0 ue     68 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:733
[h264  0x2a02580] topright MV not available
[h264  0x2a02580] pred_motion match_count=1
[h264  0x2a02580] pred_motion (-2  0  0) (-2  0  0) ( 0  0  0) -> ( 0  0  0) at  1  0 0 list 0
1                           1  1   0 se     69 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:966
1                           1  1   0 se     70 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:967
[h264  0x2a02580] final mv:0 0
000010100                  20  9  19 ue     71 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:1054
00101                       5  5  -2 se     80 in libavcodec/h264_cavlc.c ff_h264_decode_mb_cavlc:1101
[h264  0x2a02580] pred_nnz L0 T40 n0 s12 P0
01                          1  2   5 vlc    85 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] trailing:1, total:1
011                         3  3   1 vlc    88 in libavcodec/h264_cavlc.c decode_residual:581
[h264  0x2a02580] pred_nnz L1 T40 n1 s13 P1
1                           1  1   0 vlc    91 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pred_nnz L0 T1 n2 s20 P1
1                           1  1   0 vlc    92 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pred_nnz L0 T0 n3 s21 P0
01                          1  2   5 vlc    93 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] trailing:1, total:1
0010                        2  4   4 vlc    96 in libavcodec/h264_cavlc.c decode_residual:581
[h264  0x2a02580] pred_nnz L0 T40 n4 s14 P0
1                           1  1   0 vlc   100 in libavcodec/h264_cavlc.c decode_residual:465
[h264  0x2a02580] pred_nnz L0 T40 n5 s15 P0
&amp;hellip;
&lt;/pre>&lt;/div>

&lt;hr/>

&lt;h2>27. srpna 2013 &amp;mdash; není všechno zlato &amp;hellip;&lt;/h2>

&lt;div class='p'>&amp;hellip; co se třpytí aneb snažím se podle výstupu z ffprobe upravit svůj
pythonovský skriptík a ono v tom 82MB textovém dumpu ze dvou snímků není
všechno :-(. Konkrétně:&lt;/div>

&lt;pre>00000111110   62 11  31 se     21 in libavcodec/h264.c decode_slice_header:3876
1              1  1   0 se     33 in libavcodec/h264.c decode_slice_header:3906
1              1  1   0 se     34 in libavcodec/h264.c decode_slice_header:3907&lt;/pre>

&lt;div class='p'>Tj. když se přečte slice_qp_delta, která má 11 bitů, s tím, že se začína na 21
bitu ve video streamu (vnitřek slice), tak se &lt;i>bitový čítač&lt;/i> posune o 12 a
nikoliv o 11 na 33. Důvod je, že tam chybí čtení&lt;/div>

&lt;pre>tmp = get_ue_golomb_31(&amp;amp;h->gb);&lt;/pre>

&lt;div class='p'>na libavcodec/h264.c decode_slice_header:3895.&lt;/div>

&lt;div class='p'>Je tedy možné, že některá čtení z podmínky TRACE vypadla, nebo TRACE musí být
definované někde trošku jinde (???). Postup je pomalý, ale snad to alespoň lépe
pochopím &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>27. srpna 2013 &amp;mdash; ce(v): context-adaptive variable-length entropy-coded syntax element&lt;/h2>

&lt;div class='p'>No není to krásný název? Doufám, že to je už poslední vychytávka pro parsování
CAVLC. Jedná se o sadu tabulek s proměnnou délkou klíče, která např. určuje
počet nenulových prvků a jedniček na konci sekvence. O jakou se přesně jedná
tabulku určují vstupní parametry. Je to vlastně klasický bitový slovník, tak
nevím, proč se tak čertím &lt;span class='wink'>&lt;/span>. Asi se mi nechce přepisovat ty tabulky, ale ani
to není až tak strašné, jenom čas už není &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>6. září 2013 &amp;mdash; zkratka&lt;/h2>

&lt;div class='p'>Kdysi mi bylo vyčteno, že používám nedovolené zkratky &amp;hellip; a používám. Stále
jsem to celé dekódování CAVLC do konce nedotáhl, a přitom to není „to
hlavní”. Na druhou stranu mé chápání H.264 se už trošku posunulo a tak
přečtení seminární práce
&lt;a href='http://keyj.emphy.de/files/projects/SA_paper.pdf' class='external'>Implementation of a basic
H.264/AVC Decoder&lt;/a> od Martina Fiedlera byla už radost a většině jsem i rozuměl
&lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Hledal jsem alternativní implementaci k FFMPEG, pokud možno jednoduchou (i
kdyby pomalou) a pro Windows. Ve zmiňované práci byl mezi odkazy link
&lt;a href='http://iphome.hhi.de/suehring/tml/download/' class='external'>[5] H.264/AVC Reference
Software&lt;/a> (opravený původní link).  Stáhl jsem si
&lt;a href='http://iphome.hhi.de/suehring/tml/download/jm18.5.zip' class='external'>jm18.5.zip&lt;/a>, rozbalil
a našel projekty pro všechna Visual Studia, včetně toho, co používám (stále
vc9). Chvíli jsem si krokoval v debugeru, ale chybějící bity pro vlastní
implementaci nevykoukal. Tak jsem použil „dočasnou zkratku” a do souboru
&lt;b>macroblock.c:405&lt;/b> připsal:&lt;/div>

&lt;pre>fprintf( stderr, "%d %d %d %d\n", currMB->block_x/4, currMB->block_y/4, curr_mv.mv_x, curr_mv.mv_y );&lt;/pre>

&lt;div class='p'>a dál si hrál už jenom s parsováním stderr výstupu v Pythonu. Dobrá zpráva je,
že minimálně první dva snímky měly identické posuny jako TRACE z FFMPEG (včetně
podivného (-130, 60), ale většina byla +/-2). Výsledkem jsou 80x45 pixelů
veliké „snímky”, kde pro vizualizaci jsem použil součet absolutních hodnot
přes 30 snímků a pak přeškáloval, aby maximum bylo 255. Výsledek jsem pak
uložil v &lt;a href='http://netpbm.sourceforge.net/doc/pgm.html' class='external'>PGM formátu&lt;/a>. Při startu
to vypadá např. takto:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 86px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/articles/h264-drone-vision/pgm-start.png' alt='Integrace pohybu ze 30ti snímků' title='Integrace pohybu ze 30ti snímků' class='border'  width='80' height='45'/>&lt;/span>&lt;br/>
&lt;span>Integrace pohybu ze 30ti snímků&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>nebo chcete-li &lt;a href='/articles/h264-drone-vision/pgm-start.pgm'>původní textový soubor v PGM&lt;/a>.&lt;/div>

&lt;div class='p'>p.s. kdyby jste šli v mých stopách, tak si nezapomeňte změnit konfiguraci tak,
aby se negeneroval výstupní soubor (je jinak obrovský). Upravené řádky konfigurace 
vypadájí takto:&lt;/div>

&lt;pre>InputFile    = "m:\hg\md\heidi\frames\mix2.bin"   # H.264/AVC coded bitstream
OutputFile   = ""   # Output file, YUV/RGB&lt;/pre>

&lt;hr/>

&lt;h2>10. září 2013 &amp;mdash; combinePgm ver0&lt;/h2>

&lt;div class='p'>Jelikož procházet jednotlivé pidi-snímky je dost nepraktické, tak jsem jsi
napsal jednoduchý skript (spíše 10 řádek) na kombinování několika snímků do
jednoho. Výsledek 10x10 se teď počítá &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 406px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/pic_10x10.png'>&lt;img src='/articles/h264-drone-vision/pic_10x10_t.png' alt='prvních 100 snímků' title='prvních 100 snímků' class='border'  width='400' height='225'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/pic_10x10.png'>prvních 100 snímků&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&amp;hellip; hmm, čekal jsem něco více, asi tomu budu muset podhodit akčnější video.
Vypadá to spíše na nějakou chybu, protože výstupní PGM jsou od třetího snímku
všechna stejná :-(.&lt;/div>

&lt;div class='p'>p.s. pro zpestření příkládám video link od Jirky:
&lt;a href='http://youtu.be/wYHDf2AgWlo' class='external'>čtyřtulka a osmitulka jako servírky&lt;/a> &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h2>12. září 2013 &amp;mdash; programování ve sprše&lt;/h2>

&lt;div class='p'>Přiznám se, že hrozně nerad hledám chyby v programu civěním do monitoru.
Daleko přijatelnější je „nasadit si brouka do hlavy” a on se ten „bug” pak
sám najde &lt;span class='smile'>&lt;/span>. Stejné to bylo i s předešlým snímkem, proč se opakují stále
stejné obrázky?&lt;/div>

&lt;div class='p'>A rozuzlení? Makrobloky je možné zcela přeskočit, takže ve výpisu se vůbec
neobjeví. Místo čekání na makroblok s indexem (79,44), teď čekám na
„singularitu”, tj. když x+y*80 náhle klesne, tak to už je další snímek (máte
pravdu, dalo by se to udělat pořádně v generátoru toho vstupního textového
souboru, ale &amp;hellip;).&lt;/div>

&lt;div class='p'>Další chyba byla, že ten videosoubor opravdu obsahoval jenom 60 snímků a tak
vždy dojel na konec. Přestal jsem tedy integrovat po 30ti snímcích, ale změnil
to na 7. Proč? No protože video krátkého letu u nás v parku má 707 snímků a já
chtěl udělat 10x10 mozaiku &lt;span class='wink'>&lt;/span>. Tady je:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 406px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/tree-detection-10x10.png'>&lt;img src='/articles/h264-drone-vision/tree-detection-10x10_t.png' alt='Duch stromu' title='Duch stromu' class='border'  width='400' height='225'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/tree-detection-10x10.png'>Duch stromu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Referenční video na youtube naleznete zde: &lt;a href='http://youtu.be/9NOvif6gtiU' class='external'>http://youtu.be/9NOvif6gtiU&lt;/a>&lt;/div>

&lt;div class='p'>p.s. aby nedošlo k omylu &amp;mdash; toto je video z 12. června 2013, kdy jsem se
připravoval na &lt;a href='/competitions/roboorienteering/2013/cs'>RoboOrienteering&lt;/a>, tj.
sice autonomní let, ale pouze se sonarem.&lt;/div>

&lt;hr/>

&lt;h2>26. září 2013 &amp;mdash; sudé posuny&lt;/h2>

&lt;div class='p'>Práce okolo &lt;a href='/competitions/robotour/2013/results/cs'>Robotour 2013&lt;/a> se už pomalu
uklidňují (je ještě potřeba vymyslet vhodné místo pro rok 2014), tak se můžu
vrátit k hraní s dronou a videem. Krátkých zpráv by za tu dobu bylo hned
několik, jako polemika na téma „figura a pozadí”, kdy strom je jednou
bílý a jednou černý, nebo že už jsou k dispozici
&lt;a href='http://www.aerialroboticscompetition.org/' class='external'>pravidla pro IARC 7th Mission&lt;/a>, kde
létající roboti budou nahánět uklízecí hordu Roomba iCreate robotů (do vánoc
bych o tom asi něco napsal zase podrobnji) a pod. Zpět k H264&amp;hellip;&lt;/div>

&lt;div class='p'>Z PGM obrázků je sice vidět, že „tam něco je”, ale informaci, zda mám odbočit
vpravo/vlevo či nahoru/dolů tam zatím nevidím. Chtěl jsem si tedy udělat 2D
histogram všech posunů v obrázku a první překvapení &amp;mdash; všechna použitá čísla
jsou sudá! Ano, testoval jsem to jenom přes jedno krátké video, takže mohu
tvrdit že všech 1977841 posunů je sudých, ale nechal bych tam assert a myslím,
že bude platit.&lt;/div>

&lt;div class='p'>Co to znamená? Zase jen hypotéza: ve specifikaci se píše o možnosti
čtvrt-pixelového kroku, takže si myslím, že posun 2 je ve skutečnosti posun o
půlpixel a jemnějším krokem se video procesor netrápí.&lt;/div>

&lt;div class='p'>Další pozorování je, že většina posunů je ve čtverci +/- 10 pixelů, ale najde
se i pár „ustřelených” jako posun (0,48). Ty pak ale určují šedotónovou škálu
a tak bych je buď vyhodil nebo oříznul.&lt;/div>

&lt;div class='p'>Platí to i pro druhý extrém, kdy je celý obraz v pohybu, a stále zde najdu
nějaké statické, tedy s posunem (0,0).&lt;/div>

&lt;div class='p'>Příklad 1: defaultdict(&lt;type 'int'>, {(-2, 0): 20, (6, 4): 1, (8, 0): 2, (-2, 4):
1, (-2, 8): 1, (4, -6): 1, (2, 6): 1, (14, 0): 1, (-2, 2): 7, (-4, 30): 1, (-4,
6): 1, (6, 2): 1, (4, 0): 14, (0, 6): 3, (-6, 0): 1, (0, -8): 2, (4, 4): 2, (2,
-4): 1, (6, -8): 1, (-2, -2): 2, (-10, -4): 1, (-2, -26): 1, (0, -4): 6, (4,
10): 1, (-2, -6): 1, (0, 0): 3395, (2, -2): 2, (6, 0): 2, (0, 12): 1, (4, -8):
1, (-4, 0): 5, (0, 4): 9, (0, 8): 8, (8, -28): 1, (4, -4): 1, (12, 0): 7, (-4,
16): 1, (2, 2): 7, (2, 0): 46, (0, 48): 1, (0, -2): 8, (-8, 0): 2, (0, 2): 29})&lt;/div>

&lt;div class='p'>&amp;hellip; uznávám, že toto moc čitelné není. Je tam ale vidět naprostá většina (0,0),
desítky posunů (0,2) a (2,0) a zbytek jsou jen drobky(?). Toto byl příklad,
když je drona v klidu.&lt;/div>

&lt;div class='p'>Příklad 2: defaultdict(&lt;type 'int'>, {(12, 12): 1, (2, -4): 2, (0, 14): 2, (-4,
0): 6, (-2, 4): 1, (12, -8): 1, (14, 0): 1, (-2, 2): 23, (2, 4): 3, (12, -4):
1, (4, -2): 1, (-2, 0): 5, (0, 6): 2, (-6, 0): 1, (0, -8): 5, (4, 4): 1, (2,
2): 326, (0, 4): 15, (4, 0): 57, (0, -4): 8, (0, 0): 1652, (2, -2): 183, (6,
0): 1, (0, 12): 1, (0, -2): 51, (8, 0): 2, (4, 2): 20, (0, 8): 2, (-4, 4): 1,
(12, 0): 1, (0, -12): 1, (0, -20): 1, (2, 0): 759, (-12, 50): 1, (0, 2): 461,
(0, 10): 1})&lt;/div>

&lt;div class='p'>&amp;hellip; vzlet. Stále dominuje (0,0), ale srovnatelné hodnoty mají i posuny (2,0) a
(0,2), nebo (2,2). Toto je z rozdílového snímku na 30Hz, takže je potřeba to
posčítat přes více. Asi čitelnější je to rozdělené přes desítkový logaritmus:&lt;/div>

&lt;ul>
&lt;li>1000 [((0, 0), 1652)]&lt;/li>

&lt;li>100 [((2, -2), 183), ((0, 2), 461), ((2, 0), 759), ((2, 2), 326)]&lt;/li>

&lt;li>10 [((0, -2), 51), ((-2, 2), 23), ((0, 4), 15), ((4, 2), 20), ((4, 0), 57)]&lt;/li>
&lt;/ul>

&lt;div class='p'>Další plán je tedy posčítat jednotlivé vektory přes více snímků (znaménkově).
Dosud jsem jen dělal obrázky ze součtu absolutních hodnot a třeba ty světlé
oblasti jsou jen místa častých zákmitů &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>1. říjen 2013 &amp;mdash; pygame art&lt;/h2>

&lt;div class='p'>V pátek jsem si trošku hrál s vizualizací posunů makrobloků. Jako nástroj
používám už několik let &lt;a href='http://www.pygame.org/docs/' class='external'>PyGame&lt;/a>. Teď jsem do kódu
ještě přidal řádku&lt;/div>

&lt;pre>pygame.image.save( foreground, filename )&lt;/pre>

&lt;div class='p'>ať z toho máte i něco vy ostatní. Jako koncovku souboru doporučuji PNG, protože
na podobné trojbarevné obrázky dostanete asi 7x menší soubor než pro JPG a
navíc bezztrátově (no 100% si s tou bezztrátovostí jistý nejsem).&lt;/div>

&lt;div class='p'>Dnes jenom „chybné” obrázky, které mi připomněly robotovi kreace z roku 1992.
Tehdy se snažil o naplánování cesty s omezenou křivostí a výsledné křivky byly
někdy zajímavější než celý algoritmus:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/pygame-art-0239.png'>&lt;img src='/articles/h264-drone-vision/pygame-art-0239_t.png' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/pygame-art-0320.png'>&lt;img src='/articles/h264-drone-vision/pygame-art-0320_t.png' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/pygame-art-0374.png'>&lt;img src='/articles/h264-drone-vision/pygame-art-0374_t.png' alt='' title='' class='border'  width='320' height='180'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ještě proč jsou dané obrázky chybné? Jednak vektor je 16x delší než má být
(násobil jsem to velikosti makrobloku), pak má být možná na druhou stranu a
konečně ty červené tečky by asi měly být spíše na druhé straně čáry, protože
teď označují cílové místo a ne zdrojové. Vše je to integrované přes tři
rozdílové snímky.&lt;/div>

&lt;div class='p'>A ještě špatná zpráva na konec. Zatím co dříve jsem tam tušil „duch stromu”
teď už v tom nevidím vůbec nic &amp;hellip; ale to se třeba časem zlepší.&lt;/div>

&lt;hr/>

&lt;h2>4. říjen 2013 &amp;mdash; Augmented Reality&lt;/h2>

&lt;div class='p'>Včera jsem zkoušel „rozšířenou realitu”, tedy do původního videa namíchat
vektory posunů makrobloků z H264 kódování. Výsledek se mi zprvu celkem líbil
i když teď už zase moc nevím - &lt;a href='http://youtu.be/S_qx1h4Z-go' class='external'>zde najdete AR
video na YouTube&lt;/a> a &lt;a href='http://www.youtube.com/watch?v=9NOvif6gtiU' class='external'>zde&lt;/a> je
původní video. Kvalita je dost mizerná, protože původní video se rozloží na
JPG snímky, do nich se přimíchají čáry, znova se uloží jako JPG a pak se to
ještě celé postupně zabalí do nového videa. Ale nějakou představu si podle toho
snad uděláte.&lt;/div>

&lt;div class='p'>Ještě malé vysvětlivky. Pokud se makroblok vůbec nehnul, tak nekreslím nic.
Pokud ano, tak na jeho místě je červené kolečko a žlutá čára je vektor, kde
byla nejlepší korelace v předešlém (?) snímku. Vše je to integrované přes tři
snímky, aby bylo vůbec něco vidět.&lt;/div>

&lt;div class='p'>Některé snímky jsou pěkné/použitelné. Např. na tomto
&lt;table class='image_panel center' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/augmented-reality-0042.jpg'>&lt;img src='/articles/h264-drone-vision/augmented-reality-0042_t.jpg' alt='Malé otočení' title='Malé otočení' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/augmented-reality-0042.jpg'>Malé otočení&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
je vidět jak jsou skoro všechny posuny stejné a čtyřtulka se otáčí na místě.&lt;/div>

&lt;div class='p'>Na dalším snímků je zase idealistická ukázka, jak blízké předměty (strom a zem)
se pohybují nejvíce a ostatní vzdálenější objekty (tráva na pozadí) téměř
vůbec:
&lt;table class='image_panel center' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/augmented-reality-0109.jpg'>&lt;img src='/articles/h264-drone-vision/augmented-reality-0109_t.jpg' alt='Překážky z pohybu' title='Překážky z pohybu' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/augmented-reality-0109.jpg'>Překážky z pohybu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Je nutné vzít v úvahu, do jakého bodu se drona pohybuje, protože v tom místě
také k žádnému velkému posunu nedochází. Ale je to alespoň nějaký příklad, kdy
bych měl spustit malý úhybný manévr vlevo.&lt;/div>

&lt;div class='p'>Ještě minimálně jedna situace je třeba vzít v úvahu a to, když se Heidi naklání:
&lt;table class='image_panel center' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/augmented-reality-0126.jpg'>&lt;img src='/articles/h264-drone-vision/augmented-reality-0126_t.jpg' alt='Náklon' title='Náklon' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/augmented-reality-0126.jpg'>Náklon&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
Zde je vidět pěkný „vír”, přestože makrobloky povolují pouze posun a nikoliv
otáčení.&lt;/div>

&lt;div class='p'>A co dál? Po pravdě si stále nejsem úplně jist, jestli vektory nemají být na
druhou stranu. Dále, jak jsem psal „korelace v předešlém (?) snímku” &amp;hellip; on to
může být ještě daleko starší snímek, H264 to podporuje, ale jestli to používá
čip na Parrot AR Drone 2 nevím. Konečně bych si asi znova přečetl, jak je to s
těma sub-makroblokama. Jestli mohou mít také nezávislé posuny nebo zda se liší
jen způsobem kódování a jestli to drona používá.&lt;/div>

&lt;div class='p'>Máte-li nápady, jak z uvedených snímků už usuzovat na příkazy leť
vlevo|vpravo|nahoru|dolu, tak napište &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h2>8. říjen 2013 &amp;mdash; Bakalářka&lt;/h2>

&lt;div class='p'>Přemýšlel jsem, jak detekovat a kompenzovat „víry” na posledním obrázku z
minulého příspěvku a pak jsem si vzpomněl na
&lt;a href='http://www.fit.vutbr.cz/study/DP/BP.php?id=13533&amp;amp;y=2011' class='external'>Bakalářskou práci
Karla Doležala&lt;/a>, kterou jsem už zmiňoval ve
&lt;a href='/competitions/roboorienteering/2013/cs'>druhém létajícím blogu&lt;/a>. Jde konkrétně o
kapitolu 5.4, „Potlačení pohybů kvadrokoptéry”.&lt;/div>

&lt;div class='p'>Základní postřeh je, že y-ová složka vektorů se mění s absolutní X-ovou
souřadnicí a nabývá nuly ve středu otáčení. To samé platí pro x-ovou složku
vektorů a absolutní Y-ovou souřadnici. Vedle znalosti středu ale ještě
potřebujeme všechny vektory kompenzovat a na to prý je dostatečná lineární
interpolace.  Nějak začít musím, tak proč nevyzkoušet už jednou prošlapávanou
cestu?&lt;/div>

&lt;div class='p'>Nejprve jsem byl zvědav, jak moc je ta lineární aproximace nepřesná.
Následující dva grafy odpovídají datům z obrázku „Náklon”:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 292px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/dy-x-graph.png'>&lt;img src='/articles/h264-drone-vision/dy-x-graph_t.png' alt='dy podle X' title='dy podle X' class='border'  width='286' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/dy-x-graph.png'>dy podle X&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 270px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/dx-y-graph.png'>&lt;img src='/articles/h264-drone-vision/dx-y-graph_t.png' alt='dx podle Y' title='dx podle Y' class='border'  width='264' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/dx-y-graph.png'>dx podle Y&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Pás okolo předpokládané proložené přímky není úplně úzký, ale třeba to bude
stačit. Zatímco s X grafem jsem celkem spokojený (střed vychází někam k 65/80),
tak u Y už moc ne (tam přímka protíná osu někde okolo 15/45, ale střed
otáčení je téměř ve spodní části obrázku). Hmm, že by bug?! A taky jo!!
Zatracený obrázkový souřadnice. Y-ová jde shora dolů, to samé u indexů
makrobloků, ale já jsem zvyklý na „normální” souřadnice a tak si automaticky
převracím (0,0) do spodního levého rohu.&lt;/div>

&lt;div class='p'>Hmm, hmm, &amp;hellip; po převracení Y-ové vzhůru nohama to hned začne dávat větší smysl
a „svatojánské mušky” na začátku videa začnou poletovat na kmeni stromu.
Všechno vylejt! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>p.s. Excel, který rád na rychlé grafíky používám, také nezklamal &amp;hellip;
&lt;table class='image_panel center' style='width: 406px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/excel-warning.png'>&lt;img src='/articles/h264-drone-vision/excel-warning_t.png' alt='Celý obrázek do Excel XY grafu přímo nedáte ...' title='Celý obrázek do Excel XY grafu přímo nedáte ...' class='border'  width='400' height='52'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/excel-warning.png'>Celý obrázek do Excel XY grafu přímo nedáte ...&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>9. říjen 2013 &amp;mdash; Kompenzace natočení&lt;/h2>

&lt;div class='p'>Začal bych s &lt;a href='http://youtu.be/R8Qt3_S-AMg' class='external'>linkem na opravené video&lt;/a>, tedy
prohozenou Y-ovou souřadnicí, kdy už to vypadá trošku věrohodněji &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Dále bych pokračoval s aplikaci nejmenších čtverců na odhad středu a průběhu
„víru”. Z bakalářky převzatá rovnice pro výpočet koeficientů v dY=k1*X+k0:
&lt;table class='image_panel center' style='width: 563px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/articles/h264-drone-vision/least-squares-equation.png' alt='' title='' class='border'  width='557' height='79'/>&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>
je správně, jen si je třeba dát pozor, že je třeba jí použít 2x a jednou je
y=dY a podruhé je x=dX.&lt;/div>

&lt;div class='p'>Po kompenzaci vypadá výsledek následovně:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/ar-0126-before.jpg'>&lt;img src='/articles/h264-drone-vision/ar-0126-before_t.jpg' alt='před korekcí' title='před korekcí' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/ar-0126-before.jpg'>před korekcí&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/ar-0126-after.jpg'>&lt;img src='/articles/h264-drone-vision/ar-0126-after_t.jpg' alt='po korekci' title='po korekci' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/ar-0126-after.jpg'>po korekci&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Jisté zlepšení (hlavně v levém dolním rohu) vidět je, ale jestli už je to
dostatečné zatím neumím posoudit.&lt;/div>

&lt;hr/>

&lt;h2>11. říjen 2013 &amp;mdash; Příprava na ver0&lt;/h2>

&lt;div class='p'>Tak nejprve &lt;a href='http://youtu.be/5O4wrEqGJ0w' class='external'>další video&lt;/a>. Přiznám se, že koukat
stále na to samé mne už pomalu unavuje, ale snad už to brzy skončí &lt;span class='wink'>&lt;/span>. Zde
vidíte nejprve kompenzace posunu a natočení. Tj. „žluté vektory” už jsou po
kompenzaci a „víry” a jednotné posuny by tam už moc neměly být vidět.&lt;/div>

&lt;div class='p'>Dále jsem tam přidal různé velikosti „červených koleček”. Pokud je pohyb
menší jak 10, tj. 2.5 pixelu, tak se neukazuje nic, pro 100 malé kolečko a více
velké (překážka). Je to stále integrované přes tři snímky. Výsledek je, že
občas je vidět něco rozumného a občas je celá obrazovka rudá, jak z nějaké
střílečky.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/bad-decision-0099.jpg'>&lt;img src='/articles/h264-drone-vision/bad-decision-0099_t.jpg' alt='Příklad špatného (?) rozhodnutí' title='Příklad špatného (?) rozhodnutí' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/bad-decision-0099.jpg'>Příklad špatného (?) rozhodnutí&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Plán pro verzi 0 je teď následující:&lt;/div>

&lt;ul>
&lt;li>pokud je počet překážek (míněno velkých koleček odpovídajících makroblokům s
posunem více jak 100) větší než 1000 (cca 1/3 makrobloků), tak nedělej nic
&amp;hellip; krvavá řež&lt;/li>

&lt;li>pokud je na levé straně o 100 více překážek než vpravo, vyhýbej se vpravo&lt;/li>

&lt;li>pokud je dole o 100 více překážek než nahoře, leť nahoru&lt;/li>
&lt;/ul>

&lt;div class='p'>a symetrické IFy.&lt;/div>

&lt;div class='p'>Teď jsem zvědavý, co to udělá ve skutečnosti. Už jsem si vyhlídnul malý
lesík/parčík, kde bych to vyzkoušel „rozflákat”. Pokud nic, tak snad bude
alespoň jiné, více relevantní, video k ladění. Čeká mne ale ještě netriviální
integrace, aby to vše běželo v reálném čase ze streamovaného videa. Momentálně
vůbec neodhadnu, na jak je to dlouho &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>16. říjen 2013 &amp;mdash; GitHub&lt;/h2>

&lt;div class='p'>Zbyněk mne minulý týden přesvědčil, ať pro robotika.cz založíme
&lt;a href='https://github.com/robotika' class='external'>GitHub&lt;/a>. Používám sice na zdrojáky private
repository, ale jo &amp;hellip; asi má pravdu. Rozhodně je to 100x lepší než zdrojáky
přilepovat k článku, jak jsme dělávali před lety.&lt;/div>

&lt;div class='p'>Pokud se tedy chcete podívat, nebo ještě lépe přímo zapojit, tak git najdete na
&lt;a href='https://github.com/robotika/h264-drone-vision' class='external'>https://github.com/robotika/h264-drone-vision&lt;/a>.&lt;/div>

&lt;div class='p'>Popisky bych asi měl dát rovnou tam, ale zase v kontextu tohoto blogu bude
jasnější o co jde:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/video.py' class='external'>video.py&lt;/a> je jednoduchá utilitka na ukládání videa za letu a zároveň na konverzi zdrojového souboru na oddělené frames&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/h264.py' class='external'>h264.py&lt;/a> jsou pak (zatím neúspěšné) pokusy jednotlivé frames dekódovat&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/mv2pgm.py' class='external'>mv2pgm.py&lt;/a> generuje PGM obrázky na základě textového souboru pohybů (po řádcích x,y, dx, dy)&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/mv2pygame.py' class='external'>mv2pygame.py&lt;/a> pak zároveň vektory kreslí v pygame (vím, že tam mám teď natvrdo adresář, kde se mají brát podkladové JPG, ale nějak začít musím a třeba to vůbec nikoho nebude zajímat &amp;hellip;&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;div class='p'>&lt;a id="131018">&lt;/a>&lt;/div>

&lt;h2>18. říjen 2013 &amp;mdash; HEX&lt;/h2>

&lt;div class='p'>&lt;i>Kamarádi se mi smějí, že se nejraději koukám na videa v hexa-editoru&lt;/i>&amp;hellip; a už
je to tady zase &lt;span class='smile'>&lt;/span>. Po drobném vyhecování Jirkou bych nejprve rozchodil
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/h264.py' class='external'>h264.py&lt;/a>,
než se pokusím o C implementaci. A možná to ani nebude nutné.&lt;/div>

&lt;div class='p'>Dříve (6/9/2013) zmiňovaný parser má také možnosti zapnutí TRACE:&lt;/div>

&lt;pre># define TRACE 2 //!&amp;lt; 0:Trace off 1:Trace on 2:detailed CABAC context information&lt;/pre>

&lt;div class='p'>Trošku matoucí je, že tento define je ve dvou různých souborech pojmenovaných
&lt;i>defines.h&lt;/i> (jeden pro decoder a jeden pro encoder) a nepřišly mi úplně
nezávislé. Tak jsem nakonec změnil oba na &lt;b>2&lt;/b>, pak to nešlo zkompilovat
(nedefinovany &lt;i>p_trace&lt;/i> jsem přepsal u encoderu na &lt;i>stderr&lt;/i>) a pak jsem chvíli
hledal, kam že ten výstup zmizel (je to v souboru &lt;b>trace_dec.txt&lt;/b>).&lt;/div>

&lt;div class='p'>Pustil jsem to na naše oblíbené video a během dvou snímků dostal 50MB textový
soubor. Trošku trvalo, než jsem v něm našel sekci, která mne zajímala:&lt;/div>

&lt;pre>Annex B NALU w/ long startcode, len 25412, forbidden_bit 0, nal_reference_idc 3, nal_unit_type 1

&amp;#64;1075083 SH: first_mb_in_slice                                       1 (  0) 
&amp;#64;1075084 SH: slice_type                                              1 (  0) 
&amp;#64;1075085 SH: pic_parameter_set_id                                    1 (  0) 
&amp;#64;1075086 SH: frame_num                                  00000000000010 (  2) 
&amp;#64;1075100 SH: num_ref_idx_override_flag                               1 (  1) 
&amp;#64;1075101 SH: num_ref_idx_l0_active_minus1                            1 (  0) 
&amp;#64;1075102 SH: ref_pic_list_reordering_flag_l0                         0 (  0) 
&amp;#64;1075103 SH: adaptive_ref_pic_buffering_flag                         0 (  0) 
&amp;#64;1075104 SH: slice_qp_delta                              0000001000000 ( 32) 
&amp;#64;1075117 SH: disable_deblocking_filter_idc                           1 (  0) 
&amp;#64;1075118 SH: slice_alpha_c0_offset_div2                              1 (  0) 
&amp;#64;1075119 SH: slice_beta_offset_div2                                  1 (  0) 

&lt;b>*&lt;/b>&lt;b>*&lt;/b>* POC: 2 (I/P) MB: 0 Slice: 0 Type 0 &lt;b>*&lt;/b>&lt;b>*&lt;/b>
&amp;#64;1075120 mb_skip_run                                                 1 (  0) 
&amp;#64;1075121 mb_type                                                     1 (  0) 
&amp;#64;1075122 mvd0_l0                                                     1 (  0) 
&amp;#64;1075123 mvd1_l0                                                     1 (  0) 
&amp;#64;1075124 coded_block_pattern                                       011 (  1) 
&amp;#64;1075127 mb_qp_delta                                                 1 (  0) 
&amp;#64;1075128 Luma # c &amp;amp; tr.1s vlc=0 #c=0 #t1=0                           1 (  1) 
&amp;#64;1075129 Luma # c &amp;amp; tr.1s vlc=0 #c=0 #t1=0                           1 (  1) 
&amp;#64;1075130 Luma # c &amp;amp; tr.1s vlc=0 #c=0 #t1=0                           1 (  1) 
&amp;#64;1075131 Luma # c &amp;amp; tr.1s vlc=0 #c=2 #t1=2                         001 (  1) 
&amp;#64;1075134 Luma trailing ones sign (1,1)                              10 (  2) 
&amp;#64;1075136 Luma totalrun (1,1) vlc=1                                0011 (  3) 
&amp;#64;1075140 Luma run (1,1) k=1 vlc=6                                  111 (  7)&lt;/pre>

&lt;div class='p'>ale &amp;hellip; s mým oblíbeným hexa &lt;b>E0 00 E0 10 3F BF 31&lt;/b> mi to nesedělo, ať jsem
se to snažil sekvenci napasovat i na dost divná místa. Slice, který mne první
zajímá, je až čtvrtý (decoder má jinak bez SPS, PPS a I slice problém), tj. je
potřeba se prokousat 134398 bajty zdrojového videa.&lt;/div>

&lt;div class='p'>Cestou z práce mi došlo, že bych mohl najít přesně místo, když &amp;#64;1075083 vydělím
8 (tj. předpokládal jsem adresu v bit-streamu). A to místo zase nevycházelo.
Vypadalo to, že se nezapočítává úvodní &lt;b>00 00 00 01&lt;/b> plus bajt na rozlišení
typu slice, ale stejně. A pak mi to došlo! To co takhle krásně navazuje za
sebou (vyseklé řádky jsou někde u 32MB) ve skutečnosti vůbec za sebou není!!!
Včera bych za to věšel, dnes už jsem klidnější. Ten první odstaveček
(&amp;#64;1075083-&amp;#64;1075119) je hlavička pátého (!!!) slice a  to co následuje
(&amp;#64;1075120-&amp;#64;1075140) jsou data čtvrtého &amp;hellip; sigh.&lt;/div>

&lt;div class='p'>No nic, další zámek snad už tedy povolil. V Pythonu jsem si dopsal třídu
&lt;i>VerboseWrapper&lt;/i>, tak teď už snad bude jasnější co mi tam chybí nebo dělám
špatně &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>21. říjen 2013 &amp;mdash; coded_block_pattern&lt;/h2>

&lt;div class='p'>Tak snad jsem našel další dva zakopané psy a jejich společný jmenovatel je
coded_block_pattern. První co jsem nechápal bylo, jak tabulka, která určuje
dekódování počtu prvků může být adresovaná počtem prvků?! Druhý pak kolikrát je
třeba volat funkci „residual block”, která vyčte zabalené zbytkové hodnoty
rozdílu dvou snímků/makrobloků.&lt;/div>

&lt;div class='p'>&lt;b>coded_block_pattern&lt;/b> určuje 48 různých rozložení makrobloku do
sub-makrobloků. Podle popisu se původní 16x16 buď zachová, nebo rozloží na dva
16x8, nebo na dva 8x16 nebo na čtyři 8x8. Ty je pak dále možno zase rozkládat
na 8x4, 4x8 nebo 4x4. Z kódu jsem moc nepochopil, kde přesně se tato informace
vyskytuje, ale rozhodující jsou 4x4 sub-bloky, kterých se do 16x16 vejde celkem
16. Převodní tabulka pak bitově určuje, který 4x4 blok je uložený.&lt;/div>

&lt;div class='p'>V mém předešlém příspěvku se vyskytuje pouze 4x Luma. coded_block_pattern má
hodnotu 2 a v tabulce mu odpovídá hodnota 1. Je to tedy pouze kódování jednoho
4x4 bloku (vše berte s rezervou, protože si s tím nejsem jistý &amp;hellip; na druhou
stranu mne až tak nezajímá, zda to náhodou neodpovídá jednomu 16x16 bloku, jako
spíše kolikrát musím zavolat funkci „residual block”, abych se dostal k datům
dalšího makrobloku).&lt;/div>

&lt;div class='p'>A teď ten druhý pes, tedy vlastně první. Jakou mám použít tabulku pro načtení
počtu nenulových prvků, když toto číslo ještě neznám? Důležité je chybějící
slovo &lt;b>odhad&lt;/b>. Mám-li zmíněný makroblok se čtyřmi Luma popisy, tak u prvního
nevím nic a tak můj odhad bude 0. U druhého, který je vpravo od prvního, si
můžu tipnout, že prvku bude jako u prvního. Třetí, dole pod prvním, také může
použít tuto informaci. A konečně čtvrtý prvek pro odhad použije výsledky
druhého a třetího. Po převedení indexace od 0 to vypadá takto:&lt;/div>

&lt;pre>if cbp in [2,3]:
    nC = [0]*4
    nC[0] = residual( bs, nC=0 ) # Luma only 4x
    nC[1] = residual( bs, nC[0] ) # left
    nC[2] = residual( bs, nC[0] ) # up
    nC[3] = residual( bs, (nC[1]+nC[2]+1)/2 ) # (left+up)/2&lt;/pre>

&lt;div class='p'>Teď mi ještě není jasné, zda se na tuto sousednost hraje i mezi jednotlivými
4x4 bloky. Podle složitosti indexování bych tipoval že ano.&lt;/div>

&lt;div class='p'>Vedle Luma se v makroblocích vyskytuje ještě ChrDC a ChrAC:&lt;/div>

&lt;pre>&lt;b>*&lt;/b>&lt;b>*&lt;/b>* POC: 2 (I/P) MB: 1 Slice: 0 Type 0 &lt;b>*&lt;/b>&lt;b>*&lt;/b>
&amp;#64;1075143 mb_skip_run                                                 1 (  0) 
&amp;#64;1075144 mb_type                                                     1 (  0) 
&amp;#64;1075145 mvd0_l0                                                     1 (  0) 
&amp;#64;1075146 mvd1_l0                                                     1 (  0) 
&amp;#64;1075147 coded_block_pattern                                     00111 ( 32) 
&amp;#64;1075152 mb_qp_delta                                               011 ( -1) 
&amp;#64;1075155 ChrDC # c &amp;amp; tr.1s  #c=0 #t1=0                              01 (  1) 
&amp;#64;1075157 ChrDC # c &amp;amp; tr.1s  #c=0 #t1=0                              01 (  1) 
&amp;#64;1075159 ChrAC # c &amp;amp; tr.1s vlc=0 #c=0 #t1=0                          1 (  1) 
&amp;#64;1075160 ChrAC # c &amp;amp; tr.1s vlc=0 #c=0 #t1=0                          1 (  1) 
&amp;#64;1075161 ChrAC # c &amp;amp; tr.1s vlc=0 #c=0 #t1=0                          1 (  1) 
&amp;#64;1075162 ChrAC # c &amp;amp; tr.1s vlc=0 #c=0 #t1=0                          1 (  1) 
&amp;#64;1075163 ChrAC # c &amp;amp; tr.1s vlc=0 #c=3 #t1=3                      00011 (  3) 
&amp;#64;1075168 ChrAC trailing ones sign (2,4)                            101 (  5) 
&amp;#64;1075171 ChrAC totalrun (2,4) vlc=2                             000001 (  1) 
&amp;#64;1075177 ChrAC run (2,4) k=2 vlc=6                                 011 (  3) 
&amp;#64;1075180 ChrAC run (1,4) k=1 vlc=6                                 001 (  1) 
&amp;#64;1075183 ChrAC # c &amp;amp; tr.1s vlc=1 #c=0 #t1=0                         11 (  3) 
&amp;#64;1075185 ChrAC # c &amp;amp; tr.1s vlc=1 #c=0 #t1=0                         11 (  3) 
&amp;#64;1075187 ChrAC # c &amp;amp; tr.1s vlc=0 #c=0 #t1=0                          1 (  1)&lt;/pre>

&lt;div class='p'>Podle dokumentace je:&lt;/div>

&lt;ul>
&lt;li>&lt;b>DC transform coefficient&lt;/b> &amp;mdash; A transform coefficient for which the frequency index 
is zero in all dimensions&lt;/li>

&lt;li>&lt;b>AC transform coefficient&lt;/b> &amp;mdash; Any transform coefficient for which the frequency index
in one or both dimensions is non-zero.&lt;/li>
&lt;/ul>

&lt;div class='p'>Zase tomu nerozumím, ale pozorování je, že makrobloky buď mají jenom Luma
(po převedení tabulkou čísla menší než 16), nebo mají navíc ChrDC (čísla menší
než 32) nebo mají ještě ChrAC (od 32 výše), která automaticky obsahují i ChrDC
a podle bitového vzoru počet Luma.&lt;/div>

&lt;div class='p'>Jsem líný přepisovat všechny ty tabulky (ono na to stejně dojde), tak to dělám
postupně a zatím jsem se dohrabal k makrobloku číslo 10 (z referenčního
videa).&lt;/div>

&lt;div class='p'>TO BE CONTINUED&lt;/div>

&lt;hr/>

&lt;h2>24. říjen 2013 &amp;mdash; test first (again)&lt;/h2>

&lt;div class='p'>Je to peklo! Skoro bych řekl hotový očistec. Teď si ani nedovedu představit,
jak bych to býval implementoval bez referenčního testovacího vzorku. A těch
chyb!! Byl jsem hodně naivní, když jsem si myslel, že tento prodloužený víkend
bych už to uzavřel s testovacím letem. Ostatně v detailu to můžete
&lt;a href='https://github.com/robotika/h264-drone-vision/commits/master/h264.py' class='external'>sledovat&lt;/a>
(nebo mi možná i pomoci? &lt;span class='wink'>&lt;/span> ) na
&lt;a href='https://github.com/robotika/h264-drone-vision' class='external'>githubu&lt;/a>. Progres je vidět na
řádce 340, ke kolikátému makrobloku jsem se dostal &amp;hellip;&lt;/div>

&lt;div class='p'>Chcete si to sami zkusit? Nainstaluje te si Python, naklonujte git repository a
pusťte si&lt;/div>

&lt;pre>h264.py test\frame0001.bin&lt;/pre>

&lt;div class='p'>a pokud výstup bude alespoň trošku podobný jako
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/test/frame0001.txt' class='external'>frame0001.txt&lt;/a>
(oříznutý na pouhých 262 makrobloků, tj. cca 600MB textový soubor).&lt;/div>

&lt;div class='p'>A co je nového? Jednak hodnoty &lt;b>nC&lt;/b> pro odhad počtu nenulových prvků se
počítají i s již dekódovaných sousedních makrobloků &amp;hellip; ale to se dalo tak
trošku tušit. Dále jsem doplnil X binárních tabulek a pár bitů opravil. Zatím
jsem se dostal k makrobloku číslo 23, tj. ještě ani celou řádku z prvního
obrázku nemám &amp;hellip; trošku depresivní.&lt;/div>

&lt;hr/>

&lt;h2>29. říjen 2013 &amp;mdash; Foxit&lt;/h2>

&lt;div class='p'>Dnes jsem konečně doplnil coefTokenMapping &lt;a href='https://github.com/robotika/h264-drone-vision/commit/b065ab91ec8961fb7c1e1e44e223ebfbe5d22533#diff-b6e82d88c4e9c5a2da6f8a377f2c7676' class='external'>tabulky v dekódování residual dat&lt;/a>.
Měl jsem problém, jak dostat použitelný text z PDFka &amp;hellip; vtipně tam totiž mají
po blocích mezery a mezera je stejně tak na oddělení sloupců. Vyřešit se to ale
dá např. jiným PDF prohlížečem (díky za tip Ondrovi). Konkrétně
&lt;a href='http://www.foxitsoftware.com/Secure_PDF_Reader/' class='external'>Foxit&lt;/a> umožňuje přepojení do
textového režimu (View/Text Viewer) a pak dostanete textové tabulky, kde
sloupečky jsou oddělené více mezerami.&lt;/div>

&lt;div class='p'>Aby jste získali co opravdu potřebujete, tak už stačí něco jako:&lt;/div>

&lt;pre>a = ["".join(x.split()) for x in line.split("  ") if len(x) &amp;gt; 0 ]&lt;/pre>

&lt;div class='p'>a už je možné tabulky poskládat &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>p.s. dnes se omlouvám za ještě více překlepů než normálně. Nemám ještě
doinstalované některé fonty (?) a tak většinu českých znaků vidím jako
čtvereček &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>31. říjen 2013 &amp;mdash; První řádek&lt;/h2>

&lt;div class='p'>Před časem jsem si říkal, že až dekóduji první řádek, tak to náležitě
„oslavím”. Když k tomu došlo (cca předevčírem?), tak jsem žádný pocit
dosaženého milníku neměl a pokračoval jsem dál. Včera jsem se dostal na konec
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/test/frame0001.txt' class='external'>referenčního
textového souboru&lt;/a>, tak teď asi přejdu na větší, ještě vygenerovaný na starém
počítači, co má 80MB.&lt;/div>

&lt;div class='p'>Ze změn, které jinak můžete detailně sledovat na
&lt;a href='https://github.com/robotika/h264-drone-vision' class='external'>githubu&lt;/a>, asi stojí za zmínku
dekódování nenulových prvků (level) a pak už konečně ty posuny (mvd). Level je
v dokumentaci popsán dvěma stránkami a moc pochopitelné to pro změnu není :-(.
Tabulka je tam jenom jedna, ale evidentně se jich používá více (konkrétně 6). V
tomto smyslu mi byl více nápomocný
&lt;a href='http://etrij.etri.re.kr/Cyber/Download/PublishedPaper/3105/etrij.oct2009.0510.pdf' class='external'>článek
o paralelním dekódování&lt;/a>, kde jsou tabulky vypsané. I ten princip je tam
srozumitelnější &amp;mdash; ve zkratce když jdete od konce, tak tam jsou většinou 0 a 1
a prvky postupně s vysokou pravděpodobností rostou (v absolutní hodnotě).
Přecházíte tedy od jedné tabulky k další. Existuje ještě „threshold
table” popisující limity pro přechod na další tabulku. Toto jsem ale zatím
ještě neimplementoval a čekám až narazím na reálný příklad.&lt;/div>

&lt;div class='p'>O nefunkčních příkladech bych se možná také trošku zmínil. Je to jedna ze zásad
&lt;a href='http://www.extremeprogramming.org/' class='external'>eXtrémního programování&lt;/a>, kdy do
unit-testu přidáváte „co se rozbilo” nebo „co nefungovalo”. Vedle
referenčního výstupu se mi to osvědčilo i tady, takže
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/h264_test.py' class='external'>h264_test.py&lt;/a>
postupně narůstá (konkrétně testResidual()).&lt;/div>

&lt;div class='p'>A co &lt;b>mvd&lt;/b>, posuny makrobloků? Je to další hádanka. Jak se dostat z (x,y,dx,dy)&lt;/div>

&lt;pre>0 0 -6 0
1 0 6 0
2 0 0 0
3 0 0 0
4 0 0 0
5 0 0 0
6 0 -4 0
7 0 12 0
8 0 -8 8
9 0 0 -8
10 0 0 0&lt;/pre>

&lt;div class='p'>na&lt;/div>

&lt;pre>0 0 -6 0
1 0 0 0
2 0 0 0
3 0 0 0
4 0 0 0
5 0 0 0
6 0 -4 0
7 0 8 0
8 0 0 8
9 0 0 0
10 0 0 0&lt;/pre>

&lt;div class='p'>asi vymyslí každý, ale jak od druhého řádku dál zatím s jistotou nevím. Zase
jeden příklad&lt;/div>

&lt;pre>26 0 0 0
27 0 2 0
28 0 0 0
29 0 -2 0
30 0 0 0
&amp;hellip;
26 1 0 0
27 1 -2 0
28 1 0 0
29 1 0 0
30 1 0 0&lt;/pre>

&lt;div class='p'>na&lt;/div>

&lt;pre>26 0 0 0
27 0 2 0
28 0 2 0
29 0 0 0
30 0 0 0
&amp;hellip;
26 1 0 0
27 1 0 0
28 1 0 0
29 1 0 0
30 1 0 0&lt;/pre>

&lt;div class='p'>Vedle relativní změny k sousedovi je zde zase odkaz na předešlý řádek, ale
nevypadá to na průměr (?). Stejně tak ještě nemám úplně jasno co se má dít
s proměnnými při skipMacroblock &amp;gt; 0. Zda se mají nulovat nebo nastavit na
nedefinované. Ale to snad také ukáže příklad z těch 80MB.&lt;/div>

&lt;hr/>

&lt;h2>2. listopad 2013 &amp;mdash; mvd median&lt;/h2>

&lt;div class='p'>Tak jsem konečně rozlousknul vektory posunů v celém prvním snímku. Největší
hádanka byla, co se bere jako predikce vektoru u druhého a dalších řádků.
Ostatně jsem to zmínil už minule. A řešení? V naprosté většině případů se bere
prostřední hodnota (medián) ze tří prvků: makrobklok vlevo, makroblok nahoře a
makroblok nahoře vpravo. Zvlášť ten poslední prvek byl pro mne novinkou. Ale to
není všechno. Na konci řádku už není žádný „nahoře vpravo” a tak se použije
„nahoře vlevo”.&lt;/div>

&lt;div class='p'>Popsaný algoritmus funguje na první snímek, ale selže u jednoho vektoru ve
druhém snímku. Další zakopaný pes bude ještě u přeskakování makrobloků. Zatím
používám nulové vektory posunutí, ze kterých se pak medián počítá, ale není to
100%. Takže další TODO.&lt;/div>

&lt;hr/>

&lt;h2>3. listopad 2013 &amp;mdash; skip_macroblock&lt;/h2>

&lt;div class='p'>Druhý offline záznam &amp;hellip; potvrzuji, že další pes byl spojen s přeskakováním
makrobloků, tedy ve funkci skip_macroblock(). Při přeskakování jsem doplňoval
chybějící vektory pohybu hodnotou (0,0) a většinou to fungovalo. Kde byla
zrada jsem pochopil až při krokování a breakpointu v počítání mediánu, kam se
mi program dostal při přeskakování makrobloků! Prostě je tam další podmínka:
pokud makroblok vlevo i nahoře má nenulový vektor posunutí, tak použij medián
jako při zpracování běžného makrobloku.&lt;/div>

&lt;div class='p'>Teď už vektory posunutí sedí 100% a zpracování se kousne až u desátého
referenčního snímku na nějaké chybě parsování &amp;hellip;&lt;/div>

&lt;div class='p'>p.s. chyba u desátého snímku byla v&lt;/div>

&lt;pre>&amp;#64;2434573 ChrDC # c &amp;amp; tr.1s  #c=4 #t1=3                         0000000 (  0)&lt;/pre>

&lt;div class='p'>tj. všechny prvky (pro ChrDC to jsou 4) byly nenulové a neměl jsem už číst
počet nulových prvků.&lt;/div>

&lt;hr/>

&lt;h2>6. listopad 2013 &amp;mdash; mb_type&lt;/h2>

&lt;div class='p'>Znáte ten pocit, kdy se domníváte, že jste skoro u cíle, ale pak jemně zafouká a
realita vám rozboří váš domeček z karet? Tak přesně to jsem prožíval včera ráno. V
neděli večer jsem už bezchybně dekódoval prvních 25 snímků, včetně správné
interpretace vektorů pohybu. To je cca 90000 makrobloků a přestože byla nějaká
chybka ve 26. snímku, tak „cíl přece nemůže být daleko”. Karta se však
obrátila, když jsem ten problém lépe analyzoval a zjistil, že typ makrobloku je
nenulový. Zalepil to pro jeden případ a bum, další nenulový, ale jiné číslo.
OK, další záplata a další a další, to vše jenom v tom 26. snímků. Znova jsem
konzultoval dokumentaci (strana 88,tabulka 7-8), abych zjistil, že existuje 25
typů makrobloků, které je třeba speciálně pořešit. Tj. v extrémním/dalším
falešném náhledu, jsem zatím ušel jenom 1/25tinu cesty, cha cha &amp;hellip;&lt;/div>

&lt;div class='p'>Po tomto zjištění jsem si chtěl vzít měsíc dovolené (jak je to doslova
„dovolená na zotavenou”). Přes den se to trošku rozleželo a asi se na to za
chvíli zase podívám &lt;span class='wink'>&lt;/span>. Prioritu by teď měl dostat &lt;a href='/robots/fireant/cs'>chodící
robot&lt;/a>, ale asi to nikoho moc nezajímá, tak to ještě chvíli bude „úloha na
pozadí”.&lt;/div>

&lt;div class='p'>S 25 typy, ono jich je vlastně 26, protože se číslují od nuly, &amp;hellip; že by nějaké
prokletí 26tky?? Další klíčové slovo je asi &lt;b>Intra16x16PredMode&lt;/b>, který je
buď DC, Horizontal, Vertical nebo Plane. Někde chybí vektory posunu (vlastně
všechny ty protipříklady byly typu DC) &amp;hellip; no nevím. Čeho se teď nejvíce děsím
je, že bude třeba pracovat s celými 16x16 bloky (případně 16x8, 8x16, 8x8) a
nějak odhadovat, kde jsou nenulové prvky v jejich 4x4 podblocích.  Predikce
počtu nenulových prvků je „centrální dogma”, které dobře funguje pro
makroblok typu 0, takže i těch dalších 25 typů na to bude třeba určitě nějak
napojit. Prostě radost. Možná si tu dovolenou přeci jenom vezmu a budu raději
zjišťovat, jak se dělají střechy a okapy, než začne mrznout &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>7. listopad 2013 &amp;mdash; frame0026.bin pokořen&lt;/h2>

&lt;div class='p'>Přidal jsem do gitu pro testování 26. snímek:
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/test/frame0026.bin' class='external'>test/frame0026.bin&lt;/a>
a
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/test/mv0026.txt' class='external'>test/mv0026.txt&lt;/a>
a klasicky chvíli na to byla oprava na světě &lt;span class='smile'>&lt;/span>. Teď mluvím o opravě vektorů
pohybu, které mi dnes dosud u tohoto snímku neseděly. Důvodem byla nutnost
ignorovat predikci a natvrdo nastavit (0,0) u těch 25 „nových” mb_type
zmiňovaných včera.&lt;/div>

&lt;div class='p'>Tak trošku tiše přecházím fakt, že už jsem 26. snímek vůbec dekódoval.
Matematicky jsem to převedl „na předešlý případ” a programátorsky zase
koukám, kdy to bouchne &lt;span class='wink'>&lt;/span>.
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/h264.py' class='external'>Dekodér&lt;/a>
se dohrabal k 94. snímku s tím, že jsou stále drobné chyby na začátku řádků ve
vektorech pohybu. Takže příběh stále nekončí &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>13. listopad 2013 &amp;mdash; levels&lt;/h2>

&lt;div class='p'>Ještě vás to baví číst? Mne už ta 80x45 sudoku občas unavuje. To však po chvíli
poleví a jsem zvědavý, na čem se to zase kouslo. Včera jsem revidoval
„levels”, tedy nenulové prvky větší než 1. Jedná se o „zbytkové prvky” po
transformaci, které v absolutní hodnotě klesají a navíc jsou často prokládány
nulami. Kolik je nul mezi jednotlivými prvky se kóduje zvlášť stejně tak pokud
je +/-1 na konci méně jak 3.&lt;/div>

&lt;div class='p'>Kódování dalších prvků je vlastně takový hybrid. Úplně první číslo (jede se od
konce) různé od jedničky je kódováno exponenciálně, tedy velikost čísla je daná
počtem nul a sekvenci ukončuje jednička. Navíc je třeba sbírat data znaménkově,
takže 1=1, 01=-1, 001=2, 0001=-2, &amp;hellip; K tomu je hned několik výjimek. Jedna je,
že pokud celkový počet prvků je větší než 3 a počet jedniček je různý od tří,
tak k načtenému číslu v absolutní hodnotě přičti jedna. To smysl dává, protože
když už tam nebyla jednička, nuly se kódují speciálně, tak další nejmenší možné
číslo je v absolutní hodnotě dvojka.&lt;/div>

&lt;div class='p'>Hybrid začíná už od druhého prvku &amp;mdash; podle absolutní velikosti se přidává
počet bitů pro „suffix”. Ve zkratce přečtete exponenciální prefix, řada nul
ukončená jedničkou, a pak přečtete pevný počet bitů a zkombinujete. Počet bitů
pro suffix se, zase až na nějaké výjimky a hodně velkými prvky, může zvětšit
pro každý prvek jenom o jedničku, pokud absolutní hodnota překročí definované
meze:&lt;/div>

&lt;pre>static const int incVlc[] = {0, 3, 6, 12, 24, 48, 32768};    // maximum vlc = 6&lt;/pre>

&lt;div class='p'>Současná implementace tam má assert na velikost 6. Dostal jsem se ke stému
snímku, ale u frame0113.bin se zase něco pokazilo. Z celého referenčního videa
jsme cca v 1/6.&lt;/div>

&lt;div class='p'>p.s. jedna z výjimek je, že z prvního prvku na druhý se může suffix zvětšit na
dva bity, pokud první prvek je v absolutní hodnotě větší než 3. Viz
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/1a0caeb82d453f53a4e6908a746ea57daf32f5b9#diff-9ca5fb3eb6997dd9b368051d3207ef94' class='external'>H264Test.testLevelTabs2&lt;/a>
čtení 1557531 bitu.&lt;/div>

&lt;hr/>

&lt;h2>15. listopad 2013 &amp;mdash; varianta MVPRED_UR&lt;/h2>

&lt;div class='p'>Teď jsem se trošku zasekl na jedné chybě u 113 snímku, 16 řádek, pozice 0.
Referenční program se zastavil na breakpointu, který jsem dal na různá místa,
která „přeci nemohou nikdy nastat”. To byl případ i MVPRED_UR, konkrétně na
&lt;i>mv_prediction.c:216&lt;/i>. O co jde? Když se počítá medián pohybu při
přeskakování makrobloků, tak, se bere v úvahu levý, horní a horní pravý/levý
(podle dostupnosti) blok. Může se stát, že ne všechny informace jsou k
dispozici (v Python kódu na to používám &lt;i>None&lt;/i>), kde dobrým příkladem je první
řádek &amp;mdash; tam není ani žádný horní prvek a tak „medián” se bere jenom z
levého prvku.&lt;/div>

&lt;div class='p'>Jak ale na 80x45 velkém snímku docílit toho, že není k dispozici levý a horní
prvek, ale pouze horní pravý?! Vypadá to zase na nějakou kličku při
přeskakování makrobloků, že (0,16) je úplně vlevo a nemá tedy k dispozici
levého předchůdce, informace o pohybu není na (0,15) z důvodu přeskakování (?)
k dispozici a tak nastává případ MVPRED_UR a pro odhad se použije pouze horní
pravý prvek (1,15).&lt;/div>

&lt;div class='p'>Rutinu pro medián jsem
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/7849c66d143bb90b9625102e8b095a59961a750f#diff-9ca5fb3eb6997dd9b368051d3207ef94' class='external'>upravil&lt;/a>,
ale pokud nahradím nulové prvky při přeskakování nedefinovanými, tak se mi
zbytek celý rozsype :-(.&lt;/div>

&lt;div class='p'>Moje momentální noční můra je, že se jedná o odkaz na starší snímek 112 (no snad to
číslo nebudu muset volat) a tam se třeba také přeskakovalo, takže reference
není k dispozici???&lt;/div>

&lt;div class='p'>p.s. dostal jsem ho! &lt;span class='smile'>&lt;/span> Už dlouho jsem ve Visualu nepouštěl breakpoint na
změnu hodnoty na daném paměťovém místě &amp;hellip; v popisu výše jsem pomíchal (0,15) a
(1,15) &amp;hellip; první k dispozici byla a druhá ne, tj. celé to byl MVPRED_U, ale
princip je stejný. A důvod? Vzpomínáte na „nedávno objevených” dalších 25
typů makrobloků? (1,15) byl typu 22, tj. „intra_chroma_pred_mode”, pro který
není vektor pohybu definovaný. Oprava byla triviální &amp;mdash; viz
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/318b33343a050bb16aa3536daf6e638d16f49ad1#diff-b6e82d88c4e9c5a2da6f8a377f2c7676' class='external'>diff&lt;/a>&lt;/div>

&lt;hr/>

&lt;h2>19. listopad 2013 &amp;mdash; kříženci&lt;/h2>

&lt;div class='p'>Aneb co se stane, když zkombinujete „intra blok” se „skip blokem”? No
nedopadne to dobře. Intra blok nemá predikci pohybu. To ale neznamená, že není
k dispozici! Zní to zmateně? Ani se nedivím. Prostě jak jsem minule psal, že
pokud neznám vektor pohybu pro daný prvek (vlevo nebo nahoře) a používám
&lt;i>(None,None)&lt;/i>, tak to nestačí a je třeba dodat důvod, proč je to &lt;i>None&lt;/i>.
Medián se použije skoro vždy jen s výjimkou, že jste na kraji (tj. &lt;i>None&lt;/i> z
důvodu první řádky nebo prvního sloupce) nebo levý či horní prvek je k
dispozici a má nulový vektor. Vyřešena další „záhada”.&lt;/div>

&lt;div class='p'>A jak jsme na tom po čtyřech  měsících „trápení”? Jsme zhruba v 1/5
referenčního videa. Teď se to pokazí u snímku 00147.&lt;/div>

&lt;hr/>

&lt;h2>21. listopad 2013 &amp;mdash; Luma lev 17&lt;/h2>

&lt;div class='p'>Dnes ráno jsem měl krásný úlovek:&lt;/div>

&lt;pre>&amp;#64;1365333 Luma # c &amp;amp; tr.1s vlc=1 #c=1 #t1=0                      001011 ( 11) 
&amp;#64;1365339 Luma lev (0,0) k=0 vlc=0                  0000000000000010001 ( 17) 
&amp;#64;1365358 Luma totalrun (0,0) vlc=0                                   1 (  1)&lt;/pre>

&lt;div class='p'>No není to nádhera? Nemáte trošku pocit, že už mi to leze na mozek? &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>Dodělal jsem už snad pořádně přechodové tabulky pro Luma Level a &lt;b>Luma lev
17&lt;/b> je příklad tak velkého čísla, že se z 0té tabulky skáče rovnou na čtvrtou
a výsledné číslo je zde 17 (frame0187.bin MB: 24). Jo, spadlo mi to tam.
Proč?  Extra mezera v tabulce kódů. Pro zájemce viz
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/c24cb8939ebbe9cd214652e2a61dd2ea73dc7487' class='external'>github&lt;/a>.&lt;/div>

&lt;hr/>

&lt;h2>22. listopad 2013 &amp;mdash; levelSuffixSize&lt;/h2>

&lt;div class='p'>Tentokrát se to rozbilo „u 18 lvů” (frame0228.bin MB:30) &amp;mdash; prostě ta
výjimka, co jsem jí popisoval včera, je pouze jednorázová. Nepřeskakuje se tedy
na čtrtou tabulku, ale pouze jednorázově se přečtou čtyři bity a dál se
pokračuje „jako by se nechumelilo”.&lt;/div>

&lt;div class='p'>Po
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/d1ec27305a21e4233d6aeda26d5eb7cc9f918159' class='external'>opravě&lt;/a>
se dostávám k frame0305.bin. Naivně bych si teď myslel, že mám tak jednu chybu
ve sto snímcích (???) a mohl bych si už dovolit přejít „do výroby”. Je tam
ale nutné dodělat rozpoznávání, že byl snímek špatně dekódovan (aktuální
představa je, že pokud parsování skončí na posledním bajtu načteného paketu,
tak je vše OK) a pak možnost to celé úplně zastavit, pokud je to hodně špatně
(např. se opravdu odkazuje na více snímků zpět). Pro to bych asi použil trik,
který jsem slyšel tento týden na prezentaci
&lt;a href='http://www.universal-robots.com/' class='external'>Universal Robots&lt;/a>: pokud se ve výrobě
objeví dva zmetky za sebou, tak se linka zastaví. To zní jako jednoduchý
algoritmus, co myslíte? &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;h2>23. listopad 2013 &amp;mdash; Functional testing&lt;/h2>

&lt;div class='p'>&lt;a href='http://en.wikipedia.org/wiki/Functional_testing' class='external'>Funkcionální testování&lt;/a> je
další důležitý prvek eXtrémního programování. Na rozdíl od unit testů, které
musí vždy všechny projít, úspěšnost fukcionálních testů je proměnlivá a měla
by vystihovat aktuální funkcionalitu programu.&lt;/div>

&lt;div class='p'>Mým funkcionálním testem vlastně bylo parsování referenčního videa. Číslo
snímku, kam až se dostanu, ale není moc vypovídající. Jak jsem psal včera, já
vlastně nepotřebuji úspěšně parsovat všechny snímky a např. 99% úspěšnost by
mi stačila. Postupné dekódování jsem nahradil statistikou přes všechny snímky.
A jak to dopadlo? Ze 707 snímků jich 10 selhává. Všechno samozřejmě za
předpokladu, že ten test je správný.&lt;/div>

&lt;div class='p'>p.s. pamatujete na 17 a 18 lvů? Tak snímek 305 to pokořil:
0000000000000001000000000001 (4097) &amp;hellip; teď už prošlo 705 snímků z 707, tj.
99.7% to by snad šlo.&lt;/div>

&lt;hr/>

&lt;h2>25. listopad 2013 &amp;mdash; ESCAPE&lt;/h2>

&lt;div class='p'>Když jsem v sobotu dosáhl stavu, že už jenom dva snímky selhávají
(frame0380.bin a frame0706.bin), nechal jsem to trošku uležet. Udělal jsem si
unit test na makroblok, kde se výpis rozcházel s referencí, ale ten prošel bez
problémů!? Nechápal jsem. Pak mne napadlo jediné vysvětlení a to, že co se
píše v trace logu není totožné s tím, co je v binárních datech. Zase chvíle
na HEX editor &amp;hellip;&lt;/div>

&lt;div class='p'>A co jsem ošidil tentokrát? Neřešil jsem ESCAPE znaky, které mají zabránit
nechtěnému start bloku uprostřed dat snímku. Oprava je taková, že pokud je v
sekvenci bajtově 00 00 03 XX, tak jí je třeba nahradit 00 00 XX. Případně viz
opravu na
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/1bcc2a9e95df1a691734384e63c63a0d955904e3' class='external'>githubu&lt;/a>.&lt;/div>

&lt;div class='p'>A ta druhá chyba? Žádná není &amp;mdash; jak &lt;a href='/robots/heidi/cs'>Heidi&lt;/a> havarovala, tak je
video přerušené a data posledního snímku tedy nejsou kompletní &amp;hellip; &lt;span class='smile'>&lt;/span>.  Je to
zvláštní pocit, když všech 24MB referenčních pohybu 100% sedí &amp;hellip; ale nějakou
extra radost z toho nemám. Prostě jak mne kdysi nazval kolega v práci, že jsem
„nepotěšitelný člověk” &lt;span class='wink'>&lt;/span>. Podle eXtrémního programování jsem s dekodérem
hotov, dokud se neobjeví nějaká další chyba. Je čas na optimalizace a začištění
kódu &amp;hellip; a hlavně integraci do navigace drony!!! &lt;span class='smile'>&lt;/span> &amp;hellip; no trošku škoda, že
venku už mrzne.&lt;/div>

&lt;hr/>

&lt;h2>6. prosinec 2013 &amp;mdash; bittables&lt;/h2>

&lt;div class='p'>Minulý týden jsme se s Ondrou a Zbyňkem bavili o aktuální implementaci
pythonovského dekódování H264 video codecu. Pustil jsem to tak jak to je v
profileru na referenční video a vychází to cca 2 zpracované snímky za sekundu,
což není moc. Mimochodem, pokud to neznáte, v Pythonu je rovnou integrovaný i
jednoduchý profiler, takže co jsem přesně dostal bylo toto:&lt;/div>

&lt;pre>265325033 function calls in 373.808 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 15742034  142.370    0.000  238.575    0.000 h264.py:184(residual)
 91092961   94.282    0.000   98.475    0.000 h264.py:27(bit)
 23691275   40.811    0.000   87.999    0.000 h264.py:63(tab)
  2094625   39.971    0.000  345.131    0.000 h264.py:348(macroblockLayer)
 11923219   20.845    0.000   64.202    0.000 h264.py:41(golomb)
      683   12.099    0.018  373.607    0.547 h264.py:461(parsePSlice)
  4483734    7.459    0.000   10.474    0.000 h264.py:445(median)
 14606420    5.612    0.000    5.612    0.000 h264.py:337(mix)
 91096499    4.193    0.000    4.193    0.000 {ord}
  4313872    3.015    0.000    3.015    0.000 {sorted}
  3955682    2.446    0.000   28.555    0.000 h264.py:50(signedGolomb)
   334970    0.291    0.000    0.688    0.000 h264.py:35(bits)
  1977840    0.212    0.000    0.212    0.000 {method 'append' of 'list' objects}
        1    0.077    0.077  373.808  373.808 h264.py:642(functionalTest)
      707    0.058    0.000    0.058    0.000 {open}
      707    0.029    0.000    0.029    0.000 {method 'read' of 'file' objects}
      707    0.020    0.000  373.641    0.528 h264.py:557(parseFrameInner)
      707    0.007    0.000    0.007    0.000 {method 'replace' of 'str' objects}
     3535    0.005    0.000    0.005    0.000 h264.py:57(alignedByte)
        1    0.001    0.001    0.001    0.001 {nt.listdir}
      707    0.001    0.000  373.642    0.528 h264.py:579(parseFrame)
      722    0.001    0.000    0.001    0.000 {method 'startswith' of 'str' objects}
      707    0.001    0.000    0.008    0.000 h264.py:131(removeEscape)
      707    0.000    0.000    0.000    0.000 h264.py:23(__init__)
     2006    0.000    0.000    0.000    0.000 {len}
        1    0.000    0.000  373.808  373.808 h264.py:6(&lt;module>)
        1    0.000    0.000    0.000    0.000 h264.py:22(BitStream)
        1    0.000    0.000    0.000    0.000 h264.py:77(VerboseWrapper)
        1    0.000    0.000    0.000    0.000 h264.py:11(setVerbose)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}&lt;/pre>

&lt;div class='p'>Druhý pokus, který byl skoro zadarmo, byl nainstalovat
&lt;a href='http://pypy.org/' class='external'>pypy&lt;/a>, což je alternativní implementace Pythonu s
„Just-in-Time” kompilerem, a pustit to v tom. Výsledek?&lt;/div>

&lt;pre>261010454 function calls in 165.356 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 23691275 1563207619897.772 65982.418 -3153386446098.892 -133103.282 h264.py:63(tab)
 91092961 536353730042.098 5887.982 536353741505.578 5887.982 h264.py:27(bit)
   334970 321684266772.059 960337.543 -296438412397.484 -884970.034 h264.py:35(bits)
 11923219 307659624818.975 25803.403 -243097552805.106 -20388.584 h264.py:41(golomb)
      683 163616892732.185 239556211.907  165.020    0.242 h264.py:461(parsePSlice)
  3955682 87309675664.466 22071.965 -244719216.961  -61.865 h264.py:50(signedGolomb)
  2094625 28846.299    0.014 -244579229.288 -116.765 h264.py:348(macroblockLayer)
 91096499 11463.483    0.000 11463.483    0.000 {ord}
 14606420 2244.535    0.000 2244.535    0.000 h264.py:337(mix)
        1    0.218    0.218  165.356  165.356 h264.py:642(functionalTest)
      707    0.036    0.000    0.036    0.000 {method 'read' of 'file' objects}
      707    0.025    0.000  165.095    0.234 h264.py:557(parseFrameInner)
      707    0.021    0.000    0.021    0.000 {method 'replace' of 'str' objects}
     3535    0.020    0.000    0.023    0.000 h264.py:57(alignedByte)
      707    0.003    0.000    0.003    0.000 h264.py:23(__init__)
     2006    0.003    0.000    0.003    0.000 {len}
      722    0.002    0.000    0.002    0.000 {method 'startswith' of 'str' objects}
      707    0.002    0.000    0.023    0.000 h264.py:131(removeEscape)
      707    0.002    0.000  165.097    0.234 h264.py:579(parseFrame)
        1    0.001    0.001    0.001    0.001 {nt.listdir}
        1    0.000    0.000  165.357  165.357 h264.py:2(&lt;module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    0.000    0.000    0.000    0.000 h264.py:22(BitStream)
        1    0.000    0.000    0.000    0.000 h264.py:77(VerboseWrapper)
        1    0.000    0.000    0.000    0.000 h264.py:11(setVerbose)
  4483734 -3669274014.929 -818.352 -3669274014.929 -818.352 h264.py:445(median)
  1977840 -4159866550.303 -2103.237 -4159866550.303 -2103.237 {method 'append' of 'list' objects}
 15742034 -2972002711751.617 -188794.073 94047.814    0.006 h264.py:184(residual)&lt;/pre>

&lt;div class='p'>Ta záporná čísla vypadají trošku podezřele, ale v zásadě 707 snímků bylo
zpracováno v čase 165.3s a s klasickým Pythonem to trvalo 373.8s. To by už byly
zhruba 4 snímky za sekundu (bez práce), ale to je stále málo &amp;hellip; možná.&lt;/div>

&lt;div class='p'>Tak co s tím?&lt;/div>

&lt;ul>
&lt;li>načtení jednotlivých bitů je drahé (ano, není divu &amp;mdash; z pohodlnosti si hraji s "0"/"1" stringy místo přímo bity)&lt;/li>

&lt;li>tabulky jsou lokální a s každým voláním je tedy třeba je znova vytvořit&lt;/li>

&lt;li>dekódování bitového streamu do tabulek dělám tak, že postupně načítám bity a ptám se, jestli už v tabulce nejsou&lt;/li>
&lt;/ul>

&lt;div class='p'>Třetí bod jsme právě minulý týden diskutovali a Ondra to pak nevydržel &lt;span class='wink'>&lt;/span> a
rovnou ten kousek napsal jako příklad, viz
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/bittables.py' class='external'>bittables.py&lt;/a>
nebo můj mini pokus o test
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/bittables_test.py' class='external'>bittables_test.py&lt;/a>.
Už jsme tedy na githubu &lt;b>2 contributors&lt;/b> &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>O co jde? Jedná se o stavový automat s jednoduchou přechodovou tabulkou.
Začínáte ve stavu 0. Když načtete bit 0, tak si další stav přečtete z tab[0] a
když 1, tak z tab[1]. Spodním bitem je kódovaná informace, že už jste výsledek
našli a zbytek čísla udává index do výsledkové tabulky. Pokud je spodní bit
nula, tak pokračujete v tab[stav+0] nebo tab[stav+1]. Je to jasné? Pokud ne,
tak možná je to lépe vidět přímo v tom zdroji &amp;hellip;&lt;/div>

&lt;div class='p'>p.s. ještě spíše pro sebe si sem schovám referenční volání:&lt;/div>

&lt;pre>m:\git\h264-drone-vision>c:\python27\python.exe -m cProfile -s time h264.py -f m:\git\data0\frames\ > tmp.txt&lt;/pre>

&lt;div class='p'>p.p.s.s.
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/d68bfb9aea333799bab1382c9b75d19fab7de270' class='external'>globalizace&lt;/a>
pomohla &amp;hellip; je to sice celkově jen o třetinu rychlejší (v klasickém Pythonu), ale např. nejčastěji
volaná funkce residual() je 3x rychlejší:&lt;/div>

&lt;pre>15742034   32.250    0.000  123.116    0.000 h264.py:187(residual)&lt;/pre>

&lt;hr/>

&lt;h2>14. prosinec 2013 &amp;mdash; generátor a automaty&lt;/h2>

&lt;div class='p'>Dnes jsem snad plně implementoval generátor bitů (k mému překvapení viditelné
zrychlení) a automaty místo hledání v tabulkách (viz úvodní část v
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/14800762d243b35ccbead5787697db9c42a9afa6/h264.py' class='external'>h264.py&lt;/a>.
Je to lepší, ale ještě to stále není dobré. Když jsem to spustil v PYPY, tak
jsem dostal nesmyslný čas (344990319 function calls in -19819172.282 seconds),
ale volání hlavní funkce je zřejmé:&lt;/div>

&lt;pre>707    0.001    0.000  105.716    0.150 h264.py:555(parseFrame)&lt;/pre>

&lt;div class='p'>tj. 707 snímků za 105s &amp;hellip; a tedy cca 6.7 snímků za sekundu. Pokud bych to
pustil ve čtyřech procesech, tak se možná dostanu na 25 FPS, ale to je moc na
hranici &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>25. prosinec 2013 &amp;mdash; Heidi zdrojáky&lt;/h2>

&lt;div class='p'>Dnes jsem dal na &lt;a href='https://github.com/robotika/heidi' class='external'>github zdrojáky Heidi&lt;/a>.
Bylo by pěkné je nejprve trošku uklidit, okomentovat a vyříznout jen „zdravé
jádro”, ale toho bychom se nemuseli dočkat. Takže tam najdete mix pokusů z
&lt;a href='/competitions/robotchallenge/2013/cs'>AirRace&lt;/a>,
&lt;a href='/competitions/robotem-rovne/2013/cs'>Robotem rovně&lt;/a> i
&lt;a href='/competitions/roboorienteering/2013/cs'>RoboOrienteeringu&lt;/a>. Na druhou stranu,
pokud jste dostali pod stromeček &lt;b>AR Drone 2.0&lt;/b>, tak si rovnou můžete v
Pythonu hrát &amp;hellip;&lt;/div>

&lt;div class='p'>A nějaké další motivace? No chtěl jsem začít s tou integraci pro první testy s
létáním a současným pársováním H264 kodeku a to se nutně bude odkazovat do už
existujících zdrojáků na létání. Pokud toto bude číst někdo, kdo by to opravdu
použil/používal, tak mi prosím dejte vědět &amp;mdash; věřím, že ten kód půjde
přetvořit v něco lépe stravitelného &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h2>27. prosinec 2013 &amp;mdash; multiprocessing&lt;/h2>

&lt;div class='p'>Včera večer jsem se v tom nějak zamotal. Nahrávání, a teď nově i zpracování,
videa běží v odděleném procesu, aby nijak nezdržovalo hlavní řídící smyčku. Za
tímto účelem používám modul &lt;b>multiprocessing&lt;/b> a z něj pak &lt;b>Process&lt;/b> a
&lt;b>Queue&lt;/b>. Modul nabízí podobnou funkcionalitu jako &lt;b>threading&lt;/b>, ale oddělený
&lt;i>Process&lt;/i> může běžet na jiném procesoru.&lt;/div>

&lt;div class='p'>Má to ale drobný zádrhel a to v komunikaci mezi jednotlivými procesy. Python se
snaží, ale občas nemá šanci. Pokud si dobře vybavuji, jak mi to Zbyněk kdysi
vysvětloval, tak vlastně pustí paralelně další interpreter a pokud se nějaký
datový typ používá u obou, tak se serializuje tam a zpátky. A to někdy nejde.
Kdy? Například pokud si uděláte třídu &lt;i>PacketProcessor&lt;/i>, která slepuje
jednotlivé video pakety (jsou celkem dost rozkouskované, typická velikost byla
1460 bajtů), a přidáte si do toho vlákno, které by v mezičase zpracovávalo
nejnovější kompletní frame. Pokud hloupě tuto instanci třídy používáte i v
hlavním programu (koukal na výsledky analýzy), tak to skončí chybou jako:&lt;/div>

&lt;pre>pickle.PicklingError: Can't pickle &amp;lt;type 'thread.lock'&amp;gt;: it's not found as thread.lock&lt;/pre>

&lt;div class='p'>Pro účely meziprocesové komunikace existují vhodnější nástroje: Queue, Pipe,
Lock &amp;hellip; vše z modulu &lt;b>multiprocessing&lt;/b>. A kde, že jsem se to zamotal? Chtěl
jsem do ARDrone2 přidat, stejně jako je to u robota Eduro,
&lt;i>registerDataSource()&lt;/i> a &lt;i>addExtension()&lt;/i>. První přidá zdroj dat a hlavní
smyčka robota se ho pak ptá, zda není něco nového. Druhá přidá konzumenta,
který čte „novinky” a podle toho něco dělá nebo nastavuje vnitřní stav
robota. Tak do podobného (možná stejného??) rámce se snažím zpracování videa
napasovat a první pokus se úplně nepovedl (takže jsem ho zatím ještě ani
nekomitoval).&lt;/div>

&lt;div class='p'>A co jinak? Z výpisů&lt;/div>

&lt;pre>insmod /data/video/driver2/cdc-acm.ko
insmod: can't insert '/data/video/driver2/cdc-acm.ko': invalid module format&lt;/pre>

&lt;div class='p'>soudím, že po flashnutí nové verze firmware (cca před půl rokem??) jsem ještě
nezkompiloval „nové” moduly pro čtení dat ze sonaru po USB (liší se build
verze kernelu). Také přišel mail z &lt;i>ARDrone API&lt;/i> konference, že nový
&lt;a href='https://play.google.com/store/apps/details?id=com.parrot.freeflight' class='external'>AR.FreeFlight
2.4.10&lt;/a> aplikace podporuje „GPS flight recorder” a kdy to konečně přidají do
SDK? No některé jednohvězdičkové komentáře mne moc neuklidňují: &lt;i>Shame on
Parrot Buggy at best. Using the GPS and the return to home button caused my
drone to dive into the street from 30' destroying the nose. I am done with
Parrot's lies, faulty app, and extremely poor customer service.&lt;/i> Tak snad to
přes víkend nerozbiji s novou oficiální aplikací &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h2>28. prosinec 2013 &amp;mdash; příprava na let H-264-00&lt;/h2>

&lt;div class='p'>Včera večer jsem to nějak
&lt;a href='https://github.com/robotika/heidi/commit/37f6e2e2ccb83e13e296ddc25d29ea4bbce34b07' class='external'>upatlal&lt;/a>.
Zakomentoval jsem pouštění sonaru (včetně přehrávání z logu), přidal logování
&lt;i>src_h264_*&lt;/i>, obešel asserty &amp;hellip; no prostě hrůza.&lt;/div>

&lt;div class='p'>Plán je
&lt;a href='https://github.com/robotika/heidi/blob/master/h264drone.py#L135' class='external'>odkomentovat
řádku 135&lt;/a> (opravdu jde na githubu generovat URL pro vybranou řádku &lt;span class='smile'>&lt;/span> )&lt;/div>

&lt;pre>#drone.takeoff( enabledCorrections = False )&lt;/pre>

&lt;div class='p'>a pak možná změnit limit na
&lt;a href='https://github.com/robotika/heidi/blob/master/h264drone.py#L137' class='external'>řádce
137&lt;/a>:&lt;/div>

&lt;pre>for i in xrange(100):&lt;/pre>

&lt;div class='p'>resp. to předělat na reálný čas. Heidi by se tedy měla vznést, chvíli logovat
data a zase přistát.&lt;/div>

&lt;div class='p'>V dalším kroku bych změnil
&lt;a href='https://github.com/robotika/heidi/blob/master/h264drone.py#L138' class='external'>příkaz
pohybu&lt;/a>:&lt;/div>

&lt;pre>drone.moveXYZA( 0.0, 0.0, 0.0, 0.0 )&lt;/pre>

&lt;div class='p'>na&lt;/div>

&lt;pre>drone.moveXYZA( 1.0, 0.0, 0.0, 0.0 )&lt;/pre>

&lt;div class='p'>tj. 1m/s pohyb vpřed a pak to zkoumal doma z logů &amp;hellip; tak to by nedopadlo
dobře.  Už jsem to vše zapomněl. Podle
&lt;a href='https://github.com/robotika/heidi/blob/master/ardrone2.py#L1137-L1145' class='external'>homologace
z RoboOrienteeringu 2013&lt;/a> (a ještě nedodělané) to jen
&lt;a href='https://github.com/robotika/heidi/blob/master/ardrone2.py#L591-L593' class='external'>nastaví
úhel&lt;/a> pro let v X-ové ose a musím si hlídat rychlost &lt;i>vx&lt;/i>.&lt;/div>

&lt;div class='p'>K logování bych možná měl také poznámku: teď se loguje počet větších vektorů
(definovaných proměnnou THRESHOLD) v jednotlivých kvadrantech, přesněji
polovinách, tj. vždy součty dvou kvadrantu. Další TODO. Pro přehrávání tedy
není nutné znova zpracovávat video.&lt;/div>

&lt;div class='p'>Na druhou stranu by se určitě  hodila i možnost revize tohoto zdroje &amp;mdash;
podobně to bylo na robotu Eduro, kdy např. při
&lt;a href='/competitions/robotchallenge/2009/cs'>sbírání puků&lt;/a> detektor posílal pozice puků
v obraze. Jelikož se nezpracovává každý snímek (zatím to nestíhám), ale
ukládají se všechny, tak budu potřebovat nějakou značku, který snímek to byl.
Pokud si dobře vzpomínám, tak PaVE video hlavička obsahovala i časovou
známku, tak tu tam budu muset do výsledku analýzy snímku přidat. Log momentálně
vypadá takto (&lt;i>src_h264_131227_214401.log&lt;/i>):&lt;/div>

&lt;pre>0
(0, 0, 0, 0)
1
(56, 54, 62, 48)
1
(310, 427, 365, 372)
1
(130, 159, 116, 173)
6
(425, 470, 427, 468)
33
(194, 165, 150, 209)
29
(172, 169, 140, 201)
29&lt;/pre>

&lt;div class='p'>Na začátku jsou jedničky, protože zpracování obrazu naběhne o trošku dříve, než
samotná řídící smyčka (to by mimochodem řešili ty &lt;i>dataSource&lt;/i>, které jsem
tam přidal a zatím zase vyhodil). Jakému reálnému času odpovídá číslo 33 nevím,
chyba, ale přehráním logu a výpisem &lt;i>drone.time&lt;/i> se to dozvím:&lt;/div>

&lt;pre>&amp;hellip;
AT*CONFIG=%i,"video:video_codec","130"
QUEUE 1218.419403 (0, 0, 0, 0)
QUEUE 1218.429443 (56, 54, 62, 48)
QUEUE 1218.439361 (310, 427, 365, 372)
QUEUE 1218.449401 (130, 159, 116, 173)
QUEUE 1218.51004 (425, 470, 427, 468)
QUEUE 1218.841949 (194, 165, 150, 209)
QUEUE 1219.133605 (172, 169, 140, 201)
Landing &amp;hellip; (0.0028891020142788417, -0.019957041168367, 0.0)
&amp;hellip;&lt;/pre>

&lt;div class='p'>vypadá to na cca 0.33s (1218.84 - 1218.51), tj. 3 snímky za sekundu. Toto zatím
běželo v „normálním” Pythonu. Udělal jsem ještě
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/41eb946f8991e416002d41bdee3c5c7abba69f8f' class='external'>drobné
přesuny&lt;/a>, abych to mohl celé pustit pod PYPY, tak uvidíme.&lt;/div>

&lt;div class='p'>V současnosti vím o následujících problémech:&lt;/div>

&lt;ul>
&lt;li>jak už se počítá, tak spojení chvílema zadrhává a &lt;b>PaVE&lt;/b> značka nemusí být
na začátku paketu (zmiňovaný
&lt;a href='https://github.com/robotika/heidi/blob/master/h264drone.py#L50' class='external'>zakomentovaný
assert&lt;/a>).&lt;/li>

&lt;li>pracuji s nahrávaným videem, které bude mít oproti realitě nějaké zpoždění.
Bude třeba přejít na jiný kanál a nahrávání vypnout (v H264 kodeku se posílá
pouze jeden kanál, video procesor toho více nestíhá).&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;h2>29. prosinec 2013 &amp;mdash; Let H-264-00&lt;/h2>

&lt;div class='p'>Pokud si myslíte, že něco bude fungovat hned na poprvé, tak jste ještě hodně
naivní &lt;span class='smile'>&lt;/span>. Že půjde vše hladce jsem nečekal, ale přeci jenom jsem byl klasický
programátor optimista. Tak zase pěkně chronologicky &amp;hellip;&lt;/div>

&lt;div class='p'>Včera jsem poprvé létal s novou Android aplikaci
&lt;a href='https://play.google.com/store/apps/details?id=com.parrot.freeflight' class='external'>AR.Free
Flight 2.4.10&lt;/a> s &lt;a href='http://ardrone2.parrot.com/apps/flight-recorder/' class='external'>Flight
Recorder modulem&lt;/a>. Moc jsem toho nenalétal, ale také jsem s Heidi
nehavaroval &lt;span class='smile'>&lt;/span>. GPS funkcionalitu jsem moc nepoužil &amp;mdash; je pěkně skrytá v
pravém horním rohu. Nahrávání na USB disk fungovalo pěkně. Drona se občas
propadala i několik metrů, tak jsem se bál, že narazím do skály, ale konec
dobrý, všechno dobré.&lt;/div>

&lt;div class='p'>Dnes jsem Android aplikaci zkoušel znova a narazil na tlačítko „store map”.
Dostanete se tak na Google maps a můžete si stáhnout některé mapové čtverce.
Nevím zda stažením dalšího okolí nutně ztrácíte původně uložené mapy, ale
minimálně to vypadá lépe něž klikání do šedivé plochy. Po zapnutí čtyřtulky se
ukáže GPS poloha včetně kruhu s očekávanou chybou. Lehce foukalo a tak byla
drona hned po startu trošku unášená. Podle GPS stopy „o tom věděla”, ale nic s
tím nedělala.  Při druhém pokusu začal tablet zuřivě pípat, že dochází baterky,
a tak jsem vybalil notebook a konečně začal dělat to co jsem měl: test kódu s
H264.&lt;/div>

&lt;div class='p'>Zkoušel jsem rovnou PYPY, ale ještě jsem raději neodkomentoval
&lt;i>drone.takeoff()&lt;/i>. A to bylo dobře.  Při prvním startu vyskočilo okno
firewallu. Při druhém startu neustále timeoutoval video kanál. Před tím jsem
ukládal video na USB disk, takže to asi dělal i dál. Vypojil jsem GPS modul a
znova firewall, ale pak už video data začala chodit.&lt;/div>

&lt;div class='p'>Odkomentoval jsem start, drona vzlétla, ale na místě se moc nedržela. Větřík
udělal své, takže příkaz pro let vpřed ani nebyl potřeba. Druhý test vypadal
dost podobně. Třetí test jsem zkoušel ruční řízení a&lt;/div>

&lt;pre>ManualControlException
Traceback (most recent call last):
  File "app_main.py", line 72, in run_toplevel
  File "h264drone.py", line 192, in &amp;lt;module&amp;gt;
    h264drone( replayLog=replayLog, metaLog=metaLog )
  File "h264drone.py", line 148, in h264drone
    manualControl( drone )
NameError: global name 'manualControl' is not defined&lt;/pre>

&lt;div class='p'>a došlo na převracení čryřtulky ve vzduchu &amp;hellip;&lt;/div>

&lt;div class='p'>Logy zatím nic moc:&lt;/div>

&lt;pre>0
(0, 0, 0, 0)
1
(1, 0, 1, 0)
1
(7, 31, 0, 38)
1
(0, 1, 0, 1)
1
(135, 129, 3, 261)
1
(0, 0, 0, 0)
1
(1, 0, 1, 0)
1
(0, 0, 0, 0)&lt;/pre>

&lt;div class='p'>a vypadá to, že na rozdíl od normálního Pythonu PYPY skončí nějak divně &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>30. prosinec 2013 &amp;mdash; Let H-264-01&lt;/h2>

&lt;div class='p'>Dnes jen krátce. Asi bych začal &lt;a href='http://youtu.be/vBWtMs99e1A' class='external'>video
záznamem letu H-264-01&lt;/a>. Letěl jsem s
&lt;a href='https://github.com/robotika/heidi/commit/42f80abca5d855377a1391579d035addc1108f00' class='external'>tímto
kódem&lt;/a> (jen jsem ještě odmazal
&lt;a href='https://github.com/robotika/heidi/commit/dd2f8604bf6c858b14a813eaf8a7752efa794ab8' class='external'>zbytečný
update&lt;/a>). V reálu jsem si pouze všiml několika výpadků spojení a následné
kolize. To, že se čtyřtulka otáčí kolem své osy jsem viděl až z
videozáznamu.&lt;/div>

&lt;div class='p'>Přemýšlím, co si asi případný čtenář pomyslí, ale toto je ten důvod:&lt;/div>

&lt;pre>drone.moveXYZA( drone.speed, 0.0, 0.0, vz )&lt;/pre>

&lt;div class='p'>Místo aby se drona zvedla rychlostí &lt;b>vz&lt;/b>, tak se tou rychlostí otáčela.
Poslední parametr totiž není &lt;b>Z&lt;/b>, ale &lt;b>A&lt;/b> (angle).&lt;/div>

&lt;div class='p'>Motivací pro řízení výšky byl jediný nenulový snímek z letu H-264-00:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/h-264-00-0140.jpg'>&lt;img src='/articles/h264-drone-vision/h-264-00-0140_t.jpg' alt='(135, 129, 3, 261)' title='(135, 129, 3, 261)' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/h-264-00-0140.jpg'>(135, 129, 3, 261)&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>left, right, up, down &amp;hellip; mimochodem, tento kód jsem nemohl při pygame
přehrávání najít a chvilku mi trvalo si uvědomit, že při prvních testech jsem
integroval vektory přes 3 snímky, ty ale teď nemám, takže používám jenom jeden snímek.
Let H-264-01 měl tedy vyzkoušet regulaci pohybu nahoru a dolu a zároveň lépe
logovat číslo snímku a timestamp.&lt;/div>

&lt;pre>&amp;hellip;
52
(203L, 329399L, (0, 0, 0, 0))
179
(217L, 329855L, (289, 290, 182, 397))
75
(246L, 330801L, (0, 0, 0, 0))
&amp;hellip;&lt;/pre>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/h-264-01-0217.jpg'>&lt;img src='/articles/h264-drone-vision/h-264-01-0217_t.jpg' alt='(289, 290, 182, 397)' title='(289, 290, 182, 397)' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/h-264-01-0217.jpg'>(289, 290, 182, 397)&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&amp;hellip; no moc pěkně to nevypadá :-(.&lt;/div>

&lt;hr/>

&lt;h2>9. leden 2014 &amp;mdash; Parrot MiniDrone&lt;/h2>

&lt;div class='p'>Byl jsem celkem zvědavý, s čím přijde Parrot na letošní CES, a je to
&lt;a href='http://www.mobilmania.cz/clanky/parrot-letaci-minidrone-a-skakaci-robot-ces/sc-3-a-1325773/default.aspx' class='external'>MiniDrone
a skákací robot&lt;/a> (Kamile, díky za link &lt;span class='smile'>&lt;/span>).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 253px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/minidrone.jpg'>&lt;img src='/articles/h264-drone-vision/minidrone_t.jpg' alt='Parrot MiniDrone, převzato z mobilmania.cz' title='Parrot MiniDrone, převzato z mobilmania.cz' class='border'  width='247' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/minidrone.jpg'>Parrot MiniDrone, převzato z mobilmania.cz&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Podle fotky z MobilMania to vypadá, že navigace pomocí spodní kamery a sonaru
zůstává, ale zbytek je zatím záhadou. Místo WiFi se pro řízení používá
Bluetooth. Na hraní po místnosti to vypadá jako vhodnější hračka než velká
drona &amp;hellip; no necháme se překvapit.&lt;/div>

&lt;hr/>

&lt;h2>13. leden 2014 &amp;mdash; Pohyblivý strom&lt;/h2>

&lt;div class='p'>O víkendu jsem zase udělal malinký krůček vpřed. Skoro mám pocit, jestli to s
tím logováním nepřeháním &amp;hellip; na
&lt;a href='https://github.com/robotika/heidi/commits/master' class='external'>githubu&lt;/a> je vidět,
kdy jsem co kódoval (teď už se tam píše jen „2 days ago”, ale lze to zjistit
přesně) a z logů (meta_140112_144903.log .. meta_140112_151852.log), kdy jsem
s létáním začal a kdy skončil &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/moving-tree-0000.jpg'>&lt;img src='/articles/h264-drone-vision/moving-tree-0000_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/moving-tree-0152.jpg'>&lt;img src='/articles/h264-drone-vision/moving-tree-0152_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/moving-tree-0250.jpg'>&lt;img src='/articles/h264-drone-vision/moving-tree-0250_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Vznikla nová třída
&lt;a href='https://github.com/robotika/heidi/blob/master/pave.py' class='external'>PaVE&lt;/a> (samozřejmě
současně s
&lt;a href='https://github.com/robotika/heidi/blob/master/pave_test.py' class='external'>PaVETest&lt;/a>). Je to
Parrotem používaná zkratka za „Parrot Video Encapsulation” a třída skládá
přišlá data po TCP do „obrázkových paketů” (začínajících právě značkou
„PaVE”).  Byla to problémová část u předešlých letů, tak teď už je to snad
udělané lépe.&lt;/div>

&lt;div class='p'>Byla to radost programovat &amp;mdash; asi to není učebnicový postup, ale mne celkem
vyhovuje:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='https://github.com/robotika/heidi/commit/d92017bdf938f0f77ea84f5b4b04433e38462ebc' class='external'>dummy implementace&lt;/a>, která skoro nic nedělá, ale definuje interface&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/heidi/commit/e529eb014f109cfc3aca0d3732ccc6693c428b00' class='external'>první verze, co řeší triviální příklady&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/heidi/commit/d4baa04f20cf015d3b9246817f7256f2877808bc' class='external'>malý refactoring&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/heidi/commit/6503debeaafb68e69c5ccb12786c3bbc8b1c5a56' class='external'>pořádný test na různých video souborech s různou délkou paketu&lt;/a>&lt;/li>

&lt;li>&lt;a href='https://github.com/robotika/heidi/commit/02e84811e73d059282f999deeaa013faeb4e8a3a' class='external'>integrace a nahrazení starého kódu&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>Vypnul jsem nahrávání videa a přešel na základní nebufferovaný video kanál.
Zdržení by tedy mělo být minimální, ale různé snímky vypadávají a kvalita
obrazu je o řád horší. Množství přenášených dat lze regulovat, ale s tím jsem
zatím neexperimentoval.&lt;/div>

&lt;div class='p'>A co to v „letové sadě” &lt;b>H-264-02&lt;/b> dělalo? Úplně první pokus drona vzlétla
snad do osmi metrů a manuálně jsem ji musel donutit přistát. Sice se mi nechtělo
to moc opakovat, ale „jedno měření, žádné měření” a podruhé a potřetí
letěla podle očekávání. Heidi měla pouze regulovat výšku, na základě informací z
kamery, tak jsem na analýzu toho prvního letu celkem zvědav.&lt;/div>

&lt;div class='p'>V další sérii mi skončila na stromě. Už nevím přesně co se dělo (mírně foukalo)
a pod dronou byl strom, takže přistát nebyla správá volba. No procvičil jsem si
v dalším letu „manuální řízení” a pak už se to neopakovalo.&lt;/div>

&lt;div class='p'>A co ty „pohyblivé stromy”?? Ale &amp;hellip; to byl jen takový nápad, jak simulovat
„les” jedním stromem. A jelikož jsem nechtěl bourat do těch mála co na
zahradě máme, tak jsem si vzal ulomenou větev (4m dlouhou?) a strom simuloval.
Asi bych potřeboval asistenta &lt;span class='wink'>&lt;/span> &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140205">&lt;/a>&lt;/div>

&lt;h2>5. únor 2014 &amp;mdash; Chodba&lt;/h2>

&lt;div class='p'>Jelikož počasí na testování venku není úplně ideální, tak jsem chtěl vyzkoušet
let chodbou na ČZU a nasbírat nějaká další testovací data. V idealistickém
případě by fungovala „navigace včelky”, tj. která strana by se pohybovala
více, ta je blíž a drona by se držela pryč od ní. Celkově tedy ve středu
koridoru. Na test nám zbylo posledních 5min a ani v jednom ze dvou pokusu
Isabele neodstartovala dostatečně bezpečně, abych jí nechal dál letět rovně.
Tak snad zase za týden &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/hallway.jpg'>&lt;img src='/articles/h264-drone-vision/hallway_t.jpg' alt='Pohled od stropu' title='Pohled od stropu' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/hallway.jpg'>Pohled od stropu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>TO BE CONTINUED&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140426">&lt;/a>&lt;/div>

&lt;h2>26. duben 2014 &amp;mdash; Paralelní slalom&lt;/h2>

&lt;div class='p'>Skoro bych mohl začít slovy „bylo nebylo ...”. Je to hrozné, jak to utíká. V
pátek mne vyhecoval PetrS k dalším experimentům s H264 kodekem. Je víkend a
uvidíme se až v pondělí v práci, takže to je vlastně &lt;i>paralelní slalom&lt;/i>, kdo
to posune dál &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>A přesnější zadání úkolu? Mozaika &lt;span class='smile'>&lt;/span>. Když jsme připravovali Isabelle na
&lt;a href='/competitions/robotchallenge/2014/cs'>Robot Challenge 2014&lt;/a> (anglická verze),
tak jsme k navigaci používali obrázky ze spodní kamery. Nakonec jsme létali s
nahrávaným video kanálem, který používá H264 kodek (ano, jedna ze „skrytých
motivací”).  Detaily si najděte v angličtině, ale ve zkratce jsme používali
jenom I-frame obrázky, které chodily jednou za sekundu, a 14 P-frame snímků
zahazovali. K věci &amp;hellip; ty snímky lze pak poskládat do mozaiky jako:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 306px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/robotchallenge/2014/mosaic-corrected.jpg'>&lt;img src='/competitions/robotchallenge/2014/mosaic-corrected_t.jpg' alt='Mozaika z I-frames' title='Mozaika z I-frames' class='border'  width='300' height='200'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/robotchallenge/2014/mosaic-corrected.jpg'>Mozaika z I-frames&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Tuto jsem dorovnával ručně (základní posun a natočení byl podle interní pozice
čtyřtulky).  V OpenCV2 se mi nepodařilo najít dostatečně spolehlivé funkce
(možná bude mít někdo nějaké doporučení?) pro korelaci snímků úpravu posunu o
pár pixelů. Po pravdě i to otočení by se trošku hodilo, ale kompas byl v tomto
případě skoro dostatečný.&lt;/div>

&lt;div class='p'>A teď to H264. To dělá korelaci makrobloků, není-liž pravda? A ty obsahují
pixelové posuny. Nestačilo by tedy jenom vybrat nějaký globální/převažující
posun celého snímku a bylo by to hotové? Tu 1/15 bych „už skočil” na
základě extrapolace z 14/15. Co myslíte, má to smysl zkusit? &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Pokud chcete skriptík, co skládá snímky do jednoho na základě CSV souboru, tak
ten naleznete &lt;a href='https://github.com/m3d/cv2-bits/blob/master/mosaic.py' class='external'>zde&lt;/a>
(ano, další repository různých OpenCV drobností).&lt;/div>

&lt;div class='p'>Už jsem za ty čtyři měcíce (alespoň to říkal github o posledním commitu) dost
věcí zapomněl. Mám video. To si můžu přehrát a uložit jednotlivé snímky pomocí
&lt;a href='https://github.com/robotika/heidi/blob/master/airrace.py' class='external'>airrace.py&lt;/a>.
Zároveň ho můžu rozložit na jednotlivé &lt;i>frame&lt;/i> pomocí utilitky
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/video.py' class='external'>video.py&lt;/a>.
A pak konečně
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/h264.py' class='external'>h264.py&lt;/a>
vrací posuny jednotlivých makrobloků.&lt;/div>

&lt;div class='p'>První problém je, že video &lt;i>video_rec_140318_200101.bin&lt;/i> má rozlišení
640X360. Když to podělíte 16, tak dostanete 22.5. Hmm. Ono tato informace by
měla jít číst z SPS, ale ta je přibalovaná pouze k I-frame, který pro test
jednotlivého snímku nemáme. Tj. první hack v &lt;i>h264.py&lt;/i>:&lt;/div>

&lt;pre>WIDTH = 40 #80 # for the first experiments hard-coded (otherwise available in SPS)
HEIGHT = 23 #45&lt;/pre>

&lt;div class='p'>Kupodivu pak už to nepadá a vrací pole čtveřic (souřadnice makrobloku a jeho
posun). &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Tak to PetrSovi moc nezávidím. Sám se v tom „trošku” ztrácím. Nejprve jsem
řešil, že funkce &lt;i>h264.parseFrame()&lt;/i> nemá jako parametr jméno souboru, ale už
přímo binární data (a dekódovala název jako by to byla video data). Pak
skutečnost, že místo pole občas vrátí &lt;i>None&lt;/i> &amp;hellip; hmm &amp;hellip; už si vzpomínám. Ono
to nebylo 100% funkční, tj. někdy můj dekodér může selhat. Zde je seznam
vadných snímků:&lt;/div>

&lt;pre>26943 26946 2 frame0003.bin
16374 16376 6 frame0124.bin
17644 17646 7 frame0143.bin
15616 15618 3 frame0241.bin
15355 15357 3 frame0657.bin
16311 16313 6 frame0726.bin
15439 15441 3 frame0760.bin
16149 16151 5 frame0766.bin
18554 18556 4 frame0893.bin
23682 23684 1 frame1486.bin&lt;/pre>

&lt;div class='p'>tj. 10 chyb v 1566 snímcích &amp;hellip; chyba 0.6% a další příklady k revizi.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140602">&lt;/a>&lt;/div>

&lt;h2>2. červen 2014 &amp;mdash; h264show.py&lt;/h2>

&lt;div class='p'>Jak dopadl „paralelní slalom” více jak před měsícem? Bídně. Jeden závodník
zakopl hned o první branku a druhý nevyjel vůbec  &amp;hellip;&lt;/div>

&lt;div class='p'>&amp;hellip; ale to ještě neznamená konec &lt;span class='wink'>&lt;/span>. V rámci příprav na
&lt;a href='/competitions/fieldrobot/2014/cs'>FRE14&lt;/a> jsem si rozchodil dekódování i
&lt;i>P-frame&lt;/i> a pak už nic nebránilo tomu, abych si mohl přehrávat video a do něj
rovnou dokreslovat vektory posunů jednotlivých makrobloků. Zase je to spíše
alfa verze, protože &lt;i>parseFrame&lt;/i> by asi měl mít na vstupu velikost snímku a
pod. Jinak mi
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/h264show.py' class='external'>h264show.py&lt;/a>
přijde poměrně jednoduché.&lt;/div>

&lt;div class='p'>A výsledky? Zkoušel jsem to na datech z
&lt;a href='/competitions/robotchallenge/2014/cs'>AirRace&lt;/a> a opravdu tam jsou nějaké divné
vektory:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/h264show.jpg'>&lt;img src='/articles/h264-drone-vision/h264show_t.jpg' alt='výstup h264show.py' title='výstup h264show.py' class='border'  width='320' height='198'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/h264show.jpg'>výstup h264show.py&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="141027">&lt;/a>&lt;/div>

&lt;h2>27. říjen 2014 &amp;mdash; first-person-drone-racing&lt;/h2>

&lt;div class='p'>V rámci hledání informací pro minidrone &lt;a href='/robots/jessica/cs'>Jessica&lt;/a> jsem
narazil na tento blog a video:
&lt;a href='http://versus.com/en/2014/10/17/watch-the-intense-new-sport-that-is-first-person-drone-racing' class='external'>first-person-drone-racing&lt;/a>&lt;/div>

&lt;div class='p'>&amp;hellip; tak nějak bych si představoval záverečnou prezentaci &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>&lt;center>
&lt;iframe width="640" height="360" src="//www.youtube.com/embed/NsxyV-kgfio?feature=player_embedded" frameborder="0" allowfullscreen>&lt;/iframe>
&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150305">&lt;/a>&lt;/div>

&lt;h2>5. březen 2015 &amp;mdash; Katarina a parsingSPS&lt;/h2>

&lt;div class='p'>Do čeho jsem se to probůh před lety pustil?! &lt;span class='wink'>&lt;/span> Mám teď zase motivaci to
posunout o kousek dál, protože &lt;a href='/robots/katarina/cs'>Katarina&lt;/a> má kompenzaci
náklonu a zároveň posílá video data v H.264 kodeku. Už mne přestalo bavit stále
přepisovat „konstanty” počtu makrobloků na začátku
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/h264.py#L20-L21' class='external'>h264.py&lt;/a>
a &amp;hellip; ono to nebylo zas tak jednoduché (viz
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/86a39389f80625e8fdf32832cea37af6074271ae' class='external'>diff&lt;/a>).&lt;/div>

&lt;div class='p'>Ano, první překážka byla moje děravá paměť a pak chvíle uhranutí, že to přeci
nemohlo být tak strašně složité, když chci přečíst jenom rozměr obrázku?? Pro
inspiraci viz
&lt;a href='http://stackoverflow.com/questions/6394874/fetching-the-dimensions-of-a-h264video-stream' class='external'>nápověda
na Stack Overflow&lt;/a> &amp;hellip; no není to tak triviální. Za zmínku možná stojí i to,
že ten popis je jenom začátek &amp;mdash; Katarina z nějakého důvodu posíla i časování,
ktere je schované v &lt;i>vui_parameters&lt;/i> a má tedy bit &lt;i>vui_parameters_present_flag&lt;/i>
nastavený. Jinak jsem to stále psal „cestou nejmenšího odporu”, tj. pokud se
podle daného bitu větvilo další čtení, tak jsem přidal assert, jestli ten kus
musím opravdu rozepisovat &amp;hellip; a občas jsem musel.&lt;/div>

&lt;div class='p'>A proč jsem tohoto „kostlivce” zase vytáhl ze skříně? No vedle toho, že mi ho
bylo líto bych znova rád zkusil průlet mezi překážkami: jednak školní chodbou a
dále v sadu na školním pozemku &amp;hellip; a něco o tom sepsat.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150308">&lt;/a>&lt;/div>

&lt;h2>8. březen 2015 &amp;mdash; ARDrone3 vs. ARDrone2&lt;/h2>

&lt;div class='p'>Že bude trošku rozdíl mezi tím, co posílá &lt;a href='/robots/katarina/cs'>Katarina&lt;/a> a co
posíla &lt;a href='/robots/heidi/cs'>Heidi&lt;/a> jsem tušil. Ale zároveň jsem si naivně myslel,
že možná bude stačit jenom upravit velikost vstupního obrázku. Nestačí.&lt;/div>

&lt;div class='p'>První „bota” byla celkem jednoduchá:&lt;/div>

&lt;pre>bs.bits( 14, info="frame_num" ) # HACK! should use parameter from SPS&lt;/pre>

&lt;div class='p'>tj. měl jsem tam natvrdo, že počet bitů na kódování pořadí snímku je 14. Na
Katarině jich je 16. To bych nezjistil, kdybych nepoužil už osvědčené nástroje,
s &lt;b>TRACE&lt;/b> define na 2, hledání výstupního souboru (naštěstí toto jsem si
&lt;a href='/articles/h264-drone-vision/cs#131018'>dříve zapsal&lt;/a>), pak vzpomínka, že
jednotlivé snímky jsou proházené (nejprve se hledá konec snímku a teprve pak se
parsuje vnitřek) &amp;hellip; a bylo to.&lt;/div>

&lt;div class='p'>Oprava byla triviální, protože jsem přestal parsovat snímky jednotlivě a SPS
jsem řešil před pár dny. Tj. další nastavitelná „globální konstanta”.&lt;/div>

&lt;div class='p'>Pak ale začalo přituhovat. Narazil jsem na &lt;b>mb_type&lt;/b> 2, pak 3, pak 1 &amp;hellip;
jenom 4 jsem zatím neviděl, resp. nově přidaný &lt;i>assert&lt;/i> zatím nevyletěl.
Korunu tomu nasadila pětka! O čem mluvím? ARDrone3 už nepoužívá pouze 16x16
makrobloky, ale i jemnější dělení:&lt;/div>

&lt;pre>&amp;#64;453524 mb_type             010 (  1) 
&amp;#64;453527 mvd_l0              011 ( -1) 
&amp;#64;453530 mvd_l0                1 (  0) 
&amp;#64;453531 mvd_l0              010 (  1) 
&amp;#64;453534 mvd_l0                1 (  0) 

&amp;#64;452700 mb_type             011 (  2) 
&amp;#64;452703 mvd_l0                1 (  0) 
&amp;#64;452704 mvd_l0                1 (  0) 
&amp;#64;452705 mvd_l0                1 (  0) 
&amp;#64;452706 mvd_l0              011 ( -1) 

&amp;#64;451752 mb_type           00100 (  3) 
&amp;#64;451757 sub_mb_type           1 (  0) 
&amp;#64;451758 sub_mb_type           1 (  0) 
&amp;#64;451759 sub_mb_type           1 (  0) 
&amp;#64;451760 sub_mb_type           1 (  0) 
&amp;#64;451761 mvd_l0                1 (  0) 
&amp;#64;451762 mvd_l0                1 (  0) 
&amp;#64;451763 mvd_l0              010 (  1) 
&amp;#64;451766 mvd_l0                1 (  0) 
&amp;#64;451767 mvd_l0                1 (  0) 
&amp;#64;451768 mvd_l0                1 (  0) 
&amp;#64;451769 mvd_l0                1 (  0) 
&amp;#64;451770 mvd_l0                1 (  0) 

&amp;#64;455469 mb_type           00100 (  3) 
&amp;#64;455474 sub_mb_type           1 (  0) 
&amp;#64;455475 sub_mb_type           1 (  0) 
&amp;#64;455476 sub_mb_type           1 (  0) 
&amp;#64;455477 sub_mb_type         010 (  1) 
&amp;#64;455480 mvd_l0              011 ( -1) 
&amp;#64;455483 mvd_l0              010 (  1) 
&amp;#64;455486 mvd_l0              010 (  1) 
&amp;#64;455489 mvd_l0              011 ( -1) 
&amp;#64;455492 mvd_l0                1 (  0) 
&amp;#64;455493 mvd_l0                1 (  0) 
&amp;#64;455494 mvd_l0              010 (  1) 
&amp;#64;455497 mvd_l0              011 ( -1) 
&amp;#64;455500 mvd_l0                1 (  0) 
&amp;#64;455501 mvd_l0                1 (  0)&lt;/pre>

&lt;div class='p'>Jsou to bloky 16x8, 8x16 a i 8x8. Navíc počet posunů &lt;i>mvd_l0&lt;/i> závisí na
hodnotě &lt;i>sub_mb_type&lt;/i>. Jak se počítají v tomto případě „globální 16x16”
offsety zatím netuším, ale to je až druhá fáze.&lt;/div>

&lt;div class='p'>Konečně k té pětce &amp;mdash; na to budete potřebovat odkaz do dokumentace,
strana 156, tabulka 9-4. Je tam speciální převodní tabulka pro
&lt;b>coded_block_pattern&lt;/b>, ale zajímat vás bude tentokrát sloupec
&lt;b>Intra_4x4&lt;/b>.&lt;/div>

&lt;div class='p'>Závěr: ARDrone3 má výkonnější procesory a tak si asi může dovolit lepší
kompresi videa. Trošku jsem ohackoval i
&lt;a href='https://github.com/robotika/h264-drone-vision/blob/master/h264show.py' class='external'>h264show.py&lt;/a>,
protože ARDrone3 PaVE bloky nepoužívá. Výstupny jsou zatím „divné”, ale
doufám, že je to mojí současnou ignorací posunů nových sub-makrobloků. Pro
zájemce viz
&lt;a href='https://github.com/robotika/h264-drone-vision/commit/7be8bf719e92be49b2633acd4e4d49d95ce274dd' class='external'>diff&lt;/a>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150311">&lt;/a>&lt;/div>

&lt;h2>11. březen 2015 &amp;mdash; mikro-pozorování&lt;/h2>

&lt;div class='p'>Ještě jsem ty menší makrobloky nevyřešil, ale jedno malinké pozorování bych měl
&lt;span class='wink'>&lt;/span> &amp;hellip; a dává to smysl. Ty &lt;i>TRACE&lt;/i> výpisy jsou totiž zavádějící &amp;mdash;
&lt;b>mvd_l0&lt;/b> asi ve skutečnosti popisuje jak &lt;i>x&lt;/i>, tak &lt;i>y&lt;/i> posun. Pak dává
smysl, že při rozdělení makrobloku 16x16 na 2x 16x8 budu mít čtyři &lt;i>mvd_l0&lt;/i>
posuny (dva vektory) a pro rozdělení 4x 8x8 těch vektorů bude osm (čtyři
vektory posunu).  Stejně tak to zapadá do bitového patternu, který se dělá po
4x4 blocích &amp;hellip; jen tam musím nějak ty „lokální” posuny integrovat. Mimo jiné
to znamená, že posun makrobloku není jedno číslo, ale obecně hned několik. A
konečně ignoruji detail, že &lt;i>Luma" a &lt;/i>Chroma"" si jdou každá svoji cestou a
je třeba se tedy o každou starat zvlášť.&lt;/div>

&lt;div class='p'>Program je teď ohackovaný pro ladění zmiňovaných nových makrobloků
(&lt;a href='https://github.com/robotika/h264-drone-vision/commit/e8a7338c61948da701f11a9b03322c49df7c91a1' class='external'>diff&lt;/a>).
Opraveny jsou alespoň ty znaménkové &lt;i>Golomby&lt;/i>. Možná jsem si měl udělat
„pracovní větev” než to bude fungovat alespoň jako předešlý kód &amp;hellip; příště.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="150312">&lt;/a>&lt;/div>

&lt;h2>12. březen 2015 &amp;mdash; ARDrone3 - první řada&lt;/h2>

&lt;div class='p'>Teď si naivně myslím, že už zase umím parsovat alespoň první řadu P-slice,
který může obsahovat vedle 16x16 makrobloků (mb_type=0) i 16x8, 8x16 a 8x8 (u
rozdělení 8x8 na menší 8x4, 4x8 a 4x4 si stále nejsem jistý, resp. tam jsem si
ještě stále o řád nejistější &lt;span class='wink'>&lt;/span>). Narazil jsem v náhodně vyhledaném článku
&lt;a href='http://research.microsoft.com/pubs/69056/directp_vcip_04.pdf' class='external'>Direct
macroblock coding for predictive (P) pictures in the H.264 standard&lt;/a> na tento
obrázek:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/articles/h264-drone-vision/motion-vector-prediction.png'>&lt;img src='/articles/h264-drone-vision/motion-vector-prediction_t.png' alt='Motion vector prediction' title='Motion vector prediction' class='border'  width='320' height='219'/>&lt;/a>&lt;br/>
&lt;a href='/articles/h264-drone-vision/motion-vector-prediction.png'>Motion vector prediction&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ono já mám i skoro pocit, že když tady odstránkuji výše, tak narazím na něco
podobného (no, nevidím to). Že je aktuální posun makrobloku kombinovaný z
levého, horního a pravo-horního posunu vím (tj. A, B, C &amp;mdash; D se snad používá
pouze pro B-slice(?)). Co mne ale zaujalo byly pozice v rámci 16x16 bloků.
Pro A tedy vpravo nahoře a pro B a C vlevo dole. Asi bych si měl ten článek
pořádně přečíst a dozvěděl bych se více, ale &amp;hellip; já to zatím jenom zkusil s tou
levou predikcí a ta na mém prvním příkladu funguje (tedy funguje i na dalších
pár prvních řadách co jsem prošel).&lt;/div>

&lt;div class='p'>Co mi ale zatím nefunguje je druhá a další řady (mimo jiné už tam se nachází
jemnější dělení 8x8 bloku). Do gitu to zatím dávat nebudu. Pokud nějaký čtenář
tuší o čem mluvím a zná řešení hádanky, tak si klidně nechám napovědět &lt;span class='wink'>&lt;/span>. Je
toho teď nějak hodně a nechci tento projekt zanechat na „roky” v nefunkčním
stavu (uvědomil jsem si, že dříve jsem důsledně psal unit-testy na špatně
rozkódované makrobloky &amp;mdash; je na čase se k tomu zase vrátit!).&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a href='/articles/h264-drone-vision/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Na komín</title>
	<link rel='alternate' href="http://localhost/competitions/nakomin/cs"/>
	<id>http://localhost/competitions/nakomin/cs</id>
	<updated>2014-10-07T00:00:00Z</updated>
	<author><name>Tonda Seiner</name></author>
	<summary type='html'> Připravil jsem reportáž z přípravy a průběhu soutěže Na komín v Košicích. Pokud
vás tato soutěž oslovila a nebyl čas nebo jste si netroufli tak alespoň krátké
přiblížení z pohledu účastníka. 

 </summary>
	<content type='html'> 
&lt;div class='p'>Tak po pořádku. Zvolili jsme relativně jednoduchou a robustní konstrukci , což
se ve svém důsledku vyplatilo. Rám byl tvořen z hliníkových profilů jekl,
svařen a zbytek byl již spojen šrouby. 
&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/drevo-kocur.jpg'>&lt;img src='/competitions/nakomin/drevo-kocur_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Nakonec jsme připustili po všemožných i nemožných návrzích, že konstrukce Fandy
je ta, která může přinést úspěch. Konstrukčně relativně jednoduchá, může se
dobře přizpůsobit různé rozteči žebříkových stupínků a s relativně jednoduchým
řízením a potřebnou rychlostí pro lezení po žebříku.&lt;/div>

&lt;div class='p'>Po sestavení rámu a motorů ho dostal do ruky Fanda, který mu nandal desku
řízení a celou tu chytristiku a ladil a zkoušel a měnil a zase zkoušel. Jako
hlavní pohon pro lezení byl použit motor z elektrokola a pro výměnu ramen byl
zvolen převodový motor. Protože měl Fanda už vyřešený měnič pro řízení motoru z
elektrokola včetně reverzace tak se zdála být realizace snadná &lt;span class='smile'>&lt;/span>. Postavil se
simulátor žebříku a zjistilo se, že největší problém je z odskočením žebříku a
tak i mechanika a uspořádání doznali další změny. A zase další testy a zkoušení
a ladění. Jednou lezl krásně nahoru a dolu, pak se něco stalo a zase nic. Byl z
toho hotovej, ale protože je schopen podat bezva výsledky jen ve stresu tak
jsem byl docela klidný, já už měl hotovo.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/happiness.jpg'>&lt;img src='/competitions/nakomin/happiness_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Když mě ale v den odjezdu řekl, když jsme měli kroužek, že to nemá dodělaný a
že je nutný, abychom ještě večer šli robota dodělat, tak jsem měl chuť ho
uškrtit, já na rozdíl od něj nemám rád práci na poslední chvilku. Takže
plánovaný odjezd byl na 22:00 s tím, že pojedeme celou noc a ráno jsme v
Košicích akorát na tréning. Co mám líčit prostě soutěž od samého začátku. Tak
jsme se ve 20:00 sešli abychom dodělali nutné věci jako tlačítko pro start a
stop robota, seřídit táhla a další, s tím že naprogramování už dodělá v
Košicích, protože do teď robota spouštěl přes počítač. Jenže když přišel, tak
stále testoval robota na zkušebním žebříku. Ale přimontujte něco na robota když
je v neustále v pohybu! To už jsem byl fakt naježenej. Do toho všeho nám
praskla jedna packa z 8mm makralonu, což si nedovedu moc vysvětlit , tak jsme
museli ohnout a vyrobit novou a pro jistotu ještě jednu náhradní. No co mám
líčit &amp;mdash; nakonec místo odjezdu ve 22:00 jsme vyjížděli ve 23:30. Naštěstí se
Kája doma trochu prospal a tak byl schopen řídit. Ač jsme se snažily nespat tak
nás to stejně zmáhalo i když to za moc nestálo. Z předpokládané délky trasy 8,5
hodiny bylo těch hodin zhruba 10 a tak jsme dorazily kolem půl desáté do
centra dění soutěže, naštěstí v pořádku.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/maskots.jpg'>&lt;img src='/competitions/nakomin/maskots_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Zaregistrovali jsme se a čekali na čas, kdy bude možnost si robota vyzkoušet v
reálu. Pořadatelé byli velice příjemní a z celé soutěže mám fajn pocit i když
bylo trochu skřípání a cítit , že takovou soutěž pořádají poprvé. Když jsme se
dostali konečně k testům tak byl výsledek víc než katastrofický, k tomu všemu
jak se robot nějak špatně zachytil a překroutil se, táhlo ramene nám zkratovalo
desku celého řízení a ta zahořela plamenem. Vypadalo to beznadějně. Fanda měl
sice náhradní, ale ta na robotu prý měla nějaké úpravy a nám vyhořeli i
potřebné odpory, arduino atd. Nakonec to dali s Kájou dohromady, narovnali jsme
táhla a oblepily samolepící páskou a čekali na další okno pro testování.
Mezitím pořadatelé zjistili, že všichni roboti mají potíže a v současné chvíli
by ani jeden robot nedal kvalifikaci což znamenalo vylézt do výšky 5m a slézt
zpět. Svolali tedy konferenci soutěžících a hledalo se řešení jak upravit
pravidla tak, aby se dalo soutěžit. Většina soutěžících se snažila nechat
upravit pravidla tak aby vyhovovala jen jemu. Nakonec asi udělali to
nejrozumnější a upravili pravidla tak, že se poleze normálně podle pravidel,
ale bez kvalifikace a že pokud někdo vyleze jen nahoru a bude první tak dostane
jen polovinu ceny, pokud splní úlohu celou tak dostane i celou cenu.&lt;/div>

&lt;div class='p'>Mezitím byl čas na úpravy robota, protože již jsme odhalili slabiny, které
robot měl díky tomu, že jsme opomněli, že se nejedná o žebřík, ale jednotlivé
stupínky. Museli jsme dodělat kluznou plochu z plastu pod celé tělo robota a
přišroubovali jsme plastová vodítka kolem těla robota tak, aby ho stupínky
vedli. Plast a nářadí jsme měli naštěstí sebou, přece jen nějaké zkušenosti s
robotikou už máme. Nakonec jsme ještě sjeli do obchodu kde měli šrouby a
hliníkové profily a upravily jsme záchytná ramena. Vše jsme stihly a v pátek v
19:15 jsme šli na 15minut testovat na komín. Jenže se ukázalo, že provedené
úpravy robotu pomohli, ale nejsou úplně dostatečné. Na víc se nám jistící lano
asi třikrát připletlo mezi mechanizmus výměny ramen a byl konec kýžené
čtvrthodinky. Tak jsme ještě dostali čas pro poslední zkoušky v sobotu v 11:15,
sbalily robota a pojízdnou dílnu &lt;span class='smile'>&lt;/span> a jeli jsme se ubytovat. Při večeři jsme
ještě v klidu domysleli potřebné úpravy a kolem 24 hodiny šli konečně spát.&lt;/div>

&lt;div class='p'>V sobotu ráno nás vzbudil budík v 7:00 tak jsme se kvapem nasnídali a mazali do
obchodu s mechanickými díly, dokoupily vše potřebné včetně spojovacího
materiálu a jeli jsme robota předělat. Pak mě napadlo abychom nedělali kašpárky
někde na fóru tak jsme zastavily na prázdném parkovišti nedaleko a potřebné
úpravy jsme udělali tam včetně ohnutí profilů, nařezání, vyvrtání a montáže.
Aby toho nebylo málo tak začalo pršet fakt bezva práce. Když jsme vše dodělali
bylo 11:00 a my měli za čtvrt hodinky trénovat. Opět jsme vše letecky vyřešili
a vše stihli. Robot šlapal o poznání lépe, ale pořád to nebylo ono, stále
problémy s tažným lanem. Robot byl tak rychlý, že zajišťující horolezec nestihl
ani lano přitahovat a tím nám vždy zasekl výměnu ramen. A zase konec zkoušek.
Co se dalo dělat, museli jsme nechat prostor dalším. Sice jsme chvilku brblali
nad tím jak nám to ten horolezec zkazil, ale nakonec jsme si řekli, že to nám
nepomůže a musíme udělat takové řešení aby se to nestávalo. Doplnili jsme kus
plastu který byl dostatečně tuhý a pružný a přesahoval ramena na něj jsme vždy
lano ještě přichytili. Byl to dobrej tah pomohlo to.&lt;/div>

&lt;div class='p'>V sobotu ve 14:00 bylo slavnostní zahájení soutěže a rozlosování robotů žáků
středních škol což byla kategorie I. Celá soutěž byla pojata celkem velkolepě
&amp;mdash; zahajoval starosta Košic a zástupci podílejících se firem. Běžel
doprovodný kulturní program na pódiu pod komínem a vyplňovali se tak chvilky
výměny týmů.  Večer dokonce byla laserová show a přenášení detailů ze samotné
soutěže on line na velké plátno. Běžel i stream na webu na komín a  tak mohli
zájemci sledovat i průběh soutěže doma. Chvilku jsme se dívali, ale ještě bylo
potřeba pracovat na vlastním robotovi tak jsme museli odejít. Co se týká
soutěžních robotů tak bylo vidět mnoho zajímavých nápadů a řešení. Je pravda,
že většinu jsme navrhovali také při volbě našeho robota, ale z nějakých důvodů
jsme je postupně zavrhli. I tady bylo vidět že to bylo opodstatněné, i když
leckterý robot byl spolehlivější než v té naší kategorii.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/winners.jpg'>&lt;img src='/competitions/nakomin/winners_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
V 18:00 bylo vylosováno pořadí pro soutěž v kategorii II, kam jsme patřili.
Jednalo se o vysoké školy, profesionální týmy a nezávislé týmy. V naší
kategorii bylo celkem 6 robotů. Docela jsme si věřili, že by to možná to 3.
místo mohlo být, i když jsme ani nevěděli kdo s námi soutěží. Vylosovali nám
pořadí číslo 4. Docela dobrá volba. Po prvním kole kdy jsme dali celých 10m
jsme si řekli, že to 3. místo máme jisté. Pak jsme nervózně sledovali ještě dva
následující roboty ale nakonec po prvním kole jsme byli na 1. místě. Za chvilku
začalo druhé kolo se zkráceným časem na 10 minut předešlé kolo mělo 20 minut na
robota. Šlo to ráz na ráz. Nakonec jsme potvrdili opět dosažením 10m hranice,
ale bohužel se resetoval procesor a robot nepokračoval směrem dolu. Škoda, ale
prvenství nám zůstalo a potvrzené.&lt;/div>

&lt;div class='p'>Ve 22:30 bylo slavnostní vyhlášení a předání fiktivních šeků. Jsme 1. a údajně
snad i na světe protože prý obdobná soutěž ve světě není.&lt;/div>

&lt;h1>Výsledková listina&lt;/h1>

&lt;h1>Kategória 1&lt;/h1>

&lt;div class='p'>&lt;center>
&lt;table border="1">
	&lt;tr>
		&lt;th>Umiestnenie&lt;/th>
		&lt;th>Zdolaná dĺžka&lt;/th>
		&lt;th>Robot&lt;/th>
		&lt;th>Škola&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>1.&lt;/th>
		&lt;th>8.70m&lt;/th>
		&lt;th>LCR 2.0&lt;/th>
		&lt;th>Talentum Cassoviensis Foundation&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>2.&lt;/th>
		&lt;th>8.15m&lt;/th>
		&lt;th>Frankie&lt;/th>
		&lt;th>SPŠE Košice&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>3.&lt;/th>
		&lt;th>6.72m&lt;/th>
		&lt;th>AirBot&lt;/th>
		&lt;th>Gymnázium M. Hattalu Trstená&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>4.&lt;/th>
		&lt;th>1.32m&lt;/th>
		&lt;th>Snail&lt;/th>
		&lt;th>SOŠ Automobilová Košice&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>5.&lt;/th>
		&lt;th>0.78m&lt;/th>
		&lt;th>Galeje Climber&lt;/th>
		&lt;th>Gymnázium Alejová Košice&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>6.&lt;/th>
		&lt;th>0.20m&lt;/th>
		&lt;th>AR Master&lt;/th>
		&lt;th>SPŠE Prešov&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>X&lt;/th>
		&lt;th>10.00m&lt;/th>
		&lt;th>Ostrovbot&lt;/th>
		&lt;th>SOŠ Ostrovského Košice (mimo súťažnej trate)&lt;/th>
	&lt;/tr>
&lt;/table>
&lt;/center>&lt;/div>

&lt;h1>Kategória 2&lt;/h1>

&lt;div class='p'>&lt;center>
&lt;table border="1">
	&lt;tr>
		&lt;th>Umiestnenie&lt;/th>
		&lt;th>Zdolaná dĺžka&lt;/th>
		&lt;th>Robot&lt;/th>
		&lt;th>Škola/Organizácia&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>1.&lt;/th>
		&lt;th>10.00m&lt;/th>
		&lt;th>Drevo kocúr&lt;/th>
		&lt;th>Rádioklub Písek&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>2.&lt;/th>
		&lt;th>4.65m&lt;/th>
		&lt;th>Roboteon&lt;/th>
		&lt;th>Boteon Charkov&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>3.&lt;/th>
		&lt;th>2.00m&lt;/th>
		&lt;th>ROS Climber&lt;/th>
		&lt;th>SjF TUKE Robotics Košice&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>4.&lt;/th>
		&lt;th>1.83m&lt;/th>
		&lt;th>Molibot&lt;/th>
		&lt;th>FEI TUKE Košice&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>5.&lt;/th>
		&lt;th>1.78m&lt;/th>
		&lt;th>RuDy&lt;/th>
		&lt;th>SjF TUKE Robotics Košice&lt;/th>
	&lt;/tr>&lt;/div>

&lt;div class='p'>&lt;tr>
		&lt;th>6.&lt;/th>
		&lt;th>1.15m&lt;/th>
		&lt;th>Johnny 5&lt;/th>
		&lt;th>T-Systems Slovakia Košice&lt;/th>
	&lt;/tr>
&lt;/table>
&lt;/center>&lt;/div>

&lt;div class='p'>V neděli, aby to nebylo jednoduché, vyrážíme v 9:00 k domovu a zastaví nás
městský strážník, že nemůžeme vyjet od hotelu, protože probíhá mezinárodní
maraton a skončí tak v 15:00. Nakonec jsme ukecali dopravního policistu, že nás
nechal ve volné chvilce projet z centra, ale než jsme se dostali z Košic tak
byla snad hodina a půl pryč. Pak už cesta skoro vesele ubíhala a tak jsme se
dostali do Písku ve 21:00 a to je konec naší cesty za vítězstvím.&lt;/div>

&lt;div class='p'>Ještě bych chtěl nakonec poděkovat všem, kteří nám všemožně pomáhali a vyšli
vstříc včetně pochopení rodin a manželek. Bez tohoto zázemí by to skutečně
nebylo možné. Díky moc všem.&lt;/div>

&lt;div class='p'>Za Radioklub Písek sesmolil Tonda&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/chimney.jpg'>&lt;img src='/competitions/nakomin/chimney_t.jpg' alt='' title='' class='border'  width='165' height='219'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/climber.jpg'>&lt;img src='/competitions/nakomin/climber_t.jpg' alt='' title='' class='border'  width='165' height='219'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/drevo-kocur-test.jpg'>&lt;img src='/competitions/nakomin/drevo-kocur-test_t.jpg' alt='' title='' class='border'  width='165' height='219'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/kocur-in-action.jpg'>&lt;img src='/competitions/nakomin/kocur-in-action_t.jpg' alt='' title='' class='border'  width='165' height='219'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/podium.jpg'>&lt;img src='/competitions/nakomin/podium_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/radioklub-pisek.jpg'>&lt;img src='/competitions/nakomin/radioklub-pisek_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/snail.jpg'>&lt;img src='/competitions/nakomin/snail_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/night-test.jpg'>&lt;img src='/competitions/nakomin/night-test_t.jpg' alt='' title='' class='border'  width='165' height='219'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/show.jpg'>&lt;img src='/competitions/nakomin/show_t.jpg' alt='' title='' class='border'  width='165' height='219'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/snail-in-action.jpg'>&lt;img src='/competitions/nakomin/snail-in-action_t.jpg' alt='' title='' class='border'  width='165' height='219'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/wheels.jpg'>&lt;img src='/competitions/nakomin/wheels_t.jpg' alt='' title='' class='border'  width='165' height='219'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/students.jpg'>&lt;img src='/competitions/nakomin/students_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/tank.jpg'>&lt;img src='/competitions/nakomin/tank_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/nakomin/tv.jpg'>&lt;img src='/competitions/nakomin/tv_t.jpg' alt='' title='' class='border'  width='220' height='166'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Odkazy:&lt;/h2>

&lt;ul>
&lt;li>Stránky organizátorů: &lt;a href='http://nakomin.com/' class='external'>http://nakomin.com/&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;a href='/competitions/nakomin/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>FireAnt</title>
	<link rel='alternate' href="http://localhost/robots/fireant/cs"/>
	<id>http://localhost/robots/fireant/cs</id>
	<updated>2013-10-24T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> FireAnt je stavebnice chodícího robota od americké firmy Orion Robotics. Jedná
se o šestinohého robota, postaveného z 25 (!) serv se zpětnou vazbou. Celý
robot je pak ovládan deskou s Arduinem. &lt;b>Blog update:&lt;/b> 23/5 &amp;mdash;
&lt;a href='/robots/fireant/cs#140523'>The Ant End&lt;/a>
 </summary>
	<content type='html'> 
&lt;div class='p'>&lt;iframe
src='http://fandorama.cz/projekty/921778164/fireant-hexapod/status.html'
width='200' height='120' align='right' style='border: none;'>&lt;/iframe>&lt;/div>

&lt;div class='p'>Toto je další z  &lt;a href='/articles/fandorama/cs'>fandorama článků/blogů&lt;/a> (na přesné
formě bychom se domluvili s přispěvovateli).  Balík se stavebnicí by měl
dorazit příští týden. Motivace je vytvoření „zahradního robota”. Je to trošku
„šílený česko-francouzko-kanadský projekt”, ale uvidíme. Pro představu, jak si
hrál někdo jiný s chodícími roboty na zahradě/poli viz starší
&lt;a href='http://hackaday.com/2011/10/20/robotic-farming-means-more-corn-for-everyone/' class='external'>článek
o robotických farmách&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/fireant.jpg'>&lt;img src='/robots/fireant/fireant_t.jpg' alt='FireAnt' title='FireAnt' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/fireant.jpg'>FireAnt&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Pokud máte zájem, aby na tomto místě vznikl článek nebo blog, kde bych
sepisoval první zkušenosti se stavbou a oživením robota, tak zde je
odpovídající fandorama link:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://fandorama.cz/projekty/921778164/fireant-hexapod/' class='external'>http://fandorama.cz/projekty/921778164/fireant-hexapod/&lt;/a>&lt;/li>
&lt;/ul>

&lt;h2>Odkazy:&lt;/h2>

&lt;ul>
&lt;li>Stránky výrobce:
&lt;a href='http://www.orionrobotics.com/FireAnt-Hexapod-Robot_p_248.html' class='external'>http://www.orionrobotics.com/FireAnt-Hexapod-Robot_p_248.html&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;hr/>

&lt;h1>Blog&lt;/h1>

&lt;h2>31. říjen 2013 &amp;mdash; Balíček dorazil!&lt;/h2>

&lt;div class='p'>Dnes ráno konečně dorazil balíček, no spíše balík, se stavebnicí robota. Tímto
jsou splněny nutné předpoklady tohoto fandorama projektu, které bych jinak
neměl ve své moci.&lt;/div>

&lt;div class='p'>Chtěl bych také poděkovat prvnímu přispěvovateli &amp;hellip;  vždy potěší zpráva, že
alespoň někoho by budoucí článek/blog zajímal. První fotografie:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/package.jpg'>&lt;img src='/robots/fireant/package_t.jpg' alt='balíček' title='balíček' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/package.jpg'>balíček&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/parts.jpg'>&lt;img src='/robots/fireant/parts_t.jpg' alt='díly' title='díly' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/parts.jpg'>díly&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/arduino.jpg'>&lt;img src='/robots/fireant/arduino_t.jpg' alt='arduino' title='arduino' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/arduino.jpg'>arduino&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>5. listopad 2013 &amp;mdash; FAQ&lt;/h2>

&lt;div class='p'>Vypadá to, že moc lidí tento potenciální článek nezaujal. Ještě zbývá 25 dní,
tak bych zde zmínil několik upřesňujících dotazů a odpovědí:&lt;/div>

&lt;h3>Co přesně je cílem tohoto fandorama článku?&lt;/h3>

&lt;div class='p'>Moje původní představa byla série dvou až tří článků o „slugs killer”,
tedy „autonomním ohnivém mravenci, zabijáku slimáků”. Měl by dělat i další
zahradní práce, ale slimáci trápí i mne a přišlo mi to jako dobře definovaný
cíl. Aby byl i ten „milník”, tak jsme se domluvili na účasti na
&lt;a href='/competitions/fieldrobot/cs'>Field Robot 2014&lt;/a> v kategorii Free Style. Tento
článek měl být první krůček, tj. cca do vánoc rozchodit ovládání robota z PC
(za mne z Pythonu, jak jinak &lt;span class='wink'>&lt;/span> ).&lt;/div>

&lt;h3>Jaké je na robotovi Arduino?&lt;/h3>

&lt;div class='p'>Po pravdě netuším a s Arduinem jsem zatím nikdy nic nedělal. Jestli je něco
na tom čipu napsané, tak už nejsem schopen to přečíst. Podle obrázků to
matchuje na:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://www.orionrobotics.com/The-DaVinci-Arduino-Compatible_p_274.html' class='external'>The
DaVinci Arduino Compatible&lt;/a>, 
&lt;a href='http://downloads.orionrobotics.com/downloads/datasheets/Davinci_R0408.pdf' class='external'>data sheet&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.orionrobotics.com/Orion-Servo-Shield-for-Arduino_p_275.html' class='external'>Orion
Servo Shield for Arduino&lt;/a>,
&lt;a href='http://downloads.orionrobotics.com/downloads/datasheets/Orion_Servo_Shield_R0406.pdf' class='external'>data sheet&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>DaVinci je deska s regulovaným napětím, čipem 32kB Flash, 2kB RAM, 1kB EEPROM.
Servo deska má 32 kanálový ovladač serv, 2x UART, 56kB Flash, 256kB EEPROM,
LEDky a „Speaker”.&lt;/div>

&lt;h3>Co je na robotovi zajímavého?&lt;/h3>

&lt;div class='p'>Asi nejvíce mne zaujala serva. Slibují &lt;i>The Orion Shield also supports
position and force feed back (PPF) using the new Orion Robotics servo
HV-220.&lt;/i>, tj. serva by měla posílat zpět informaci o skutečné poloze a síle,
jak těžko se ta poloha drží. Něco podobného co před lety nabízel
&lt;a href='http://www.megarobot.net/www-megarobot-net/eshop/3-1-Servomotory/0/5/5-DYNAMIXEL-AX-12A' class='external'>megarobot.net&lt;/a>.
Jak to bude fungovat v realitě ale ještě nevím. Minimálně video s nabráním
plechovky s kolou mají pěkné &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>&lt;iframe width="640" height="360" src="//www.youtube.com/embed/mx1pYn0_k5o?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>&lt;/div>

&lt;hr/>

&lt;h2>14. listopad 2013 &amp;mdash; un-depressed&lt;/h2>

&lt;div class='p'>Přiznám se, že jsem předevčírem krabici se stavebnicí robota strčil na hromadu
pod „pracovní stůl” s myšlenkou, že to holt pořeším někdy později, když o to
nikdo nemá zájem :-(.
&lt;a href='http://fandorama.cz/projekty/921778164/fireant-hexapod/' class='external'>Fandorama&lt;/a> mne v
tomto případě zatím spíše demotivovavla než motivovala. Velmi mne tedy potěšil
včerejší příspěvek a zvýšení šance na úspěch. Zbývá zhruba ještě 14 dní tak
uvidíme. Zatím jsem si nainstaloval potřebné prostředí, rozchodil USB driver a
při napájení desky trefil polaritu, takže se ozvalo pípnutí a svítila zelená
LEDka. Na &lt;a href='/guide/blink/cs'>blikání s LEDkou&lt;/a>, tedy můj první test s Arduino
deskou, ale ještě nedošlo.&lt;/div>

&lt;div class='p'>p.s. psal jsem Orion Robotics, co je tam za defaultní firmware a jestli to
vlastně nemá něco dělat „samo od sebe”, ale nedostal jsem ještě žádnou
odpověď &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>21. listopad 2013 &amp;mdash; nohy&lt;/h2>

&lt;div class='p'>Minulý pátek a včera jsem si chvíli hrál na konstruktéra. Byla to celkem
příjemná kompenzace k &lt;a href='/articles/h264-drone-vision/cs'>dekódování videa&lt;/a> &lt;span class='wink'>&lt;/span>.
Přemýšlel jsem, co bych o tom mohl psát a napadaly mne pouze hlášky z filmu
Pelíšky o „naprosto stejné krabičce sirek”. Stavebnice mi totiž hodně
připomínala &lt;a href='http://www.merkurtoys.cz/' class='external'>Merkur&lt;/a>, akorát bych si asi vybral tu
americkou.&lt;/div>

&lt;div class='p'>Člověk si u toho může opakovat angličtinu &amp;mdash; šroubky, matičky, podložky, vše
je baleno po deseti s nálepkami „Screw 3M8”, „Nuts 3M” a pod. V této fázi
jsem udělal snad jenom jednu chybu a to když jsem přehlédl, že vedle šroubků
a matiček 3M tam jsou ješte o trošku menší (2.5M). Nebyla fatální. Prostě to
jen k sobě nešlo &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>První trošku větší zklamání byly 20mm distanční sloupky. Ještě bych rád chvíli
věřil, že to byl záměr, ale &amp;hellip; ty závity jsou fakt mizerné. Šroubek tam
zastrčíte 4mm (tj. půlku velikosti), aniž by jste ho jednou otočili! Jsem
zvědav, co mi na to kapitalisti napíšou. Zatím stačí problémový (bylo jich
špatných asi 5) distanční sloupek otočit &amp;mdash; z jedné strany se totiž přichytává
rovnou ke konstrukci a z druhé přes podložku přidržuje servo (krok 5 v
návodu).&lt;/div>

&lt;div class='p'>Jinak díly jsou moc pěkně udělané a to jak výřezy, tak povrchová úprava. Už teď
je mi skoro „mravence” líto ho pouštět do bahna, ale je to jeho osud. Přes
zeď jsem slyšel &lt;a href='http://www.televize.cz/tv-porady/vasnivy-tanec-84613' class='external'>Vášnivý
tanec&lt;/a>, tak jsem si říkal, že to by mohla být pěkná aplikace &amp;hellip; no jsem
zvědav co ty servo-nohy dokážou.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/legs-step1.jpg'>&lt;img src='/robots/fireant/legs-step1_t.jpg' alt='první krok' title='první krok' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/legs-step1.jpg'>první krok&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/legs-step2.jpg'>&lt;img src='/robots/fireant/legs-step2_t.jpg' alt='druhý krok' title='druhý krok' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/legs-step2.jpg'>druhý krok&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/environment.jpg'>&lt;img src='/robots/fireant/environment_t.jpg' alt='návod' title='návod' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/environment.jpg'>návod&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>26. listopad 2013 &amp;mdash; tělo&lt;/h2>

&lt;div class='p'>Do konce &lt;a href='http://fandorama.cz/projekty/921778164/fireant-hexapod/' class='external'>fandorama
projektu&lt;/a> zbývají 4 dny, tak už zase pomalu začínám pochybovat, že projde. O
víkendu jsem si chvíli stavěl, tak alespoň malá obrázková galerie
odpovídající krokům z návodu &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step08.jpg'>&lt;img src='/robots/fireant/step08_t.jpg' alt='Krok 8' title='Krok 8' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step08.jpg'>Krok 8&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step09.jpg'>&lt;img src='/robots/fireant/step09_t.jpg' alt='Krok 9' title='Krok 9' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step09.jpg'>Krok 9&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step10.jpg'>&lt;img src='/robots/fireant/step10_t.jpg' alt='Krok 10' title='Krok 10' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step10.jpg'>Krok 10&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step11.jpg'>&lt;img src='/robots/fireant/step11_t.jpg' alt='Krok 11' title='Krok 11' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step11.jpg'>Krok 11&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step12.jpg'>&lt;img src='/robots/fireant/step12_t.jpg' alt='Krok 12' title='Krok 12' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step12.jpg'>Krok 12&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step13.jpg'>&lt;img src='/robots/fireant/step13_t.jpg' alt='Krok 13' title='Krok 13' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step13.jpg'>Krok 13&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Opět tam byl drobný problém s distančními sloupky (tentokrát 25mm dlouhými) &amp;mdash;
závit byl u jednoho jenom cca 4mm, tj. šroubek nešel dotáhnout. Robotického
nadšence by to asi nemělo rozhodit, ale u profi stavebnice mne to trošku
mrzelo. A samozřejmě to byl první sloupek, který jsem ten den montoval&amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>29. listopad 2013 &amp;mdash; Fandorama&lt;/h2>

&lt;div class='p'>Nejprve díky třetímu stoupenci, který tento článek podpořil, a já už nemusím
řešit dilema, jak na robotovi pracovat a „netutlat to” &lt;span class='smile'>&lt;/span>. Poprosil bych ho
touto cestou o kontakt &amp;mdash; uvádějte prosím do zprávy pro příjemce svůj mail.
Domluvil bych se pak se všemi co by vás na stavebnici FireAnt nejvíce
zajímalo.&lt;/div>

&lt;div class='p'>Dostali jsme na toto téma zatím dva mailové příspěvky. V prvním mailu byl
nápad, že by podobný mravenec mohl i sbírat kameny (zkusil bych to, ale nevím
do jaké velikosti/váhy to zvládne) a že je velká podobnost stavebnice s tím, co
nabízí &lt;a href='http://www.lynxmotion.com/' class='external'>Lynxmotion&lt;/a>. Jaká je vazba mezi Orion
Robotis a Lynxmotion ale zatím nevím &amp;hellip; nějaké náznaky jsou
&lt;a href='http://forums.orionrobotics.com/topic70-20.html' class='external'>na jejich fóru&lt;/a>.&lt;/div>

&lt;div class='p'>Druhý mail byl spíše k Fandoramě: „Myslím trochu ptákovina (na web jsem se
podíval), poněvadž odpověď na otázku "O jaké články bude největší zájem?" je
víc než nasnadě: O nejlevnější.” Nevím, máte stejný pocit? Mimochodem
&lt;a href='http://fandorama.cz/' class='external'>Fandorama&lt;/a> je k dispozici
&lt;a href='http://fandorama.cz/zapojte-se.html' class='external'>pro všechny&lt;/a> a není ani nutně vázaná
pouze na &lt;a href='http://robotika.cz/' class='external'>http://robotika.cz/&lt;/a> &amp;hellip; i když to tak zatím moc nevypadá &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>p.s. z jiného soudku: pokud by vás zajímaly LEGO robotické stavebnice, tak je
teď (do soboty) celkem pěkná výstava v
&lt;a href='http://www.techlib.cz/cs/636-galerie' class='external'>NTK Galerii v
Praze&lt;/a> &amp;hellip;  &lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/cobra.jpg'>&lt;img src='/robots/fireant/cobra_t.jpg' alt='LEGO Kobra' title='LEGO Kobra' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/cobra.jpg'>LEGO Kobra&lt;/a>
&lt;/td>&lt;/tr>&lt;/table> &amp;hellip; omlouvám se za mizernou fotku z
telefonu. LEGO Kobra se umí plazit a i vás uštknout &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h2>2. prosinec 2013 &amp;mdash; čas BLINKat&lt;/h2>

&lt;div class='p'>Dnes ráno jsem si chtěl na mravencovi vyzkoušet nějaký triviální prográmek.
Příklad BLINK, tedy blikání LEDkou, je rovnou součástí Arduino balíčku. Začít
programování jednočipů tímto příkladem &lt;a href='/guide/blink/cs'>doporučujeme už léta&lt;/a>.
Není to až tak o programu, i když i na něm se člověk naučí nastavit výstupy a
základní časování, jako o rozchození nástrojů.&lt;/div>

&lt;div class='p'>S instalací driveru jsem před časem tročku zápasil (Windows 7, 64bit), ale
nakonec fungoval přímo driver od FTDI (arduino-1.0.1\drivers\FTDI USB Drivers).
Když jsem viděl COM6, tak jsem si myslel, že už mám vyhráno, ale &amp;hellip; nemám.
Zasekl jsem se teď na &lt;i>processing.app.SerialException: Serial port 'COM6'
already in use. Try quiting any programs that may be using it.&lt;/i>, podle
&lt;a href='http://stackoverflow.com/questions/42197/how-do-i-determine-which-process-is-using-a-serial-port' class='external'>doporučení
na StackOverlow&lt;/a> nainstaloval
&lt;a href='http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx' class='external'>Process
Explorer&lt;/a>, zabil Nokia SYNC, Android ADB, ale ještě si netroufl na
iusb3mon.exe, i když ten je možná důvod (???).&lt;/div>

&lt;div class='p'>Večer budu zase raději montovat, to má větší šanci na úspěch &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>3. prosinec 2013 &amp;mdash; ložiska&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step17.jpg'>&lt;img src='/robots/fireant/step17_t.jpg' alt='Krok 17' title='Krok 17' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step17.jpg'>Krok 17&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Dnes jsem reklamní brožury nejprve použil jako výstavku, než jsem se shrnul
pryč z kuchyňského stolu &lt;span class='smile'>&lt;/span>. Je to takový průřez minulých čtrnácti dnů &amp;hellip;&lt;/div>

&lt;div class='p'>Sylvio psal, že je u kroku 31, takže evidentně zaostávám. Když navíc uvážím, že
mne čeká „rozborka &amp; sborka” (ještě nemám baterku a ona má být tak trošku
zabudovaná do těla robota), tak paralelní slalom asi prohraji. No uvidíme, kdo
mravencovi první trhne nohou &lt;span class='wink'>&lt;/span> (ne utrhne nohu).&lt;/div>

&lt;div class='p'>Na rozdíl od programování šla stavba teď celkem pěkně. Mile mne potěšila
ložiska &amp;mdash; původně jsem si myslel, že ty „tablety” jsou nějaké magnety.
Upevňuje se tak druhá strana těla (krok 20 a celkem dost mizerná fotka).&lt;/div>

&lt;div class='p'>Jinak asi nic extra napínavého &amp;hellip; včera jsem si pořídil AKU šroubovák/vrtačku
na dodělání jedné střechy a fakt bych nevěřil, co jsou e-shopy schopný prodávat
:-(. Jedna baterka byla zničena a dopředný chod vůbec nefungoval, jenom zpětný
&amp;hellip; ale to dost odbočuji. Představoval jsem si, že kdyby byl mravenec schopen
tu vrtačku unést, tak by mohl horní část střechy montovat za mne, ha ha ha.
Takový Ferda mravenec, kdyby robotí jméno &lt;a href='/robots/ferda-fatima/cs'>Ferda nebylo
už použito&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step16.jpg'>&lt;img src='/robots/fireant/step16_t.jpg' alt='Krok 16' title='Krok 16' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step16.jpg'>Krok 16&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step18.jpg'>&lt;img src='/robots/fireant/step18_t.jpg' alt='Krok 18' title='Krok 18' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step18.jpg'>Krok 18&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step20.jpg'>&lt;img src='/robots/fireant/step20_t.jpg' alt='Krok 20' title='Krok 20' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step20.jpg'>Krok 20&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step21.jpg'>&lt;img src='/robots/fireant/step21_t.jpg' alt='Krok 21' title='Krok 21' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step21.jpg'>Krok 21&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step23.jpg'>&lt;img src='/robots/fireant/step23_t.jpg' alt='Krok 23' title='Krok 23' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step23.jpg'>Krok 23&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step24.jpg'>&lt;img src='/robots/fireant/step24_t.jpg' alt='Krok 24' title='Krok 24' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step24.jpg'>Krok 24&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>4. prosinec 2013 &amp;mdash; šestinožka&lt;/h2>

&lt;div class='p'>Dostal jsem se včera ke kroku 35 a je to fakt monstrum, které zabírá půlku
pracovního stolu! S montováním klepet a ocasu bych asi počkal, až bude fungovat
základní pohyb.&lt;/div>

&lt;div class='p'>Momentálně se rozhoduji, které baterky a nabíječku, a při té příležitosti jsem
narazil na tento
&lt;a href='http://zentasrobots.com/2013/02/03/the-fireant-hexapod-robot/' class='external'>článek o stavbě
FireAnta&lt;/a>. Když si ho přečtete, tak zjistíte, že „Zenta” je norský autor
návrhu šestinožky
&lt;a href='http://zentasrobots.com/2012/02/08/a-pod-can-be-yours/' class='external'>A-Pod&lt;/a> a
&lt;a href='http://www.lynxmotion.com/c-154-a-pod.aspx' class='external'>Lynxmotion design převzal&lt;/a>
(více detailů je pak na jejich
&lt;a href='http://lynxmotion.net/viewtopic.php?f=8&amp;amp;t=7464' class='external'>fóru&lt;/a>).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step25.jpg'>&lt;img src='/robots/fireant/step25_t.jpg' alt='Krok 25' title='Krok 25' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step25.jpg'>Krok 25&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step26.jpg'>&lt;img src='/robots/fireant/step26_t.jpg' alt='Krok 26' title='Krok 26' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step26.jpg'>Krok 26&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step27.jpg'>&lt;img src='/robots/fireant/step27_t.jpg' alt='Krok 27' title='Krok 27' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step27.jpg'>Krok 27&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step29.jpg'>&lt;img src='/robots/fireant/step29_t.jpg' alt='Krok 29' title='Krok 29' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step29.jpg'>Krok 29&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step35.jpg'>&lt;img src='/robots/fireant/step35_t.jpg' alt='Krok 35' title='Krok 35' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step35.jpg'>Krok 35&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step35b.jpg'>&lt;img src='/robots/fireant/step35b_t.jpg' alt='Krok 35b' title='Krok 35b' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step35b.jpg'>Krok 35b&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>5. prosinec 2013 &amp;mdash; baterka&lt;/h2>

&lt;div class='p'>Tedy přesněji Li-Po akumulátor &amp;hellip; připadám si jako křupan, kterého snadno
oškubou :-(. Zase se mnou trošku cloumá vztek, ale noste si voltmetr do
obchodu?! Je to jak když jsem v pondělí zjistil, že nová AKU vrtačka se točí
jenom v jednom směru a jedna baterka je vadná &amp;hellip; možná bych měl počkat do
rána, až se trošku uklidním, ale to by jste z toho zase nic neměli &lt;span class='wink'>&lt;/span>. Tak
popořádku.&lt;/div>

&lt;div class='p'>První problém byl, jaký akumulátor vůbec pořídit. V návodu není nic. Jediná,
ale asi dost významná nápověda byla u
&lt;a href='http://www.orionrobotics.com/Digital-Servo-HV220_p_302.html' class='external'>specifikace
serv&lt;/a>: &amp;hellip; &lt;i>high voltage (7.4V), digital servo&lt;/i>. LiPo-lky mi doporučil Dan
&amp;hellip; jsou lehčí, ale bacha na vybití! 7.4V znamená 2 články. Podpora na Orion
Robotics mlčela &amp;hellip; měl jsem projít jejich fóra a bylo by &amp;hellip; viz
&lt;a href='http://forums.orionrobotics.com/post196.html#p196' class='external'>poznámka&lt;/a> o
&lt;a href='http://www.hobbyking.com/hobbyking/store/__9459__Turnigy_2200mAh_2S_30C_Lipo_Pack.html' class='external'>HobbyKing
2200mAh 2S 30C LiPo&lt;/a> (dnes mi to potvrdil i Nathan z Orion Robotics).&lt;/div>

&lt;div class='p'>No nic, v mezičase už jsem trošku jiný LiPo akumulátor pořídil (2S, ale 3300mAh
&amp;mdash; snad to FireAnt unese). Pominu-li špatný konektor v prvním pokusu, tak teď,
s novým konektorem a novou nabíječkou &amp;hellip; nic! Ta zkur&amp;hellip; špatná baterka má 6V
a to je už tak málo, že to odmítá nabít (BATTERY CHECK CELL LOW VOL). Supr.
Jsem zvědav, co mi zítra v obchodě řeknou &amp;hellip;&lt;/div>

&lt;ul>
&lt;li>k Arduino desce se vůbec nepřipojím (zatím stále předpokládám chybný
driver).&lt;/li>

&lt;li>primární ovládání ohnivého mravence je přes kabel s PS2 (nemám a neplánuji pořizovat).&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;h2>8. prosinec 2013 &amp;mdash; 8.4V &lt;span class='smile'>&lt;/span>&lt;/h2>

&lt;div class='p'>Jak to dopadlo v pátek v obchodě? Prodavač si vzal nabíječku i s akumulátorem,
na pár sekund místo LiPo nastavil NiMH (jaký proud si nevybavuji) a pak přepnul
zpět na LiPo a už se to v pohodě nabíjelo &lt;span class='smile'>&lt;/span>. Baterka je prý dobrá (po hmatu
je tvrdá) a že jakmile by začala měknout, tak se jí nepokoušet ani nabíjet &amp;mdash;
uvolňují se plyny a mohla by explodovat!&lt;/div>

&lt;div class='p'>V práci jsem jí nechal ještě několik hodin dobíjet. Ano, hodin. Překvapilo mne,
jak dlouho to trvá, ale v závěru nabíjecího cyklu se tam pouští už jenom 0.2A a
je to tedy očekávané. Teď už má baterka 8.4V &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h2>9. prosinec 2013 &amp;mdash; datasheets&lt;/h2>

&lt;div class='p'>Asi je pomalu čas klesnout na dno a začít pěkně od nuly.
&lt;a href='http://www.orionrobotics.com/The-DaVinci-Arduino-Compatible_p_274.html' class='external'>The
DaVinci deska&lt;/a> je „Arduino compatible”, což si teď překládám jako „obsahuje
ATmegaXY” :-(. Mám i pocit, že asociace s názvem Arduino desky
&lt;a href='http://arduino.cc/en/Main/ArduinoBoardLeonardo' class='external'>Leonardo&lt;/a> je
zavádějící. Jedna má ATmega32U4 a druhá ATmega328P. Kdyby nic jiného, tak jedna
má &lt;i>26 general purpose I/O lines&lt;/i> zatímco druhá pouze 23 &amp;hellip;&lt;/div>

&lt;div class='p'>Čemu se dá věřit? Datasheets. Důležitý je jednočip
&lt;a href='http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet.pdf' class='external'>ATmega328P&lt;/a>
a možná se bude hodit i převodník
&lt;a href='http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT232R.pdf' class='external'>FT232RL&lt;/a>.&lt;/div>

&lt;div class='p'>&amp;hellip; o 3 hodiny později &amp;hellip;&lt;/div>

&lt;div class='p'>To jsem teda blázen :-(. Na &lt;i>Arduino drivery&lt;/i> jsem se už vykašlal a šel jsem
přímo po FTDI. Konkrétně je tam &lt;b>VID_0403&amp;amp;PID_A559&lt;/b> &amp;hellip; je to tedy trošku
upravena EEPROMka a „defaultním” FTDI driverům se to nějak bránilo. Pak jsem
četl
&lt;a href='http://www.ftdichip.com/Support/Documents/AppNotes/AN_107_AdvancedDriverOptions_AN_000073.pdf' class='external'>Application
Note 073&lt;/a>, kde píšou: &lt;i>In order that Windows successfully match a device with
the driver, the VID and PID programmed into the device must be listed in the
driver INF file. The following sections of FTDIBUS.INF show text in bold that
must be amended to match the desired VID and PID combination...&lt;/i> &amp;hellip; hm, takže
si sám musím upravovat drivery?! Nejprve jsem to udělal pouze u
&lt;b>ftdiport.inf&lt;/b>, ale to nepomohlo &amp;hellip; ale pak jsem místo instalovat ze
zadaného místa vybral FTDI a novější driver pro sériový port a vznikl COM7.
Hmm, znova problém, že už COM používá někdo jiný. Zabil jsem co se dalo, ale
žádná změna.&lt;/div>

&lt;div class='p'>Zkusil jsem dalši USB port na počítači. Znova COM7, ale &lt;i>This device cannot
start. (Code 10).&lt;/i>. Update driveru z vybraného místa nepomohl, ale vybrat už z
nainstalovaných ano. Před tím jsem ale editoval jak &lt;b>ftdiport.inf&lt;/b> tak
&lt;b>ftdibus.inf&lt;/b> a smazal všechny ostatní záznamy: &lt;i>When changing FTDIBUS.INF
to match a new VID and PID combination, all references to these default values
must be removed from the file.&lt;/i>.&lt;/div>

&lt;div class='p'>Další změnu, kterou jsem provedl, byl způsob puštění &lt;b>arduino.exe&lt;/b>. Mám
namapovaný disk a začínám mít velké podezření, že si s tím nějak neporadí.&lt;/div>

&lt;div class='p'>Vznikl COM8 &amp;mdash; šel otevřít a deska začala pípat (stejně jako po resetu). To je
dobrá zpráva!&lt;/div>

&lt;pre>Binary sketch size: 4,826 bytes (of a 28,672 byte maximum)
processing.app.debug.RunnerException: Couldn’t find a Leonardo on the selected port. 
Check that you have the correct port selected.  If it is correct,
try pressing the board's reset button after initiating the upload.
	at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:153)
	at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:67)
	at processing.app.Sketch.upload(Sketch.java:1671)
	at processing.app.Sketch.exportApplet(Sketch.java:1627)
	at processing.app.Sketch.exportApplet(Sketch.java:1599)
	at processing.app.Editor$DefaultExportHandler.run(Editor.java:2380)
	at java.lang.Thread.run(Thread.java:619)&lt;/pre>

&lt;div class='p'>Reset vypadá, že ovládá přímo přes USB (mimochodem je dost nepřístupný,
schovaný pod servo-deskou), takže předpokládám „non-Leonardo” problém.&lt;/div>

&lt;pre>Binary sketch size: 4,826 bytes (of a 28,672 byte maximum)
processing.app.debug.RunnerException: Serial port 'COM8' already in use.
Try quitting any programs that may be using it.
	at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:158)
	at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:67)
	at processing.app.Sketch.upload(Sketch.java:1671)
	at processing.app.Sketch.exportApplet(Sketch.java:1627)
	at processing.app.Sketch.exportApplet(Sketch.java:1599)
	at processing.app.Editor$DefaultExportHandler.run(Editor.java:2380)
	at java.lang.Thread.run(Thread.java:619)&lt;/pre>

&lt;div class='p'>Supr :-( &amp;hellip;toto se mi podařilo, když jsem zkoušel RST tlačítko na servo-desce
&amp;hellip; je čas jít do práce &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>10. prosinec 2013 &amp;mdash; Duemilanove&lt;/h2>

&lt;div class='p'>Severní pól je dobyt! (a ta potvora naprogramována) &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Pokud si myslíte, jako já před pár dny, že „Leonardo” má cokoliv společného s
„DaVinci” tak se šeredně pletete. Nemá. Co tedy odpovídá DaVinci řídící
desce, v rámci „Arduino kompatibility”, jsem nakonec zjišťoval podle
použitého čipu ATmega328P. Vzal jsem to od shora a první na to seděla deska
„Duemilanove” a šla naprogramovat s příkladem
&lt;b>arduino-1.0.5\examples\01.Basics\Blink\Blink.ino&lt;/b> &lt;span class='smile'>&lt;/span>. To by vypadalo jako
dobrá zpráva, ale LEDka neblikala a deska přestala i pípat. S tím jsem včera
ráno končil.&lt;/div>

&lt;div class='p'>Večer jsem zkusil jiný příklad: &lt;b>02.Digital\toneMelody&lt;/b>, kde jsem změnil
výstupní pin na 3 (původně tam byl myslím 8) a deska začala pípat. Hurá! &lt;span class='smile'>&lt;/span>
Další krok byl &lt;b>03.Analog\AnalogInOutSerial&lt;/b>, kde jsem změnil vstupní
analogový pin na A2, který by podle
&lt;a href='http://downloads.orionrobotics.com/downloads/datasheets/Orion_Servo_Shield_R0406.pdf' class='external'>Orion_Servo_Shield_R0406.pdf&lt;/a>
měl měřit napětí na baterce. Na straně PCčka jsem otevřel putty terminál na
COM8, 9600 a začal chrlit:&lt;/div>

&lt;pre>sensor = 377     output = 93
sensor = 377     output = 93
sensor = 377     output = 93
sensor = 376     output = 93
&amp;hellip;&lt;/pre>

&lt;div class='p'>Na řadě jsou teď znova LEDky a tlačítka. Jestli jsem dosavadní prográmky
pochopil, tak digitální piny se číslují přímo a analogové zprostředkovaně přes
define A0, A1, &amp;hellip; Ještě je tu jemná schizofrenie propojení dvou desek (DaVinci
a ServoShield), kde schéma zapojení mám pouze u jedné.&lt;/div>

&lt;div class='p'>p.s. ještě jsem se pokusil vrátit na desku původní firmware (support se podle
mne mýlil a deska &lt;b>byla&lt;/b> předprogramovaná na ovládání kabelem pomocí herní
konzole PS2). Zdrojáky jsou ke stažení z
&lt;a href='http://www.orionrobotics.com/FireAnt-Hexapod-Robot_p_248.html' class='external'>FireAnt
stránky&lt;/a>, ale nešly mi zkompilovat. Chyběly Arduino knihovny, které bylo třeba
buď jednotlivě naimportovat, nebo snáze rovnou nakopírovat do adresáře
&lt;b>arduino-1.0.5\libraries&lt;/b>.&lt;/div>

&lt;hr/>

&lt;h2>11. prosinec 2013 &amp;mdash; první pohyb&lt;/h2>

&lt;div class='p'>Včera večer se mravenec (Fourmis de Feux) konečně pohnul &lt;span class='smile'>&lt;/span>. K prvnímu kroku
to má ještě daleko, ale nějak se začít musí. Rozchodil jsem si příklad s
LEDkama &lt;b>01.Basics\Blink&lt;/b> (analogový pin A0 je červená a A1 zelená), pak s
tlačítkama &lt;b>02.Digital\Button&lt;/b> (digitální piny 2 a 4) a pak si troufl to
zkombinovat se servem.  Jak to dopadlo je vidět
&lt;a href='http://youtu.be/WHcRPUhbKvs' class='external'>na tomto hodně mizerném videu&lt;/a>. Zem (černý
kabel) musí být na vnější straně desky a čísla Arduino pinu jsou tam přímo
napsaná (použil jsem pin 10).&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/first-movement.jpg'>&lt;img src='/robots/fireant/first-movement_t.jpg' alt='zapojení' title='zapojení' class='border'  width='165' height='220'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/first-movement.jpg'>zapojení&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Pokud by vás zajímal i ten dost triviální zdroják, tak jsem to dal rovnou na
&lt;a href='https://github.com/robotika/fireant/commit/8db3e778476a256d5f71ce8fe71f8b20686ab9fd' class='external'>github&lt;/a>.&lt;/div>

&lt;div class='p'>Třída &lt;b>BMServo&lt;/b> je
&lt;a href='http://downloads.orionrobotics.com/downloads/code/arduino.zip' class='external'>v balíčku ke
stažení&lt;/a> od Orion Robotics. Klasicky jsem se trošku bál, co se stane, když tam
pošlu 0 a jaké jednotky to vůbec má, ale vypadá to, že
&lt;i>servo.setAngle(value,time)&lt;/i> nastavuje znaménkový úhel v desetinách stupně, 0
je střed a čas je v milisekundách.&lt;/div>

&lt;div class='p'>Ve zdrojovém kódu &lt;i>BMServo&lt;/i> jsem našel i funkce &lt;i>queryFBAngle()&lt;/i> a jiném
příkladu &lt;i>queryForce()&lt;/i>, ale ta je k dispozici přes SPI pouze u Servo Shield
desky. To jsem vlastně ještě nepsal &amp;mdash; ovládat lze 32 serv s tím, že 8 je
prodrátovaných/přímo řízených z DaVinci desky a zbylých 24 přes SPI komunikaci
přímo na servo desce. Tam jsem ale zdrojový kód zatím nenašel a možná ani není
veřejně k dispozici.&lt;/div>

&lt;div class='p'>Ještě mne včera trošku uvedl do reality Jirka: &lt;i>,,Arduino compatible''
znamená, že má stejně rozmístěné piny, takže na to můžeš nasadit různé arduino
shieldy. Co se procesoru týče, nejsou stejná ani dvě opravdová arduina&lt;/i> &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;h2>12. prosinec 2013 &amp;mdash; BMServo vs. SPI&lt;/h2>

&lt;div class='p'>Dnes ráno jsem zkoušel ovládat servo přes SPI a zatím dost tápu :-(. U BMServo
to bylo jednoduché:&lt;/div>

&lt;pre>BMServo servo( ARDUINO_SERVO_PIN );
servo.begin();
&amp;hellip;
  servo.setAngle( angle, 1000 );
  servo.update();&lt;/pre>

&lt;div class='p'>U SPI se komunikuje přes Orion knihovnu a skoro to vypadá, že už je tam nějak
předprogramované to chození? (nebo se mi deska stále resetuje a proto se to
samo cyklí, ale to bych „slyšel” &amp;mdash; mám tam na začátku pípnutí). Jelikož se
ovládá hodně serv současně, tak &lt;b>Orion.setAngle()&lt;/b> je pouze nastavovací a
teprve &lt;b>Orion.execute()&lt;/b> něco dělá. Nějakou roli tam ještě určitě hraje
&lt;b>Orion.time(ms)&lt;/b>, ale zatím nevím jakou.&lt;/div>

&lt;pre>Orion.begin(); 
Orion.tone(NOTE_C6,100); 
Orion.setAngle( SPI_SERVO_PIN, angle );
Orion.setServoMin( SPI_SERVO_PIN, -900 );
Orion.setServoMax( SPI_SERVO_PIN, 900 );
&amp;hellip;
  Orion.setTime( 100 );
  Orion.setAngle( SPI_SERVO_PIN, 900 ); // nebo -900
  Orion.execute();&lt;/pre>

&lt;div class='p'>OK, tak teď jsem to už snad pochopil. Ten &lt;b>Orion.setTime(ms)&lt;/b> je to samé jako
&lt;i>time&lt;/i> parametr u &lt;b>servo.setAngle(angle, time)&lt;/b>, tj. jak rychle do
požadované polohy má přejít &amp;hellip; jen je to stejný parametr pro všech 24 serv.
Když jsem ten čas totiž změnil na 1000 (1s), tak se to začalo chovat rozumně
a ano, resetuje se mi deska &amp;hellip; jedu ze slabého zdroje. Chcete-li detaily, tak
viz
&lt;a href='https://github.com/robotika/fireant/blob/68d6ff136f8ea8409fa6630ba02322e1f08112a5/servo_test/servo_test.ino' class='external'>servo_test.ino&lt;/a>.&lt;/div>

&lt;hr/>

&lt;h2>13. prosinec 2013 &amp;mdash; teleoperation&lt;/h2>

&lt;div class='p'>&amp;hellip; aneb každý den není posvícení. Sigh. Dnes jsem chtěl vyzkoušet jednoduchý
příklad se zpětnou vazbou na servech. Jedno servo by bylo jako vstup a druhé
jako výstup. Na cvičení jsme před mnoha lety zadávali podobný úkol &amp;mdash; zapojte
potenciometr a servo + naprogramujte jednočip tak, že otáčení potenciometrem se
bude otáčet i to servo. Spousty zábavy s touto „teleoperací” &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Orion serva mají zpětnou vazbu, resp. předpokládám, že je tam možnost přečíst
právě aktuální odpor na referenčním potenciometru (v servu). Klíčová je tato
řádka:&lt;/div>

&lt;pre>Orion.setAngle( OUT_SERVO_PIN, Orion.queryFBAngle( IN_SERVO_PIN ) );&lt;/pre>

&lt;div class='p'>tj. aktuální polohu IN serva předej jako požadavek na OUT servo. Celý kód pak
najdete na
&lt;a href='https://github.com/robotika/fireant/blob/master/teleoperation/teleoperation.ino' class='external'>githubu&lt;/a>.
Zkusil jsem to na přední packy a zvedáním jedné druhá šla dolu &lt;span class='smile'>&lt;/span>. To je
vlastně očekávané chování, protože serva jsou symetrická.&lt;/div>

&lt;div class='p'>Druhý pokus byla první a druhá noha na stejné straně robota. A bang - servo šlo
do extrému, bouchlo do konstrukce a vůbec to nevypadalo pěkně. Tak jsem si
přidal do kódu LEDky, tlačítko a „pseudo-kalibrační” rutinu &amp;hellip; a výsledek?
LEDky svítí, přepnou se po kalibraci, ale už to nedělá vůbec nic :-(. Dokonce i
když jsem kalibraci zrušil a vypnul/zapnul desku, tak stále nic. Celkem dobrá
předehra k pátku 13 &amp;hellip; &lt;span class='smile'>&lt;/span>. Dnes tedy žádné video.&lt;/div>

&lt;hr/>

&lt;h2>14. prosinec 2013 &amp;mdash; Orion.queryFBAngle()&lt;/h2>

&lt;div class='p'>Kalibrační proceduru jsem ještě nerozchodil, ale o malý kousek jsem se zase
posunul dál. Už tuším, proč se včera servo chovalo tak agresivně! Přidal jsem
do kódu &lt;i>Orion.setServoMin()&lt;/i> a &lt;i>Orion.setServoMax()&lt;/i>, což možná byl důvod
proč se servo předtím nehýbalo vůbec, a hlavně jsem přidal podmínku na povolený
úhel, který mi vrací &lt;i>Orion.queryFBAngle()&lt;/i>. Detaily změn najdete
&lt;a href='https://github.com/robotika/fireant/commit/e9b765f726113222195c710aa496ae09df54d497' class='external'>zde&lt;/a>.&lt;/div>

&lt;div class='p'>Pokud byly úhly nějaké podezřelé, tak jsem si je nechal vypisovat na konzoli
(přes USB-serial) a po resetu jsem typicky dostal tento výstup:&lt;/div>

&lt;pre>TeleOperation test &amp;hellip;
                      -1704
-1704
-1704
-1704
-1704&lt;/pre>

&lt;div class='p'>a na rovinu, úhel -170 stupňů snad to servo ani nedá a pokud dá, tak je to hodně
extrémní poloha.&lt;/div>

&lt;div class='p'>Pokusil jsem se i natočit, co že to vlastně dělám, ale kamera je vybitá a s tím
foťákem v temném koutku &amp;hellip; ostatně &lt;a href='http://youtu.be/fnvsRc8-onw' class='external'>uvidíte
sami&lt;/a>. Asi nejvtipnější na tom pár sekundovém snímku je, jak mi nejde
zapnout napájení &amp;mdash; v jedné ruce foťák a tou druhou to nějak nešlo &lt;span class='wink'>&lt;/span>. No
nic, pro představu to snad stačí.&lt;/div>

&lt;hr/>

&lt;h2>16. prosinec 2013 &amp;mdash; Kosinova věta&lt;/h2>

&lt;div class='p'>Lomikare, Lomikare &amp;hellip; aneb už došlo na středoškolskou matematiku. Včera jsem
si celkem dlouho hrál s 3-DOF nohou. Naprogramoval jsem si jednoduchou
komunikaci Pyhon-Arduino a při tom přemýšlel, jak někteří dokáží takové věci
dělat bez testů a bez logování. Je to jak stavět barák bez lešení. Nějaké
problémy? Hned několik.&lt;/div>

&lt;h3>Komunikační protokol a logování&lt;/h3>

&lt;div class='p'>Protokol jsem si vymyslel celkem jednoduchý &amp;mdash; nechtělo se mi pouštět v této
fázi do složitější struktury s kontrolním součtem, ale možná to byla chyba.
Úhly v desetinách stupně jsem si zjednodušil na stupně a bajt beru znaménkově,
tj. teoreticky jsou možné úhly -128 až 127 stupňů. Zúžil jsem to ještě na -120
až 120 a získal tak „řídící bajty”:&lt;/div>

&lt;pre>const unsigned char START_BLOCK = 0x80;
const unsigned char END_BLOCK = 0x81;
const unsigned char STOP_SERVO = 0x82;
const unsigned char SERVO_OUT_OF_RANGE = 0x83;&lt;/pre>

&lt;div class='p'>Arduino pošle &lt;i>START_BLOCK&lt;/i>, pak stavy jednotlivých serv a ukončí paket
&lt;i>END_BLOCK&lt;/i>. Python na to odpoví &lt;i>START_BLOCK&lt;/i>, příkazy pro jednotlivá
serva a &lt;i>END_BLOCK&lt;/i>. Nesymetrické jsou &lt;i>STOP_SERVO&lt;/i> a
&lt;i>SERVO_OUT_OF_RANGE&lt;/i> a samozřejmě, že jsem v tom udělal chybu (na jednom
místě je omylem prohodil, když jsem rutinu z Python přepisoval do Céčka). Pokud
je poloha serva třeba 130 stuňů, tak aby seděly jednotlivé pozice se posílá
&lt;i>SERVO_OUT_OF_RANGE&lt;/i>. A naopak když Python neví, do jaké polohy servo poslat,
tak &lt;i>STOP_SERVO&lt;/i> vypíná generování pulzů.&lt;/div>

&lt;div class='p'>A kde pomohl log &lt;b>fa131215_124600.log&lt;/b>? Z Arduina mi chodilo nějak málo serv.
Chyba byla v
&lt;a href='https://github.com/robotika/fireant/commit/6da6c31a45fca3f7411a5be5a89af83b581849c3' class='external'>typu
pole s čísly pinu&lt;/a>, který není int, ale char.&lt;/div>

&lt;h3>Chyba ve firmware Servo Shield??&lt;/h3>

&lt;div class='p'>Teď zpětně si vybavuji, že mi serva zlobila od začátku, ale nezdokumentoval
jsem to hned a teď už jen tápu. Při prvních pokusech to byla určitě chyba
záměny &lt;i>STOP_SERVO&lt;/i> a &lt;i>SERVO_OUT_OF_RANGE&lt;/i>, kdy šlo servo do polohy -126
stupňů, ale pak to zlobilo i když jsem posílal přímo konkrétní pozice.&lt;/div>

&lt;div class='p'>Po opravě jsem ale dostával stále podobnou chybu (teď si myslím, že šlo servo
do druhého extrému). Spíše ze zoufalství jsem odstranil nastavovací cyklus v
setup():&lt;/div>

&lt;pre>/*  int i;
  for( i = 0; i &lt; NUM_SERVOS; i++ )
  { 
    Orion.stopPulse( servoPins[i] ); // it is by default, but this way it is more clear
    Orion.setServoMin( servoPins[i], SERVO_MIN );
    Orion.setServoMax( servoPins[i], SERVO_MAX );
  }*/&lt;/pre>

&lt;div class='p'>a ono to začalo fungovat správně!!! Mám teorii, že to šlo do polohy zadané přes
&lt;i>Orion.setServoMax()&lt;/i>, ale více jsem to nezkoumal. Zatím. Při sepisování, co
se vše včera dělo, mi teď došla ještě jedna věc &amp;mdash; když nastavíte požadovanou
polohu serva, tak nastavujete i za jak dlouho tu polohu má dosáhnout. Prima,
ale co když je předešlá poloha nedefinovaná? Nebo co když zadáte čas nula?
Možná získáme nějaké informace
&lt;a href='http://forums.orionrobotics.com/post253.html#p253' class='external'>na fóru&lt;/a>.&lt;/div>

&lt;div class='p'>Čas se pomalu naplnil, tak Kozinovu větu vám nechám za domácí úkol &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>P.S. Zdrojáky na toto téma jsou na
&lt;a href='https://github.com/robotika/fireant/tree/master/serial_servo' class='external'>obvyklém
místě&lt;/a>.&lt;/div>

&lt;hr/>

&lt;h2>17. prosinec 2013 &amp;mdash; Piano&lt;/h2>

&lt;div class='p'>Opět tuším, že cíl je v nedohlednu, tak zase „verze 0”. Mělo to být
překvapení, ale než bych to pořádně rozchodil, tak už bude nutné dělat něco
&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/piano.jpg'>&lt;img src='/robots/fireant/piano_t.jpg' alt='FireAnt a Piano' title='FireAnt a Piano' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/piano.jpg'>FireAnt a Piano&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
jiného (třeba vánoční úklid).&lt;/div>

&lt;div class='p'>Malé testovací prográmky pro Arduino většinou začínají pípnutím. Je to dobrá
indikace, že se deska resetovala, i když se člověk zrovna nedíval. Podle volby
tónu si můžete rozlišit i programy: pokud si nejste 100% jistý, že máte nahraný
nejnovější kód, tak změníte úvodní tón.&lt;/div>

&lt;div class='p'>O tohoto pípání už byl jen malý myšlenkový krůček k „pípání na piánu”, na
které jsem v pre-historii hrával. Je to pěkný milník na otestování transformace
XYZ do prostoru úhlů serv a jak moc to funguje snadno posoudí každý &lt;span class='wink'>&lt;/span>. Co
přesně měl mravenec zahrát si ještě nechám pro případ, kdybych to opravdu někdy
dotáhl, ale první lekci bych zveřejnil, ať z toho také něco máte. Video je
tedy &lt;a href='http://www.youtube.com/watch?v=i8g5AYCkGmE' class='external'>zde&lt;/a>.&lt;/div>

&lt;div class='p'>P.S. pokud nemáte čas a chcete rovnou výsledek, tak
&lt;a href='http://youtu.be/ayKpSHs_gz4' class='external'>Veselé vánoce&lt;/a> &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;h2>19. prosinec 2013 &amp;mdash; Ocas a klepeta&lt;/h2>

&lt;div class='p'>Dnes zase jen obrázkově &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step38.jpg'>&lt;img src='/robots/fireant/step38_t.jpg' alt='Krok 38' title='Krok 38' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step38.jpg'>Krok 38&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step39.jpg'>&lt;img src='/robots/fireant/step39_t.jpg' alt='Krok 39' title='Krok 39' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step39.jpg'>Krok 39&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step43.jpg'>&lt;img src='/robots/fireant/step43_t.jpg' alt='Krok 43' title='Krok 43' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step43.jpg'>Krok 43&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step44.jpg'>&lt;img src='/robots/fireant/step44_t.jpg' alt='Krok 44' title='Krok 44' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step44.jpg'>Krok 44&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step45.jpg'>&lt;img src='/robots/fireant/step45_t.jpg' alt='Krok 45' title='Krok 45' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step45.jpg'>Krok 45&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step46.jpg'>&lt;img src='/robots/fireant/step46_t.jpg' alt='Krok 46' title='Krok 46' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step46.jpg'>Krok 46&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step47.jpg'>&lt;img src='/robots/fireant/step47_t.jpg' alt='Krok 47' title='Krok 47' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step47.jpg'>Krok 47&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step48.jpg'>&lt;img src='/robots/fireant/step48_t.jpg' alt='Krok 48' title='Krok 48' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step48.jpg'>Krok 48&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/step49.jpg'>&lt;img src='/robots/fireant/step49_t.jpg' alt='Krok 49' title='Krok 49' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/step49.jpg'>Krok 49&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>21. prosinec 2013 &amp;mdash; Force&lt;/h2>

&lt;div class='p'>Občas je skleróza výhodou (opětovné sledování filmů, čtení knížek a pod.), ale
v programování robotů to u mne mnohdy vede ke vzteku. Je pravda, že
nalezení opakovaných chyb je snazší, ale &amp;hellip; a taky by nebylo o čem psát, kdyby
hned vše fungovalo, že je to tak? &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>Hraji si teď s analýzou hodnot získaných pomocí dotazu &lt;i>queryForce()&lt;/i>. Mělo
by z toho být (zatím teoreticky) poznat, zda je noha robota ve vzduchu, jak moc
je zatížená a pod. Přešel jsem tedy na jednoduchou komunikaci s posíláním
stavové a příkazové struktury &amp;mdash; používal jsem to např. na
&lt;a href='/articles/atmega8-board/cs'>ATmega8 board&lt;/a> nebo u robota
&lt;a href='/robots/daisy/cs'>Daisy&lt;/a>.&lt;/div>

&lt;div class='p'>A na co jsem za ta léta už zapomněl? Proč nemám rád 16bitová čísla a makra.
Postupné rozcházení komunikace jsem si ale celkem užil, tak heslovitě zopakuji.
Třeba to také někdo někdy použije:&lt;/div>

&lt;div class='p'>Nejprve jsem naprogramoval mravence, aby posílal &lt;i>RobotStatus&lt;/i> strukturu,
včetně kontrolního součtu (jenom triviální součet bajtů aby celkově to vyšlo
0). Na straně PC jsem si v Pythonu jenom napsal for-cyklus:&lt;/div>

&lt;pre>for i in xrange(1000):
    com.read(1)&lt;/pre>

&lt;div class='p'>&amp;hellip; prostě přečti prvních 1000 bajtů a nic víc. &lt;b>com&lt;/b> je logovaný COM port.&lt;/div>

&lt;div class='p'>V druhém kroku jsem ladil část na PC, tj. přehrával jsem si log dokud, neseděl
kontrolní součet a výsledná čísla nedávala alespoň trošku smysl.&lt;/div>

&lt;div class='p'>Ve třetím kroku mravenec pošle data, ale čeká na příkazovou strukturu. Pokud
nesedí velikost nebo kontrolní součet, tak rozsvítí červenou LEDku a pípá. Na
straně PC se zase snažím rozchodit posílání struktury, dokud mravenec
nepřestane pípat. Přijatá data jsou na robotovi pouze parsovaná, ale jinak je
ignoruji.&lt;/div>

&lt;div class='p'>V posledním, čtvrtém, kroku data na robotovi i provádím. Kontrolní součty a
packety by v té době už měly sedět v obou směrech a data dávat celkem smysl
&amp;hellip;&lt;/div>

&lt;div class='p'>Tak kde se to zadrhlo? No vypadalo to pěkně, až do okamžiku než jsem provedl
čtvrtý krok. Noha sebou zuřivě cukla a vypínač byl naštěstí po ruce. Důvod?
Indiáni. Byl jsem líný a na straně robota přečetl celou strukturu jako blok
bajtů, ale při odesílání indiány (tedy pořadí bajtů u 16ti bitových čísel)
dělal ručně. A špatně.&lt;/div>

&lt;div class='p'>Po přepsání mi ale zase přestal fungovat kontrolní součet. Důvodem bylo
lajdácky napsané makro (možná ho asi ještě vyhodím):&lt;/div>

&lt;pre>#define SEND_WITH_CHECKSUM(X) { Serial.write( (X) ); tmpSum += (X); }&lt;/pre>

&lt;div class='p'>&amp;hellip; jo, vyhodím. Prostě jsem byl dříve líný vypisovat jednotlivé části ve
struktuře a updateovat tmpSum &amp;hellip; a ty složené závorky tam nebyly, takže ve
for-cyklu, to tu proměnnou aktualizovalo pouze jednou.&lt;/div>

&lt;div class='p'>A nějaké výsledky? No zatím je to takové temné. Když se nic neděje, tak je
návratová hodnota pro &lt;i>queryForce( číslo pinu )&lt;/i> 30000 nebo -30000. Pokud ale
pohybuji byť jedním servem, tak se mění čísla u všech:&lt;/div>

&lt;pre>m:\git\fireant\force_test>force_test.py logs/fa131221_130511.log
ReplyLog logs/fa131221_130511.log
(8668, 820, 2587, 30000, -1253, -30000, -1464, -30000)
(39156, 820, 2587, 30000, -309, -30000, -1464, 2465)
(2764, 820, 770, -8540, -309, -11147, 94, -15895)
(33120, 820, 770, -8469, -309, -11036, 93, 10878)
(62240, 820, 770, -8503, -309, -11061, 93, 6627)
(30788, 820, 770, -8512, -307, -10971, 93, -9356)
(57476, 820, 770, -8480, -309, -11078, 93, -2126)
(24608, 820, 770, -8640, -309, -11007, 53, 1558)
(51440, 820, 771, -8497, -309, -10944, 14, 878)
(19980, 820, 770, -9693, -307, -11002, 5, 574)
(47964, 820, 770, -9012, -309, -11010, 0, 307)
(13856, 820, 770, -8835, -309, -11032, 0, 112)
(43004, 820, 770, -8633, -309, -11138, 0, 58)
(10160, 820, 770, -8521, -309, -11194, 0, 25)
(37192, 820, 770, -8439, -309, -11073, 0, 1)
(5500, 820, 770, -8403, -307, -11104, 0, 7)
(32176, 820, 770, -8400, -307, -11127, 0, -2)
&amp;hellip;&lt;/pre>

&lt;div class='p'>Vysvětlivka k výpisu &amp;mdash; čas, napětí baterky (8.2V), pozice serva1, síla
serva1, pozice serva2, síla serva2, pozice serva3, síla serva3. Příkaz byl
nechat servo1 a servo2 být a posunout servo3 do polohy 0.&lt;/div>

&lt;div class='p'>P.S. to makro jsem
&lt;a href='https://github.com/robotika/fireant/commit/82bd72752f09b5b604e2a50317483a92daebeacd' class='external'>dal
pryč&lt;/a>. Jinak zdrojový kód k těmto pokusům najdete na
&lt;a href='https://github.com/robotika/fireant' class='external'>githubu&lt;/a> v adresáři
&lt;a href='https://github.com/robotika/fireant/tree/master/force_test' class='external'>force_test&lt;/a>.&lt;/div>

&lt;div class='p'>P.P.S.S. „Rolničky”&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/servo-position-graph1.png'>&lt;img src='/robots/fireant/servo-position-graph1_t.png' alt='ServoAngle' title='ServoAngle' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/servo-position-graph1.png'>ServoAngle&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/servo-force-graph1.png'>&lt;img src='/robots/fireant/servo-force-graph1_t.png' alt='ServoForce' title='ServoForce' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/servo-force-graph1.png'>ServoForce&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/servo-force-graph1-detail.png'>&lt;img src='/robots/fireant/servo-force-graph1-detail_t.png' alt='Force detail' title='Force detail' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/servo-force-graph1-detail.png'>Force detail&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>23. prosinec 2013 &amp;mdash; MIDI&lt;/h2>

&lt;div class='p'>Asi bych svoji bývalou profesorku na klavír moc nepotěšil, kdybych jí řekl, že
teď elektronické piáno používám na testování chodících robotů &amp;hellip; po pravdě ani
mne by to dříve nenapadlo, ale ono se to samo nabízí. Vedle testování
správné polohy, jde testovat „sílu úderu” a celkové časování. A není to jen
slyšet, je to i možné vidět v číslech. Jak? Pomocí MIDI.&lt;/div>

&lt;div class='p'>MIDI je zkratka za Musical Instrument Digital Interface. Je to cesta, jak si
předávat informace mezi elektronickými nástroji. „Shodou okolností” (tenkrát
to byl jeden z mých požadavků, aby to piáno MIDI mělo a mohlo se spojit s Atari
ST 1040 &lt;span class='smile'>&lt;/span> ) MIDI výstup mám a cca před půl rokem jsem si koupil i MIDI-USB
převodník. Původní motivace byla zkusit dodělat nějaký hudební doprovod k němým
filmům z AD Drone 2, ale znáte to. Snad jednou.&lt;/div>

&lt;div class='p'>HW tedy je. Co SW? Zeptal jsem se Google na „Python MIDI” a mezi
&lt;a href='https://wiki.python.org/moin/PythonInMusic' class='external'>spoustou odkazů&lt;/a> byl i náš
oblíbený &lt;a href='http://pygame.org/' class='external'>pygame&lt;/a> rovnou s
&lt;a href='http://www.pygame.org/docs/ref/examples.html#pygame.examples.midi.main' class='external'>MIDI
příkladem&lt;/a>:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 610px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/robots/fireant/pygame-keyboard.png' alt='pygame piáno' title='pygame piáno' class='border'  width='604' height='198'/>&lt;/span>&lt;br/>
&lt;span>pygame piáno&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Příklad nabízí tři možnosti:&lt;/div>

&lt;ul>
&lt;li>výstup na MIDI zařízení&lt;/li>

&lt;li>logování vstupu z MIDI zařízení&lt;/li>

&lt;li>výpis MIDI zařízení&lt;/li>
&lt;/ul>

&lt;div class='p'>Další téma ke studiu tedy je dekódování, co přesně:&lt;/div>

&lt;pre>&amp;lt;Event(34-Unknown {'status': 144, 'vice_id': 1, 'timestamp': 13878, 'data1': 52,
 'data3': 0, 'data2': 0})&amp;gt;
&amp;lt;Event(34-Unknown {'status': 144, 'vice_id': 1, 'timestamp': 14148, 'data1': 55,
 'data3': 0, 'data2': 39})&amp;gt;
&amp;lt;Event(34-Unknown {'status': 144, 'vice_id': 1, 'timestamp': 14477, 'data1': 55,
 'data3': 0, 'data2': 0})&amp;gt;
&amp;lt;Event(34-Unknown {'status': 144, 'vice_id': 1, 'timestamp': 14552, 'data1': 53,
 'data3': 0, 'data2': 50})&amp;gt;
&amp;lt;Event(34-Unknown {'status': 144, 'vice_id': 1, 'timestamp': 15153, 'data1': 53,
 'data3': 0, 'data2': 0})&amp;gt;&lt;/pre>

&lt;div class='p'>znamená &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;h2>8. leden 2014 &amp;mdash; Nevěř holka chlapci nevěř&lt;/h2>

&lt;div class='p'>&amp;hellip; na &lt;a href='http://arduino.cc/en/reference/micros' class='external'>micros()&lt;/a> časy neměř, uint16_t
ti přeteče, robot ti uteče bude tasku konec, uint16_t ti přeteče, robot ti
uteče bude tasku konec.&lt;/div>

&lt;div class='p'>Během offline, robot-free dovolené jsem si jen tak bloumal, jak to vychází s
časováním. Serva běží na 50Hz, kdy v 20ms „oknech” robot posílá zhruba 1.5ms
pulzy (viz &lt;a href='/guide/servo/cs'>řízení serva&lt;/a>), tj. nemá smysl rychleji posílat
příkazy ani se ptát na polohu/sílu. Na druhou stranu komunikaci jsem měl na
9600 baud, jeden start bit a jeden stop bit, tj. za sekundu pošle max 960 bajtů
a za 20ms zhruba 19 bajtů. Časy při přehrávání logu vypadaly takto:&lt;/div>

&lt;pre>(11220, 818, 946, -98, -286, 592, -228, -7)
(42852, 818, 944, -98, -286, 286, -228, 1)
(6364, 818, 944, -96, -286, 193, -228, 0)
(37776, 818, 944, -92, -286, 145, -228, 0)&lt;/pre>

&lt;div class='p'>První číslo je v microsekundách a na první pohled vše vypadalo OK, tj.
přetečení po 65ms (dvoubajtový int, tj. 65535), perioda zhruba 30ms (42-11 nebo
37-6). Pěkné, není-liž pravda? Jak naznačilo „střevo” v úvodním odstavečku &amp;mdash;
chyba lávky. V realitě je to jinak. Nějak mi to nedošlo. Jen struktura
RobotStatus má 19 bajtů a RobotCmd &lt;strike>12&lt;/strike> 15 bajtů a jelikož zatím nevysílám a
nepřijímám současně tak už ani toto by se za 30ms nemohlo stihnout.&lt;/div>

&lt;div class='p'>Funkce &lt;a href='http://arduino.cc/en/reference/micros' class='external'>micros()&lt;/a> vrací long int a
nikomu nevadilo, když jsem ho rval do uint16_t. Když jsem zvýšil komunikační
rychlost 4x na 38400, tak chvílemi začal čas jít pozpátku. Divné co? (pak že se
nedá otočit směr času &amp;hellip; stačí jen změnit vzorkování) Jasnější to asi bude z
obrázku, kdy jsem přešel na milisekundy a v grafu jsou rozdíly časů:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 333px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/time-step.png'>&lt;img src='/robots/fireant/time-step_t.png' alt='časový krok v ms' title='časový krok v ms' class='border'  width='327' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/time-step.png'>časový krok v ms&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Prostě celá smyčka trvá pro 4x rychlejší komunikaci zhruba 62ms a při přetečení
u 65ms si snad důsledek už umíte představit. T, d, dm, dam. Huston, máme
problém. Pokud pro vyřízení stavů a příkazů pro 3 serva potřebuji skoro
trojnásobek cyklu serva, co potom pro 25 serv?!&lt;/div>

&lt;div class='p'>Ještě poznámka z MIDI světa &amp;mdash; přidal jsem logování jak FireAnt mačká
klaviaturu, viz
&lt;a href='https://github.com/robotika/fireant/blob/master/force_test/midi.py' class='external'>midi.py&lt;/a>.
Generuje to celkem čitelné výstupy:&lt;/div>

&lt;pre>[ [ [144, 45, 36, 0], 14315] ]
[ [ [144, 45, 0, 0], 15555] ]
[ [ [144, 45, 46, 0], 16664] ]
[ [ [144, 45, 0, 0], 17937] ]
[ [ [144, 45, 43, 0], 19093] ]
[ [ [144, 45, 0, 0], 21647] ]
[ [ [144, 96, 58, 0], 46968] ]&lt;/pre>

&lt;div class='p'>kde poslední číslo je časová známka (snad generovaná piánem), 144 je stav, 45
číslo klávesy (čísla &amp;gt; 90 používám na ukončení logování) nenulové číslo (36,
46, 43) rychlost úderu (?) nebo 0 nota vypnuta.&lt;/div>

&lt;hr/>

&lt;h2>9. leden 2014 &amp;mdash; Dvě oka upletla a tři vypárala&lt;/h2>

&lt;div class='p'>&amp;hellip; pokud vám to nic neříká, tak tak to dělala kněžna Bětka v
&lt;a href='http://cs.wikipedia.org/wiki/Rumcajs' class='external'>Rumcajsovi&lt;/a>. Prostě rychlost komunikace
jsem změnil zpět na 9600 a pak i zakomentoval volání queryForce(). Proč? Abych
potvrdil podezření, které jsem při čtení
&lt;a href='http://downloads.orionrobotics.com/downloads/code/arduino.zip' class='external'>zdrojáků Orion
knihovny&lt;/a> nabyl: &lt;i>queryForce()&lt;/i> je pomalé.&lt;/div>

&lt;div class='p'>Výsledky:&lt;/div>

&lt;ul>
&lt;li>9600 s queryForce() &amp;mdash; 96ms, &lt;i>logs/fa140108_195547.log&lt;/i>&lt;/li>

&lt;li>9600 bez queryForce() &amp;mdash;  64ms, &lt;i>logs/fa140108_195739.log&lt;/i>&lt;/li>

&lt;li>38400 bez queryForce() &amp;mdash; 32ms, &lt;i>logs/fa140108_195936.log&lt;/i> (ale místy až 46ms)&lt;/li>

&lt;li>38400 s queryForce() &amp;hellip; starší měření cca 63ms&lt;/li>
&lt;/ul>

&lt;div class='p'>Závěr? &lt;b>queryForce()&lt;/b> si opravdu vezme 10ms+ na každé servo. Pro 20 serv bych
se dostal na 200ms a update na 5Hz a to už není dobré. Důvodem je čekání při
SPI komunikaci, které je sice v mikrosekundách, ale delay=5000 je opravdu
hodně. Navíc se čeká 2x: po odeslání dotazu a v cyklu, před voláním &lt;i>cmdNOP&lt;/i>
a čekáním na platný výsledek. Pro &lt;i>queryForce()&lt;/i> je 10ms tedy dolní odhad.
Když SPI komunikace selže (checksum nebo timeout), tak se vše nekonečně
opakuje:&lt;/div>

&lt;pre>unsigned char ReadPacketB(unsigned char cmd,unsigned delay=1000){
		unsigned int incrc;
		do{
			WritePacket(cmd,++ readindex);
			delayMicroseconds(delay);
			for(int i=0;i&lt;20;i ++){
				incrc=WritePacket(cmdNOP);
				delayMicroseconds(delay);
				if(inpacketcrc&lt;tt>incrc &amp;&amp; inpacket[0]&lt;/tt>readindex){
					break;
				}
			}
		}while(inpacketcrc!=incrc || inpacket[0]!=readindex);
	
		return inpacket[1];
	}&lt;/pre>

&lt;div class='p'>Předpokádám, že pro delay=5000 je důvod a servo deska musí teprve dál
komunikovat se samotným servem a stav zjistit &amp;hellip; cestu s experimentálním
snižováním této hodnoty tedy zatím neplánuji.&lt;/div>

&lt;div class='p'>A co komunikace přes USB převodník? Nejprve oprava, že to není 19+12 bajtů, ale
19+15 bajtů (zapomněl jsem na start bajt, délku a kontrolní součet), tj.
celkově 34 bajtů. Pro 9600 je spodní odhad 35ms, pro 38400 pak 9ms. Rozdíl
tedy zhruba 16ms. V reálu to vypadá spíše na něco přes 32ms, takže předpokládám
nějaké „paušální” zdržení spíše na PC straně. Data budu brzy posílat delší a
pak bych to znova porovnal.&lt;/div>

&lt;div class='p'>Co dál?
&lt;a href='http://forums.orionrobotics.com/walking-robots-f6/orion-library-t77-10.html' class='external'>Kurt
a Nathan&lt;/a> doporučují místo &lt;i>queryForce&lt;/i> použít trigger (spouštěč?), kdy při
překročení zadané hodnoty servo samo zastaví. Skoro bych tipoval, že tedy
existuje další (tajný?) příkaz pro Orion digitální servo, kdy tento trigger se
už přednastaví přímo na servu a není tedy nutná žádná další komunikace.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140110">&lt;/a>&lt;/div>

&lt;h2>10. leden 2014 &amp;mdash; Ubuntu&lt;/h2>

&lt;div class='p'>Dnes malá odbočka aneb jak rozchodit komunikaci mravenec &amp;mdash; linux/Ubuntu.
Důvod? Druhý „soutěžící v paralelním slalomu” používá Ubuntu a má zatím
nějaké problémy &amp;hellip;&lt;/div>

&lt;div class='p'>Vlastně to bylo snazší (ťuk, ťuk, ťuk &amp;hellip; ono se ještě určitě něco pokazí) než
ve Windows, ale to především z důvodu, že jsem tušil, kde bude zádrhel. A byl.
Zase VID/PID USB zařízení:&lt;/div>

&lt;pre>$ dmesg | tail
[ 1092.032093] usb 2-2: new full-speed USB device number 2 using uhci_hcd
[ 1092.235131] usb 2-2: New USB device found, idVendor=0403, idProduct=a559
[ 1092.235140] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1092.235147] usb 2-2: Product: Communications Port
[ 1092.235152] usb 2-2: Manufacturer: Basic Micro
[ 1092.235158] usb 2-2: SerialNumber: BMVNT4DB&lt;/pre>

&lt;div class='p'>I na linuxu je tedy třeba nějak říci, že ten VID=0403 a PID=a559 odpovídá
standardnímu FTDI serial driveru. Asi nejlepší (funkční) nápovědu jsem našel na
&lt;a href='http://forums.basicmicro.com/post43972.html' class='external'>Basic Micro foru&lt;/a>:&lt;/div>

&lt;ul>
&lt;li>vytvořit soubor &lt;b>/etc/udev/rules.d/99-usbftdi.rules&lt;/b> s obsahem&lt;/li>
&lt;/ul>

&lt;pre># load basicMicro usb2Serial
ATTRS{idVendor}&lt;tt>"0403", ATTRS{idProduct}&lt;/tt>"a559", RUN+="/sbin/modprobe -q ftdi_sio product=0xa559
vendor=0x0403"&lt;/pre>

&lt;div class='p'>(člověk musí mít rootovská práva)&lt;/div>

&lt;ul>
&lt;li>restartovat udev:&lt;/li>
&lt;/ul>

&lt;pre>sudo restart udev
sudo udevadm trigger&lt;/pre>

&lt;div class='p'>Pak už se objeví vytoužený &lt;b>/dev/ttyUSB0&lt;/b>.&lt;/div>

&lt;div class='p'>Instalace „Arduino IDE” proběhla bez problémů &amp;mdash; zase jen detail, že aby
člověk mohl používat USB port, tak uživatel musí být ve skupině &lt;b>dialout&lt;/b> (a
je třeba vystoupit a nastoupit). Pak znova upravený příklad na pípání a hurá,
jde to programovat i mravenec pobrukuje &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>p.s. původně jsem postupoval podle
&lt;a href='http://www.ladyada.net/learn/arduino/lesson0-lin.html' class='external'>Arduino Tutoriálu&lt;/a>,
takže některým problémum jsem se možná rovnou vyhnul (konkrétně konflikt s
&lt;b>brltty&lt;/b>)&lt;/div>

&lt;hr/>

&lt;h2>13. leden 2014 &amp;mdash; zapojeno 18 serv&lt;/h2>

&lt;div class='p'>Zítra je den D a ještě stále nechodím. Rozhodl jsem se jít cestou
&lt;a href='https://github.com/robotika/fireant/commit/1e0b191c68468c014039c35ca9bb7bb39d04fa18' class='external'>Record
&amp;amp; Replay&lt;/a> s tím, že jsem nejprve upravil kód aby respektoval
&lt;a href='https://github.com/robotika/fireant/commit/af660e26fbcecd155071a52b87445ee0e454239e' class='external'>executeAt&lt;/a>
parametr a pak přidával serva.&lt;/div>

&lt;div class='p'>Zatímco přechod ze tří serv na devět vyžadoval
&lt;a href='https://github.com/robotika/fireant/commit/5886f86a869ad6017118c11ba269010745c991db' class='external'>drobné
změny&lt;/a>, přechod na 18 serv už byl
&lt;a href='https://github.com/robotika/fireant/commit/68285bb9ce558b0a688f43ff2465e63266ac42a9' class='external'>triviální&lt;/a>.
To zní jako vítězství, ale &amp;hellip; když jsem po record pustil replay, tak &lt;b>vždy&lt;/b>
levá přední noha šla do nesmyslné polohy (jiné, než nahrávané). Důvod? Ani
kabeláž, ani porouchané servo, ani chyba v kódu &amp;hellip; chyba byla v nějakém
prehistorickém zápisu do registrů servo-desky. Matně si vybavuji, že mi to
kdysi zlobilo už při „hraní na piáno” a „vyřešil” jsem to tak, že jsem
začal používat jinou nohu. Ve zkratce řešení bylo zavolat v kódu
&lt;b>Orion.resetRegs()&lt;/b> a servoMin se změnilo na -2000, servoMax na 2000 a
AOffset na 0. Teď se to chová správně, tj. co nahraji, to i přehraji &amp;hellip; je čas
jít spát.&lt;/div>

&lt;hr/>

&lt;h2>15. leden 2014 &amp;mdash; druhý FireAnt&lt;/h2>

&lt;div class='p'>Včera proběhlo první „pracovní setkání mravenců”. Přestože to jsou příbuzný
&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/two-robots.jpg'>&lt;img src='/robots/fireant/two-robots_t.jpg' alt='2x FireAnt' title='2x FireAnt' class='border'  width='220' height='161'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/two-robots.jpg'>2x FireAnt&lt;/a>
&lt;/td>&lt;/tr>&lt;/table> (stejná stavebnice), rozhodně to nejsou klony
nebo jednovaječná dvojčata. Pominu-li vliv prostředí na vývoj jedince, pražská
mutace měla jednu nohu obráceně (sám jsem si toho nevšiml, ale vlastně to je
jen „kosmetický detail” nemající vliv na „funkci rostlináře” &lt;span class='wink'>&lt;/span>), rozdíly byly
i základních dílech. Mám na mysli především jiné mozky: můj mravenec má v sobě
ATmega328 s deskou „Arduino Duemilanove” a ten druhý nevím jaký má čip (deska
byla pěkně zadrátovaná v těle), ale deska to je typ „Uno”!&lt;/div>

&lt;div class='p'>Další rozdíl byl v USB VID/PID. Když jsem to chtěl řešit a koukal do &lt;i>dmeg&lt;/i>,
tak jsem tam myslím zahlédl PID=6000 (?), ale nejsem si 100% jist. Proč jsem tomu
nevěnoval větší pozornost? Protože to bylo standardní FTDI IDčko, na Ubuntu
notebooku byl vidět &lt;i>/dev/ttyUSB0&lt;/i> a tato část rovnou fungovala.&lt;/div>

&lt;div class='p'>Novinkou bylo Playstation2 rozhraní a třída &lt;b>BMPS2&lt;/b>. Až když jsme to konečně
prokopali jsem pochopil, že je to další převodník, který se pro Arduino desku
tváří jako sériový port. Ne úplně zanedbatelný čas padl na chybu v zapojení &amp;mdash;
přijímač je třeba zapojit na Arduino pin 6, nebo v kódu změnit číslo na této
řádce:&lt;/div>

&lt;pre>BMPS2 ps2x(6,100);	//Use Arduino Pin 6 with 100ms maximum refresh rate&lt;/pre>

&lt;div class='p'>V půl desáté večer už Francouzko-kanadský FireAnt s oficiálním firmware naběhl
a přes PS2 šla spustit kalibrační procedura. Je třeba se všemi klouby hýbat do
extrémů a definovat mechanické limity. Při této „rozcvičce” ale povolil
spoj u konektoru baterky a stejně už bylo dost hodin &amp;hellip; nic, pokračování
zítra, resp. dneska.&lt;/div>

&lt;div class='p'>Z věcí, které se nám zatím nepodařilo rozchodit, mne asi nejvíce vadí
komunikace z Pythonu přes &lt;i>/dev/ttyUSB0&lt;/i>. Přestože &lt;i>pyserial&lt;/i>, &lt;i>python&lt;/i> i
&lt;i>git&lt;/i> byly nainstalované, zatím se to nějak bránilo logování pozic serv a
zpětnému přehrávání &amp;hellip; TODO.&lt;/div>

&lt;div class='p'>p.s. sešli jsme se na &lt;a href='http://czu.cz/' class='external'>ČZU&lt;/a>, kde asi budeme dnes pokračovat s
Husky: &lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/husky.jpg'>&lt;img src='/robots/fireant/husky_t.jpg' alt='Robot Husky' title='Robot Husky' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/husky.jpg'>Robot Husky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table> &amp;hellip; a spíše jen z
&lt;a href='http://slovnik-cizich-slov.abz.cz/web.php/slovo/plezir' class='external'>plezíru&lt;/a> jsem vzlétl
i s &lt;i>Isabele&lt;/i>, což je klon &lt;a href='/robots/heidi/cs'>Heidi&lt;/a> jen s modrou „čapkou”
(a bydlí na ČZU).&lt;/div>

&lt;hr/>

&lt;h2>16. leden 2014 &amp;mdash; doubleplusungood&lt;/h2>

&lt;div class='p'>Nefunguje to! To =
&lt;a href='http://downloads.orionrobotics.com/downloads/code/fireant.zip' class='external'>oficiální
firmware&lt;/a> na chození s řízením přes PS2 :-(. Došlo i na telefonický hovor přes
Atlantik &amp;hellip; no prostě je to třeba málem celé rozebrat a zkoušet kousek po
kousku.&lt;/div>

&lt;div class='p'>O předvčerejší chybě v zapojení PS2 přijímače jsem psal a teď už i chápu jak k
tomu asi došlo. Robot má 25 serv (18 nohy, 5 čelisti, 2 ocas), ale „servo
shield” dokáže řídit maximálně 24. Trik je v tom, že z druhé desky (Arduina)
je vyvedeno osm pinů a i ty mohou být použity pro řízení serva. Pokud vám někdo
tedy řekne, „zapojte PS2 přijímač na pin 6”, tak je třeba zároveň zdůraznit,
že se jedná o Arduino-pin 6.&lt;/div>

&lt;div class='p'>Věřím, že tedy prapůvodně byl přijímač zapojen na pin 6 servo shieldu a ostatní
konektory „pěkně vycházely” (ve finále tam má být jeden volný slot, ale číslo
2 a ne 6). Podobná chyba byla v zapojení serva na pin 16. Na toto přijít s
dodávanou kalibrační rutinou a jen poslouchat pípání robota jako zpětnou vazbu
snad fakt není ani možné.&lt;/div>

&lt;div class='p'>OK, to byla první část. Pak jsem odkomentoval define na DEBUG (ano, ve
zdrojácích oficiálního firmware), trošku znervózněl při pohledu na řádku:&lt;/div>

&lt;pre>Serial.begin(625000);&lt;/pre>

&lt;div class='p'>jestli to není „trošku moc” (Nathan mi pak po telefonu vysvětlil, že to je
maximální rychlost, kterou to stejně nepojede &amp;hellip; že to znamená „cpi tam data
jak nejrychleji můžeš”) &amp;hellip; stejně jsem to pak změnil na 9600, ale to je
jedno. Do kódu jsem přidal skoro za každou řádku výpis na seriák, takže výstup
pak vypadal třeba takto:&lt;/div>

&lt;div class='p'>"""
.START!
                                                xwaking upwaking done.a&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/div>

&lt;div class='p'>..START!
           xwaking upwaking done.a&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/div>

&lt;div class='p'>&amp;hellip;.START!
                                             xwaking upwaking done.a&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;b&lt;/div>

&lt;div class='p'>&amp;hellip;START!
                                              xwaking upwaking done.ab&lt;/div>

&lt;div class='p'>&amp;hellip;&amp;hellip;&amp;hellip;..START!
                                                                            xwaking upwaking done.abcd&lt;/div>

&lt;div class='p'>"""&lt;/div>

&lt;div class='p'>No, tak trochu boj s větrnými mlýny. Část „a&amp;gt;&amp;gt;&amp;gt;...b” je z cyklu 50x
opakuj update serv na ocase a jak vidíte, tak program se kousnul vždy po různém
počtu opakovaní. Cyklus jsem zkracoval i úplně vypustil, ale stejně se to po
chvíli kouslo a program zamrzl a občas se resetoval. Občas vůbec nenaběhl.
Prostě prima.&lt;/div>

&lt;div class='p'>Nathan zmínil ať ještě raději zkusím vývojové studio &lt;i>Arduino 1.0.1&lt;/i> (co má
také na webu), ale dopadlo to stejně jako v mém &lt;i>Arduino 1.0.5&lt;/i>. Podezření je
na přerušení, tj. že kód na řízení Tail serv s tím nemá nic společného (také jsem
ho celý zakomentoval, takže to potvrzuji).&lt;/div>

&lt;div class='p'>A jak to dopadlo, přesněji jaký je stav teď? Sylvio ráno vyrazil na
desetihodinou cestu autem zpět do Francie a druhého mravence mi tady nechal.
Takže mám teď dva. Někdo by to interpretoval jako dobrý výsledek, ale já moc
nevím &lt;span class='wink'>&lt;/span> &amp;hellip;  rozhodně je teď o něco více času ověřit to servo po servu a
veškerou činnost logovat po seriáku.&lt;/div>

&lt;div class='p'>p.s. pokud vám dnešní název nic neříká, tak viz
&lt;a href='http://en.wikipedia.org/wiki/Newspeak' class='external'>Newspeak z 1984&lt;/a>&lt;/div>

&lt;hr/>

&lt;h2>20. leden 2014 &amp;mdash; Joséphine pod drobnohledem&lt;/h2>

&lt;div class='p'>&lt;i>Joséphine&lt;/i> jsem nazval druhého robota &amp;mdash; Sylvio mu říká &lt;i>WeedAnt&lt;/i>. Za mne
to odpovídá dalšímu písmenku v abecedě po &lt;a href='/robots/heidi/cs'>Heidi&lt;/a> a &lt;i>Isabele&lt;/i>
(„sestra Heidi” na ČZU).  Jméno je z knížky „Ostružinové víno” od Joanne
Harrisové, kterou momentálně čtu. Potřeboval jsem se od robotů nějak odreagovat
a tak jsem s nimi tento víkend nedělal vůbec nic. Mám-li ještě jednou použít
zmíněnou knížku, tak bych citoval Jay někde na straně 184: „Garden work clears
the mind”. Krásně to sedělo/fungovalo &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Dnes ráno jsem do Joséphine nahrál týden starý kód na ovládání 18ti serv a
ohackoval ho, aby místo queryForce() posílal queryAOffset(), pak flashnul na
posílání queryServoMin() a konečně do třetice flashnul aby poslal
queryServoMax(). Podle logu to byla práce celkově na necelé tři minuty. A už
mám minimálně jedno podezření, co je špatně &amp;hellip;&lt;/div>

&lt;div class='p'>Výsledky pro min, offset, max:&lt;/div>

&lt;pre>(1675, 810, -458, -692, 1935,  -46, 359, -490, 427, -526, 1857,   206, &amp;hellip;
(2296, 810, -458,   26, 1935, -892, 359, -425, 427,  -40, 1857, -1160, &amp;hellip;
(1674, 810, -458,  972, 1935, 1954, 359, 1054, 427,  541, 1857,  1961, &amp;hellip;&lt;/pre>

&lt;div class='p'>Je to zase čas (ze tří různých logů), napětí baterky, pozice serva 1, hackovaná
hodnota serva 1, pozice serva2, &amp;hellip; ale když o tom přemýšlím, tak je to možná
správně. Kdyby kurňa ty funkce někdo zdokumentoval :-(. Co se mi ještě před
chvílí nelíbilo byla poslední vypsaná hodnota (206, -1160, 1961). Nějak stále
předpokládám, že pozice serv jsou absolutní, ale možná ne?! Pokud jsou
absolutní, tak je to určitě špatně, protože středová poloha by měla být mezi
min a max, není-liž pravda? Podle toho, jak Nathan říkal, že na pořadí nezáleží
bych soudil, že tomu i tak musí být &amp;hellip; ale nevěřím jim. Vyžádané zdrojáky na
Sevo Shield stále neposlal, tak jdu asi dělat znova triviální testy s jedním
servem na prvním FireAntovi.&lt;/div>

&lt;hr/>

&lt;h2>21. leden 2014 &amp;mdash; BASIC je základ!&lt;/h2>

&lt;div class='p'>Nedělám si srandu &lt;span class='smile'>&lt;/span>. Včera se mnou už lomcoval vztek a sršel jsem síru (ještě
ji trošku cítím), sepisoval jsem si koncept „Jsem vážně nespokojený s Vaším
produktem ...”, když Nathan odpověděl a poslal zdrojové kódy k Servo Sheiledu.
K mému velkému překvapení je to naprogramované v BASICu! Ale asi proč ne.
Používal jsem ho naposledy na &lt;a href='http://en.wikipedia.org/wiki/ZX_Spectrum' class='external'>ZX
Spectrum&lt;/a> a to už nějaký pátek je. Kód je celkem čitelný, jen zatím netuším co
je to zpětné lomítko:&lt;/div>

&lt;pre>hservo [val1&amp;amp;0x1F\-30000+258]&lt;/pre>

&lt;div class='p'>Tak už WeedAnt chodí? Nechodí a „opakovanou kalibrací nakalibrovat nejde”!!!
Trošku jsem se nechal o půnoci unést (viz
&lt;a href='http://forums.orionrobotics.com/topic76.html' class='external'>Orion fórum&lt;/a>). Ve zkratce,
zkalibrovat FireAnt s existujícím firmware jde pouze poprvé a nesmíte
prohodit pořadí kroků kalibrace. Nejprve extrémy min a max a teprve pak
středový offset.  Po pravdě si myslím, že i to nebude správně ani tehdy (viz
níže), ale dokud to nerozchodím, tak si nejsem 100% jist.&lt;/div>

&lt;div class='p'>O co jde? Surová (raw) vs. zpracovaná data. Sevo se řídí délkou pulzů a to není
něco, co by jste chtěli v pěkném API mít. Orion Robotics tedy používají
desetiny stupně. V jaké je servo poloze se dozvíte pomocí funkce
&lt;i>queryFBAngle()&lt;/i>. Tento úhel je již zpracovaný (!) &amp;mdash; bere v úvahu offset
(nastavitelný pomocí &lt;i>setAOffset()&lt;/i> a zjistitelný pomocí
&lt;i>queryAOffset()&lt;/i>).&lt;/div>

&lt;div class='p'>Dále zde máme limity, koncové dorazy, pro které se noha již dotýká konstrukce.
Ty lze nastavit pomocí funkcí &lt;i>setServoMin()&lt;/i> a &lt;i>setServoMax()&lt;/i>. Zatímco
offset je taková obezlička, aby se vám lépe počítalo (asi), tak tyto limity by
na ofsetu měly být nezávislé. Souhlasíte? Jsou.&lt;/div>

&lt;div class='p'>A teď zpět ke kalibrační proceduře. Pro kalibraci středu rozložíte robota do
„stabilizované polohy”, prostě ho rozplácnete, srovnáte natažené nohy, aby se
celou plochou dotýkaly podložky. Offsety se nejprve vynulují a až zmáčknete
tlačítko, tak se uloží hodnota přečtená pomocí &lt;i>queryFBAngle()&lt;/i> jako nový
offset. OK?&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 417px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/calibration.png'>&lt;img src='/robots/fireant/calibration_t.png' alt='Poloha pro kalibraci offsetu' title='Poloha pro kalibraci offsetu' class='border'  width='411' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/calibration.png'>Poloha pro kalibraci offsetu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Pro kalibraci limitů se nastaví proměnné min=3000 a max=-3000, tj. doplňkových
300 stupňů, a průběžně se berou hodnoty z &lt;i>queryFBAngle()&lt;/i> a upravují min a
max.  Po stisku tlačítka se zase všechny uloží.&lt;/div>

&lt;div class='p'>Je to srozumitelné? Nějaký problém? Ano, hned tři. Pokud máte čistou desku z
továrny, tak defaultně jsou registry prázdné a offset je nula. Pokud tedy
nejprve kalibrujete limity, tak máte šanci (ve skutečnosti nemáte, ale to
později). Pokud ale nejprve zkusíte offsety (to byl náš případ a podle
telefonického hovoru s podporou by to i mělo být jedno v jakém pořadí kalibraci
děláte), jste na věky ztraceni. Min/max se pak totiž už nesbírá z absolutních
čísel, ale z relativních vůči offsetu. Jediná cesta je nějak si resetovat
registry Servo Shield desky (je na to funkce, viz jeden starší příspěvek).&lt;/div>

&lt;div class='p'>A ty další dva problémy? Upravený úhel je nejen posunutý, ale může mít i opačné
znaménko (v případě, že nastavíte opačný směr pomocí &lt;i>setServoDir()&lt;/i>, což
firmware FireAntu používá).  Tímto způsobem ale pak kalibrujete opačné limity,
které typicky nejsou symetrické.&lt;/div>

&lt;div class='p'>Do třetice lze i nastavit, kolik tiků časovače je vlastně v realitě jeden
stupeň (funkce &lt;i>setServoDegree()&lt;/i>) a tato hodnota má vliv snad na všechno. V
Servo Sheildu je původní hodnota 178, kalibrace mravence tam nastavuje 176 &amp;hellip;
to už je relativně drobná odchylka.&lt;/div>

&lt;div class='p'>Ještě jednu prima chybu na závěr (viz
&lt;a href='https://github.com/robotika/fireant/commit/2e99bb579dc01336fc16153a4c631df36ed2c127' class='external'>diff&lt;/a>).
V &lt;i>Assembly Guide&lt;/i> se píše: &lt;i>The robot has to be wired based on the default
configuration. This configuration can be changed. However it is not
recommended.&lt;/i> Je to 25 čísel, a tak jsem si vůbec nevšiml, že tato sekce je
demo kódu 2x. Navíc piny pro serva na druhé noze byly identické. Zatracený
&lt;b>#ifdef CUSTOMPINS&lt;/b>). Za mne je to příklad „zbytečného znečtelnění kódu”:&lt;/div>

&lt;pre>//#define CUSTOMPINS 
&amp;hellip;
//Servo pin numbers
  #ifdef CUSTOMPINS
#define LFC 21
#define LFF 22 
#define LFT 23
#define LMC 20
#define LMF 19
#define LMT 18
#define LRC 17
#define LRF 16
#define LRT 0
#define RFC 13
#define RFF 14
#define RFT 15
#define RMC 12
#define RMF 11
#define RMT 10
#define RRC 9
#define RRF 8
#define RRT 1
#define HeadPitchPin 3
#define HeadRollPin 7
#define HeadYawPin 6
#define PincerLPin 5
#define PincerRPin 4
  #else
#define LFC 23
#define LFF 22 
#define LFT 21
#define LMC 20
#define LMF 19
#define LMT 18
#define LRC 17
#define LRF 16
#define LRT 0
#define RFC 15
#define RFF 14
#define RFT 13
#define RMC 12
#define RMF 11
#define RMT 10
#define RRC 9
#define RRF 8
#define RRT 1
#define HeadRollPin 7
#define HeadYawPin 6
#define HeadPitchPin 5
#define PincerLPin 4
#define PincerRPin 3
  #endif&lt;/pre>

&lt;hr/>

&lt;h2>23. leden 2014 &amp;mdash; Malé pozorování&lt;/h2>

&lt;div class='p'>Je to divné. Zatím tomu nerozumím. Včera jsem ještě chtěl psát příspěvek „0 1
2 3 SMRT!”, hezky jako v Blesku, ale ráno jsem se to pokusil zopakovat a
nepovedlo se mi to. Co jsem teď možná dělal jinak je zapínání &amp;mdash; nejprve
jsem zapnul robota a pak teprve ho připojoval přes USB k notebooku. Na začátku
to vždy pípne, tak jsem si myslel, že se resetuje deska, ale možná jenom
jedna z nich??&lt;/div>

&lt;div class='p'>A co to dělalo předešlé noci (resp. dva dny zpátky)? Nasbíral jsem pro oba
roboty polohu středového offsetu a pak místo přehrávání jí celou poslal do
robota. Pozice tam stihl poslat 4x (?) a pak už se to kouslo a nic. Smrt.&lt;/div>

&lt;div class='p'>Změnil jsem kód na&lt;/div>

&lt;pre>&amp;hellip;
  cmdOffset = offset[2::2] # výřez ze stavového pole
  cmdStop = [STOP_SERVO]*NUM_SERVOS
  for selectedServo in xrange(NUM_SERVOS):
    for i in xrange(10):
      print i,
      status = readRobotStatus( com )
      cmd = cmdStop
      cmd[selectedServo] = cmdOffset[selectedServo]
      writeRobotCmd( com, cmd=cmd )
    writeRobotCmd( com, cmd=[STOP_SERVO]*NUM_SERVOS )
    print "END"&lt;/pre>

&lt;div class='p'>Je v tom začátečnická chyba, kdy &lt;b>cmd = cmdStop&lt;/b> předá pouze referenci na
pole a nechtěně měním původní &lt;i>cmdStop&lt;/i> (správně to má být kopie pole pomocí
&lt;b>cmd = cmdStop[:]&lt;/b>). Výsledkem tedy bylo to, že &lt;b>všechna&lt;/b> dosud vybraná
serva (&lt;i>selectedServo&lt;/i>) zůstala aktivní. Tento kód vždy po chvíli vedl k
resetu desky.&lt;/div>

&lt;div class='p'>Opravená verze, kdy opravdu pouze jedno servo bylo aktivní, se také chovala
zajímavě. Každé sudé servo způsobilo po třech vnitřních cyklech chybu
kontrolního součtu vysílaného paketu &amp;hellip; ale jelo to dál a prošlo to všechna
serva.&lt;/div>

&lt;div class='p'>Zase je tam asi spíš více problémů, ale jeden z nich je „špatné závorkování”.
Prostě &lt;i>writeRobotCmd&lt;/i> je tam v každém cyklu o jeden více! Nevím, proč by to
mělo vadit, ale vadí. Přidáním &lt;i>readRobotStatus()&lt;/i> před vypnutí serv se
rozhodně „něco” zlepšilo &amp;hellip; asi to dává smysl. Zatímco se Arduino snaží
realizovat předposlední příkaz, tak poslední příkaz se ztrácí přetékáním
Arduino bufferu pro sériovou linku.&lt;/div>

&lt;div class='p'>Ještě jedno pozorování. To vypnutí serv dělá nějakou neplechu (špatné pozice po
následném zapnutí serv), takže ve výsledném kódu jsem plošné vypínání dal úplně
na konec programu &amp;hellip; ještě tedy ono možná vadí vypnutí všech serv a ne jenom
jednoho (???). TODO.&lt;/div>

&lt;div class='p'>Teď je na čase zopakovat stejný tělocvik s Joséphine &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>24. leden 2014 &amp;mdash; Self-reset&lt;/h2>

&lt;div class='p'>Tak Joséphine tělocvik nevydržela. Při protahování sedmnáctého kloubu jí to
přestalo bavit a resetovala se. To by i vysvětlovalo, proč při ovládání všech
serv najednou moc nevydrží. Pokud pohybuji jenom s jedním servem a ostatní
vypínám
(&lt;a href='https://github.com/robotika/fireant/commit/4b1fbee1a75a2dd9c9edebb4bf4c394f0db9bb52' class='external'>kód&lt;/a>),
tak vše funguje a je i dobře vidět, že zapojení všech serv už je správné.
Problémy nastanou, když to upravím tak, aby použitá serva zůstala zapnutá.&lt;/div>

&lt;div class='p'>Čekám na dokončení nabíjení druhé baterky, která je dost nešťastně přidělaná v
těle robota (a nedá se snadno vyndat). V plánu mám přidat dotaz
&lt;i>queryForce()&lt;/i>, který bude sice pomalý, ale mohla by to být taková
automatická diagnóza, jestli nějaké servo není problémové. Stejně tak bych v
druhém pokusu zkusil vypnout dotazy na polohu, jestli by řízení „normálního”
serva nebylo stabilnější.&lt;/div>

&lt;div class='p'>Trvá to nějak dlouho a musím do práce &amp;hellip; tak snad večer &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>28. leden 2014 &amp;mdash; Uno, Due, &amp;hellip;&lt;/h2>

&lt;div class='p'>Říkal jsem si, že bych měl mravence nějak jednoznačně rozlišovat a vzpomněl
jsem si při tom na jeden starý vtip o dvou policajtech:&lt;/div>

&lt;div class='p'>&lt;i>Dvojice policistů dostane na obchůzky dva koně. ,,Jak si poznáme, koho je
který?'' ,,Víš co? Já tomu jednomu uříznu ocas a ten bude můj.'' Když ale druhý
den přijdou do práce, tak mají oba koně zkrácené ocasy. ,,Víš co? Tak já
jednomu uříznu ucho a ten pak bude můj.'' Další den, ale zase oba koně mají
uřízlé ucho. ,,Hele co kdybych mu zkusil vypíchnout oko?'' Ale i další den jsou
oba koně na jedno oko slepé. ,,Víš co? Co kdyby ty jsi si vzal toho bílého a já
toho černého?''&lt;/i>&lt;/div>

&lt;div class='p'>Vtip byl možná ještě morbidnější, ale zapamatoval jsem si ho, protože to byl
první (a možná i poslední) vtip, který se mi úspěšně podařil podat v angličtině
&lt;span class='smile'>&lt;/span>. No nic, co to má společného s mravencema? Nemám v plánu jim trhat nožičky.
Proč je nerozlišovat podle čísla, kdy jeden má řídící desku &lt;b>Uno&lt;/b> a druhý
&lt;b>Due&lt;/b>milanove &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>Jinak je to dost otrava. Přešel jsem na test ověření funkcí &lt;i>setServoMin&lt;/i>,
&lt;i>setServoMax&lt;/i>, &lt;i>setServoDir&lt;/i> a &lt;i>setAOffset&lt;/i>. A už
&lt;a href='https://github.com/robotika/fireant/commit/844da4a8c7efa9b2683e1bfc83839498024621a0' class='external'>první
pokus&lt;/a> přinesl zvláštní poznatky. Nedělám tam nic jiného, než že ve smyčce
ověřuji stav baterky a nastavuji polohu jednoho serva. A co se stalo? To jedno
servo to nastavilo správně, ale během pár sekund se nastavilo ještě jiné servo!
Toto byl FireAntDuo.&lt;/div>

&lt;div class='p'>Večer jsem to zkusil ještě na FireAntUno. Než se začalo něco podivného dít, tak
uplynula delší doba, ale i jemu se po chvíli pohnula pravá prostřední noha nebo
levé čelisti. Trošku to podlomilo moji důvěru v implementovanou
&lt;a href='http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus' class='external'>SPI komunikaci&lt;/a>
a Orion knihovnu. To by snad měl rozdýchat nebo ne? Uznávám, nebyl tam skoro
žádný čas na nádech, ale tak si ho měl zajistit sám?? Možná si ještě zkusím
spočítat, kolik těch cyklů se stihne za sekundu &amp;hellip;&lt;/div>

&lt;div class='p'>Když jsem přidal &lt;i>delay(10)&lt;/i>, tak tyto anomality zmizely, resp. neměl jsem už
dost trpělivosti na ně čekat, a mohl jsem přejít k
&lt;a href='https://github.com/robotika/fireant/commit/451256a7c3ca1370a1b21ac95173fef5d47d89b4' class='external'>původnímu
testu&lt;/a>.&lt;/div>

&lt;div class='p'>Vypadalo to celkem rozumně. Min/max/offset jsou nejspíš absolutní hodnoty pozic
serva a je jedno v jakém pořadí se nastaví směr serva &lt;i>setServoDir&lt;/i> a offset.
I min/max „zařezávaly” požadovaný úhel, že se servo nepohnulo dále. Max je
silnější, takže když jsem zkusil nedefinovaný max=-200 a min=200, tak se servo
pohnulo do polohy -200.&lt;/div>

&lt;div class='p'>Konec pohádky. Když jsem omylem nastavil max=-2000 a min=2000, bylo to po
pokusu s prohozením min a max, tak se nestalo nic. Když jsem pro správný
interval -2000 až 2000 nastavil offset 100 a polohu 1000, tak jednou to šlo do
záporného extrému, jednou do kladného a pak to následně nedělalo nic! Napadá
mne, že programováním přes USB se asi resetuje pouze Arudino deska a Servo
Shield je v nějakém divném stavu. Nebo občas nefungují nastavovací funkce v
setup(). Nebo je tam ještě nějaký divný prvek v registrech, který si s tím dělá
co chce &amp;hellip; dnes ráno mne napadl „force trigger”, který to zabije??&lt;/div>

&lt;div class='p'>Trošku únavné. Vlastně jsem nezmínil víkendovou motivaci &amp;mdash; byl jsem bez
robotů bos a tak jsem si četl zdrojáky FireAnt firmware ovládaného přes PS2.
Vedle chození všemi směry, otáčení, regulování rychlosti a výšky chůze, by měl
mít předprogramovaných deset typů chůze, různé vrtění a protahování &amp;hellip; prostě
jsem to chtěl vidět v reálném světě &lt;span class='smile'>&lt;/span>. Přepojil jsem PS2 přijímač na Duo (ten
se sám od sebe neresetuje), zkusil nakalibrovat a pak zkusil chůzi. Nějaký
naznak tam byl, ale nohy byly po jedné kalibraci pod robotem, po druhé hodně
natažené a je to celkem agresor a jde z něj strach. Tak postupně 1, 2, &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140129">&lt;/a>&lt;/div>

&lt;h2>29. leden 2014 &amp;mdash; Gottwaldův koan&lt;/h2>

&lt;div class='p'>Nemyslím nějakého slavného programátora nebo zen-budhistu, ale
&lt;a href='http://cs.wikipedia.org/wiki/Klement_Gottwald' class='external'>osobu&lt;/a> z dob, kdy se
„bojovalo za mír” a skončili jsme ve slepé uličce, protože „zpátky ni
krok”.  Myslím jedno z hesel &amp;hellip; &lt;b>Důvěřuj, ale prověřuj!&lt;/b>&lt;/div>

&lt;div class='p'>Prostě k nastavování parametrů jsem přidal i následné ověření, že daná hodnota
byla opravdu nastavena. A kdyby to náhodou nesedělo (velmi nepravděpodobné),
tak pípej  (viz
&lt;a href='https://github.com/robotika/fireant/commit/863f8983455581482cf04760ff2ec089e8864ea6' class='external'>diff&lt;/a>).&lt;/div>

&lt;div class='p'>&amp;hellip; a pípalo to zběsile :-(. Přidal jsem ještě výstup na konzoli a problém je v
nastavení offsetu, kdy po &lt;i>setAOffset(100)&lt;/i> vracel &lt;i>queryAOffset()&lt;/i> nulu.
Jak už po delším zápasení ztrácím smysl pro realitu, tak jsem to i napsal na
Orion fórum a teprve teď vidím, že tam mám prohozené proměnné. Žádná záhada.
„Měl byste se nad sebou soudruhu zamyslet a nestřílet hned na všechny
strany...”&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140130">&lt;/a>&lt;/div>

&lt;h2>30. leden 2014 &amp;mdash; Neckerova krychle aneb myšlenkový zlom&lt;/h2>

&lt;div class='p'>Znáte Neckerovu krychli? Pokud ne, tak zkuste např.
&lt;a href='http://www.rodenstock.cz/rodb2c/cz/cz/docId-1280985/Neckerova+krychle.html' class='external'>tento
odkaz&lt;/a>. Prostě mozek si zafixuje jednu z variant a je hodně těžké přepnout na
druhou. A stejný problém jsem měl i já. Prostě &lt;i>setServoMin/setServoMax&lt;/i> jsem
bral jako fyzické limity nezávislé na čemkoliv, ale ve skutečnosti to jsou
„logické” limity a pouze ořezávají vstupní hodnotu pro &lt;i>setAngle()&lt;/i>. Teprve
pak přichází na scénu offset a směr serva.&lt;/div>

&lt;div class='p'>Co z toho vyplývá? Především při kalibraci je zásadní nejprve provést nastavení
středů (offset) a teprve pak rozsah (min/max). Nastavení směrů pokud možno
fixované (jak je v oficiálním firmware). Pokud to uděláte obráceně, tak
nastavené limity posunete úplně jinam po změně offsetu.&lt;/div>

&lt;div class='p'>Nahrál jsem tedy do FireAnta znova původní firmware, ale tentokrát pouze
kalibroval rozsah (středy jsem měl už od minule a ty tedy vlastně byly správně
a na rozsahu nezávislé). Ovládání přes PS2 je mizerné, ale těší mne, že
&lt;a href='http://forums.orionrobotics.com/walking-robots-f6/ps2-remote-controller-problem-t75.html' class='external'>i
ostatní mají problém&lt;/a>. Jak to vypadá v reálu se můžete podívat na dost
úděsném &lt;a href='http://youtu.be/d3_8ip1V89A' class='external'>videu&lt;/a>. A ještě jeden dost zásadní
detail &amp;mdash; aby byl mravenec v nějakém použitelném stavu, musíte ho postavit
pomocí opakovaného mačkání kombinace: &lt;b>D-Pad Up + L1&lt;/b>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140131">&lt;/a>&lt;/div>

&lt;h2>31. leden 2014 &amp;mdash; FireAntUno už běhá!&lt;/h2>

&lt;div class='p'>Je to jak s karetními triky. Když je jednou prokouknete, už nikdy nepochopíte,
„jak jste mohli být tak slepí?!” &lt;span class='wink'>&lt;/span>. Takže nejprve díky Ondrovi z práce za
rozlousknutí a za RTFM (ošklivá zkratka o čtení manuálu, tady data sheetu).
Skoro mám pocit, že u FireAntDuo jsem to na začátku zkoumal, ale u jedničky už
jsem to neověřil. A přitom je to tak prosté &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/jumper.jpg'>&lt;img src='/robots/fireant/jumper_t.jpg' alt='Jumpery pro napájení' title='Jumpery pro napájení' class='border'  width='220' height='179'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/jumper.jpg'>Jumpery pro napájení&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Zajímá vás, proč se FireAntUno stále dokola resetoval? Nepomohla by ani Pavlem
doporučená
&lt;a href='http://petr-kubac.blog.cz/1202/kubacova-magicka-dioda-ktera-se-porad-opakuje' class='external'>Kubáčova
magická dioda&lt;/a>. Důvodem byly čtyři špatně nastavené jumpery na Servo Shield
desce (na obrázku je zakroužkováno, jak to má být správně &amp;mdash; je to staré foto
z Due(milanove)).  Lze pomocí nich nastavit, zda napájení má být VS nebo VCC,
tedy zda přímo z baterky nebo přes regulátor Arduino desky. A na Uno to šlo
přes desku. T d dam dam &amp;hellip;  už to funguje. Viz
&lt;a href='http://youtu.be/eViWJ8TiZlQ' class='external'>důkaz&lt;/a>.&lt;/div>

&lt;div class='p'>A co dál? To ovládání přes PS2 je stále mizerné, nepomáhá aní Kurtova oprava
(ještě jsem mu to nenapsal). Jelikož Sylvio chce s mravencem natočit krátký
film, tak pro to je ovládání celkem kritické. Možná bych přešel na posílání
příkazů z PC po USB. Ještě nevím. Každopádně první milník je konečně dosažen.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140202">&lt;/a>&lt;/div>

&lt;h2>2. únor 2014 &amp;mdash; execGait()&lt;/h2>

&lt;div class='p'>Dnes mám spadeno na tuto funkci:&lt;/div>

&lt;pre>void OrionClass::execGait(
     int BodyYaw,int BodyRoll,int BodyPitch,
     int BodyRotOffsetX,int BodyRotOffsetY,int BodyRotOffsetZ,
     int BodyOffsetX,int BodyOffsetY,int BodyOffsetZ,
     int Xdist,int Ydist,int Zdist,int Rdist,
     int XLegAdj, int ZLegAdj,
     int Rate,
     boolean EnableForce)&lt;/pre>

&lt;div class='p'>Na můj vkus má trošku moc parametrů, ale zase dělá „úplně všechno” co se týká
&lt;i>gait&lt;/i>. Toto anglické slovo jsem neznal a znamená &lt;i>(způsob) chůze , držení
těla při chůzi&lt;/i>. Pokud tím mravence nakrmíte, tak chodí deseti ruznými typy
chůze (RG6, RG12, QR9, TRI4, TRI6, TRI8, TRIO12, TRIO18, WAVE12, WAVE18) s tím,
že tělo může mít různě vysoko, posunuté do strany nebo dopředu, nakloněné,
zvedat nohy hodně nebo málo &amp;hellip; a asi ještě spoustu dalších věcí.&lt;/div>

&lt;div class='p'>Zároveň to snad bude i odpověď na dotaz fandorama přispěvovatele Josefa: &lt;i>Máš
v úmyslu do budoucna využívat dodaný firmware, nebo naprogramovat vlastní
algoritmus chůze?&lt;/i> Původně jsem si chtěl každé servo řídit zvlášť, od každého
mít zpětnou vazbu o poloze a síle. Postupem času ale narážím na úzká hrdla a
tak možná nejprve zkusím co přímo nabízí Orion knihovna: &lt;b>execGait&lt;/b>.&lt;/div>

&lt;div class='p'>Zdrojový kód pro test chůze je
&lt;a href='https://github.com/robotika/fireant/blob/master/walk/walk.ino' class='external'>zde&lt;/a>, ale
zatím tomu moc nerozumím. Používá se &lt;b>TRI4&lt;/b>, což předpokládám je vždy trojice
nohou statická a trojice se pohybuje. Nevím proč, ale stále mi FireAnt(Duo)
zatáčí vpravo. Teď výhoda dvou robotů, &amp;hellip; flashuji FireAntUno &amp;hellip; tak žádná
magie. Uno chodí rovně, takže je to pravděpodobně problém kalibrace.&lt;/div>

&lt;div class='p'>Jinak do „startovní polohy” (tlačítko A používám na start a tlačítko B na
stop, takže mne netrápí zákmity), doslova skočí, takže tím poděsil nejen mne,
ale i náš pes okamžitě zdrhnul &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Středy jsem teď na Duo znova překalibroval, ale žádná změna. Že by to zase bylo
nějak provázané s min/max? Dnes už na to ale nemám moc náladu &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140205">&lt;/a>&lt;/div>

&lt;h2>5. únor 2014 &amp;mdash; PlayStation2 protokol&lt;/h2>

&lt;div class='p'>Dokumentace trošku zaostává za pokusy &amp;hellip; tentokrát bližší zkoumání PS2.
Ovládání mravence nefunguje tak jak bych si představoval a jedno z podezření
padá na nespolehlivý příjem příkazů z dálkového ovládání. Původně jsem si
myslel, že třetí kabel u přijímače v troj-pinovém servo konektoru je pouze
výstup (z pohledu Arduina vstup), ale není tomu tak. Je to vstupně/výstupní
seriák a už u tohoto faktu mne trošku zamrazí :-(. Chtěl jsem přepnout
vysílání na „stream”, ale nevím jak a asi to ani nejde. Z jedné
&lt;a href='https://gist.github.com/scanlime/5042071' class='external'>pseudo dokumentace&lt;/a> vyplývá, že je
třeba neustále posílat příkazy, na které dostanete odpověď se stavem tlačítek
a páček.&lt;/div>

&lt;div class='p'>Tak to je jeden HW potenciální problém. SW lze zkompilovat s DEBUG a vypisuje
na konzoli případné problémy (přidal jsem si tam i výpis, „případného”
úspěšného příjmu). Vypadalo to asi takto:&lt;/div>

&lt;pre>Bad packet FF FF 0 0 0 0 0 0 0 0 0 FF 0 FF 0 0 0 0 0 0 0 0 30 36
Bad packet FF FF 0 0 0 0 0 0 0 0 0 FF 0 FF 0 0 0 0 0 0 0 0 10 36
Data OK
Data OK
Bad packet FF FF 0 0 0 0 0 0 0 0 0 FF 0 FF 0 0 0 0 0 0 0 0 35 32
Data OK
Bad packet FF FF 0 0 0 0 0 0 0 0 0 FF 0 FF 0 0 0 0 0 0 0 0 35 32&lt;/pre>

&lt;div class='p'>Takže se mi to nezdá a něco tam opravdu je špatně! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Chvíli jsem si nahrával výpisy a udělal malou „statistiku”:&lt;/div>

&lt;pre>count:
     24	Bad packet FF FF 0 0 0 0 0 0 0 0 0 FF 0 FF 0 0 0 0 0 0 0 0 10 36
     85	Bad packet FF FF 0 0 0 0 0 0 0 0 0 FF 0 FF 0 0 0 0 0 0 0 0 30 36
      5	Bad packet FF FF 0 0 0 0 0 0 0 0 0 FF 0 FF 0 0 0 0 0 0 0 0 35 12
     88	Bad packet FF FF 0 0 0 0 0 0 0 0 0 FF 0 FF 0 0 0 0 0 0 0 0 35 32
      1	Bad packet FF FF 0 0 0 0 0 0 0 0 7F 36 0 FF 0 0 0 0 0 0 0 0 15 CC
      1	Bad packet FF FF 0 0 0 0 0 0 0 0 7F 38 0 FF 0 0 0 0 0 0 0 0 46 A3
      2	Bad packet FF FF 0 0 0 0 0 0 0 0 7F 7F 0 FF 0 0 0 0 0 0 0 0 21 CF
      1	Bad packet FF FF 0 0 0 0 0 0 0 0 7F 80 0 FF 0 0 0 0 0 0 0 0 80 C4
      2	Bad packet FF FF 0 0 0 0 0 0 0 0 7F FF 0 FF 0 0 0 0 0 0 0 0 80 65
      1	Bad packet FF FF 0 0 0 0 0 0 0 0 7F FF 0 FF 0 0 0 0 0 0 0 0 A0 65
      1	Bad packet FF FF 0 0 0 0 0 0 0 0 80 7F 0 FF 0 0 0 0 0 0 0 0 16 3C
      2	Bad packet FF FF 0 0 0 0 0 0 0 0 80 80 0 FF 0 0 0 0 0 0 0 0 A7 36
      1	Bad packet FF FF 0 0 0 0 0 0 0 0 80 AB 0 FF 0 0 0 0 0 0 0 0 CF 38&lt;/pre>

&lt;div class='p'>V prvních čtyřech případech má být kontrolní součet &lt;b>35 36&lt;/b>, takže všechny
chyby jsou nuly v místech, kde mají být jedničky. Ale ne obráceně. Netuším, zda
je to jenom náhoda nebo z počítání kontrolního součtu to je přece jasné?? V
plánu mám test bez dalšího kódu pro serva, test s jiným PS2 ovladačem a
logování po delší dobu.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140207">&lt;/a>&lt;/div>

&lt;h2>7. únor 2014 &amp;mdash; test_ps2&lt;/h2>

&lt;div class='p'>Dal jsem teď na github kód
&lt;a href='https://github.com/robotika/fireant/blob/master/test_ps2/test_ps2.ino' class='external'>testování
PlayStation2&lt;/a>. Vlastně nedělá skoro nic, jenom dokola čte z PS2. Magie se
skrývá v upravené knihovně &lt;b>BMPS2X&lt;/b>, kterou kompiluji v DEBUG módu a výpis
úspěšných a špatných paketů jsem zkrátil do jednoho bajtu. Dokud nezapnu
ovladač, tak je vše OK. Pak začnou chodit špatné pakety, ale systém v tom zatím
nevidím &amp;mdash; vy ano?&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 344px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/error-console.png'>&lt;img src='/robots/fireant/error-console_t.png' alt='.=OK, B=BAD' title='.=OK, B=BAD' class='border'  width='338' height='212'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/error-console.png'>.=OK, B=BAD&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Nepříjemné pozorování je, že chybových paketů je poměrně hodně. Skoro bych si
troufl říci, že 50%. Navíc data sbírá poměrně pomalu:&lt;/div>

&lt;pre>BMPS2 ps2x(6,100);&lt;/pre>

&lt;div class='p'>tj. na PINu 6 poslouchá a čeká 100ms, tedy 10Hz update. Zkusil jsem to snížit
na 10 a vůbec se nepodařilo navázat spojení. Posunul jsem to na defaultních 30
a dostal jsem následující obrázek:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 344px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/error-console-30.png'>&lt;img src='/robots/fireant/error-console-30_t.png' alt='chyby pro 30ms' title='chyby pro 30ms' class='border'  width='338' height='212'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/error-console-30.png'>chyby pro 30ms&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Možná je to jenom klika, ale nikde nevidím dvě Béčka po sobě? Často je každý
druhý paket špatně, ale stále to znamená rychlejší a spolehlivější komunikaci
než při 100ms. Zkusím to obalit a nahradit jedno čtení dvěma. Nebo ještě chvíli
experimentovat s tím časem &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140208">&lt;/a>&lt;/div>

&lt;h2>8. únor 2014 &amp;mdash; Travel Light&lt;/h2>

&lt;div class='p'>Včera už mi došla trpělivost a dálkový ovladač jsem hodil do koše. Skutečnost,
že to pro 30ms vycházelo dobře minimálně každý druhý příjem, byla náhoda.
Ještě jsem si chvíli hrál s původním kódem mravence a čtení nahradil
troj-čtením s čekáním, jestli se to alespoň jednou nechytne, ale nijak
viditelně to nepomáhalo. Takže konec a zpět k „verzi 0”.&lt;/div>

&lt;div class='p'>Extrémisti mají na toto pravidlo:
&lt;a href='http://www.agilemodeling.com/principles.htm#TravelLight' class='external'>Travel Light&lt;/a>, v
překladu „cestuj nalehko”. Jinými slovy: „vše, co nutně nepotřebujete, hoďte
přes palubu.” Tak už to lítá &amp;hellip; žádné dálkové ovladače, žádný
Orion.executeGait, žádné kalibrace, žádné setServoMin/setServoMax, žádný
setServoDir/setServoDegree. „Proletáři všech zemí, vyližte ...” však víte &amp;hellip;
to se mi ulevilo &lt;span class='smile'>&lt;/span>. Předpokládám, že se vracím cca 2 měsíce zpět, ale už vím
o trošku více a budu si jednoduchosti zase náležitě vážit.&lt;/div>

&lt;div class='p'>Co teď robot dělá? V zásadě je to kód na ovládání serv přes USB, kdy jako stav
vracím aktuální polohu serva a příkaz je požadovaná poloha serva. Nic víc a nic
míň. Složitost přesouvám na PC do Pythonu. Kód na chození rovně najdete
&lt;a href='https://github.com/robotika/fireant/blob/master/ver0/fireant.py' class='external'>zde&lt;/a>. Při
kopírování kódu s použitím
&lt;a href='http://cs.wikipedia.org/wiki/Kosinov%C3%A1_v%C4%9Bta' class='external'>Kosinové věty&lt;/a> bych si
zase nafackoval:&lt;/div>

&lt;pre>ta,tb,tc = triangleAngles( b, c, d-a ) # TODO z-coordinate&lt;/pre>

&lt;div class='p'>&amp;hellip; se skoro divím, že to na to piáno hrálo &amp;hellip; když oprava je tak „hrozně složitá”:&lt;/div>

&lt;pre>ta,tb,tc = triangleAngles( b, c, math.hypot( d-a, z ) )&lt;/pre>

&lt;div class='p'>&amp;hellip; ale možná jsem teď jenom „hrozně chytrej” a zanesl jsem tím jinou chybu
(viz &lt;a href='https://github.com/robotika/fireant/blob/master/ver0/triangle.py' class='external'>triangle.py&lt;/a>).&lt;/div>

&lt;div class='p'>Styl chození je ten nejjednodušší, kdy každou chvíli jsou na zemi právě 3 nohy.
Úhly pro jednotlivá serva počítám z požadované relativní souřadnice (x,y,z)
vůči prvnímu kloubu na těle robota. Přidal jsem tam ještě lineární interpolace
mezi starým a novým příkazem a tam končím. A po X měsících jsem „neustálým
přešlapováním na místě” konečně vybil baterku &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140209">&lt;/a>&lt;/div>

&lt;h2>9. únor 2014 &amp;mdash; První zničené servo&lt;/h2>

&lt;div class='p'>Když jsem včera zkoušel
&lt;a href='https://github.com/robotika/fireant/tree/master/ver0' class='external'>ver0&lt;/a>, tak jsem slyšel
nějaké nepříjemné zvuky. Dnes jsem mravenci „prohmatával klouby” a opravdu
minimálně jedno servo je zničené :-(. Je to prostřední servo u prostřední nohy,
tj. při 3+3 chůzi je na tuto nohu největší váha, ale že by to vytrhalo zuby?!&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/broken-gearbox.jpg'>&lt;img src='/robots/fireant/broken-gearbox_t.jpg' alt='bezzubé kolečko' title='bezzubé kolečko' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/broken-gearbox.jpg'>bezzubé kolečko&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140220">&lt;/a>&lt;/div>

&lt;h2>20. únor 2014 &amp;mdash; Obezita&lt;/h2>

&lt;div class='p'>Obezita není dobrá na klouby. A platí to i pro mravence. Přestože Nathan mi
přislíbil poslat náhradní převody (na
&lt;a href='http://www.orionrobotics.com/Digital-Servo-HV220_p_302.html' class='external'>webu&lt;/a> mají
krásnou (dost americkou) větu: &lt;i>All Orion Robotics servos come with a no
questions asked 2 year warranty. Send us your servo and we will repair or
replace it free of charge.&lt;/i>) tak mám vážné obavy, že se celý scénář rychle
zopakuje.&lt;/div>

&lt;div class='p'>Kolik FireAnt váží?&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/weight.jpg'>&lt;img src='/robots/fireant/weight_t.jpg' alt='FireAnt má skoro 3kg' title='FireAnt má skoro 3kg' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/weight.jpg'>FireAnt má skoro 3kg&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Většinu váhy jsou serva, &lt;i>Weighs 2.1oz&lt;/i>, česky
&lt;a href='http://cs.wikipedia.org/wiki/Unce' class='external'>Unce&lt;/a> (1 unce [oz] = 28,3495 g), což i
zhruba potvrzuje měření:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/servo-weight.jpg'>&lt;img src='/robots/fireant/servo-weight_t.jpg' alt='hmotnost serva' title='hmotnost serva' class='border'  width='165' height='220'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/servo-weight.jpg'>hmotnost serva&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Dále je třeba zmínit, že číslo u HV220 digitálního serva znamená &lt;i>220 oz/in&lt;/i>,
což je 6.226kg/254 milimetru (viz
&lt;a href='http://cs.wikipedia.org/wiki/Palec_%28jednotka%29' class='external'>Palec&lt;/a>) a zhruba 2.4kg na
1cm.&lt;/div>

&lt;div class='p'>A teď páky &amp;mdash; noha je běžně 22cm od středu robota, prostřední servo pak 13cm.
Při „šťastném” rozdělení váhy 3kg na tři nohy je to 1kg, při nešťastném 1.5kg
a více. Na první pohled tedy skoro &lt;b>desetinásobné přetížení&lt;/b> specifikace
serva?! To nemůže dobře dopadnout!&lt;/div>

&lt;div class='p'>Je dost pravděpodobné, že mám ve výpočtech/odhadech nějakou zásadní chybu.
Hlavní fyzik z &lt;a href='/robots/clara/cs'>bývalého Short Circuits týmu&lt;/a> mi na toto téma
napsal: „Myslim, ze ty tvoje uvahy jsou principialne dobre. Jen mi prijde, ze
zapominas, ze ty sily, co vznikaji jednak musi  kompenzovat vahu robota (to
uvazujes), ale pak jeste (a na to mozna zapominas) zrychleni robota. A to je
hur predpovidatelny, protoze muze byt do vsech smeru...”&lt;/div>

&lt;div class='p'>Tak nevím &amp;mdash; bude to dynamicky ještě horší nebo naopak lepší a vysvětluje se
tím, že to občas vůbec funguje? Komentáře vítány &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140221">&lt;/a>&lt;/div>

&lt;h2>21. únor 2014 &amp;mdash; Robotici sobě!&lt;/h2>

&lt;div class='p'>Tamtamy fungují! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Na pracovním večírku mi kolega říká: „Četl jsem, že už jsi zničil servo?!”
&amp;hellip; a trošku to znělo jako „slyšel jsem, že jsi Pražákovi naboural sloupek”
&lt;span class='wink'>&lt;/span> (&lt;a href='http://www.csfd.cz/film/6672-vesnicko-ma-strediskova/' class='external'>Vesničko má
středisková&lt;/a>) &amp;hellip; ale informační kanály fungují!  A co víc pod-skupinka se
hned vrhla na počítání rozložení sil na mravencově noze &lt;span class='smile'>&lt;/span>.  V mezičase přišel
mail od Martina Lockera. Poučný. Skoro se stydím. Zase špatné asociace &amp;hellip; měl
jsem pocit, že Hitec serva měla podobný kód a vycházelo to nějak okolo 3kg/1cm,
ale &amp;hellip;&lt;/div>

&lt;div class='p'>,,Ahoj Martine, díval jsem se na tvůj rozbor obezity FireAnta.  Trošku bych to
poopravil (předpokládám, že tvůj omyl vznikl používáním zcela nesmyslné
jednotky "krouticího momentu" - správně má být N.m - resp. v nejhorším kg.cm
!!!): 220oz.in odpovídá tedy:&lt;/div>

&lt;div class='p'>220 x 28,3495 g = 6,237 kg&lt;/div>

&lt;div class='p'>1 (in) palec = 2,54 cm&lt;/div>

&lt;div class='p'>220 oz.in = 6,237 x 2,54 = 15,842 kg.cm&lt;/div>

&lt;div class='p'>(tvůj výpočet 2,4 kg.cm by byl horší než nejlevnější servo, ty mají cca 3kg.cm)&lt;/div>

&lt;div class='p'>a tedy na rameně 22cm je maximální zatížení 0,72kg.&lt;/div>

&lt;div class='p'>Jinak dynamické zatížení ti může odlehčit, ale ve většině případů ti naopak
přitíží. Při běžné rychlosti pohybu to asi nebude nijak zásadní (předpokládám,
že se tam nebudou vyskytovat zrychlení srovnatelná s tíhovým zrychlením g =
9,8 m.s-2). Přesto to není žádný zázrak: pokud předpokládáš maximální statické
zatížení 1,5kg, tak je servo dvojnásobně přetížené.''&lt;/div>

&lt;div class='p'>Tak veřejné díky &lt;span class='smile'>&lt;/span>. Teď to dává smysl.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140306">&lt;/a>&lt;/div>

&lt;h2>6. březen 2014 &amp;mdash; Náhradní převodovky&lt;/h2>

&lt;div class='p'>Možná se, stejně jako Sylvio, ptáte, co nového s mravencem? Odpověď vás asi
zklame &amp;mdash; nic. Naplno se věnuji Isabelle a Air Race, kam se letos přihlásilo
&lt;a href='http://www.robotchallenge.org/competition/participants/' class='external'>17. týmů&lt;/a>. FireAnt
tedy stojí na druhé koleji &amp;hellip;&lt;/div>

&lt;div class='p'>Můj „momentální mentální blok” je asi spojen se skutečností, že servo, se
zpětnou vazbou a detekci sil, se může &lt;i>samo&lt;/i> rozbít. To odporuje třetímu
&lt;a href='http://cs.wikipedia.org/wiki/Z%C3%A1kony_robotiky' class='external'>robotickému zákonu&lt;/a> &amp;mdash;
„Robot se musí chránit před poškozením, kromě případů, kdy je to v rozporu s
prvním nebo druhým zákonem.” A to Servo Shield nedělá. A jsem přesvědčený, že
by na to měl schopnosti a defaultně by měl být v nějakém „self-protective”
módu.&lt;/div>

&lt;div class='p'>Prostě výmluvy, výmluvy, &amp;hellip; &lt;span class='wink'>&lt;/span>. Stále mám podezření, že vedle přetížení serv
si zuby vylámal při počátečním zákmitu. V plánu mám zase přejít na jedno servo,
navíc ovládaného přímo pomocí časovače Arduina, a ověřit, že s tím servo nemá
nic společného a že je to všechno jenom chyba Servo Shieldu. Stejně jako jsou
nesmyslné informace o poloze po startu, tak servo může být asi dost
zmatené??&lt;/div>

&lt;div class='p'>Jinak včera dorazil balík s náhradními ozubenými kolečky od Nathana:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/gears.jpg'>&lt;img src='/robots/fireant/gears_t.jpg' alt='náhradní převodovky' title='náhradní převodovky' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/gears.jpg'>náhradní převodovky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;a href='http://cs.wikipedia.org/wiki/Murphyho_z%C3%A1kony' class='external'>Murphyho zákony&lt;/a> fungují
dokonale &amp;mdash; ráno jsem psal Nathanovi, jesli vůbec něco poslal a v poledne mi
to už leželo na stole &lt;span class='smile'>&lt;/span>. Není mi moc jasné, proč mi poslal i náhradní (a hned
několik) horní kryty &amp;hellip; evidentně Nathan ví něco více, na co já musím teprve
přijít &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140313">&lt;/a>&lt;/div>

&lt;h2>13. březen 2014 &amp;mdash; Výměna ozubeného kolečka&lt;/h2>

&lt;div class='p'>Včera jsem si od Heidi s Isabelle dal na chvíli pohov (verze 0 konečně
&lt;a href='http://youtu.be/f6_kiLwPWE0' class='external'>funguje&lt;/a> &lt;span class='smile'>&lt;/span>) a relaxoval jsem s FireAntem.
Výměna ozubených koleček (vyměnil jsem rovnou raději obě) byla až překvapivě
snadná. Základní trik je vytáhnout cca 5mm osičky kolmo nahoru a je to. Otázka
pár sekund a není třeba žádné násilí! K čemu náhradní kryty ale stále nevím &amp;mdash;
jedině mne napadá, že pokud by se osička vylomila, tak usazení v tom krytu není
dost spolehlivé &amp;hellip; hmm. Možná jsem ho opravdu měl rovnou vyměnit. Teď je
opravované servo na ocase a tam snad taková zátěž nebude.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140402">&lt;/a>&lt;/div>

&lt;h2>2. duben 2014 &amp;mdash; Resuscitace&lt;/h2>

&lt;div class='p'>S &lt;a href='https://www.youtube.com/watch?v=brrHXWxjO9k' class='external'>létáním&lt;/a> jsme skončili, tak
zase zpátky na zem. Udělal jsem ráno pár rehabilitačních cvičení s mravencem na
bedně a šlo to. Především jsem schopen 100% zopakovat smrtelné záškuby pokud ho
mezi jednotlivými pokusy zcela nevypnu. Ještě jsem nezkoušel vyndat a zandat
jenom USB kabel, ale to počká do zítra.&lt;/div>

&lt;div class='p'>Je to hrozný, jak se člověk po měsíci nevyzná ve vlastním kódu &amp;mdash; asi přijde
na řadu „jarní řez” a vše co není bezpodmínečně nutné půjde pryč. Ale znám
se, takže to bude spousta přemáhání se &lt;span class='wink'>&lt;/span>. Alespoň, že je tam to
&lt;a href='https://github.com/robotika/fireant/blob/master/README.md' class='external'>README.md&lt;/a> a vím,
že mám používat &lt;i>ver0&lt;/i>.&lt;/div>

&lt;div class='p'>Při kalibrování vyměněných serv jsem si uvědomil, že to je vlastně taková
&lt;i>lékařská preventivní prohlídka&lt;/i>. Není vůbec jasné, zda aktuální stav
(představte si N-tici celých čísel) je dobrý či špatný, ale podle
&lt;a href='https://github.com/robotika/fireant/commit/4a31b20295ec06005dfb7a1b7d10a5e74b04c2a6' class='external'>lékařských
záznamů&lt;/a> lze poznat, jak moc se změnil. A pokud je to výrazně jiné, tak je
něco hodně špatně. Takže teď každý výcvik začne kalibračním testem. Já mu dám
sebedestrukci!&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140408">&lt;/a>&lt;/div>

&lt;h2>8. duben 2014 &amp;mdash; nový cíl: Robotem Rovně&lt;/h2>

&lt;div class='p'>Včera prošel
&lt;a href='http://fandorama.cz/projekty/921778164/robotem-rovne-2014/' class='external'>fandorama projekt
na Robotem Rovně 2014&lt;/a>, takže mám teď definovaný krásný mezicíl s deadline
&lt;b>17. května 2014&lt;/b> &amp;hellip; ujít autonomně co nejdál to rovně půjde &lt;span class='smile'>&lt;/span>. Zrevidoval
jsem
&lt;a href='https://github.com/robotika/fireant/commit/328c515c62db878178982ca80d49c1f0f5232e00' class='external'>kód
na chození&lt;/a> s tím, že jsem opisoval co to šlo z &lt;i>Orion.execGait()&lt;/i> a
původního firmware pro FireAnt. A vůbec jsem se nestyděl. Ani trošku.&lt;/div>

&lt;div class='p'>Ono to totiž spíše připomínalo „reverse engineering” i když jsem měl k
dispozici zdrojové kódy. Je to tak strašně univerzální až je to téměř
nepoužitelné a celkem nečitelné &amp;hellip; nebo prostě už neumím číst komplikovaněji
formulované programy.&lt;/div>

&lt;div class='p'>Pár (možná zásadních) pozorování:&lt;/div>

&lt;ul>
&lt;li>všech šest nohou si drží stejný úhel s odstupem 0.125m od kloubu na těle 
(ověřeno přes math.hypot(1083,625) je 1250.4055342167997)&lt;/li>

&lt;li>střídá se poloha, kdy jsou &lt;b>všechny nohy na zemi&lt;/b> s polohou přesunu trojice
nohou&lt;/li>

&lt;li>dopředný pohyb je symetrický (nohy na zemi se posouvají dozadu zatímco nohy
ve vzduchu jdou dopředu)&lt;/li>

&lt;li>přední a zadní noha je vytočena o 30 stupňů 
(math.degrees(math.atan2(625,1083)) je 29.98927208927858)&lt;/li>
&lt;/ul>

&lt;div class='p'>Věřte nevěřte, vypadá to o řád lépe. Prokládám to vypnutím celého robota před
každým pokusem a pak už ani ty ošklivé záškuby nenastávají. Celkem mi dost
pomohlo &lt;a href='http://www.youtube.com/watch?v=eViWJ8TiZlQ' class='external'>staré video&lt;/a>, kde je
vidět, že ty nohy nejsou v řadě:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 245px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/fireant-uno.jpg'>&lt;img src='/robots/fireant/fireant-uno_t.jpg' alt='základní poloha nohou' title='základní poloha nohou' class='border'  width='239' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/fireant-uno.jpg'>základní poloha nohou&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Co dál? Přemýšlím, zda v rámci robotického úterka na &lt;a href='http://czu.cz/' class='external'>CZU&lt;/a>
neudělat nějaký test chůze po dlažbě. Asi jo &amp;mdash; test first. Na soutěž
&lt;a href='/competitions/robotem-rovne/2014/cs'>Robotem Rovně&lt;/a> bych totiž chtěl vyzkoušet
„ohmatání si dlažby” a srovnáváním se podle mezer. K tomu bude potřeba ještě
pochopit tento řádek:&lt;/div>

&lt;pre>enableIKForce(LegIndex,1,1);	//enable force detect and clear force flags&lt;/pre>

&lt;div class='p'>v kombinaci s tímto IFem:&lt;/div>

&lt;pre>if(!Orion.queryIKForceTrig(LegIndex,1))
				//lower leg&lt;/pre>

&lt;div class='p'>Pak si naivně představuji, že se nohy přizpůsobí terénu.&lt;/div>

&lt;div class='p'>Co jsem zatím moc nepochopil (a tedy zatím nekopíroval) je podivná interpolace
mezi dvěma pozicemi:&lt;/div>

&lt;pre>GaitPosX[LegIndex]+=(Xdist-GaitPosX[LegIndex])/(totalsteps-step);&lt;/pre>

&lt;div class='p'>Podobných řádků najdete v &lt;i>Orion.cpp&lt;/i> mnoho. &lt;i>step =
(legstep*Rate)+SubStep&lt;/i> a &lt;i>totalsteps = UpSteps*Rate&lt;/i>, takže je to jasné?
&lt;span class='wink'>&lt;/span> V zásadě to vypadá, že &lt;i>step&lt;/i> jde od nuly do &lt;i>totalsteps-1&lt;/i>, tj. v
X-ové se posune o ??? Je-li &lt;i>totalsteps&lt;/i> třeba 10, &lt;i>GaitPosX[LegIndex]&lt;/i>
nula a &lt;i>Xdist&lt;/i> jedna. Pak budu mít řadu 0.0, 0.1, 0.1+(1-0.1)/9=0.2,
0.2+(1-0.2)/8=0.3 &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;span class='smile'>&lt;/span> konec záhady hlavolamu. Alespoň chápete, co jsem měl na mysli tím „zpětným
inženýrstvím”. Takže já to interpoluji stejně akorát bych to psal jinak,
např.&lt;/div>

&lt;pre>GaitPosX[LegIndex] += Xdist/totalsteps;&lt;/pre>

&lt;div class='p'>Ale možná je tam magie se zaokrouhlováním (to mne ale na PC v Pythonu až tak
netrápí, zatím). Vlastně to nedělám stejně &amp;mdash; já interpoluji pozici kloubu a ne
souřadnice. Teď mi to přijde jedno, ale to uvidím časem &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140409">&lt;/a>&lt;/div>

&lt;h2>9. duben 2014 &amp;mdash; první outdoor test&lt;/h2>

&lt;div class='p'>Včera jsem vzal mravence poprvé na procházku. A nebylo to tak špatné. Pro
přihlížející hrozná nuda, ale vem je ďas &lt;span class='wink'>&lt;/span>. Prodloužil jsem chůzi na 10 metrů
a po pokusu v mechu zvedl úroveň zdvihu nohou. Jinak jsem to pouštěl stále
do kolečka. Chvíli po dlažbě, chvíli po trávě, jednou do kopce podruhé z kopce
&amp;hellip;&lt;/div>

&lt;div class='p'>Dobře pozorovatelná a opakovatelná chyba byla (asi) v komunikaci. Jak když na
srnu posvítíte dálkovýma &amp;hellip; mravenec chvíli ztuhl a po pár sekundách (?) se
zase pohnul dál. Toto se stalo skoro pokaždé v 10m testu, občas i dvakrát.&lt;/div>

&lt;div class='p'>Druhé pozorování bylo, že homologaci v Písku by nedal. Celkem opakovaně ušel 12
dlaždic rovně a 3 vlevo, tj. cca 7m (dlaždice mají 50x50cm). Toto může klidně
být posunutým těžištěm &amp;mdash; přeci jenom baterka je tam jen tak položená a
kabeláž je právě na levé straně.&lt;/div>

&lt;div class='p'>Baterka se celkem držela. Vidím 12 logů z nich 8 je kompletních, začínal na
8.14V a končil na 7.42V, plus mínus. 60m by tedy na jedno nabití ušel, snad i
násobně více.&lt;/div>

&lt;div class='p'>Tak problémy s časem jsou v logu viditelné:&lt;/div>

&lt;pre>&amp;hellip;
TIME	13733	146
TIME	13879	1461
TIME	15340	152
&amp;hellip;
TIME	12103	143
TIME	12246	573
TIME	12819	148
&amp;hellip;&lt;/pre>

&lt;div class='p'>Toto jsou absolutní milisekundové tiky a rozdíl po sobě jdoucích čísel. První
zásek je tedy skoro 1.5s a druhý půl sekundy. Zvláštní. Na straně Pythonu žádný
timeout a obnovení komunikace není, na straně Arduina je blokované čtení. V
případě problému se tedy ani jedna strana nesnaží situaci vyřešit &amp;hellip; tak kde
se to kousne? Že by moje oblíbené SPI a komunikace se Servo Shield deskou? Jiný
viník mne zatím nenapadá.&lt;/div>

&lt;div class='p'>p.s. koukám teď ještě na průběh chůze u kloubů levé přední nohy:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/walk-graph.png'>&lt;img src='/robots/fireant/walk-graph_t.png' alt='3 serva status+cmd' title='3 serva status+cmd' class='border'  width='320' height='169'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/walk-graph.png'>3 serva status+cmd&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Sloupce ABC jsou aktuální pozice a DEF jsou pak příkazy. To, že je stav
opožděný za příkazy, je očekávané &amp;mdash; výpis jsem přidal do funkce &lt;i>update()&lt;/i>,
která čte stav a posílá nové příkazy. O něco horší je to s množstvím měření. V
&lt;a href='https://github.com/robotika/fireant/blob/master/ver0/fireant.py#L90' class='external'>kódu&lt;/a>
mám ale opravdu &lt;i>def setLegsXYZ( self, legXYZ, num=2 ):&lt;/i>, tj. každý
přechod rozfázuji pouze na dva (jeden mezikrok).&lt;/div>

&lt;div class='p'>Zatím mi nejdivnější přijde soupec F. Není symetrický, protože se jedná o levou
přední nohu, která je trošku (30 stupňů) vystrčená dopředu. Nahoru dolu je
jasné, ale když je na zemi (hodnoty okolo -600), tak ten zlom se mi nelíbí. Že
by to byl ten důvod proč interpolovat v XYZ a nikoliv jednotlivé klouby? &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140410">&lt;/a>&lt;/div>

&lt;h2>10. duben 2014 &amp;mdash; triangle.Unsolvable&lt;/h2>

&lt;div class='p'>Tak jsem to nějak
&lt;a href='https://github.com/robotika/fireant/commit/1a600f04531b208956c74189d1eedaa49f116b6f' class='external'>splácal&lt;/a>
dohromady &amp;hellip; brrr. Divný souřadnicový systém noh, offsety, otočení znamének a
do toho vylítne výjimka &lt;i>triangle.Unsolvable&lt;/i> &amp;hellip; &lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>Jsou to věci, které člověk podvědomě dávno ví a zná, ale dokud se znova
nespálí, tak zapomene, že kamna jsou občas žhavá. Prostě lineární interpolaci
mezi dvěma pozicemi v XYZ prostoru občas nedokážete udělat, protože rameno/noha
by muselo projít nedosažitelnou oblastí. V mém případě to byl samozřejmě bug,
kdy jsem od úhlů zapomněl odečíst offsety a změnit některým znaménka, ale je to
spíše varování, že dříve funkce &lt;i>setLegsXYZ()&lt;/i> byla schopná interpolovat
odkudkoliv kamkoliv a teď už ne.&lt;/div>

&lt;div class='p'>Původně jsem chtěl prezentovat nový graf a jak je to na něm jasné, že teď už je
to opravené (jenom křivky příkazů, přehrávám staré logy s vypnutým &lt;i>identity
assertem&lt;/i>) a ono to zas tak moc vidět není &amp;hellip; ostatně posuďte sami:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/walk-graph2.png'>&lt;img src='/robots/fireant/walk-graph2_t.png' alt='upravená XYZ interpolace' title='upravená XYZ interpolace' class='border'  width='320' height='171'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/walk-graph2.png'>upravená XYZ interpolace&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140415">&lt;/a>&lt;/div>

&lt;h2>15. duben 2014 &amp;mdash; Bluetooth&lt;/h2>

&lt;div class='p'>Dnes ráno jsem se konečně rozhoupal a zapojil (přesněji přilepil) Bluetooth
modul k Arduino desce FireAnta. Jedná se o starší verzi
&lt;a href='http://www.dx.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299#.U0zCrOKQHeQ' class='external'>JY-MCU
Bluetooth Wireless Serial Port Module for Arduino&lt;/a>, kterou mám zapůjčenou od
kolegy z práce. Čtyři piny: zem, napájení, RX, TX &amp;hellip; co by mohlo být jednoduššího?
&lt;span class='wink'>&lt;/span>&lt;/div>

&lt;div class='p'>Nejprve jsem zapojil pouze napájení. Na modulu není žádná indikace, ale na
notebooku se objevilo nové zařízení &lt;i>H-C-2010-06-01&lt;/i>. Klasicky to chtělo PIN,
ale naštěstí fungoval jeden ze tří, které jsem kdy v životě na Bluetooth
zařízeních potkal: 0000, 1111 a 1234. Připojilo se to a vytvořil se COM10. Tato
část šla až moc podezřele hladce &amp;hellip;&lt;/div>

&lt;div class='p'>Bez velkého přemýšlení jsem zapojil zbývající piny na Arduino porty 8 a 9 s
tím, že to zkusím a případně v kódu následně prohodím &amp;hellip; to nebyl dobrý nápad
:-(. Nejen že to nefungovalo, ale když teď nad tím trošku přemýšlím, tak jsem
mohl obě strany snadno odpálit (a BT modul možná odpálil?). HW rozhodně není
moje silná stránka. Pokusný kód je na
&lt;a href='https://github.com/robotika/fireant/blob/master/bluetooth/bluetooth.ino' class='external'>githubu&lt;/a>,
ale zatím to nefunguje.&lt;/div>

&lt;div class='p'>A k čemu to má celé být? Chci mravence ovládat z Android telefonu a nejsnazším
řešením se zdá být právě modrozub. Asi bych si měl pořádně přečíst
&lt;a href='http://www.instructables.com/id/Androino-Talk-with-an-Arduino-from-your-Android-d/' class='external'>zdroj&lt;/a>,
ze kterého čerpám.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140416">&lt;/a>&lt;/div>

&lt;h2>16. duben 2014 &amp;mdash; Bluetooth revised&lt;/h2>

&lt;div class='p'>„Pěkný obrázek, polovina příkladu”, alespoň tak to říkala moje profesorka
matematiky (Jahelková) na GWP &amp;hellip; a měla pravdu &lt;span class='smile'>&lt;/span>. Původní obrázek jsem našel na
&lt;a href='http://www.dealextreme.com/customerphotos/quarantined/201108/80711-62c3fc11-39cf-4998-9b9e-334fecf41cf8.jpg' class='external'>DealExtreme.com&lt;/a>:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/bluetooth-module.jpg'>&lt;img src='/robots/fireant/bluetooth-module_t.jpg' alt='Zapojení BT modulu' title='Zapojení BT modulu' class='border'  width='320' height='204'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/bluetooth-module.jpg'>Zapojení BT modulu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Je z něj pěkně vidět zapojení pinu RX, TX, kde je PIO11, pro přechod na
posílání AT příkazu (dokumentace je např.
&lt;a href='http://www.linotux.ch/arduino/HC-0305_serial_module_AT_commamd_set_201104_revised.pdf' class='external'>zde&lt;/a>)
&amp;hellip; tak uvidíme. Druhý pokus.&lt;/div>

&lt;div class='p'>Vedle správného zapojení PINu se chystám změnit rychlost komunikace. Nějak mi
nedošlo, že na modulu není žádná autodetekce a musím tedy použít co je tam
právě nastavené. Ondra, kterému modul patří, říkal, že zkoušel maximální
rychlosti, takže by to mělo být spíše někde okolo 57600. A nebo přepnout do AT
modu a zeptat se na 38400.&lt;/div>

&lt;pre>BMSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic = false);&lt;/pre>

&lt;div class='p'>Tj. jestli koukám správně na zapojení, tak &lt;i>BMSerial bluetooth(8,9);&lt;/i> bylo
v pořádku. No ale nefunguje to. Čas na snídani &amp;hellip;&lt;/div>

&lt;div class='p'>&amp;hellip; tak to vidím na test v práci. Modul je na 3.3V, ale podle
&lt;a href='http://www.spezial.cz/pdf/EM_Datasheet_OBS410.pdf' class='external'>dokumentace&lt;/a> je modul
možné napájet 5V a i UART piny by měly 5V zvládnout. Nikoliv však &lt;i>Logic HIGH
level input voltage all other IO pins&lt;/i>, který je 3.35V. Pavel S. mne v mailu
uklidňoval, že prohozenim RX/TX bych modul odpálit neměl, tak uvidíme. Čeká vás
minimálně ještě jedno pokračování &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>&lt;a id="140416b">&lt;/a>&lt;/div>

&lt;h2>Křemíkové nebe&lt;/h2>

&lt;div class='p'>A je hotovo. Ptal jsem se ještě Ondry na „permission to kill”, ale nemyslel
jsem to moc vážně. No nic, modul je mrtvý a já nepoučitelný. Hlavně mi nikdo
nic už raději nepůjčujte &amp;hellip;&lt;/div>

&lt;div class='p'>BT modul je na 3.3V a ta dokumentace, co jsem zmiňoval dříve je k nějakému
úplně jinému modulu. V práci mi Ondra potvrdil, že modul stále funguje a že ta
záhadná rychlost je 38400baud. I zkusil test, že to běží na 5V, i když to už
bylo mimo specifikaci &amp;hellip; not good idea.&lt;/div>

&lt;div class='p'>No zapojil jsem to blbě. Vlastně hůř už to snad ani nešlo. Nejprve modul nešlo
detekovat, tak jsem uzemnil PIN 34. Podařilo se mi znova získat COM10 (Pavle,
potvrzuji, že je tam zrada se dvěma COMy &amp;hellip; COM11 byl k dispozici stále ale
byl k ničemu a šlo ho otevřít i když se zařízení tvářilo jako odpojené).
Napájení 5V je na krajním trojpinu s jumperem, ALE na všech ostatních
trojpinech je v tomto místě signál. A uprostřed je neregulovaných 8V. Sigh.
Malá rána a smrad spálené elektroniky &amp;hellip;&lt;/div>

&lt;div class='p'>Tak dobrou noc.&lt;/div>

&lt;div class='p'>p.s. na 90% jsem ten BT modul odpálil prvním úspěšně poslaným bajtem a časová
souslednost tomu odpovídala. Dokud se nesnažil na výstupní pin psát tak se
statečně držel, ale když měl mít na výstupu 0V, tak baterka byla příliš
silný soupeř :-(&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140417">&lt;/a>&lt;/div>

&lt;h2>17. duben 2014 &amp;mdash; Zádušní mše&lt;/h2>

&lt;div class='p'>V rámci zádušní mše za &lt;i>BT H-C-2010-06-01&lt;/i> jsem na uklidněnou
&lt;a href='https://github.com/robotika/fireant/commit/23056d695f84025d4a96961b71f1b6236737308a' class='external'>dodal
mravencovi trošku inteligence&lt;/a> (když už já ji nemám). Celkem pěkné cvičení s
generátorama. Do první polohy se už nevrhá slepě, ale v závislosti na aktuální
pozici nohou to protažení chvíli trvá &amp;hellip; ale stejně jsem myšlenkama trošku
jinde a přemýšlím, jak tu smutnou novinu Ondrovi dneska řeknu. Asi ať si přečte
novinky na &lt;a href='http://robotika.cz' class='external'>robotika.cz&lt;/a>.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140418">&lt;/a>&lt;/div>

&lt;h2>18. duben 2014 &amp;mdash; Basic Micro Studio&lt;/h2>

&lt;div class='p'>Původně jsem chtěl psát o něčem úplně jiném, ale nová vlna poznání trumfla
polemiku na téma volně dostupných informací. Jen ochutnávka na následujících
dvou fotografiích:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/servo-shield-hidden.jpg'>&lt;img src='/robots/fireant/servo-shield-hidden_t.jpg' alt='FA Due - nečitelný nápis' title='FA Due - nečitelný nápis' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/servo-shield-hidden.jpg'>FA Due - nečitelný nápis&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/servo-shield-h8-3687.jpg'>&lt;img src='/robots/fireant/servo-shield-h8-3687_t.jpg' alt='FA Uno - H8/3687' title='FA Uno - H8/3687' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/servo-shield-h8-3687.jpg'>FA Uno - H8/3687&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Jak vypadá ten vyšší trumf? Konečně jsem pochopil, proč ve dříve zmiňovaných
zdrojácích k Servo Shieldu (psaných v BASICu) nemůžu najít velikosti pulzů pro
zjišťování aktuální pozice a síly serva. Ono to tam totiž není! A kde to tedy
sakra je? Vše je to zakopané ještě o další vrstvu hlouběji v knihovnách pro
&lt;b>Basic Micro Studio&lt;/b>.&lt;/div>

&lt;div class='p'>&lt;a href='http://en.wikipedia.org/wiki/RTFM' class='external'>RTFM&lt;/a> &amp;hellip; tak jsem si kousek z
&lt;i>manual.pdf&lt;/i> přečetl a na straně 123 jsem narazil na &lt;b>hservo [pin\pos\spd,
..., pinN\posN\spdN]&lt;/b> &lt;i>HSERVO uses a back ground hardware system to control
one or several servos at a time.&lt;/i>. Řeší to i záhadu zpětných lomítek, prostě
se tak kóduje N-tice. Zajímavá byla i další informace: &lt;i>Notes 1 Analog servos
may need to be deactivated. To accomplish this set its position to –24000 on
the BAP 24 and BAP 28 modules and to -30000 on the BAP 40 module and ARC32 dev
board.&lt;/i> Takže teď i vám je jasný „příkaz”&lt;/div>

&lt;pre>hservo [val1&amp;amp;0x1F\-30000+258]&lt;/pre>

&lt;div class='p'>&amp;hellip; no tedy úplně jasné to není. Proč těch +258? V každém případě je to PIN daný
proměnnou val1 a pozice je -30000+258.&lt;/div>

&lt;div class='p'>A jak se to tam celé dostane? Odpověď naleznete na
&lt;a href='http://forums.orionrobotics.com/walking-robots-f6/help-with-blade-hexapod-t81-10.html' class='external'>Orion
fóru&lt;/a>: &lt;i>6) At top of ide, you will see some Drop down lists. In the first one
choose: BasicATOMPro, in the 2nd one choose: "BAP Orion" and in the third one
choose the Com port associated with the DaVinci.&lt;/i> Prostě je to další speciální
Orion knihovna.&lt;/div>

&lt;div class='p'>V binárce: &lt;i>c:\Program Files (x86)\BasicMicro\Basic Micro
Studio\bin\872v3we_18432.bin&lt;/i> si moc nepočtu, i když pro případné hackování
vidím &lt;i>c:\users\acidtech\desktop\basicmicro
source\atomprofirmware\872v3we_18432\872v3we.asm&lt;/i> a G našel jediný
&lt;a href='http://forums.basicmicro.com/atompro-f486/new-atom-pro-firmware-t8100.html' class='external'>relevantní
odkaz&lt;/a> &amp;hellip; takže zase Nathan, ale před osmi lety &lt;span class='smile'>&lt;/span> &amp;hellip; no nic.&lt;/div>

&lt;div class='p'>p.s. tak už jsem snad u jádra pudla resp. na dně, ze kterého se budu moci
odrazit &lt;span class='smile'>&lt;/span>. Pokud v &lt;i>Basic Mircro Studio&lt;/i> odšrktnete v
&lt;i>Tools/Preferences/Basic/Delete Temporary Files&lt;/i>, tak vám zůstane 223kB
&lt;b>orion.ASM&lt;/b> &amp;hellip; a tam už to musí být. Ideální čtení na Velikonoce &lt;span class='wink'>&lt;/span>
A on nějaký „Hello World!” zas tak veliký nebude &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140422">&lt;/a>&lt;/div>

&lt;h2>22. duben 2014 &amp;mdash; FTDI Latency Timer&lt;/h2>

&lt;div class='p'>S tím assemblerem to tak slavné nebylo :-(. V zásadě se klíčová slova převedou
na kódy a ASM mezikrok vyřeší odkazy na proměnné a velikosti skoků. To zajímavé
je v LIB souboru a ten snadno čitelný není.&lt;/div>

&lt;div class='p'>Chci zkusit ještě jednu variantu: naprogramovat H8 Servo Shield v BASICu a
komunikovat přímo s ním. První pokus ve mne nevzbudil příliš důvěry &amp;mdash; mám
takový XP tik, že nejprve mačkám build/test ještě než vůbec něco naprogramuji
&amp;mdash; no spadlo to:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/basic-1st-program.png'>&lt;img src='/robots/fireant/basic-1st-program_t.png' alt='První pád' title='První pád' class='border'  width='320' height='172'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/basic-1st-program.png'>První pád&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Můj první program
&lt;a href='https://github.com/robotika/fireant/blob/master/ver0/basic.bas' class='external'>basic.bas&lt;/a>
zatím nefunguje, ale to se snad podá. Největší obavy mám z toho, že si tímto
pokusem uzavřu přístup dalšímu programování, ale asi nemám na vybranou. Snad
to nebude jako s BT, kdy první úspěch znamenal konec. Servo Shield a Arduino
sdílejí stejný USB-serial převodník, tak jsem napsal ještě
&lt;a href='https://github.com/robotika/fireant/blob/master/nop/nop.ino' class='external'>nop.ino&lt;/a> pro
Arduino, který vůbec nic nedělá a je tedy krásně bezkonfliktní &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Před mým prvním BASIC programem jsem zkoušel ještě původní firmware. Šlo to,
ale strašně dlouho to trvalo (454s &amp;hellip; skoro jak z dob ZX Spectra a kateťáku).
Důvodem je defaultní nastavení „zpoždění” (Latency Timer) u USB FTDI
driveru.  Zenta o tom psal na
&lt;a href='http://forums.orionrobotics.com/walking-robots-f6/kurt-s-build-of-the-fire-ant-t5-10.html' class='external'>fóru&lt;/a>,
ale už jsem to pozapomněl. Konečně něco, co se může hodit i jinde &amp;hellip; Device
Manager &amp;gt; USB Serial Port (COM8) &amp;gt; Port Settings &amp;gt; Advanced &amp;hellip; &amp;gt;
Latency Timer (msec) &amp;hellip; změnit z původních 16 na 1. Pak naprogramování Orion
knihovny trvalo necelou minutu &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/ftdi-latency-timer.png'>&lt;img src='/robots/fireant/ftdi-latency-timer_t.png' alt='FTDI Latency Timer' title='FTDI Latency Timer' class='border'  width='320' height='227'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/ftdi-latency-timer.png'>FTDI Latency Timer&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140423">&lt;/a>&lt;/div>

&lt;h2>23. duben 2014 &amp;mdash; BASIC Hello World!&lt;/h2>

&lt;div class='p'>Dnes ráno mne to programování v BASICu chvíli celkem i bavilo &lt;span class='smile'>&lt;/span>. Ukázkový
„Hello World!” z manuálu mi nejprve zadřel terminál a vypisoval nesmysly, ale
přidáním 10ms pauzy už jsem dostal to co chci:&lt;/div>

&lt;pre>main
	serout s_out, i9600, ["Hello Word!",13]
	pause 10
	goto main&lt;/pre>

&lt;div class='p'>Je pěkné, že &lt;i>Basic Micro Studio&lt;/i> má rovnou integrované terminály a tak stačí
kliknout na TAB a člověk vidí aktuální výstupy. Potěšil i &lt;b>DEC&lt;/b>, což je
„příkaz” pro konverzi čísla na textový desítkový zápis:&lt;/div>

&lt;pre>ADCSR = 0x30	;start scanning AD conversion
serout s_out, i9600, [DEC ADDRA,13]&lt;/pre>

&lt;div class='p'>&amp;hellip; tento příklad posílá stav baterky.&lt;/div>

&lt;div class='p'>Co se mi zatím nepodařilo rozchodit jsou nezdokumentované funkce
„HSERVOFEEDBACK', ,,hservofbpos” a „hservofbpwr”. Domnívám se, že tou první
celou mašinérii zapnu a pomocí dalších dvou funkcí pak můžu číst polohu serva a
aktuální sílu. Když je dám obě do kódu, tak to řve na &lt;i>undefined reference&lt;/i>,
ale přitom &lt;i>Orion.prj&lt;/i> žádnou specialitu s extra knihovnou nemá?! (resp. jí
zatím nevidím)&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140424">&lt;/a>&lt;/div>

&lt;h2>24. duben 2014 &amp;mdash; Pomoz si sám &amp;hellip;&lt;/h2>

&lt;div class='p'>To byla zase úžasná hodinka s kompilátorem &amp;hellip; přistupoval jsem k tomu
matematicky, půlením intervalu. Když Orion kód funguje a můj malý kód
nefunguje, přesněji nejde zlinkovat, tak někde na půli cesty musí být ta
magická instrukce/parametr/define/čert ví co. Nakopíroval jsem všechny zdrojáky
do jednoho a to zkompilovat šlo (32kB). Pak jsem odmazával a odmazával, rušil
závislosti a stále to zkompilovat šlo (16kB, 13kB, 12kB, 6kB). A pak to přišlo
&lt;span class='smile'>&lt;/span>. Po smazání relativně malého kousku kódu se objevila hláška:&lt;/div>

&lt;pre>C:\Program Files (x86)\BasicMicro\Basic Micro Studio\bin\ld.exe : Unsupported .stab relocation
c:\md\git\fireant\basicv0\basicv0.o(.text+0x568): undefined reference to `HSERVOFBPWR'
C:\Program Files (x86)\BasicMicro\Basic Micro Studio\bin\ld.exe : Unsupported .stab relocation
c:\md\git\fireant\basicv0\basicv0.o(.text+0x56e): undefined reference to `HSERVOFBPWR_OFFSET'&lt;/pre>

&lt;div class='p'>V programu se musí vyskytovat příkaz &lt;b>hservo[cokoliv\cokoliv]&lt;/b> &amp;hellip; a pak&lt;/div>

&lt;pre>tmp var word
HSERVOFEEDBACK
tmp = hservofbpwr( 21 )&lt;/pre>

&lt;div class='p'>zkompilovat jde. Průzračné, není-liž pravda?! &amp;hellip; F &amp;hellip; někdy mám pocit, že je
ten život na podobné nesmysly příliš krátký.&lt;/div>

&lt;div class='p'>&amp;hellip; tak ještě malé ranní pokračování. Když se &lt;i>hservo&lt;/i> v programu vyskytuje,
tak to stačí k úspěšnému linkování, ale stejně to nefunguje &lt;span class='smile'>&lt;/span>. Je to třeba
ještě zavolat (pro detaily viz
&lt;a href='https://github.com/robotika/fireant/commit/44d2450a9dbeca3b5f0603caaccbfb28f1ba9a06' class='external'>github&lt;/a>).
Servo 21 tedy slepě posílám do polohy 0, což je naštěstí celkem rozumná poloha.
A výstupy mne zprvu zmátly, ale vás určitě ne &lt;span class='wink'>&lt;/span> &amp;hellip;&lt;/div>

&lt;pre>LogIt: logs/fa140424_062022.log
24768 SERVO 11
24768 SERVO 9
24768 SERVO 8
24768 SERVO 7
24768 SERVO 14
24768 SERVO 7
24768 SERVO 8
24768 SERVO 65506
24768 SERVO 65345
24768 SERVO 65227
24768 SERVO 65224
24768 SERVO 65348
&amp;hellip;&lt;/pre>

&lt;div class='p'>Ano, správně, je to 16bit se znaménkem, tj. místo &lt;i>word&lt;/i> stačí použít
&lt;i>sword&lt;/i>, není-liž pravda?&lt;/div>

&lt;pre>LogIt: logs/fa140424_062341.log
24768 SERVO 4294967219
24768 SERVO 4294967217
24768 SERVO 4294967184
24768 SERVO 4294967186
24768 SERVO 4294967177
24768 SERVO 4294967179
24768 SERVO 4294967185
24768 SERVO 4294967180
&amp;hellip;&lt;/pre>

&lt;div class='p'>WTF by řekli amíci &amp;hellip; &lt;i>sword&lt;/i> bude mít tedy spíše něco společného s
&lt;i>mečem&lt;/i> (fráze „dostat se do křížku” by možná v této situaci byla také
vystižná) &amp;hellip; tak už tak nadšený s &lt;i>DEC&lt;/i> výpisu nejsem. Ona i ta tabulka
typů v manuálu je nějaká divná:&lt;/div>

&lt;pre>Byte 8 0 to 255
SByte 8 -128 to +127
Word 16 0 to 65,535
SWord 32 -32,768 to +32,767
Long 32 0 to 4,294,967,295
SLong 32 -2,147,483,647 to +2,147,483,648&lt;/pre>

&lt;div class='p'>&amp;hellip;. buď je to překlep nebo &lt;i>Word&lt;/i> je opravdu 16bit a &lt;i>SWord&lt;/i> 32bit. Nic,
kašlu na ně. Stejně to budu chtít posílat binárně a pak se teprve uvidí.&lt;/div>

&lt;div class='p'>Jdu teď zkusit pozici &lt;i>-30000&lt;/i>, která by měla servo zastavit &amp;hellip; ale asi už
jste získali nějakou představu, jak moc tomu důvěřuji &amp;hellip;&lt;/div>

&lt;div class='p'>Jo, pěkné! Když to bylo ještě v původní pozici 0, kdy se to bránilo, tak to nic
nedělalo a bránilo se to dál. Když to vypnu a zapnu, tak servo polohu nemění a
data jsou:&lt;/div>

&lt;pre>LogIt: logs/fa140424_065105.log
24768 SERVO 35536
24768 SERVO 35536
24768 SERVO 35536
24768 SERVO 35536&lt;/pre>

&lt;div class='p'>&amp;hellip; volně si tedy pozici &lt;i>35536&lt;/i> interpretuji jako &lt;b>neznámá pozice, servo
vypnuté&lt;/b>. Je tedy čas na magickou &lt;i>-30000+258&lt;/i> opsanou z &lt;i>execute.bas&lt;/i> v
&lt;i>Orion&lt;/i> projektu?? Tak trošku se bojím, aby mi to neuseklo ruku &amp;hellip; přeci
jenom je to predátor.&lt;/div>

&lt;div class='p'>&lt;span class='smile'>&lt;/span> funguje to &amp;hellip; no nic &amp;hellip; no comment. Prostě 258 není kompenzace délky
vykonávání rutiny přerušení. Tak ještě &lt;i>force feedback&lt;/i>, ale to až po snídani
&amp;hellip;&lt;/div>

&lt;div class='p'>p.s. čtení &lt;i>hservofbpwr&lt;/i> něco dělá. Zkopíroval jsem i
&lt;a href='https://github.com/robotika/fireant/commit/a7267d7dbf49b4b178914bd80e8877bdf284fe12' class='external'>servohandler&lt;/a>,
ale obratem ho musel zase vyhodit &amp;hellip; trošku podle očekávání to rozbije
komunikaci po sériové lince:&lt;/div>

&lt;pre>m:\git\fireant\ver0>fireant.py Due walk
LogIt: logs/fa140424_074407.log
1440 : 1548 SERVO 5&amp;amp;077 FORCE 50351
1700 : 1548 SERVO 52077 FORCE 50348
1940 : 1548 SERVO 52073 FORCE 50350
2180 : 1548 S♣RVO 52074 FORCE 50348
2420 : 1548`SERVO 52076 FORCE 50349
2660 : 1548 SERVO 52077 FORCE 50350
2900 : 1548 SERVO 52075 FO$CE 50354
3140 : 1548 SERVO 52077 FORCE 50346
3380 : 1548 SERVO 5207f FORCE 50348
3620 : 1548 SERVO 52075 FORCE 50351
f860 : 1548 SERVO m2071 FORCE 50354
&amp;hellip;&lt;/pre>

&lt;hr/>

&lt;div class='p'>&lt;a id="140425">&lt;/a>&lt;/div>

&lt;h2>25. duben 2014 &amp;mdash; Pseudo-pomocníci&lt;/h2>

&lt;div class='p'>Dnes ráno bych zase plakal &lt;span class='wink'>&lt;/span>. Původně měl být tento příspěvek o časovačích na
H8, ale třeba na to ještě dojde. Sigh. Jsem fakt tak naivní? (případně
si doplňte ošklivější synonyma). Ten BASIC, pěkný jazyc, hlavu mu urazic. Má
pěknou funkci &lt;b>HSEROUT&lt;/b>:&lt;/div>

&lt;pre>Syntax
hserout {uart,}[{modifiers}data1,&amp;hellip;,{modifiers}dataN]&lt;/pre>

&lt;div class='p'>V BASICu jsou (asi nenadávám teď na všechny, ale jenom na tuto micro edici)
jsou proměnné typované (pochybně, alias &lt;i>meč/sword&lt;/i> z minula), ale jsou &amp;hellip;
musí být, nemáte na vybranou. Jinak to nejde zkompilovat. No problem.&lt;/div>

&lt;div class='p'>Pak máte „super univerzální” funkci na posílání viz výše &amp;hellip; pošle vám úplně
všechno na světě &amp;hellip; k tomu &lt;i>modifiers&lt;/i> udělá z čísel případně různé textové
reprezentace (desítkovou, šestnáctkovou, binární, &amp;hellip;). Tak co by jste
čekali, že tato funkce pošle, když jí předáte 16ti bitovou proměnnou (Word)?Já
bych čekal, že &lt;b>ví&lt;/b>, že je 16ti bitová a tak pošle dva bajty. Čert vem
indiány &amp;hellip;  ale možná v tom je zakopaná ta válečná sekyra. Zkrátím to. Pošle
&lt;b>jeden&lt;/b> bajt.&lt;/div>

&lt;div class='p'>Proč tak vyšiluji kvůli takové blbosti? &lt;span class='smile'>&lt;/span> &amp;hellip; prostě mi toto zjištění
„chvíli” trvalo a hledal jsem chybu úplně jinde, jako přetékání času (ale ve
skutečnosti to byla časo-baterka), jak for-cyklus v BASICu zvládá &lt;i>for i=0
to 0&lt;/i> (teď si myslím, že zvládá a jednou to projde) a pod &amp;hellip; No nic, měl bych
to ještě dorazit, jestli je to alespoň pravda. Tady je případně
&lt;a href='https://github.com/robotika/fireant/commit/fc416ca3e8fa61ae5c251f92f06592727cfc873d' class='external'>původní
nefunkční kód&lt;/a>.&lt;/div>

&lt;div class='p'>Pavel S. (fandorama přispěvovatel) mi ráno psal povzbudivý mail a že by původní
řídící software vyhodil a napsal vlastní. Asi k tomuto závěru také brzy dojdu.
Po Heidi se mi stýská, ale přeci to nevzdám? Zbývá 30-25+17 dní &amp;hellip;&lt;/div>

&lt;div class='p'>p.s. bylo by pěkné, kdyby z tohoto fňukání a mlácení kolem sebe vzniklo něco
užitečného, pozitivního &lt;span class='smile'>&lt;/span> &amp;hellip; jako příklad mne napadá
&lt;a href='http://en.wikipedia.org/wiki/Richard_Feynman' class='external'>Feynman&lt;/a> a jeho revize učebnic
pro střední (nebo základní?) školy&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140429">&lt;/a>&lt;/div>

&lt;h2>29. duben 2014 &amp;mdash; Šicí stroj&lt;/h2>

&lt;div class='p'>„Wow, to byl fofr!” &lt;span class='smile'>&lt;/span>
&lt;a href='https://github.com/robotika/fireant/commit/56753235d4dcdb9b67eaf67d8a1e70d25c299bae' class='external'>Verze
1&lt;/a> konečně běhá. Nakonec jsem se rozhodl používat stejné interní API jako má
Orion knihovna, tj. desetiny stupňů pro určování polohy serv. Také
přeindexování pozic serv na jednotlivých pinech jsem dal do nejhlubších funkcí
&lt;i>readStatus()&lt;/i> a &lt;i>writeCmd()&lt;/i>, takže zbytek kódu funguje jako dříve včetně
kalibrace &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Abych byl úplně přesný, tak stejně (naštěstí) nefunguje &lt;span class='wink'>&lt;/span>. Je to zhruba 10x
rychlejší a navíc sbírá info jak o poloze serv tak o aplikované síle. To ale i
znamená, že FireAnt i 10x rychleji šel! Měl bych spíše říci běžel, protože
místo třech pohybu za sekundu (update byl okolo 150ms a jedna interpolace) jich
teď možná udělal třicet. První asociace byla &lt;i>šicí stroj&lt;/i>, od toho název dnešního
příspěvku.&lt;/div>

&lt;div class='p'>Všechno jsem 10x zpomalil, případně 10x zjemnil interpolaci a teď už ušel po
podlaze první metr (ten sprint byl „na robotickém špalku”). V plánu mám ještě
do posílaných zpráv přidat index příkazu (něco podobného jako je v AR Drone
API). Přešel jsem totiž na &lt;i>stream&lt;/i>, který spíše připomíná CAN na Eduru &amp;mdash;
mravenec posílá svůj stav i když se ho nikdo neptá. Myslel jsem, že jednou za
sekundu, ale soudě podle zmiňovaného
&lt;a href='https://github.com/robotika/fireant/commit/56753235d4dcdb9b67eaf67d8a1e70d25c299bae' class='external'>diffu&lt;/a>
vidím u &lt;i>TIMEOUT&lt;/i> hodnotu 100 (ms). Opravím. Problém byl totiž v navazování
komunikace. Na rozdíl od Arduino desky, kde to bylo bez problémů, to tady
chvíli trvá, než se rozjede cyklus „pošli stav, přijmi příkazy”. Po timeoutu
tedy pošle chybovou hlášku &lt;i>ERROR timeout&lt;/i> (moc jsem se s tím nepáral &amp;mdash;
nemám ani LEDky ani bzučák) a aktuální stav.&lt;/div>

&lt;div class='p'>S tou desetinásobnou rychlostí to zatím stále jenom odhaduji. Možná bych měl
podrobněji zmínit ty H8 časovače. Mimochodem dokumentace k H8/3687 je přímo
součástí &lt;i>Basic Micro Studio&lt;/i>, takže fakt nechápu, proč si někdo dal práci s
odstraňováním potisku čipu na Servo Shield desce :-(. Tento čip má tři
časovače: &lt;i>Timer B1&lt;/i>, &lt;i>Timer V&lt;/i> a &lt;i>Timer Z&lt;/i>. První dva jsou 8mi bitové
poslední 16ti bitový. Problém v kombinaci s BASICem je, že netušíte, které
používá „systém”. &lt;i>Timer V&lt;/i> byl vypnutý, ale dovoluje pouze 128 prescaling
a s 8mi bity je moc rychlý.  &lt;i>Timer Z&lt;/i> je pak pravděpodobně používán na
řízení serv včetně zpětné vazby.  Zbývá tedy pouze &lt;i>Timer B1&lt;/i>, který má
dokonce 2048 a 8192 prescaler, ale už je zapnutý.  Použil jsem ho &amp;mdash; čtu jenom
čítač TCB1.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140501">&lt;/a>&lt;/div>

&lt;h2>1. květen 2014 &amp;mdash; BASIC Force&lt;/h2>

&lt;div class='p'>Možná to nebude s tou sílou tak marné, jak jsem si ještě před hodinou myslel. Ostatně posuďte sami:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 326px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/walk-forces.png'>&lt;img src='/robots/fireant/walk-forces_t.png' alt='Síly při chůzi přes práh' title='Síly při chůzi přes práh' class='border'  width='320' height='180'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/walk-forces.png'>Síly při chůzi přes práh&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Na grafu vidíte průběhy pozic a sil pro přední nohy, prostřední kloub. Důležité
pozorování je, že jak směry serv, tak měřená síla jsou znaménkové a symetricky
obrácené. To jestli se mravenec s něčím pere a „neměl by tak tlačit na
pilu” záleží tedy na znaménku! A jak je mým špatným zvykem, koukal jsem na ten
nezajímavý extrém. Na grafu zelená nad 4000 znamená přetížení &amp;hellip; snad &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>Upravil jsem trošku kód pro Servo Shield i PC, aby bylo zřejmé jak moc jednočip
zaostává s realizací příkazů (viz &lt;a href='https://github.com/robotika/fireant/commit/ac5772341e0dea2fdb3bd8479e5eea94a6258b2b' class='external'>diff&lt;/a>), opravil dekódování síly se
znaménkem a teď se chystám (se psem na procházku, ale to sem nepatří) vyzkoušet
ty forceIKTrigger, tj. když prostřední kloub překročí daný limit, tak se nebude
snažit danou nohu dávat níž. Konečně snad tedy také chápu, proč odlišuje
forceTrigger a forceIKTrigger &amp;hellip; zastavit totiž jenom jedno servo je
nedostatečné.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/slugs.jpg'>&lt;img src='/robots/fireant/slugs_t.jpg' alt='Slimáci' title='Slimáci' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/slugs.jpg'>Slimáci&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/slugs2.jpg'>&lt;img src='/robots/fireant/slugs2_t.jpg' alt='Sbírka' title='Sbírka' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/slugs2.jpg'>Sbírka&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/rock-flowers.jpg'>&lt;img src='/robots/fireant/rock-flowers_t.jpg' alt='Skalničky' title='Skalničky' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/rock-flowers.jpg'>Skalničky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&amp;hellip; jenom připomínka, co má vlastně ohnivý mravenec dělat. Slug Killer. Ten
pohled mne na zahradě moc nepotěšil &amp;mdash; tak alespoň kompenzační pohled na
on-line napojené skalničky.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140505">&lt;/a>&lt;/div>

&lt;h2>5. květen 2014 &amp;mdash; rrv0.bas&lt;/h2>

&lt;div class='p'>Dneska jsem vypotil
&lt;a href='https://github.com/robotika/fireant/commit/53cb737c3bf15baebd5dbfb0db1b582db3ec01b5' class='external'>opravdu
pěkný kus kódu&lt;/a> &amp;hellip; fujtajbl. Ale doba je zlá a RR nepočká. Už necelých 14
dní. A nemít funkční verzi 0 mne opravdu hodně znervózňovalo, tak jsem to tam
zadrátoval natvrdo. Do Pythonu jsem přidal výpis:&lt;/div>

&lt;pre>print "\tgosub execute", cmd2&lt;/pre>

&lt;div class='p'>a výstup rovnou použil jako BASIC program. Jelikož nevím, jak v BASICu předávat
pole, tak jsem to raději rozepsal. Všech 24 serv. No jak říkám, fuj!&lt;/div>

&lt;div class='p'>A proč ta hysterie? Bluetooth moduly ještě nedorazily a navíc BASIC kód mi
stále timeoutuje. Teď mám podezření, že se mu ztrácí některé bajty a jelikož
čeká určitý počet, tak nastane timeout. Zároveň si myslím, že nějakou chvíli
trvá než vstupní buffer přes HSERIN je dosupný i kódu v BASICu a jak ho
zpřístupní, tak už je pozdě. To je zatím jen teorie.&lt;/div>

&lt;div class='p'>Jeden pozitivní závěr je, že alespoň tuším, jak rychle běží čas (časovač TCB1).
Nechal jsem mravence pár minut běžet naprázdno a 269.662s na PC odpovídalo
656.654s na H8 &amp;hellip; tj. jeden tik netrvá 1ms, ale 0.41066ms. A to už je poměrně
blízko času pro 20MHz oscilátor a 8192 prescaler (8192/20000000. =
0.0004096).&lt;/div>

&lt;div class='p'>Dnes snad zkusím udělat pár kroku s &lt;a href='http://www.raspberrypi.org/' class='external'>RaspberryPi&lt;/a>
a pak bych hard-coded verzi nemusel použít.&lt;/div>

&lt;div class='p'>p.s. když jsem do kódu chtěl původně přidat i postavení se na nohy, tak už se
to do H8 nevešlo:&lt;/div>

&lt;pre>C:\Program Files (x86)\BasicMicro\Basic Micro Studio\bin\ld.exe : region text is full 
   (m:\git\fireant\robotem-rovne\rrv0.bin section .text)&lt;/pre>

&lt;div class='p'>Až mne tedy uvidíte, jak startuji s mravencem ve vzduchu a pak ho teprve
pokládám, tak vám bude jasné s jakým programem běží &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140506">&lt;/a>&lt;/div>

&lt;h2>6. květen 2014 &amp;mdash; status (11 dní do konce)&lt;/h2>

&lt;div class='p'>Je to bída. Zkoušel jsem včera „Hello World!” v assembleru, rozchodit spojení
FireAnt-RaspberryPi &amp;hellip; o oboje špatně. Ale dokumentovat se mají i neúspěchy,
tak to hackování je v
&lt;a href='https://github.com/robotika/fireant/commit/6ecec0bd557fb1a09805e813a96c280ec4170af6' class='external'>gitu&lt;/a>.&lt;/div>

&lt;h3>RaspberryPI&lt;/h3>

&lt;div class='p'>První kroky šly relativně dobře. Malinu mám zapůjčenou (už zase?! to se mne
nebojí?!! &lt;span class='wink'>&lt;/span> ) včetně instalační SD karty. Napájení přes micro-USB dobíječku,
video kabel jsem musel dokoupit přes vodu v GESu
(&lt;a href='http://www.ges.cz/cz/audio-video-kabel-hdmid-1-GES06914496.html' class='external'>HDMI-DVI&lt;/a>)
a pak rovnou zapojil do monitoru, USBčková myš a klávesnice. Vybral jsem si
první doporučený &lt;a href='http://www.raspbian.org/' class='external'>Raspbian&lt;/a> a už si nevybavuji žádné
problémy/další detaily z pátku, kdy jsem to instaloval. Ethernet stačil také
jenom zapojit &amp;hellip; skoro bych řekl, že tato fáze lepší ani být nemohla &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Git už byl předinstalovaný a stejně tak SSHčko, takže z přepínání monitoru a
klávesnice jsem rychle přešel na další otevřený terminál ve spoustě jiných oken.
Stejně tak Python byl přeinstalovaný, takže dostat tam nejnovější zdrojáky a
githubu byla otázka pár sekund.&lt;/div>

&lt;div class='p'>První zádrhel:&lt;/div>

&lt;pre>piraspberrypi ~/git/fireant/ver1 $ python fireant.py
Traceback (most recent call last):
  File "fireant.py", line 8, in &lt;module>
    import serial
ImportError: No module named serial&lt;/pre>

&lt;div class='p'>Ale nápovědu člověk rychle najde např.
&lt;a href='http://www.raspberrypi.org/forums/viewtopic.php?f=32&amp;amp;t=38360' class='external'>zde&lt;/a>, tj.
stačilo doplnit:&lt;/div>

&lt;pre>sudo apt-get install python-serial&lt;/pre>

&lt;div class='p'>Když už jsem byl v tom instalování, tak jsem tam rovnou dal i OpenCV, jak mi poradil Jakub:&lt;/div>

&lt;pre>sudo apt-get install python-opencv&lt;/pre>

&lt;div class='p'>Chtělo to extra &lt;i>sudo apt-get update&lt;/i>, ale jinak OK. Jen ta verze je taková
divná &amp;mdash; &lt;i>cv2.__version__&lt;/i> vypisuje &lt;i>'$Rev: 4557 $'&lt;/i>. No nic, časem uvidíme.&lt;/div>

&lt;div class='p'>Pak jsem připojil mravence přes USB a inspiroval se
&lt;a href='/robots/fireant/cs#140110'>vlastními poznámkami&lt;/a> k Ubuntu &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;pre>piraspberrypi ~/git/fireant/ver1 $ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 006: ID 0403:a559 Future Technology Devices International, Ltd
Bus 001 Device 005: ID 0603:00f2 Novatek Microelectronics Corp.&lt;/pre>

&lt;div class='p'>Toto bylo OK, stejně tak&lt;/div>

&lt;pre>piraspberrypi ~/git/fireant/ver1 $ dmesg | tail
[   21.735417] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
[   23.388347] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[   27.175692] Adding 102396k swap on /var/swap.  Priority:-1 extents:1 across:102396k SSFS
[ 1280.515285] usb 1-1.2: USB disconnect, device number 4
[ 1323.765045] usb 1-1.2: new full-speed USB device number 6 using dwc_otg
[ 1323.893246] usb 1-1.2: New USB device found, idVendor=0403, idProduct=a559
[ 1323.893287] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1323.893306] usb 1-1.2: Product: Communications Port
[ 1323.893324] usb 1-1.2: Manufacturer: Basic Micro
[ 1323.893341] usb 1-1.2: SerialNumber: BMVNT4DB&lt;/pre>

&lt;div class='p'>Pak jsem přidal zmiňovaný soubor &lt;i>/etc/udev/rules.d/99-usbftdi.rules&lt;/i>. Nešlo mi restartovat pomocí:&lt;/div>

&lt;pre>piraspberrypi ~/git/fireant/ver1 $ sudo restart udev
sudo: restart: command not found&lt;/pre>

&lt;div class='p'>ale fungoval podobně znějící&lt;/div>

&lt;pre>piraspberrypi ~/git/fireant/ver1 $ sudo /etc/init.d/udev restart
[ ok ] Stopping the hotplug events dispatcher: udevd.
[ ok ] Starting the hotplug events dispatcher: udevd.&lt;/pre>

&lt;div class='p'>&amp;hellip; tak možná ta pravidla jsou v Debianu a Ubutu jinak?? Zkusil jsem ještě reboot a zatím nic.&lt;/div>

&lt;h3>Assembler&lt;/h3>

&lt;div class='p'>Říkal jsem si, že napsat ten bufferovaný příjem a vysílání nebude takový
problém, ale zatím je. Civět do těch pár řádek kódu je celkem otrava. Zkoušel
jsem jak BASIC verzi, tak skoro čistou ASM verzi (vše kompiluji v tom &lt;i>Basic
Mirco Studio&lt;/i>) &amp;hellip; ale to se snad podá.&lt;/div>

&lt;div class='p'>Jako inspiraci používám SPI komunikaci z původních Orion zdrojáků. Přečetl jsem
si něco o registrech (jak &lt;i>er0&lt;/i> je 32bit ale přístupný i jako &lt;i>e0&lt;/i> a &lt;i>r0&lt;/i>
16bit nebo dokonce &lt;i>r0l&lt;/i> a &lt;i>r0h&lt;/i> 8bit &amp;hellip; &lt;span class='smile'>&lt;/span> &amp;hellip; jenom si nejsem jist,
jestli všechny kombinace jsou u všech příkazů povolené). Když jsem toto
pochopil, tak mi přišlo, že má Nathan chybu v obsluze přerušení &amp;hellip; ale
třeba z ostatního kódu ví, že &lt;i>e1&lt;/i> je vždy 0 a nikde se nepoužívá?? A nebo to
vždy adresuje 16bit prostor, takže je to jedno &amp;hellip;&lt;/div>

&lt;div class='p'>No nic, jedna zrada byl &lt;i>PMR1&lt;/i> registr, kde se nastavuje TXD výstupní pin.
Kde je ale problém teď moc netuším. Sigh.&lt;/div>

&lt;h2>Šroubky&lt;/h2>

&lt;div class='p'>Ještě jednu „vtipnou” poznámku &amp;mdash; povolují se šroubky. Skoro jako u starých
Merkurových robotů, kde je bylo nutné před každým kolem všechny dotáhnout. Pár
jsem jich tedy už asi poztrácel v trávě a možná je to i vysvětlení, proč levá
zadní noha trošku pokulhávala &amp;hellip;&lt;/div>

&lt;div class='p'>Robotům zdar!&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140512">&lt;/a>&lt;/div>

&lt;h2>12. květen 2014 &amp;mdash; 2D pohyb (5 dní do konce)&lt;/h2>

&lt;div class='p'>Soutěž „Robotem rovně” je sice o tom jet/jít/letět rovně, ale k tomu je
potřeba, přestože to možná na první pohled není zřejmé, i umět trošku zatáčet.
V lepším případě chybu rozpozná robot sám a vyrovná ji, v horším (což bude
můj případ) robota 3x pustíte, upravíte konstanty a třeba mírným zatáčením
dorazí dál.&lt;/div>

&lt;div class='p'>&lt;a href='https://github.com/robotika/fireant/commit/0672889eabd813ebe9c0f4d944f179232cbaa80b' class='external'>Pohyb
do strany&lt;/a> byl ještě relativně triviální. Horší to bylo s otáčením, které jsem
&lt;a href='https://github.com/robotika/fireant/commit/cb70869531b7a466f233e57de1bc682cbef2fedd' class='external'>trošku
odflákl&lt;/a> &amp;mdash; všechny nohy totiž otáčím o stejný úhel, ale měl bych to dělat
podle jejich absolutní pozice. Střed otáčení není tedy úplně dobře definovaný
&amp;hellip; ale možná pro tu korekci 0.3 stupně, co teď používám, je to jedno.&lt;/div>

&lt;div class='p'>Řízení robota přes kabel mi stále selhává (timeout). Přidal jsem do reportů i
číslo bajtu, na kterém to selhává (viz
&lt;a href='https://github.com/robotika/fireant/commit/4e632768123714d2ccefd394ea35b7f0bcadd1df' class='external'>diff&lt;/a>)
a kupodivu je to zatím vždy první bajt (hlavička) a nikoliv nějaký chybějící
bajt uprostřed paketu. Co je ještě divnější, že se mi pakety neztrácí,
„jenom” jsou občas (i v řádu sekundy!) opožděné. Nathan si myslí, že je to
mým USB portem a možná má pravdu. Dnes ráno mi došlo, že je asi trošku jiná
situace, když mám notebook v napájení než když s ním chodím venku s mravencem a
běží z baterky.  Na krabici teď „ušel” 10 metrů bez timeoutu.&lt;/div>

&lt;div class='p'>Mám teď vybitou baterku, tak pokus hned nezopakuji (jo jo, jsou věci, které
nechávám na poslední chvíli &amp;hellip;  dnes koupím druhou &amp;hellip; ano měl jsem to udělat
dávno!).&lt;/div>

&lt;div class='p'>Na 90% budu „soutěžit” s
&lt;a href='https://github.com/robotika/fireant/blob/master/robotem-rovne/rrv0.bas' class='external'>rrv0.bas&lt;/a>,
který před tím vygeneruji v Pythonu s „korekcema šitýma na míru Písku”. Sigh.
Za toto asi pivo od Pavla nevyhraji &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>A co jinak? V pátek dorazily Bluetooth moduly:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/bluetooth-front.jpg'>&lt;img src='/robots/fireant/bluetooth-front_t.jpg' alt='Bluetooth zpředu' title='Bluetooth zpředu' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/bluetooth-front.jpg'>Bluetooth zpředu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/bluetooth-back.jpg'>&lt;img src='/robots/fireant/bluetooth-back_t.jpg' alt='Bluetooth zezadu' title='Bluetooth zezadu' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/bluetooth-back.jpg'>Bluetooth zezadu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Je na nich celkem přesvědčivé &lt;b>3.3V&lt;/b>, tak se mi to hned na těch 5V připojovat
nechce. Teoreticky je to stále stejný modul, jen obalen převodníkem a LEDkama
&amp;hellip; nevím. Ještě mne trošku odrazuje skutečnost, že když to zkoušel kolega v
práci, tak přes Bluetooth se připojil, ale žádná rozumná data nepřenesl (zatím
doufám, že to bylo jen chybnou komunikační rychlostí).&lt;/div>

&lt;div class='p'>Baterka je dobita a Bluetooth zapojen &amp;hellip; kdybych si
&lt;a href='/robots/fireant/cs#140415'>minule&lt;/a> napsal, jaký že to mělo PIN &amp;hellip; &lt;b>1234&lt;/b> a
opsal jsem to zase z toho
&lt;a href='http://www.instructables.com/id/Androino-Talk-with-an-Arduino-from-your-Android-d/' class='external'>původního
článku&lt;/a> a navíc je tam i rychlost &lt;b>9600&lt;/b>. Jen ten čas už mi teď pomalu chybí
&amp;hellip;&lt;/div>

&lt;div class='p'>p.s. tak další 10m test na krabici selhal &amp;hellip; jenom ten timeout tam probliknul :-( &amp;hellip; CRLF &amp;hellip; &lt;a href='https://github.com/robotika/fireant/commit/5854d39487b486d392dcbbb90667e4534691a99e' class='external'>výpis opraven&lt;/a>.&lt;/div>

&lt;div class='p'>p.p.s.s. test se &lt;b>starým notebookem&lt;/b> prošel (jak 10m na krabici, tak 10m
chození po chodbě) &amp;mdash; zatím žádný timeout. Pokud se to potvrdí i venku, tak
dlužím Nathanovi omluvu &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140513">&lt;/a>&lt;/div>

&lt;h2>13. květen 2014 &amp;mdash; Puzzle (4 dny do konce)&lt;/h2>

&lt;div class='p'>Je to taková skládačka a je to se mnou divný: když něco nefunguje, tak je to
„očekávané chování” a když to funguje, tak je to „podezřelé” &lt;span class='wink'>&lt;/span> &amp;hellip; při
zpětném pohledu se mi tento posun moc nelíbí. Ve zkratce nový Bluetooth modul
funguje &lt;span class='smile'>&lt;/span>. Zapojil jsem ho tentokrát správně (ano, 3x jsem to raději
kontroloval &amp;mdash; zase tolik munice na ohňostroje nemám), změnil komunikační
rychlost na 9600 a už to kopíruje znaky z COM8 na COM12 a obráceně.
Potvrzuji, co mi dříve psal Pavel S. &amp;mdash; vznikl COM12 a COM13 s tím, že pro
přímou komunikaci funguje jen ten první. Druhý je asi pro nějaké nastavování,
ale to v této fázi zkoumat neplánuji.&lt;/div>

&lt;div class='p'>Proč „puzzle”? Mám teď kousky skládačky, jenom mi úplně nepasují a nevím, jak
je spojit. Servo shield lze ovládat přes USB/sériový port, ale nevím jak
&lt;i>s_in&lt;/i> a &lt;i>s_out&lt;/i> nahradit, aby používal (v BASICu) &lt;i>RXD_2&lt;/i> a &lt;i>TXD_2&lt;/i>. S
čísly pinů to nesedí. To vidím v generovaném assembleru, že &lt;i>s_in&lt;/i> je ve
kódované jako 0x20, což by odpovídalo pinu &lt;i>P32&lt;/i>, ale na H8/3687 je to ve
skutečnosti &lt;i>P21&lt;/i> nebo nožička číslo 45 &amp;hellip; no jsem zvědav na rozuzlení.
Nathan zatím mlčí a na
&lt;a href='http://forums.orionrobotics.com/post401.html#p401' class='external'>fóru&lt;/a> též.&lt;/div>

&lt;div class='p'>Je tedy čas na malou pauzu a „context switch” do
&lt;a href='/competitions/robotem-rovne/2014/cs#140513'>přípravy Heidi/Isabelle&lt;/a> (včera Jakub
poslal „větrné logy” a ještě jsem je neprošel &amp;hellip; nějak moc robotů &amp;hellip;&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140515">&lt;/a>&lt;/div>

&lt;h2>15. květen 2014 &amp;mdash; SW drát (2 dny do konce)&lt;/h2>

&lt;div class='p'>Mravenec už chodí přes Bluetooth! &lt;span class='smile'>&lt;/span> Tedy pomalinku (9600bps), trošku se u
toho klepe, ale chodí.&lt;/div>

&lt;div class='p'>V čem byly problémy? No skoro škoda slov a čas odejít do důchodu &lt;span class='wink'>&lt;/span>. První byl
s &lt;i>HSERIN&lt;/i> piny &amp;hellip; ono to totiž nejsou piny, ale číslo UARTu. Tj. stačí tam
dát 1 pro první HW UART a 2 pro druhý HW UART. V detailu to ale až tak zřejmé
není. Důležité je, zda zavoláte &lt;i>sethserial1&lt;/i> nebo &lt;i>sethserial2&lt;/i> (nastavuje
rychlost komunikace, počet bitů, paritu a pod). Když totiž zavoláte jenom
&lt;i>sethserial1&lt;/i>, tak pro &lt;b>jakékoliv číslo&lt;/b> budete používat první port, včetně
dvojky. Nevím, zda podobná situace platí i pro &lt;i>setserial2&lt;/i>, ale asi jo. Co mi teď
funguje je nastavení obou a použití 2 jako první parametr u &lt;i>HSERIN&lt;/i>.&lt;/div>

&lt;div class='p'>Druhý problém byla oblíbená zvířátka MOSI a MISO (viz
&lt;a href='/guide/blink/cs'>programování jednočipu&lt;/a>). Že to je Master, In, Slave, Out vím,
ale při volání &lt;i>BMSerial&lt;/i> jsem to otočil.&lt;/div>

&lt;div class='p'>Do třetice to byl pull-up na vstupním pinu Bluetooth modulu. Asi by mi to
nedošlo, ale pozorování divně blikající zelenou LEDku, kde jsem odpovídající
pin zapomněl přepnout na výstupní,  trošku pomohlo &lt;span class='smile'>&lt;/span>. A je to i ve
zdrojácích &lt;i>BMSerial&lt;/i>, který mi předtím fungoval:&lt;/div>

&lt;pre>pinMode(tx, OUTPUT);
if (!_inverse_logic)
  	digitalWrite(tx, HIGH);
pinMode(rx, INPUT);
if (!_inverse_logic)
    digitalWrite(rx, HIGH);  // pullup for normal logic!&lt;/pre>

&lt;div class='p'>&amp;hellip; teď koukám, že bych asi měl otočit i výstup na TXD. Nevím. Jak je to
&lt;a href='https://github.com/robotika/fireant/commit/ec391ec852a43abcc7d65e74d7cc14aee6150f23' class='external'>teď
to funguje&lt;/a>.&lt;/div>

&lt;div class='p'>Co by to chtělo dál? Změnit rychlost AT příkazy na 38400, naprogramovat mobil,
aby si společně pokecali a pak už to jenom několik dní zkoušet &amp;hellip; ha ha ha.&lt;/div>

&lt;div class='p'>p.s. pokud se ptáte, co že to byl ten &lt;i>SW drát&lt;/i>, tak jsem z Arduina udělal
propojovací desku &amp;mdash; prostě místo drátků jsou tam IFy, a na základě přečtené
hodnoty se zapne druhý výstup &amp;hellip; viz
&lt;a href='https://github.com/robotika/fireant/blob/master/wire/wire.ino' class='external'>wire.ino&lt;/a>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140516">&lt;/a>&lt;/div>

&lt;h2>16. květen 2014 &amp;mdash; Vylepšený SW drát (1 den do konce)&lt;/h2>

&lt;div class='p'>Dnes ráno jsem zkoušel přepnout Bluetooth modul na vyšší rychlost, ale zatím
neúspěšně. Udělal jsem si k tomu
&lt;a href='https://github.com/robotika/fireant/commit/b3fd059312f740650a0c907b66ade7584524dff8' class='external'>přímé
zapojení&lt;/a>, které by tolerovalo všechny rychlosti. Pak jsem na chvíli propojil
KEY a 5V a přepnul se do AT režimu. Chvilku jsem si hrál s CR LF v putty
(nevěděl jsem, jak poslat LF &amp;hellip; tak příště
&lt;a href='http://comp.terminals.narkive.com/K5YqczS3/i-want-putty-to-send-a-linefeed-and-carriage-return-everytime-i-press-cr' class='external'>Ctrl+J&lt;/a>),
ale pak se dočetl &lt;i>It’s different from HC-04 and HC-06 (They don’t need
terminator).&lt;/i>, tj. na &lt;i>AT&lt;/i> to po chvilce odpoví &lt;i>OK&lt;/i>. Ale to je všechno
:-(.  Verzi, adresu nebo rychlost UARTu jsem z něj nevyrazil.&lt;/div>

&lt;div class='p'>Ještě tam psali: &lt;i>When PIN34 keeps high level, all commands can be used.
Otherwise, only some of them can be used&lt;/i>. Ale asi by jim ublížilo říci, které
AT příkazy fungují a které ne. Je tedy možné, že to zapojení bylo nedokonalé
(což asi bylo, protože to neskočilo na rychlost 38400). Zkusím to ještě v práci
s pomocí HW oddělení &amp;hellip;&lt;/div>

&lt;div class='p'>Ještě poznámka k drátování &amp;mdash; v gitu je teď verze, která
&lt;a href='https://github.com/robotika/fireant/commit/f05e11a40a57875f7476f73b43bdd4ad7e54a798' class='external'>kombinuje
USB s Bluetooth&lt;/a>. Je mi jasné, že si koleduji, ale &amp;hellip; nepřijde vám ideální
mít možnost mravence připojit buď po kabelu nebo bezdrátově aniž by bylo nutné
ho znova flashovat??&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140519">&lt;/a>&lt;/div>

&lt;h2>19. květen 2014 &amp;mdash; FireAnt na RORO14&lt;/h2>

&lt;div class='p'>Znáte ten pocit, kdy si myslíte, že extra den nebo dokonce jenom hodina by
stačila k dodělání soutěžní verze? Zkusili jste to pak dodělat ještě po
soutěži, jestli jste si jenom „nelhali do kapsy”? &lt;span class='wink'>&lt;/span> Podobné myšlenky jsem
měl i já s mravencem a modro-zubem &amp;hellip;&lt;/div>

&lt;div class='p'>Jak jsem psal, tak mravenec už chodil připojený přes Bluetooth na rychlosti
9600 (i Sylvio ho tak viděl chodit, za což jsem byl rád). Ale nedařilo se mi
změnit rychlost na vyšší. &lt;b>AT+UART?&lt;/b> nic nedělal :-(. Už jste si pomalu
zvykly na různé obskurnosti, tak tady je další: „je naprosto zásadní, jaký
firmware v Bluetooth modulu máte!”. Hardware je stále stejný (ten základní BT
modul), ale HC-03, HC-04, HC-05 a HC-06 používají &lt;b>různé piny&lt;/b> a &lt;b>různé AT
příkazy!&lt;/b> Já mám firmware &lt;i>HC-06&lt;/i> a tam je pro nastavení rychlosti příkaz
&lt;b>AT+BAUD6&lt;/b>. Ne, nebudu se rozčilovat.&lt;/div>

&lt;div class='p'>Na toto zase přišel Ondra a tak jsme překonfigurovali modul na 38400, ale tím
to přestalo fungovat úplně. Ten &lt;i>SW drát&lt;/i> nebyl úplně dobrý nápad. Vyhodil
jsem blikání LEDkama, zakázal přerušení a stále se mi ztrácela půlka bajtů po
kabelu a přímé propojení se Servo Shieldem nefungovalo vůbec.&lt;/div>

&lt;div class='p'>Ještě bych zmínil, že ani nevím jak se dostat zpět na funkčních 9600. &lt;i>Key&lt;/i>
pin slouží k přerušení spojení s masterem. Na původních 9600 jste automaticky
přešly do AT příkazů, pokud nebyl vytvořen pár. Teď už se tam dostat neumím.&lt;/div>

&lt;div class='p'>Co ten SW drát? Ondra říkal, že je dobré pokud na pulz padnou alespoň 3 vzorky.
Pro rychlost 38400 bps, to je 384000 změn (10 bitů = start bit, 8bitů, stop
bit) a 3x to jsme na 1MHz. A to už ten Atmel moc věcí udělat nestihne.&lt;/div>

&lt;div class='p'>Ještě bych zmínil vyhraný boj Ondry, když připojil modul k jeho RS232
převodníku. Nefungovalo to a musel si odpájet jednu ochrannou diodu &amp;hellip; prostě
je do modul pro Arduino a jinde můžete mít problém.&lt;/div>

&lt;div class='p'>K RORO14 se teď už asi nedostanu, tak alespoň malá upoutávka, kdy jsem nestačil
s dronou včas odstartovat (stahovala staré video):&lt;/div>

&lt;div class='p'>&lt;iframe width="640" height="360" src="//www.youtube.com/embed/dtikhbNQ9ds?feature=player_detailpage" frameborder="0" allowfullscreen>&lt;/iframe>&lt;/div>

&lt;div class='p'>p.s. na 9600 to lze vrátit příkazem &lt;b>AT+BAUD4&lt;/b>, který ještě na původní
rychlosti odpoví &lt;i>OK9600&lt;/i>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140520">&lt;/a>&lt;/div>

&lt;h2>20. květen 2014 &amp;mdash; Hrátky s Assemblerem&lt;/h2>

&lt;div class='p'>Zkouším v tom „extra dni navíc” rozchodit mravence a zatím mi to podle
očekávání moc nejde. Pro inspiraci používám
&lt;a href='http://www.nongnu.org/avr-libc/user-manual/inline_asm.html' class='external'>Inline Assembler
Cookbook&lt;/a> a data sheet ATmega32. Dobrá zpráva je, že už se zase umím přepnout
do AT příkazů &amp;mdash; je nutné na notebooku vypnout Bluetooth, aby se nemohly
párovat, a pak se k modulu připojit na dané rychlosti. Zkoušel jsem tedy 19200,
což bylo o něco lepší, ale nikoliv ideální.&lt;/div>

&lt;div class='p'>Tak tady je první pokus:&lt;/div>

&lt;pre>// PD0 = RXD &amp;hellip; PIND=0x09, PORTD=0x0B
// PD1 = TXD
// PB3 = MOSI &amp;hellip; PINB=0x03, PORTB=0x05
// PB4 = MISO
// PB0 = 8 BT_RXD
// PB1 = 9 BT_TXD

// Bluetooth &lt;-> Servo Shield
void loop()
{
  asm volatile (
    "cli"  "\n\t" // disable interrupts
   "1:" " sbis 0x3,0"   "\n\t"
    "cbi 0x5,3"    "\n\t"
    "sbic 0x3,0"   "\n\t"
    "sbi 0x5,3"    "\n\t"
    
    "sbis 0x3,4"   "\n\t"  // 1/2/3
    "cbi 0x5,1"    "\n\t"  // 2
    "sbic 0x3,4"   "\n\t"
    "sbi 0x5,1"    "\n\t" // 2
    "rjmp 1b" "\n\t" // 2
    ::);
}&lt;/pre>

&lt;div class='p'>Funkce &lt;i>setup()&lt;/i> je stále stejná a tu najdete
&lt;a href='https://github.com/robotika/fireant/blob/master/wire/wire.ino' class='external'>v gitu&lt;/a>.
&lt;b>cli&lt;/b> vypíná přerušení, &lt;b>sbis&lt;/b> (Skip if Bit in I/O Register is Set)
přeskakuje když je vstupní bit nastavený a &lt;b>sbic&lt;/b> (Skip if Bit in I/O
Register Cleared) naopak když je nulový, &lt;b>sbi&lt;/b> nastav bit, &lt;b>cbi&lt;/b> vynuluj
bit a konečně &lt;b>rjmp&lt;/b> je relativní skok.&lt;/div>

&lt;div class='p'>Trošku zrada je to se čtením portů, kdy je nutné číst &lt;i>PINB&lt;/i>, ale zapisovat
do &lt;i>PORTB&lt;/i>, ale to je ve všech jazycích, takže zas tak velké překvapení to
není.&lt;/div>

&lt;div class='p'>Je to tedy hotové? No není.  Ty dvojky jsou časy kolik to trvá a pokud chceme
na 16MHz mít tři vzorky pro komunikační rychlost 38400, tak máme jenom 16
&lt;i>tiků&lt;/i>. Nevím, jak se to přesně u &lt;i>sbis&lt;/i> a &lt;i>sbic&lt;/i> počítá (jedno číslo je
když je podmínka splněna, ale co je to třetí nevím &amp;hellip; možná v závislosti na
typu portu) &amp;mdash; pokud počítám správně tak 18?&lt;/div>

&lt;div class='p'>Do kódu jsem přidal &lt;i>while smyčku&lt;/i>, aby přesněji detekovala změnu na portu
(tj. využívám faktu, že jak MISO/MOSI, tak BT_RXD/B_TXD jsou na stejném portu).&lt;/div>

&lt;pre>"2:"
    "in r0, 0x3"   "\n\t" // 1
    "eor r0, r1"   "\n\t" // 1
    "breq 2b"      "\n\t" // 1/2&lt;/pre>

&lt;div class='p'>&lt;a href='https://github.com/robotika/fireant/commit/d3e74f1c447b178046306f63472ad7b91306e5f1' class='external'>celý
diff&lt;/a> &amp;hellip; no na první pohled to moc nepomohlo. Je pěkně vidět, že bitové
operace jsou dvojnásob dražší a my navíc potřebujeme sledovat dva piny a
nastavovat dva piny. Konečně 1 se přenese s jiným zpožděním než 0.&lt;/div>

&lt;div class='p'>Jak to paralelizovat? Čtu bit 0 a 4 a zapisuji je do 3 a 1. Pokud budu mít
bitové masky, tak 0 -&amp;gt; 0, 1 -&amp;gt; 16, 8 -&amp;gt; 2 a 9 -&amp;gt; 18. Tomu říkám
kvíz &lt;span class='smile'>&lt;/span> Celkem by mne zajímalo, jaká vás napadají řešení &amp;hellip; něco jako když
&lt;i>sedí holka s klukem v parku na lavičce a kluk se po chvíli zeptá&lt;/i> „myslíš
na to na co myslím já?”. &lt;i>Dívka odpoví&lt;/i> „Ano, a kolik ti to vyšlo?” (starý
vtip o matfyzácích)&lt;/div>

&lt;div class='p'>Sigh, tak je to zase
&lt;a href='https://github.com/robotika/fireant/commit/4f12c0d408c5f8f7af28f6ffef6d0b343b2240ea' class='external'>prohra&lt;/a>.
Zkusil jsem verzi přímo se čtením a zapisováním portu a dostal nejprve &lt;i>Error:
register number above 15 required&lt;/i>, takže jsem &lt;i>r0&lt;/i> a &lt;i>r1&lt;/i> posunul na
&lt;i>r20&lt;/i> a &lt;i>r21&lt;/i>, ale je tam asi ještě nějaká bota. Nefunguje to.&lt;/div>

&lt;div class='p'>p.s. &lt;i>matfyzáckou&lt;/i> úlohu jsem chtěl řešit přes +24 a prohazování nybble
(instrukce &lt;i>swap&lt;/i>), ale přes ty bity v registrech mi to přišlo čitelnější a
zhruba stejně rychlé &amp;hellip; ale stále nefunkční.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140521">&lt;/a>&lt;/div>

&lt;h2>21. květen 2014 &amp;mdash; CBI vs. CBR&lt;/h2>

&lt;ul>
&lt;li>&lt;b>CBI&lt;/b> &amp;mdash; Clear Bit in I/O Register&lt;/li>

&lt;li>&lt;b>CBR&lt;/b> &amp;mdash; Clear Bit(s) in Register&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;i>Táááák a teď v všichni koukejte jak umím plavat/programovat v
assembleru!!!!!!&lt;/i> (&lt;a href='http://www.csfd.cz/film/108776-skolni-vylet/' class='external'>Mach a
Šebestová/Školní výlet&lt;/a>). Včera jsem nečekal a rovnou volal o pomoc &amp;hellip;
MartinaL. Obratem mi odpověděl, &lt;i>... tak jsem na to kouknul a na 99% procent
je tam obvyklá chyba. Instrukce cbr, sbr nepracuje s číslem bitu, ale s bitovou
maskou (můžeš nastavit, resp. nulovat více bitů zároveň).&lt;/i>&lt;/div>

&lt;div class='p'>Proč proboha? Vždyť kdybych to takto chtěl udělat tak už na to mám instrukce
&lt;b>ANDI&lt;/b> a &lt;b>ORI&lt;/b>, tj. bitový AND/OR s konstantou, která také trvá jeden tik.
Je fakt, že to &lt;i>Bit(s)&lt;/i> mi přišlo divné, když jsem to poprvé četl, ale
nevěnoval jsem tomu dostatečnou pozornost. Chyba! Ale ne moje &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Troufale bych si dovolil tvrdit, že je špatně navržená instrukční sada,
přesněji název je zavádějící a navíc celá instrukce redundantní. Jako argument
bych použil citaci &lt;b>je tam obvyklá chyba&lt;/b>, tj. když tuto chybu dělají často i
ostatní, tak je to designově špatně. Před lety mi kolega z práce „vnutil”
knížku
&lt;a href='http://itu.dk/people/miguel/DesignReadings/Readings/!other%20readings/The%20Design%20of%20Everyday%20Things%20-%20Don%20Norman.pdf' class='external'>The
Design of Everyday Things - Don Norman&lt;/a> (nevím, jestli toto naskenované PDFko
bude stále k dispozici) &amp;hellip; je to starší knížka a je o &lt;i>každodenních věcech&lt;/i>
jako jsou kliky u dveří a pod. Norman popisuje základní psychologické přístupy
a např. vysvětluje, co bylo skutečnou příčinou výbuchu atomové elektrárny v USA
&amp;hellip; a podle mne CBI/CBR do této kategorie patří.&lt;/div>

&lt;div class='p'>Mile mne potěšilo, že během včerejška přišel ještě další mail od VlastimilD:
&lt;i>tak mě napadlo "vzít to přes STATUS", taková vzpomínka, že to nějak šlo, a
ono asi ano - zkuste instrukce BST a BLD. Jinak SBR nebere číslo bitu, ale
masku, je to vlastně alias pro ORI.&lt;/i>&lt;/div>

&lt;div class='p'>Martinovi i Vlastimilovi díky. Úpravy už jste mohli vidět v gitu:
&lt;a href='https://github.com/robotika/fireant/commit/b65223464cb0195c59e84e09e4b126d894d379ae' class='external'>oprava
CBR&lt;/a> a
&lt;a href='https://github.com/robotika/fireant/commit/3defea4c1b1584fc81ad48f8143a9ce9e1eea11d' class='external'>použití
T bitu&lt;/a>.&lt;/div>

&lt;div class='p'>Myslíte, že mne teď mravenec poslouchá? Komunikuje, ale se spousty &lt;i>timeouts&lt;/i>
a tak je neustále „v křeči”. Takže jenom rychlostí smyčky to asi nebylo. Ale
už také vím, že ani extra den přípravy do soutěže by k „inteligentní chůzi”
nepomohl.&lt;/div>

&lt;div class='p'>MartinL navíc psal, že tam mám chybu ve výpočtu: &lt;i>A tedy pro rychlost 38400bd
(bitů za sekundu) to dává více než 46 vzorků na bit (16e6 / 9 / 38400 = 46,3
což je více než dostatečné).  Ty tvoje hodnoty se mi nezdají (nevím jak jsi na
ně přišel).&lt;/i> &amp;hellip; a má samozřejmě pravdu. 38400 je přenosová rychlost v
&lt;b>bitech&lt;/b> a nikoliv v &lt;b>bajtech&lt;/b> tj. žádné násobení 10 &amp;hellip; bylo by naopak
třeba dělit deseti, kdyby člověk chtěl vědět, kolik se přenese bajtů za
sekundu.&lt;/div>

&lt;div class='p'>Tak že by to bylo tou ochrannou diodou, co s ní Ondra zápasil v práci?&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a id="140523">&lt;/a>&lt;/div>

&lt;h2>23. květen 2014 &amp;mdash; The Ant End&lt;/h2>

&lt;div class='p'>Když jsem se před mnoha lety bavil s jedním amíkem, jak je to tam u nich
hrozné, že se na kole nedá nikam jet, protože jsou všechny cesty slepé (dead
end), tak se divil, jaké mrtvé mravence mám na mysli (dead ants) &lt;span class='smile'>&lt;/span>. Je
pomalu na čase tento blog skončit. Pokud se vám bude stýskat, tak můžete
podpořit blog/článek o &lt;a href='/competitions/fieldrobot/2014/cs'>Field Robot Event
2014&lt;/a>, kde se s mravencem budu snažit o nějakou &lt;i>autonomous show&lt;/i> &amp;hellip;
slimáky jsem si převedl na &lt;a href='/robots/fireant/holding-ball.jpg'>žluté golfové míčky&lt;/a> (budou
použité v Task3) a až jednou FireAnta nasadím ve skleníku, tak si tam nejspíše
udělám kontrastní „zónu smrti”, kde budou slimáci snadno rozpoznatelní.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 222px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/vicemiss-robot.jpg'>&lt;img src='/robots/fireant/vicemiss-robot_t.jpg' alt='vicemiss Robot z RORO14' title='vicemiss Robot z RORO14' class='border'  width='216' height='300'/>&lt;/a>&lt;br/>
&lt;a href='/robots/fireant/vicemiss-robot.jpg'>vicemiss Robot z RORO14&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/fireant-roro14a.jpg'>&lt;img src='/robots/fireant/fireant-roro14a_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/fireant-roro14b.jpg'>&lt;img src='/robots/fireant/fireant-roro14b_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/robots/fireant/fireant-roro14c.jpg'>&lt;img src='/robots/fireant/fireant-roro14c_t.jpg' alt='' title='' class='border'  width='220' height='146'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;i>autorem snímků z RORO14 je Zdeněk Kakáč&lt;/i>&lt;/div>

&lt;h3>Poděkování&lt;/h3>

&lt;div class='p'>Nejprve děkuji čtyřem fandorama přispěvovatelům: Josef S., Pavel S., Dušan K. a
Robert F.&lt;/div>

&lt;div class='p'>Dále bych chtěl poděkovat aktivním čtenářům, kteří mne opravovali a pomohli mi
z různých depresí &lt;span class='smile'>&lt;/span>, tj. Martin L. a Vlastimil D.&lt;/div>

&lt;div class='p'>Konečně velký dík mají moji HW kolegové z práce Ondra a Honza za ochotnou pomoc
s nejrůznějšími problémy.&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a href='/robots/fireant/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Testování leteckého gyroskopu</title>
	<link rel='alternate' href="http://localhost/articles/airborne-gyroscope/cs"/>
	<id>http://localhost/articles/airborne-gyroscope/cs</id>
	<updated>2013-10-11T00:00:00Z</updated>
	<author><name>Karel Čermák</name></author>
	<summary type='html'> Se stávajícím systémem (rok 2012) na robotu Explorer jsme měli drobný problém
&amp;mdash; uměl měřit úhly jen v rozmezí cca 60°. Bylo zapotřebí vyměnit gyroskop za
jiný. Opět spíše náhodou se podařilo zakoupit starý vojenský, asi letecký
gyroskop na Aukru. Ten umí měřit v rozsahu celých 360°. Optimální přístroj pro
navigaci v terénu. Bylo rozhodnuto.  Vyměníme gyro, doplníme měřicí kolečko na
odměřování ujeté vzdálenosti a hurá na další soutěž. Jak se později ukázalo,
tak jednoduché to zase nebylo&amp;hellip;
 </summary>
	<content type='html'> 
&lt;h2>EXPLORER – druhý rok plný změn.&lt;/h2>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/airborne-gyroscope/explorer.jpg'>&lt;img src='/articles/airborne-gyroscope/explorer_t.jpg' alt='Explorer' title='Explorer' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/airborne-gyroscope/explorer.jpg'>Explorer&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Po úspěšném absolvování naší první robotické soutěže jsme začali přemýšlet, co
by tenhle náš drobeček ještě mohl zvládnout. Závěr byl rychlý. Nic. Na ostatní
soutěže, založené na jiné strategii prostě nemá šanci. Nejzajímavější pro nás
byla soutěž &lt;a href='/competitions/roboorienteering/cs'>RoboOrienteering&lt;/a>, ale s touhle technikou – určitě ne. Vzhledem k
naší neznalosti systému GPS a zpracování obrazu z kamery jsme rychle skončili
zase u gyroskopu a odometrie. Se stávajícím systémem to ale nešlo, neboť ten
umí měřit úhly jen v rozmezí cca 60°. Bylo zapotřebí vyměnit gyroskop za jiný.
Opět spíše náhodou se podařilo zakoupit starý vojenský, asi letecký gyroskop na
Aukru. Ten umí měřit v rozsahu celých 360°. Optimální přístroj pro navigaci v
terénu. Bylo rozhodnuto. Vyměníme gyro, doplníme měřicí kolečko na odměřování
ujeté vzdálenosti a hurá na další soutěž. Jak se později ukázalo, tak
jednoduché to zase nebylo.&lt;/div>

&lt;div class='p'>Začalo se s výměnou gyra, aby se stihla alespoň soutěž &lt;a href='/competitions/robotem-rovne/cs'>RORO&lt;/a>. Nový přírůstek se
naprosto liší od původního tankového. Z celého systému vedou jen tři dráty –
vinutí motoru. Všechny ostatní kompenzační cívky jsou doslova s vojenskou
precizností uloženy uvnitř takřka nedobytné kovové konstrukce. Roztočit ho
nebyl žádný problém – stačilo ho napojit místo původního a hle – ono to vše
funguje. Koukali jsme na něj jako na zázrak, neboť všechny ty kompenzace, které
mi trvaly alespoň částečně zprovoznit několik měsíců má v sobě. A naprosto
funkční. Pokud se s ním moc neklepe, tak dokáže „stát” na místě bez hnutí i
celé hodiny a to, že se Země otáčí, je mu fuk. Optimální navigace na &lt;a href='/competitions/robotem-rovne/cs'>RORO&lt;/a>.&lt;/div>

&lt;div class='p'>Bylo
třeba dodělat jen elektronické snímání úhlu natočení, mírně přizpůsobit řídící
program motorů a mohl vyrazit na soutěž do Písku. Po zkušenosti z loňského kola
byl opět zvolen magnetický snímač a magnet připevněný na osu gyra. Vzhledem ke
zcela odlišnému výstupu ze snímače nebylo z původní elektroniky použito téměř
nic a vznikla nová deska s několika procesory Picaxe. Už od počátku téhle
přestavby bylo počítáno i s přidáním odměřování ujeté vzdálenosti a struktura
byla navržena jako otevřený systém, do kterého se budou postupně doplňovat
další komponenty jako např. sonary. Přidalo se odměřovací kolo umístěné
uprostřed podvozku, aby ujetá vzdálenost byla ovlivněna otáčením co nejméně a
začaly přípravy na Písek. Opět nespočet zkušebních jízd na dlouhé chodbě naší
školy, kde se dá trénovat i za nepříznivého jarního počasí. Vynaložená práce
přinesla své ovoce. Výsledky byly vynikající. Alespoň jsme se to v tuhle chvíli
domnívali. První úkol byl splněn – na Písek jsme připraveni. Můžeme začít
uvažovat o soutěži &lt;a href='/competitions/roboorienteering/cs'>RoboOrienteering&lt;/a>. Dali jsme dohromady program pro výpočet
vzdáleností a azimutů jednotlivých bodů vypočtených ze zadaných souřadnic GPS a
naivně si mysleli, že odometrie bude to pravé ořechové.&lt;/div>

&lt;div class='p'>Mezitím se udělalo venku počasí, které dovolovalo vyjet do terénu. Záhy se
ukázalo, že vše je jinak. Stabilní gyroskop si dělá na trávě co chce, kolečko
neměří tak, jak bylo od něho očekáváno a náš milý robot se šine naprosto jinam,
než by měl.&lt;/div>

&lt;div class='p'>Soutěž Robotem rovně je za dveřmi, a vrátit zpět původní tankový gyroskop
vhledem k provedeným úpravám už nebylo myslitelné. Zbývalo tedy jediné.
Odpružit nový gyroskop a tak alespoň částečně eliminovat vibrace způsobené při
jízdě po nerovném povrchu. Systémem uložení na pružiny se to částečně podařilo
a s nejistým pocitem jsme se vydali vstříc osudu do Písku. Zaměřování laserem
na odrazovku jsme ponechali a čekali na výsledek.&lt;/div>

&lt;div class='p'>Ten nebyl vůbec špatný – druhé místo bylo velmi pěkné. I když popravdě –
očekával jsem, že dojedeme dál. To ale asi každý. O tom tahle soutěž vlastně
je.&lt;/div>

&lt;div class='p'>A závěr – vcelku stručný – ne každá změna je změna k lepšímu. Pro příští sezónu
vrátíme zpět tankové gyro.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/airborne-gyroscope/gyro1.jpg'>&lt;img src='/articles/airborne-gyroscope/gyro1_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/airborne-gyroscope/gyro2.jpg'>&lt;img src='/articles/airborne-gyroscope/gyro2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/airborne-gyroscope/gyro3.jpg'>&lt;img src='/articles/airborne-gyroscope/gyro3_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/airborne-gyroscope/explorer-front.jpg'>&lt;img src='/articles/airborne-gyroscope/explorer-front_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/airborne-gyroscope/explorer-back.jpg'>&lt;img src='/articles/airborne-gyroscope/explorer-back_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/airborne-gyroscope/explorer-top.jpg'>&lt;img src='/articles/airborne-gyroscope/explorer-top_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>Rozcestník&lt;/h2>

&lt;ul>
&lt;li>soutěž &lt;a href='/competitions/robotem-rovne/cs'>Robotem rovně&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.ddmml.cz/seznam-krouzku/14-pocitacova-robotika/' class='external'>Robotický klub Mariánské Lázně&lt;/a>&lt;/li>

&lt;li>&lt;a href='/articles/airborne-gyroscope/cs#email'>kontaktní formulář&lt;/a>&lt;/li>
&lt;/ul>
 </content>
</entry>
<entry>
	<title>RoboOrienteering 2013</title>
	<link rel='alternate' href="http://localhost/competitions/roboorienteering/2013/cs"/>
	<id>http://localhost/competitions/roboorienteering/2013/cs</id>
	<updated>2012-06-20T00:00:00Z</updated>
	<author><name>Martin Dlouhý</name></author>
	<summary type='html'> Čtvrtý ročník soutěže „RoboOrienteering” se konal sobotu &lt;b>15. června 2013&lt;/b>
zpět na domácí půdě v Zámeckém parku v Rychnově nad Kněžnou. Jela se tři kola s
tím, že pravidla byla téměř stejná jako minulý rok. Létající roboti byli
tolerováni. Bylo nás pět (týmů) a bylo to fajn. Spíše takové malé robotické
soustředění.  &lt;b>Blog update:&lt;/b> 22/7 &amp;mdash; THE END
 </summary>
	<content type='html'> 
&lt;div class='p'>Toto je verze 0 &lt;a href='http://fandorama.cz' class='external'>fandorama článku&lt;/a>. Do konce června bych
ho rád ještě nechal „živý” a přidával postupně příspěvky od jednotlivých
týmů, jestli dorazí. Stejně tak bych nechal ještě otevřený blog a vymyslel, co
dál &amp;hellip;&lt;/div>

&lt;ul>
&lt;li>2013-06-21 &amp;mdash; doplněné info od Short Circuits Prague&lt;/li>

&lt;li>2013-06-24 &amp;mdash; doplněné info od Plecharts&lt;/li>
&lt;/ul>

&lt;div class='p'>Projet parkem přes kontrolní body (oranžové kužele) a dostat se do cíle není
vůbec triviální. Zatímco pro kolové roboty jsou celkem výzva kořeny dosahající
i několik metrů od kmene, pro létající roboty jsou to obrovské koruny stromů a
větve i 10m velké (a až k zemi).  Kolem kuželů je křídou označený kruh o
poloměru 2.5m, kde musí robot nějakým způsobem naznačit, že kontrolní bod/cíl
dosáhl.  Extra body jsou za dotek kužele, který se ale letos už nesměl
shazovat.  Tým dostane GPS souřadnice bodů 10 minut před startem a na jejich
průjezd má 30 minut. Pro rok 2014 budou pravidla trošku jiná, ale to bych si
nechal na závěr.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/tree1.jpg'>&lt;img src='/competitions/roboorienteering/2013/tree1_t.jpg' alt='' title='' class='border'  width='165' height='220'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/signpost.jpg'>&lt;img src='/competitions/roboorienteering/2013/signpost_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 171px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/tree2.jpg'>&lt;img src='/competitions/roboorienteering/2013/tree2_t.jpg' alt='' title='' class='border'  width='165' height='220'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h1>Robotický klub Mariánské lázně&lt;/h1>

&lt;div class='p'>Výkonem dominoval Robotický klub Mariánské Lázně, pod vedením Karla Čermáka.
Loni ve Svinařích bych býval měl „drobné” výtky, až se mi z toho ani nechtělo
sepisovat článek na &lt;a href='http://robotika.cz' class='external'>robotika.cz&lt;/a>, ale letos to byl
neodiskutovatelně nejlépe připravený tým, který si plně právem zasloužil
vítězství.&lt;/div>

&lt;div class='p'>Povídání se pravděpodobně dočkáme později (zatím si můžete přečíst o
&lt;a href='/articles/explorer/cs'>integraci gyroskopu z tanku T72&lt;/a>, ve frontě už čeká
pokračování experimentů s leteckým gyroskopem, pak bude RoboOrienteering 2012
ve Svinařích &amp;hellip; ve zkratce, buďte trpěliví a budete odměněni rozsáhlejšími
články).&lt;/div>

&lt;div class='p'>Co jsem já mohl na robotu snadno pozorovat a z povídání zachytit bylo: pěkné
odpružení během jízdy, laserový dálkoměr (pouze jeden paprsek, nikoliv skener)
a zvláštní integrace pneumatiky, kdy robot si u kužele pro skenování prostoru
natvrdo „sednul”, aby to pružení nerušilo. Z kamery se pak ověřovala barva
detekovaného objektu a pokud byla oranžová, tak robot vyrazil vpřed dokud ho
nezastavily infra nárazníky kombinované s mechanickým nárazníkem.&lt;/div>

&lt;div class='p'>Co jsem stihl robota vidět v akci, tak fungoval bezchybně jen v posledním kole
se zasekl ve svahu cca 1m od cíle.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/marianky1.jpg'>&lt;img src='/competitions/roboorienteering/2013/marianky1_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/marianky2.jpg'>&lt;img src='/competitions/roboorienteering/2013/marianky2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/marianky3.jpg'>&lt;img src='/competitions/roboorienteering/2013/marianky3_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h1>Short Circuits Prague&lt;/h1>

&lt;div class='p'>„Šorti” podcenili přípravu, resp. z toho co povídal Pavel na to nezbyl
de-facto žádný čas. Jelo se s loňským kódem s částečně integrovaným laserem.
Na RoboOrienteeringu je tento tým často smolařem &amp;mdash; nezapomenutelé bylo
poslední kolo loni ve Svinařích, kdy robot dojel do cíle, ale nezastavil a
vyrazil na Prahu. Po několika minutách jízdy tak ztratil všechny body. Pokud
by ho tenkrát ručně zastavili, tak by byl robot diskvalifikován.&lt;/div>

&lt;div class='p'>Letos to bylo podobné a zrada číhala na zemi, v kořenech. Minimálně ve dvou,
ale možná dokonce ve všech třech, kolech robot najel na nízký kořen a břichem
se o něj zasekl. Do příště Dan zkusí zaříznout mírně vyčnívající šroubky a
vyleštit podvozek, aby se snáz smýkal. Ale on si Murphy zase něco najde &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/short-circuits1.jpg'>&lt;img src='/competitions/roboorienteering/2013/short-circuits1_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/short-circuits2.jpg'>&lt;img src='/competitions/roboorienteering/2013/short-circuits2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>Doplňující info od Pavla Jiroutka:&lt;/div>

&lt;div class='p'>Letošního Roboorienteeringu jsme se poprvé zúčastnili v naší nejnovější
konfiguraci, tedy s lidarem, novým notebookem a karosérií. Kvůli nedostatku
času (většímu než standardně) jsme se dostali jen k nejnutnějším úpravám. V
první řadě to bylo zprovoznění hlavního programu a debugovacích nástrojů na
novém notebooku s i7 procesorem a Windows 8. Ačkoliv už jsme na tomto systému
odjeli soutěž v Písku, ještě pořád se občas objeví nečekaný problém s
kompatibilitou ovladačů hardwaru a knihoven, nebo problém způsobený jiným
operačním systémem a procesorem. V kódu, který fungoval roky stabilně, se nám
začaly dít divné věci. Nutno říct, že za vším byly doposud identifikovány chyby
v kódu - zejména použití vláken na non-thread-safe modulech, které na
pomalejším HW překvapivě problémy nezpůsobovalo. Další úpravy od loňska se
týkaly použití lidaru pro detekci překážek místo sonarů. Lidar jsme pro tento
účel nasměrovali přímo dopředu, aby jeho rovina nekolidovala pokud možno s
trávou. Ještě večer před soutěží jsme měli zapojenou novou inerciální jednotku,
kterou chceme používat jako kompas s kompenzací náklonu. Po testech se ale
ukázalo, že jednotku ještě nemáme plně pod kontrolou a výsledná data vykazují
menší stabilitu, než data z našeho tradičního kompasu. Do soutěže jsme šli tedy
bez IMU.&lt;/div>

&lt;div class='p'>Soutěž samotná nebyla žádné drama. Tedy snad kromě homologace, při které jsme
mezi řečí zjistili, že se od minulého ročníku změnila pravidla. Návody,
pravidla a podobné typy dokumentů samozřejmě nečteme. Během asi hodiny před
závodem jsme upravili robota tak, aby neporážel kužely, ale snažil se jen
dotknout, a aby hlasitě oznamoval dosažení waypointu. Dotek kuželu jsme
vyřešili úpravou náklonu kamery, kterou jsme umístili tak, aby ztratila kužel
ze zorného pole právě v okamžiku, kdy je potřeba zabrzdit, aby se kužel
nezvrhnul. Jednoduchá metoda zafungovala při testech i v závodu překvapivě
dobře. První kolo závodu bylo pro nás poněkud divoké, protože robot jel o
poznání jinam, než kam měl. Chvíli jsme si dokonce mysleli, že jsme mu
zapomněli změnit trasu z testovacích waypointů. Nakonec se ukázalo, že problém
byl v hodně rozhozené GPS na začátku závodu a v hodně posunutém kompasu. Před
sezónou jsme přesunuli kompas ze stožáru pod kapotu robota a nevšimli jsme si,
že se začal chovat hodně jinak než na stožáru. V Písku se problém díky rovné
cestě a relativnímu požití kompasu neprojevil. Při Roboorienteering ale
používáme kompas absolutně a to se ukázalo jako problém. Pro druhé kolo jsme
tedy kompas přesunuli zpět na stožár a nově ho nakalibrovali. I přes tyto
problémy robot dojel v prvním kole poměrně daleko. Bohužel skončil - stejně
jako ve všech dalších kolech - uvíznutý na kořenech stromu, které nevnímal jako
překážku. Do druhého kola jsme zavedli drobnou změnu pro stabilizaci GPS -
robota jsme nechali jet prvních několik desítek sekund rovně, až pak jsme
přešli na standardní RO plánování. Ve druhém a třetím kole jel robot celkem
stabilně, bohužel se v obou případech zaseknul podvozkem o nízké překážky na
zemi. Tento problém budeme kompenzovat pravděpodobně pouze hardwarově -
vyztužením odpružení podvozku a odstraněním všech šroubů, které vyčnívají pod
robotem.&lt;/div>

&lt;div class='p'>V soutěži jsme skončili na druhém místě z celkem čtyř soutěžících robotů.
Děkujeme organizátorům za příjemnou soutěž s dobrým zázemím. Pořád máme
potenciál na zlepšování, proto se rádi zúčastníme i v dalších ročnících.&lt;/div>

&lt;hr/>

&lt;h1>Heidi (čtyřtulka)&lt;/h1>

&lt;div class='p'>Heidi už znáte a detailnější info z příprav si můžete přečíst níže v blogu, tak
alespoň jak to na soutěži vypadalo.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/heidi.jpg'>&lt;img src='/competitions/roboorienteering/2013/heidi_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/heidi-3rd-place.jpg'>&lt;img src='/competitions/roboorienteering/2013/heidi-3rd-place_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Navigační program pro RO2013 v kostce:&lt;/div>

&lt;ol>
&lt;li>převeď GPS souřadnice do roviny a spočítej úhly a vzdálenosti&lt;/li>

&lt;li>pro každý směr a vzdálenost leť v 1m širokém koridoru ve výšce 1.5m (korekce v Y, Z a A)&lt;/li>

&lt;li>pulzně udržuj rychlost 1m/s (pokud je vyšší nastav úhel 0 jinak „20% výkon”)&lt;/li>

&lt;li>pokud je překážka blíže jak 1m, couvej 1.5m, udělej 360 stupňový sken na místě a natoč se směrem největší mezery&lt;/li>

&lt;li>jinak pokud je překážka blíže jak 2m, posuň osu koridoru na další 4m letu o 1m vlevo&lt;/li>

&lt;li>během přechodu 0.5s ignoruj další překážky (aby nenasbíral nesmyslný offset ještě z původní překážky)&lt;/li>

&lt;li>po uletění požadované vzdálenosti zastav a indikuj dosažení kontrolního bodu
změnou letové hladiny na místě na 0.5m, 2.5m a zpět na 1.5&lt;/li>
&lt;/ol>

&lt;h2>První kolo: &lt;a href='http://youtu.be/Nl3E0W2zchI' class='external'>H-video&lt;/a> &lt;a href='http://www.youtube.com/watch?v=IjB9SXKkQpU' class='external'>D-video&lt;/a>&lt;/h2>

&lt;div class='p'>Heidi odstartovala, vyrazila správným směrem na kužel a přeletěla ho. V cestě
měla strom a tak udělala 360 stupňový sken. A nic. Zůstala viset ve vzduchu. Na
konzoli jsem viděl:&lt;/div>

&lt;pre>Hover&amp;hellip;
Traceback (most recent call last):
  File "M:\hg\md\heidi\ardrone.py", line 1440, in &lt;module>
    roboorienteering( replayLog=replayLog, metaLog=metaLog, dirDist=dirDist )
  File "M:\hg\md\heidi\ardrone.py", line 1360, in roboorienteering
    ROVer2( drone, dirDist )
  File "M:\hg\md\heidi\ardrone.py", line 1344, in ROVer2
    ROStep( self, desiredSpeed=desiredSpeed, desiredHeading=desiredHeading, dist
=desiredDist )
  File "M:\hg\md\heidi\ardrone.py", line 1174, in ROStep
    turnToAngle( gapDir )
TypeError: turnToAngle() takes at least 2 arguments (1 given)&lt;/pre>

&lt;div class='p'>&amp;hellip; sigh, hrubka. Kus kódu, který jsem nevyzkoušel. Ani v simulátoru. Mám padáka.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 294px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/ro-1st-run.png'>&lt;img src='/competitions/roboorienteering/2013/ro-1st-run_t.png' alt='' title='' class='border'  width='288' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Za zmínku ještě stojí 4x „Navdata TIMEOUT!”, kde v první nastal cca 3m od
startu. Následuje skok v pozici cca 0.5m zpět. Je dost možné, že takto se
chyba v pozici snadno zhoršila.&lt;/div>

&lt;h2>Druhé kolo: &lt;a href='http://youtu.be/bgtrss-DUl0' class='external'>H-video&lt;/a> &lt;a href='http://www.youtube.com/watch?v=qb_VX2CBCss' class='external'>D-video&lt;/a>&lt;/h2>

&lt;div class='p'>Druhý start byl na nakloněné cestičce v blízkosti hned několika stromů. Nejprve
„oblíbené” couvání cca 3m a pak téměř ukázkové vyhýbání překážce. Na videu to
vypadá jako náraz, ale byl to spíše jemný dotek, rychlé couvání, sken a vyrazil
do volného prostoru &lt;span class='smile'>&lt;/span>. Nevím, jak ostatním, ale mne se ten začátek líbil.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 294px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/ro-2nd-run.png'>&lt;img src='/competitions/roboorienteering/2013/ro-2nd-run_t.png' alt='Tanec na startu' title='Tanec na startu' class='border'  width='288' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/ro-2nd-run.png'>Tanec na startu&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Pak už zase video-dokumentace chybí. Podle odometrie se dostala až na (12.1,
-48.0), tj. cca 50m od startu. Kontrolní bod ale zase minula a tak bodově pouze
přímá vzdálenost k cíli &amp;hellip; a v realitě zase byla dál.&lt;/div>

&lt;div class='p'>Algoritmus jsem načrtnul v úvodu, tak teď realita. Sonarových měření moc není
(měřil jsem s frekvencí 10Hz), takže každé měření jsem bral vážně (to obecně
nedoporučuji, ale nějak začít musíte). Ze sonarového logu vidím: &amp;hellip;, 2.58,
1.02, 1.09, 1.05, 2.61, 0.86, 0.73, 0.63, 0.53, 0.39, 0.26, 0.19, 2.65, 1.65,
2.12, 0.23, 0.32, 0.43, 0.57, 0.74, 5.09 &amp;hellip; těch 10cm za 0.1s zhruba odpovídá
požadované rychlosti 1m/s. Horší je to v „integračním logu”:&lt;/div>

&lt;pre>(105, 261)
43
(107, 73)
43
(109, 53)
66
(112, 19)
43
(113, 265)
22&lt;/pre>

&lt;div class='p'>První měření pod 1m tedy nezachytil, pak mu jedno vypadlo, pak dvě &amp;hellip; ale
stejně už na tu naměřenou vzdálenost 0.73m reagoval. Zajímavé by teď bylo
zjistit, jaký podíl na tom nárazu má setrvačnost (přechod z dopředného letu
1m/s na couvání) a jaké opožděná informace (tj. že už byl 19cm od stromu, když
zaregistroval těch 73cm). Zkusil bych to později porovnat s časovými známkami u
videa.&lt;/div>

&lt;h2>Třetí kolo: &lt;a href='http://youtu.be/ROmB0cM-4Ro' class='external'>H-video&lt;/a> &lt;a href='http://www.youtube.com/watch?v=NDMZlqraqCc' class='external'>D-video&lt;/a>&lt;/h2>

&lt;div class='p'>Poslední kolo bylo rozhodující. Před Heidi startoval ostravský Aegis, který z
neznámého důvodu vyrazil přesně opačným směrem, než byl cíl. Když Heidi krátce
po startu nabourala do první lampy a získala by tak jen 1 bod, tak byl
všeobecný souhlas pokus opakovat. Třetí kola byla tedy dvě.&lt;/div>

&lt;div class='p'>V prvním pokusu 2x detekoval překážku do dvou metrů a posunul tedy koridor o 2m
vlevo. Následuje detekce ve 14cm a celkem tvrdý náraz. Ze sonaru žádné včasné
varování nepřišlo: 3.33, 2.07, 0.14, 0.12. Sloup byl nejspíš moc vlevo.&lt;/div>

&lt;div class='p'>Následovalo couvání, sken, lokalizace Davida a hrr na něj &lt;span class='smile'>&lt;/span>. Mezeru si sice
vybrala pěknou, ale v kódu „trošku” chybí myšlenka co dál. Drona se tedy
„vrátí do starých kolejí” a má stejný problém s lampou jako krátce po startu.
Znova couvání, znova sken, ale třetí „vyjednávání” s lampou už nepřežije a
silný boční náraz končí automatickým vypnutím motorů.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 294px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/ro-3rd-run.png'>&lt;img src='/competitions/roboorienteering/2013/ro-3rd-run_t.png' alt='' title='' class='border'  width='288' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h2>Třetí kolo, druhý pokus: &lt;a href='http://youtu.be/VV5lp6tVvm8' class='external'>H-video&lt;/a> &lt;a href='http://www.youtube.com/watch?v=HPqVEPC33AM' class='external'>D-video&lt;/a>&lt;/h2>

&lt;div class='p'>Druhý pokus se neměl počítat &amp;mdash; ono na pořadí by to nic nezměnilo, jenom ten
rozdíl mezi 3. a 4. místem by byl bodově méně výrazný. Ale jsem za něj rád.
Vlastně to byl nejlepší let. Ono to soutěžení je i psychologická záležitost.
Kdybych si se čtyřtulkou hrál na zahradě, tak metr od větví stromu už v panice
mačkám emergency stop. Tady to byl poslední pokus, který ukázal, že když je
to nutné, tak si drona dokáže cestu i prosekat. Většina video záznamu bohužel
chybí, tak si to užilo jenom pár svědků naživo. Ano, skončilo to zase zamotáním
do větví jiného stromu, ale až po několika desítkách metrů &amp;hellip;&lt;/div>

&lt;h2>Závěry&lt;/h2>

&lt;div class='p'>RO2013 se mi líbil a zase jsem se něčemu přiučil. I Heidi se posunula dál.
Shrnul bych, co se změnilo ve srovnání se
&lt;a href='/competitions/robotem-rovne/2013/cs'>soutěží v Písku&lt;/a>, která byla před měsícem:&lt;/div>

&lt;ul>
&lt;li>integrace nového HW (sonar)&lt;/li>

&lt;li>částečné vyřešení ztráty komunikace (bohužel jen navdata, třeba opravit i video kanály)&lt;/li>

&lt;li>regulace rychlosti (i když teď už to není tak zajímavé/dramatické)&lt;/li>

&lt;li>skenování prostředí a první pokusy s vyhýbáním se překážkám&lt;/li>
&lt;/ul>

&lt;div class='p'>Mezi nevyřešené úlohy patří např. občasné couvání na startu. Dosavadní pokusy
sice vedly k tomu, že drona byla „papírově” na místě (podle odometrie) ale v
realitě to bylo ještě horší a asi si i pokazila vnitřní kalibraci během jinak
automatizovaného startu. Parrot a fórum na
&lt;a href='https://projects.ardrone.org/boards/1/topics/show/5745' class='external'>můj dotaz&lt;/a> zatím mlčí
&amp;hellip;&lt;/div>

&lt;h1>Aegis&lt;/h1>

&lt;div class='p'>Aegis byl pro mne zcela nový tým. Z Ostravy. Z Prahy do Ostravy je to daleko a
stejně tak v opačném směru, ale Rychnov nad Kněžnou je kompromis. Vtipné
bylo, že když jsem se zeptal, zda neznají Petra Nováka, co napsal knížku
&lt;a href='/articles/book-review-mobilni-roboty/cs'>Mobilní roboty&lt;/a>, tak se ukázalo,
že je to vedoucí jejich katedry, školitel i spolupracovník &lt;span class='smile'>&lt;/span>. Tak po letech
střípky pomalu zapadají.&lt;/div>

&lt;div class='p'>Jejich robotu se ale letos příliš nedařilo. Hlavní programátor nedorazil a
obsluha robota byla o to náročnější. V prvním kole vyhořel na parsování
vstupního textového souboru - očekával mezery, ale v souboru byly tabulátory.
Druhé kolo už bylo lepší a získal 77 bodů. V posledním kole asi zlobila GPS a
robot se rozhodl jet zcela opačným směrem, než byly kontrolní body a cíl.
Mimochodem je to snad jeden z nových týmů, který uvidíme na
&lt;a href='/competitions/robotour/2013/cs'>Robotour 2013 v Polsku&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/aegis1.jpg'>&lt;img src='/competitions/roboorienteering/2013/aegis1_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/aegis2.jpg'>&lt;img src='/competitions/roboorienteering/2013/aegis2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;h1>Plecharts&lt;/h1>

&lt;div class='p'>Plecharts už známe jak z loňského RoboOrienteeringu, tak i z
&lt;a href='/competitions/robotour/cs'>Robotour&lt;/a>. Robota byste ale nepoznali. Je
několikanásobně větší a ještě vícenásobně těžší. Je to trošku cesta na které si
vylámal zuby Kamil ze Sirael s robotem Hana a z prvních let Robotour i Short
Circuits s Kryplíkem. Prostě velký robot zní lákavě, ale typicky to znamená i
velké problémy :-( &amp;hellip; a i letošní příspěvek Plecharts to dokazuje. Pokud
máte podobné myšlenky a ještě příliš zkušeností s robotama nemáte, tak vám to
nedoporučuji. Vedle toho, že vám může robot snadno ublížit, na jeho testování
(a to by jste měli dělat skoro non-stop) budete potřebovat vždy minimálně dva
lidi a řádově více sil a energie. Robot měl hned několik problémů a skončil na
mechanických, které byly v danou chvíli fatální. Snad příště.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/plecharts.jpg'>&lt;img src='/competitions/roboorienteering/2013/plecharts_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;div class='p'>Doplňující info od Jardy Peška:&lt;/div>

&lt;div class='p'>Každý rok jsem se potýkal s tím, že robot byl příliš malý nebo měl málo místa
na všechny prototypy modulů, tak jsem na letošní rok postavil opravdu monstrum.
Rozměry robota jsou okolo 100x70x40 cm a váží s baterií okolo 70kg, takže se mu
dá říkat tank. Zde byl asi první problém, protože takto velký robot vyžaduje
velký výkon, který sice motory dodávaly,  ale nakonec se zničila jedna z
řemenic které přenášely výkon od motoru k převodovce a tak se robot nakonec ani
nemohl pokusit ujet rovně několik metrů abychom měli alespoň pár bodů.&lt;/div>

&lt;div class='p'>Dalším letošním problémem byla celková nepřipravenost, protože stavba nového
podvozku vyžadovala více času než jsem předpokládal. Jako by to nestačilo, při
vývoji softwaru se ukázalo, že jsem několikrát zvolil cestu, která nikam
nevedla, což jen přidalo ke zpoždění. Musel jsem tedy na poslední chvíli
upravit již otestovaný software z loňského Roboorienteeringu ve Svinařích, kde
robot fungoval výborně. Po přepsání jednoho modulu aby robot místo vlastního
regulátoru ovládal dva modelářské regulátory přišlo na řadu testování, již v
Rychnově. Zde ovšem nastal problém, loňský software si příliš nerozuměl s
notebookem nebo novým modulem řízení a místo toho aby jel když nemá před sebou
překážku tak dělal opak, nebo se dokonce jenom „cukal“ na místě.&lt;/div>

&lt;div class='p'>Snad se mi povede vyladit všechny tyto problémy do Robotour 2013, kde již bude
moci nový podvozek a software plně zazářit.&lt;/div>

&lt;hr/>

&lt;h1>Závěr&lt;/h1>

&lt;div class='p'>Nejprve bych rád poděkoval fandorama přispěvovatelům
&lt;a href='http://www.cortexpilot.cz/' class='external'>Pavlu Skotákovi&lt;/a> a Janu M, kteří mne vyhecovali
se soutěže s Heidi zúčastnit. Dále bych rád poděkoval Tomášovi z Eduro Teamu,
kolegům Zonkovi a Šimimu z práce za pomoc s integrací sonaru (USB konektor,
linux prostředí a možnost zkompilování driveru, kabeláž).  Díky patří i Davidu
Obdržálkovi (viz &lt;a href='http://www.youtube.com/user/RobonikaCZ' class='external'>D-video&lt;/a>), že celou
soutěž natáčel a mám tak vůbec nějakou dokumentaci, když většina H-video-logů
chybí. A konečně velké díky organizátorovi Martinu Lockerovi, bez kterého by
soutěž nebyla.  Dík patří samozřejmě i údržbě Zámeckého parku a
&lt;a href='http://www.vosrk.cz/roboorienteering/2013/plakat.pdf' class='external'>dalším sponzorům&lt;/a>.&lt;/div>

&lt;div class='p'>p.s. zmiňoval jsem změnu pravidel do roku 2014 &amp;mdash; budou se rozvážet golfové
míčky a různé kontrolní body budou různě hodnocené. První náčrt najdete
&lt;a href='http://www.vosrk.cz/roboorienteering/index.php?year=2014&amp;amp;page=pravidla' class='external'>zde&lt;/a>.&lt;/div>

&lt;h2>Odkazy:&lt;/h2>

&lt;ul>
&lt;li>Stránky organizátorů: &lt;a href='http://www.vosrk.cz/roboorienteering/' class='external'>http://www.vosrk.cz/roboorienteering/&lt;/a>&lt;/li>

&lt;li>Výsledková tabulka: &lt;a href='http://www.vosrk.cz/roboorienteering/2013/vysledky.htm' class='external'>http://www.vosrk.cz/roboorienteering/2013/vysledky.htm&lt;/a>&lt;/li>

&lt;li>Videa od Davida Obdržálka: &lt;a href='http://www.youtube.com/user/RobonikaCZ' class='external'>http://www.youtube.com/user/RobonikaCZ&lt;/a>.&lt;/li>
&lt;/ul>

&lt;h2>Fandorama&lt;/h2>

&lt;ul>
&lt;li>Detaily tohoto projektu: &lt;a href='http://fandorama.cz/projekty/921778164/roboorienteering-2013/' class='external'>http://fandorama.cz/projekty/921778164/roboorienteering-2013/&lt;/a>&lt;/li>
&lt;/ul>

&lt;div class='p'>&lt;a href='/competitions/roboorienteering/2013/cs#email'>kontaktní formulář&lt;/a>&lt;/div>

&lt;hr/>

&lt;hr/>

&lt;h1>Blog&lt;/h1>

&lt;div class='p'>Toto je druhý „létající blog” o autonomní navigaci &lt;a href='/robots/heidi/cs'>Heidi&lt;/a>,
tentokrát ve venkovním prostředí. Úkol je doletět na první kontrolní bod
(kužel), dotknout se ho a přitom nenabourat cestou do stromu. Nic víc a nic
míň. Pro rozjezd plánuji využít soutěže
&lt;a href='/competitions/robotem-rovne/2013/cs'>Robotem rovně&lt;/a> &amp;mdash; tento blog bude zase
mix z příprav na obě akce.&lt;/div>

&lt;div class='p'>Předešlý díl s prvními pokusy případně naleznete
&lt;a href='/competitions/iarc/2013/cs'>zde&lt;/a>. Stejně jako u IARC se i tady předem se
omlouvám za texty bez korekcí.&lt;/div>

&lt;hr/>

&lt;h2>19. dubna 2013 &amp;mdash; cross-compiled Hello World&lt;/h2>

&lt;div class='p'>AR Drone 2.0 má USB port, ale jak jsem psal na konci prvního blogu, nové
senzory (USB &amp;lt;-&amp;gt; I2C převodník a GPS modul) nebyly rozpoznané a nešlo z nich
tedy číst data. Je potřeba si tedy drivery sám zkompilovat, což je krok,
kterému jsem se původně chtěl vyhnout.&lt;/div>

&lt;div class='p'>Princip cross-compilace je mi snad jasný: jiný procesor, jiná instrukční sada a
je tedy třeba donutit kompilátor generovat výstup pro jiný procesor než na
kterém sám běží. Stejným způsobem jsme programovali i ATmega8 čipy, když jsme
před osmi lety &lt;a href='/guide/blink/cs'>blikali s LEDkou&lt;/a>. Máte-li Ubuntu Linux na vašem
PC, tak můžete zkusit postupovat podle vzoru na
&lt;a href='http://paparazzi.enac.fr/wiki/AR_Drone_2/getting_started' class='external'>http://paparazzi.enac.fr/wiki/AR_Drone_2/getting_started&lt;/a>. Já jsem použil
pracovní Debian, kde mi kolega „přikouzlil” ještě
&lt;i>cpp-4.4-arm-linux-gnueabi, g++-4.4-arm-linux-gnueabi,
gcc-4.4-arm-linux-gnueabi, libstdc++6-4.4-dev-armel-cross&lt;/i>, s tím že problémy
byly s knihovnou &lt;i>libgmp3c2&lt;/i>, která zrovna zaniká (?). Nevím. Koukal jsem jen
přes rameno a neměl z toho moc dobrý pocit.&lt;/div>

&lt;div class='p'>Je mi jasné, že správně vybraný procesor ještě není všechno (na AR Drone 2.0 je
&lt;a href='http://paparazzi.enac.fr/wiki/AR_Drone_2/About' class='external'>1 GHz 32 bit ARM Cortex A8
processor s 800MHz video DSP TMS320DMC64x&lt;/a>). Program se bude odkazovat na
existující knihovny a pod. Ale asi mi nezbývá než to zkusit. Pro test jsem
použil jednoduchý příklad z
&lt;a href='http://www.raspberrypi.org/phpBB3/viewtopic.php?f=31&amp;amp;t=7493' class='external'>Raspberry Pi
fóra&lt;/a>.&lt;/div>

&lt;div class='p'>Nevím jak vás, ale mne tento výsledek:
&lt;table class='image_panel center' style='width: 268px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/hello-world.png'>&lt;img src='/competitions/roboorienteering/2013/hello-world_t.png' alt='' title='' class='border'  width='262' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
rozhodně potěšil &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h2>23. dubna 2013 &amp;mdash; logování videa&lt;/h2>

&lt;div class='p'>Ukládat obrázky nebo videa z autonomní jízdy či letu je obecně užitečná věc.
Pokud nejste důkladní a důslední (že by slovo „dad” vzniklo od toho?), což ja
bohužel nejsem (i když k většině testů si alespoň jednořádkovou poznámku
napíšu), tak „video vám napoví”, co že se to vlastně stalo. I po několika
letech. Možná mne to donutí vyhledat obrázky z jízdy v Rychnově na prvním
RoboOrienteeringu (rok 2010), abych si připomněl ty obrovské stromy, občas s
větvemi až k zemi, vystouplé kořeny i 2m od kmenu &amp;hellip;  no možná později,
nebudu se přece v této fázi sám zastrašovat &lt;span class='wink'>&lt;/span> &amp;hellip;&lt;/div>

&lt;div class='p'>Pokus o nahrání videa jsem dělal už v samém počátku experimentování s
&lt;a href='/robots/heidi/cs'>Heidi&lt;/a>, ale moc jsem si s tím nevěděl rady a byly urgentnější
záležitosti. Stačilo rovnou ukládat data z TCP spojení na portu 5555:&lt;/div>

&lt;pre>HOST = '192.168.1.1'    # The remote host
VIDEO_PORT = 5555
&amp;hellip;
  drone = ARDrone2()
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP
  s.connect((HOST, VIDEO_PORT))
  f = open( datetime.datetime.now().strftime("video_%y%m%d_%H%M%S.bin"), "wb" )
  for i in xrange(1000):
    drone.update()
    data = s.recv(10240)
    f.write(data)
    f.flush()
  f.close()
  s.close()&lt;/pre>

&lt;div class='p'>Je jasné, že dokud nedokážu soubor parsovat, tak to celé trošku pozbývá smyslu.
Rozhodl jsem se přeskočit „kovaříčky” a šel rovnou za „kovářem”, tedy na
stránky &lt;a href='http://www.ffmpeg.org/' class='external'>http://www.ffmpeg.org/&lt;/a>, kde najdete jak knihovny tak nástroje,
které používá většina programů spolupracující s AR Drone 2 (CV Drone, SDK 2.0,
&amp;hellip;).  Proklikal jsem se na &lt;a href='http://ffmpeg.zeranoe.com/builds/' class='external'>instalaci pro
windows&lt;/a>, stáhl si &lt;i>Shared Version&lt;/i>, rozbalil 7-Zipem, objevil vedle
ffmpeg rovnou i ffplay, přidal název uloženého souboru z Heidi a &amp;hellip; ono to
rovnou fungovalo! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>A teď má skrytá motivace. Chtěl bych získat jak video z dopředné kamery, tak z
kamery, co je namířená dolu. AR Drone 2 už nenabízí „obraz v obraze”, ale
video je možné nahrávat. Při nahrávání by drona měla vysílat na
&lt;i>VIDEO_RECORDER_PORT=5553&lt;/i>. Když jsem zkoušel kdysi dronu s tabletem a nahrál
si svůj první pokus venku, tak přestože jsem přepnul na dolní kameru, tak
aplikace vždy nahrávala z té hlavní, dopředné kamery. Tenkrát mne to mrzelo,
ale &amp;hellip; už vidíte, kam mířím? Když přepnu pohled na dolní kameru a pustím
nahrávání, tak bych měl dostat stream z obou kamer současně &lt;span class='smile'>&lt;/span>. Zní to až
moc jednoduše, že ano? Taky to hned nefungovalo (snad už platí minulý čas).&lt;/div>

&lt;h3>Multiconfiguration&lt;/h3>

&lt;div class='p'>Pro nahrávání videa jsem použil příkaz:&lt;/div>

&lt;pre>drone.confirmedConfig( "AT*CONFIG=%i,\"video:video_codec\",\"136\"\r" )&lt;/pre>

&lt;div class='p'>kde 136=0x88=MP4_360P_H264_360P_CODEC, tedy zobrazování a nahrávání v rozlišení
640x360. Změnil jsem číslo portu na 5553 a nic. Žádná data. Na rozdíl od
&lt;a href='https://projects.ardrone.org/boards/1/topics/show/5573' class='external'>autonomní navigace na
značku&lt;/a> toto zajímá daleko více lidí a tak jsem odpověď snadno 
&lt;a href='https://projects.ardrone.org/boards/1/topics/show/4473' class='external'>našel na fóru&lt;/a>. Ten „podraz”
je multi-konfigurace a je dost možné, že to bude i rozuzlení k té navigaci na
značku, co mi ve Vídni chyběla &amp;hellip;&lt;/div>

&lt;div class='p'>Co to ta multiconfiguration je? Z důvodu kolize některých příkazů se starou
generací AR Drone je povinnost před některými AT*CONFIG příkazy posílat ještě
AT*CONFIG_IDS s hash kódem pro aplikaci, uživatele a session. Pokud to
neuděláte, tak sice dostanete ACK, ale nic se neprovede. V dalším
&lt;a href='https://projects.ardrone.org/boards/1/topics/show/3479' class='external'>příspěvku na fóru&lt;/a> je
i návod jak si nechat vypisovat chybová hlášení drony, což může být příště
užitečné:&lt;/div>

&lt;div class='p'>&lt;i>When the AR.Drone refuses a configuration, it writes an error on its stdout
stream. To see the output of program.elf on the AR.Drone, you may just connect
to it using telnet, kill the currently running program ("killall program.elf"),
then run it again ("/bin/program.elf"). The stdout will the be redirected to
your telnet console, and you'll be able to see why the AR.Drone is refusing
your configurations.&lt;/i>&lt;/div>

&lt;div class='p'>Po přidání AT*CONFIG_IDS to sice už nahrává, ale výsledek ffplay přehrát nelze
:-(. Tady by asi stálo za to rozumnět
&lt;a href='http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC' class='external'>H.264/MPEG-4&lt;/a> formátu.
Detailům nerozumím, ale problém je podobný jako u spojovaní MPEG-2 video &amp;hellip;
prostě né všechny snímky jsou si rovny (první je celý a následuje X
rozdílových) a pokud začnete špatným snímkem, tak to ani ffplay nezvládne.
Který snímek je vhodný začátek lze vyčíst z extra PaVE (Parrot Video Embeded)
sekce, konkrétně vás zajímá frame_type. Střídá se číslo 1 následované 29x 3 &amp;hellip;
alespoň u statického pohledu, v akční scéně to možná bude jinak. Při šanci 1:29
se ani moc nedivím, že mi to nefungovalo. Řešení je najít první typ 1 a před
ním to smazat.&lt;/div>

&lt;div class='p'>Případ vyřešen? Zatím ne. Vypadá to, že teď je zase problém s dekódováním
druhého videa. Drona má jenom jeden video čip, takže jeden video stream je
zpracovávaný softwareově &amp;hellip; ale nechci předbíhat, nejprve nasbírám více
„stereo” vzorků.&lt;/div>

&lt;hr/>

&lt;h2>24. dubna 2013 &amp;mdash; PaVE 64 vs. 68&lt;/h2>

&lt;div class='p'>Nevím. Nefunguje to. Je mi jasné, že jsem to včera zakřikl. Když otevřu obě
spojení (pro nahrávání port 5553 a normální video 5555), tak nějaká data
nasbírám. Ale nejdou přehrát, ani když je odříznu na první I-frame (princip
komprese videa a co je I/P/B frame je celkem pěkně popsaný na
&lt;a href='http://en.wikipedia.org/wiki/Video_compression_picture_types' class='external'>wikipédii&lt;/a>).&lt;/div>

&lt;div class='p'>Kde teď vidím možný zadrhel je už samotná PaVE (Parrot Video Encapsulation)
hlavička. Začíná značkou "PaVE" a následující informace o použitém codecu,
velikosti hlavičky a dat, rozměr obrázku &amp;hellip; speciální zarovnání je na 64bajtů.
Když si ale přečtete velikost z &lt;i>uint16_t header_size; /* Size of the
parrot_video_encapsulation_t */&lt;/i> tak dostanete 68! Počítal jsem to snad 5x, ta
struktura má opravdu 64batjů a různé programy s tím počítají, ale v popisce je
něco jiného.&lt;/div>

&lt;div class='p'>Předpokládám, že ffplay.exe žádny PaVE nezná a přeskakuje na sekce začínající
nějakou signaturou pro H.264 kódování, ale nevím. To by vysvětlovalo proč by
přehrávání mohlo fungovat ať už PaVE sekci smažete nebo jí tam necháte.
Přišlo mi, že &lt;a href='https://github.com/puku0x/cvdrone' class='external'>CV Drone&lt;/a> to vůbec neřeší,
&lt;a href='http://labe.felk.cvut.cz/~tkrajnik/ardrone/' class='external'>Tomáš Krajník&lt;/a> dohledává
ztracené začátky (a čte jen 64bajtů hlavičky). Zkusím header_size ubrat 4 a
payload_size zase 4 přidat &amp;hellip; žádná pozorovatelná změna.&lt;/div>

&lt;div class='p'>Co mne ale ještě více trápí je, že ze třech pokusů jsem dostal dost podobný
úvodní obrázek (asi bych měl před čtyřtulku dát digitální hodiny nebo místo na
lednici budu koukat na elektrickou troubu s displayem) &amp;hellip; extra cache u
ffplay.exe nepředpokládám (jako, že by pokračoval na přehrávání staršího
souboru stejného jména), tak mi spíše drona posílá staré video. Dokud ale
spolehlivě nerozlousknu jeho přehrávání, tak to asi ještě nemá smysl řešit.&lt;/div>

&lt;div class='p'>Asi to chce klid, více Nutelly, a začít možná s jednoduchým C prográmkem
inspirovaným z různých zdrojů &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>26. dubna 2013 &amp;mdash; video timestamps&lt;/h2>

&lt;div class='p'>Dnes jen telegraficky:&lt;/div>

&lt;ul>
&lt;li>velikost PaVE struktury u AR Drone 2 &lt;b>bývala&lt;/b> 64 bajtů (např. stroje vyrobené
loni v létě) a teď je 68 bajtů, i když ani poslední SDK 2.0.1 tuto novou
strukturu neobsahuje. Podle &lt;i>Firmwares 1.11.5 (AR.Drone 1) and 2.2.9 (AR.Drone
2.0) are included&lt;/i> a toho, že sám mám 2.3.3, soudím, že ke změně došlo „někde
mezi”. Správně je tedy respektovat velikost headeru, jak přichází v datech.&lt;/li>

&lt;li>při čtení PaVE bloku a dekódování každého snímku zvlášť vše funguje jak má.
Sice při míchání dvou Céčkových zdrojáků se mi chvíli pletly alokace a natvrdo
to padalo, ale &amp;hellip; konec dobrý, všechno dobré. Jeden video stream má
CODEC_ID_H264 a druhý CODEC_ID_MPEG4.&lt;/li>

&lt;li>pro debugování jsem si nemohl vynachválit jednoduchý OpenCV kód &lt;span class='smile'>&lt;/span>:&lt;/li>
&lt;/ul>

&lt;pre>cvShowImage( "camera", img );
cvWaitKey(100);&lt;/pre>

&lt;div class='p'>s čekáním 100ms nebo s 0 a procházení po snímcích (čeká to na stisk klávesy)&lt;/div>

&lt;ul>
&lt;li>potvrdilo se mé podezření, že nahrávané video na portu 5553 je z jiného času
než video z 5555. Důvodů mne napadá hned několik: nahrávání explicitně
nevypínám, TCP buffer na začátku nevyprazdňuji, sychnroně čtu (navdata, video1,
video2), jeden video stream může být úsporněji zabalený, &amp;hellip; je to pěkně vidět na
časových známkách (timestamp):&lt;/li>
&lt;/ul>

&lt;pre>navdata:
TIME	73.279479	0x92443b7 
TIME	78.425933	0x9c67fcd

video3311:
TIMESTAMP	74686
TIMESTAMP	78631

video3311_rec:
TIMESTAMP	73643
TIMESTAMP	76479
&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>&lt;strike>-&lt;/strike>
navdata:
TIME	347.396301	0x2b660c0d 
TIME	353.056152	0x2c20db58

video3745:
TIMESTAMP	348770
TIMESTAMP	353269

video3745_rec:
TIMESTAMP	76675
TIMESTAMP	79316&lt;/pre>

&lt;ul>
&lt;li>domnívám se, že timestamp v NavData struktuře je něco jiného než v PaVE bloku u
videa &amp;hellip; tj. že &lt;a href='https://projects.ardrone.org/boards/1/topics/show/5379' class='external'>na
fóru se pletou&lt;/a> &amp;hellip; navdata jsou v podivně zabalených mikrosekundách a videa v milisekundách.&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;h2>29. dubna 2013 &amp;mdash; registrace&lt;/h2>

&lt;div class='p'>Nejprve díky příznivcům &lt;a href='http://fandorama.cz' class='external'>fandorama&lt;/a> za podporu (částka na
RoboOrienteering reportáž je teď už nasbíraná). Přihlašuji Heidi jako
dalšího účastníka, viz.
&lt;a href='http://www.vosrk.cz/roboorienteering/index.php?year=2013&amp;amp;page=tymy' class='external'>http://www.vosrk.cz/roboorienteering/index.php?year=2013&amp;amp;page=tymy&lt;/a>.  Zatím
jsem tam jenom s Pavlem ze &lt;a href='http://www.shortcircuits.cz/' class='external'>Short Circuits&lt;/a> a je
těžké uvěřit, že jsme před deseti lety spolu poprvé tvořili tým na
&lt;a href='/competitions/eurobot/2003/cs'>Eurobota 2003&lt;/a>. Tehdy &lt;a href='/robots/daisy/cs'>Daisy&lt;/a>
byla sedmá na světě, &amp;hellip; jo to bývaly časy &amp;hellip; &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;div class='p'>Pavel psal: „Situace se změnila. Ta druhá akce mi nakonec odpadla, takže jsem
se dodatečně přihlásil na RO. Navíc jsem chtěl vidět, jak lítáš mezi stromy.”
Tak nás v tom nenechte samotné! Těším se na další přihlášené týmy &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>30. dubna 2013 &amp;mdash; všechno vylejt!&lt;/h2>

&lt;div class='p'>Pamatujete ještě &lt;a href='http://www.youtube.com/watch?v=aYeN7W4jD7Y' class='external'>scénku Kaisera s
Lábusem, Staníka, gumičky a nálev&lt;/a>? Tak si teď připadám. Když jsem vše udělal
pořádně, jak by to mělo být, tak výsledek je, že současné nahrávání videa z
jednoho kanálu a sledování druhého nejde :-(. Ale popořádku &amp;hellip;&lt;/div>

&lt;div class='p'>Po minulé zkušenosti, kdy jsem si nebyl jistý, zda právě natočené video je
aktuální, jsem udělal to co jsem slíbil a dronu otočil, aby sledovala sporák
místo lednici &amp;hellip; a vyplatilo se. Přiložené jsou referenční snímky první a
poslední záběr.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 278px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/camera0557.jpg'>&lt;img src='/competitions/roboorienteering/2013/camera0557_t.jpg' alt='05:57' title='05:57' class='border'  width='272' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/camera0557.jpg'>05:57&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 278px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/camera0731.jpg'>&lt;img src='/competitions/roboorienteering/2013/camera0731_t.jpg' alt='07:31' title='07:31' class='border'  width='272' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/camera0731.jpg'>07:31&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Ráno začalo hrozně, jak jinak. Zkusil jsem připravený prográmek s použitím
modulu &lt;i>multiprocessing&lt;/i>, aby nahrávání videa probíhalo v jiném procesu a
nezdržovalo hlavní řídící smyčku. Skript proběhl, ale video bylo jen černé
nic (cvičně jsem nahrával jenom jeden kanál). Opakoval jsem to 3x a stále
stejný výsledek. Začal jsem to vidět dost černě a raději přepnul na minulou
implementaci &amp;hellip; a zase nic!&lt;/div>

&lt;div class='p'>Problém byl, že jsem video dekódoval špatným codecem. To je ale situace, kterou
snadno a rychle poznáte z pohledu do konzole, kde vyskakuji chybové hlášky, ale
nic tam nebylo. Došlo mi to až když jsem v Céčkovém kódu viděl fprintf
TIMESTAMP &amp;hellip; já jsem si ten chybový výstup minule přesměroval do souboru,
abych ty časové známky mohl lépe studovat! Prima. Dobré ponaučení a vhodný
moment pro alokaci obou codeců a doplnění následujícího kousku kódu:&lt;/div>

&lt;pre>if( pave.video_codec == 4 )
  cSelected = cH264;
else
  cSelected = cMPEG4;&lt;/pre>

&lt;div class='p'>Jinými slovy, v PaVE struktuře je informace, o který codec se jedná, jen to
zapojit. Supr, tak už vidím všechna videa co jsem dnes nahrál.&lt;/div>

&lt;div class='p'>Dopsal jsem funkce startVideo() a stopVideo() do ARDrone2 třídy pro oba kanály
a ten co chodí z portu 5553 byl stále z doby úplného začátku. Upravil jsem kód
aby se video přestalo nahrávat, ale stále stejné. Heidi jsem vypnul a znova
zapnul a pak to začalo být rozumné. Důvodem je pravděpodobně
„video:video_storage_space = 15360” konfigurace (nezdokumentované jednotky
předpokládám MB), která umožňuje v případě výpadku wifi spojení použít takto
velký vyrovnávací buffer.&lt;/div>

&lt;div class='p'>Na informaci o bufferu jsem narazil, když jsem hledal, jak se přepíná dopředná
a spodní kamera &amp;mdash; mimochodem nepoužívejte příklad z dokumentace. Není to
úplně zřejmé, ale ta nabízená varianta 2 není na AR Drone 2.0 podporovaná &amp;hellip;
enumy jsou od 0, tj. pro pohled dolů potřebujete nastavit 1.&lt;/div>

&lt;div class='p'>Dobrá zpráva - přepnul jsem pohled dolů a chodí mi data z pohledu na stůl.
Špatná zpráva - data chodí z obou kanálů stejná. Závěr? Nevím jak dostat video
současně z obou kanálů a prapraprapůvodní zmatení, kdy jsem nahrával a přepínal
pohled dolů, ale dostával nahraný pouze pohled dopředu, byl nejspíše stejný
problem s bufferem i u aplikace
&lt;a href='https://play.google.com/store/apps/details?id=com.parrot.freeflight' class='external'>AR.FreeFlight
2.0&lt;/a>. Jako fatální důkaz mi posloužil následující kód:&lt;/div>

&lt;pre>drone = ARDrone2()
drone.startVideo()
drone.wait(2.0)
drone.confirmedConfig( "AT*CONFIG=%i,\"video:video_channel\",\"0\"\r" ) # HORI view
drone.wait(2.0)
drone.confirmedConfig( "AT*CONFIG=%i,\"video:video_channel\",\"1\"\r" ) # VERT view
drone.wait(2.0)
drone.stopVideo()&lt;/pre>

&lt;div class='p'>A na obou video záznamech jsem viděl chvíli stůl (spodní kamera), chvíli sporák
(přední kamera) a pak zase stůl. To nezachrání už ani čulibrk.&lt;/div>

&lt;hr/>

&lt;h2>3. května 2013 &amp;mdash; test first&lt;/h2>

&lt;div class='p'>&lt;a href='http://www.extremeprogramming.org/rules/testfirst.html' class='external'>Test first&lt;/a> je
oblíbená praktika z
&lt;a href='http://en.wikipedia.org/wiki/Test-driven_development' class='external'>eXtrémního
programování&lt;/a>. Nebudu se teď pouštět do vysvětlování, proč je to dobré při
psaní kódu, spíše vysvětlím, jak si to interpretujeme v robotice. V kostce,
pokud lze nějakou vaši teorii ověřit/vyzkoušet, tak to udělejte jako první.
Vlastně je to takové „ověření předpokladů”, které když neplatí, tak je celá
další teorie zbytečná &amp;hellip;&lt;/div>

&lt;div class='p'>Co to má společného se životem čtyřtulky Heidi? Pamatujete, jak jsem se
holedbal, jak do Písku pojedu s kódem: „drone.moveForward(380)”? Tak jsem si
to o svátcích na zahradě konečně zkusil. A když už umím nahrávat a parsovat
to video, tak jsem vám průběh z pohledu Heidi dal i na
&lt;a href='http://youtu.be/qhmc--pTRJM' class='external'>YouTube&lt;/a>:&lt;/div>

&lt;h3>Test Zero&lt;/h3>

&lt;div class='p'>No měl to být test1, ale zapomněl jsem odkomentovat volání testovací funkce,
takže Heidi pouze vzlétla a hned zase přistála. To by běžně byl i doporučený
první pokus, ale &amp;hellip; nejsušší místo na zahradě byla střecha auta, takže když
šla čtyřtulka na přistání, místo aby letěla 10 metrů vpřed, tak jsem se dost
lekl.  Konec videa není useknutý nějakým nárazem, ale prostě jako to
přistálo, tak se vše vypnulo.  Do dalších testů jsem tam ještě přidal 1s pauzu
na konec.&lt;/div>

&lt;h3>Test One&lt;/h3>

&lt;div class='p'>Ten byl téměř ukázkový. Zase start z auta, ale pak se drona stočila mírně vlevo
(větřík?) a proletěla těsně vedle konstrukce skleníku. Přistání do vysokých
pampelišek nic moc, ale člověk si musí definovat priority &amp;hellip;&lt;/div>

&lt;h3>Test Two&lt;/h3>

&lt;div class='p'>Druhý test jsem udělal se startem ze země a výsledek skončil pěkným kotrmelcem.
Nenapadlo by mne, že ta naše loučka má nějaký sklon, ale na 10 metrů to těch
50cm asi dá + vyšší tráva &amp;hellip; no, viz video. Takže lze možná dronu používat i k
nivelaci.&lt;/div>

&lt;div class='p'>Ještě možná krátkou historku ke konci tohoto testu. Naše Sindy (kokršpaněl) má
lovení a donášení zastřelených ptáků v genech, a tak místo aby se Heidi bála,
tak po tom jejím kotrmelci se na ní vrhla a chtěla mi ji v zubech přinést! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;h3>Test Three&lt;/h3>

&lt;div class='p'>Po pravdě mezi 2 a 3 byly ještě dva pokusy odstartovat, ale drona nechtěla
přejít z emergency stavu, takže jsem ji nakonec musel vypnout a znova zapnout
(logy jsem ještě neprošel, abych se dozvěděl více).  U posledního testu jsem
nejprve vystoupal do 2m a pak teprve pokračoval v letu vpřed:&lt;/div>

&lt;pre>drone.flyToAltitude( 2.0, timeout=10.0 ) 
drone.moveForward(10.0, timeout=20.)&lt;/pre>

&lt;div class='p'>Tentokrát ji vánek zanesl cca 3m stranou, ale jinak asi OK.&lt;/div>

&lt;h3>Závěry&lt;/h3>

&lt;ul>
&lt;li>testování doma není jako testování venku&lt;/li>

&lt;li>drona si snaží udržet absolutní výšku nezávisle na překážkách&lt;/li>

&lt;li>„emergency stop = přistání” je nedostatečné (poryvy větru, vyšší letová
  hladina)&lt;/li>

&lt;li>malé rozlišení kamery (640x360) je nepoužitelné &amp;mdash; zkuste ve videu najít
  kužel (potřeba přepnout do 720i)&lt;/li>

&lt;li>hodila by se funkce „návrat na základnu”&lt;/li>
&lt;/ul>

&lt;h3>Video konverze&lt;/h3>

&lt;div class='p'>Ještě bych zmínil konverzi videa z PaVE streamu z AR Drone 2.0 do AVI. Nakonec
jsem to udělal v CV Drone „quick and dirty” pomocí
&lt;a href='http://docs.opencv.org/doc/tutorials/highgui/video-write/video-write.html' class='external'>příkladu
z OpenCV&lt;/a>. Je v něm jednak vysvětleno, co je to „video containter” a pak
celý převod je těchto pár příkazů:&lt;/div>

&lt;pre>#include &amp;lt;opencv2/highgui/highgui.hpp&amp;gt;  // Video write
VideoWriter outputVideo;
outputVideo.open( "output.avi" , -1, 30, Size( 640, 360 ), true);
&amp;hellip;
  outputVideo.write( img );
  &amp;hellip;&lt;/pre>

&lt;div class='p'>kde „img” je „IplImage *”, který při parsování a zobrazování průběžně máte
k dispozici.&lt;/div>

&lt;div class='p'>Abych nelhal, tak úplně bezproblémové to nebylo, resp. stále není. Je to možná
mix DLLek, který vytvoří nesmyslně pojmenovaný soubor a destruktor se také
nezavolal správně, takže u AVI asi chybí index. Mým cílem bylo rychle (během
1h) dostat video na web a to šlo. Ideální to není a ani touto cestou dále
nechci chodit &amp;mdash; ono totiž ta kvalita &amp;hellip; je to 3x přebalované (drona,
CVDrone, Windows Movie Maker). Líbilo by se mi jen ty datové pakety poskládat,
ale zatím to není priorita.&lt;/div>

&lt;h3>p.s.&lt;/h3>

&lt;div class='p'>Ještě jsem si hrál na Járu Cimrmana a ověřoval, že
&lt;a href='http://www.cimrman.at/list.php?l=41&amp;amp;p=554' class='external'>vyfukováním tabákového kouře do
vody zlato nevznikne&lt;/a> &amp;hellip; konkrétně jsem zkoušel různé „AT*CONFIG
video:video_channel”, jestli tam není nějaká nezdokumentovaná hodnota, která
by přepnula na nahrávání jiný kanál než se zobrazuje &amp;hellip; a minimálně do hodnoty 10
tam nic použitelného není.&lt;/div>

&lt;hr/>

&lt;h2>7. května 2013 &amp;mdash; NAVDATA_ALTITUDE_TAG&lt;/h2>

&lt;div class='p'>Dnes jsem konečně trošku koukal na logy z prvních outdoor testů. Co mne
zajímalo mezi prvními je jak je to přesně s tou výškou, aby se znova neopakoval
kotrmelec na mírném svahu. K prozkoumání tedy stojí NAVDATA_ALTITUDE_TAG a s
ním spojená struktura:&lt;/div>

&lt;pre>typedef struct _navdata_altitude_t {
  uint16_t   tag;
  uint16_t   size;

  int32_t   altitude_vision;
  float32_t altitude_vz;
  int32_t   altitude_ref;
  int32_t   altitude_raw;

  float32_t		obs_accZ;
  float32_t 	obs_alt;
  vector31_t 	obs_x;
  uint32_t 		obs_state;
  vector21_t	est_vb;
  uint32_t 		est_state ;

}_ATTRIBUTE_PACKED_ navdata_altitude_t;&lt;/pre>

&lt;div class='p'>Komentářů k tomu moc není, ale odhaduji vision je výpočet podle kamery, vz je
rychlost v z-ové souřadnici, ref moc netuším a raw je měření ze sonaru. Celkem
pěkný je graf z „Test One”, kdy čtyřtulka startovala z auta:&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 472px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/vision-sonar-altitude.png'>&lt;img src='/competitions/roboorienteering/2013/vision-sonar-altitude_t.png' alt='kombinace kamery a sonaru k určení výšky' title='kombinace kamery a sonaru k určení výšky' class='border'  width='466' height='220'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/vision-sonar-altitude.png'>kombinace kamery a sonaru k určení výšky&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Další skupinku proměnných tipuji na detekci a odhad velikosti překážek
(obstacle). Zatím jsem ale dostával u prvních dvou floatů jen samé nuly, tak je
zatím ignoruji.&lt;/div>

&lt;div class='p'>Na grafu je pěkné, jak v jednu chvíli vision zaostává za sonarem &amp;mdash; to se asi
už ultrazvuk odrážel od země, zatímco kamera ještě koukala na kapotu&amp;hellip; TO BE
CONTINUED&lt;/div>

&lt;hr/>

&lt;h2>10. května 2013 &amp;mdash; NAVDATA_ALTITUDE_TAG cont.&lt;/h2>

&lt;div class='p'>Nejprve bych začal tím, co jsem před pár dny nakousl, ale už nestačil ráno
dodělat. Prošel bych tedy ještě další logy k
&lt;a href='http://youtu.be/qhmc--pTRJM' class='external'>referenčnímu videu&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 380px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/vision-sonar-altitude2.png'>&lt;img src='/competitions/roboorienteering/2013/vision-sonar-altitude2_t.png' alt='test two: kolize' title='test two: kolize' class='border'  width='374' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/vision-sonar-altitude2.png'>test two: kolize&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>U druhého pokusu je celkem dobře vidět, jak se mírně zvedl (že by díra nebo
vyšlapaná tráva?) a pak už to šlo z kopce, náraz a vzhůru nohama sonar hlásil
1.5m.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 403px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/vision-sonar-altitude3.png'>&lt;img src='/competitions/roboorienteering/2013/vision-sonar-altitude3_t.png' alt='test three: altitude_ref' title='test three: altitude_ref' class='border'  width='397' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/vision-sonar-altitude3.png'>test three: altitude_ref&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 294px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/test3-2d-offset.png'>&lt;img src='/competitions/roboorienteering/2013/test3-2d-offset_t.png' alt='Offset cca 5m' title='Offset cca 5m' class='border'  width='288' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/test3-2d-offset.png'>Offset cca 5m&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Při posledním pokusu nejprve stoupal do 2m a pak to celkem zvládal,
i když se zem přibližovala. Z grafu lze také odhadnout, co že to ta
altitude_ref asi je. Vypadá to na „globální referenci” nebo „relativní
nadmořskou výšku”, kde start je 0.&lt;/div>

&lt;div class='p'>Co mne potěšilo dokládá přiložená šachovnice, 2D pohled shora. Je tam vidět, že
při stoupání Heidi trošku odnášel vánek, ale že o tom věděla. Je tedy možné
zapojit nějaké korekce, které budou vycházet přímo z odometrie.&lt;/div>

&lt;div class='p'>Za zmínku také stojí chvilkový výpadek sonaru těsně před přistáním.&lt;/div>

&lt;h3>Co dál?&lt;/h3>

&lt;div class='p'>Jak byla volná středa, tak jsem chvíli lítal s následujícím prográmkem:&lt;/div>

&lt;pre>def flyAtHeight( self, altitude, dist, timeout=20.0 ):
    print "flyAtHeight", altitude, dist, timeout 
    refX = self.coord[0]
    refY = self.coord[1]
    zTolerance = 0.5 # +/- no action
    startTime = self.time
    while self.time-startTime &amp;lt; timeout:
      altSonar, altVision = altitude, altitude
      if self.altitudeData != None:
        altVision = self.altitudeData[0]/1000.0
        altSonar = self.altitudeData[3]/1000.0
      if max(altSonar, altVision) &amp;lt; altitude-zTolerance:
        self.moveXYZA( self.speed/2.0, 0.0, self.speed, 0.0 )
      elif min(altSonar, altVision) &amp;gt; altitude+zTolerance:
        self.moveXYZA( self.speed/2.0, 0.0, -self.speed, 0.0 )
      else:
        self.moveXYZA( self.speed, 0.0, 0.0, 0.0 )
      if distance( (refX, refY), self.coord ) &amp;gt; dist:
        print "DIST REACHED"
        break&lt;/pre>

&lt;div class='p'>Asi by to šlo napsat lépe. Ve zkratce, když jsou měření vzdálenosti k zemi
malá, tak čtyřtulka začne stoupat a naopak, když jsou moc velká, tak začne
klesat. Měla by tedy s mírným zpožděním, a celkem velkou tolerancí, kopírovat
terén.&lt;/div>

&lt;div class='p'>Ještě možná zmínim funkci moveXYZA():&lt;/div>

&lt;pre>def moveXYZA( self, vx, vy, vz, va ):
    "make one step update with proper orientation"
    self.movePCMD( -vy, -vx, vz, -va )&lt;/pre>

&lt;div class='p'>prostě už mne přestalo bavit dlouze přemýšlet nad tím, jakou že má Parrot tu soustavu
souřadnou &amp;hellip; otočená znaménka a prohozené X a Y.&lt;/div>

&lt;div class='p'>První pokusy jsem dělal s papírovým „skokanským můstkem”
&lt;table class='image_panel center' style='width: 357px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/ski-jump.png'>&lt;img src='/competitions/roboorienteering/2013/ski-jump_t.png' alt='skokanský můstek' title='skokanský můstek' class='border'  width='351' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/ski-jump.png'>skokanský můstek&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/img_362789.jpg'>&lt;img src='/competitions/roboorienteering/2013/img_362789_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/img_366407.jpg'>&lt;img src='/competitions/roboorienteering/2013/img_366407_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/img_369048.jpg'>&lt;img src='/competitions/roboorienteering/2013/img_369048_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/img_371558.jpg'>&lt;img src='/competitions/roboorienteering/2013/img_371558_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/img_815233.jpg'>&lt;img src='/competitions/roboorienteering/2013/img_815233_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/img_815722.jpg'>&lt;img src='/competitions/roboorienteering/2013/img_815722_t.jpg' alt='' title='' class='border'  width='220' height='124'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Trošku dramatičtější byl pak přelet auta. Zbaběle jsem odmontoval anténu, aby se
moc nepletla do vrtulí a sám se schoval dovnitř. Celkem sranda, jen jsem trošku
znejistěl, když jsem dronu po přeletu nikde neviděl a tak rychle mačkal
emergency stop &amp;hellip; ale tou dobou už byla schovaná ve vysoké trávě.&lt;/div>

&lt;div class='p'>Pokusy jsem ještě několikrát opakoval a pokud byly úspěšné, tak hodně na těsno.
Ono to teď z toho grafu je celkem dobře vidět &amp;mdash; než překážku zaregistruje a
přidá nebo ubere, tak ho ta setrvačnost žene do kolize. Asi by bylo potřeba
ještě více „přidat plyn” pro pohyb v Z-ové souřadnici a zmenšit toleranci.&lt;/div>

&lt;h3>A co jinak?&lt;/h3>

&lt;div class='p'>Jinak to začíná být poměrně křeč. Příští víkend je
&lt;a href='/competitions/robotem-rovne/2013/cs'>soutěž v Písku&lt;/a>, venku prší/leje, takže
nevím jestli o tomto posledním víkendu budou nějaké testovací lety, učím se jak
kompilovat linuxový kernel a získat funkční modul &lt;i>usbserial.ko&lt;/i> z
&lt;a href='https://devzone.parrot.com/projects/show/oss-ardrone2' class='external'>Parrot zdrojových
kódů&lt;/a> (zatím neúspěšně), na seznamu týmů RO nic nového &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>14. května 2013 &amp;mdash; homologace 5m: FAILED!&lt;/h2>

&lt;div class='p'>O víkendu jsem trošku zkoušel prográmek, který se snažil držet ve směru startu
a X-ové osy. Bylo to hrozné. Teď jdu zkoumat detaily. Navíc přišel mail od
organizátorů &lt;a href='/competitions/robotem-rovne/2013/cs'>Robotem Rovně&lt;/a>, že
homologace začínají už v 8h a pro jejich úspěšné splnění je třeba ujet/uletět
5m. Mně ale potvora Heidi zahýbá &amp;hellip; a hned po startu si to klidně otočí o 45
stupňů, takže ani tu homologaci by 5dní do soutěže nedala &amp;hellip;&lt;/div>

&lt;div class='p'>Na druhou stranu musím uznat, že v neděli celkem foukalo a bylo by to na celkem
pěkný windsurfing &amp;hellip; tak schválně co si myslela, že se děje.&lt;/div>

&lt;div class='p'>První start, 42. měření skok o 45 stupňů vlevo :(. Přirozená korekce byla tedy
zatáčet vpravo do růží, což vlastně čtyřtulka udělala.&lt;/div>

&lt;pre>{'vy': 5.758006319661097e-29, 'phi': 504.0, 'psi': -40628.0, 'battery': 60,
'altitude': 0, 'ctrl_state': 6, 'vx': -1.3149668872027192e-29, 'theta': 169.0,
'vz': 0.0}

{'vy': -4.3075449891044615e-13, 'phi': 505.0, 'psi': -97467.0, 'battery': 60,
'altitude': 0, 'ctrl_state': 6, 'vx': 1.490124112990543e-08, 'theta': 187.0,
'vz': 0.0}&lt;/pre>

&lt;div class='p'>Vypadá to na první roztočení motorů a jako by 'phi' brala z kompasu, který je v
té chvíli úplně mimo.&lt;/div>

&lt;div class='p'>Koukám na data z kompasu a strukturu &lt;b>navdata_magneto_t&lt;/b> &amp;hellip; ty raw data
vypadají úplně náhodně. Jak když otočíte indiány. Pro představu pár měření:&lt;/div>

&lt;div class='p'>compass:	-103	27	113	1135868020673378100847233746463621120.000000	95579191465795697321761957262393344.000000	-1394810.750000
compass:	-103	27	113	897022365180776029934830915319496704.000000	113103193363350740568052382373511168.000000	-1394810.750000
compass:	-103	27	113	897022365180776029934830915319496704.000000	113103193363350740568052382373511168.000000	-1394810.750000
compass:	-96	26	114	7319102271164370434775037509632.000000	214.262695	-1394810.500000&lt;/div>

&lt;div class='p'>&amp;hellip; a podivovali se nad tím i jiní, viz
&lt;a href='https://projects.ardrone.org/boards/1/topics/show/5150' class='external'>fórum&lt;/a>.&lt;/div>

&lt;div class='p'>Přiznám se, že to v tom úplně nevidím, ale &amp;hellip; např. offsety jsou:&lt;/div>

&lt;pre>compass offset:	0xe0a1c1fcL	0x99d842f3L	0xc44e&lt;/pre>

&lt;div class='p'>kde poslední malé číslo naznačuje, že první dvě by měla být spíše záporná a
opravdu to jsou otočený indiáni.&lt;/div>

&lt;div class='p'>Tak ne &amp;hellip; je to něčím jiným. Ten alignment, ten mne jednou zničí! Tj. chyba
byla v parsovaní dat, kdy&lt;/div>

&lt;pre>values = struct.unpack_from("hhhffffffffffffcIfff", "".join(values))&lt;/pre>

&lt;div class='p'>po prvních třech shortech zarovná strukturu na 4 bajty a pak dostávám nesmysly.
Správně to má být&lt;/div>

&lt;pre>values = struct.unpack_from("=hhhffffffffffffcIfff", "".join(values))&lt;/pre>

&lt;div class='p'>&amp;hellip; tak nevím, zda ten dnešní příspěvek vůbec publikovat. Závěr je, že kompas
není dobře nakalibrovaný a natočení čtyřtulky to výrazně ovlivní. Jak se to
bude chovat pak zatím netuším. Nutno otestovat.&lt;/div>

&lt;hr/>

&lt;h2>20. května 2013 &amp;mdash; Robotem Rovně&lt;/h2>

&lt;div class='p'>Byl jsem teď 4 dny offline, tak se omlouvám za malou odmlku. Heidi ale
nezahálela, zkoušela létat v nárazovém větru, kalibraci kompasu a konečně
soutěžila na „Robotem Rovně”. Tam jsem naší účast bral trošku jako divadlo
pro účastníky &lt;a href='http://www.cipiskoviste.cz/' class='external'>Cipískoviště&lt;/a>, ale organizátoři to pojali
jinak a založili nám novou kategorii „Létající roboti” &lt;span class='smile'>&lt;/span> &amp;hellip; a tak si Heidi
přivezla domu i medaili.&lt;/div>

&lt;div class='p'>Z pohledu létání beru za největší úspěch, že čtyřtulka nikomu neublížila, když
úspěšně odstartovala, tak způsobila mexickou vlnu následovanou potleskem a
splnila i úkol překonat dosavadní
&lt;a href='http://www.kufr.cz/view.php?nazevclanku=robotem-rovne-2010-uspesne-za-nami&amp;amp;cisloclanku=2010050003' class='external'>rekord
28 metrů Tomáše Krajníka z roku 2010&lt;/a>. V průměru si ale vedla hůře, viz
&lt;a href='http://www.kufr.cz/view.php?nazevclanku=5-rocnik-robotem-rovne-aneb-auticka-v-parku-se-vydaril&amp;amp;cisloclanku=2013050001' class='external'>letošní
výsledková listina&lt;/a>. Dojmy a detaily z RR si nechám do článku, který snad
během týdne sepíšu. Tak ještě jedno převzaté foto. Předpokládám, že je to
zrovna situace, kdy si Heidi prosadila svou a odmítla se se mnou dale bavit,
ale z obrázku to není úplně zřejmé &lt;span class='wink'>&lt;/span>.
&lt;table class='image_panel center' style='width: 405px;'>&lt;tr>&lt;td>
&lt;span>&lt;img src='/competitions/roboorienteering/2013/robotem-rovne.jpg' alt='Hedi na startu - převzato z webu Radioklubu Písek' title='Hedi na startu - převzato z webu Radioklubu Písek' class='border'  width='399' height='387'/>&lt;/span>&lt;br/>
&lt;span>Hedi na startu - převzato z webu Radioklubu Písek&lt;/span>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>p.s. ještě dobrá jedna dobrá zpráva na závěr &amp;mdash; RoboOrienteering se pojede!
Teď jsou už
&lt;a href='http://www.vosrk.cz/roboorienteering/index.php?year=2013&amp;amp;page=tymy' class='external'>4 týmy&lt;/a> a
možna ještě 2 přibudou&amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>23. května 2013 &amp;mdash; Status quo&lt;/h2>

&lt;div class='p'>Do soutěže „RoboOrienteering” zbývají už jen tři týdny. Vedle vyřešení
problémů z &lt;a href='/competitions/robotem-rovne/2013/cs'>Robotem Rovně&lt;/a> je nutné
především implementovat detekci překážek.  Ta je potřeba už pro samotnou
homologaci.&lt;/div>

&lt;div class='p'>V plánu jsem měl jednak úpravu LKDemo z OpenCV a tak mne potěšila informace od
Davida Hermana z týmu Roboauto &amp;mdash; jeho student něco podobného řešil v
&lt;a href='http://www.fit.vutbr.cz/study/DP/BP.php?id=13533&amp;amp;y=2011' class='external'>bakalářské práci&lt;/a>.
Používal sice první generaci AR Drone, ale problémy asi budou dost podobné.&lt;/div>

&lt;div class='p'>Druhá varianta je použití sonaru, který ale zase vyžaduje rozchození USB serial
driveru. Jak najít a zkompilovat kernel jsem snad už pochopil, ale problém byl
(?) se správnou konfigurací. Heidi teď nemám doma, ale rozdíl mezi starou a
novější verzí mi dává zase naději:&lt;/div>

&lt;pre>martindnexus:~$ file usbserial.ko
usbserial.ko: ELF 32-bit LSB relocatable, ARM, version 1,
  BuildID[sha1]=0x06bdc0c7558101bc587b35393f570a792fbb80b5, not stripped

vs.

martindnexus:~/drona$ file usbserial.ko
usbserial.ko: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), 
  BuildID[sha1]=0x54754d367f5e3d6ea49a7e5fe024ad5b6db5d901, not stripped&lt;/pre>

&lt;div class='p'>Všechny moduly měly to „(SYSV)”, což je zkratka pro
&lt;a href='https://en.wikipedia.org/wiki/UNIX_System_V' class='external'>Systém V&lt;/a>. Nevěděl jsem, jak to
tam dostat, až jsem narazil na &lt;a href='http://www.drone-rk.org/wiki/ARDrone' class='external'>Building
and Installing USB/Serial Drivers&lt;/a>. Po neděli uvidíme, zda to pomohlo. Jen
korekce linku na zdrojové kódy, který má být správně
&lt;a href='https://devzone.parrot.com/projects/show/oss-ardrone2' class='external'>https://devzone.parrot.com/projects/show/oss-ardrone2&lt;/a>.&lt;/div>

&lt;div class='p'>p.s. pamatujete, jak jsem řešil problém, jak přepnout na automatickou navigaci
na černobílou značku? Tak rozuzlení nejspíše je, že to v mém firmware 2.3.3.
vůbec nejde :-(. Viz
&lt;a href='https://projects.ardrone.org/boards/1/topics/show/5573' class='external'>odpověď Grega&lt;/a> &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>26. května 2013 &amp;mdash; metalog&lt;/h2>

&lt;div class='p'>Jirkovi Išovi trvalo skoro rok, než mne donutil zavést na Eduru metalogy. A
přitom je to práce cca na 1h a následně vám to značně usnadní život. O co se
tedy jedná? V kostce to je „logování logování” &lt;span class='smile'>&lt;/span>. A je pomalu na čase to
zavést i na Heidi &amp;hellip;&lt;/div>

&lt;div class='p'>Neprve motivace: Eduro mělo hned několik zdrojů/logů &amp;mdash; komunikace po CANu,
NMEA data z GPS, obrázky z kamery, data z laseru, data z druhého laseru, data z
RFID tagů, data z joysticku a možná jsem ještě na něco zapoměl. Každý
jednotlivý log měl formát prefix_DATUM_CAS, ale DATUM a CAS nebyly nutně
identické, jak se jednotlivé senzory připojovaly. Pokud jich k přehrání bylo
třeba více, tak bylo nutné je nějak sjednotit a k tomu se hodí metalog.&lt;/div>

&lt;div class='p'>A když už máte jednou metalog, tak si tam můžete napsat více než, kdy se který
senzor připojoval a pod jakým jménem souboru je uložený. Triviální je přidat
příkazovou řádku, máte-li krátký konfigurační soubor, jako je u
RoboOrienteeringu seznam waypointů, tak se vyplatí si jeho obsah do metalogu
zkopírovat. Při startu můžete připsat větu, co že by to mělo dělat a po
skončení připsat jak to v realitě dopadlo. A kdyby jste byli opravdu důslední
puntičkáři a před každým testem všechny zdrojáky komitovali do gitu či
mercurialu, tak můžete přidat i hash repository.&lt;/div>

&lt;div class='p'>Pro zavedení metalogu na Heidi si ho nejprve vytvářím ručně sám. Testovací příklad
&lt;i>meta_130518_130615.txt&lt;/i> vypadá takto:&lt;/div>

&lt;pre>navdata: logs\navdata_130518_130615.log.gz
atcmd: logs\atcmd_130518_130615.txt
video: video_130518_130617.bin
video_rec: video_rec_130518_130617.bin&lt;/pre>

&lt;div class='p'>Všimněte si, že i tady od startu Heidi uteklo pár sekund, než se začala logovat
kamera &amp;hellip;&lt;/div>

&lt;div class='p'>Až do teď mne na Heidi z pohledu programu zajímala jenom navdata a vystačil
jsem si s tím i na soutěži &lt;a href='/competitions/robotem-rovne/cs'>Robotem Rovně&lt;/a>. Teď
bych rád ale přidal další senzory (GPS, sonar), které budou chodit nezávisle
na navdata, začal zpracovávat kameru a konečně potřebuji průběžně uklízet kód,
aniž by se změnilo jeho chování (refactoring).To je natolik užitečná
zaležitost, že bych jí tady ještě rozepsal &amp;hellip; i když už se asi budu opakovat
a někde na robotika.cz to určitě najdete.&lt;/div>

&lt;div class='p'>U logů je důležité ukládat jak data ze senzorů, tak vaše samotné příkazy. V
případě AR Drone to je ukládání AT příkazů. Proč? Pokud program pouštíte a ladíte
na různých počítačích, tak tímto způsobem máte větší jistotu, že v obou
případech používáte stejný kód.&lt;/div>

&lt;div class='p'>Další použití je již zmiňovaný refactoring: je to vlastně triviální test, že z
pohledu příkazů/rozhodnutí se nic nezměnilo. Také vám nic nebrání test pustit
na posledních 10 pokusů, pokud všechny běžely se stejným programem.&lt;/div>

&lt;div class='p'>Ještě bych zmínil jednu deset let starou historku spojenou s přehráváním logů:
na robotu &lt;a href='/robots/daisy/cs'>Daisy&lt;/a> bylo řízení ze starého iPAQu. Kód byl psaný v
jazyce C, ale choval se jinak na robotu a jinak na notebooku (už jenom toto je
bez logu netriviální zjistit). S vysvětlením tenkrát přišel Zbyňek &amp;mdash; k
navigaci jsme používali &lt;a href='/guide/localization/cs'>Monte-Carlo lokalizaci&lt;/a> s
floatovou aritmetikou. Ta je na iPAQu řešena softwarově a notebooku hardwarově.
Matematický koprocesor ale vše počítá v double a teprve pak výsledek převádí na
float, zatímco softwarově byly i mezivýsledky floatové &amp;hellip; pěkně, že? Přešli
jsme na double a od té doby to bylo 1:1. Nezapomenutelné ponaučení &lt;span class='smile'>&lt;/span>.&lt;/div>

&lt;hr/>

&lt;h2>27. května 2013 &amp;mdash; usbserial.ko&lt;/h2>

&lt;div class='p'>Test nového buildu modulu &lt;i>usbserial.ko&lt;/i> jsem nechal až na neděli a dopadlo
to podle očekávání &amp;mdash; nefungovalo to.&lt;/div>

&lt;pre># insmod usbserial.ko
insmod: can't insert 'usbserial.ko': invalid module format&lt;/pre>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/drone-gps.jpg'>&lt;img src='/competitions/roboorienteering/2013/drone-gps_t.jpg' alt='AR Drone 2 s GNS GPS' title='AR Drone 2 s GNS GPS' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/drone-gps.jpg'>AR Drone 2 s GNS GPS&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Dvakrát sdílný ten popis není, ale možná existuje nějaký verbose parametr,
který jsem měl použít, ale nevypadá to. V použitém
&lt;a href='http://www.drone-rk.org/wiki/ARDrone' class='external'>návodu&lt;/a> popisovali změnu verze
z „2.6.32.9” na „2.6.32.9-g0d605ac”, ale build mého 2.3.3 firmware má jinou
verzi! Konkrétně na droně najdu adresář &lt;b>/lib/modules/2.6.32.9-gbb4d210/&lt;/b> &amp;hellip;
nová naděje &lt;span class='wink'>&lt;/span>. Doma jsem se udělal nový build a nastal
magický okamžik:&lt;/div>

&lt;pre>BusyBox v1.14.0 () built-in shell (ash)
Enter 'help' for a list of built-in commands.

# cd /data/video/
# mkdir driver2
# cd driver2/
# insmod usbserial.ko
#&lt;/pre>

&lt;div class='p'>Pro ty, co ten úžasný pokrok nevidí, tak &lt;i>insmod&lt;/i> už nenásleduje chybová
hláška &lt;span class='smile'>&lt;/span>. Pokud každý nový firmware potřebuje jinak zkompilované moduly, tak
to je možná i důvod, proč nejsou na webu běžně ke stažení &amp;hellip;&lt;/div>

&lt;div class='p'>Teď bych použil frázi „getting there but not there yet”. Ze zmiňovaného
&lt;a href='http://www.drone-rk.org/wiki/ARDrone' class='external'>návodu&lt;/a> jsem pochopil, že budu
potřebovat ještě další moduly. Nápověda z Windows a dokumentace
&lt;a href='http://www.mapfactor.com/cs/produkty/gps/usb-gps-pijima-s-rdstmc-bluetooth/' class='external'>GPS
GNS 5860&lt;/a> byla, že ten driver bude začínat „cp21” a opravdu se
zkompiloval i „cp210x.ko”. Insmod už fungoval bez problémů, ale USB zařízení
nebylo vidět. Zkusil jsem to snad 5x vypojit a zapojit než se hláška změnila:&lt;/div>

&lt;pre># lsusb
Bus 001 Device 001: ID 1d6b:0002
# lsusb
Bus 001 Device 002: ID 10c4:ea60 Cygnal Integrated Products, Inc.
Bus 001 Device 001: ID 1d6b:0002
#&lt;/pre>

&lt;div class='p'>Jestli toto má pak být spolehlivý robot, tak potěš &amp;hellip; no nic. V dalším kroku
jsem si chtěl podle &lt;a href='http://paparazzi.enac.fr/wiki/AR_Drone_2/GPS' class='external'>wiki na
Paparazzi&lt;/a> nechat vypisovat NMEA data a zase nic:&lt;/div>

&lt;pre># stty -F /dev/ttyUSB0 ispeed 38400 &amp;amp;&amp;amp; cat &amp;lt; /dev/ttyUSB0
stty: /dev/ttyUSB0: cannot perform all requested operations&lt;/pre>

&lt;div class='p'>Na to, že jsem chtěl změnit jenom jeden parametr a nemohl změnit všechna mne
pak zaskočilo, když tu rychlost opravdu změnil, ale stále to není ono. Příkaz
„cat /dev/ttyUSB0” mi začal sypat tato data:&lt;/div>

&lt;pre>&lt;i>GPGGA,195048.644,5048.6133,N,00609.2?Err?493,E,0,0,,102.4,M,47.6,M,,*4B

&lt;/i>GPGSA,A,1,,,?Err?,,,,,,,,?Err?,,,?Err?,*1E

$GPRMC,195048.644,V,5048.6133,N,00609.2493,E,0.00,0.00?Err?,260513,,,N*7F&lt;/pre>

&lt;div class='p'>což je lepší než nic, ale dobré to rozhodně není (pokud to nevidíte, tak jsou
tam ty divné &lt;b>?Err?&lt;/b>).&lt;/div>

&lt;div class='p'>Z pohledu soutěže je GPS až druhotná a měl bych se spíše zaměřit na rozchození
modulu k sonaru.
&lt;a href='http://shop.snailinstruments.com/index.php?main_page=product_info&amp;amp;products_id=899' class='external'>USBISS&lt;/a>
zařízení ale rovnou vyžaduje oboustrannou komunikaci a jak pokus s GPS
naznačuje, asi ani tam cesta moc přímá nebude.&lt;/div>

&lt;hr/>

&lt;h2>28. května 2013 &amp;mdash; /dev/ttyACM0&lt;/h2>

&lt;div class='p'>Dnes jsem narychlo vyzkoušel jinou GPS
(&lt;a href='http://www.mapfactor.com/en/products/gps/gps-br-355-usb/' class='external'>GPS BR-355 USB&lt;/a>),
která ma Prolific driver (modul &lt;i>pl2303.ko&lt;/i>) a ta na rychlosti 4800 fungovala
pěkně. Konečně ta chybová hláška &lt;i>stty: /dev/ttyUSB0: cannot perform all
requested operations&lt;/i> se týká pravděpodobně klíčového slova &lt;i>ispeed&lt;/i> a
rychlost samotná se vlastně stane nezávislý parametr a nastaví se.&lt;/div>

&lt;div class='p'>Další test byl s USBISS &amp;mdash; ono bych ho mezi /dev/ttyUSB* ani nenašel, i kdyby
to fungovalo. Zkusil jsem to na linuxu u kolegy v práci a tomu se vytvořilo nové zařízení
na &lt;i>/dev/ttyACM0&lt;/i> &amp;hellip; celkem pěkné vysvětlení najdete
&lt;a href='http://www.rfc1149.net/blog/2013/03/05/what-is-the-difference-between-devttyusbx-and-devttyacmx/' class='external'>zde&lt;/a>.
Inkrementální krůček už je řádově snažší než první krok a tak jsem oeditoval
&lt;i>.config&lt;/i>:&lt;/div>

&lt;pre>martindnexus:~/linux0523$ diff .config config-orig
1429c1429
&amp;lt; CONFIG_USB_ACM=m
&amp;mdash;
&amp;gt; # CONFIG_USB_ACM is not set&lt;/pre>

&lt;div class='p'>zkompiloval moduly, zkopíroval vytvořený &lt;b>drivers/usb/class/cdc-acm.ko&lt;/b>,
nahrál do drony a &amp;hellip;&lt;/div>

&lt;pre># cd /data/video/driver2/
# insmod cdc-acm.ko

# ls /dev/ttyACM0
/dev/ttyACM0&lt;/pre>

&lt;div class='p'>Tak to bylo až podezřele snadné. Uvidíme, až z toho budu chtít přečíst alespoň
jeden bajt&amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>31. května 2013 &amp;mdash; sonar SRF02&lt;/h2>

&lt;div class='p'>&lt;a href='http://cs.wikiquote.org/wiki/Latinsk%C3%A9_v%C3%BDroky' class='external'>Marnost nad marnost,
vše je marnost&lt;/a> &amp;hellip; alespoň tak jsem to viděl před více jak 24h, ale už to
trošku vyprchalo.&lt;/div>

&lt;div class='p'>Ve St večer jsem byl v práci u Tomáše a zapojovali jsme nový senzor do AR Drone
2: &lt;b>sonar&lt;/b>. Nejprve Tomáš nahradil původní
&lt;a href='http://www.circuitsathome.com/wp/wp-content/uploads/2012/02/USB_connector_B.jpg' class='external'>USB
B&lt;/a> konektor přímo za
&lt;a href='http://www.google.com/imgres?imgurl=http://upload.wikimedia.org/wikipedia/commons/7/79/Type_A_USB_connector.jpg&amp;amp;imgrefurl=http://commons.wikimedia.org/wiki/File:Type_A_USB_connector.jpg&amp;amp;h=723&amp;amp;w=1024&amp;amp;sz=88&amp;amp;tbnid=BulOq2wuoTSEWM:&amp;amp;tbnh=90&amp;amp;tbnw=127&amp;amp;zoom=1&amp;amp;usg=__EMOMWU4e4WcDZoBv82SdXG697fI=&amp;amp;docid=ETvVTTWzhMZ0AM&amp;amp;sa=X&amp;amp;ei=KCmoUduFC4LYOt_2gaAE&amp;amp;sqi=2&amp;amp;ved=0CEMQ9QEwBQ&amp;amp;dur=522' class='external'>USB
A konektor&lt;/a>. Z pohledu nezávislého pozorovatele to nebylo až tak triviální a
sám bych se do toho rozhodně nepouštěl. Psal jsem před časem i výrobci, zda
neplánují změnu konektoru a odpověď byla &lt;i>If we ever used a different connector
it would be the mini B type.&lt;/i> Na ten mini by už byly i
&lt;a href='http://www.gme.cz/redukce-pro-konektory-usb/' class='external'>krátké redukce&lt;/a>, tak možná
někdy bude integrace snazší.&lt;/div>

&lt;div class='p'>Toto proběhlo dobře &amp;mdash; Tomáš je důkladný a k žádnému prohození + a - nebo
datových kabelů nedošlo. Modul
&lt;a href='http://shop.snailinstruments.com/index.php?main_page=product_info&amp;amp;products_id=899' class='external'>USBISS&lt;/a>
komunikoval a bez propojovacího kabelu jsem ušetřil hned několik gramů a hlavně
už nepřekážel. Už jenom úspěšnost tohoto kroku mne naznačuje, že úvodní
tvrzení je zavádějící, ale pojďme dál.&lt;/div>

&lt;div class='p'>K převodníku jsem si koupil dva
&lt;a href='http://shop.snailinstruments.com/index.php?main_page=product_info&amp;amp;cPath=65_72&amp;amp;products_id=192' class='external'>sonary
SRF02&lt;/a>. Jelikož jsou dva, tak je musíte každý jinak adresovat. Z továrny mají
přednastavanou adresu &lt;b>E0&lt;/b> a ta funguje. Po drobné úpravě
&lt;a href='http://www.strand.id.au/Mikes-stuff/usingthesrf02ultrasonicrangerwithpythonpyserial' class='external'>prográmek
v Pythonu&lt;/a> (změnil jsem port z &lt;i>/dev/ttyUSB0&lt;/i> na &lt;i>COM19&lt;/i> a zakomentoval
&lt;i>os.system('clear')&lt;/i>) vypisoval vzdálenosti v centimetrech, které na první
pohled vypadaly rozumně. Další protipříklad, že jsem to v úvodu přehnal.&lt;/div>

&lt;div class='p'>V této fázi jsme to měli zabalit, spokojit se s jedním sonarem do HW verze 0,
udělat cca 10cm propojovací I2C kablík a přichytit sonar těsně nad kameru, kam
krásně pasuje. Ale ne, to hloupému Martinovi nestačí. On musí mít sonary hned
dva. Musí z drony hned dělat
&lt;a href='http://en.wikipedia.org/wiki/General_Atomics_MQ-1_Predator' class='external'>predátora&lt;/a> (to
asi znáte,
&lt;a href='http://www.zoologie.frasma.cz/mmp%200308%20ptaci/Obecna%20charakteristika%20ptaku.html' class='external'>jak
mají ptáci oči&lt;/a> &amp;hellip; většinou stačí jeden pohled a víte, zda jsou to dravci
nebo lovná zvěř, tj.  zda oči používají na stereo-vision nebo na pokrytí
pokud možno celých 360 stupňů pohledu).&lt;/div>

&lt;div class='p'>Ke změně I2C adresy je třeba vyslat posloupnost kódů se zápisem do registru 0,
konkrétně 0xA0, 0xAA, 0xA5 a novou adresu zařízení, třeba 0xF2
(&lt;a href='http://www.robot-electronics.co.uk/htm/srf02techI2C.htm' class='external'>viz detailní
popis&lt;/a>). Změnili jsme to a nic. Odpojili, připojili a nic. Koukali na to na
profi-I2C-analyzátoru, viděli všechny bajty i s potvrzením od zařízení a nic. A
to vše nějakou nezdravou dobu, až se žena doma divila, kde jsem tak dlouho
byl &amp;hellip;&lt;/div>

&lt;div class='p'>Kdybych to zkusil teď, tak by to určitě fungovalo, ale &lt;b>mne to už vůbec
nezajímá!!!&lt;/b> &lt;span class='smile'>&lt;/span> &amp;hellip; vidíte, ještě to úplně nevyprchalo, tak třeba po víkendu.
Jak jsem psal, pro HW verzi 0 to stačí. A jelikož Rychnov je už za 14dní, tak
je na čase udělat „HW freeze”. Prostě naučit se žít s tím, co člověk
momentálně má, zjistit co to má za mouchy a cca za týden udělat i „SW
freeze”, na nic nesahat a „jenom” testovat &amp;hellip;&lt;/div>

&lt;div class='p'>p.s. možná je tam nějaký problém s časováním, podobně jako jsem psal v
&lt;a href='/competitions/iarc/2013/cs'>IARC blogu&lt;/a>, a pomalu se přiznám, že takové
protokoly nemám rád &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>2. června 2013 &amp;mdash; voda&lt;/h2>

&lt;div class='p'>Tento víkend jsem toho na zahradě moc nenalétal. Je na čase implementovat „návrat
na základnu” &amp;mdash; emergency tlačítko bych jinak použil nejvýše jednou &amp;hellip;
&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/river-garden.jpg'>&lt;img src='/competitions/roboorienteering/2013/river-garden_t.jpg' alt='... jen pro hydroplány a kachny' title='... jen pro hydroplány a kachny' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/river-garden.jpg'>... jen pro hydroplány a kachny&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>5. června 2013 &amp;mdash; stty&lt;/h2>

&lt;div class='p'>To byl zase zásek na několik hodin :-(. To je tak, když si někdo naivně myslí,
že poslat 5 bajtů, chvíli počkat, poslat další 4 bajty a přijmout 3 bajty je
práce na pár minut. Měla by být! V Pythonu je. Do čtyřtulky ale Python
nedostanu (není tam moc volného místa a nevěřím, že to vše hned bude fungovat),
takže hezky v Céčku. O co mi jde? Potřebuji naměřit vzdálenost pomocí
&lt;a href='http://www.robot-electronics.co.uk/htm/srf02techI2C.htm' class='external'>sonaru SRF02&lt;/a>.&lt;/div>

&lt;div class='p'>Pamatoval jsem si, že už kdysi jsem něco se seriovým portem pod linuxem dělal.
Chvíli jsem hledal až to našel na našich stránkách v článku
&lt;a href='/articles/atmega8-board/cs'>ATmega8 board&lt;/a> &lt;span class='smile'>&lt;/span>. Napsal jsem si krátký prográmek:&lt;/div>

&lt;pre>#include "SerialCommLinux.h" 
int main()
{
  SerialCommLinux com( "/dev/ttyACM0", B9600 );
  int i, j, val[3];
  BYTE sonarStep1[] = { 0x55, 0xE0, 0x00, 0x01, 0x51 };
  BYTE sonarStep2[] = { 0x55, 0xE1, 0x02, 0x02 };
  for( i = 0; i &amp;lt; 10; i++ )
  {
    com.sendBuffer( sonarStep1, sizeof(sonarStep1)/sizeof(BYTE) );
    com.sendBuffer( sonarStep2, sizeof(sonarStep2)/sizeof(BYTE) );
    for( j = 0; j &amp;lt; 3; j++ )
      val[j] = com.waitForByte( 100 );
    printf( "sonar:\t%d\t%d\n", val[0], val[1]*256 + val[2] );
  }
  return 0;
}&lt;/pre>

&lt;div class='p'>a nejprve mi nešel zlinkovat. Po chvíli mi došlo, že &lt;b>gcc&lt;/b> není to co pro C+ +
potřebuji a s &lt;b>g++&lt;/b> už kompilace proběhla bez problémů:&lt;/div>

&lt;pre>martindnexus:~/sonar$ arm-linux-gnueabi-g++ -o sonar-arm SerialCommLinux.cpp sonarMain.cpp&lt;/pre>

&lt;div class='p'>Přepojit se na dronu, upload &amp;hellip; a nic, přesněji:&lt;/div>

&lt;pre># /data/video/sonar-arm
sonar:  -1      -257
sonar:  -1      -257
sonar:  -1      -257
sonar:  -1      -257
sonar:  -1      -257&lt;/pre>

&lt;div class='p'>tj. samé timeouts. Dobře raději to vyzkouším i ve Windows. U
&lt;a href='/articles/atmega8-board/cs'>článku&lt;/a> jsou i další zdrojáky a projekt pro Vistual
Studio 2005 (také je to všechno z roku 2005), takže to šlo rychle (programování
mazáním). Pustil jsem to a zase nic. Ještě zmíním, co jsem změnil (přesněji to byly
ifdefy na &lt;i>__unix__&lt;/i> ): použil jsem &lt;i>SerialComm com( L"COM19:", 9600
);&lt;/i>  místo &lt;i>SerialCommLinux&lt;/i>.&lt;/div>

&lt;div class='p'>Tady jsem čerta tušil &amp;mdash; Windows nemají rády COMy s číslem vyšším než 10 a
USB-ISS se detekoval na COM19. Jedna varianta je COM přemapovat, druhá je najít
řešení v kódu Navigátora a to je:&lt;/div>

&lt;pre>SerialComm com( "\\\\.\\COM19", 9600 );&lt;/pre>

&lt;div class='p'>Fajn, fungovalo, několik 65535, že sonar ještě nestihl nic naměřit (v té době
mi tam chybělo to čekání), takže novým kódem to není.&lt;/div>

&lt;div class='p'>Ještě jsem nezmínil, že jsem původně chtěl kompilovaný kód úplně obejít a jenom
pomocí &lt;i>cat&lt;/i> pěti a čtyřbajtového souboru na &lt;i>/dev/ttyACM0&lt;/i> si vynutit
měření sonaru a pomocí &lt;i>hexdump -n 3&lt;/i> si ho zase přečíst. LEDky blikaly
(tj.  sonar vysílal), ale čtení se vždy bloklo. V kombinaci s mým Céčkovým
kódem to ale občas pár znaků přečetlo, takže nějaka naděje zůstala.&lt;/div>

&lt;div class='p'>Včera jsem vzal modul do práce a zapojil ho do jednoho ze serverů &amp;hellip; a
kupodivu stejné chování jako na droně &lt;span class='smile'>&lt;/span>. To byl úspěch, protože jsem po
každém kompilování nemusel přepojovat sítě a pod. Zkusil jsem pythonovský
prográmek pod linuxem a ten mi hned vracel měření ke zdi. Zase naděje. Pak
marné zápolení s parametry v kódu &lt;i>SerialCommLinux&lt;/i>, abych výstup z &lt;b>stty&lt;/b>
dostal stejné jako po puštění pythonovského programu:&lt;/div>

&lt;pre>martindnexus:~/sonar/python$ stty -F /dev/ttyACM0
speed 19200 baud; line = 0;
intr = &amp;lt;undef&amp;gt;; quit = &amp;lt;undef&amp;gt;; erase = &amp;lt;undef&amp;gt;; kill = &amp;lt;undef&amp;gt;; 
start = &amp;lt;undef&amp;gt;; stop = &amp;lt;undef&amp;gt;; susp = &amp;lt;undef&amp;gt;; rprnt = &amp;lt;undef&amp;gt;;
werase = &amp;lt;undef&amp;gt;; lnext = &amp;lt;undef&amp;gt;; flush = &amp;lt;undef&amp;gt;; min = 0; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke&lt;/pre>

&lt;div class='p'>Když jsem náhodné hackování vzdal, tak jsem narazil na webu na
&lt;a href='http://www.robot-electronics.co.uk/files/linux_srf02.c' class='external'>linux_srf02.c&lt;/a>,
zkompiloval a hned to fungovalo. Hurá! &lt;span class='smile'>&lt;/span>&lt;/div>

&lt;div class='p'>Udělal jsem si ještě verzi pro ARM a jak myslíte, že do dnes ráno při testování
dopadlo? Nijak, program se bloknul a nic nevypsal. LEDky blikly, takže
minimálně se mu podařilo psát, ale nikoliv číst. Při pohledu na výpis:&lt;/div>

&lt;pre># stty -F /dev/ttyACM0
speed 19200 baud;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = &amp;lt;undef&amp;gt;;
eol2 = &amp;lt;undef&amp;gt;; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-brkint -imaxbel&lt;/pre>

&lt;div class='p'>modří už vědí &amp;hellip; a já zrudlý do červena už pomalu také. Je to modem, který
používá speciální znaky. Co se asi stane, když sonar naměří něco podobného
speciálnímu znaku?? Interpretuje to. Ta magie je v tom &lt;b>&amp;lt;undef&amp;gt;&lt;/b>, tj.
„všechno vypnout”! Asi je na to nějaký speciální příkaz, já to dělal dřevácky
po jednom:&lt;/div>

&lt;pre># stty -F /dev/ttyACM0 intr ^- quit ^- erase ^- kill ^- eof ^- start ^- stop ^-
susp ^- rprnt ^- werase ^- lnext ^- flush ^-&lt;/pre>

&lt;div class='p'>a pak už to začalo fungovat. Vtipné. Prostě podle toho jak moc jste byli od
překážky to buď částečně fungovalo nebo ne &amp;hellip;&lt;/div>

&lt;div class='p'>A co jinak? Do soutěže zbývá týden a poslední víkend na testování. Ten ale
spíše strávím odstraňování důsledků záplav z minulého víkendu. No snad alespoň
tu homologaci dám&amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>7. června 2013 &amp;mdash; AVI s raw H264 snímky&lt;/h2>

&lt;div class='p'>Včera jsem konečně zkonvertoval pár zajímavějších video záznamů z a „skrytě je
zveřejnil” &lt;a href='/competitions/robotem-rovne/2013/cs'>zde&lt;/a>. Přestože se na webu
dočtete, že &lt;i>H.264 + AVI is not a good move. You should go with MKV or MP4 as
your container&lt;/i>, tak cesta existuje. Binární data snímků v H264 kódování jsou
uložena bez konverze (tedy bez dalších ztrát kvality) a s výsledkem si poradí
jak YouTube, tak třeba &lt;a href='http://www.videolan.org/' class='external'>VideoLAN&lt;/a>.&lt;/div>

&lt;div class='p'>Výchozí pro mne byl příspěvek na Stack Overflow:
&lt;a href='http://stackoverflow.com/questions/5964142/raw-h264-frames-in-mpegts-container-using-libavcodec' class='external'>Raw
H264 frames in mpegts container using libavcodec&lt;/a>. Sice už je postarší a se
současnou verzí &lt;a href='http://ffmpeg.org/' class='external'>ffmpeg&lt;/a> si úplně nerozumí, ale můžete
se inspirovat radami z blogu
&lt;a href='http://sgros.blogspot.cz/2013/01/deprecated-functions-in-ffmpeg-library.html' class='external'>Deprecated
functions in ffmpeg library&lt;/a> pro opravu dvou volání funkcí a jedné proměnné.
Pro kompilaci pod Windows použít, třeba jako já, připravené projekty a knihovny
v &lt;a href='https://github.com/puku0x/cvdrone' class='external'>CVDrone&lt;/a>. Jestli chcete přeskočit rovnou
k cíli, tak &lt;a href='/competitions/roboorienteering/2013/convert.cpp'>zde&lt;/a> je upravený originální kód.&lt;/div>

&lt;div class='p'>p.s. omlouvám se, že videa jsou bez zvuku (drona vrčení nenatáčí) a s
komponováním si budu hrát někdy příště &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>10. června 2013 &amp;mdash; Deterministická vlákna&lt;/h2>

&lt;div class='p'>Byla neděle, krátce před 17h. Udělal jsem pár oprav, které by si zasloužily
test venku. Slyším ale divný rachot &amp;hellip; bouřka nebo bagr u sousedů? Oboje.
Vybíhám na louku dokud ještě neprší. V prvním testu (&lt;i>meta_130609_170501.log&lt;/i>)
Heidi odmítne rozpoznat připojené USB zařízení. Letí celkem OK. Odpojit,
připojit a druhý pokus (&lt;i>meta_130609_170646.log&lt;/i>). Pomalu se zvedá vítr, ale
sonar už běží a chodí z něj data. U třetího pokusu (&lt;i>meta_130609_170803.log&lt;/i>) už
padají první kapky a začíná slejvák. Hážu dronu do kufru (auto stojí na louce)
a s notebookem běžím zpět do chaty. Nějak se zbláznila wifina, takhle blikat
jsem jí posledních 8(?) let neviděl a vypínám ho natvrdo. Po deseti minutách
žena hlásí, že na louce už je voda a to jak v pásech po kolech auta, tak
napříč. Vyrážím v holinách do bouřky přeparkovat. Klouže to, ale vody je zatím
jen cca 15cm a dostanu se k brance. Za dalších 10min se zahrada změnila v řeku
a je to v horším stavu než při kulminaci minulou neděli. Před tím se voda
sbírala celý den, teď to ale vše bylo za 20min &amp;hellip; tak to je nudná realita a
teď zpět k té virtuální.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/self-portrait.jpg'>&lt;img src='/competitions/roboorienteering/2013/self-portrait_t.jpg' alt='Dál ani krok!' title='Dál ani krok!' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/self-portrait.jpg'>Dál ani krok!&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>O čem jsem chtěl psát jsou „deterministická vlákna”. Není to úplně výstižné,
ale &amp;hellip; jde o to, aby váš program mohl být více-vláknitý (multi-threaded) a
přitom, pro pozdější analýzu, se choval zcela deterministicky. Řešení, které
používám jsem přebral od Zbyňka, když ještě programoval
&lt;a href='/robots/ester/cs'>Esterku&lt;/a>.&lt;/div>

&lt;div class='p'>Princip je v zásadě celkem jednoduchý &amp;mdash; oddělené vlákno se s hlavním
programem „potkává” jen v jednom bodě (míněno v jedné funkci) a v ten okamžik
se i logují předávaná data. Příkladem může být pomalé zpracování obrázku z
kamery, např. s cílem lokalizovat kontrolní kužel, a loguje se souřadnice v
obraze (nebo i další parametry, jako výška, šířka, věrohodnost, alternativní
cíle &amp;hellip;). Při přehrávání/debugování hlavního programu pak už neběží „kamerové
vlákno”, ale pouze po X-krocích, kolik je X se také loguje, si hlavní program
přečte další data z logu.&lt;/div>

&lt;div class='p'>Co jsem tento víkend podobným způsobem zapojoval byl sonar. Běží nezávisle s
telnet připojením, kdy na začátku ověřuje dostupnost &lt;i>/dev/ttyACM0&lt;/i> a pak čte
výsledky z výpisu z malého céčkového prográmku. Protože je rozdíl, jestli
jednou přečtete vzdálenost 0.5m a tu pak stále vracíte a situací, kdy stále
čtete 0.5m, tak ještě ke každému měření přidávám pořadový index. A už první
test přinesl své ovoce. Začátek souboru &lt;i>sonar_130608_190101.log&lt;/i> vypadal
takto:&lt;/div>

&lt;pre>52
(0, 493)
45
(2, 138)
13
(3, 325)
41
(5, 46)
&amp;hellip;&lt;/pre>

&lt;div class='p'>Loguji textově. Data nejsou velká a na jejích dekódování nepotřebujete nic
speciálního. Střídá se řádek s počtem dotazů z hlavního programu, než dostanete
novou odpověď. Tedy po 52 dotazech (cca 0.25s od startu programu při 200Hz
update) dostal první měření od sonaru, které má index 0 a naměřenou vzdálenost
493cm.  Princip je snad jasný.&lt;/div>

&lt;div class='p'>A kde jsou tedy ty chyby? Nuže, sonarová měření by měla mít index souvislý, bez
děr. Ztratilo se měření s indexem 1, 4 a časem jsou tam i díry velikosti 10,
což při 10Hz znamená, že dorna celou sekundu nezískala informaci o překážkách!
Napadá mne, že chybí flush v programu, případně, že telnet má také nějaké
buffery a hned s každým bajtem nepospíchá &amp;hellip; to je ještě třeba ověřit.&lt;/div>

&lt;div class='p'>Můj homologační prográmek byl celkem triviální: když je překážka méně jak 1
metr daleko, tak zastav (hover), jinak leť požadovanou rychlostí rovně. S
drobnými poryvy větru a vrtochy čtyřtulky se ale klidně vyhnula velkému
skleníku (jo, byla to trošku destruktivní myšlenka pouštět jí tím směrem) a tak
jsem jí nasměroval do volného prostoru a snažil se ji zastavit máváním rukou
před sonarem. Marně. Buď nezastavila, nebo až o několik metrů dál &amp;hellip;  hmmm.&lt;/div>

&lt;div class='p'>V programu jsem našel hned dvě velké hrubky (našel jsem je tak, že jsem měnil
limit pro zastavování a divil se, že se chování programu nijak nezměnilo, tedy
že přehrávání logu neassertovalo). První věc byla, že jsem zapomněl na zmiňovaný
index měření. V Pythonu, trošku překvapivě, lze porovnat N-tici se skalárem:&lt;/div>

&lt;pre>>>> (27, 391) &lt; 1.0
False&lt;/pre>

&lt;div class='p'>takže má podmínka nebyla nikdy splněna. Druhou chybu asi také tušíte. Správně
tedy hned po přečtení dat ze sonarového vlákna zahazuji index a to druhé číslo
dělím 100.0 &amp;hellip; jj, ty jednotky.&lt;/div>

&lt;div class='p'>Mezi daty ze sonaru jsem měl ještě několik 0 a to je bylo špatné znamení :(.
Kouknu se ještě do dokumentace, ale předpokládám nepotvrzenou komunikaci na
I2C. Navíc teď koukám, že ty tři zmiňované pokusy v úvodu jsou všechny prázdné
a sonar nějak vůbec nefungoval, no nic, prima, ostatně já mám pondělky stejně
nejraději (těžká ironie). Pokračování až po úpravě C-prográmku a dalších testech
&amp;hellip;&lt;/div>

&lt;div class='p'>p.s. co si myslíte, že se stane, když uděláte paste do terminálu:
&lt;i>M:\hg\md\heidi\logs&amp;gt;m:\git\cvdrone\bin\vs2008\test.exe video_rec_130608_194358.bin&lt;/i>? 
&lt;table class='image_panel center' style='width: 341px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/monday.png'>&lt;img src='/competitions/roboorienteering/2013/monday_t.png' alt='' title='' class='border'  width='335' height='169'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&amp;hellip; smažete si přehrávací program. Přeji pěkné pondělí &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>11. června 2013 &amp;mdash; 3 dny &amp;hellip;&lt;/h2>

&lt;div class='p'>Do soutěže zbývají 3 dny. Nevypadá to růžově. Včera jsem ještě koukal, jak je
to v tom Pythonu s porovnáváním různých typů a je to tak, že N-tice bude vždy
větší než číslo. Díky tomu pak můžete setřídit pole (list), který obsahuje
různé typy &amp;mdash; podrobnější vysvětlení najdete např.
&lt;a href='http://michael-yxf.appspot.com/?p=251002' class='external'>zde&lt;/a>.&lt;/div>

&lt;div class='p'>Dále jsem si četl, jak je to s těma nulama při čtení sonaru &amp;hellip; a je to divné.
Z &lt;a href='http://www.robot-electronics.co.uk/htm/srf02techI2C.htm' class='external'>dokumentace&lt;/a>, mne
trošku vyděsila poznámka: &lt;i>You can take advantage of the fact that the SRF02
will not respond to any I2C activity whilst ranging.&lt;/i> &amp;hellip; to skoro nechci ani
vědět, jak tam chodí ty potvrzovací ACK. Doporučují číst verzi sonaru a
když je 0xFF, tak že ještě echo nepřišlo. To jsem do kódu vrátil (v
&lt;a href='http://www.robot-electronics.co.uk/files/linux_srf02.c' class='external'>originálním
příkladu&lt;/a> to bylo, ale přišlo mi to zbytečné). Teď loguji jak verzi sonaru, tak
potvrzení vyslání echa. Teoreticky by to měl být test spolehlivosti I2C v blízkosti
čtyř motorů &amp;mdash; pokud dostanu jinou verzi sonaru než číslo 6, tak to zlobí.
Včera v noci jsem to ale už se zapnutými motory nezkoušel &amp;hellip; bylo mi líto
sousedů (ale to se asi s blížícím termínem soutěže změní).&lt;/div>

&lt;div class='p'>Další (nové) poučení je s detekcí USB zařízení. Nejen, že se občas
neobjeví, ale někdy &lt;i>lsusb&lt;/i> trvá přes minutu! Myslel jsem, že se to nějak
kouslo, ale pak to skončilo. Připojil jsem se rovnou a obalil to zjišťováním
času:&lt;/div>

&lt;pre># date &amp;amp;&amp;amp; lsusb &amp;amp;&amp;amp; date
Sat Jan  1 00:08:25 UTC 2000
Bus 001 Device 001: ID 1d6b:0002
Sat Jan  1 00:09:34 UTC 2000
#&lt;/pre>

&lt;div class='p'>Pěkné, že? Teď mi skoro přijde na hlavu to zapojení sonaru přes
wifi-usb-seriak-i2c &amp;hellip;&lt;/div>

&lt;div class='p'>Pro uklidnění jsem ráno trošku „uklízel”. Zapojil si zobrazování sonaru do
vieweru (2 řádky) a doplnil čtení souboru s kontrolními body na
RoboOrienteering. Sám dobře vím, jaký je to stres v těch 10min vše spolehlivě
připravit, &lt;a href='/competitions/roboorienteering/2010/cs'>neprohodit X a Y&lt;/a> a pod &amp;hellip;
bohatě bude stačit to trojité bootování, aby sonar naběhl.&lt;/div>

&lt;hr/>

&lt;h2>12. června 2013 &amp;mdash; 2 dny (listy a větve)&lt;/h2>

&lt;div class='p'>Myslel jsem si, že největším problémem bude vyhýbání se kmenům stromů, ale
podle dnešních ranních testů v sídlištním parčíku to to vypadá, že to budou
spíše listy a drobné větvičky. Další pozorování je, že bych se měl naučit
číst a ne jenom přeskakovat řádky. Konkrétně větu: &lt;i>A value of 0 indicates
that no objects were detected.&lt;/i> jsem včera nějak přehlédl. I2C potvrzení i
verze sonaru byla ve všech 1969 dnešních měřeních správně.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 299px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/tree-slalom.jpg'>&lt;img src='/competitions/roboorienteering/2013/tree-slalom_t.jpg' alt='Slalom mezi stromy' title='Slalom mezi stromy' class='border'  width='293' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/tree-slalom.jpg'>Slalom mezi stromy&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Včera večer jsem trošku testoval doma na chodbě a musím přiznat, že ten přechod
outdoor -&amp;gt; indoor ve mne vyvolával klaustrofobické pocity. Našel jsem dvě další
chyby, kterých jsem si v neděli nevšiml a je to pravděpodobně důvod, proč z
„předbouřkového” testu nemám jediné sonarové měření. V kódu mám, že pokud se
&lt;i>/dev/ttyACM0&lt;/i> najde, tak se rovnou pustí sonarový prográmek. Problém je, že
to systému trošku trvá, než &lt;i>/dev/ttyACM0&lt;/i> zpřístupní a tak se může stát, že
mi selže jeho konfigurace pomocí &lt;i>stty&lt;/i>. Oprava je triviální &amp;mdash; konfigurovat
je třeba v každém běhu.&lt;/div>

&lt;div class='p'>Druhá chyba byla v podmínce, aby se čtyřtulka otáčela na místě pokud je směr k
cíli pod příliš velkým úhlem. Korekce pro navigaci v koridoru jí ale rychle
správně natočí a tak jsem tu nefunkčnost úplně přehlédl. Jo, jo, chyba, že jsem
to netestoval nejprve odděleně.&lt;/div>

&lt;div class='p'>Co teď koukám do logů, tak v reálu to vypadalo lépe, než z pohledu robota. Pro
představu uploaduji &lt;a href='http://youtu.be/GvblXPSxWlo' class='external'>krátké video&lt;/a> kličkování
mezi stromy. A co na to sonar? All clear &amp;hellip; a v té 45s jsem jí zastavil,
protože to sekání listů mne příliš znervózňovalo&amp;hellip;&lt;/div>

&lt;div class='p'>p.s. stromy v měření ze sonaru „vidět” jsou, ale je třeba se
koukat i 4m daleko (viz téměř neviditelné zelené tečky, čtverec=1m):
&lt;table class='image_panel center' style='width: 294px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/sonar-log.png'>&lt;img src='/competitions/roboorienteering/2013/sonar-log_t.png' alt='detekce stromů sonarem' title='detekce stromů sonarem' class='border'  width='288' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/sonar-log.png'>detekce stromů sonarem&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>13. června 2013 &amp;mdash; 1 den (letové koridory)&lt;/h2>

&lt;div class='p'>Toto asi bude poslední příspěvek před samotnou soutěží a jelikož nic moc nového
nemám, tak alespoň zmíním náznak plánu. Přemýšlel jsem co s tím jedno-sonarem
podniknout a chtěl bych vyzkoušet dva algoritmy: letové koridory a sken s
„náhodnou procházkou”.&lt;/div>

&lt;div class='p'>Aktuální verze programu naviguje čtyřtulku v 1m širokém koridoru (podle
odometrie) a pokud se příliš vychýlí, tak dělá jak korekce do strany, tak
nahoru a dolu. Pokud Heidi získá pocit, že je před ní překážka, tak jedna z
možností je koridor „posunout” v Y-ové ose čtyřtulky a po nějakém čase či
vzdálenosti tento posun zase vrátit na nulu.  Druhá varianta je, že v případě
blízké překážky, udělá otočku o 360 stupňů, zmapuje celé okolí v dané výšce a
vydá se směrem, kde je volno. Buď náhodně, nebo ideálně nějak v kombinaci s
cílem, kam má letět &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>První verze je riskantní, protože při přesunu do „levého pruhu” může narazit
na překážku. Na homologaci a v parku, kde v dané výšce jako překážky převládají
kmeny stromů by to ale teoreticky mohlo fungovat. Druhá je zase zdlouhavá a ty
otáčky na místě jí úplně nejdou &amp;mdash; snadno „odpluje” i nějaký metr stranou.&lt;/div>

&lt;div class='p'>Ideálně bych použil kombinaci obou přístupů. Když už se dostanu na 1m od
překážky, tak si možná i kousek couvnout, scan, odskok a znova koridory. Ano,
žádná zmínka o kameře, LKDemo a zpracování bodů v obraze. Přiznám se, že jsem
to trošku zkoušel, ale moc mne to zatím nepřesvědčilo. Raději, ve zbývajícím
čase, zkusím vymačkat z toho jediného sonaru co se dá.&lt;/div>

&lt;div class='p'>Ještě jedna, snad pozitivní, poznámka na závěr &amp;mdash; jeden z rozdílů sonaru
umístěného na pozemním a létajícím robotu je, že sonar směřující dopředu na
létajícím robotu zem detekuje až ve větší vzdálenosti. To mi prvně úplně
nedošlo.  Na Eduru je sonar cca ve 40cm a ve 2m už „vidí” trávu. Heidi ale
letí ve výšce cca 1.5m, tak si možná mohu dovolit důvěřovat i 4m měřením. Jak
je to v realitě až po víkendu&amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>14. června 2013 &amp;mdash; aquaphobia&lt;/h2>

&lt;div class='p'>Dnes začalo pršet v 6:41. Vím to poměrně přesně, protože jsem venku stihl
udělat jeden jediný test se skenováním „na místě”. Je to v úvozovkách,
protože při otáčení se Heidi posunula cca 1.5m, nabourala do sloupku a spadla
na levou zadní vrtuli. Auto jsem přeparkoval tentokrát těsně vedle potoku, což,
pokud se nesesune břeh, vypadalo na jediné místo, kde minulé víkendy neproudily
„nové potoky”. Kde jsou ty časy, kdy mi déšť dělal radost &amp;hellip;&lt;/div>

&lt;div class='p'>Během raní směny jsem stihl udělat pár drobností: vylepšené stahování
nahrávaného videa (vypnu nahrávání, ale ještě chvíli volám update, dokud video
kanál netimeoutuje), asserty on/off (prostě když máte nový kód, tak je občas
chcete vypnout a je otrava stále jeden řádek dokola zakomentovávat), logování
stisku klávesy a ještě pár drobností.&lt;/div>

&lt;div class='p'>U toho logování „ANY KEY” bych se ještě pozastavil. Všem vnucuji logování
jako neodiskutovatelný základ pro vývoj a ladění robotů a &amp;hellip; asi jsem dříve
nečekal, že budu emergency tlačítko používat tak často, resp. skoro každý pokus
tak končí. Pokud máte ale asserty zapnuté, tak není na první pohled zřejmé, zda
se něco pokazilo, nebo běh programu je jiný (chybí ta informace, že je problém
a přecházíme na nouzové přistání). Původní zapojení funkce kbhit jsem jenom
trošku změnil:&lt;/div>

&lt;pre>self.console = SourceLogger( msvcrt.kbhit, filename ).get&lt;/pre>

&lt;div class='p'>Jinými slovy všechny výstupy funkce msvcrt.kbhit se uloží do souboru se jménem
&lt;i>filename&lt;/i>. Pak je třeba ještě doplnit situaci, kdy log přehráváte:&lt;/div>

&lt;pre>self.console = SourceLogger( None, filename ).get&lt;/pre>

&lt;div class='p'>a v kódu používáte volání self.console(). V případě dnešního pokusu log vypadá
takto (má 18 bajtů):&lt;/div>

&lt;pre>0
0
1882
1
1&lt;/pre>

&lt;div class='p'>tj. drona udělala 1882 cyklů, než jsem zmáčknul emergency. Chcete-li i detaily,
tak &lt;a href='/competitions/roboorienteering/2013/sourcelogger.py'>zde je zdrojový kód sourcelogger.py&lt;/a>.&lt;/div>

&lt;div class='p'>(musím přestoupit, pause)&lt;/div>

&lt;hr/>

&lt;h2>17. června 2013 &amp;mdash; RO2013 mini info&lt;/h2>

&lt;div class='p'>Pokud chcete rychle vědět, jak to dopadlo, tak viz
&lt;a href='http://www.vosrk.cz/roboorienteering/2013/vysledky.htm' class='external'>výsledky&lt;/a>.  Pro ty,
co se těšili na videa z drony, mám ale špatnou zprávu :-( &amp;hellip; po timeoutu
navdata socketu a jeho restartu se přeruší jak nahrávané video, tak i
streamované video :-(. Problém z Písku, kdy čtyřtulka visela na startu a nedalo
se s ní nic dělat než jí ve vzduchu chytnout a převrátit na záda, se mi tedy už
nestal (provede se ten restart komunikace), ale videa jak Heidi prolétá mezi
větvemi (občas, kolize byly častější) bohužel nemám.&lt;/div>

&lt;div class='p'>Pro nedočkavce:&lt;/div>

&lt;ul>
&lt;li>&lt;a href='http://youtu.be/Nl3E0W2zchI' class='external'>1. kolo&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/bgtrss-DUl0' class='external'>2. kolo&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://youtu.be/ROmB0cM-4Ro' class='external'>3. kolo&lt;/a>&lt;/li>
&lt;/ul>

&lt;hr/>

&lt;h2>19. června 2013 &amp;mdash; Simulátor&lt;/h2>

&lt;div class='p'>&lt;i>Řeším, jaké kusy textu nechat v hlavním článku a co přesunout do tohoto blogu,
kde se můžu snáze pitvat v detailech ... a tak úvod o simulaci přesouvám
sem. Blog bych asi ještě nechal tak cca 14 dní aktivní až skonči&lt;/i>
&lt;a href='/competitions/fieldrobot/2013/cs'>Field Robot v Praze&lt;/a> &lt;i>a bude chvíle na
,,doklizení''.&lt;/i>&lt;/div>

&lt;div class='p'>Do Rychnova jsem nakonec jel vlakem a získal tak další 3h na programování.
Jelikož ve vlaku to moc na létání není (i když scénář, kdy si drona bude umět
otevřít dveře přes červené tlačítko a celý vlak proletět zní jako výzva), tak
jsem si první hodinu napsal jednoduchý simulátor a zbytek času ladil v něm.
Proti simulátorům jsem obecně zaujatý, ale důvodem je spíše jejich „mámení”.
Ono je to pohodlnější než někam muset chodit s robotem, dobíjet baterky a pod.
Ale nesmí to tak skončit &amp;mdash; simulátor &lt;b>nikdy&lt;/b> není realita, ale může to být
dobrý pomocný nástroj a v některých fázích vývoje je to asi i nejlepší způsob,
jak „odladit znaménka” a nezničit při tom robota.&lt;/div>

&lt;div class='p'>V simulaci jsem zjistil, že se mi Heidi vyhýbá vpravo, přestože jsem očekával,
že to bude vlevo a to bylo vše. Přidal jsem „simulaci větru”, což je hodně
nadnesené pojmenování pro posun o (dx,dy) v každém kroku, a začal ladit otáčení
na místě. Prostě není to na místě. A stačí i drobný větřík a čtyřtulka je po
360 stupňové otáčce někde úplně jinde.&lt;/div>

&lt;div class='p'>Druhou úlohu, kterou jsem řešil, bylo vyhodnocení sonarového skenu. Hledal jsem
největší mezeru a tím směrem vyrazil.&lt;/div>

&lt;hr/>

&lt;h2>7. července 2013 &amp;mdash; Přistání z výšky 4 metrů&lt;/h2>

&lt;div class='p'>Původně jsem chtěl ještě přidat odstaveček o FRE (Field Robot Event), kde Heidi
nastoupila do Freestyle kategorie. Použil jsem tam totiž kód z
RoboOrienteeringu, ale moc zajímavá show to nebyla. Ostatně si to můžete přečíst
v &lt;a href='/competitions/fieldrobot/2013/eduro-team/cs'>připravovaném článku&lt;/a>.&lt;/div>

&lt;div class='p'>Daleko větší „drama” jsem ale zažil včera a získal tak další zkušenost, o
kterou bych se rád podělil. Chtěl jsem kamarádovi předvést létání čtyřtulky po
zahradě s parametry:&lt;/div>

&lt;pre>dirDist = ((0,1), (math.radians(90), 2), (math.radians(180), 2), (math.radians(-90), 2),)*3&lt;/pre>

&lt;div class='p'>tj. třikrát opakuj let 1m na východ, pak 2m na sever, pak 2m na západ a 2m na
jih. Nejprve jsem létal v hladině 1.5m, pak 2.5m a když to fungovalo, tak jsem
tam dal 4m.  Naštěstí jsem rovnou nezkoušel 10m, i když jsem měl cukání.&lt;/div>

&lt;div class='p'>Heidi udělala 3 kolečka a pak nic. Visela nad autem, že jsem si chvíli myslel,
že vypadla wifina. Nic takového. Pomalu se posouvala ve výšce cca 4m směrem nad
potok a na emergency tlačítko nereagovala! Vlastně je dobře, že u potoka máme
vrby, zamotala se do větví a prásk, „standardní” akrobatické přistání.&lt;/div>

&lt;div class='p'>Nedalo mi to a pokus jsem zopakoval, akorát o trošku dál od potoka. A znova to
samé &amp;mdash; drona visela ve 4m a jako by provokovala „chyťte si mne”. V této
výšce ale trik s převrácením na záda bez žebříku nedáte &amp;hellip; a tak jsem byl rád,
když z ničehož nic spadla těsně vedle vrbového domečku.&lt;/div>

&lt;div class='p'>Mám teď teorii, že drona nereaguje na příkaz automatického přistání, pokud je
výšce větší než X, kde X jsou možná ty čtyři metry. Je tedy třeba buď předělat
emergency na přechod na manuální řízení, nebo nejprve klesat do cca 2m &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>11. července 2013 &amp;mdash; control.altitude_max&lt;/h2>

&lt;div class='p'>Na &lt;a href='https://projects.ardrone.org/boards/1/topics/show/5805' class='external'>fóru&lt;/a> měl Vince
dobrou poznámku, že můj problém může být svázaný s nastavením maximální
povolené výšky. Defaultně je &lt;b>control.altitude_max&lt;/b> nastaven na 3m a mně
drona odmítala přistát v 3.376m a 3.185m.&lt;/div>

&lt;div class='p'>Včera jsem to zkusil změnit na 5m (tedy nastavuje se to v milimetrech &amp;mdash; 5000)
a Heidi začala létat „strašně vysoko”, ale přistání fungovalo. Většinou. Byl
tam jeden výpadek spojení zrovna když byla hodně nakloněna vlevo. Vypadlo to za
sebou hned několikrát a náraz. Trošku mi to připomnělo Rychnov, kdy v jednom
okamžiku „zdrhla”. Změnil jsem tedy timeout na navdata (z testovací 1s na
0.1s) a to vypadá lépe, zatím.&lt;/div>

&lt;div class='p'>Přidal jsem i jednoduché ovládání z klávesnice, ale test selhání přistání při
autonomním letu s nízko nastavenou maximální povolenou výškou jsem ještě
nedělal.&lt;/div>

&lt;div class='p'>Ještě jedna dobrá zpráva na závěr: přišel mi mail od českého distributora
Parrot &lt;a href='http://www.profitec.cz/' class='external'>profitec.cz&lt;/a>, že už dorazily GPS moduly a
větší baterky pro AR.Drone 2.0. Bohužel to není úplně levná sranda, ale
uvidíme. Mají jen pár kusů, takže pokud si to zvažujete pořídit v ČR, tak
neváhejte a zboží si rezervujte.&lt;/div>

&lt;hr/>

&lt;h2>15. července 2013 &amp;mdash; video odkazy&lt;/h2>

&lt;div class='p'>V pátek jsem dostal tři zajímavé odkazy, o které bych se rád podělil. První je
o čtyřtulce, resp. čtyřech vrtulích a řídicí elektronice, které se přidělají
„na cokoliv” a dá se s tím létat. Autor to předvádí na klávesnici, knize i
dětském prkně. Nechápu, jak se to popere s vyrovnáním váhy, ale nějak asi ano
&amp;hellip; &lt;a href='http://www.rozhlas.cz/leonardo/technologie/_zprava/1234092' class='external'>http://www.rozhlas.cz/leonardo/technologie/_zprava/1234092&lt;/a>.&lt;/div>

&lt;div class='p'>Druhý link je droně, zde rozuměj bezpilotní letadlo, které automaticky přistálo
na letadlové lodi a byl tak dosažen další milník ve vojenské robotice:
&lt;a href='http://www.ibtimes.com/first-drone-lands-aircraft-carrier-salty-dog-pushes-limits-unmanned-aircraft-video-1342827' class='external'>http://www.ibtimes.com/first-drone-lands-aircraft-carrier-salty-dog-pushes-limits-unmanned-aircraft-video-1342827&lt;/a>&lt;/div>

&lt;div class='p'>Třetí link je o čtyřtulce poháněné lidskou silou:
&lt;a href='http://www.youtube.com/watch?v=syJq10EQkog' class='external'>http://www.youtube.com/watch?v=syJq10EQkog&lt;/a>.  Padla tak Sikorsky Prize
(Human Powered Helicopter, $250000). Případne viz
&lt;a href='http://news.sky.com/story/1114869/man-powered-helicopter-wins-sikorsky-prize' class='external'>Sky
News&lt;/a>. Pro získání ceny se vrtulník musel po dobu jedné minuty udržet ve výšce
alespoň třech metrů &amp;hellip;&lt;/div>

&lt;hr/>

&lt;h2>16. července 2013 &amp;mdash; nové hračky&lt;/h2>

&lt;div class='p'>Včera jsem si u &lt;a href='http://www.profitec.cz/ar-drone-a-spy-c-tank-1.php' class='external'>českého
distributora Parrotu&lt;/a> koupil dvě nové hračky: GPS/Flash Disk modul a 1500mAh
baterku. Tímto bych asi RoboOrienteeringový blog uzavřel &amp;mdash; je to senzor,
který jsem potřeboval na začátku, před několika měsíci. Ani integrace nebude
zase triviální: potřebuji firmware 2.4.x (na fórech jsem viděl nejvyšší číslo
zatím 2.4.5) a to je ke stažení pouze přes iPhone. Pro Android to má být k
dispozici někdy v září a tak dlouho asi čekat nevydržím.&lt;/div>

&lt;div class='p'>GPS modul &amp;mdash; první dojem je, že je hrozně těžký! Samozřejmě přeháním, stejně
jako po pár měsících létání cítím každý vánek, tak váhu na droně rozlišuji v
gramech. Papírově má vážit 31g, reálně, když už ,,vyvíjím v kuchyni a je tu ta
micro-váha, 36g. Jen pro srovnání GPS GNS 5860 s TMC, co mám půjčenou z práce,
stojí zhruba polovičku a váží 16g. Co tam mají tak těžkého?? Proto asi ta velká
&lt;b>DO NOT OPEN&lt;/b>, kterému možná ani já neodolám &lt;span class='wink'>&lt;/span>.&lt;/div>

&lt;div class='p'>Zkusil jsem modul v notebooku &amp;mdash; windows hlásili: „Obecný rozbočovač, disk,
...” a pak to chtělo drivery, které nemám. Jako disk to ale funguje a ve
složce &lt;i>Windows Parrot GPS drivers&lt;/i> snad bude to co potřebuji. Install
failed, no nic. EXE tedy moc nepomohlo, ale s výběrem adresáře se zdají být
Windows spokojené a driver je tedy nainstalovaný.&lt;/div>

&lt;div class='p'>Po připojení na dronu to vypadá takto:&lt;/div>

&lt;pre># lsusb
Bus 001 Device 004: ID 19cf:3000
Bus 001 Device 003: ID 0424:4050 Standard Microsystems Corp.
Bus 001 Device 002: ID 0424:2640 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002&lt;/pre>

&lt;div class='p'>Moc z toho nevykoukám, jen že je tam více zařízení. Co mne potěšilo bylo, že po
připojení sonaru (i když fyzicky to vypadá strašně nepoužitelně) jsem dostal:&lt;/div>

&lt;pre># lsusb
Bus 001 Device 005: ID 04d8:ffee Microchip Technology, Inc.
Bus 001 Device 004: ID 19cf:3000
Bus 001 Device 003: ID 0424:4050 Standard Microsystems Corp.
Bus 001 Device 002: ID 0424:2640 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002&lt;/pre>

&lt;div class='p'>Tj. zatím hodně teoreticky bych mohl používat současně jak sonar, tak GPS a
nahrávat video na USB &amp;hellip; ale to až někdy v nějakém jiném vlákně/blogu &amp;hellip;&lt;/div>

&lt;div class='p'>&lt;table class='image_panel center' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/competitions/roboorienteering/2013/gps-module.jpg'>&lt;img src='/competitions/roboorienteering/2013/gps-module_t.jpg' alt='GPS modul a 1500mAh baterie' title='GPS modul a 1500mAh baterie' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/competitions/roboorienteering/2013/gps-module.jpg'>GPS modul a 1500mAh baterie&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>22. července 2013 &amp;mdash; THE END&lt;/h2>

&lt;div class='p'>Dnes tedy už definitivní konec, s tím, že už vím, kde bude pokračování.
Vymyslel jsem si téma „trošku více prozkoumat video codec H.264”, kdy z
hrubých dat od AR.Drone 2.0 možná jde i něco vypozorovat o okolí. Uvidíme.
Pokud by vás to zajímalo, tak zde začíná &lt;a href='/articles/h264-drone-vision/cs'>III.
létající blog&lt;/a>.&lt;/div>

&lt;div class='p'>Sem bych ještě doplnil informaci o &lt;b>firmware 2.4.1&lt;/b>, který lze buď stáhnout
přímo na iPhone, nebo volně leží na stránkách
&lt;a href='http://www.digitalsirup.com/downloads/ardronefirmware/list.html' class='external'>digitalsirup.com&lt;/a>.
Získal jsem firmware z obou zdrojů a výsledky jsou identické. Jenom jsem
dronu ještěý neflashnul, takže nové navdata s tagem číslo 27 (GPS, zatím
nezdokumentováno, první hack je na
&lt;a href='https://github.com/paparazzi/paparazzi/blob/master/sw/airborne/boards/ardrone/at_com.h' class='external'>paparazzi
webu&lt;/a>) ještě nemám. Zatím není dostupné nové SDK a podle
&lt;a href='https://projects.ardrone.org/boards/1/topics/show/5763' class='external'>fóra&lt;/a> je těch změn
asi více, protože přestala např. fungovat
&lt;a href='https://github.com/AutonomyLab/ardrone_autonomy' class='external'>ROS ardrone_autonomy&lt;/a>.
Předpokládám nějaké nové stavy jako „čekám na GPS” a to může se stavovým
automatem zamávat &amp;hellip;&lt;/div>

&lt;div class='p'>Tak díky za podporu a na viděnou na &lt;a href='/articles/h264-drone-vision/cs'>III.
létajícím blogu&lt;/a>.&lt;/div>

&lt;div class='p'>&lt;center>&lt;b>------------ THE END ------------&lt;/b>&lt;/center>&lt;/div>

&lt;hr/>

&lt;div class='p'>&lt;a href='/competitions/roboorienteering/2013/cs#email'>kontaktní formulář&lt;/a>&lt;/div>
 </content>
</entry>
<entry>
	<title>Integrace mechanického gyroskopu</title>
	<link rel='alternate' href="http://localhost/articles/explorer/cs"/>
	<id>http://localhost/articles/explorer/cs</id>
	<updated>2013-05-24T00:00:00Z</updated>
	<author><name>Karel Čermák</name></author>
	<summary type='html'> Psal se rok 2010 a nějakou náhodou jsem narazil na stránky kufr.cz, kde mě
zaujala soutěž RORO. Spíše ze zvědavosti jsme narychlo upravili autíčko a se
synem vyrazili omrknout, o čem to vlastně je. S velkým zaujetím jsem sledoval
tu spoustu lidiček, snažících se dojet se svými udělátky co nejdál rovně.
První, co nezasvěceného napadne je, že to nic není. Rovně přece umí jet kde co.
Ale hned po prvním pokusu asi každý rychle zjistil, že opak je pravdou. Rovně
prostě nejede nic &amp;hellip;
 </summary>
	<content type='html'> 
&lt;div class='p'>A tak se zrodila myšlenka něco sestrojit.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/explorer/gyro4.jpg'>&lt;img src='/articles/explorer/gyro4_t.jpg' alt='gyroskop z tanku T72' title='gyroskop z tanku T72' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/explorer/gyro4.jpg'>gyroskop z tanku T72&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Začal vznikat stoj určený pro tuto soutěž, ale stále nebylo jasné, jak a čím
bude řízen. Připadaly v úvahu kompas a snímače na kolech. Jako motory byly
použity podobné jako má LOKO pořadatelů soutěže, ale záhy po dokončení podvozku
se ukázalo, že jejich síla je příliš malá. Byly tedy vyměněny za podstatně
větší – 12V stěračové motory z vozu Š120. Ty se válí v kde jaké garáži a jak se
ukázalo, volba to byla dobrá. Pro výkonové řízení jsem použil modelářské
regulátory FUSION AQUAPOWER s max. proudem 90A. Malá, programovatelná a cenově
dostupná krabička je velice odolná a mohu jí vřele doporučit. Bezproblémová
regulace o nuly na obě strany ovládaná servo signálem.&lt;/div>

&lt;div class='p'>Rám a pohon byl tedy vyřešen a odzkoušen pomocí vysílačky. Ale co dál. Po
přečtení článků na roborických stránkách jsem pomalu začal opouštět myšlenku
kompasu a odometrie. A náhoda mi přihrála kus tajemného železa, pocházejícího z
vojenské techniky. Tím byl gyrokompas pravděpodobně z tanku T72. Bohužel jsem
ho dostal s ustřiženým svazkem asi 30 drátů bez jakékoli elektroniky. Byla to
výzva.&lt;/div>

&lt;div class='p'>Začal jsem tedy shánět literaturu a snažil se pochopit, jak toto monstrum
pracuje. Problém – teorií je na netu dost, ale nic konkrétního. Zjistil jsem,
že nejlepším zdrojem informací jsou diplomové práce. Zvláště jedna se zdála být
velmi přínosná, ale když jsem se prokousal ke konkrétním faktům, text na
stránkách byl nahrazen jen nápisem „ vzhledem k utajení, kterému text podléhá,
nemůže být zveřejněn“. A byl jsem zase v ……( na začátku ).&lt;/div>

&lt;div class='p'>A začalo období pokus – omyl. To asi každý dobře znáte.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/explorer/3-phase-h-bridge.jpg'>&lt;img src='/articles/explorer/3-phase-h-bridge_t.jpg' alt='3-fázový H můstek' title='3-fázový H můstek' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/explorer/3-phase-h-bridge.jpg'>3-fázový H můstek&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Úkol č. 1 bylo roztočit motor setrvačníku. Z toho mála, co se podařilo zjistit
je to třífázový 36V motor s kotvou na krátko zapojený do trojúhelníku (
vyvedeny jen 3 dráty ). Frekvence 400Hz, tedy cca 22 000ot/min. Byly zkoušeny
střídavé modelářské regulátory, ale bez úspěchu. Indukčnost vinutí je pro ně
patrně příliš vysoká a ony nemají patřičnou odezvu naindukovaného napětí. Ani
impedanční převodník v podobě třech transformátorů se neosvědčil. Použil jsem
tedy 3-fázový H můstek, tvořený 6-ti kusy  L149, napájený 24V. Jako zdroj
impulsů procesor PICAXE 20M2.  Ten kdo si zkusil roztočit krokový motor do
takových otáčet asi zjistil, že bez orig. elektroniky se mu moc nechce.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/explorer/gyro-board.jpg'>&lt;img src='/articles/explorer/gyro-board_t.jpg' alt='deska stabilizace gyra' title='deska stabilizace gyra' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/explorer/gyro-board.jpg'>deska stabilizace gyra&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>No, nechtělo se mu. Několikrát jsem to vzdal a zase začal znovu. Nakonec
vzniknul program, který postupně pomalu zvyšuje frekvenci Doba náběhu do otáček
je potřeba min. 10min. a pak ještě dalších 10min. na jejich stabilizaci. S
napájením 24V se dalo ale dosáhnout max 15000 ot/min. Pak už ztratil motor
sílu. Stačilo s ním zatřást, magnetické pole se „utrhlo“ a bez ohledu na
napájení začaly otáčky klesat až se zhruba po 15min. setrvačností dotočil. Aby
se dosáhlo vyšších otáček , bylo by potřeba zvýšit napětí. Další baterii jsem
už ale odmítl. I tak to byl úspěch a vypadalo to celkem postačující.&lt;/div>

&lt;div class='p'>Gyroskop se sice točil, ale dělal si co chtěl. Celý systém má tři stupně
volnosti a ve dvou osách celkem čtyři elektromagnety s pohyblivým jádrem. Dva
udržují setrvačník ve svislé poloze při bočním náklony. Druhé dva vytváří sílu
působící potřebnou proti rotaci země. Roztočený setrvačník si musíme přestavit
jako těleso, které stojí a okolo něj se otáčí zeměkoule. A ta se pohybuje
rychlostí 15°. za hodinu. Přesně o tento úhel se pootáčí i gyroskop. Úkolem
těchto elektromagnetů je tedy na něj působit takovou silou, aby zůstal stát na
místě. Ale máme tu elektromagnety, které mají při stejném proudu jinou sílu
když je jádro na kraji a jinou pokud je více zasunuto. Nevím jak to vyřešili
tvůrci systému, já se dal dlouhou cestu vytváření datového pole, kde určité
výchylce je přidělen patřičný proud, respektive PWM signál. Není to sice
nejlepší, ale je to postačující. Vzhledem k tomu, že během jízdy jsou výchylky
někde na max. desetinách až jednotkách stupních, bylo možná zbytečné tomu
věnovat tolik času.&lt;/div>

&lt;div class='p'>O trochu snadnější byla stabilizace bočního náklonu. Tam se dalo použít
kontaktů asi k tomu předurčených a doplnit pár tranzistorů a odporů. Pokud se
gyroskop nakloní, elektromagnety pomalu vrátí setrvačník zpátky do svislé
polohy. Funguje to ale pouze při náklonu pár stupňů.&lt;/div>

&lt;div class='p'>Tak gyroskop se točí a celkem i stojí na místě. Teď tedy vyhodnotit měření
směru a velikosti pohybu. Mechanické snímání nepřipadá v úvahu. Jakékoli
sebemenší tření ho totálně rozhodí. Nakonec padla volba na snímač magnetické
pásky AS5304 s rozlišením 0.025mm.&lt;/div>

&lt;div class='p'>Výstup je jako z inkrementálního snímače. Konečné rozlišení úhlu je asi někde
na setinách stupně. Přesně jsem to nepočítal. Každý gram navíc přidaný na
pohyblivou část gyra je potřeba samozřejmě vykompenzovat.&lt;/div>

&lt;div class='p'>Celá tahle sranda mi zabrala zhruba 5 měsíců skoro každodenní práce.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel right' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/explorer/camera.jpg'>&lt;img src='/articles/explorer/camera_t.jpg' alt='Kamera' title='Kamera' class='border'  width='220' height='165'/>&lt;/a>&lt;br/>
&lt;a href='/articles/explorer/camera.jpg'>Kamera&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;div class='p'>Zbývalo už „jen“ převést výchylku gyroskopu  na rychlost motorů a vyřešit
zaměření osy závodní dráhy. Jako nejlepší se ukázalo laserové ukazovátko. Ta
zaměřovací lať s odrazovkama při startu je nutná, protože tak slabý laser jinak
není ve dne vidět. Červený laser na červené odrazovce ale ano. A začal nespočet
zkušebních jízd na perfektně rovném a hladkém povrchu. Bylo nutné sladit laser
s gyroskopem alespoň na desetiny stupně. Když totiž vezmeme v úvahu, že závodní
dráha je dlouhá 314m, široká cca 3m, tak při zaměření na odrazovku ve
vzdálenosti nějakých 20 – 30 m daleko máme povolenou chybu někde v jednotkách
několika málo centimetrů. A to ještě nepočítám chybu celého systému na nerovném
povrchu.&lt;/div>

&lt;div class='p'>Pro náš první závod byla osa zaměřena pomocí laserového ukazovátka. Nic moc.
Laser z tržnice od Vietnamců udělá totiž na 300m celkem pěkně velké kolečko. I
tak se to v deštivé noci pře závodem celkem povedlo. Označili jsme si osu dráhy
a nechali to osudu. Osud nám přál. Dojeli jsme třikrát až do konce. I když ve
třetím kole to bylo s odřenýma ušima. Coby nováčci v této soutěži jsme
vyhráli.&lt;/div>

&lt;div class='p'>Pro robota byl narychlo zvolen název GŘAS aneb Gyroskopem Řízený Autonomní
Samochod. Dobrá plácanina, ne.&lt;/div>

&lt;div class='p'>Snad se mi tímto úvodem do problematiky mechanického gyroskopu podařilo
odpovědět na většinu otázek a nastínit, o čem to vlastně všechno je. Pokud se
do toho někdo někdy pustíte, přeji opravdu pevné nervy. Ale jde to. Možná
přijdete na mnohem jednodušší systém, jak ho potvoru zkrotit. Rád se s vámi
podělím o mé poznatky. Je to opravdu zajímavé.  
 
O tom jakými úpravami prošel tehdy ještě GŘAS před dalším ročníkem závodu RORO
zase příště.&lt;/div>

&lt;div class='p'>&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/explorer/gyro1.jpg'>&lt;img src='/articles/explorer/gyro1_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel left' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/explorer/gyro2.jpg'>&lt;img src='/articles/explorer/gyro2_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>
&lt;table class='image_panel ' style='width: 226px;'>&lt;tr>&lt;td>
&lt;a href='/articles/explorer/gyro3.jpg'>&lt;img src='/articles/explorer/gyro3_t.jpg' alt='' title='' class='border'  width='220' height='165'/>&lt;/a>
&lt;/td>&lt;/tr>&lt;/table>&lt;/div>

&lt;hr/>

&lt;h2>Rozcestník&lt;/h2>

&lt;ul>
&lt;li>soutěž &lt;a href='/competitions/robotem-rovne/cs'>Robotem rovně&lt;/a>&lt;/li>

&lt;li>&lt;a href='http://www.ddmml.cz/seznam-krouzku/14-pocitacova-robotika/' class='external'>Robotický klub Mariánské Lázně&lt;/a>&lt;/li>

&lt;li>&lt;a href='/articles/explorer/cs#email'>kontaktní formulář&lt;/a>&lt;/li>
&lt;/ul>
 </content>
</entry>
</feed>
