Robotika 2001

7. csapat - Mika Péter, Varga Tamás, Vad Zoltán

 

1. feladat: útkövetés

Mivel a feladatra az előttünk szereplő csapatok mind működőképes, bár igen változatos megoldásokat adtak, mi azt a célt tűztük magunk elé, hogy utolsó csapatként az eredményeiket összegezve és azokat némiképp továbbfejlesztve mind a hardver, mind a szoftver kérdésében egy letisztult megoldást mutassunk be.

Az alábbiakban röviden ismertetjük az elkészült robot és annak programjának felépítését. Noha külön ismertetjük a kettőt, a robotépítés legnagyobb tanulsága talán mégis a kettő elválaszthatatlansága volt: láttuk hogyan adhatók hardveres problémákra szoftveres megoldások (például az eltérő érzékenységű szenzorok esetén), illetve szoftveres problémákra hardveres megoldások...

A hardver

Az alapvető elgondolás az volt, hogy a robot szenzorai háromszög alakban legyenek. Így a három szenzor jelzései alapján a robot észlelheti, hogy hol van, és hogy milyen irányban áll az úthoz képest. A robot célja a középső szenzor úton tartása úgy, hogy a másik két szenzor adatai alapján változtat irányt. Ha a középső szenzor is lefut az útról, akkor a megfelelő irányú hátrafelé kanyarodással vissza fog kerülni az útra a robot.

Helyben megforduló robot lehet lánctalpas, vagy három kerekű. Mi a három kerekűt választottuk, mert így a robot elején lévő szenzorok közelebb kerülnek a forgási középponthoz. A robot első két kereke külön van meghajtva. Ha pl. ellentétes irányban forognak, akkor a robot helyben megfordul. Többszörös áttételek is kellettek, mert a motorok túl gyorsnak bizonyultak (lassúra állítva pedig gyengének).

A szoftver

A robot vezérléséhez használt programok készítésekor a korábbi munkák tanulságaiból okulva igyekeztünk az egyszerűségre és az áttekinthetőségre törekedni. Ebben némiképp akadályozott bennünket a fejlesztőeszköz és a hozzá tartozó egyszerű C-szerű nyelvhez készített fordítóprogram, amely egy programon belül csak nyolc szubrutint enged használni, és szubrutinból nem engedélyezi másik szubrutin hívását. A program készítésekor törekedtünk az általánosságra is, amennyiben egy célhardverre készült monolitikus program esetén egyáltalán beszélhetünk erről.

Felépítéséből adódóan a robotunk hatféle mozgást ismert, melyekhez egy-egy szubrutint írtunk: előremenet (go_forward), hátramenet (go_backward), balkanyar (turn_left), jobbkanyar (turn_right), balraforgás (sharp_turn_left), jobbraforgás (sharp_turn_right). Az utóbbi kettőt nagyon jól ki tudtuk a kezdeti útkeresésnél, illetve a bizonytalan helyzetekben. A robot helyzetének meghatározására három érzékelő szolgált, a kezdeti kalibráció után a mért értékek alapján meglehetősen nagy biztonsággal meg lehetett határozni, hogy utat vagy talajt érzékelnek.

Mindegyik program az út keresésével indul: ez helyben forgást jelent egészen addig, amíg a mért értékek eltéréséből arra lehet következni, hogy a bal és a jobb szenzor közül az egyik utat, a másik földet érzékel, a későbbi összehasonlításhoz a mért értékeket eltároljuk. A programok innentől kezdve egy végtelen ciklusban folyamatosan kiértékelik a robot helyzetét és változtatják a mozgás irányát a hajtott kerekek előre, illetve hátramozgatásával. Megállásra nincs szükség, és a motorok sebessége is állandó.

A két program alapvetően az általuk implementált állapotátmenet-táblában különbözik (fekete jelöli az utat, piros a talajt):

 
Első program
Második program
1
 előremenet  előremenet
2
 előremenet  előremenet
3
 előremenet  balkanyar
4
 előremenet  jobbkanyar
5
balkanyar balkanyar
6
 jobbkanyar  jobbkanyar

A programokban közös az is, hogy a következő mozgás (akció) meghatározásához két bizonytalan állapot (7-es és 8-as) esetén felhasználják az előző állapotot is: ez az a két állapot, amikor a bal és jobb első érzékelő egyike sincs az úton:

