Difference between revisions of "Pohyb robota po čiare a zaznamenávanie vzdialenosti okolitých objektov (Dudík, Kemény)"

From RoboWiki
Jump to: navigation, search
m
 
(23 intermediate revisions by the same user not shown)
Line 3: Line 3:
 
Našou úlohou bolo naprogramovať Acrob robota tak aby sa hýbal smerom dopredu sledovaním čiary a popritom meral vzdialenosti okolitých objektov. Na sledovanie čiary sme použili dva svetelné čiarové senzory. Na zisťovanie vzdialenosti okolitých objektov sme použili IR senzor. Použili sme iba jeden senzor umiestnený na ľavom boku robota.
 
Našou úlohou bolo naprogramovať Acrob robota tak aby sa hýbal smerom dopredu sledovaním čiary a popritom meral vzdialenosti okolitých objektov. Na sledovanie čiary sme použili dva svetelné čiarové senzory. Na zisťovanie vzdialenosti okolitých objektov sme použili IR senzor. Použili sme iba jeden senzor umiestnený na ľavom boku robota.
  
'''Zapojenie'''
+
===Zapojenie===
  
 
[[Image: svetelne_senzory_popisky.png]]
 
[[Image: svetelne_senzory_popisky.png]]
Line 11: Line 11:
 
[[Image: zapajanie_popisky.png]]
 
[[Image: zapajanie_popisky.png]]
  
'''Opis aplikácie'''
+
===Opis aplikácie===
  
Aplikcáia sa delí na dve logické časti. V prvej sa vykoná takzvaný SETUP robota, kde sa inicializujú jeho vnútorné premenné. V druhej časti sme definovali samotnú funkionalitu robota. Základné funkcie, ktoré robot vykonáva sú sledovanie čiary a mapovanie okolitého prostredia.  
+
Aplikácia sa delí na dve logické časti. V prvej sa vykoná takzvaný SETUP robota, kde sa inicializujú jeho vnútorné premenné. V druhej časti sme definovali samotnú funkcionalitu robota. Základné funkcie, ktoré robot vykonáva sú sledovanie čiary a mapovanie okolitého prostredia.  
  
 
<u>Sledovanie čiary</u>
 
<u>Sledovanie čiary</u>
  
Aplikácia spracováva dáta, ktoré mu boli sprostredkované pomocu svetelných čidiel na podvozku robota. Tieto hodnoty si uchodva vo svojich vnútorných premmených a ďalej ich spracuváva.  Ak sa svetelní snímač nachádza nad tmavým povrchom, reprezentovaným vodiacou čiarov, nasnímané hodnoty sú vysoké. Ak sa sníma bieli povrch an ktorom sa robot pohybuje, tak sú nanímané hodnoty veľmi nízke. Vďaka týmto veľkým rozdielom sme schopný detekovať jeho pozíciu. Lokácia robotaprebieham týmto spôsobom. Ak sa nasmímali nízke hodnoty na pravom čidle aj lavom tak sa robot pohybuje rovno. Vodiaca čiara sa nachádza medzi čidlami. Ak Robot detekuej že jedno čislo zaznamenalo rapídný nárazd hodnoty, aplikácia upraví pohyb robota tak aby sa vrátil do pôvodnej dráhy a dostal vodiacu čiaru medzi svetlené čidlá.  
+
Aplikácia spracováva dáta, ktoré mu boli sprostredkované pomocou čiarových senzorov na podvozku robota. Tieto hodnoty si uchováva vo svojich vnútorných premenných a ďalej ich spracováva.  Ak sa čiarový senzor nachádza nad tmavým povrchom, reprezentovaným vodiacou čiarou, nasnímané hodnoty sú vysoké. Ak sa sníma bieli povrch na ktorom sa robot pohybuje, tak sú nasnímané hodnoty veľmi nízke. Vďaka týmto veľkým rozdielom sme schopný detegovať jeho pozíciu. Pohyb robota prebieham týmto spôsobom. Ak sa nasnímali nízke hodnoty na pravom senzore aj ľavom tak sa robot pohybuje rovno. Vodiaca čiara sa nachádza medzi senzormi. Ak robot deteguje, že jeden senzor zaznamenal rapídny nárast hodnoty, aplikácia upraví pohyb robota tak aby sa vrátil do pôvodnej dráhy a dostal vodiacu čiaru medzi čiarové senzory.  
  
 
<u>Mapovanie prostredia</u>
 
<u>Mapovanie prostredia</u>
  
Mapovanie prebieha za behu robota. Aplikácia vo vnútri robota vykonáva nielen snímanie povrchu ale zaznamenáva aj okolie robota. Okolie je snímané pomocov IR senzora. jeho výtupy sú spracované špeciálne navrhnutými algoritmami na mapovanie. Algoritmus spracováva vzdialenosť okolitých objektov, ktoré boli zaznamenané ako jendotný tok znakov reprezentujúcich vzdialenosti. Pre jednoduchšie spracovanie a následnú vizualizáciu dát sme tieto namerané dáta predelili konštantou.  
+
Mapovanie prebieha za behu robota. Aplikácia vo vnútri robota vykonáva nie len snímanie povrchu ale zaznamenáva aj okolie robota. Okolie je snímané pomocou IR senzora. Jeho výstupy sú spracované špeciálne navrhnutými algoritmami na mapovanie. Algoritmus spracováva vzdialenosť okolitých objektov, ktoré boli zaznamenané ako tok znakov reprezentujúcich vzdialenosti. Pre jednoduchšie spracovanie a následnú vizualizáciu dát sme tieto namerané dáta predelili konštantou.  
  
  
'''Zdrojový kód'''
+
===Zdrojový kód===
  
