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
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