Difference between revisions of "Acrob robot constructs a map of a maze (Péter Dobsa, Gergely Labanc)"

From RoboWiki
Jump to: navigation, search
(Proces mapovania)
(Proces mapovania)
Line 46: Line 46:
  
 
Po štartovaní aplikácie dostaneme otázku, cez ktorý port sa chceme pripojiť k nášmu robotovi.  
 
Po štartovaní aplikácie dostaneme otázku, cez ktorý port sa chceme pripojiť k nášmu robotovi.  
  [[{{ns:image}}:rob4.png]],
+
  [[rob4.png]],
 
Po úspešnom párovaní sa zobrazí zatial biely základ mapy a dve tlačidlá (Start a Stop), ktoré ale sú zneprístupnené. Ak teraz položíme robota na čiaru správne, tlačidlo Start sa rozsvieti a po klikaní naň sa spustí mapovanie - robot sa začne pohybovať. Robot sa najprv pohybuje po čiare dobrovoľne, v križovatke si vyberie cestu sám. Za tento proces zodpovedá v kóde časť ''volny pohyb''. Namapovanú cestu reprezentuje ako graf, kde vrcholmi budú zákruty a križovatky, a hrany medzi vrcholmi budú existujúce cesty. Volný pohyb robota sa končí v okamihu, ak narazil na vrchol, z ktorého nevedú žiadne cesty, ktoré ešte neboli preskúmané, alebo sa dostane do slepej uličky. Vtedy sa zastavý a čaká na príkaz od počítača. Počítač pomocou ''hľadania do šírky'' nájde nabližší vrchol, odkiaľ ešte vedú nejaké cesty, cez ktoré ešte neprešiel, pomocou [https://en.wikipedia.org/wiki/A*_search_algorithm algoritmu A*] nájde najkratšiu cestu medzi nájdeným vrcholom a aktuálnym vrcholom robota, vizualizuje cestu a pomocou tejto cesty a momentálneho smeru robota zostrojí postupnosť príkazov, podľa ktorých robot by mal by byť schopný dostať na požadované miesto. Idea posielania príkazov je taká, že každý príkaz posiela počítač len vtedy, keď príjímanie predošlého príkazu bola potrvdená. Hranicu postupnosti príkazov hlási posielaním špeciálnych bytov. Robot týchto príkazov ukladá v dátovej štruktúre <code>queue</code> (rad) a postupne ich vykonáva.
 
Po úspešnom párovaní sa zobrazí zatial biely základ mapy a dve tlačidlá (Start a Stop), ktoré ale sú zneprístupnené. Ak teraz položíme robota na čiaru správne, tlačidlo Start sa rozsvieti a po klikaní naň sa spustí mapovanie - robot sa začne pohybovať. Robot sa najprv pohybuje po čiare dobrovoľne, v križovatke si vyberie cestu sám. Za tento proces zodpovedá v kóde časť ''volny pohyb''. Namapovanú cestu reprezentuje ako graf, kde vrcholmi budú zákruty a križovatky, a hrany medzi vrcholmi budú existujúce cesty. Volný pohyb robota sa končí v okamihu, ak narazil na vrchol, z ktorého nevedú žiadne cesty, ktoré ešte neboli preskúmané, alebo sa dostane do slepej uličky. Vtedy sa zastavý a čaká na príkaz od počítača. Počítač pomocou ''hľadania do šírky'' nájde nabližší vrchol, odkiaľ ešte vedú nejaké cesty, cez ktoré ešte neprešiel, pomocou [https://en.wikipedia.org/wiki/A*_search_algorithm algoritmu A*] nájde najkratšiu cestu medzi nájdeným vrcholom a aktuálnym vrcholom robota, vizualizuje cestu a pomocou tejto cesty a momentálneho smeru robota zostrojí postupnosť príkazov, podľa ktorých robot by mal by byť schopný dostať na požadované miesto. Idea posielania príkazov je taká, že každý príkaz posiela počítač len vtedy, keď príjímanie predošlého príkazu bola potrvdená. Hranicu postupnosti príkazov hlási posielaním špeciálnych bytov. Robot týchto príkazov ukladá v dátovej štruktúre <code>queue</code> (rad) a postupne ich vykonáva.
  

Revision as of 21:19, 26 June 2013

Úvod

Našou úlohou bolo mapovať bludisko pomocou robota Acrob, pričom sa používala on-line komunikácia medzi robotom a počítačom cez bluetooth.

Naše bludisko

Bludisko bolo reprezentované v 2D priestore, a tvorila ho čierna páska na bielom povrchu. Robot mal sledovať práve tú čiaru pomocou infračervených senzorov.

[[File: |none]]

Náš robot

Acrob = Arduino Compatible Robot

Mozog robota tvorila Arduinovská doska, ktorá poháňala dva servomotory ktoré slúžili na pohybovanie robota, spracovala prečítané údaje zo senzorov a preposlala ich počítaču pomocou bluetoothového modulu. Telo robota bolo vyvynuté Slovenskou Technickou Univerzitou. Na prednú dolnú časť bol pripevnený čiarový senzor, ktorý pozostával z ôsmych nezávyslých infračervených senzorov. Na hornú časť bol primontovaný bluetoothový modul.

Sledovanie čiary

Z konštrukcie senzoru a hrúbky čiary vyplývalo, že robot je v správnej polohe na čiare, ak senzor s číslom 3 a senzor s číslom 4 nesvietia, ostatné senzory áno. Pri pohybovaní sme pozorovali práve tie svietiace, aby sme mohli robota udržať správne na čiare. Kvôli nepresnostiam na mape alebo v kolieskach smer robota bolo treba stále trochu korigovať. Tento problém rieši tento kus kódu:

   if (hodnoty[3] == 0 && hodnoty[4] == 1 && nieJeZakruta()) 
   {
     --pravyRychlost;
     ++lavyRychlost;
     forward();
   } 
   else if (hodnoty[3] == 1 && hodnoty[4] == 0 && nieJeZakruta())
   {
     ++pravyRychlost;
     --lavyRychlost;
     forward();
   } 

, kde lavyRychlost a pravyRychlost sú premenné na nastavenie otáčanina daného kolieska robota, a funkcia forward() sa slúží na realizovanie týchto zmien na základe požadovaného pohybu. Na tieto akcie používame triedu Servo, čo je súčasťou základných arduinovských knižníc. nieJeZakruta(), ako aj ďalšie procedúry v časti "zakruty", slúži na zistenie a rozpoznávanie jednotlých zákrut a križovatiek, čo je nevyhnutnou súčasťou mapovania.

Zákruty a križovatky

Ak robot pri pohybe narazil na výrazné zmeny senzorov, bolo mu jasné, že dostal sa do križovatky, respektýve do zákruty. Museli sme rozlíšiť sedem rôznych stavov, a podla toho sa rozhodnúť, čo bude ďalším krokom.

  1. Zákruta tvaru: |_
  2. Zákruta tvaru: _|
  3. Križovatka tvaru: T
  4. Križovatka tvaru: |-
  5. Križovatka tvaru: -|
  6. Križovatka tvaru: +
  7. Slepá ulička

Proces mapovania

Po štartovaní aplikácie dostaneme otázku, cez ktorý port sa chceme pripojiť k nášmu robotovi.

rob4.png,

Po úspešnom párovaní sa zobrazí zatial biely základ mapy a dve tlačidlá (Start a Stop), ktoré ale sú zneprístupnené. Ak teraz položíme robota na čiaru správne, tlačidlo Start sa rozsvieti a po klikaní naň sa spustí mapovanie - robot sa začne pohybovať. Robot sa najprv pohybuje po čiare dobrovoľne, v križovatke si vyberie cestu sám. Za tento proces zodpovedá v kóde časť volny pohyb. Namapovanú cestu reprezentuje ako graf, kde vrcholmi budú zákruty a križovatky, a hrany medzi vrcholmi budú existujúce cesty. Volný pohyb robota sa končí v okamihu, ak narazil na vrchol, z ktorého nevedú žiadne cesty, ktoré ešte neboli preskúmané, alebo sa dostane do slepej uličky. Vtedy sa zastavý a čaká na príkaz od počítača. Počítač pomocou hľadania do šírky nájde nabližší vrchol, odkiaľ ešte vedú nejaké cesty, cez ktoré ešte neprešiel, pomocou algoritmu A* nájde najkratšiu cestu medzi nájdeným vrcholom a aktuálnym vrcholom robota, vizualizuje cestu a pomocou tejto cesty a momentálneho smeru robota zostrojí postupnosť príkazov, podľa ktorých robot by mal by byť schopný dostať na požadované miesto. Idea posielania príkazov je taká, že každý príkaz posiela počítač len vtedy, keď príjímanie predošlého príkazu bola potrvdená. Hranicu postupnosti príkazov hlási posielaním špeciálnych bytov. Robot týchto príkazov ukladá v dátovej štruktúre queue (rad) a postupne ich vykonáva.

Keď sa nanaviguje na požadované miesto, znovu sa pustí jeho volný pohyb. Takýmto spôsobom sa zaistí, že robot v konečnom čase a systematicky prejde cez všetky vrcholy grafu a nič nevynechá, teda namapuje všetko. Keď už žiadny vrchol nevidí, z ktorej by vychádzali nenavštívené hrany tak proces mapovania sa skončí a robot sa zastavý. Teraz máme možnosť poslať ho na požadované miesto klikaním do mapy na nejaký vrchol myškou. Ako predtým, pomocou algoritmu A* zistí najkratšiu cestu a prejde na požadované miesto.

Tu si môžete pozrieť ukážkové video, akor sa pohybuje robot v bludisku a ako sa postupne vykresluje mapa na obrazovke.

Aplikácia na počítači

Tu si môžete stiahnuť aplikáciu bežiacu na počítači napísané v jazyku Java, ktorý prijíma dáta od robota a zkonštruuje celú mapu.

Program na arduíne

Tu si môžete stiahnut sketch, ktorý sa nachádza na doske robota.


Možné chyby

Chyby sa môžu nastať z dôvodu nepresnosti koliesok, motorov, senzorov a cesty. Robot je pripravený na menšie odchýlky a rozpozná že sa jedná o ten istý vrchol aj v prípade, že zamerané hodnoty sa trochu líšia, ale práve preto sa môže nastať situácia, že vrcholy ktoré sú v skutočnosti príliš blízko sa robotom nerozlišujú. Táto chyba sa zmenší, ak zväčšíme rozmery mapy teda dĺžku ciest, vrcholy rozmiestnime tak, aby neboli príliš blízko, a keď spravíme zákruty presne na pravé uhly.