<u>Ukážka podmieneného smeru pohybu robota</u><br />
+
<u>Ukážka podmieneného smeru pohybu robota</u><br /><br />
Situácia : Lavý čiarový senzor narazil na vodiacu čiaru a je porebné vykonať korekciu pohybu do lava.  
+
Situácia : Ľavý čiarový senzor narazil na vodiacu čiaru a je potrebné vykonať korekciu pohybu doľava.  
  
 
<pre>
 
<pre>
Line 43: Line 43:
  
 
<pre>
 
<pre>
Skreslena_vzdialenost = val_infra_1 / 80;
+
Skreslena_vzdialenost = val_infra_1 / 80;               //hodnotu senzora predelim konstantou ktora bola optimalizovana
if (Skreslena_vzdialenost < 10) {
+
if (Skreslena_vzdialenost < 10) {                       //vdaka optimalizovanej konstante by hodnota nemala prekrocit desat
   CelaMapa += String( 10 - Skreslena_vzdialenost, DEC); //sem si ukladam celu mapu do stringu
+
   CelaMapa += String( 10 - Skreslena_vzdialenost, DEC); //zapisem nameranu hodnotu do stringu
   CelaMapa += String( " ");
+
   CelaMapa += String( " ");                             //pridam medzeru za kazdou hodnotou
 
}
 
}
 
</pre>
 
</pre>
  
 +
zdrojový kód [[Media:Projekt_d_k.zip]]
  
 +
===Výstup===
  
 +
<br />
  
