CENTER FOR MACHINE PERCEPTION
Pouˇzit´ı simul´atoru Webots na v´yvoj aplikac´ı pro robot Nao CZECH TECHNICAL UNIVERSITY IN PRAGUE
Bc. Martin Bresler
[email protected]
CTU–CMP–2011–08
Lze z´ıskat na http://cmp.felk.cvut.cz/∼breslmar/DP Bresler.pdf Vedouc´ı: RNDr. Daniel Pr˚ uˇ sa, Ph.D.
Research Reports of CMP, Czech Technical University in Prague, No. 8, 2011 ISSN 1213-2365
´ PRCE DIPLOMOVA
2. srpna 2011
Published by Centrum strojov´eho vn´ım´an´ı, Katedra kybernetiky ˇ Fakulta elektrotechnick´a CVUT Technick´a 2, 166 27 Praha 6 fax: (02) 2435 7385, tel: (02) 2435 7637, www: http://cmp.felk.cvut.cz
Pouˇ zit´ı simul´ atoru Webots na v´ yvoj aplikac´ı pro robot Nao Bc. Martin Bresler 2. srpna 2011
vii
Podˇ ekov´ an´ı Chtˇel bych podˇekovat vˇsem, kteˇr´ı mi jak´ ymkoliv zp˚ usobem pom´ahali s pˇr´ıpravou diplomov´e pr´ace. Jedn´a se zejm´ena o vedouc´ıho pr´ace, RNDr. Daniela Pr˚ uˇsu, Ph.D., za rady a veˇskerou jeho pomoc. D´ale bych chtˇel podˇekovat Dr. YeaShuanu Huangovi za pomoc na taiwansk´e univerzitˇe CHU, kde jsem na diplomov´e pr´aci posledn´ı semestr pracoval. V neposledn´ı ˇradˇe dˇekuji sv´ ym pˇr´atel˚ um a spolubydl´ıc´ım za podporu a trpˇelivost. ix
Abstract The topic of this diploma thesis is to assess the suitability of robotic simulator Webots for Nao robot applications implementation. The thesis includes solutions to few tasks which deal with the robot spatial orientation. Their focus corresponds to the objectives of HUMAVIPS project. Two applications extending the robot’s navigation abilities were proposed and implemented. First one allows the robot to track a set of special graphical landmarks creating a path. Second one brings a possibility to detect a position of obstacles marked by graphical symbols. From detected objects it creates a map in which it can find the shortest path. During the applications creation the overall usefulness and benefit of the simulator were evaluated. The evaluation is mainly aimed to the possibility of transferring an application on a real robot. Some problems caused by using the simulator were revealed. The thesis deals with them as well.
Abstrakt T´ematem pr´ace je zhodnocen´ı vhodnosti vyuˇzit´ı robotick´eho simul´atoru Webots pˇri v´ yvoji obsluˇzn´ ych aplikac´ı pro robota Nao. Souˇca´st´ı pr´ace m´a b´ yt ˇreˇsen´ı nˇekolika u ´loh, kter´e by se vˇenovaly prostorov´e orientaci robota. Jejich zamˇeˇren´ı by mˇelo alespoˇ n r´amcovˇe korespondovat s c´ıli projektu HUMAVIPS. Byly navrˇzeny a implementov´any dvˇe aplikace rozˇsiˇruj´ıc´ı moˇznosti navigace robota v prostoru. Prvn´ı z nich umoˇzn ˇuje robotovi sledovat s´erii na zemi um´ıstˇen´ ych znaˇcek, jeˇz tvoˇr´ı stopu. Druh´a pˇrin´aˇs´ı moˇznost detekovat pozici pˇrek´aˇzek oznaˇcn´ ych speci´aln´ımi znaˇckami. Z nalezen´ ych objekt˚ u je vytv´aˇrena mapa, ve kter´e je aplikace schopna nal´ezt nejkratˇs´ı cestu. Behˇem vytv´aˇren´ı aplikac´ı byl hodnocen pˇr´ınos a pouˇzitelnost simul´atoru. D˚ uraz byl kladen zejm´ena na pˇrenositelnost aplikace ze simul´atoru na skuteˇcn´eho robota. Bylo odhaleno nˇekolik probl´em˚ u, jeˇz pouˇz´ıv´an´ı simul´atoru pˇrin´aˇs´ı. Pr´ace se zab´ yv´a rovnˇeˇz jejich ˇreˇsen´ım.
xi
Obsah Seznam pouˇ zit´ ych zkratek
4
Seznam obr´ azk˚ u
4
Seznam tabulek
4
´ 1. Uvod
6
2. Obecn´ a charakteristika simul´ atoru Webots 2.1. Roboti . . . . . . . . . . . . . . . . . . . . . . . 2.2. Svˇet . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Podpora robota Nao . . . . . . . . . . . . . . . 2.3.1. Nedostupn´e funkce v simul´atoru Webots
. . . .
. . . .
´ 3. Uloha 1 - Stopovan´ a 3.1. Z´ıskan´ı obrazu z kamery . . . . . . . . . . . . . . . 3.2. Zpracov´an´ı obrazu . . . . . . . . . . . . . . . . . . 3.3. V´ ypoˇcet polohy znaˇcky . . . . . . . . . . . . . . . . 3.4. Pohyb robota po trase . . . . . . . . . . . . . . . . 3.4.1. Popis algoritmu . . . . . . . . . . . . . . . . 3.4.2. Popis probl´emu s ch˚ uz´ı robota v simul´atoru ˇ 3.4.3. Reˇsen´ı probl´emu s ch˚ uz´ı robota v simul´atoru 3.5. Zhodnocen´ı dosaˇzen´ ych v´ ysledk˚ u . . . . . . . . . . 3.5.1. Pˇresnost detekce znaˇcek . . . . . . . . . . . 3.5.2. Hodnocen´ı simul´atoru . . . . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
8 9 9 10 11
. . . . . . . . . .
14 14 15 16 19 19 20 20 22 23 23
´ 4. Uloha 2 - Bludiˇstˇ e 25 4.1. Podoba bludiˇstˇe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.2. Struktura aplikace a pouˇzit´e knihovny . . . . . . . . . . . . . . . 26 4.3. Souˇradn´ y syst´em a pˇresn´a detekce polohy pˇrek´aˇzek . . . . . . . . 27 4.3.1. Detekce znaˇcky pomoc´ı knihovny ARToolKit . . . . . . . . 28 4.3.2. V´ ypoˇcet projekˇcn´ı matice pomoc´ı algoritmu P3P . . . . . 28 4.3.3. V´ ypoˇcet polohy bod˚ u znaˇcky v souˇradn´em syst´emu robota (relativn´ı pozice) . . . . . . . . . . . . . . . . . . . . . . . 29 4.3.4. V´ ypoˇcet pozice rohov´ ych bod˚ u bedny (v p˚ udorysu) v souˇradn´em syst´emu mapy . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3.5. Zpracov´an´ı nov´e informace o poloze pˇrek´aˇzky . . . . . . . 31 4.4. SLAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.4.1. Aktualizace stavu pomoc´ı odometrick´ ych dat . . . . . . . . 33 4.4.2. Aktualizace stavu pomoc´ı znovu detekovan´ ych znaˇcek . . . 34 1
4.4.3. Pˇrid´an´ı novˇe detekovan´ ych znaˇcek do syst´emu 4.5. Vizualizace mapy a hled´an´ı nejkratˇs´ı cesty . . . . . . 4.5.1. Zp˚ usob vykreslov´an´ı mapy . . . . . . . . . . . 4.5.2. V´ ypoˇcet trasy pˇri proch´azen´ı bludiˇstˇe . . . . . 4.6. Ovl´ad´an´ı robota a jeho pohyb v bludiˇsti . . . . . . . 4.6.1. Rozhl´ıˇzen´ı . . . . . . . . . . . . . . . . . . . . 4.6.2. Zad´an´ı c´ılov´e lokace uˇzivatelem . . . . . . . . 4.6.3. Automatick´e mapov´an´ı . . . . . . . . . . . . . 4.7. Zhodnocen´ı dosaˇzen´ ych v´ ysledk˚ u . . . . . . . . . . . 4.7.1. Pˇresnost mapov´an´ı . . . . . . . . . . . . . . . 4.7.2. Hodnocen´ı simul´atoru . . . . . . . . . . . . .
. . . . . . . . . . .
35 35 36 37 39 39 39 39 40 40 42
5. Shrnut´ı probl´ em˚ u se simul´ atorem Webots 5.1. Probl´emy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1. Synchronizace kontroleru NaoQi a simul´atoru Webots . . . 5.1.2. Pˇrenos obrazu . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.3. Nepodporovan´e syst´emy robota Nao v simul´atoru Webots . 5.1.4. Nedostupn´e funkce v simul´atoru Webots verze EDU . . . . 5.2. Evaluace prostˇred´ı . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1. Zmˇena parametr˚ u sc´eny . . . . . . . . . . . . . . . . . . . 5.2.2. Ovl´ad´an´ı kamery . . . . . . . . . . . . . . . . . . . . . . .
44 44 44 45 45 45 46 46 47
6. Z´ avˇ er
48
A. Obsah pˇriloˇ zen´ eho DVD
50
B. N´ avod ke kompilaci u ´loh
51
C. Seznam kl´ avesov´ ych zkratek k aplikaci Bludiˇstˇ e
54
Literatura
55
2
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
Seznam pouˇ zit´ ych zkratek Zkratky vyskytuj´ıc´ı se v diplomov´e pr´aci. 2D 3D CW CCW GPS ID SDK SLAM VRML
Two Dimension(al) Three Dimension(al) Clockwise Counterclockwise Global Positioning System Identification Software Development Kit Simulatneous Localization And Mapping Virtual Reality Modeling Language
3
Seznam obr´ azk˚ u 2.1. Strom sc´eny, kter´ y obsahuje prototypov´ y soubor NaoV3R, pˇredstavuj´ıc´ı robota Nao. Na obr´azku je vidˇet, kter´e parametry je moˇzn´e mˇenit pˇr´ımo v simul´atoru. . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.1. 3.2. 3.3. 3.4. 3.5. 4.1. 4.2. 4.3. 4.4. 4.5.
4
Pˇrehled pˇripraven´ ych znaˇcek pro detekci pomoc´ı ARToolKitu . . . Pˇriˇrazen´ı svˇetov´ ych souˇradnic roh˚ um a stˇredu znaˇcky . . . . . . . Zn´azornˇen´ı polohy kamery a znaˇcky . . . . . . . . . . . . . . . . . Zn´azornˇen´ı polohy znaˇcky v obraze . . . . . . . . . . . . . . . . . N´astroje ke kontrolov´an´ı synchronizace dostupn´e v simul´atoru Webots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16 17 18 19
Sn´ımek bludiˇstˇe pro testov´an´ı a demonstraci aplikace . . . . . . . Hlavn´ı okno aplikace obsahuj´ıc´ı menu a vizualizaci mapy . . . . . Formul´aˇr k nastaven´ı parametr˚ u pˇri pˇripojov´an´ı aplikace k robotu Grafick´e vyj´adˇren´ı vztah˚ u bˇehem projekce . . . . . . . . . . . . . Vizualizace mapy . . . . . . . . . . . . . . . . . . . . . . . . . . .
25 27 27 29 37
21
Seznam tabulek 3.1. Srovn´an´ı skuteˇcn´ ych a namˇeˇren´ ych vzd´alenost´ı markeru od robota bˇehem testov´an´ı pˇresnosti algoritmu. . . . . . . . . . . . . . . . .
23
4.1. V´ ysledky testov´an´ı pˇresnosti detekce beden vyj´adˇreny jako vzd´alenost stˇredu detekovan´e bedny od spr´avn´e pozice v z´avislosti na vzd´alenosti bedny od robota a u ´hlu jej´ıho natoˇcen´ı v˚ uˇci robotovi. . . . . . . . 41 4.2. V´ ysledky testov´an´ı pˇresnosti detekce beden vyj´adˇreny jako odchylka natoˇcen´ı bedny v z´avislosti na vzd´alenosti bedny od robota au ´hlu jej´ıho natoˇcen´ı v˚ uˇci robotovi. . . . . . . . . . . . . . . . . . 41
5
´ 1. Uvod Robot Nao firmy Aldebaran Robotics je mal´ y humanoidn´ı robot, se ˇsirokou ˇsk´alou vyuˇzit´ı. Jedn´a se o nejvyuˇz´ıvanˇejˇs´ıho robota, urˇcen´eho pro akademick´e u ´ˇcely. Spoleˇcnost Aldebaran Robotics se jeho prostˇrednictv´ım snaˇz´ı vytvoˇrit standard, kter´ y by mohla vyuˇz´ıvat vˇetˇsina student˚ u vˇsech r˚ uzn´ ych u ´rovn´ı studuj´ıc´ıch robotiku. Sami studenti by mˇeli tak´e pom´ahat pˇri jeho v´ yvoji. Zdokonalov´an´ım robota se zab´ yv´a cel´a ˇrada svˇetov´ ych univerzit, kter´e tak´e spolupracuj´ı na spoleˇcn´ ych projektech.
ˇ Jedn´ım z nejd˚ uleˇzitˇejˇs´ıch projekt˚ u, kter´eho se u ´ˇcastn´ı i CVUT v Praze, je program HUMAVIPS [1], jenˇz m´a za c´ıl zdokonalovat zejm´ena softwarov´e vybaven´ı robota. Hlavn´ım c´ılem projektu je vytvoˇrit program, kter´ y by robotovi umoˇzn ˇoval interakci s lidmi. Pˇr´ıkladem takov´e interakce m˚ uˇze b´ yt upout´av´an´ı pozornosti na veletrz´ıch nebo pomoc star´ ym lidem. Nao by mˇel b´ yt schopen dˇelat star´ ym lidem spoleˇcnost a usnadˇ novat jim napˇr´ıklad pr´aci s elektronickou poˇstou, kterou je schopen pˇredˇc´ıtat. Aby mohl Nao tohoto c´ıle dos´ahnout, je vybaven celou ˇradou senzor˚ u, pohybov´ ych a indikaˇcn´ıch prvk˚ u. Jeho hardwarov´e vybaven´ı je detailnˇe pops´ano v ofici´aln´ı dokumentaci [14, advanced/hardware]. Robot Nao je univerz´aln´ım robotem, kter´ y si najde m´ısto nejen ve ˇskol´ach. Snahou jeho tv˚ urc˚ u je prosadit robota tak´e na mezin´arodn´ıch soutˇeˇz´ıch, kde spolu z´apol´ı roboti vˇsech moˇzn´ ych v´ yrobc˚ u v r˚ uzn´ ych discipl´ın´ach. Jedn´ım takov´ ym ´ projektem, v nˇemˇz je robot Nao zapojen, je projekt RoboCup [2]. Uˇcast v tomto projektu pˇrin´aˇs´ı robotovi popularitu a zajiˇst’uje mu z´ajem nadˇsenc˚ u, kteˇr´ı tak´e 6
pom´ahaj´ı s jeho v´ yvojem. Souˇca´st´ı projektu je mimo jin´e kategorie Standard Platform League, ve kter´e soupeˇr´ı cel´e muˇzstvo robot˚ u v kopan´e. V t´eto discipl´ınˇe se m˚ uˇze vyuˇz´ıvat jenom jeden konkr´etn´ı typ robota a v´ yvoj´aˇri zdokonaluj´ı pouze tzv. kontrolery, kter´e roboty ˇr´ıd´ı. Ofici´aln´ım robotem byl do roku 2008 robot Aibo firmy Sony. Od roku 2008 se ofici´aln´ım robotem stal Nao, coˇz svˇedˇc´ı o jeho velk´e vˇsestrannosti a dobr´em designu. Pokud by chtˇel nˇekdo vyv´ıjet obsluˇznou aplikaci pro robota Nao, je nutn´e, aby ho mˇel k dispozici. To nen´ı ovˇsem vˇzdy moˇzn´e, protoˇze robot je pomˇernˇe drah´ y. K dispozici je vˇetˇsinou jeden nebo dva exempl´aˇre v laboratoˇri. Pokud chce tedy nˇekdo pracovat s robotem, aniˇz by k nˇemu mˇel st´al´ y pˇr´ıstup (napˇr. se u nˇej stˇr´ıd´a v´ıce lid´ı), je v´ yhodn´e pouˇz´ıt simul´ator. V souˇcasn´e dobˇe existuj´ı dva robotick´e simul´atory nab´ızej´ıc´ı podporu robota Nao. Jedn´a se o simul´ator Webots firmy Cyberbotics [4] a simul´ator Miscrosoft Robotics Developer Studio [3]. Prvn´ı z jmenovan´ ych nab´ız´ı silnˇejˇs´ı podporu robota Nao. Spoleˇcnost Cyberbotics dokonce provozuje virtu´aln´ı verzi jiˇz zm´ınˇen´e kopan´e, kter´a se jmenuje RobotStadium. V´ yvoj´aˇri d´ıky tomu mohou sv´e kontrolery testovat v simul´atoru, jak obstoj´ı v souboji s kontrolery jin´ ych t´ ym˚ u. Tyto virtu´aln´ı z´apasy prob´ıhaj´ı kaˇzd´ y t´ yden. V´ yvoj´aˇr˚ um staˇc´ı do uz´avˇerky uploadovat sv´e kontrolery a t´ım jsou automaticky zaps´ani do soutˇeˇze. Na webov´ ych str´ank´ach discipl´ıny RobotStadium jsou pot´e zveˇrejnˇeny v´ ysledky a je moˇzn´e sledovat videoz´aznamy vˇsech utk´an´ı, kter´a prob´ıhaj´ı pˇr´ımo v simulaˇcn´ım prostˇred´ı. Pˇr´ınos simul´atoru tedy tkv´ı i v tom, ˇze je moˇzn´e robota, potaˇzmo jeho kontroler, testovat rychleji neˇz v re´alu. Nav´ıc je testov´an´ı prov´adˇeno ve virtu´aln´ım prostˇred´ı, kde m˚ uˇzeme nastolit podm´ınky, jak´ ych bychom v re´alu dosahovali tˇeˇzko nebo s vyˇsˇs´ımi n´aklady. Pro tuto diplomovou pr´aci byl zvolen pr´avˇe simul´ator Webots a to z toho d˚ uvodu, ˇze nab´ız´ı lepˇs´ı moˇznosti simulace robota Nao. C´ılem t´eto pr´ace je zhodnotit vhodnost simul´atoru Webots pˇri v´ yvoji obsluˇzn´ ych aplikac´ı pro robota Nao. Souˇca´st´ı pr´ace bude ˇreˇsen´ı nˇekolika menˇs´ıch u ´loh, kter´e budou demonstrovat moˇznosti simul´atoru, robota a jejich vz´ajemn´eho propojen´ı. T´ema tˇechto u ´loh by mˇelo alespoˇ n r´amcovˇe korespondovat s c´ıli projektu HUMAVIPS. Jejich zamˇeˇren´ı bude souviset s prostorovou orientac´ı a navigac´ı robota, jeˇz je pˇri interakci s lidmi tak´e velmi d˚ uleˇzit´a. Bˇehem pr´ace budu br´at zˇretel zejm´ena na to, do jak´e m´ıry bude v´ ysledn´a obsluˇzn´a aplikace vytvoˇren´a s pomoc´ı simul´atoru pouˇziteln´a pro skuteˇcn´eho robota. Souˇcasnˇe v pr´aci budu popisovat veˇsker´e klady a z´apory simul´atoru a veˇsker´a u ´skal´ı, kter´a pr´ace se simul´atorem Webots pˇrin´aˇs´ı. Na zaˇca´tku uvedu obecn´e vlastnosti simul´atoru. Aˇckoliv se v technick´e literatuˇre slovo ”robot” ˇcasto skloˇ nuje jako neˇzivotn´e, j´a budu ve sv´e pr´aci pouˇz´ıvat ˇzivotn´e skloˇ nov´an´ı podle vzoru p´an. D˚ uvodem je fakt, ˇze Nao je humanoidn´ı robot urˇcen´ y k interakci s lidmi a neˇzivotn´e skloˇ nov´an´ı mi v takov´em pˇr´ıpadˇe nepˇripad´a na m´ıstˇe.
7
2. Obecn´ a charakteristika simul´ atoru Webots V t´eto kapitole uvedu z´akladn´ı informace o tom, jak simul´ator vypad´a a jak se pouˇz´ıv´a. Detailn´ı informace o interface a veˇsker´ ych funkc´ıch jsou obsaˇzeny v referenˇcn´ı pˇr´ıruˇcce [5]. Simul´ator Webots je neust´ale se vyv´ıjej´ıc´ı software. Tato pr´ace popisuje simul´ator ve verzi 6.3.1. Prvn´ı d˚ uleˇzitou vˇec´ı je, jak simul´ator spustit. Licenˇcn´ı syst´em a postup, jak Webots zprovoznit, je k nalezen´ı v pr˚ uvodci [6, sekce 1.3]. K vypracov´an´ı diplomov´e pr´ace mi byl poskytnut Webots 6 EDU floating lincense, coˇz znamen´a, ˇze m´am k dispozici hardwarov´ y kl´ıˇc, kter´ y umoˇzn ˇuje spustit floating license server. Pokud chci spustit Webots, mus´ım se k tomuto serveru pˇripojit. Je moˇzn´e se k vlastn´ımu serveru pˇripojovat pˇres localhost. V praxi je moˇzn´e spustit floating license server na nˇejak´em serveru a kdo bude potˇrebovat, m˚ uˇze se k nˇemu pˇripojit pomoc´ı internetu. Hardwarov´ y kl´ıˇc, kter´ y m´am k dispozici, nese pouze jednu licenci, ale i tak by mohlo stˇr´ıdavˇe vyuˇz´ıvat Webots v´ıce uˇzivatel˚ u. Nev´ yhodou ovˇsem je, ˇze mus´ı b´ yt uˇzivatel st´ale online. Zkratka EDU znamen´a ˇskoln´ı verzi, kter´a nepodporuje nˇekter´e funkce, napˇr. tˇr´ıdu supervisor [6, sekce 6.2]. Na zaˇc´atku pr´ace se simul´atorem je tˇreba vytvoˇrit projekt, kter´ y m´a n´asleduj´ıc´ı adres´aˇrovou strukturu, jeˇz mus´ı b´ yt dodrˇzov´ana: • controllers Obsahuje soubory kontroler˚ u jednotliv´ ych robot˚ u. • motions Soubory definuj´ıc´ı konkr´etn´ı pohyby robot˚ u. • plugins Obsahuje r˚ uzn´e pluginy (napˇr. pro podporu fyziky apod.). • protos Prototypov´e soubory robot˚ u. – textures Soubory s texturami pro roboty. • videos V simul´atoru natoˇcen´e video soubory. • worlds Soubor s VRML modelem svˇeta. – textures Pouˇzit´e textury ve svˇetˇe. Simul´ator je vybaven pr˚ uvodcem, kter´ y vytvoˇr´ı projekt vˇcetnˇe adres´aˇrov´e struktury. Projekt nemus´ı nˇekter´e vˇeci obsahovat a z toho d˚ uvodu m˚ uˇze nˇekter´ y adres´aˇr chybˇet. Z´akladem projektu jsou roboti a sc´ena. Tyto dvˇe vˇeci by tedy chybˇet nemˇely. 8
2.1. Roboti
2.1. Roboti Simul´ator Webots nen´ı urˇcen v´ yhradnˇe pro simulaci robota Nao. Simul´ator podporuje celou ˇradu jin´ ych robot˚ u r˚ uzn´ ych v´ yrobc˚ u a umoˇzn ˇuje vytv´aˇret roboty nov´e. D´ıky t´eto moˇznosti je simul´ator vhodn´ y do ˇskol, kde mohou studenti zaˇc´ınat od robot˚ u velmi jednoduch´ ych, vlastnoruˇcnˇe vyroben´ ych. Pro kaˇzd´eho robota je moˇzn´e pˇr´ımo v simul´atoru ps´at obsluˇznou aplikaci, tzv. kontroler. Kontroler m˚ uˇze ovl´adat jednotliv´e motory robota, m˚ uˇze zpracov´avat data ze senzor˚ u a celkovˇe robota oˇzivit. Jednoduchost vytv´aˇren´ı robot˚ u a psan´ı jejich kontroler˚ u je patrn´a z tutori´alu [6, kapitola 7]. Simul´ator podporuje celou ˇradu programovac´ıch jazyk˚ u, ve kter´ ych lze kontrolery programovat. Nejpouˇz´ıvanˇejˇs´ım je C++ a Java, ale nab´ız´ı i Python nebo MATLAB. Jakmile je robot vytvoˇren, je moˇzn´e ho uloˇzit do souboru .proto (tzv. prototypov´ y soubor). Jedn´a se o typ souboru, ve kter´em jsou uloˇzeny tak´e prototypy vˇsech jiˇz existuj´ıc´ıch robot˚ u, mezi kter´e patˇr´ı i Nao. V souboru je uloˇzena jeho podoba a funkˇcnost. Pokud tedy chceme s nˇejak´ ym robotem pracovat, staˇc´ı n´am naˇc´ıst jeho prototypov´ y soubor a pˇriˇradit mu kontroler. Samozˇrejmˇe je moˇzn´e modifikovat soubory vˇsech jiˇz existuj´ıc´ıch robot˚ u, takˇze lze upravovat i podobu robota Nao. Lze tak napˇr´ıklad mˇenit jeho barvu, coˇz se m˚ uˇze hodit v pˇr´ıpadˇe, kdy budeme m´ıt ve sc´enˇe v´ıce robot˚ u a budeme je cht´ıt rozliˇsit.
2.2. Svˇ et Pokud chceme robota jakkoliv testovat, je potˇreba ho zasadit do virtu´aln´ıho svˇeta. Pro jeho popis vyuˇz´ıv´a Webots rozˇs´ıˇren´e VRML V2.0 [7] nazvan´e VRML SIM V6.0. Svˇet je tak moˇzn´e tvoˇrit pomoc´ı libovoln´eho VRML editoru, nebo dokonce ps´at pˇr´ımo v textov´em editoru. Simul´ator je ovˇsem vybaven vlastn´ım editorem sc´eny, kter´ y samozˇrejmˇe podporuje i rozˇs´ıˇren´ı jazyka VRML SIM V6.0. Editor je pˇredstavov´an stromem sc´eny, do kter´eho lze vkl´adat nov´e uzly a st´avaj´ıc´ı uzly mˇenit. Snadno lze tak vytvoˇrit vhodnou testovac´ı sc´enu pro vlastn´ıho robota. Roboti jsou v prototypov´ ych souborech tak´e popisov´ani jazykem VRML SIM V6.0 a simul´ator umoˇzn ˇuje nˇekter´e parametry obsaˇzen´e v tˇechto souborech upravovat pˇr´ımo pomoc´ı stromu sc´eny, takˇze napˇr´ıklad jiˇz zm´ınˇenou zmˇenu barvy robota lze prov´est pˇr´ımo v simul´atoru a nen´ı nutn´e ruˇcnˇe pˇrepisovat prototypov´ y soubor. Parametry, kter´e bude moˇzn´e mˇenit v simul´atoru, jsou uvedeny vˇzdy na zaˇc´atku prototypov´eho souboru. Obr´azek 2.1 ilustruje, jak vypad´a strom sc´eny a parametry, kter´e lze modifikovat pˇr´ımo v simul´atoru. 9
2. Obecn´a charakteristika simul´atoru Webots
Obr´ azek 2.1. Strom sc´eny, kter´ y obsahuje prototypov´ y soubor NaoV3R, pˇredstavuj´ıc´ı robota Nao. Na obr´ azku je vidˇet, kter´e parametry je moˇzn´e mˇenit pˇr´ımo v simul´atoru.
2.3. Podpora robota Nao Robot Nao je uloˇzen v prototypov´em souboru NaoV3R.proto. Stejnˇe jako Cyberbotics vyd´av´a nov´e verze simul´atoru, tak ˇcas od ˇcasu uveˇrejn´ı novou verzi tohoto souboru. Typicky k tomu doch´az´ı, pokud dojde k nˇejak´emu v´ yvoji na robotovi Nao. Kontroler k robotu Nao lze ps´at rovnou v simul´atoru na n´ızk´e u ´rovni, kdy kontroler pˇr´ımo ovl´ad´a polohy kloub˚ u a s´am zpracov´av´a informace ze senzor˚ u. Vytv´aˇren´ı takov´eho kontroleru m˚ uˇze b´ yt zdlouhav´e, kontroler je jedno´ uˇcelov´ y a nen´ı moˇzn´e ho pˇr´ımo pouˇz´ıt na re´aln´em robotovi. Re´aln´ y robot ˇr´ıd´ı framework NaoQi, kter´ y nab´ız´ı celou ˇradu funkc´ı a pˇredstavuje souˇcasnˇe interface, pˇres kter´ y je moˇzn´e se k robotovi pˇripojit. Pokud bychom chtˇeli pouˇz´ıvat kontroler vytvoˇren´ y v simul´atoru, museli bychom NaoQi nahradit a t´ım bychom se pˇripravili o spoustu funkc´ı, kter´e n´am m˚ uˇze nab´ıdnout. Pˇresto se takto vytvoˇren´e kontrolery pouˇz´ıvaj´ı napˇr. v soutˇeˇzi RobotStadium, protoˇze jsou jednoduch´e a rychl´e. Pˇr´ıklady takov´ ych kontroler˚ u je moˇzn´e nal´ezt po instalaci simul´atoru ve sloˇzce \projects\contests\robotstadium\controllers. Simul´ator Webots je ovˇsem vybaven speci´aln´ım kontrolerem nazvan´ ym naoqi for webots, kter´ y je univerz´aln´ı, je open-source a pokud chceme robota ovl´adat, mus´ıme pro nˇej napsat obsluˇznou aplikaci. Jeho k´ody a CMake projekt je um´ıstˇen ve sloˇzce \projects\robots\nao\controllers\naoqi for webots. Postup, jak jej zkompilovat a pˇripravit k pouˇzit´ı, je moˇzn´e nal´ezt v pˇriloˇzen´em ”readme” souboru nebo na str´ank´ach spoleˇcnosti [8]. Bˇehem pr´ace jsem byl vˇsak nucen modifikovat jeho 10
2.3. Podpora robota Nao zdrojov´e k´ody. Jsou uloˇzeny na pˇriloˇzen´em DVD ve sloˇzce \Projekty\naoqi for webots. Aby vˇse spr´avnˇe fungovalo, je tˇreba je ke kompilaci pouˇz´ıt. Postup vˇsak jinak z˚ ust´av´a stejn´ y. Kontroler naoqi for webots vyuˇz´ıv´a simulaˇcn´ı rozhran´ı kontroleru NaoQi. To nemus´ı bˇeˇzet pouze na skuteˇcn´em robotovi, ale tak´e virtu´alnˇe na poˇc´ıtaˇci. Pˇri spuˇstˇen´ı simulace se tedy spust´ı NaoQi a spoj´ı se s naoqi for webots, kter´ y nahrazuje skuteˇcn´eho robota. Naoqi for webots je pˇr´ımo spojen se simul´atorem, z´ısk´av´a tak informace ze vˇsech senzor˚ u a neust´ale je pˇred´av´a NaoQi, kter´ y informace zpracuje a vrac´ı informace o sv´e reakci. Obsluˇzn´a aplikace, kterou v´ yvoj´aˇr vytvoˇr´ı, se pˇripojuje k NaoQi, jak by tomu bylo i pˇri pr´aci se skuteˇcn´ ym robotem. Kontroler Naoqi for webots tak svou funkc´ı pˇripom´ın´a sp´ıˇse interface. Tento postup umoˇzn ˇuje vyuˇzit´ı funkc´ı NaoQi, viz dokumentace [14, API]. Bohuˇzel simulaˇcn´ı rozhran´ı NaoQi neumoˇzn ˇuje vyuˇz´ıt veˇsker´e funkce, ˇc´ımˇz jsme pˇri pr´aci se simul´atorem znaˇcnˇe omezeni. Samotn´ y model robota postr´ad´a nˇekter´e prvky (napˇr. mikrofony a reproduktory). S t´ım souvis´ı absence funkc´ı pracuj´ıc´ıch se zvukem v simulaˇcn´ım rozhran´ı.
2.3.1. Nedostupn´ e funkce v simul´ atoru Webots Pˇri pr´aci se simul´atorem Webots bude v´ yvoj´aˇr omezen t´ım, ˇze nem˚ uˇze pouˇz´ıt vˇsechny funkce, kter´e skuteˇcn´ y robot nab´ız´ı. Nˇekter´e nejsou dostupn´e z toho d˚ uvodu, ˇze nejsou v˚ ubec ”hardwarovˇe” podporov´any, coˇz znamen´a, ˇze prototyp robota nem´a vymodelov´ano nˇejak´e zaˇr´ızen´ı. V tomto pˇr´ıpadˇe je zcela nemoˇzn´e danou vˇec simulovat, aniˇz by se mˇenil prototypov´ y soubor robota. Druh´ ym d˚ uvodem m˚ uˇze b´ yt fakt, ˇze funkce je souˇc´ast´ı NaoQi, kter´e nen´ı open-source a danou funkci nezpˇr´ıstupˇ nuje simulaˇcn´ımu rozhran´ı. V takov´em pˇr´ıpadˇe je moˇzn´e vytvoˇrit vlastn´ı funkci, kter´a odv´ad´ı podobnou pr´aci. V t´eto kapitole uv´ad´ım v´ ypis z´akladn´ıch modul˚ u, kter´e nejsou v simul´atoru Webots dostupn´e. Seznam veˇsker´ ych modul˚ u vˇcetnˇe jejich detailn´ıho popisu, kter´e NaoQi API nab´ız´ı, je moˇzn´e nal´ezt v dokumentaci [14, API]. Nepodporovan´ a zaˇr´ızen´ı v modelu robota Nao • Mikrofony a reproduktory Simul´ator v˚ ubec nepracuje se zvukem, takˇze nen´ı moˇzn´e do sc´eny pˇridat ˇza´dn´ y zdroj zvuku. Z toho d˚ uvodu nen´ı model robota vybaven mikrofony ani reproduktory. Bohuˇzel tak nen´ı moˇzn´e vyuˇz´ıt celou ˇradu funkc´ı, kter´e se zvukem pracuj´ı. Patˇr´ı mezi nˇe pˇredevˇs´ım syntetiz´ator a rozpozn´av´an´ı ˇreˇci. Simul´ator tedy nen´ı v ˇz´adn´em pˇr´ıpadˇe vhodn´ y pro v´ yvoj´aˇre, kteˇr´ı chtˇej´ı vyv´ıjet aplikace zaloˇzen´e na pr´aci s audio daty. Konkr´etnˇe nen´ı moˇzno pracovat s n´asleduj´ıc´ımi moduly: – ALAudioDevice – ALAudioPlayer – ALAudioSourceLocalization – ALSoundDetection – ALSpeechRecognition – ALTextToSpeech 11
2. Obecn´a charakteristika simul´atoru Webots • LED Model robota nem´a vymodelov´any ˇz´adn´e LED, kter´e jsou vyuˇz´ıv´any k indikaci stavu robota a k vyjadˇrov´an´ı jeho ”pocit˚ u” pˇri interakci s lidmi. V simul´atoru tedy nen´ı dostupn´ y modul: – ALLeds • IR diody a Bluetooth Model robota nen´ı vybaven IR diodami a zaˇr´ızen´ım bluetooth, kter´e jsou pouˇz´ıvany ke komunikaci mezi dvˇema roboty nebo k zadav´an´ı pˇr´ıkaz˚ u. Nejsou tedy dostupn´e tyto moduly: – ALBluetooth – ALInfrareds • Prsty a tlaˇ c´ıtka na hlavˇ e Model robota nem´a vymodelov´any prsty a tlaˇc´ıtka na hlavˇe. Nen´ı tak moˇzn´e v simul´atoru vyv´ıjet aplikaci, kter´a by se snaˇzila o to, aby robot nˇeco uchopil. Tlaˇc´ıtka na hlavˇe jsou vyuˇz´ıv´ana k ovl´ad´an´ı robota ˇci k aktivaci pˇredem pˇripraven´ ych funkc´ı. V simul´atoru tedy nemaj´ı v podstatˇe ˇza´dn´ y smysl. Tento fakt nezabraˇ nuje pouˇz´ıv´an´ı ˇza´dn´eho modulu. Pouze je ovlivnˇen modul ALMotion, ve kter´em nen´ı moˇzn´e pracovat s n´asleduj´ıc´ımi klouby: – – – –
LWristYaw LHand RWristYaw RHand
Nepodporovan´ e moduly v simulaˇ cn´ım rozhran´ı NaoQi • • • • • • •
ALFaceDetection ALFaceTracking ALLandMarkDetection ALRedBallDetection ALRedBallTracker ALVisionRecognition ALVisionToolbox
Veˇsker´e moduly, kter´e nejsou podporov´any simulaˇcn´ım rozhran´ım kontroleru NaoQi, souvis´ı se zpracov´an´ım obrazu. Pˇri pr´ac´ı se skuteˇcn´ ym robotem dok´aˇzou tyto funkce znaˇcnˇe ulehˇcit pr´aci. Pˇri pr´aci se simul´atorem nic nebr´an´ı v´ yvoj´aˇri vytvoˇrit vlastn´ı funkce, kter´e by urˇcit´ ym zp˚ usobem nahrazovaly ty vestavˇen´e. Pˇri pˇrenosu obsluˇzn´e aplikace na skuteˇcn´eho robota je pak moˇzn´e funkce nahradit zpˇet tˇemi vestavˇen´ ymi.
12
2.3. Podpora robota Nao Ze seznamu zaˇr´ızen´ı a modul˚ u, kter´e v simul´atoru Webots nelze pouˇz´ıt, je patrn´e, ˇze v´ yvoj´aˇr pracuj´ıc´ı se simul´atorem je znaˇcnˇe omezen. Simul´ator se v podstatˇe nejv´ıce hod´ı k vytv´aˇren´ı aplikac´ı, kter´e vyuˇz´ıvaj´ı obraz z´ıskan´ y z kamery, pˇr´ıpadnˇe data z ultrazvukov´ ych senzor˚ u, a vytv´aˇr´ı nˇejakou choreografii. Takovou aplikac´ı je napˇr´ıklad zm´ınˇen´ y fotbal. Simul´ator se naopak nehod´ı k vytv´aˇren´ı aplikac´ı, kter´e maj´ı za c´ıl interakci robota s lidmi, protoˇze tam jsou velmi d˚ uleˇzit´e drobn´e detaily, jak´ ymi jsou LED, zvuky, pohyb prst˚ u a podobnˇe.
13
´ 3. Uloha 1 - Stopovan´ a C´ılem t´eto u ´lohy je navrhnout, implementovat a v simul´atoru Webots odzkouˇset obsluˇznou aplikaci robota Nao, kter´a by umoˇzn ˇovala, aby robot sledoval s´erii znaˇcek um´ıstˇen´ ych na zemi. Pˇredpokl´ad´a se, ˇze ze znaˇcek by byla sestavena bezpeˇcn´a trasa, kter´a by dovedla robota z m´ısta A do m´ısta B, pˇr´ıpadnˇe i zpˇet v opaˇcn´em smˇeru. Robot bude postupovat tak, ˇze se bude rozhl´ıˇzet a hledat znaˇcku. Ty maj´ı sv´e poˇrad´ı a robot bude hledat vˇzdy tu, kter´a je na ˇradˇe. V okamˇziku, kdy pˇr´ısluˇsnou znaˇcku nalezne, vypoˇc´ıt´a jej´ı polohu a vyd´a se jej´ım smˇerem. Jakmile doraz´ı na znaˇcku, zaˇcne hledat dalˇs´ı. Takto postupuje tak dlouho, dokud nedoraz´ı k posledn´ı. ´ Uloha m´a n´asleduj´ıc´ı pˇr´ınos: • Otestuje schopnost simul´atoru simulovat kameru robota a pˇrenos obrazu do obsluˇzn´e aplikace. • Otestuje schopnost simul´atoru simulovat pohyb robota v prostoru. • Rozˇs´ıˇr´ı moˇznosti navigace robota.
3.1. Z´ıskan´ı obrazu z kamery Nao je vybaven dvˇema kamerami poskytuj´ıc´ımi rozliˇsen´ı 640×480 pixel˚ u pˇri rychlosti sn´ım´an´ı 30 fps. Podrobn´e informace k obˇema kamer´am jsou k dispozici v ofici´aln´ı dokumentaci [14, advanced/hardware/video camera]. Simul´ator Webots umoˇzn ˇuje mˇenit z´akladn´ı parametry kamery, kter´ ymi jsou rozliˇsen´ı a zorn´ yu ´hel. J´a jsem ve vˇsech pˇr´ıpadech vyuˇz´ıval horn´ı kameru s pln´ ym rozliˇsen´ım 640×480 pixel˚ u. Zorn´ y u ´hel jsem nastavil shodnˇe s kamerou skuteˇcn´eho robota 58◦ diagon´alnˇe. Ovladaˇc robota NaoQi, kter´ y je nainstalov´an u skuteˇcn´eho robota, disponuje ˇradou funkc´ı pro zpracov´an´ı obrazu. Pro tuto u ´lohu se jako nejzaj´ımavˇejˇs´ı jev´ı detekce speci´aln´ıch kruhov´ ych znaˇcek zvan´ ych Naomark (viz dokumentaci [14, API / ALLandMarkDetection]), kter´a by byla vhodn´a pro u ´lohu stopov´an´ı. Tato funkce bohuˇzel nen´ı podporov´ana simulaˇcn´ım rozhran´ım, kter´e NaoQi nab´ız´ı a kter´e simul´ator Webots vyuˇz´ıv´a. Proto jsem musel zvolit jin´ y zp˚ usob detekce znaˇcek. Jak se pozdˇeji uk´azalo, vestavˇen´a funkce detekuj´ıc´ı Naomarky stejnˇe nen´ı dostateˇcnˇe spolehliv´a pro podobn´e pouˇzit´ı. Pojedn´av´a o tom ˇcl´anek Integration of the Humanoid Robot Nao inside a Smart Home [19], ve kter´em se autoˇri vˇenuj´ı navigaci robota v dom´ac´ım prostˇred´ı. Pˇred samotnou detekc´ı znaˇcek je potˇreba z´ıskat ze simul´atoru obraz, kter´ y sn´ım´a virtu´aln´ı kamera robota. Simulaˇcn´ı rozhran´ı ovladaˇce NaoQi nab´ız´ı sadu funkc´ı, kter´e umoˇzn ˇuj´ı naˇcten´ı obrazu z pamˇeti ovladaˇce, kam je obraz cyklicky ukl´ad´an. Pro potˇreby u ´lohy je nejvhodnˇejˇs´ı pouˇz´ıt funkci getImageRemote (viz 14
3.2. Zpracov´an´ı obrazu dokumentaci [14, API / ALVideoDevice]). J´a jsem pouˇzil pro pr´aci s obrazem knihovnu OpenCV [9], kter´a nab´ız´ı ˇsirokou ˇsk´alu funkc´ı pro zpracov´an´ı obrazu. Po naˇcten´ı dat pomoc´ı vybran´e funkce je tedy obraz ukl´ad´an do struktury IplImage, kterou OpenCV standardnˇe pouˇz´ıv´a. Tento postup lze pouˇz´ıt i v pˇr´ıpadˇe, ˇze pracujeme se skuteˇcn´ ym robotem, protoˇze funkce jsou stejn´e jak pro bˇeˇzn´e, tak pro simulaˇcn´ı rozhran´ı. Rozd´ıl je jenom v tom, ˇze v pˇr´ıpadˇe simulace je do pamˇeti ovladaˇce NaoQi obraz cyklicky ukl´ad´an rozhran´ım simul´atoru Webots a nen´ı pˇrirozenˇe naˇc´ıt´an z kamery. Komunikace NaoQi s obsluˇznou aplikac´ı bohuˇzel nen´ı optimalizov´ana a dosahuje velmi podpr˚ umˇern´ ych rychlost´ı. To plat´ı jak pro skuteˇcn´eho robota, tak pro simulaˇcn´ı rozhran´ı. V´ ysledkem je, ˇze pokud bychom takto sn´ımali sc´enu, dos´ahneme maxim´alnˇe pˇrenosov´e rychlosti 1fps, coˇz je pro vˇetˇsinu aplikac´ı nedostaˇcuj´ıc´ı. Tohoto probl´emu jsou si v´ yvoj´aˇri robota vˇedomi a pracuj´ı na vylepˇsen´ı. Pˇrenosov´ y protokol byl vylepˇsen ve verzi SDK 1.8.16, kde dosahuje rychlosti 10 fps. Jednou moˇznost´ı, jak pˇrenos zlepˇsit, by tedy mohl b´ yt pˇrechod na novˇejˇs´ı verzi Aldebran SDK. Druhou moˇznost´ı je pouˇzit´ı speci´aln´ıho middlewaru pro pˇrenos dat z robota [24]. Pˇri jeho pouˇzit´ı je moˇzn´e dos´ahnout pˇrenosov´e rychlosti 30fps. V pˇr´ıpadˇe, ˇze pracujeme se simul´atorem, nen´ı pˇr´ıliˇs vhodn´e ovladaˇc NaoQi pro sn´ım´an´ı obrazu pouˇz´ıvat. T´ım doch´az´ı k tomu, ˇze v simul´atoru Webots vznikne obraz virtu´aln´ı sc´eny, kter´ y je nahr´an do pamˇeti NaoQi, odkud je potom naˇc´ıt´an obsluˇznou aplikac´ı robota. Kdyby byla komunikace s NaoQi dostateˇcnˇe rychl´a, tento mezikrok by v˚ ubec nevadil a naopak by bylo v´ yhodn´e, ˇze by naˇc´ıt´an´ı obrazu fungovalo stejnˇe v simulaci jako v pˇr´ıpadˇe skuteˇcn´eho robota. Protoˇze tomu tak nen´ı (pouˇzit´ı middlewaru by bylo sloˇzitˇejˇs´ı), byl jsem nucen hledat ˇreˇsen´ı v meziprocesov´e komunikaci, pomoc´ı kter´e bych bˇehem poˇrizov´an´ı obr´azku obeˇsel NaoQi. Rozhodl jsem se vyuˇz´ıt knihovnu Boost [10], kter´a je vyuˇz´ıv´ana Aldebaran SDK, tud´ıˇz ji m´a k dispozici kaˇzd´ y, kdo s robotem Nao pracuje. Moˇznost´ı, jak propojit dva nez´avisl´e procesy na jednom poˇc´ıtaˇci, je v´ıce. J´a jsem zvolil sd´ılenou pamˇet’ [11, Boost.Interprocess / Sharing memory between processes]. Toto ˇreˇsen´ı spoˇc´ıv´a v tom, ˇze kontroler naoqi for webots vytvoˇr´ı sd´ılenou pamˇet’ a m´ısto toho, aby obraz uloˇzil do pamˇeti ovladaˇce NaoQi, uloˇz´ı ho do t´eto pamˇeti. Obsluˇzn´a aplikace se pot´e pˇripoj´ı ke sd´ılen´e pamˇeti, odkud si obraz naˇcte. Z´apis a ˇcten´ı mus´ı b´ yt samozˇrejmˇe synchronizov´any pomoc´ı z´amk˚ u vz´ajemn´eho vylouˇcen´ı (tzv. mutexy). Obsluˇznou aplikaci je moˇzn´e implementovat tak, ˇze se na zaˇc´atku definuje, zda je urˇcena pro simul´ator, nebo pro skuteˇcn´eho robota. Na m´ıstˇe naˇcten´ı obrazu se implementuj´ı obˇe varianty a provede se pouze ta, kter´a odpov´ıd´a definici. T´ım je zaruˇceno, ˇze na simul´atoru vyvinut´a aplikace bude spustiteln´a na skuteˇcn´em robotovi pouze po zmˇenˇe nastaven´ı (a opˇetovn´e kompilaci).
3.2. Zpracov´ an´ı obrazu Zpracov´an´ım obrazu se v t´eto u ´loze mysl´ı detekce znaˇcky. K detekci jsem vyuˇzil open-source C++ knihovnu ARToolKit [12], jeˇz slouˇz´ı k vytv´aˇren´ı aplikac´ı pro 15
´ 3. Uloha 1 - Stopovan´a augmentovanou realitu1 . Tato knihovna nab´ız´ı mimo jin´e funkci, jenˇz v obrazu detekuje ˇctvercov´e znaˇcky, kter´e jsou ohraniˇcen´e ˇcern´ ym r´amem, uvnitˇr kter´eho je znak, podle nˇejˇz je urˇcen identifik´ator (ID) znaˇcky. Knihovna nab´ız´ı aplikaci pro vytv´aˇren´ı nov´ ych znaˇcek, takˇze je moˇzn´e jich vytvoˇrit dostatek pro jakoukoli potˇrebu. Sadu znaˇcek, kterou jsem pˇripravil pro svou u ´lohu, je moˇzn´e vidˇet na obr´azku 3.1. Pro samotnou detekci nen´ı velikost znaˇcky podstatn´a (ˇsablona z˚ ust´av´a stejn´a), avˇsak pro pozdˇejˇs´ı v´ ypoˇcty je nutn´e ji zn´at. J´a jsem zvolil velikost znaˇcky 160 mm, coˇz by podle dosaˇzen´ ych v´ ysledk˚ u mˇelo b´ yt dostateˇcn´e pro spolehlivou detekci na vzd´alenost aˇz zhruba tˇr´ı metr˚ u. Funkce zajiˇst’uj´ıc´ı detekci znaˇcky detekuje veˇsker´e znaˇcky, jejichˇz vzor je naˇcten v pamˇeti. Kaˇzd´emu vzoru je pˇri naˇcten´ı pˇriˇrazeno ID. Pˇri detekci poskytuje funkce tyto z´akladn´ı informace o znaˇcce: • • • •
ID nalezen´e znaˇcky Vˇerohodnost Pozice stˇredu a rohov´ ych bod˚ u znaˇcky Natoˇcen´ı znaˇcky
Je tedy moˇzn´e zpracov´avat pouze znaˇcky, jenˇz byly kvalitnˇe nadetekov´any (experiment´alnˇe jsem zvolil pr´ah vˇerohodnosti 0,4) a maj´ı ID znaˇcky, kter´a je na trase robota pr´avˇe na ˇradˇe.
0.
1.
2.
3.
4.
5.
6.
7.
8.
9.
Obr´ azek 3.1. Pˇrehled pˇripraven´ ych znaˇcek pro detekci pomoc´ı ARToolKitu
3.3. V´ ypoˇ cet polohy znaˇ cky Jakmile pomoc´ı ARToolKitu z´ısk´am polohu rohov´ ych bod˚ u a stˇredu znaˇcky v obraze, mohu vypoˇc´ıtat relativn´ı polohu znaˇcky v˚ uˇci pozici robota v re´aln´em svˇetˇe. V´ ypoˇcet je zaloˇzen na tˇr´ıbodov´em algoritmu P3P [21, pˇredn´aˇska 4], pomoc´ı kter´eho je moˇzn´e vypoˇc´ıtat projekˇcn´ı matici kamery. Pro tuto u ´lohu nen´ı nutn´e poˇc´ıtat pˇr´ımo projekˇcn´ı matici, ale staˇc´ı prov´est prvn´ı ˇca´st v´ ypoˇctu, ve kter´em 1
Augmentovan´ a realita pˇredstavuje vkl´ ad´an´ı virtu´aln´ıch objekt˚ u do skuteˇcn´e sc´eny. Pˇr´ıkladem mohou b´ yt speci´ aln´ı efekty ve filmu.
16
3.3. V´ ypoˇcet polohy znaˇcky se urˇcuje vzd´alenost jednotliv´ ych bod˚ u od kamery. Detekc´ı znaˇcky z´ısk´am polohu pˇeti bod˚ u, ale algoritmus P3P pracuje pouze se tˇremi body, proto mi staˇc´ı poˇc´ıtat s rohy znaˇcky. Ve v´ ysledku cyklicky vyb´ır´am 3 ze 4 bod˚ u. Pro kaˇzdou trojici bod˚ u m˚ uˇze nav´ıc vyj´ıt nˇekolik ˇreˇsen´ı. Veˇsker´e v´ ysledky vzd´alenost´ı ukl´ad´am a nakonec je pr˚ umˇeruji. T´ım dostanu vzd´alenost kamery od stˇredu znaˇcky. Pˇresnˇeji ˇreˇceno, algoritmus pracuje se tˇremi p´ary (bod v obraze / bod v re´aln´em svˇetˇe). Proto mus´ım vˇsem bod˚ um pˇriˇradit 3D souˇradnice. Nejjednoduˇsˇs´ı pro mˇe bylo zvolit stˇred soustavy ve stˇredu znaˇcky. Souˇradnice vˇsech bod˚ u pak popisuje obr´azek 3.2. D´ıky znalosti skuteˇcn´eho rozmˇeru znaˇcky mohu souˇradnicovou vzd´alenost snadno pˇrev´est na metry.
Obr´ azek 3.2. Pˇriˇrazen´ı svˇetov´ ych souˇradnic roh˚ um a stˇredu znaˇcky
V´ ypoˇcet vzd´alenosti ke stˇredu znaˇcky mi ale nestaˇc´ı. Vzd´alenost je urˇcena od kamery. Je tedy nutn´e pomoc´ı Pythagorovy vˇety pˇrepoˇc´ıtat vzd´alenost ”po zemi”(na v´ yˇsku, ve kter´e se kamera pr´avˇe nach´az´ı, se m˚ uˇzeme dot´azat NaoQi ). Pokud by byla znaˇcka nalezena pˇresnˇe uprostˇred obrazu, staˇcilo by, aby ˇsel robot st´ale rovnˇe a po uraˇzen´ı vypoˇc´ıtan´e vzd´alenosti by st´al v jej´ım stˇredu. Znaˇcka ovˇsem m˚ uˇze leˇzet r˚ uznˇe vzd´alena od stˇredu obrazu, a proto je tˇreba vzd´alenost, kterou m´a robot urazit, rozdˇelit na x-ovou a y-ovou sloˇzku – ∆x a ∆y. Situace je zn´azornˇena na obr´azku 3.3. Souˇradn´ y syst´em robota je zn´azornˇen na t´emˇze obr´azku. Osa y tedy pˇredstavuje posun robota do strany. Nejprve je tˇreba vypoˇc´ıtat tuto y-ovou sloˇzku, kterou jsem oznaˇcil ∆y. Opˇet pomoc´ı Pythagorovy vˇety je moˇzn´e z t´eto vzd´alenosti vypoˇc´ıtat x-ovou sloˇzku, kterou jsem oznaˇcil jako ∆x. ∆x =
p l2 − ∆y 2
(3.1)
Z˚ ust´av´a tak ot´azka, jak vypoˇc´ıtat ∆y. Na obr´azku 3.4 je situace rozkreslena detailnˇeji. Vzd´alenosti ∆y zde odpov´ıd´a vzd´alenost |CV|, kde C je stˇred znaˇcky a V je bod na vertik´aln´ı ose obr´azku ve v´ yˇsce bodu C. K v´ ypoˇctu t´eto vzd´alenosti je tˇreba zn´at pˇrepoˇcet z pixel˚ u na metry. Ten je kv˚ uli perspektivˇe v kaˇzd´e hladinˇe 17
´ 3. Uloha 1 - Stopovan´a
Obr´ azek 3.3. Zn´ azornˇen´ı polohy kamery a znaˇcky: d ... vzd´alenost znaˇcky od kamery, h ... v´ yˇska kamery, l ... vzd´ alenost znaˇcky v p˚ udorysu
obr´azku jin´ y, avˇsak pro jednu hladinu stejn´ y (´ useˇcka CV je ovˇsem horizont´aln´ı). K tomuto pˇrepoˇctu je tˇreba zmˇeˇrit vzd´alenost |CH| jak v pixelech, tak v metrech. V prvn´ım pˇr´ıpadˇe m˚ uˇzeme tuto hodnotu snadno odeˇc´ıst z obr´azku. Ve druh´em pˇr´ıpadˇe ji mus´ım vypoˇc´ıtat z troj´ uheln´ıku CSH (S je stˇred hrany KL, kde body K a L jsou um´ıstˇeny nejv´ıce vpravo). Tento troj´ uheln´ık je v re´aln´em svˇetˇe pravo´ uhl´ y, ale v obraze nikoliv. Proto je tˇreba tyto 3 body transformovat homografi´ı [16, strany 69-71], kter´a transformuje rohy znaˇcky do rohu ˇctverce o stejnˇe dlouh´ ych stran´ach, jako m´a znaˇcka v re´aln´em svˇetˇe. K v´ ypoˇctu homografie jsem vyuˇzil funkci cvFindHomography z knihovny OpenCV. V takto transformovan´em troj´ uheln´ıku vypoˇc´ıt´am snadno pomoc´ı Pythagorovy vˇety vzd´alenost |CH| v metrech (znaˇceno |CH|m ): |CH|m =
p |CS|2m − |HS|2m
(3.2)
Vzd´alenost |CV|m a tud´ıˇz poˇzadovanou y-ovou sloˇzku vzd´alenosti ke znaˇcce vypoˇc´ıt´am jiˇz snadno podle vzorce: ∆y = |CV |m = |CV |
|CH|m |CH|
(3.3)
K v´ ypoˇctu vzd´alenosti kamery od stˇredu znaˇcky jsem vytvoˇril funkci p3pDistance a k rozkladu vzd´alenosti na sloˇzku ∆x a ∆y funkci decomposeXY. Obˇe funkce jsou um´ıstˇeny v souboru p3pdistance.h resp. p3pdistance.cpp. Detaily k funkc´ım viz program´atorsk´a dokumentace. 18
3.4. Pohyb robota po trase
Obr´ azek 3.4. Zn´azornˇen´ı polohy znaˇcky v obraze
3.4. Pohyb robota po trase 3.4.1. Popis algoritmu Pˇredpokl´ad´a se, ˇze algoritmus, kter´ y provede robota po trase vytyˇcen´e znaˇckami, je spuˇstˇen v okamˇziku, kdy robot stoj´ı v m´ıstˇe, odkud m˚ uˇze vidˇet prvn´ı znaˇcku. D´ale se pˇredpokl´ad´a, ˇze trasa je postavena tak, aby z kaˇzd´e znaˇcky bylo moˇzn´e vidˇet znaˇcku n´asleduj´ıc´ı a nebyla mezi nimi ˇza´dn´a pˇrek´aˇzka. Algoritmus jsem tedy implementoval tak, ˇze se po spuˇstˇen´ı zaˇcne robot rozhl´ıˇzet a rozhl´ıˇz´ı se, dokud nenalezne prvn´ı znaˇcku. Jakmile ji nalezne, vypoˇc´ıt´a jej´ı polohu a vyd´a se k n´ı. Zde se opˇet bude rozhl´ıˇzet, dokud nenelazene dalˇs´ı. Tak pokraˇcuje, dokud nedoraz´ı k posledn´ı znaˇcce. Bˇehem rozhl´ıˇzen´ı robot nikam nechod´ı a pˇresun k dalˇs´ı znaˇcce je pˇr´ımoˇcar´ y. Robot se tedy vˇzdy rozhl´ıˇz´ı na jednom m´ıstˇe a pokud znaˇcku nenalezne, otoˇc´ı ve smˇeru hodinov´ ych ruˇciˇcek o 60◦ a opˇet se rozhl´ıˇz´ı. Bˇehem rozhl´ıˇzen´ı natoˇc´ı hlavu do 9 r˚ uzn´ ych poloh, kter´e jsou kombinac´ı 3 u ´rovn´ı sklopen´ı a3u ´rovn´ı natoˇcen´ı: ´ • Urovnˇ e sklopen´ı hlavy dol˚ u v˚ uˇci vodorovn´e poloze ◦ – 0 – 12◦ – 29,5◦ (maximum) • Natoˇcen´ı hlavy v˚ uˇci natoˇcen´ı robota – -30◦ (minimum) – 0◦ – 30◦ (maximum) K nadefinov´an´ı pohybu hlavy jsem vyuˇzil aplikaci Choregraphe, kter´a je souˇca´st´ı bal´ıˇcku Aldebaran SDK. Z t´eto aplikace je moˇzn´e pro jakoukoliv sekvenci pohyb˚ u generovat odpov´ıdaj´ıc´ı C++ k´od. J´a jsem tyto k´ody um´ıstil do souboru movement.h resp. movement.cpp. K otoˇcen´ı robota jsem pouˇzil funkci walkTo, 19
´ 3. Uloha 1 - Stopovan´a kterou nab´ız´ı framework NaoQi. Pˇri vol´an´ı t´eto funkce se zad´av´aj´ı pouze relativn´ı souˇradnice x a y, kam m´a robot doj´ıt, a u ´hel, o kter´ y se m´a robot otoˇcit.
3.4.2. Popis probl´ emu s ch˚ uz´ı robota v simul´ atoru K pˇresunu robota k dalˇs´ı znaˇcce jsem chtˇel opˇet pouˇz´ıt funkci walkTo, kter´a je velmi vhodn´a a jiˇz jsem s n´ı pˇriˇsel do styku pˇri pr´aci se skuteˇcn´ ym robotem, kde funguje spolehlivˇe. Pˇri testov´an´ı algoritmu na simul´atoru jsem ale zjistil, ˇze funkce zde nepracuje, jak by mˇela. Pˇri testov´an´ı na jednoduch´e aplikaci, kter´a pouze zavolala funkci s parametry k ujit´ı jednoho metru dopˇredu, jsem ovˇeˇril, ˇze robot ujde vˇzdy kratˇs´ı, promˇenlivou vzd´alenost a pˇri sledov´an´ı simul´atoru jsem pozoroval podezˇrel´e pohyby robota, kter´e vedly k tomu, ˇze robot dˇelal napˇr. kroky na m´ıstˇe nebo se nakl´anˇel a mˇenil smˇer. Kontaktoval jsem podporu simul´atoru Webots, kde mi bylo sdˇeleno, ˇze se jedn´a o chybu zp˚ usobenou nesynchronn´ım bˇehem kon´dajnˇe vˇed´ı, ale nemaj´ı ˇcas se j´ım troler˚ u NaoQi a naoqi for webots. O tomto jevu u zab´ yvat. Cel´ y probl´em tkv´ı v tom, ˇze kontroler NaoQi m´a svou ˇcasovou z´akladnu. Pokud obsluˇzn´a aplikace zavol´a funkci walkTo, NaoQi zaˇcne mˇenit polohy kloub˚ u a dˇel´a to nez´avisle kaˇzd´ ych 40 ms. Naproti tomu naoqi for webots m´a zase svou ˇcasovou z´akladnu a kaˇzd´ ych 40 ms si vyˇz´ad´a polohy kloub˚ u od NaoQi. Funkce by pracovala spr´avnˇe, kdyby toto prob´ıhalo synchronnˇe. Bohuˇzel tomu tak nen´ı a pokud je napˇr´ıklad procesor hodnˇe zat´ıˇzen a simul´ator resp. jeho kontroler u se opozd´ı, NaoQi naoqi for webots je zanepr´azdnˇen a s pˇreˇcten´ım poloh kloub˚ neˇcek´a. V´ ysledkem je, ˇze pohyby nejsou plynul´e nebo jsou v kritick´ ych pˇr´ıpadech u ´plnˇe chybn´e. Simul´ator m´a dokonce n´astroj monitoruj´ıc´ı synchronizaci obou kontroler˚ u, kter´ y je um´ıstˇen v prav´em doln´ım rohu okna simul´atoru (viz obr´azek 3.5a). Pokud NaoQi pˇredb´ıh´a, hodnota kles´a pod 1.0 (hodnota 1.0 odpov´ıd´a pln´e synchronizaci). V uzlu WorldInfo, jenˇz je prvn´ım uzlem VRML stromu, je poloˇzka runRealTime (viz br´azek 3.5b). Pokud je tato poloˇzka zatrhnuta, konuˇze doj´ıt k tomu, ˇze troler naoqi for webots ˇcek´a na NaoQi, a t´ım p´adem nem˚ by ukazatel synchronizace ukazoval vˇetˇs´ı hodnotu neˇz 1.0. V´ ysledkem je jednostrann´a synchronizace. NaoQi vˇsak stejnˇe nikdy nepoˇck´a, takˇze chyba je pouze zm´ırnˇena. Protoˇze NaoQi nen´ı (narozd´ıl od naoqi for webots) open-source a nen´ı tedy moˇzn´e jej upravit, ned´a se s t´ımto probl´emem nic dˇelat. V praxi tedy nen´ı moˇzn´e v simul´atoru tuto funkci pouˇz´ıvat tam, kde poˇzadujeme pˇresnost. Je tˇreba pˇrij´ıt s jin´ ym ˇreˇsen´ım, jak pˇresunovat robota v prostoru. Pˇri psan´ı obsluˇzn´e aplikace jsem pouˇzil opˇet dvoj´ı implementaci, protoˇze pokud aplikace nebˇeˇz´ı na simul´atoru, nen´ı d˚ uvod se funkci walkTo vyh´ ybat. Pokud n´am ale nejde o pˇresnost (napˇr. pˇri otoˇcen´ı robota bˇehem rozhl´ıˇzen´ı nen´ı podstatn´e, jestli se otoˇc´ı pˇresnˇe o 60◦ ), je moˇzn´e funkci walkTo volat, i pokud pracujeme se simul´atorem.
ˇ sen´ı probl´ 3.4.3. Reˇ emu s ch˚ uz´ı robota v simul´ atoru Existuje nˇekolik zp˚ usob˚ u, jak vyˇreˇsit probl´em s ch˚ uz´ı robota v simul´atoru, a vˇsechny spoˇc´ıvaj´ı ve vyhnut´ı se funkci walkTo. 20
3.4. Pohyb robota po trase
a) ukazatel nizace
synchro-
b) poloˇzka runRealTime v uzlu WorldInfo
Obr´ azek 3.5. N´ astroje ke kontrolov´an´ı synchronizace dostupn´e v simul´atoru Webots
Nevyuˇ z´ıvat pohyb robota Simul´ator je vybaven speci´aln´ım kontrolerem pojmenovan´ ym Supervisor, jenˇz je schopen pohybovat jak´ ymikoliv pˇredmˇety. Pomoc´ı meziprocesov´e komunikace je tak moˇzn´e vydat pˇr´ıkaz k posunut´ı robota na poˇzadovan´e m´ısto. Tento postup nep˚ usob´ı pˇr´ıliˇs dobˇre a nav´ıc nen´ı dostupn´ y s licenc´ı EDU. Vyuˇ z´ıt funkci setWalkTargetVelocity Pomoc´ı zm´ınˇen´e funkce je moˇzn´e nastavit d´elku kroku a frekvenci krok˚ u robota, ˇc´ımˇz je moˇzn´e manu´alnˇe ovl´adat jeho ch˚ uzi. Pˇri pouˇzit´ı t´eto funkce doch´az´ı ke stejn´e chybˇe, jako bychom pouˇzili funkci walkTo. V tomto pˇr´ıpadˇe ale m´ame v´ yhodu v tom, ˇze m˚ uˇzeme nastavit frekvenci krok˚ u. Pokud nastav´ıme frekvenci n´ızkou, nastaven´ı kloub˚ u se bude bˇehem ch˚ uze mˇenit pomaleji a riziko, ˇze dojde k velk´e chybˇe bˇehem desynchronizace simul´atoru Webots s kontrolerem NaoQi, bude mal´e. T´ımto ˇreˇsen´ım chybu neodstran´ıme, ale v´ yraznˇe ji sn´ıˇz´ıme. Naprogramoval jsem funkci walkTo2, kter´a pˇrepoˇc´ıt´a souˇradnice, kam m´a robot doj´ıt, na u ´hel natoˇcen´ı a vzd´alenost. Pot´e vol´a funkci setWalkTargetVelocity s n´ızkou frekvenc´ı krok˚ u. Robot je nejprve natoˇcen spr´avn´ ym smˇerem a pot´e vysl´an kupˇredu, aby uˇsel pˇr´ımoˇcaˇre danou vzd´alenost. Nev´ yhodou t´eto funkce je, ˇze chyba (i kdyˇz mal´a) je st´ale nahodil´a a robot jde pomaleji neˇz pˇri pouˇzit´ı funkce walkTo. V´ yhodou je, ˇze tato funkce m˚ uˇze b´ yt pouˇzita i pˇri pr´aci se skuteˇcn´ ym robotem, kde m˚ uˇze b´ yt v urˇcit´ ych pˇr´ıpadech niˇzˇs´ı rychlost pohybu vyˇzadov´ana. Pokud pracujeme se simul´atorem, je moˇzn´e toto ˇreˇsen´ı jeˇstˇe vylepˇsit t´ım, ˇze budeme ˇc´ıst polohu robota ze simul´atoru a pokud po zavol´an´ı funkce walkTo2 skonˇc´ı na jin´em m´ıstˇe, neˇz by mˇel, zavol´ame funkci znovu tak, aby doˇslo k upˇresnˇen´ı pozice. Takto lze postupovat rekuzivnˇe, dokud chyba neklesne pod urˇcit´ y pr´ah. ˇ Cten´ı polohy robota lze uskuteˇcnit napˇr´ıklad pomoc´ı tˇr´ıdy Supervisor. Pokud tuto tˇr´ıdu nem´ame k dispozici, je moˇzn´e pozici robota zjistit zapojen´ım zaˇr´ızen´ı GPS. Robot Nao takov´ ym zaˇr´ızen´ım vybaven nen´ı, ale simul´ator Webots ho nab´ız´ı a je 21
´ 3. Uloha 1 - Stopovan´a moˇzn´e upravit prototypov´ y soubor robota a zaˇr´ızen´ı GPS robotu pˇridat. Pokud to udˇel´ame, staˇc´ı upravit kontroler naoqi for webots tak, aby v kaˇzd´em kroku pˇreˇcetl souˇradnice, kter´e GPS zaˇr´ızen´ı ud´av´a, a uloˇzil je do sd´ılen´e pamˇeti. Souˇradnice odpov´ıdaj´ı poloze robota v souˇradn´em syst´emu simul´atoru. Pohybovat robotem pˇr´ımo prostˇrednictv´ım kontroleru naoqi for webots Kontroler naoqi for webots ˇcte polohy kloub˚ u z NaoQi a zde doch´az´ı k chybˇe. Tyto polohy ovˇsem m˚ uˇze naˇc´ıtat napˇr´ıklad ze souboru .motion jako jak´ ykoli jin´ y kontroler, kter´ y pracuje s robotem pˇr´ımo, bez pouˇzit´ı NaoQi. Z nˇekolika d´ılˇc´ıch pohyb˚ u lze sloˇzit ˇretˇezec, jenˇz by dovedl robota na poˇzadovan´e m´ısto. Staˇc´ı k tomu ze souˇradnic relativn´ı pozice, kam m´a robot doj´ıt, vypoˇc´ıtat u ´hel otoˇcen´ı robota a vzd´alenost, kterou pak m´a uj´ıt. J´a jsem vyuˇzil tyto d´ılˇc´ı pohyby: • • • • • • •
otoˇcen´ı doprava / doleva otoˇcen´ı doprava / doleva otoˇcen´ı doprava / doleva otoˇcen´ı doprava / doleva ch˚ uze dopˇredu 50cm ch˚ uze dopˇredu 10cm ch˚ uze dopˇredu 1cm
o o o o
u ´hel u ´hel u ´hel u ´hel
60◦ 40◦ 10◦ 1◦
K vytvoˇren´ı .motion soubor˚ u s nadefinovan´ ymi pohyby jsem vytvoˇril script v jazyce Python, kter´ y lze pouˇz´ıt v aplikaci Choregraphe. Script kaˇzd´ ych 40ms zjist´ı od NaoQi, kter´e bˇeˇz´ı virtu´alnˇe v pozad´ı Choregraphe, polohy kloub˚ u a zap´ıˇse je do souboru ve form´atu, kter´ y pouˇz´ıv´a simul´ator Webots. I zde doch´az´ı k chybˇe kv˚ uli ˇspatn´e synchronizaci. Opˇet mohu ale vyuˇz´ıt funkci setWalkTargetVelocity a nastavit niˇzˇs´ı rychlost ch˚ uze. Oproti ˇreˇsen´ı, kdy tuto funkci pouˇst´ım pˇr´ımo, m´a tento pˇr´ıstup v´ yhodu v tom, ˇze naˇcten´ı pohybov´e sekvence do souboru lze prov´adˇet opakovanˇe pˇri nezat´ıˇzen´em procesoru a ponechat si nejlepˇs´ı v´ ysledek, kter´ y bude pak v praxi vˇzdy stejn´ y. Vytvoˇril jsem funkci walkToSimulation, kter´a vyuˇz´ıv´a sd´ılenou pamˇet’ k tomu, aby pˇredala kontroleru naoqi for webots souˇradnice, kam m´a robot doj´ıt. D´ale jsem musel upravit naoqi for webots, kam jsem pˇridal funkci, jeˇz ˇcte sd´ılenou pamˇet’ a ˇcek´a na pˇr´ıkaz. Jakmile jej dostane, spust´ı mnou pˇripraven´e pˇr´ısluˇsn´e pohybov´e sekvence ze soubor˚ u .motion. Vu ´loze Stopovan´a jsem nakonec pouˇzil pˇri pr´aci se simul´atorem funkci walkTo2, jej´ıˇz pˇresnost je pro potˇreby u ´lohy dostateˇcn´a. Pˇri pr´aci se skuteˇcn´ ym robotem jsem vyuˇzil standardn´ı funkci walkTo.
3.5. Zhodnocen´ı dosaˇ zen´ ych v´ ysledk˚ u Na tomto m´ıstˇe uvedu, jak´ ych v´ ysledk˚ u jsem dos´ahl pˇri testov´an´ı u ´lohy. D˚ uleˇzit´a je zejm´ena pˇresnost detekce znaˇcek a schopnost robota trasu bezpeˇcnˇe proj´ıt. Shrnu tak´e pˇr´ınos a pouˇzitelnost simul´atoru bˇehem pr´ace na implementaci u ´lohy. 22
3.5. Zhodnocen´ı dosaˇzen´ ych v´ ysledk˚ u Simul´ator umoˇzn ˇuje nat´aˇcet videa pˇr´ımo ve virtu´aln´ım svˇetˇe, kde prob´ıh´a simulace. Natoˇcil jsem tˇri videa, ve kter´ ych robot proch´az´ı tˇri r˚ uzn´a bludiˇstˇe. Dle m´eho n´azoru tato videa nejl´epe ilustruj´ı, jak u ´loha funguje a jak´e pˇresnosti bylo dosaˇzeno. Je moˇzn´e vidˇet i situaci, kdy dojde k desynchronizaci komunikace simul´atoru s kontrolerem NaoQi, coˇz je prov´azeno nekontrolovan´ ymi pohyby robota. Video obsahuje i okno s pohledem robota, takˇze je moˇzn´e sldovat, kam se pr´avˇe d´ıv´a. Videa jsou uloˇzena na pˇriloˇzen´em DVD.
3.5.1. Pˇresnost detekce znaˇ cek V´ ypoˇcet relativn´ı polohy znaˇcky vzhledem k pozici robota nen´ı pˇri pouˇzit´ı v´ yˇse popsan´eho postupu pˇriliˇs pˇresn´ y. Nepˇresnost roste se vzd´alenost´ı robota od znaˇcky, k ˇcemuˇz doch´az´ı ze dvou d˚ uvod˚ u: 1. Z principu vˇeci plyne, ˇze pˇri vˇetˇs´ı vzd´alenosti zp˚ usob´ı chyba v detekci bod˚ u v obraze vˇetˇs´ı chybu pˇri v´ ypoˇctu polohy znaˇcky. ˇ ım je znaˇcka d´ale od robota, t´ım vˇetˇs´ı je u 2. C´ ´hel, pod kter´ ym kamera robota znaˇcku sn´ım´a. V tomto pˇr´ıpadˇe tato pˇr´ım´a u ´mˇera mezi vzd´alenost´ı znaˇcky a chybou jej´ı detekce ˇ pˇr´ıliˇs nevad´ı. Reˇsen´ım m˚ uˇze b´ yt bud’ sestaven´ı cesty, na kter´e znaˇcky leˇz´ı bl´ızko u sebe, nebo vyuˇzit´ı opˇetovn´e detekce znaˇcky. Pokud by byla znaˇcka detekov´ana ve vˇetˇs´ı vzd´alenosti, neˇz zvolen´ y pr´ah, robot by byl vysl´an pouze do poloviny cesty a zde by provedl opˇetovnou detekci. Takto by bylo moˇzn´e postupovat rekurzivnˇe. V tabulce 3.1 uv´ad´ım mˇeˇren´ı chyby pˇri detekci znaˇcky. Z v´ ysledk˚ u plyne pr˚ umˇern´a relativn´ı chyba detekce polohy znaˇcky 2,83 %. K velk´emu zlomu ve velikosti absolutn´ı chyby doch´az´ı u vzd´alenosti 1,5 m, coˇz naznaˇcuje, ˇze tato hodnata by byla vhodn´a jako pr´ah pˇri opakovan´e detekci. Dosaˇzen´a pˇresnost je pro tuto u ´lohu dostaˇcuj´ıc´ı. Vznikl´a chyba se totiˇz nikde nekumuluje, protoˇze pˇri detekci znaˇcky se vˇzdy poˇc´ıt´a relativn´ı vzd´alenost vzhledem k pozici robota. Tabulka 3.1. Srovn´ an´ı skuteˇcn´ ych a namˇeˇren´ ych vzd´alenost´ı markeru od robota bˇehem testov´ an´ı pˇresnosti algoritmu. ˇ ıslo mˇ C´ eˇ ren´ı xreal [m] yreal [m] distreal [m] xmeasure [m] ymeasure [m] distmeasure [m] chybaabs [m] chybarel [%]
1. 0,0386 0,6030 0,6043 0,0391 0,6022 0,6035 0,0008 0,132
2. 0,1151 0,7536 0,7624 0,1201 0,7576 0,7671 0,0047 0,616
3. 0,3267 0,8950 0,9528 0,2936 0,8004 0,9394 0,0134 1,406
4. -0,2618 1,0981 1,1289 -0,2583 1,0797 1,1101 0,0188 1,665
5. 0,1377 1,2041 1,2119 0,1441 1,1683 1,1772 0,0347 2,863
6. 0,0558 1,3809 1,3821 0,0575 1,3061 1,3074 0,0747 5,405
7. -0,3164 1,4138 1,4488 -0,3133 1,3767 1,4119 0,0369 2,547
8. 0,2672 1,4452 1,4697 0,2714 1,3804 1,4068 0,0629 4,280
9. 0,0538 1,8856 1,8863 0,0555 1,7616 1,7622 0,1241 6,580
3.5.2. Hodnocen´ı simul´ atoru Tato jednoduch´a u ´loha odhalila hned nˇekolik probl´em˚ u, kter´ ym je v´ yvoj´aˇr obsluˇzn´e aplikace vystaven bˇehem pr´ace se simul´atorem Webots. Prvn´ım z nich je 23
´ 3. Uloha 1 - Stopovan´a pomal´ y pˇrenos obrazu, kter´ y se mi podaˇrilo u ´spˇeˇsnˇe vyˇreˇsit. Druh´ ym probl´emem je nepˇresnost v ch˚ uzi robota. Pˇri vyuˇz´ıv´an´ı vestavˇen´ ych funkc´ı kotroleru NaoQi m˚ uˇze b´ yt chyba velik´a a nahodil´a. V pˇr´ıpadˇe pouˇz´ıv´an´ı m´e funkce walkTo2 je chyba st´ale nahodil´a, ale znatelnˇe menˇs´ı. Pˇri pouˇzit´ı funkce walkToSimulation je chyba d´ana nejmenˇs´ım moˇzn´ ym u ´hlem natoˇcen´ı a nejmenˇs´ı moˇznou vzd´alenost´ı, kterou m˚ uˇze robot urazit. Ani v jednom pˇr´ıpadˇe nen´ı moˇzn´e dos´ahnout 100% pˇresnosti, coˇz je ale podobn´e jako ve skuteˇcnosti. Jedn´a se o robota, kter´ y se pohybuje po nohou. S t´ım souvis´ı, ˇze bˇehem jeho ch˚ uze nejsou poloha a u ´hel natoˇcen´ı vzhledem ke svˇetov´ ym souˇradnic´ım 100 % pˇresn´e, coˇz m˚ uˇze b´ yt zp˚ usobeno napˇr. nevhodn´ ym povrchem, po kter´em se robot pohybuje. Po vyˇreˇsen´ı zm´ınˇen´ ych probl´em˚ u, kter´e simul´ator pˇrinesl, jsem byl schopen pomˇernˇe snadno odladit algoritmus tak, aby pracoval spr´avnˇe, aniˇz bych mˇel k dispozici skuteˇcn´eho robota. Po dokonˇcen´ı u ´lohy jsem otestoval obsluˇznou aplikaci na skuteˇcn´em robotovi. Staˇcilo ji pˇrekompilovat s nastaven´ım pro skuteˇcn´eho robota, vytisknout si obr´azky znaˇcek ve spr´avn´e velikosti a sestavit trasu. Skuteˇcn´ y robot proch´azel trasu u ´plnˇe stejnˇe jako robot v simul´atoru. Tato u ´loha tedy ukazuje, ˇze simul´ator Webots je vhodn´ y k ladˇen´ı takov´ ychto aplikac´ı.
24
´ 4. Uloha 2 - Bludiˇstˇ e C´ılem t´eto u ´lohy je navrhnout, implementovat a v simul´atoru Webots odzkouˇset obsluˇznou aplikaci robota Nao, kter´a by umoˇzn ˇovala mapov´an´ı nezn´am´eho prostˇred´ı, jeˇz by mˇelo podobu bludiˇstˇe, v nˇemˇz by se nach´azely zn´am´e objekty. ´ Ukolem robota by bylo detekovat polohu objekt˚ u a urˇcit svou pozici v bludiˇsti. Robot by mˇel b´ yt schopen vyuˇz´ıt vytvoˇrenou mapu prostˇred´ı k nalezen´ı nejkratˇs´ı cesty z m´ısta A do m´ısta B. Obsluˇzn´a aplikace by mˇela b´ yt schopna vizualizovat mapu a proces mapov´an´ı. ´ Uloha m´a n´asleduj´ıc´ı pˇr´ınos: • Otestuje do jak´e m´ıry dok´aˇze simul´ator pomoci pˇri ladˇen´ı sloˇzitˇejˇs´ı aplikace • Rozˇs´ıˇr´ı moˇznosti navigace robota
Obr´ azek 4.1. Sn´ımek bludiˇstˇe pro testov´an´ı a demonstraci aplikace
4.1. Podoba bludiˇstˇ e Pro jednoduchost jsem k testov´an´ı a demonstraci u ´lohy vytvoˇril bludiˇstˇe, ve kter´em se objevuje jedin´ y typ objektu, j´ımˇz je dˇrevˇen´a bedna o hranˇe 0,4 m. Tˇechto krabic je v bludiˇsti deset a kaˇzd´a je oznaˇcena svou jedineˇcnou znaˇckou, kterou je schopen detekovat ARToolKit (stejn´a sada znaˇcek jako v u ´loze Stopovan´a). Velikost znaˇcky jsem zvolil 12 cm, coˇz je kompromis mezi t´ım, aby byla znaˇcka dostateˇcnˇe velk´a pro kvalitn´ı detekci a dostateˇcnˇe mal´a, aby se veˇsla do 25
´ 4. Uloha 2 - Bludiˇstˇe z´abˇeru kamery, kdyˇz se robot pˇribl´ıˇz´ı k bednˇe na velmi malou vzd´alenost. Znaˇcka je um´ıstˇena uprostˇred kaˇzd´e ze ˇctyˇr boˇcn´ıch stˇen ve v´ yˇsce 0,3 m. Bludiˇstˇe je dostateˇcnˇe velk´e, aby robot bˇehem mapov´an´ı nenarazil na jeho konec. Nen´ı c´ılem hranici bludiˇstˇe mapovat, takˇze jsem bludiˇstˇe nechal t´emˇeˇr neohraniˇceno. Pokud by byla potˇreba hranici bludiˇstˇe detekovat, je moˇzn´e ho napˇr. obehnat dostateˇcnˇe vysokou zd´ı, na kter´e by byly um´ıstˇeny znaˇcky pˇr´ısluˇsej´ıc´ı zdi. Dalˇs´ı moˇznost´ı by bylo vyuˇz´ıt sonaru. Podoba bludiˇstˇe je na obr´azku 4.1.
4.2. Struktura aplikace a pouˇ zit´ e knihovny K vizualizaci mapy jsem se rozhodl pouˇz´ıt C++ knihovnu Qt [13], kter´a je jednou z nejpopul´arnˇejˇs´ıch knihoven pro v´ yvoj aplikac´ı s grafick´ ym uˇzivatelsk´ ym rozhran´ım. Z´aroveˇ n je souˇc´ast´ı Aldebaran SDK, takˇze ji ten, kdo pracuje s robotem Nao, nemus´ı dodateˇcnˇe instalovat. Z´akladem Qt aplikace, kterou jsem vytvoˇril, je hlavn´ı okno obsahuj´ıc´ı menu, pomoc´ı kter´eho je moˇzn´e celou aplikaci ovl´adat. Je v nˇem tak´e vykreslov´ana mapa. Hlavn´ı okno je moˇzn´e vidˇet na obr´azku 4.2. Pˇripojov´an´ı k robotovi prob´ıh´a pˇres formul´aˇr (viz obr´azek 4.3), kde je moˇzn´e nastavit IP adresu a port, na kter´em robot poslouch´a. Souˇc´ast´ı formul´aˇre je tak´e nastaven´ı m´od˚ u, ve kter´ ych bude aplikace pracovat: • Real Robot Pokud je zatrhnuto toto nastaven´ı, aplikace by se mˇela pˇripojit ke skuteˇcn´emu robotovi a podle toho vyuˇz´ıvat odpov´ıdaj´ıc´ı funkce, coˇz se t´ yk´a zejm´ena naˇc´ıt´an´ı obrazu z kamery a ch˚ uze. • Simulation Pokud je zatrhnuto toto nastaven´ı, aplikace pˇredpokl´ad´a, ˇze se pˇripojuje k simul´atoru. Opˇet budou pouˇz´ıv´any odpov´ıdaj´ıc´ı funkce. • SLAM Zatrhnut´ım tohoto parametru doc´ıl´ıme toho, ˇze aplikace bude pracovat v m´odu, kdy pro urˇcov´an´ı pˇresn´e polohy robota bude pouˇz´ıvat syst´em SLAM (soubˇeˇzn´a lokalizace a mapov´an´ı). Tento syst´em je detailnˇe pops´an v kapitole 4.4. • Exact Odometry Kdyˇz vybereme tento m´od, nebude pouˇz´ıv´an syst´em SLAM. M´ısto toho bude aplikace zcela vˇeˇrit odometrick´ ym1 u ´daj˚ um. Pokud je aplikace pˇripojena k simul´atoru, pˇresn´a poloha robota je naˇc´ıt´ana pˇres sd´ılenou pamˇet’. Tento m´od je dobr´ y pro testov´an´ı samotn´e detekce pˇrek´aˇzek. V praxi je moˇzn´e lokalizaci nahradit doplˇ nuj´ıc´ım syst´emem (napˇr. pouˇzit´ı extern´ı kamery [19] nebo lokalizace na z´akladˇe rekonstrukce mnoˇziny ˇr´ıdk´ ych 3D bod˚ u [17]). Tˇr´ıda mainWindow pˇredstavuj´ıc´ı hlavn´ı okno je uloˇzena v souboru mainWindow.h resp. mainWindow.cpp. Bˇehem pˇripojov´an´ı k robotu jsou vytvoˇreny instance dalˇs´ıch dvou tˇr´ıd, kter´e aplikace vyuˇz´ıv´a. Prvn´ı z nich je tˇr´ıda Robot, kter´a je uloˇzena v souboru robot.h resp. robot.cpp a kter´a funguje jako interface 1
Odometrie je postup, pˇri kter´em se odhaduje pozice robota podle dat z pohybov´ ych senzor˚ u.
26
4.3. Souˇradn´ y syst´em a pˇresn´a detekce polohy pˇrek´aˇzek pro vol´an´ı funkc´ı NaoQi. D´ale obsahuje veˇsker´e funkce pro detekci pˇrek´aˇzek a ovl´ad´an´ı robota. Druhou tˇr´ıdou je tˇr´ıda Mapping um´ıstˇen´a v souboru mapping.h resp. mapping.cpp. Jej´ım c´ılem je uchov´avat informace o poloze robota a vˇsech detekovan´ ych pˇrek´aˇzk´ach. Souˇcasnˇe nab´ız´ı funkce pro vykreslovan´ı mapy a hled´an´ı nejkratˇs´ı cesty. K hled´an´ı nejkratˇs´ı cesty jsem pouˇzil open-source knihovnu VisiLibity [20] vyuˇz´ıvaj´ıc´ı metodu grafu viditelnosti [18, str´anky 12-14 ].
Obr´ azek 4.2. Hlavn´ı okno aplikace obsahuj´ıc´ı menu a vizualizaci mapy
Obr´ azek 4.3. Formul´ aˇr k nastaven´ı parametr˚ u pˇri pˇripojov´an´ı aplikace k robotu
4.3. Souˇradn´ y syst´ em a pˇresn´ a detekce polohy pˇrek´ aˇ zek Souˇradn´ y syst´em, v nˇemˇz bude bˇehem mapov´an´ı mapa vytv´aˇrena, je urˇcen v´ ychoz´ı polohou robota pˇri spuˇstˇen´ı aplikace. Robot tak zpoˇca´tku stoj´ı ve stˇredu souˇradn´e 27
´ 4. Uloha 2 - Bludiˇstˇe soustavy a hled´ı ve smˇeru osy y. Pˇresn´a detekce polohy bedny v souˇradn´em syst´emu mapy se skl´ad´a z nˇekolika krok˚ u. Veˇsker´e funkce pouˇzit´e bˇehem detekce jsou souˇc´ast´ı tˇr´ıdy Robot.
4.3.1. Detekce znaˇ cky pomoc´ı knihovny ARToolKit Detekce je takˇrka totoˇzn´a s detekc´ı znaˇcky v u ´loze Stopovan´a. Rozd´ıl je pˇredevˇs´ım v tom, ˇze nehled´ame pouze znaˇcku, kter´a je na ˇradˇe, ale veˇsker´e znaˇcky maj´ıc´ı vˇerohodnost vyˇsˇs´ı neˇz pr´ah, kter´ y jsem pro tuto u ´lohu experiment´alnˇe zvolil 0,5. Dalˇs´ı zmˇeny souvis´ı s rozd´ıln´ ym um´ıstˇen´ım znaˇcek a vyˇsˇs´ımi n´aroky na pˇresnost detekce. Funkce vyuˇz´ıvan´e knihovnou ARToolKit k v´ ypoˇctu pozice rohov´ ych bod˚ u znaˇcky ˇ dosahuj´ı pˇresnosti na jeden pixel. Casto se ale m˚ uˇze st´at, ˇze odchylka bude jeˇstˇe vˇetˇs´ı. Z tˇechto d˚ uvod˚ u jsem se rozhodl zpˇresnit detekci rohov´ ych bod˚ u znaˇcky pomoc´ı funkce cvFindCornerSubPix z knihovny OpenCV. Tato funkce je schopn´a vypoˇc´ıtat polohu rohov´ ych bod˚ u se subpixelovou pˇresnost´ı. Nutn´e je pouze na zaˇc´atku zadat odhad, kter´ ym jsou v m´em pˇr´ıpadˇe pozice urˇcen´e knihovnou ARToolKit. Funkce vˇsak nedok´aˇze upˇresnit pozici stˇredu znaˇcky, jelikoˇz se nejedn´a o rohov´ y bod. Protoˇze je ale znaˇcka ˇctvercov´a, mohu jeho polohu urˇcit jako pr˚ umˇer pozic vˇsech rohov´ ych bod˚ u. Zm´ınˇen´e dodateˇcn´e v´ ypoˇcty pomohly v´ yraznˇe zv´ yˇsit pˇresnost detekce znaˇcky. Kv˚ uli upevnˇen´ı znaˇcek na stˇen´ach beden m˚ uˇze pˇri urˇcit´em rozm´ıstˇen´ı doj´ıt k tomu, ˇze znaˇcka bude leˇzet ve st´ınu. V takov´em pˇr´ıpadˇe by ji ARToolKit s defaultnˇe vyuˇz´ıvan´ ym prahem jasu (defaultn´ı hodnota je 100) mohl pˇrehl´ednout. K detekci ve st´ınu je tedy nutn´e vyuˇz´ıt niˇzˇs´ı pr´ah. Ten se ale zase nehod´ı pro detekci na svˇetle. Byl jsem tedy nucen zav´est dvoj´ı detekci, s n´ızk´ ym a vysok´ ym prahem, a pot´e oba v´ ysledky slouˇcit. Pokud je znaˇcka nalezena pomoc´ı obou prah˚ u, zachov´av´am pouze hodnoty z´ıskan´e pˇri pouˇzit´ı s vyˇsˇs´ım prahem. Jako v´ ysledek by bylo moˇzn´e pouˇz´ıt tak´e pr˚ umˇer obou hodnot, ale tento postup je rychlejˇs´ı, pˇriˇcemˇz v´ ysledek je takˇrka stejn´ y. Hodnoty obou prah˚ u je moˇzn´e mˇenit v nastaven´ı aplikace pomoc´ı promˇenn´ ych AR THRESHOLD resp. AR THRESHOLD DARK.
4.3.2. V´ ypoˇ cet projekˇ cn´ı matice pomoc´ı algoritmu P3P Pro potˇreby t´eto u ´lohy je jiˇz tˇreba vypoˇc´ıtat projekˇcn´ı matici. Princip je stejn´ y jako v u ´loze Stopovan´a. Algoritmus, kter´ y neskonˇc´ı v´ ypoˇctem vzd´alenost´ı k bod˚ um znaˇcky, ale dopoˇc´ıt´a nejlepˇs´ı projekˇcn´ı matici, je obsaˇzen ve funkci p3pP um´ıstˇen´e v souboru p3pdistance.h resp. p3pdistance.cpp. Algoritmus P3P ke sv´ ym v´ ypoˇct˚ um potˇrebuje kalibraˇcn´ı matici kamery. Na n´ı velmi z´avis´ı kvalita z´ıskan´e projekˇcn´ı matice. Pˇri pr´aci na u ´loze Stopovan´a jsem poˇc´ıtal kalibraˇcn´ı matici pomoc´ı trojice navz´ajem kolm´ ych u ´bˇeˇzn´ık˚ u, kter´e byly d´any krychl´ı, jej´ıˇz obraz jsem poˇr´ıdil pˇr´ımo v simul´atoru Webots. Tato metoda je velmi jednoduch´a a nab´ız´ı pr˚ umˇernˇe kvalitn´ı v´ ysledek. K jej´ımu vysvˇetlen´ı viz [23, str´anka 24]. Jej´ım u ´skal´ım je obt´ıˇznost urˇcen´ı pˇresn´e pozice roh˚ u krychle v obraze. Byl jsem tedy nucen pouˇz´ıt ke kalibraci nam´ısto krychle ˇsachovnici, kter´a nab´ız´ı v´ıce bod˚ u. D´ıky tomu je poloha u ´bˇeˇzn´ık˚ u vypoˇc´ıt´ana na z´akladˇe protnut´ı v´ıce 28
4.3. Souˇradn´ y syst´em a pˇresn´a detekce polohy pˇrek´aˇzek pˇr´ımek a v´ ypoˇcet je pˇresnˇejˇs´ı. Pouˇzit´ım lepˇs´ı metody kalibrace kamery jsem opˇet v´ yraznˇe zv´ yˇsil pˇresnost detekce pˇrek´aˇzek.
4.3.3. V´ ypoˇ cet polohy bod˚ u znaˇ cky v souˇradn´ em syst´ emu robota (relativn´ı pozice) M´am-li k dispozici projekˇcn´ı matici, mohu vypoˇc´ıtat smˇerov´ y vektor, kter´ y m´ıˇr´ı ze stˇredu kamery do stˇredu znaˇcky. Protoˇze souˇradn´ y syst´em, v nˇemˇz byla projekˇcn´ı matice vypoˇc´ıt´ana, m´a stˇred ve stˇredu znaˇcky, mohu nastavit mˇeˇr´ıtko smˇerov´eho vektoru tak, aby ukazoval pˇr´ımo do stˇredu znaˇcky. T´ım vypoˇc´ıt´am jej´ı relativn´ı polohu v˚ uˇci stˇredu kamery. D´ıky tomu, ˇze zn´am rozmˇer znaˇcky, mohu tento v´ ypoˇcet prov´est pro jak´ ykoliv bod na znaˇcce (pro jednoduchost budu ale d´ale uv´adˇet, ˇze poˇc´ıt´am se stˇredem znaˇcky). Vyj´adˇren´ı v´ ypoˇctu matematicky (viz tak´e [23, str´anky 13-19]): P = [Q q]
(4.1)
C = −Q−1 q
(4.2)
d = −Q−1 m
(4.3)
X = C + λd
(4.4)
P je projekˇcn´ı matice skl´adaj´ıc´ı se ze submatice Q (rozmˇer 3×3) a vektoru q (P = (Q|q)). C je pozice kamery, m jsou 2D souˇradnice stˇredu znaˇcky v obraze a d smˇerov´ y vektor do stˇredu znaˇcky. X jsou 3D souˇradnice stˇredu znaˇcky (urˇcil jsem si jako 0). Pomoc´ı rovnice 4.4 tak mohu urˇcit mˇeˇr´ıtko λ, pomoc´ı nˇehoˇz jiˇz snadno z´ısk´am relativn´ı pozici stˇredu znaˇcky v˚ uˇci poloze kamery. Grafick´e vyj´adˇren´ı viz na obr´azku 4.4.
Obr´ azek 4.4. Grafick´e vyj´ adˇren´ı vztahu pozice kamery (C), projekˇcn´ı roviny (π), bodu v obraze (m), bodu v prostoru (X) a smˇerov´eho vektoru paprsku (d) (pˇrevzato z [23])
V´ yˇse popsan´ ym postupem jsem vypoˇc´ıtal relativn´ı polohu stˇredu znaˇcky v˚ uˇci kameˇre robota. D´ale je potˇreba zapoˇc´ıtat polohu kamery (natoˇcen´ı a naklopen´ı 29
´ 4. Uloha 2 - Bludiˇstˇe hlavy robota) a pˇrepoˇc´ıtat na relativn´ı pozici stˇredu znaˇcky v p˚ udorysu v˚ uˇci ˇ pozici robota. Reknˇ eme, ˇze m´am polohu stˇredu znaˇcky uloˇzenu ve vektoru p: p = λd
(4.5)
Nejprve zapoˇc´ıt´am sklopen´ı hlavy a pˇrevedu na pozici v p˚ udorysu: x = p1
(4.6)
y = cos α · p3 − sin α · p2
(4.7)
α pˇredstavuje u ´hel sklopen´ı hlavy. D´ale zb´ yv´a vz´ıt v u ´vahu natoˇcen´ı hlavy, jeˇz je pˇredstavov´ano u ´hlem β: x = x · cos β − y · sin β
(4.8)
y = x · sin β + y · cos β
(4.9)
Cel´ y v´ ypoˇcet jsem naprogramoval ve funkci computePointPosition.
4.3.4. V´ ypoˇ cet pozice rohov´ ych bod˚ u bedny (v p˚ udorysu) v souˇradn´ em syst´ emu mapy K tomu, abychom urˇcili polohu bedny, n´am staˇc´ı z´ıskat polohu dvou bod˚ u na znaˇcce. J´a jsem zvolil postup, kdy vypoˇc´ıt´am polohu lev´eho a prav´eho bodu v polovinˇe v´ yˇsky znaˇcky. Oznaˇcme je A a B. Nejprve pˇrevedu relativn´ı polohu bodu v˚ uˇci poloze robota do souˇradn´e soustavy mapy t´ım, ˇze zapoˇc´ıt´am pozici a natoˇcen´ı robota v mapˇe. Pot´e vytvoˇr´ım vektor spojuj´ıc´ı dva vybran´e body: s = [Ax − Bx
Ay − By ]T
(4.10)
Tento vektor normalizuji na velikost 0,14 m, coˇz odpov´ıd´a vzd´alenosti krajn´ıho bodu znaˇcky od hrany krychle. Tento vektor pot´e pˇriˇctu k bodu A, resp. odeˇctu od bodu B. T´ım z´ısk´am polohu prvn´ıch dvou vrchol˚ u ˇctverce, kter´ y bude v mapˇe pˇredstavovat nalezenou bednu. Pot´e vytvoˇr´ım kolm´ y vektor k vektoru s a normalizuji ho na velikost 0,4 m, coˇz odpov´ıd´a velikosti bedny. Kolm´ y vektor m˚ uˇze b´ yt orientov´an dvˇema smˇery. Pˇriˇcten´ım nebo odeˇcten´ım vektoru k prvn´ım dvˇema bod˚ um ˇctverce dostanu zbyl´e dva body. To, jestli m´am vektor pˇriˇc´ıst nebo odeˇc´ıst (souvis´ı s orientac´ı vektoru), z´avis´ı na vz´ajemn´e poloze robota a detekovan´e znaˇcky. Nejjednoduˇsˇs´ım zp˚ usobem, jak to zjistit, je vektor zkusit pˇriˇc´ıst. Pokud z´ıskan´ y bod leˇz´ı k robotovi bl´ıˇze neˇz bod, ze kter´eho jsme vych´azeli, mˇeli jsme odeˇc´ıtat. Neˇz je poloha pˇrek´aˇzky zpracov´av´ana d´al, otestuji, jestli m´a tvar ˇctverce a jestli jeho hrana odpov´ıd´a spr´avn´e velikosti (je v toleranci, kterou jsem zvolil 1 cm). Pomoc´ı t´eto jednoduch´e kontroly mohu ignorovat ˇspatn´e detekce. Jedna bedna m´a na vˇsech sv´ ych stˇen´ach um´ıstˇenu stejnou znaˇcku. V jednom obr´azku je tedy moˇzn´e detekovat jednu znaˇcku v´ıcekr´at, k ˇcemuˇz doch´az´ı, pokud je bedna natoˇcena k robotovi hranou. V takov´em pˇr´ıpadˇe je pozice bedny poˇc´ıt´ana 30
4.3. Souˇradn´ y syst´em a pˇresn´a detekce polohy pˇrek´aˇzek dvakr´at a v´ ysledek pr˚ umˇerov´an. Nen´ı pˇri tom nutn´e zjiˇst’ovat, kterou stˇenu krychle robot pr´avˇe vid´ı, protoˇze v´ ypoˇcet vrchol˚ u polygonu, kter´ y v mapˇe pˇredstavuje pˇrek´aˇzku, je na tom nez´avisl´ y. V´ yˇse popsan´ y algoritmus jsem implementoval ve funkci computePositionOfObstacle.
4.3.5. Zpracov´ an´ı nov´ e informace o poloze pˇrek´ aˇ zky Pˇrek´aˇzky ve sv´e aplikaci ukl´ad´am v podobˇe polygonu. Jsou tedy urˇceny v´ yˇctem vrchol˚ u a jsou uloˇzeny ve struktuˇre Polygon knihovny Visilibity, coˇz umoˇzn ˇuje je pozdˇeji vyuˇz´ıt pro v´ ypoˇcet nejkratˇs´ı cesty v takov´e podobˇe, v jak´e jsou. Vrcholy jsou ˇrazeny proti smˇeru hodinov´ ych ruˇciˇcek (CCW) a prvn´ım vrcholem je vˇzdy ten nejspodnˇejˇs´ı, nejv´ıce vpravo. Protoˇze dopˇredu v´ım, kolik beden se m˚ uˇze ve sc´enˇe nach´azet resp. kolik ˇsablon znaˇcek je naˇcteno v pamˇeti, jsou polygony uloˇzeny v poli. Pˇri opˇetovn´e detekci je pozice bedny pouze upravena. Aplikace nav´ıc ukl´ad´a veˇsker´e detekovan´e bedny do STL vektoru, coˇz slouˇz´ı ˇcistˇe pro u ´ˇcely ladˇen´ı aplikace. To, jak´ ym zp˚ usobem je s novˇe detekovanou bednou nakl´ad´ano, z´avis´ı na m´odu, ve kter´em aplikace bˇeˇz´ı. Exact Odometry Pokud je konkr´etn´ı pˇrek´aˇzka detekov´ana poprv´e, je jej´ı poloha uloˇzena do pole. Souˇcasnˇe je vypoˇc´ıt´ana a uloˇzena relativn´ı pˇresnost detekce. Je totiˇz t´ım vyˇsˇs´ı, ˇc´ım niˇzˇs´ı je vzd´alenost a u ´hel, pod kter´ ym byla identifikuj´ıc´ı znaˇcka pozorov´ana. Relativn´ı pˇresnost tedy urˇcuji pomoc´ı dvou promˇenn´ ych. Prvn´ı z nich je vztaˇzena k vzd´alenosti detekovan´e pˇrak´aˇzky od robota: arange =
1 range
(4.11)
Druh´a je vztaˇzena k u ´hlu, pod kter´ ym byla pozorov´ana znaˇcka, pomoc´ı kter´e byla pozice pˇrek´aˇzky vypoˇc´ıt´ana: abearing
α = π − 1
(4.12)
2
Pokud jde o opˇetovnou detekci, doch´az´ı zde k aktualizaci pozice pomoc´ı pr˚ umˇeru p˚ uvodn´ı a novˇe z´ıskan´e polohy pˇrek´aˇzky. Bˇehem v´ ypoˇctu je nav´ıc zapojeno v´ahov´an´ı zaloˇzen´e na relativn´ı pˇresnosti detekce. Protoˇze m´am relativn´ı pˇresnost vyj´adˇrenu dvˇema nesluˇciteln´ ymi parametry, je tˇreba pr˚ umˇerov´an´ı prov´est dvakr´at a pak pr˚ umˇerovat v´ ysledek. To popisuje n´asleduj´ıc´ı vzorec pro v´ ypoˇcet x-ov´e souˇradnice jednoho bodu pˇrek´aˇzky jako pr˚ umˇeru dvou souˇradnic x1 a x2 :
x=
(x1 arange1 +x2 arange2 ) (arange1 +arange2 )
+
(x1 abearing1 +x2 abearing2 ) (abearing1 +abearing2 )
2
(4.13) 31
´ 4. Uloha 2 - Bludiˇstˇe D´ale je nutn´e aktualizovat i relativn´ı pˇresnost. Aktualizace se pro obˇe vyj´adˇren´ı prov´ad´ı shodnˇe podle vzorce: a=
a21 + a22 a1 + a2
(4.14)
SLAM V pˇr´ıpadˇe, ˇze aplikace vyuˇz´ıv´a syst´em SLAM, je pozice pˇrek´aˇzky uloˇzena a na jej´ı zpracov´an´ı se poˇck´a, dokud nebude ukonˇceno rozhl´ıˇzen´ı a nebudou detekov´any vˇsechny pˇrek´aˇzky. Pˇri bˇehu SLAM algoritmu jsou pozice pˇrek´aˇzek a pozice robota aktualizov´any tak, aby pozice pˇrek´aˇzek co nejv´ıce odpov´ıdaly pozic´ım v minul´em kroku a pozice robota co nejv´ıce odpov´ıdala pˇredpokl´adan´e pozici. Syst´em SLAM je detailnˇe pops´an v kapitole 4.4.
4.4. SLAM Jak jiˇz bylo ˇreˇceno, syst´em SLAM je pouˇz´ıv´an k soubˇeˇzn´emu mapov´an´ı a lokalizaci robota bˇehem pr˚ uzkumu nezn´am´eho prostˇred´ı. Existuje v´ıcero pˇr´ıstup˚ u, jak tento probl´em ˇreˇsit. Ja jsem zvolil velmi rozˇs´ıˇren´ y a standardnˇe vyuˇz´ıvan´ y syst´em zaloˇzen´ y na EKF (Extended Kalman Filter), tzv. EKF SLAM. Jedn´a se o iterativn´ı metodu, kter´a pracuje ve tˇrech kroc´ıch: 1. Aktualizace stavu pomoc´ı odometrick´ ych dat (posunut´ı robota) 2. Aktualizace stavu pomoc´ı znovu detekovan´ ych znaˇcek 3. Pˇrid´an´ı novˇe detekovan´ ych znaˇcek do syst´emu Cel´ y princip je detailnˇe pops´an v ˇcl´anc´ıch [22] a [15], ve kter´ ych syst´em pracuje se znaˇckami (feature points), kter´e jsou urˇceny pouze svou polohou a jsou vyj´adˇreny v pol´arn´ıch souˇradnic´ıch. J´a ale vyuˇz´ıv´am jako znaˇcky cel´e pˇrek´aˇzky, kter´e jsou kromˇe pozice urˇceny jeˇstˇe u ´hlem natoˇcen´ı. Prvn´ı moˇznost´ı, kterou jsem implementoval, je postupovat u ´plnˇe pˇresnˇe podle ˇcl´anku [22] a poˇc´ıtat pouze s pozic´ı stˇredu pˇrek´aˇzky. To k lokalizaci robota staˇc´ı. Bˇehem v´ ypoˇctu druh´eho kroku je upravena pozice robota. Pozdˇeji je moˇzno na z´akladˇe t´eto zmˇeny upravit i natoˇcen´ı pˇrek´aˇzek. Druhou moˇznost´ı je upravit matice, se kter´ ymi syst´em poˇc´ıt´a tak, aby byla rotace znaˇcek obsaˇzena od sam´eho zaˇc´atku. Syst´em, kter´ y jsem navrhl, nav´ıc pracuje s pozicemi znaˇcek v kart´ezsk´ ych souˇradnic´ıch mapy. Samotn´e rovnice z˚ ust´avaj´ı stejn´e, pouh´a zmˇena matic je dostaˇcuj´ıc´ı. V´ yhodou takto vytvoˇren´eho syst´emu je, ˇze pˇri hled´an´ı ˇreˇsen´ı je vyuˇzita i informace o rotaci pˇrek´aˇzky, kter´a byla v prvn´ım pˇr´ıpadˇe ignorov´ana a zapoˇc´ıt´ana aˇz pozdˇeji, mimo hlavn´ı v´ ypoˇcty syst´emu SLAM. D´ale uvedu, jakou pˇresnˇe maj´ı podobu matice rozˇs´ıˇren´eho syst´emu SLAM. Z´akladem syst´emu je stavov´ y vektor X a kovarianˇcn´ı matice P. Obˇe entity jsou t´emˇeˇr stejn´e jako v syst´emu z ˇcl´anku [22] pouze budou obsahovat nav´ıc natoˇcen´ı pˇrek´aˇzek. Stavov´ y vektor bude m´ıt tedy rozmˇer (3 + 3n) × 1 a kovarianˇcn´ı matice 32
4.4. SLAM (3+3n)×(3+3n), kde n je poˇcet znaˇcek (pˇrek´aˇzek). Kovarianˇcn´ı matice se skl´ad´a z n´asleduj´ıc´ıch submatic romˇeru 3×3: P r,r P r,1 P r,2 · · · P r,n P 1,r P 1,1 P 1,2 · · · P 1,n P 2,r P 2,1 P 2,2 · · · P 2,n P= .. .. .. .. . . . . . . . n,r n,1 n,2 n,n P P P ··· P M˚ uj syst´em dopˇredu v´ı, kolik pˇrek´aˇzek je ve sc´enˇe, takˇze stavov´ y vektor ani kovarianˇcn´ı matice v pr˚ ubˇehu mapov´an´ı nemˇen´ı svou velikost, jak je tomu v ˇcl´anku [22]. Jedna konkr´etn´ı iterace skl´adaj´ıc´ı z v´ yˇse zm´ınˇen´ ych tˇr´ı krok˚ u je spuˇstˇena pokaˇzd´e, kdyˇz se robot pˇresune z jednoho m´ısta na druh´e a rozhl´edne se. Bˇehem jedn´e iterace jsou upraveny pozice detekovan´ ych znaˇcek a pozice robota (stavov´ y vektor) a kovarianˇcn´ı matice. Jednotliv´e kroky budou detailnˇeji pops´any d´ale.
4.4.1. Aktualizace stavu pomoc´ı odometrick´ ych dat V tomto kroku je nejprve zmˇenˇen stavov´ y vektor, do kter´eho se uloˇz´ı aktu´aln´ı pozice robota. Oznaˇcme pozici robota tˇremi promˇenn´ ymi x, y a α, kter´e pˇredstavuj´ı souˇradnice a u ´hel natoˇcen´ı. Promˇenn´e ∆x, ∆y a ∆α pak budou reprezentovat zmˇenu od minul´e iterace. Jako aktu´aln´ı pozici pouˇz´ıv´am jednoduˇse pozici, kam mˇel robot doj´ıt. Jde pouze o pˇreps´an´ı prvn´ıch tˇr´ı prvk˚ u vektoru X. D´ale je nezbytn´e aktualizovat kovarianˇcn´ı matici, ve kter´e se prom´ıtne pˇresnost, s jakou se robot pohybuje. K v´ ypoˇctu je tˇreba jakobi´an modelu predikce A, kter´ y m´a n´asleduj´ıc´ı tvar: 1 0 −∆y A = 0 1 ∆x 0 0 1 Zm´ınˇen´a pˇresnost pohybu robota je obsaˇzena v matici Q maj´ıc´ı n´asleduj´ıc´ı tvar: c∆x2 c∆x∆y c∆x∆α Q = c∆y∆x c∆y 2 c∆y∆α , c∆α∆x c∆α∆y c∆α2 kde c je konstanta vyjadˇruj´ıc´ı procentu´aln´ı pˇresnost, s jakou je urˇcena aktu´aln´ı pozice robota. Porovn´an´ım s pˇresnou pozic´ı robota z´ıskanou ze simul´atoru jsem dospˇel k chybˇe zhruba 10 %, tud´ıˇz jsem konstantu c nastavil na hodnotu 0,1. Tuto hodnotu lze mˇenit v nastaven´ı aplikace (v souboru settings.h). Aktualizace kovarianˇcn´ı matice pak prob´ıh´a v nekolika kroc´ıch podle n´asleduj´ıc´ıch vzorc˚ u: Pr,r = APr,r A + Q (4.15) Pr,i = APr,i
(4.16)
Pi,r = (Pr,i )T
(4.17) 33
´ 4. Uloha 2 - Bludiˇstˇe
4.4.2. Aktualizace stavu pomoc´ı znovu detekovan´ ych znaˇ cek Znovu detekovan´ ych znaˇcek m˚ uˇze b´ yt v´ıce a ˇc´ım v´ıce jich je, t´ım pˇresnˇeji m˚ uˇze b´ yt syst´em aktualizov´an. Algoritmus zpracov´av´a postupnˇe kaˇzdou zvl´aˇst’ a pˇri kaˇzd´e aktualizuje stavov´ y vektor a kovarianˇcn´ı matici, ˇc´ımˇz je pozmˇenˇena pozice robota a vˇsech novˇe detekovan´ ych znaˇcek. Oznaˇcme pozici znaˇcky z minul´e iterace jako vektor z a novˇe detekovanou pozici jako vektor h. Oba vektory maj´ı tˇri sloˇzky, kdy prvn´ı dvˇe pˇredstavuj´ı souˇradnice a tˇret´ı natoˇcen´ı pˇrek´aˇzky. K v´ ypoˇctu aktualizace je zapotˇreb´ı jakobi´an modelu pozorov´an´ı, kter´ y ˇr´ık´a, jak se zmˇen´ı poloha detekovan´e znaˇcky, pokud se zmˇen´ı poloha robota. Jakobi´an je vypoˇc´ıt´an jako parci´aln´ı derivace funkce f, kter´a vyjadˇruje relativn´ı pozici pˇrek´aˇzky v˚ uˇci poloze robota: f1 (x, y, α) (h0 − x) cos α − (h1 − y) sin α f(x, y, α) = f2 (x, y, α) = −(h0 − x) sin α + (h1 − y) cos α f3 (x, y, α) h2 − α Jakobi´an m´a pak n´asleduj´ıc´ı podobou: − cos α sin α −(h0 − x) sin α + (h1 − y) cos α H = − sin α − cos α (h0 − x) cos α + (h1 − y) sin α 0 0 −1 Tento jakobi´an je tˇreba poˇc´ıtat pro kaˇzdou znaˇcku. V tomto kroku je nav´ıc tˇreba jakobi´an rozˇs´ıˇrit, aby bylo pozdˇeji moˇzn´e udˇelat maticov´ y souˇcin s kovarianˇcn´ı matic´ı. Pro kaˇzdou znaˇcku i tak dostaneme matici: r 0 1 ··· G = H 0 0 ··· D´ale jsou k v´ ypoˇctu znaˇcky: 1 V = 0 0
i
···
−H · · ·
n 0
potˇreba matice, kter´e zapoˇc´ıtavaj´ı nepˇresnost mˇeˇren´ı pozice 0 0 1 0 , 0 1
(h0 − x)d 0 0 0 (h1 − y)d 0 . R= 0 0 b
Konstanta d reprezentuje procentu´aln´ı chybu v detekci pˇrek´aˇzky ve smyslu polohy. Konstanta b pˇredstavuje absolutn´ı chybu v detekci pˇrek´aˇzky ve smyslu orientace. Bˇehem testov´an´ı pˇresnosti detekce (viz kapitolu 4.7.1) jsem dospˇel k z´avˇeru, ˇze pr˚ umˇern´a chyba v mˇeˇren´ı polohy je 3,5% a pr˚ umˇern´a chyba v mˇeˇren´ı rotace je 1◦ . Konstanty jsem tedy nastavil na hodnotu 0,035 a 0,0174533 (v radi´anech). Lze je opˇet mˇenit v nastaven´ı aplikace. Nakonec je moˇzn´e prov´est aktualizaci syst´emu podle n´asleduj´ıc´ıch vzorc˚ u:
34
S = GPGT + VRVT
(4.18)
K = PGT S−1
(4.19)
4.5. Vizualizace mapy a hled´an´ı nejkratˇs´ı cesty
X = X + K(z − h)
(4.20)
P = P − KSK
(4.21)
4.4.3. Pˇrid´ an´ı novˇ e detekovan´ ych znaˇ cek do syst´ emu V druh´em kroku byly zpracov´any veˇsker´e znovu detekovan´e znaˇcky, ale souˇcasnˇe byla aktualizov´ana pozice robota i vˇsech znaˇcek, vˇcetnˇe tˇech detekovan´ ych poprv´e. Jejich pozici tak staˇc´ı pouze pˇreˇc´ıst ze stavov´eho vektoru X. Jeˇstˇe je ale tˇreba aktualizovat kovarianˇcn´ı matici. K tomu je opˇet tˇreba vypoˇc´ıtat jakobi´an modelu predikce vzhledem k pozici robota A a nav´ıc jeˇstˇe jakobi´an modelu predikce vzhledem k pozici znaˇcek, kter´ y m´a v naˇsem pˇr´ıpadˇe podobu jednotkov´e matice: 1 0 0 J = 0 1 0 , 0 0 1 Aktualizace kovarianˇcn´ı matice je opˇet prov´adˇena pro kaˇzdou novˇe pˇridanou znaˇcku zvl´aˇst’, a to podle n´asleduj´ıc´ıch vzorc˚ u, ve kter´ ych i pˇredstavuje index pr´avˇe pˇrid´avan´e znaˇcky a j postupnˇe index vˇsech ostatn´ıch znaˇcek: Pi,i = APr,r AT + JRJT
(4.22)
Pr,i = Pr,r AT
(4.23)
Pi,r = (Pr,i )T
(4.24)
Pi,j = A(Pr,j )T
(4.25)
Pj,i = (Pi,j )T
(4.26)
Obˇe varianty jsou v aplikaci implementov´any a to, kter´a bude vyuˇz´ıv´ana, je moˇzn´e nastavit v souboru settings.h pomoc´ı promˇenn´e SLAM MODE (hodnota 0 pˇredstavuje syst´em bez zapoˇc´ıtan´e rotace a hodnota 1 syst´em se zapoˇc´ıtanou rotac´ı). Obˇe varianty dosahuj´ı podobn´ ych v´ ysledk˚ u, avˇsak syst´em se zapoˇc´ıtanou rotac´ı trochu l´epe vyrovn´av´a chybu v rotaci pˇrek´aˇzek a robota.
4.5. Vizualizace mapy a hled´ an´ı nejkratˇs´ı cesty Mapa se skl´ad´a z poˇca´tku souˇradn´e soustavy, pozice robota a pozic vˇsech pˇrek´aˇzek. Bˇehem proch´azen´ı robota bludiˇstˇem je do mapy zakreslena i c´ılov´a pozice a vytyˇcen´a trasa, kterou m´a robot proj´ıt. Pokud je nastaven debug m´od, jsou nav´ıc vykreslena i bezpeˇcnostn´ı p´asma kolem pˇrek´aˇzek (margin). Tato bezpeˇcnostn´ı 35
´ 4. Uloha 2 - Bludiˇstˇe p´asma maj´ı stejn´ y tvar jako pˇrek´aˇzky, pouze jsou vˇetˇs´ı a urˇcuj´ı m´ısto, kam se robot nesm´ı dostat, protoˇze by byl tak bl´ızko pˇrek´aˇzce, ˇze by mohlo doj´ıt ke kolizi.
4.5.1. Zp˚ usob vykreslov´ an´ı mapy Tˇr´ıda Mapping je rozˇs´ıˇren´ım tˇr´ıdy QWidget z knihovny Qt. Jedn´a se o z´akladn´ı tˇr´ıdu pouˇz´ıvanou k vykreslov´an´ı r˚ uzn´ ych entit. V aplikaci pouˇz´ıv´am pouze vykreslov´an´ı geometrick´ ych element˚ u pomoc´ı tˇr´ıdy QPainter. Jak vykreslen´a mapa ˇ y kˇr´ıˇz pˇredstavuje poˇca´tek souˇradn´eho vypad´a, je vidˇet na obr´azku 4.5. Cern´ syst´emu. Zelen´a kruˇznice zobrazuje polohu robota, kde zelen´a ˇca´ra urˇcuje smˇer jeho natoˇcen´ı. Pokud je aplikace pˇripojena k simul´atoru a vyuˇz´ıv´a syst´em SLAM, je nav´ıc v mapˇe vykreslov´ana i skuteˇcn´a pozice robota ˇcervenˇe, coˇz uˇzivateli ukazuje, jak´e chyby se robot pˇri sv´em pohybu dopouˇst´ı. Modˇre jsou vykresleny aktu´aln´ı polohy pˇrek´aˇzek. V pˇr´ıpadˇe debug m´odu jsou vykreslov´any veˇsker´e v miˇ nulosti proveden´e detekce pˇrek´aˇzek zelenou barvou. Cervenˇ e jsou zobrazeny skuteˇcn´e pozice pˇrek´aˇzek, kter´e jsou naˇcteny ze souboru. Verze simul´atoru Webots EDU bohuˇzel nenab´ız´ı tˇr´ıdu Supervisor, kter´a by umoˇznila naˇcten´ı skuteˇcn´ ych pozic pˇrek´aˇzek pˇr´ımo ze simul´atoru. Je tedy nutn´e pozice ruˇcnˇe pˇrepsat do souboru. Soubor, ze kter´eho jsou pozice naˇc´ıt´any, jsem pojmenoval obstacleFile.txt. Pozice pˇrek´aˇzky je uˇcena souˇradnicemi stˇredu a u ´hlem natoˇcen´ı. Form´at z´apisu vypad´a n´asledovnˇe: x1 x2 x3 . . . xn
y1 y2 y3 . . . yn
α1 α2 α3 . . . αn
Po naˇcten´ı souˇradnic stˇredu a u ´hlu natoˇcen´ı jsou vypoˇc´ıt´any souˇradnice vˇsech ˇctyˇr ˇ vrchol˚ u ˇctverce, kter´ y reprezentuje pˇrek´aˇzku. Ctverec je pak uloˇzen jako polygon ˇ do pamˇeti. Cten´ı souboru je tak provedeno pouze jednou pˇri spouˇstˇen´ı aplikace. Zobrazov´an´ı skuteˇcn´e polohy pˇrek´aˇzek jde vypnout a zapnout v menu aplikace (kl´avesov´a zkratka CTRL + O). Tato moˇznost je dostupn´a pouze v pˇr´ıpadˇe, ˇze je aplikace pˇripojena k simul´atoru. D´ale je do mapy, jak jsem jiˇz v´ yˇse zm´ınil, zakreslena c´ılov´a pozice, kam se robot snaˇz´ı doj´ıt (ˇcerven´ y kˇr´ıˇzek), a vytyˇcen´a trasa. Ta je vizualizov´ana jako posloupnost r˚ uˇzov´ ych u ´seˇcek, kter´e spojuj´ı body, ´ cka pˇredstavuj´ıc´ı u kter´ ymi m´a robot proj´ıt. Useˇ ´sek, kter´ y m´a b´ yt pr´avˇe pˇrekon´an, je vˇzdy zv´ yraznˇena tuˇcnˇejˇs´ı ˇcarou. Bˇehem proch´azen´ı je tato u ´seˇcka pˇri dosaˇzen´ı koncov´eho bodu vymaz´ana. Margin kolem pˇrek´aˇzek m´a tyrkysovou barvu. Pozice vˇsech bod˚ u jsou uloˇzeny v souˇradn´em syst´emu mapy, kter´ y je vyj´adˇren v metrech. Pro u ´ˇcely vykreslen´ı je tˇreba souˇradnice v metrech pˇrev´est na souˇradnice v pixelech: xp = (range + xm − cx ) · (sw : 2 : range) 36
(4.27)
4.5. Vizualizace mapy a hled´an´ı nejkratˇs´ı cesty
Obr´ azek 4.5. Vizualizace mapy: modr´e ˇctverce ... aktu´aln´ı polohy pˇrek´aˇzek, ˇcerven´e ˇctverce ... spr´ avn´ a poloha pˇrek´aˇzek, tyrkysov´e ˇctverce ... margin kolem pˇrek´aˇzek, zelen´e ˇctverce ... historie detekc´ı pˇrek´aˇzek, ˇcern´ y kˇr´ıˇz ... poˇc´atek souˇradn´e soustavy, zelen´ a kruˇznice ... aktu´ aln´ı poloha robota, ˇcerven´ y kˇr´ıˇzek ... c´ılov´a destinace, r˚ uˇzov´e u ´seˇcky ... napl´ anovan´ a trasa robota
yp = (range + ym − cy ) · (sh : 2 : range)
(4.28)
xp resp. yp jsou x-ov´a resp. y-ov´a souˇradnice bodu v pixelech. xm resp. ym jsou xov´a resp. y-ov´a souˇradnice bodu v metrech. range pˇredstavuje ˇs´ıˇrku i v´ yˇsku (mapa je ˇctvercov´a) oblasti, kterou mapa zachycuje (v metrech). cx resp. cy jsou x-ov´a resp. y-ov´a souˇradnice stˇredu mapy. sw a sh jsou ˇs´ıˇrka a v´ yˇska kresl´ıc´ı plochy v pixelech. Aplikace umoˇzn ˇuje stisknut´ım tlaˇc´ıtka myˇsi a n´asledn´ ym taˇzen´ım posouvat mapu. Jedn´a se pouze o zmˇenu polohy stˇredu mapy cx a cy . Stejnˇe tak nab´ız´ı aplikace moˇznost zoomovat pomoc´ı koleˇcka myˇsi. V tomto pˇr´ıpadˇe jde o zmˇenu velikosti zobrazovan´e oblasti range.
4.5.2. V´ ypoˇ cet trasy pˇri proch´ azen´ı bludiˇstˇ e K v´ ypoˇctu nejkratˇs´ı cesty z m´ısta A (aktu´aln´ı poloha robota) do m´ısta B (c´ılov´a destinace) vyuˇz´ıv´am knihovnu VisiLibity. Nalezen´a nejkratˇs´ı cesta je uloˇzena jako ˇretˇezec u ´seˇcek. Funkce getNextPointOnPath vypoˇc´ıt´a nejkratˇs´ı cestu a pot´e vr´at´ı pouze druh´ y bod (prvn´ı je ten, kde robot pr´avˇe stoj´ı) na t´eto cestˇe. Robot se pot´e k tomuto bodu vyd´a. Kdyby se mapa bˇehem cesty nezmˇenila (robot vˇsak neust´ale detekuje pˇrek´aˇzky), vr´atila by funkce pˇri dalˇs´ım vol´an´ı pouze dalˇs´ı bod, 37
´ 4. Uloha 2 - Bludiˇstˇe kter´ y je na ˇradˇe. Pokud by se ovˇsem mapa zmˇenila, byl by proveden nov´ y v´ ypoˇcet nejkratˇs´ı cesty. Jak jiˇz bylo ˇreˇceno, k v´ ypoˇctu nejkratˇs´ı cesty pouˇz´ıv´a aplikace knihovnu VisiLibity vyuˇz´ıvaj´ıc´ı metodu grafu viditelnosti. Nejprve jsou vytvoˇreny spojnice vˇsech mezi sebou viditeln´ ych roh˚ u pˇrek´aˇzek, v´ ychoz´ıho a c´ılov´eho bodu. T´ım vznikne graf, ve kter´em zb´ yv´a nal´ezt nejkratˇs´ı cestu. Robot pak bude proch´azet po vybran´ ych bodech. M´ısto bod˚ u skuteˇcn´ ych prek´aˇzek je vˇsak tˇreba pouˇz´ıt body ochrann´eho p´asma. To urˇcuje, jak bl´ızko se m˚ uˇze robot pˇri sv´e cestˇe pˇribl´ıˇzit ˇ k pˇrek´aˇzk´am. C´ım bude bl´ıˇze, t´ım kratˇs´ı bude nalezen´a cesta, ale na druhou stranu vzroste riziko, ˇze robot nabour´a napˇr. z d˚ uvodu nepˇresn´e detekce. Ochrann´e p´asmo mus´ı b´ yt vˇsak aspoˇ n tak ˇsirok´e, jak ˇsirok´ y je robot resp. jak´ y je polomˇer jeho bounding boxu. J´a jsem zvolil ˇs´ıˇrku ochrann´eho p´asma 0,2 m, coˇz pˇri ˇs´ıˇrce robota 275 mm d´av´a toleranci 62,5 mm. Skuteˇcn´e pˇrek´aˇzky se kˇr´ıˇzit nemohou, ale jejich bezpeˇcnostn´ı p´asma ano, pokud je mezi dvˇema pˇrek´aˇzkami m´alo m´ısta, aby tudy robot proˇsel. V takov´em pˇr´ıpadˇe knihovna VisiLibity neum´ı vypoˇc´ıtat nejkratˇs´ı cestu. Jednou z podm´ınek je prostˇred´ı s nepˇrekr´ yvaj´ıc´ımi se polygony. Nutnou upr´avou knihovny bylo pˇrid´an´ı funkce, kter´a by pˇrekr´ yvaj´ıc´ı se polygony slouˇcila. Pojmenoval jsem ji unite overlaping polygons. Aby mohla spr´avnˇe fungovat, bylo tˇreba udˇelat jeˇstˇe dalˇs´ı drobn´e modifikace. Funkce postupnˇe testuje vˇsechny p´ary polygon˚ u, jestli se nepˇrekr´ yvaj´ı. K tomu jiˇz knihovna obsahovala funkci boundary distance, kter´a poˇc´ıt´a d´elku spoleˇcn´e hranice, jeˇz je v pˇr´ıpadˇe prol´ınaj´ıc´ıch se polygon˚ u nenulov´a. Pokud se prot´ınaj´ı, nahrad´ım je jedn´ım nov´ ym polygonem pˇredstavuj´ıc´ım jejich slouˇcen´ı. Jeho v´ ypoˇcet prov´ad´ım postupn´ ym pˇrid´av´an´ım bod˚ u, jeˇz lze popsat n´asleduj´ıc´ımi kroky: 1. Vyber bod prvn´ıho (aktu´aln´ıho) polygonu um´ıstˇen´ y nejv´ıce vlevo a pˇridej ho k v´ ysledn´emu polygonu. 2. Pokud je posledn´ı pˇridan´ y bod vrcholem aktu´aln´ıho polygonu, vyber jeho dalˇs´ı bod v CW poˇrad´ı. 3. Pokud posledn´ı pˇridan´ y bod nen´ı vrcholem aktu´aln´ıho polygonu, pak je pr˚ useˇc´ıkem dvou hran. V takov´em pˇr´ıpadˇe najdi hranu aktu´aln´ıho polygonu, na kter´e pr˚ useˇc´ık leˇz´ı, a vyber ten jej´ı vrchol, kter´ y leˇz´ı nalevo od hrany druh´eho polygonu. 4. Vytvoˇr z posledn´ıho a pr´avˇe vybran´eho bodu u ´seˇcku. 5. Otestuj, jestli se u ´seˇcka neprot´ın´a s nˇekterou z hran druh´eho polygonu. 6. Jestli ne, pˇridej koncov´ y bod u ´seˇcky k v´ ysledn´emu polygonu. 7. Pokud ano, pˇridej pr˚ useˇc´ık u ´seˇcky a prot´ınaj´ıc´ı hrany k v´ ysledn´emu polygonu. Oznaˇc druh´ y polygon jako aktu´aln´ı. 8. Prov´adˇej body 2 aˇz 7 dokud se posledn´ı pˇrid´avan´ y bod nerovn´a prvn´ımu bodu. Jakmile jsou dva polygony slouˇceny, je tˇreba prov´est testov´an´ı pˇrekryvu od zaˇca´tku. Metoda nen´ı maxim´alnˇe efektivn´ı, ale vzhledem k n´ızk´emu poˇctu polygon˚ u zcela dostaˇcuj´ıc´ı. Po slouˇcen´ı jiˇz lze bez probl´emu vypoˇc´ıtat nejkratˇs´ı cestu. 38
4.6. Ovl´ad´an´ı robota a jeho pohyb v bludiˇsti
4.6. Ovl´ ad´ an´ı robota a jeho pohyb v bludiˇsti K tomu, aby mohl robot u ´ˇcinnˇe mapovat bludiˇste, je nutn´e, aby j´ım proch´azel a rozhl´ıˇzel se. Aplikace nab´ız´ı dvˇe moˇznosti, jak robota rozpohybovat. Prvn´ı moˇznost´ı je manu´aln´ı zad´an´ı m´ısta, kam m´a robot doj´ıt. Druhou je aktivace automatick´eho mapov´an´ı, kdy robot m´ısta vyb´ır´a s´am a proch´az´ı bludiˇstˇem, dokud nen´ı automatick´e mapov´an´ı vypnuto. Rozhl´ıˇzen´ı je z´akladn´ım u ´konem, kter´ y robot neust´ale opakuje i bˇehem ch˚ uze.
4.6.1. Rozhl´ıˇ zen´ı Bˇehem rozhl´ıˇzen´ı robot nastav´ı hlavu do ˇsesti pozic, kter´e jsou kombinac´ı natoˇcen´ı a sklopen´ı do nˇekolika u ´rovn´ı. Je to obdobn´e jako pˇri rozhl´ıˇzen´ı v u ´loze Stopovan´a, pouze nen´ı nutn´e hlavu skl´anˇet do nejniˇzˇs´ı u ´rovnˇe, protoˇze znaˇcky nejsou um´ıstˇeny na zemi, ale pomˇernˇe vysoko na stˇenˇe beden. V kaˇzd´e poloze je poˇr´ızen sn´ımek, ve kter´em jsou detekov´any znaˇcky, pomoc´ı nichˇz jsou vypoˇc´ıt´any polohy beden ve sc´enˇe. Rozhl´ıˇzen´ı jsem implementoval ve funkci lookAround.
4.6.2. Zad´ an´ı c´ılov´ e lokace uˇ zivatelem Pˇr´ıkaz lze zadat pomoc´ı menu aplikace (kl´avesov´a zkratka CTRL + G) a pot´e jiˇz staˇc´ı kliknout na poˇzadovan´e m´ısto na mapˇe. Na m´ıstˇe se vykresl´ı pro kontrolu ˇcerven´ y kˇr´ıˇzek. Souˇradnice v pixelech jsou pˇrevedeny na souˇradnice na mapˇe. Robot se nejprve natoˇc´ı smˇerem, kam m´a doj´ıt, a rozhl´edne se. Pokud bˇehem rozhl´ıˇzen´ı detekuje nˇejakou pˇrek´aˇzku, dojde k aktualizaci mapy. Nyn´ı je spuˇstˇen algoritmus nalezen´ı nejkratˇs´ı cesty. Cesta se m˚ uˇze skl´adat z v´ıce bod˚ u, kter´ ymi by mˇel robot proj´ıt. V kaˇzd´em bodˇe se robot znovu rozhl´edne a pokud detekuje nˇejakou znaˇcku, pˇrepoˇc´ıt´a nejkratˇs´ı cestu. Opˇetovnou detekc´ı po uraˇzen´ı urˇcit´e vzd´alenosti totiˇz mohlo doj´ıt k upˇresnˇen´ı polohy pˇrek´aˇzek, nebo dokonce k detekci nov´ ych, dosud neobjeven´ ych. Pokud by mˇel robot nav´ıc uj´ıt pˇr´ımoˇcaˇre v´ıce neˇz jeden metr, je tato trajektorie rozdˇelena a robot zastav´ı uprostˇred, aby se rozhl´edl. Jakmile robot doraz´ı na zadan´e m´ısto, je moˇzn´e zadat nov´ y pˇr´ıkaz. Pokud je m´ısto nedosaˇziteln´e (uvnitˇr pˇrek´aˇzky nebo jej´ıho bezpeˇcnostn´ıho p´asma), je na to uˇzivatel upozornˇen ve stavov´em ˇr´adku aplikace a je vyzv´an, aby vybral jin´e m´ısto. Bˇehem ch˚ uze se m˚ uˇze mapa zmˇenit a nedosaˇzitelnost m´ısta se m˚ uˇze zjistit pozdˇeji. V tom pˇr´ıpadˇe je robot zastaven, uˇzivatel je upozornˇen zpr´avou ve stavov´em ˇr´adku a je moˇzn´e zadat dalˇs´ı pˇr´ıkaz.
4.6.3. Automatick´ e mapov´ an´ı Jakmile je automatick´e mapov´an´ı aktivov´ano (kl´avesov´a zkratka CTRL + S), robot s´am neust´ale vyb´ır´a m´ısta, na kter´a se vyd´a. Ch˚ uze na vybran´e m´ısto pak prob´ıh´a obdobnˇe jako pˇri v´ ybˇeru uˇzivatelem, pouze se robot v kaˇzd´em c´ılov´em bodˇe otoˇc´ı kolem dokola a pˇritom se rozhl´ıˇz´ı. M´ısta jsou vyb´ır´ana n´ahodnˇe. Nejprve je n´ahodnˇe vybr´ana jedna z jiˇz detekovan´ ych pˇrek´aˇzek a n´aslednˇe je opˇet n´ahodnˇe vybr´ana jedna ze ˇctyˇr jej´ıch stˇen, ke kter´e m´a robot pˇristoupit. Robot 39
´ 4. Uloha 2 - Bludiˇstˇe se tak nikdy nedostane mimo bludiˇstˇe, ale z´aroveˇ n se dostane za pˇrek´aˇzky, aby vidˇel d´ale. Aktu´alnˇe vybran´e m´ısto je vˇzdy v mapˇe zakresleno ˇcerven´ ym kˇr´ıˇzkem. Aplikace opˇet kontroluje i bˇehem ch˚ uze, jestli je m´ısto dosaˇziteln´e. Pokud nen´ı, je vybr´ano jin´e. Automatick´e mapov´an´ı je moˇzn´e kdykoliv pˇreruˇsit (kl´avesov´a zkratka CTRL + E). Robot vˇsak jeˇstˇe dojde na naposled vybran´e m´ısto.
4.7. Zhodnocen´ı dosaˇ zen´ ych v´ ysledk˚ u Pro demonstraci t´eto u ´lohy jsem tak´e natoˇcil s´erii vide´ı. Dvˇe se vˇenuj´ı detekci pˇrek´aˇzek a proch´azen´ı robota bludiˇstˇem za pouˇzit´ı pˇresn´eho naˇc´ıt´an´ı pozice robota ze simul´atoru. V nich je vidˇet pˇresnost, s jakou jsou pˇrek´aˇzky detekov´any, a funkˇcnost algoritm˚ u ovl´adaj´ıc´ıch robota a hladej´ıc´ıch nejkratˇs´ı cestu. Zbyl´a dvˇe videa zachycuj´ı pr´aci syst´emu SLAM. Ten nen´ı pˇresn´ y a na videu je vidˇet, ˇze po p´ar iterac´ıch zaˇcne doch´azet k rychl´emu rozladˇen´ı syst´emu. Protoˇze nezbytnou souˇc´ast´ı aplikace je vizualizace mapy, nenat´aˇcel jsem videa pˇr´ımo v simul´atoru. Pouˇzil jsem software sn´ımaj´ıc´ı vybranou ˇca´st obrazovky poˇc´ıtaˇce. Ve videu je tak moˇzn´e vidˇet cel´e okno simul´atoru obsahuj´ıc´ı mimo jin´e ukazatel synchronizace a hned vedle okno obsluˇzn´e aplikace zobrazuj´ıc´ı mapu. Vˇsechna videa jsou opˇet k dispozici na pˇriloˇzen´em DVD.
4.7.1. Pˇresnost mapov´ an´ı Mapov´an´ı je sloˇzitou u ´lohou, protoˇze detekce pˇrek´aˇzek nen´ı 100 % pˇresn´a a je z´avisl´a na pozici robota. Souˇcasnˇe vˇsak ani pozice robota nen´ı pˇresnˇe zn´ama. V takov´ ych pˇr´ıpadech je tˇreba vyuˇz´ıt metodu souˇcasn´e lokalizace robota a mapov´an´ı prostˇred´ı (SLAM). Syst´em vych´az´ı z detekce landmark˚ u (v m´em pˇr´ıpadˇe pˇrek´aˇzek) v minul´em kroku a z pozice, kde by se robot mˇel podle oˇcek´av´an´ı nach´azet. Syst´em pak ˇreˇs´ı v podstatˇe optimalizaˇcn´ı u ´lohu, kde se snaˇz´ı doc´ılit ˇ ım pˇresnˇejˇs´ı toho, aby se polohy pˇrek´aˇzek a pozice robota co nejm´enˇe zmˇenily. C´ bude detekce znaˇcek a odhad polohy robota, t´ım vˇetˇs´ı m´a syst´em ˇsanci na u ´spˇech. U mobiln´ıch robot˚ u, pohybuj´ıc´ıch se na kolech, je vyuˇz´ıv´ano odometrick´ ych u ´daj˚ u, ze kter´ ych je moˇzno vypoˇc´ıtat, kam se robot za posledn´ı ˇcasov´ y u ´sek posunul. I v takov´em pˇr´ıpadˇe doch´az´ı k chybˇe ve v´ ypoˇctu, protoˇze kola mohou prokluzovat apod. Robot Nao je ale humanoidn´ı robot pohybuj´ıc´ı se po nohou. Nam´ısto odometrie mus´ım spol´ehat na to, ˇze robot od minul´eho kroku doˇsel na m´ısto, kam jsem ho poslal. Chyba ale v tomto pˇr´ıpadˇe m˚ uˇze b´ yt velik´a zejm´ena z toho d˚ uvodu, ˇze uraˇzen´ y u ´sek je daleko vˇetˇs´ı. Aplikace nab´ız´ı dva m´ody mapov´an´ı. Prvn´ı z nich spol´eh´a na to, ˇze pˇresn´a pozice robota je zn´ama, coˇz je v pˇr´ıpadˇe pˇripojen´ı k simul´atoru pravda. V tomto m´odu je tedy moˇzno vˇerohodnˇe otestovat pˇresnost detekce polohy pˇrek´aˇzek. V druh´em m´odu je pak moˇzno testovat celkovou pˇresnost pˇri pouˇzit´ı syst´emu SLAM. Pˇresnost detekce polohy pˇrek´ aˇ zek Narozd´ıl od u ´lohy Stopovan´a jsou v t´eto u ´loze znaˇcky um´ıstˇeny svisle, takˇze u ´hel, pod kter´ ym se robot na znaˇcky d´ıv´a, nez´avis´ı na vzd´alenosti. Naopak je 40
4.7. Zhodnocen´ı dosaˇzen´ ych v´ ysledk˚ u tˇreba vz´ıt v potaz natoˇcen´ı bedny v˚ uˇci robotovi. Bˇehem testu jsem tedy bednu um´ıst´ıl do pˇeti r˚ uzn´ ych vzd´alenost´ı a natoˇcil ji pod pˇeti r˚ uzn´ ymi u ´hly (vˇzdy na jednu stranu, protoˇze pˇredpokl´ad´am symetrii). Porovn´aval jsem polohu detekovan´e bedny s pˇredem zn´amou polohou z´ıskanou ze simul´atoru. Chyba je vyj´adˇrena jako velikost posunut´ı stˇred˚ u (v metrech) a absolutn´ı rozd´ıl v natoˇcen´ı (ve stupn´ıch). Namˇeˇren´e v´ ysledky jsou uvedeny v tabulk´ach 4.1 a 4.2. V prvn´ı z nich je uv´adˇeno posunut´ı stˇred˚ u a nav´ıc je tu uvedena i pr˚ umˇern´a relativn´ı chyba, kter´a vych´az´ı zhruba 3,5 %. V druh´e tabulce je uv´adˇen rozd´ıl natoˇcen´ı a tak´e jeho pr˚ umˇern´e hodnoty, kter´e vych´az´ı pˇribliˇznˇe 1◦ . Jak z namˇeˇren´ ych hodnot vypl´ yv´a, chyba ve smyslu ˇspatn´e detekce stˇredu znaˇcky je pˇr´ımo u ´mˇern´a vzd´alenosti bedny. Pˇri mal´ ych vzd´alenostech pak pˇriliˇs nez´aleˇz´ı na natoˇcen´ı bedny v˚ uˇci robotu. Tento parametr zaˇc´ın´a rozhodovat aˇz pˇri detekci na vˇetˇs´ı vzd´alenost. Chyba v urˇcen´ı natoˇcen´ı bedny je naopak v´ıce nahodil´a, avˇsak tak´e je patrn´e, ˇze v pr˚ umˇeru roste se vzd´alenost´ı a natoˇcen´ım bedny v˚ uˇci robotovi. Dosaˇzen´a pˇresnost je pro zadanou u ´lohu dostaˇcuj´ıc´ı. Tabulka 4.1. V´ ysledky testov´ an´ı pˇresnosti detekce beden vyj´adˇreny jako vzd´alenost stˇredu detekovan´e bedny od spr´avn´e pozice v z´avislosti na vzd´alenosti bedny od robota a u ´hlu jej´ıho natoˇcen´ı v˚ uˇci robotovi.
´ Uhel [◦ ]
0 12 24 45 60 Rel. chyba [%]
0,7 0,0158 0,0210 0,0194 0,0174 0,0159 2,5577
Vzd´ alenost 1,0 1,5 0,0262 0,0457 0,0353 0,0212 0,0295 0,0396 0,0430 0,0416 0,0615 0,0501 3,9105 2,6431
[m] 2,0 0,0604 0,0729 0,0562 0,0690 0,1599 4,1835
2,5 0,1092 0,0952 0,0701 0,0961 0,1429 4,1082
Rel. chyba [%] 3,0625 3,0788 2,7970 3,3709 5,0938 3,4806
Tabulka 4.2. V´ ysledky testov´an´ı pˇresnosti detekce beden vyj´adˇreny jako odchylka natoˇcen´ı bedny v z´ avislosti na vzd´alenosti bedny od robota a u ´hlu jej´ıho natoˇcen´ı v˚ uˇci robotovi.
´ Uhel [◦ ]
0 12 24 45 60 Pr˚ um. chyba [◦ ]
0,7 1,0544 0,5392 0,3455 1,3671 0,8689 0,8689
Vzd´ alenost 1,0 1,5 0,2817 0,7706 0,3054 0,0292 0,0102 0,3209 1,9309 0,1851 1,9956 0,0103 0,9047 0,2632
[m] 2,0 0,6956 1,2061 1,3321 1,0657 0,4240 0,9447
2,5 1,1293 1,1293 4,4576 1,7131 0,8159 1,9062
Pr˚ um. chyba [◦ ] 0,7863 0,6990 1,2933 1,2524 0,8568 0,9776
Pˇresnost syst´ emu SLAM Je tˇeˇzk´e exaktnˇe ohodnotit pˇresnost syst´emu SLAM. Jeho u ´kolem je upravit pozice nalezen´ ych pˇrek´aˇzek a robota v z´avislosti na tom, jak byly vypoˇc´ıtany 41
´ 4. Uloha 2 - Bludiˇstˇe v minul´ ych kroc´ıch. Do jak´e m´ıry se to spr´avnˇe podaˇr´ı, z´av´ıs´ı na pˇresnosti, s jakou byly detekov´any jednotliv´e znaˇcky, a pak tak´e na tom, jak moc je robot vych´ ylen od pˇredpokl´adan´e pozice. M˚ uˇze se st´at, ˇze nˇekter´a pˇrek´aˇzka bude nalezena ˇspatnˇe. ˇ ım vˇetˇs´ı je vˇsak jejich poˇcet, t´ım menˇs´ı bude dopad jedn´e chybnˇe detekovan´e. C´ Vu ´loze Bludiˇstˇe je bohuˇzel pˇrek´aˇzek velmi m´alo, takˇze se v momentˇe, kdy dojde k vˇetˇs´ım chyb´am v detekci nˇekolika z nich, zaˇcne syst´em rozlad’ovat. D˚ uleˇzit´a je rovnˇeˇz poloha robota. Chyba v urˇcen´ı polohy robota je obvykle t´ım menˇs´ı, ˇc´ım menˇs´ı uraz´ı vzd´alenost mezi jednotliv´ ymi iteracemi syst´emu SLAM. V t´eto u ´loze je bohuˇzel tato vzd´alenost pomˇernˇe velk´a. Pro kaˇzdou iteraci je totiˇz tˇreba, aby se robot rozhl´edl, coˇz je ˇcasovˇe velmi n´aroˇcn´ yu ´kon. Z toho d˚ uvodu nelze v´ ypoˇcet prov´adˇet ˇcastˇeji. V´ ysledkem je, ˇze syst´em SLAM, jak jej vyuˇz´ıv´am, nen´ı pro u ´lohu pˇr´ıliˇs vhodn´ y. V prvn´ıch nˇekolika iterac´ıch jsou v´ ypoˇcty pomˇernˇe pˇresn´e. Je to zp˚ usobeno t´ım, ˇze pozice robota je v okamˇziku spuˇstˇen´ı algoritmu urˇcena naprosto pˇresnˇe. Na chybˇe v pozici robota velmi z´avis´ı chyba, s jakou budou nalezeny pˇrek´aˇzky. S kaˇzdou dalˇs´ı iterac´ı se syst´em pomalu rozlad’uje, protoˇze iterace nejsou spouˇstˇeny dostateˇcnˇe ˇcasto a prostˇred´ı obsahuje m´alo znaˇcek. Postupnˇe se rozlad’ov´an´ı zrychluje, aˇz zaˇcne syst´em d´avat zcela chybn´e v´ ysledky. Jak jiˇz bylo ˇreˇceno, tento jev nelze pˇresnˇe ˇc´ıselnˇe vj´adˇrit. Dle m´eho n´azoru o pˇresnosti syst´emu SLAM nejv´ıce vypov´ıdaj´ı videa, kter´a jsem natoˇcil. Zobrazuj´ı prvn´ıch nˇekolik iterac´ı (jednotliv´e iterace jsou spouˇstˇeny po rozhl´ednut´ı robota, kter´e je souˇc´ast´ı jeho ch˚ uze), ve kter´ ych je nejprve vidˇet, jak syst´em vyrovn´av´a chyby. Pozdˇeji je bohuˇzel vidˇet, jak se syst´em zaˇc´ın´a rozlad’ovat a nestaˇc´ı chyby korigovat. Videa jsou uloˇzena na pˇriloˇzen´em DVD.
4.7.2. Hodnocen´ı simul´ atoru Vu ´loze Stopovan´a byly jiˇz odhaleny z´akladn´ı probl´emy simul´atoru Webots. Bˇehem pr´ace na t´eto u ´loze jsem jiˇz na ˇz´adn´e dalˇs´ı nenarazil. Naopak, simul´ator mi poskytl znaˇcn´e v´ yhody pˇredevˇs´ım v tom, ˇze jsem si mohl velmi snadno pˇripravit sc´enu, kter´a by mi co nejl´epe pomohla u ´lohu odladit. Nejvˇetˇs´ı v´ yhodou byla bezesporu znalost pˇresn´e polohy pˇrek´aˇzek, takˇze jsem vˇzdy vˇedˇel, jak´e pˇresnosti aplikace bˇehem detekce dosahuje. Zde mi trochu sch´azela tˇr´ıda Supervisor, kter´a by mi umoˇzn ˇovala pˇristupovat ke vˇsem objekt˚ um ve sc´enˇe. S jej´ı pomoc´ı bych mohl pozici pˇrek´aˇzek naˇc´ıtat automaticky. Bez n´ı jsem musel pozice ruˇcnˇe pˇrepisovat, coˇz je pˇri ˇcast´ ych zmˇen´ach sc´eny zdlouhav´e. Dalˇs´ı v´ yhodou je, ˇze simul´ator umoˇzn ˇuje robota mˇenit (zmˇenou jeho prototypov´eho souboru). Pro u ´ˇcely testov´an´ı tak lze z´ıskat informace, kter´ ych bychom jinak nedos´ahli. J´a jsem napˇr´ıklad robota vybavil zaˇr´ızen´ım GPS, pomoc´ı nˇehoˇz jsem zjiˇst’oval jeho aktu´aln´ı pozici. Touto u ´pravou jsem se vyhnul potˇrebˇe tˇr´ıdy Supervisor ke zjiˇstˇen´ı pozice robota. Aplikaci jsem bohuˇzel nemˇel moˇznost testovat na skuteˇcn´em robotovi z d˚ uvodu nedostatku ˇcasu a toho, ˇze nem´am k dipozici bludiˇstˇe. Nicm´enˇe, aplikaci jsem naprogramoval tak, ˇze by mˇela bez probl´em˚ u pracovat i se skuteˇcn´ ym robotem. Velk´ ym rozd´ılem je, ˇze kamera simulovan´eho robota poskytuje bezchybn´e sn´ımky, kter´e nejsou zat´ıˇzeny ˇza´dn´ ym ˇsumem. V praxi by se mohlo st´at, ˇze detekce bude 42
4.7. Zhodnocen´ı dosaˇzen´ ych v´ ysledk˚ u m´enˇe pˇresn´a z d˚ uvodu m´enˇe kvalitn´ıch sn´ımk˚ u. Simul´ator bohuˇzel neposkytuje ˇza´dnou vestavˇenou funkci ke zhorˇsen´ı kvality sn´ımku. Nab´ız´ı pouze zamlˇzen´ı, pˇr´ıpadnˇe sn´ıˇzen´ı (ale i zv´ yˇsen´ı) rozliˇsen´ı. Sn´ımek je samozˇrejmˇe moˇzno zat´ıˇzit ˇsumem pozdˇeji, aˇz pˇri jeho zpracov´av´an´ı. J´a jsem zkouˇsel sn´ımek zat´ıˇzit ˇsumem z norm´aln´ıho rozdˇelen´ı se smˇerodatnou odchylkou 20. Kvalita detekce se vˇsak v´ yraznˇe nezmˇenila, proto pˇredpokl´ad´am, ˇze by aplikace mˇela spolehlivˇe pracovat i se skuteˇcn´ ym robotem. Celkovˇe byl simul´ator Webots velk´ ym pˇr´ınosem.
43
5. Shrnut´ı probl´ em˚ u se simul´ atorem Webots Bˇehem pr´ace na u ´loh´ach jsem odhalil nˇekolik probl´em˚ u, kter´ ym mus´ı v´ yvoj´aˇr bˇehem v´ yvoje aplikac´ı pro robota Nao pomoc´ı simul´atoru Webots ˇcelit. Probl´emy a jejich ˇreˇsen´ı jsou detailnˇe pops´any v kapitol´ach zab´ yvaj´ıc´ıch se ˇreˇsen´ım u ´loh. Pro pˇrehlednost zde uvedu seznam tˇechto probl´em˚ u, jejich kr´atkou charakteristiku a zp˚ usob ˇreˇsen´ı. D´ale zm´ın´ım i probl´emy drobnˇejˇs´ıho r´azu nebo pouze dojmy z pr´ace se simul´atorem, kter´e nebyly v´ yˇse zm´ınˇeny, protoˇze se pˇr´ımo net´ ykaly u ´loh.
5.1. Probl´ emy 5.1.1. Synchronizace kontroleru NaoQi a simul´ atoru Webots Charakteristika probl´ emu V komunikaci mezi kontrolerem NaoQi a kontrolerem naoqi for webots nen´ı zavedena ˇz´adn´a synchronizace. V d˚ usledku toho m˚ uˇze pˇri zat´ıˇzen´ı poˇc´ıtaˇce doch´azet k nepˇredv´ıdan´ ym chyb´am v simulaci robota, kter´e jsou zp˚ usobeny t´ım, ˇze simul´ator nest´ıh´a ˇc´ıst informace, kter´e kontroler NaoQi poskytuje a neust´ale aktualizuje. Nejv´ıce je tato chyba zn´at pˇri pohybu robota, kde se mouhou ztr´acet nˇekter´e informace o tom, do jak´ ych poloh se maj´ı nastavit veˇsker´e klouby. Pˇri ch˚ uzi tak robot m˚ uˇze j´ıt zcela ˇspatn´ ym smˇerem. ˇ sen´ı probl´ Reˇ emu Jedn´a se o nejvˇetˇs´ı probl´em pˇri pouˇzit´ı simul´atoru Webots spoleˇcnˇe s robotem Nao. Zp˚ usob˚ u, jak pˇristoupit k tomuto probl´emu je v´ıce, ale nelze jej zcela odstranit. Ve sv´e pr´aci jsem se zamˇeˇril pouze na problematiku s ch˚ uz´ı robota, protoˇze je to jedin´a oblast, kde byla absence synchronizace skuteˇcn´ ym probl´emem. 1. Prov´adˇet simulaci na v´ ykonn´em PC s v´ ykonn´ ym GPU bez jin´eho zat´ıˇzen´ı, aby komunikace prob´ıhala spr´avnˇe i bez synchronizace. 2. Pouˇz´ıvat k ch˚ uzi funkci setWalkTargetVelocity, kde je moˇzn´e zpomalit pohyb ch˚ uze, a t´ım omezit vliv asynchronn´ı komunikace mezi kontrolery. 3. Vyuˇz´ıt k ch˚ uzi pˇredem definovan´e pohyby uloˇzen´e v .motion souborech simul´atoru Webots Postupy k ˇreˇsen´ı probl´emu jsou detailnˇeji pops´any v kapitole 3.4.3. 44
5.1. Probl´emy
5.1.2. Pˇrenos obrazu Charakteristika probl´ emu Pˇrenos obrazu z kamery do obsluˇzn´e aplikace, kter´a robota ˇr´ıd´ı, je prov´adˇen ve dvou kroc´ıch. Nejprve je obraz pˇrenesen ze simul´atoru do sd´ılen´e pamˇeti kontroleru NaoQi. Odtud je pot´e teprve zkop´ırov´an do pamˇeti obsluˇzn´e aplikace. Probl´em je v komunikaˇcn´ım protokolu, pomoc´ı kter´eho jsou pˇren´aˇsena data ze sd´ılen´e pamˇeti kontroleru NaoQi. Komunikace je velmi pomal´a a pˇri pr´aci s NaoQi, kter´e je obsaˇzeno v Aldebaran SDK verze 1.6.13, lze dos´ahnout maxim´alnˇe pˇrenosov´e rychlosti 1 fps. Protokol je st´ale upravov´an a jiˇz v dalˇs´ı verzi je moˇzn´e dos´ahnout vyˇsˇs´ı rychlosti, kter´a je vˇsak pro aplikace, kde je obraz velmi ˇcasto vyuˇz´ıv´an, nedostaˇcuj´ıc´ı. ˇ sen´ı probl´ Reˇ emu Pˇri pr´aci se simul´atorem vˇsak nen´ı potˇreba obraz nahr´avat nejprve do pamˇeti kontroleru NaoQi, ale je moˇzn´e a v´ yhodn´e pos´ılat obraz rovnou obsluˇzn´e aplikaci. K tomuto u ´ˇcelu lze pouˇz´ıt meziprocesovou komunikaci a obraz ukl´adat do vytvoˇren´e sd´ılen´e pamˇeti, do kter´e mohou pˇristupovat jak kontroler naoqi for webots, tak obsluˇzn´a aplikace. T´ımto zp˚ usobem lze dos´ahnout bez probl´em˚ u pˇreˇ sen´ı je nosov´e rychlost´ı 30 fps, coˇz je maximum, kter´e zvl´adne kamera robota. Reˇ detailnˇe pops´ano v kapitole 3.1.
5.1.3. Nepodporovan´ e syst´ emy robota Nao v simul´ atoru Webots Charakteristika probl´ emu Simul´aˇcn´ı prostˇred´ı a model robota nepodporuj´ı nˇekter´e syst´emy, kter´ ymi skuteˇcn´ y robot Nao disponuje. Seznam vˇsech tˇechto syst´em˚ u, kter´e nemohou b´ yt simulov´any, uv´ad´ım v kapitole 2.3.1. ˇ sen´ı probl´ Reˇ emu Podpora nˇekter´ ych syst´em˚ u by mohla b´ yt dodˇel´ana u ´pravou prototypov´eho souboru robota a kontroleru. Doporujuˇcuji vˇsak sp´ıˇse vyˇckat na vyd´an´ı nov´ ych verz´ı simul´atoru a prototypov´ ych soubor˚ u robota Nao, ve kter´ ych se postupnˇe objevuje podpora nov´ ych syst´em˚ u.
5.1.4. Nedostupn´ e funkce v simul´ atoru Webots verze EDU Charakteristika probl´ emu ˇ Skoln´ ı verze simul´atoru Webots nenab´ız´ı nˇekter´e funkce, kter´e jsou dostupn´e ve verzi PRO. Kompletn´ı popis, kde jsou vidˇet rozd´ıly mezi obˇema verzemi, je moˇzn´e nal´ezt na str´ank´ach spoleˇcnosti [4, Store/Webots]. Nejv´ıce vˇsak v´ yvoj´aˇr m˚ uˇze postr´adat tˇr´ıdu Supervisor, pomoc´ı kter´e je moˇzn´e ˇc´ıst, ale tak´e mˇenit veˇsker´e 45
5. Shrnut´ı probl´em˚ u se simul´atorem Webots parametry sc´eny bˇehem simulace. Bez t´eto tˇr´ıdy je zjiˇst’ov´an´ı pozice robota nebo pohybov´an´ı pˇredmˇety sloˇzitˇejˇs´ı. Nen´ı vˇsak nemoˇzn´e. ˇ sen´ı probl´ Reˇ emu Bˇehem pr´ace na u ´loh´ach jsem potˇreboval zjiˇst’ovat pozici robota ve sc´enˇe. Pomoc´ı tˇr´ıdy Supervisor by ˇslo tento u ´daj snadno zjistit pˇreˇcten´ım parametru sc´eny, kter´ y ˇ tuto pozici ud´av´a. Reˇsen´ım ve verzi EDU je pouˇzit´ı modulu GPS, kter´ y je moˇzno robotovi virtu´alnˇe ”nainstalovat”zmˇenou prototypov´eho souboru. Detailn´ı popis tohoto postupu jsem uvedl v kapitole 3.4.3. Tˇr´ıda Supervisor by mohla b´ yt pouˇzita tak´e k pohybov´an´ı pˇredmˇety bˇehem simulace. Dalo by se toho vyuˇz´ıt napˇr´ıklad pˇri testov´an´ı algoritm˚ u pro trackov´an´ı obliˇceje, kdy by tˇr´ıda Supervisor pohybovala obliˇcejem ve sc´enˇe. Pokud bychom chtˇeli tohoto efektu doc´ılit ve verzi EDU, je tˇreba kaˇzd´ y pohybuj´ıc´ı se pˇredmˇet vymodelovat jako robota. Tento postup je sloˇzitˇejˇs´ı a pracnˇejˇs´ı, ale je moˇzn´e dos´ahnout v podstatˇe stejn´eho v´ ysledku. Postup je n´asleduj´ıc´ı: 1. Vytvoˇrit model robota, kter´ y bude pˇredstavovat objekt, kter´ ym chceme h´ ybat. 2. Pˇriˇradit robotovi 3 line´arn´ı servo motory, kter´e budou m´ıt osy navz´ajem kolm´e. T´ım bude moˇzn´e doc´ılit toho, ˇze se bude moci objekt h´ ybat do vˇsech stran. 3. Pˇriˇradit robotovi odbdobn´ ym zp˚ usobem 3 rotaˇcn´ı servo motory, kter´e budou m´ıt takt´eˇz osy navz´ajem kolm´e. T´ım bude moˇzn´e doc´ılit toho, ˇze se bude moci objekt libovolnˇe ot´aˇcet. 4. Napsat vytvoˇren´emu robotovi jednoduch´ y kontroler, kter´ y s n´ım bude pohybovat, jak budeme cht´ıt. 5. Pokud u robota nebude nastavena fyzika, bude se moci ve sc´enˇe pohybovat zcela bez omezen´ı.
5.2. Evaluace prostˇred´ı 5.2.1. Zmˇ ena parametr˚ u sc´ eny Simul´ator Webots obˇcas vykazuje nestandardn´ı chov´an´ı pˇri zmˇenˇe parametr˚ u sc´eny. Prvn´ım pˇr´ıkladem je, ˇze pokud spust´ıme simulaci, pot´e ji pˇreruˇs´ıme, zmˇen´ıme nˇejak´ y parametr (napˇr´ıklad pozici robota) a pot´e simulaci opˇet rozbˇehneme, tak se m˚ uˇze st´at, ˇze se parametry vr´at´ı na svou p˚ uvodn´ı hodnotu. K tomuto jevu doch´az´ı, zd´a se, zcela nahodile. Avˇsak jakmile k nˇemu jednou dojde, doch´az´ı k nˇemu neust´ale aˇz do restartov´an´ı cel´eho simul´atoru. Tento probl´em m˚ uˇze velice zdrˇzovat, pokud chceme napˇr´ıklad v pr˚ ubehu simulace mˇenit ˇcasto pozici robota, coˇz jsem j´a konkr´etnˇe potˇreboval pˇri mˇeˇren´ı pˇresnosti detekce znaˇcek na r˚ uznou vzd´alenost. Dalˇs´ım pˇr´ıkladem je jev, kdy doch´az´ı ke zmˇenˇe natoˇcen´ı kamery, pokud zmˇen´ıme 46
5.2. Evaluace prostˇred´ı kontroler robota. Kamera je ˇcasto natoˇcena do opaˇcn´eho smˇeru, takˇze nen´ı vidˇet sc´ena a je pak tˇeˇzk´e ji natoˇcit zpˇet (viz ovl´ad´an´ı kamery 5.2.2).
5.2.2. Ovl´ ad´ an´ı kamery Kamera se v simul´atoru Webots ovl´ad´a ponˇekud neprakticky, coˇz m˚ uˇze v´ yvoj´aˇre zdrˇzovat. K ovl´ad´an´ı kamery se pouˇz´ıv´a myˇs, kde je zoomov´an´ı ˇr´ızeno jednoduˇse koleˇckem a posun kamery ja aktivov´an pˇri stisku prav´eho tlaˇc´ıtka. Tyto dvˇe funkce pracuj´ı dobˇre, ale probl´em nast´av´a pˇri rotaci kamery. K aktivaci rotace se pouˇz´ıv´a lev´e tlaˇc´ıtko. Kamera ovˇsem rotuje kolem bodu, kter´ y je oznaˇcen v momentˇe stisku tlaˇc´ıtka. Na tento zp˚ usob se d´a zvyknout, pokud hled´ıme na sc´enu tak, abychom vidˇeli dost objekt˚ u, kolem kter´ ych m˚ uˇzeme rotovat. Pokud ale kamera ujede (coˇz se m˚ uˇze st´at samovolnˇe zmˇenou nˇejak´ ych parametr˚ u sc´eny, viz kapitolu 5.2.1) a zaˇcne hledˇet do pr´azdna, je velmi obt´ıˇzn´e ji natoˇcit zpˇet, aby opˇet hledˇela na sc´enu.
47
6. Z´ avˇ er Sezn´amil jsem se s prostˇred´ım simul´atoru Webots a byl jsem schopen implementovat ˇreˇsen´ı dvou u ´loh, kter´e se zab´ yvaj´ı prostorovou orientac´ı a pohybem robota Nao. Prvn´ı u ´loha pˇrinesla moˇznost vytv´aˇret trasu ze s´erie znaˇcek, kter´e bude robot sledovat a pohybovat se tak po zvolen´e trajektorii z m´ısta A do m´ısta B. V´ ysledn´ y k´od lze integrovat do vˇetˇs´ıch aplikac´ı, kde bude pohyb v prostoru pouze d´ılˇc´ım u ´konem. Ve druh´e u ´loze jsem se vˇenoval mapov´an´ı prostˇred´ı, ve kter´em jsou objekty oznaˇceny znaˇckami. Dos´ahl jsem dostateˇcnˇe vysok´e pˇresnosti detekce pˇrek´aˇzek, v pˇr´ıpadˇe, ˇze je poloha robota zn´am´a. Aplikace je schopn´a rovnˇeˇz vypoˇc´ıtat nejkratˇs´ı cestu ke zvolen´emu m´ıstu na mapˇe a celou mapu vizualizovat. Syst´em vyuˇz´ıvaj´ıc´ı detekci objekt˚ u vˇsak nen´ı uzp˚ usoben k lokalizaci robota ve sc´enˇe. K tomu by muselo b´ yt znaˇcek mnohon´asobnˇe v´ıce, coˇz nen´ı moˇzn´e v praxi prov´est. Nav´ıc by detekce musela prob´ıhat po uraˇzen´ı menˇs´ıch vzd´alenost´ı, coˇz by zabralo velmi mnoho ˇcasu. Syst´em SLAM, kter´emu jsem se bˇehem ˇreˇsen´ı u ´lohy vˇenoval, je tedy velice nespolehliv´ y a nepˇresn´ y. Do vytvoˇren´e aplikace vˇsak m˚ uˇze b´ yt integrov´an dalˇs´ı modul, kter´ y by nab´ızel jin´ y zp˚ usob lokalizace robota v prostˇred´ı. Vˇsechny mnou vytvoˇren´e k´ody jsou opatˇreny program´atorskou dokumentac´ı. Bˇehem implementace u ´loh jsem evaluoval prostˇred´ı simul´atoru Webots a tak´e jsem odhalil nˇekolik probl´em˚ u, ke kter´ ym pˇri simulaci robota Nao doch´az´ı. Vˇse jsem detailnˇe zdokumentoval a pokud to bylo moˇzn´e, naˇsel nejlepˇs´ı moˇzn´e ˇreˇsen´ı probl´em˚ u. Uk´azalo se, ˇze simul´ator Webots nepodporuje nˇekter´e syst´emy robota Nao. Nen´ı tedy vhodn´ y pro jeho simulaci, pokud je naˇs´ım c´ılem simulovat pravˇe tyto syst´emy. Je jich pomˇernˇe hodnˇe, avˇsak jedn´a se sp´ıˇse o minoritn´ı syst´emy, jejichˇz pouˇzit´ı nen´ı vˇetˇsinou tˇreba sloˇzitˇe ladit a tedy i simulovat. Nav´ıc s kaˇzdou dalˇs´ı verz´ı je schopen simulovat v´ıce a v´ıce syst´em˚ u, kter´e m´a robot k dispozici. Napˇr´ıklad je ohl´aˇseno, ˇze v dalˇs´ı verzi bude obsaˇzen model robota s vymodelovan´ ymi prsty. D´ıky tomu, ˇze simul´ator Webots nen´ı urˇcen pouze k simulaci robota Nao, ale umoˇzn ˇuje simulovat celou ˇradu jin´ ych robot˚ u a tvorbu sv´ ych vlastn´ıch prototyp˚ u, je dle m´eho n´azoru software vhodn´ y do ˇskol, kde by se dal vyuˇz´ıt ne jenom jako jedno´ uˇcelov´ y simul´ator robota Nao, ale mohl by b´ yt vyuˇz´ıv´an rovnˇeˇz pˇri v´ yuce robotiky. Od chv´ıle, kdy byl vyb´ır´an simulaˇcn´ı software k simulaci robota Nao pro tuto pr´aci, ubˇehla jist´a doba, bˇehem kter´e doˇslo k jist´emu pokroku. Byl vytvoˇren dokonce zcela nov´ y simulaˇcn´ı software nazvan´ y NaoSim, kter´ y spolupracuje pˇr´ımo s aplikac´ı Choregraphe. Je zcela zamˇeˇren na simulaci robota Nao. V souˇcasn´e dobˇe vˇsak st´ale nen´ı v release verzi. Veˇsker´ y simulaˇcn´ı software, kter´ y je schopn´ y simulovat robota Nao, se neust´ale vyv´ıj´ı, protoˇze robot Nao je povaˇzov´an za robota, kter´ y pˇredstavuje budou48
cnost. Z´akladn´ımi tˇremi moˇznostmi jsou v souˇcasn´e simul´atory Webots, Miscrosoft Robotics Developer Studio a NaoSim. Vˇsechny z nich maj´ı probl´emy, kter´ ym mus´ı v´ yvoj´aˇr pˇri simulaci robota ˇcelit. Po prostudov´an´ı f´ora spoleˇcnosti Aldebaran Robotics, kde lid´e popisuj´ı zkuˇsenosti s ostatn´ımi simulaˇcnimi programy, a na z´akladˇe vlastn´ıch zkuˇsenost´ı se simul´atorem Webots se domn´ıv´am, ˇze simul´ator Webots je v souˇcasn´e dobˇe nejlepˇs´ı volbou. Zvl´aˇstˇe, pokud by byl vyuˇzit cel´ y jeho potenci´al a jeho vyuˇz´ıv´an´ı by nebylo zamˇeˇreno pouze na robota Nao.
49
A. Obsah pˇriloˇ zen´ eho DVD • Knihovny Adres´aˇr obsahuj´ıc´ı veˇsker´e knihovny potˇrebn´e ke kompilaci u ´loh • Literatura Odborn´e ˇcl´anky, ze kter´ ych jsem ve sv´e pr´aci ˇcerpal • Projekty Aplikace k u ´loh´am – Bludiste CMake projekt k vytvoˇren´ı aplikace k u ´loze Bludiˇstˇe – naoqi for webots CMake projekt k vytvoˇren´ı kontroleru naoqi for webots – Stopovana CMake projekt k vytvoˇren´ı aplikace k u ´loze Stopovan´a • Videa Videa inlustruj´ıc´ı funkˇcnost vytvoˇren´ ych aplikac´ı – Uloha1-Stopovana Videa k prvn´ı u ´loze – Uloha2-Bludiste Videa k druh´e u ´loze • Webots Instalaˇcn´ı soubor simul´atoru Webots a vytvoˇren´e virtu´aln´ı svˇety k testov´an´ı u ´loh – Bludiste Virtu´aln´ı svˇet k testov´an´ı u ´lohy Bludiˇstˇe – Stopovana Virtu´aln´ı svˇet k testov´an´ı u ´lohy Stopovan´a
50
B. N´ avod ke kompilaci u ´loh Aplikace k obˇema u ´loh´am vyuˇz´ıvaj´ı nˇekolik extern´ıch C++ knihoven, kter´e je tˇreba m´ıt nainstalov´any. Nav´ıc je tˇreba aplikace nastavit, aby spr´avnˇe pracovaly s NaoQi. Z toho d˚ uvodu uv´ad´ım struˇcn´ y n´avod, podle kter´eho je moˇzn´e obˇe aplikace u ´spˇeˇsnˇe zkompilovat. K obˇema u ´loh´am jsem vytvoˇril CMake projekt. Zdrojov´e soubory jsou uloˇzeny na pˇriloˇzen´em DVD v adres´aˇr´ıch /Projekty/Stopovana a /Projekty/Bludiste. Postupnˇe uvedu veˇsker´e knihovny, kter´e v aplikac´ıch vyuˇz´ıv´am, a postup, jak je spr´avnˇe nastavit. • Aldebaran SDK verze 1.6.13 Jedn´a se o z´akladn´ı soubor knihoven, kter´e jsou nutn´e pro pr´aci s robotem. Souˇc´ast´ı je i NaoQi a soubor toolchain-pc.cmake, kter´ y je pouˇz´ıv´an pro crosskompilaci cel´e knihovny pomoc´ı CMake. Archiv obsahuj´ıc´ı knihovnu spr´avn´e verze je um´ıstˇen na pˇriloˇzen´em DVD. Je zde um´ıstˇen i instalaˇcn´ı soubor k programu Choregraphe, pomoc´ı nˇehoˇz je moˇzn´e pˇr´ımo ovl´adat robota a snadno tak ovˇeˇrit, ˇze je vˇse spr´avnˇe nastaveno. Je nutn´e instalovat pr´avˇe tuto verzi, protoˇze aplikace jsou k n´ı uzp˚ usobeny a s jin´ ymi verzemi nejsou pˇr´ımo kompatibiln´ı. Pˇri instalaci knihovny doporuˇcuji postupovat podle instrukc´ı v dokumentaci [14, SDK ]. D˚ uleˇzit´e je zejm´ena nastaven´ı syst´emov´e promˇenn´e PATH pˇrid´an´ım cest /path/to/sdk/bin a /path/to/sdk/lib. Pˇri vytv´aˇren´ı projektu pomoc´ı softwaru CMake je nutn´e zatrhnout moˇznost ”Specify toolchain file for cross-compiling”a pot´e zadat cestu k souboru /path/to/sdk/toolchain-pc.cmake. • OpenCV Na pˇr´ıloˇzen´em DVD je instalaˇcn´ı soubor knihovny verze 2.1. Aplikace jsou testov´any na t´eto verzi, avˇsak mˇely by pracovat i s jin´ ymi verzemi. Spuˇsten´ım instalaˇcn´ıho souboru by se mˇelo vˇse nastavit a CMake by mˇel s knihovnou bez probl´emu pracovat. Bˇehem instalace je d˚ uleˇzit´e zatrhnout moˇznost, aby instalaˇcn´ı program nastavil syst´emov´e promˇenn´e. D´ale pak nen´ı nutn´e se o tuto knihovnu starat. • ARToolKit Na pˇriloˇzen´em DVD je archiv se soubory knihovny verze 2.72.1. Aplikace jsou testov´any na t´eto verzi, avˇsak mˇely by pracovat i s jin´ ymi verzemi. Instalaci knihovny je moˇzn´e snadno prov´est v nˇekolika kroc´ıch: 1. Rozbalte archiv do libovoln´eho adres´aˇre, kter´ y oznaˇcme {ARToolKit} 51
B. N´avod ke kompilaci u ´loh 2. Pˇridejte do syst´emov´e promˇenn´e PATH cestu {ARToolKit}/bin 3. Vytvoˇrte syst´emovou promˇennou ARTOOLKIT ROOT a nastavte ji na hodnotu {ARToolKit} Pro naˇse u ´ˇcely nen´ı nutn´e knihovnu kompilovat. • GSL Na pˇriloˇzen´em DVD je instalaˇcn´ı soubor knihovny verze 1.8. Aplikace jsou testov´any na t´eto verzi, avˇsak mˇely by pracovat i s jin´ ymi verzemi. Instalaci lze prov´est v n´asleduj´ıc´ıch kroc´ıch: 1. Spust’te instalaˇcn´ı soubor a nanistalujte knihovnu do libovoln´eho adresa´ˇre, kter´ y oznaˇcme {GSL} 2. Vytvoˇrte syst´emovou promˇennou GSL ROOT a nastavte ji na hodnotu {GSL} • Qt4 Tato knihovna je sice souˇc´ast´ı Aldebaran SDK, ale bohuˇzel je zde ve verzi, kter´a nen´ı s aplikac´ı kompatibiln´ı. Nav´ıc Aldebaran SDK neobsahuje vˇsechny jej´ı souˇca´sti. Je tedy nutn´e nainstalovat ji dodateˇcnˇe. Na pˇriloˇzen´em DVD je instalaˇcn´ı soubor pro verzi 4.7.3 urˇcenou pro Microsoft Visual Studio 2008. V d˚ usledku toho, ˇze je knihovna Qt v poˇc´ıtaˇci v´ıcekr´at, doch´az´ı k tomu, ˇze se mohou pouˇz´ıvat ˇspatn´e dynamick´e knihovny, protoˇze maj´ı pro obˇe verze stejn´ y n´azev. Pro knihovnu, kter´a je souˇca´st´ı Aldebaran SDK, jsou um´ıstˇeny ve sloˇzce (/path/to/sdk/bin), jeˇz mus´ı b´ yt uloˇzena v syst´emov´e promˇenn´e PATH pro spr´avnou funkˇcnosti SDK. Pokud syst´em bude hledat nejprve v t´eto sloˇzce, budou pouˇzity ˇspatn´e dynamick´e knihovny a aplikace nebude fungovat. V takov´e pˇr´ıpadˇe je nejjednoduˇsˇs´ı pˇridat soubory QtCore4.dll a QtGui4.dll pˇr´ımo do adres´aˇre zkompilovan´e aplikace. • Boost Tato knihovna je souˇc´ast´ı Aldebaran SDK a nen´ı nutn´e ji tedy nijak nastavovat. I v pˇr´ıpadˇe, ˇze je na poˇc´ıtaˇci jiˇz knihovna Boost nainstalov´ana, nemˇelo by doj´ıt k ˇza´dn´ ym probl´em˚ um. Jakmile jsou vˇsechny potˇrebn´e knihovny nainstalov´any a spr´avnˇe nastaveny, je moˇzn´e pomoc´ı softwaru CMake vytvoˇrit projekt. Obˇe aplikace jsou vytvoˇreny jako REMOTE, coˇz znamen´a, ˇze nebˇeˇz´ı pˇr´ımo v procesoru robota, ale jsou vykon´av´any na extern´ım stroji a robotovi jsou pouze pˇred´av´any pˇr´ıkazy. V d˚ usledku toho je nutn´e v CMake bˇehem vytv´aˇren´ı projektu zatrhnout moˇznost {NAZEV PROJEKTU} IS REMOTE. Jakmile je projekt vytvoˇren, mˇel by j´ıt bez dalˇs´ıho nastavovan´ı zkompilovat. Pˇred spuˇsten´ım aplikace pro u ´lohu Stopovan´a je nutn´e zkop´ırovat sloˇzku Data ze sloˇzky s projektem do sloˇzky se zkompilovanou aplikac´ı. V t´eto sloˇzce jsou uloˇzeny 52
soubory se ˇsablonami znaˇcek, kter´e m´a robot detekovat. Nav´ıc je tˇreba m´ıt pˇred spuˇstˇen´ım aplikace spuˇstˇen simul´ator Webots s naˇcten´ ym spr´avn´ ym virtu´aln´ım svˇetem a spuˇsten´ ym kontrolerem naoqi for webots. Pˇred spuˇstˇen´ım aplikace pro u ´lohu Bludiˇstˇe je nav´ıc nutn´e zkop´ırovat soubor obstacleFile.txt ze sloˇzky s projektem do sloˇzky se zkompilovanou aplikac´ı. V tomto souboru jsou nadefinov´any pozice pˇrek´aˇzek pro virtu´aln´ı svˇet Labyrinth.
53
C. Seznam kl´ avesov´ ych zkratek k aplikaci Bludiˇstˇ e Aplikace k u ´loze Bludiˇstˇe obsahuje grafick´e rozhran´ı, pomoc´ı kter´eho je moˇzn´e vˇse ovl´adat. K zajiˇstˇen´ı vˇetˇs´ıho pohodl´ı jsem aplikaci vybavil kl´avesov´ ymi zkratkami, jimiˇz lze rychle zad´avat pˇr´ıkazy. Zde uv´ad´ım jejich seznam: • CTRL + C Je asociov´ana s poloˇzkou v menu Connect robot a vyvol´a formul´aˇr pro pˇripojen´ı k robotovi. Je aktvn´ı pouze v pˇr´ıpadˇe, ˇze aplikace nen´ı k ˇza´dn´emu pˇripojena. • CTRL + D Je asociov´ana s poloˇzkou v menu Disconnect robot a po jej´ım stisknut´ı se aplikace odpoj´ı od robota. Je aktivn´ı pouze v pˇr´ıpadˇe, ˇze je aplikace pˇripojena k robotovi. • CTRL + O Je asociov´ana s poloˇzkou v menu Show simulator map. Jej´ım stisknut´ım se zap´ın´a / vyp´ın´a zobrazovan´ı skuteˇcn´ ych pozic pˇrek´aˇzek. Je aktivn´ı pouze v pˇr´ıpadˇe, ˇze je aplikace pˇripojena k virtu´aln´ımu robotovi v simul´atoru. • CTRL + S Je asociov´ana s poloˇzkou v menu Start mapping. Jej´ım st´ısknut´ım se zap´ın´a automatick´e mapov´an´ı. Je aktivn´ı pouze v pˇr´ıpadˇe, ˇze je aplikace pˇripojena k robotovi a ten nevykon´av´a ˇz´adnou ˇcinnost. • CTRL + E Je asociov´ana s poloˇzkou v menu Stop mapping. Jej´ım st´ısknut´ım se vyp´ın´a automatick´e mapov´an´ı. Je aktivn´ı pouze v pˇr´ıpadˇe, ˇze je aplikace pˇripojena k robotovi a automatick´e mapov´an´ı je aktivn´ı. • CTRL + G Je asociov´ana s poloˇzkou v menu Go to location. Po jej´ım stisknut´ı je uˇzivatel vyzv´an, aby vybral m´ısto, kam m´a robot doj´ıt. Je aktivn´ı pouze v pˇr´ıpadˇe, ˇze je aplikace pˇripojena k robotovi a ten nevykon´av´a ˇza´dnou ˇcinnost. • CTRL + Q Je asociov´ana s poloˇzkou v menu Quit a po jej´ım st´ısknut´ı se aplikace odpoj´ı od robota a pot´e se ukonˇc´ı. Je aktivn´ı st´ale.
54
Literatura [1] Webov´e str´anky projektu HUMAVIPS. http://humavips.inrialpes.fr/. 6 [2] Webov´e str´anky projektu RoboCup. http://www.robocup.org/. 6 [3] Webov´e str´anky aplikace Microsoft Robotics Developer Studio. http://www.microsoft.com/robotics/. 7 [4] Webov´e str´anky spoleˇcnosti Cyberbotics. http://www.cyberbotics.com/index.php. 7, 45 [5] Reference manual of webots simulator. http://www.cyberbotics.com/reference.pdf. 8 [6] User guide for webots simulator. http://www.cyberbotics.com/guide.pdf. 8, 9 [7] Webov´e str´anky jazyka VRML. http://graphcomp.com/info/specs/sgi/vrml/spec/. 9 [8] Dokumentace ke kontroleru naoqi for webots. http://www.cyberbotics.com/nao/. 10 [9] Webov´e str´anky knihovny OpenCV. http://opencv.willowgarage.com/wiki/. 15 [10] Webov´e str´anky knihovny Boost. http://www.boost.org/. 15 [11] Dokumentace knihovny Boost. http://www.boost.org/doc/libs/1_45_0/doc/html/index.html. 15 [12] Webov´e str´anky knihovny ARToolKit. http://www.hitl.washington.edu/artoolkit/. 15 [13] Webov´e str´anky knihovny Qt. http://qt.nokia.com/products/. 26 [14] ALDEBARAN Robotics. Nao Documentation. http://academics.aldebaran-robotics.com/docs/site_en/index_ doc.html. 6, 11, 14, 15, 51 55
Literatura [15] A. Chatterjee, R. Olive, A. Chatterjee, and A. Rakshit. Development of a real-life ekf based slam system for mobile robots employing vision sensing. Expert Systems with Applications, 38:8266—-8274, 2011. 32 [16] R. I. Hartley and A. Zisserman. Multiple View Geometry in Computer Vision. Cambridge University Press, ISBN: 0521623049, 2000. 18 ˇ Fojt˚ [17] M. Havlena, S. u, D. Pr˚ uˇsa, and T. Pajdla. Towards Robot Localization ˇ and Obstacle Avoidance from Nao Camera. Technical report, CVUT v Praze, CMP, 2010. 26 [18] J. C. Latombe. Robot Motion Planning. Kluwer Academic Publishers Norwell, ISBN: 0792391292, 1991. 27 [19] A. Louloudi, A. Mosallam, N. Marturi, P. Janse, and V. Hernandez. Integration of the Humanoid Robot Nao inside a Smart Home. Technical report, ¨ Orebro University, Sweden, April 2010. 14, 26 [20] K. J. Obermeyer and Contributors. The VisiLibity library. http://www.VisiLibity.org, 2008. R-1. 27 [21] T. Pajdla. Teoretick´e z´aklady vidˇen´ı, grafiky a interakce. Magistersk´ y kurz programu Otevˇren´a Informatika, pˇredn´aˇsky, letn´ı semestr 2010. On-line, http://cmp.felk.cvut.cz/cmp/courses/TZ/2010/Lecture/, staˇzeno 12.5.2010. 16 [22] S. Riisgaard and M. R. Blas. SLAM for Dummies, 2005. 32, 33 [23] R. Sara. 3d computer vision. Open Informatics Master’s Course, lectures, winter 2010. On-line, http://cmp.felk.cvut.cz/cmp/courses/TDV/2010W/lectures/ 3DV-lectures.pdf, verze 14.12.2010, staˇzeno 15.12.2010. 28, 29 [24] J. Wienke and S. Wrede. Tutorial on event-driven memory architectures in robotics, August 2010. 15
56