Előző:
balforgás hátramenet
előző mozgás hátramenet
balkanyar balforgás
jobbkanyar jobbforgás
balforgás balforgás
jobbforgás jobbforgás
előző mozgás hátramenet
hátramenet előző mozgás

Bár a két program csak a két állapot (3-as és 4-es) esetén dönt eltérően, a robotok viselkedésében mégis jelentős eltérés figyelhető meg: míg az első programmal a robot egyenletesebben megy, addig a másodikkal sokkal inkább "riszál", egyenes úton is sokat forgólódik, viszont érzékenyebben reagál, jobban a kerekei között tudja tartani az utat. Az általunk épített tesztpályákon ugyanakkor mindkét robot hibátlanul végigment.


Picture 40.jpg

Picture 41.jpg

Picture 42.jpg

Picture 43.jpg

 

2. feladat: mentőexpedíció

Van egy négyzet alakú terület és két robot. Az egyik robot (slave) áll a terület egy tetszőleges pontján. A másiknak (master) meg kell őt keresnie és vissza kell hoznia a kiinduló pontra. A kommunikáció a robotokat vezerlő RCX egység infravörös portján zajlik.

A kereső robot tervezési szempontjai

- tudjon megbízhatóan 90 fokot fordulni
- tudjon meghatározott hosszan előre menni
- tudja, hogy a koordináta rendszer melyik pontján van
- érzékelje, ha nekimegy valaminek (nem lett megvalósítva)

A kereső robot felépítése

- lánctalpas
- a fej része rögzitett, és ugyanolyan magasan van, mint a slave robotnál
- ütközője van abba az irányban, amerről a slave robotot várja

A kereső robot algoritmusa

- négyzetrácson közlekedik, így mindig tudja, hogy hol jár
- pásztázó módon végigjárja az egész területet
- ha meglátja a másikat, megáll es várja hogy az jelet adjon neki
- [a másik odamegy és amikor odaér jelet küld]
- a jelre ez elindul, es elmegy az alapvonalig, ott bevárja a másikat
- visszatér a kiinduló pontra, és folyamatosan küldi a jelet hogy hazaért

Az 'elveszett' robot tervezési szempontjai

- könnyen és megbízhatóan forduljon egy meghatározott irányba
- széles területet lásson be
- legyen képes követni a másikat, azaz feléje menni, és ütközés esetén megállni

Az 'elveszett' robot felépitése

- három kerekű
- a fej része forog, es érzékeli, hogy éppen merre áll
- érzékeli az ütközést

Az 'elveszett' robot algoritmusa

- nem a négyzetrácson közlekedik, csak a másikat követi
- kiinduló helyzetben a fejét ide-oda forgatja és várja, hogy megjelenjen a kereső
- ha meglátja a másikat, a testét a jel irányába forditja és előremegy egy kicsit
- ezt addig ismétli amig az ütközője nem jelez, most ott van a másik robot mögött
- küld neki egy jelet, hogy elindulhat
- addig követi és 'lökdösi' a másikat, amíg azt jelet nem kapja, hogy már otthon vannak
- különben ha elveszítette a jelet akkor keres (forgatja a fejét és néha megmozdul)

Nehézségek

- Nehéz volt 90 fokos kanyart beállitani. A robot most sem kanyarodik tökéletesen, néha kicsit kevesebbet, néha kicsit többet kanyarodik. Emiatt nem teljesen oda ér vissza, ahova kellene
- más fajta padlón egész máshogy kanyarodik, 90 fok helyett 15 fokot
- ha szemben áll a másikkal akkor távolról is látja, túl messziről
- ha viszont rossz irányból megy felé (a másik robot látószöge kb. 180 fok) akkor nekimehet úgy hogy nem érzekeli. Ez orvosolható lenne úgy, hogy a kereső roboton is lenne ütközes-érzékelő, és ha nekiütközött a masiknak, megkerülné azt
- az infravörös jeladó csak egy irányban képes adni, a vevő viszont széles szögben vesz. Emiatt előfordulhat az, hogy a kereső meglatja a másikat és megáll, de az 'elveszett' nem látja meg a keresőt. A jelenlegi algoritmusokkal ez patthelyzet, mert egyik sem mozdul meg
- ahhoz hogy mindkét robot nagy megbizhatósággal müködjön (pl. nagyobb területen) még sok minden javitani való lenne


Picture 45.jpg

Picture 47.jpg

Picture 48.jpg

Picture 49.jpg

 

Készült: 2001. április-május