Vela setla málo
+
video mapovania [http://tinypic.com/r/fthc42/5]
  
Program na vykreslenie dráhy pre model robota Sbot[http://virtuallab.kar.elf.stuba.sk/sbot/2.0].
+
<br />
  
== Popis k programu na nasledovanie čiary ==
+
<u>Ukážka z výstupného textového okna programu Arduino</u>
  
 +
[[Image: mapa_pomlcky.png]]
  
'''Zapojenie'''
+
<br />
  
[[Image:]]
+
<u>Graf z výstupných hodnôt</u>
  
                adc_vals[0] - ľavý senzor
+
[[Image: graf_mapa_prekazok.png]]
                adc_vals[1] - pravý senzor
 
  
Program po nadviazaní spojenia s počítačom pomocou bluetooth prostredníctvom programu putty reaguje na stlačenia kláves nasledovne:
 
  p - testovacie tlačidlo, vypíše do výstupu putty "hello"
 
  i - vypíše hodnoty z poľa adc_vals od 0 po 7
 
  w,s,a,d - ovládanie robota šípkami
 
  g - zastaví oba motory
 
  v - vypíše hodnoty senzorov na čiaru
 
  c - spustí sa nasledovanie čiary robotom
 
  
'''Algoritmus nasledovania čiary:'''
+
'''Autor:''' Adam Dudík, Patrik Kemény
 
 
V cykle prechádza nasledovným vetvením:
 
Ak vidí robot na oboch senzoroch svetlo ide rovno (predpokladá, že čiaru má medzi senzormi).
 
Ak vidí na ľavom otočí sa na mieste do ľava, kým nevidí znova na oboch svetlo.
 
Inak zistí, či je na pravom senzore tma, točí do prava, kým nevidí na oboch svetlo.
 
 
 
'''Výpis činnosti robota'''
 
 
 
Keď je spustený mód nasledovania čiary, pri každom prechode cyklom vypíše na nový riadok do programu putty jedno z písmen "r,p,l". r ak ide rovno, p - zabáča doprava, l - zabáča doľava.
 
Po tom ako robota zastavíme, treba ručne z programu putty skopírovať celý výstup a uložiť do textového formátu (.txt).
 
 
 
== Popis programu na vykresľovanie ==
 
 
 
Program bol písaný v '''IDE NetBeans'''.
 
 
 
Screenshot programu:
 
 
 
[[Image:Screen.jpg]]
 
 
 
'''Načítavanie vstupného súboru''' (zdrojový kód ..src/robot/robot1.java)
 
Program si načítava údaje zo zadaného vstupného súboru informácie o chode robota ("r,l,p") a ukladá ich do poľa vystup_file, pričom vždy z dviadsiatich po sebe nasledujúcich riadkov vyberie najpočetnejší znak a uloží do poľa  vystup_file.
 
Množstvo riadkov po ktorých ukladá hodnotu do poľa vystup_file je možné nastaviť v premennej dlzkaseturiadkov, ale táto zmena ovplivní aj dĺžku vykreslovanej čiary, preto sa to neodporúča.
 
 
 
'''Vykreslovanie''' (zdrojový kód ..src/robot/draha.java)
 
 
 
 
 
Počiatočnú pozíciu robota a jeho počiatočný smer si načíta zo vstupu ktorý je možný zadať v programe.
 
Dráha sa vykresľuje podľa hodnôt z poľa vystup_file. V cykle číta za radom všetky načítané hodnoty. Reakcie na hodnoty sú nasledovné:
 
 
 
"p" - otočí aktuálny smerový vektor robota o 1° v smere hodinových ručičiek
 
 
 
"l" - otočí aktuálny smerový vektor robota o 1° proti smeru hodinových ručičiek
 
 
 
"r" - načítava ďalšie hodnoty, až kým nenačíta rotáciu, pričom pri každom ďalšom načítaní "r" posunie koncový bod úsečky v smere aktuálneho natočenia o malú hodnotu. Úsečka sa vykreslí až pri načítaní rotácie, pričom reálne súradnice sú zaokruhlené na celočíselné.
 
 
 
==Zdrojáky ==
 
 
 
zdrojáky[http://virtuallab.kar.elf.stuba.sk/robowiki/index.php?title=Image:Projekt.zip]
 
 
 
'''Autor:''' Martin Chudjak
 

Latest revision as of 10:48, 12 June 2013

Úvod

Našou úlohou bolo naprogramovať Acrob robota tak aby sa hýbal smerom dopredu sledovaním čiary a popritom meral vzdialenosti okolitých objektov. Na sledovanie čiary sme použili dva svetelné čiarové senzory. Na zisťovanie vzdialenosti okolitých objektov sme použili IR senzor. Použili sme iba jeden senzor umiestnený na ľavom boku robota.

Zapojenie

Svetelne senzory popisky.png

Ir senzor popisky.png

Zapajanie popisky.png

Opis aplikácie

Aplikácia sa delí na dve logické časti. V prvej sa vykoná takzvaný SETUP robota, kde sa inicializujú jeho vnútorné premenné. V druhej časti sme definovali samotnú funkcionalitu robota. Základné funkcie, ktoré robot vykonáva sú sledovanie čiary a mapovanie okolitého prostredia.

Sledovanie čiary

Aplikácia spracováva dáta, ktoré mu boli sprostredkované pomocou čiarových senzorov na podvozku robota. Tieto hodnoty si uchováva vo svojich vnútorných premenných a ďalej ich spracováva. Ak sa čiarový senzor nachádza nad tmavým povrchom, reprezentovaným vodiacou čiarou, nasnímané hodnoty sú vysoké. Ak sa sníma bieli povrch na ktorom sa robot pohybuje, tak sú nasnímané hodnoty veľmi nízke. Vďaka týmto veľkým rozdielom sme schopný detegovať jeho pozíciu. Pohyb robota prebieham týmto spôsobom. Ak sa nasnímali nízke hodnoty na pravom senzore aj ľavom tak sa robot pohybuje rovno. Vodiaca čiara sa nachádza medzi senzormi. Ak robot deteguje, že jeden senzor zaznamenal rapídny nárast hodnoty, aplikácia upraví pohyb robota tak aby sa vrátil do pôvodnej dráhy a dostal vodiacu čiaru medzi čiarové senzory.

Mapovanie prostredia

Mapovanie prebieha za behu robota. Aplikácia vo vnútri robota vykonáva nie len snímanie povrchu ale zaznamenáva aj okolie robota. Okolie je snímané pomocou IR senzora. Jeho výstupy sú spracované špeciálne navrhnutými algoritmami na mapovanie. Algoritmus spracováva vzdialenosť okolitých objektov, ktoré boli zaznamenané ako tok znakov reprezentujúcich vzdialenosti. Pre jednoduchšie spracovanie a následnú vizualizáciu dát sme tieto namerané dáta predelili konštantou.


Zdrojový kód

Ukážka podmieneného smeru pohybu robota

Situácia : Ľavý čiarový senzor narazil na vodiacu čiaru a je potrebné vykonať korekciu pohybu doľava.

if (val_senzor_l > 200) {   
  Lavy_motor.write(90+SLOW);
  Pravy_motor.write(90+SLOW);
  delay(800);
  Lavy_motor.write(90 - SLOW);  
  Pravy_motor.write(90 + SLOW); 
  delay(500);
}

Ukážka procesu mapovania

Skreslena_vzdialenost = val_infra_1 / 80;               //hodnotu senzora predelim konstantou ktora bola optimalizovana
if (Skreslena_vzdialenost < 10) {                       //vdaka optimalizovanej konstante by hodnota nemala prekrocit desat
  CelaMapa += String( 10 - Skreslena_vzdialenost, DEC); //zapisem nameranu hodnotu do stringu
  CelaMapa += String( " ");                             //pridam medzeru za kazdou hodnotou
}

zdrojový kód Media:Projekt_d_k.zip

Výstup


video mapovania [1]


Ukážka z výstupného textového okna programu Arduino

Mapa pomlcky.png


Graf z výstupných hodnôt

Graf mapa prekazok.png


Autor: Adam Dudík, Patrik Kemény