IX. TavIR programozói verseny: Bessenyei Szilárd - Differenciál hajtással rendelkező robot kivitelezése és szabályozása

Differenciál hajtással rendelkező robot kivitelezése és szabályozása - Összefoglalás

A mobil robotok viselkedése mint az irányítás, feltérképezés és a pozíció meghatározása nagyon fontos. Nagyon sok kutatást végeztek a közelmúltban mobil robotokkal kapcsolatban (Wata-nabe és Yuta, 1990; Komori 1992; Barshan 1994; Cooper és  Durrant-Whyte 1994; Komoriya és Oyama 1994; Maeyama 1994; Tonouchi 1994; Borenstein 1996; Maeyama 1996; Borenstein és Feng 1997; Maeyama 1997; Abott és Powell 1999; Becker és Simon 2000; Hashimoto 2000) {[4]}.

Ez az ága a robotikának azért is fontos, mert így olyan helyeket is megtud az ember közelíteni, amelyet eddig nem bírt, mint a pl. Mars.

A szerző munkájában egy kereken guruló mobil robotot valósított meg. A robot differenciál hajtással rendelkezik, amely igen elterjedtek számít napjainkban, számos jó tulajdonságának köszönhetően.

A robotot egy ATmega2560 mikrovezérlővel rendelkező Arduino lappal, egy saját fejlesztésű illesztő kártyával, szenzor-elektronikával, két egyenáramú motorral és két akkumulátorral rendelkezik. A szerző beszél a megépítés folyamatáról és tapasztalatairól. A stratégiai szintű irányítás programja egy PC-alapú architektúrán fut, amely Bluetooth-on keresztül kommunikál a robottal. Ez a program a robot által küldött értékeket képes vizuálisan megjeleníteni, amely által láthatjuk a mérési eredményeket. Végül bemutatásra kerül egy szenzorok fúzióján alapuló szabályozó algoritmus, amely több szenzor jelét figyelembe véve javítja a szabályozás hatásfokát.

A bevezető végén, a szerző háláját fejezi ki Istennek, hogy adott neki erőt és egészséget a munkához, és külön köszönetét a mentornak, Dr. Pletl Szilveszternek aki támogatott, és kedvező feltételeket biztosított a munka végzéséhez, Szegedi Mihálynak, aki segített a nyomtatott áramkör kimaratásában és tanácsaival, ICB Tech cég munkásainak, és Burkus Ervinnek, akik támogatták ötleteikkel és tapasztalataikkal.

Bessenyei Szilárd [bessszilard (kukac) gmail (pont) com]

Differenciál hajtással rendelkező robot kivitelezése és szabályozása

1. Beágyazott rendszer

Az Arduino egy az Atmel AVR mikrovezérlő családra épülő, szabad szoftveres elektronikai fejlesztőplatform, arra tervezve, hogy a különböző projektekben az elektronikus eszközök könnyebben hozzáférhetőek, kezelhetőek legyenek {[2]}. Széles körben használják, mivel olcsó, könnyen beszerezhető, nem kell hozzá külső programozó és több eszköz is csatolható hozzá.

A fejlesztői platform az integrált fejlesztői környezet (IDE) és az Arduino lapból áll.

A fejlesztői környezet segítségével írjuk meg a programot, ahol van lehetőség tesztelésre is. Az elkészített programok USB-n keresztül feltölthetők az Arduino lapra.

A fejlesztő környezet ingyenes, felhasználó barát és a beépített függvényekkel összetettebb feladatokat egyszerűbben meg lehet oldani.

A munkámhoz Arduino Mega 2560-os a mikrovezérlőt használtam, amely egyik legnagyobb tudású Arduino lap. Többek között nagy előnye, hogy egyszerre több soros portot is tud kezelni, ez mellett 5 timer van benne, 6 megszakítással rendelkező bemenet, és a többi Arduino laphoz képest sok ki/bemenettel rendelkezik.

Azért választottam ezt a fejlesztőplatformot, mivel ingyenes, jól dokumentált. Az Arduino lapot AVR programozó nélkül is fel lehet programozni (mivel van rajta bootloader), és vannak hozzá különböző modulok (Bluetooth, ultrahangos távolságmérő).

2. Differenciál hajtás 

Két kerék felelős a meghajtásért és a fordulásért. Mind a két kereket egy-egy külön vezérlésű motor hajtja meg. A robot mozgása attól függ, hogy melyik kerék milyen irányú és sebességű forgást végez. Bonyolultabb az egy kerekes meghajtástól, mert itt a két kerék forgását összehangolni és koordinálni kell ahhoz, hogy a robot a megfelelő mozgást el tudja végezni. 

Két fajtáját különböztetjük meg:

  • egy passzív kerekes,
  • két passzív kerekes.

A két felépítés között a legnagyobb különbség a robot forgáspontjának elhelyezkedése, mivel az minden esetben a két meghajtott kerék „tengelyén” helyezkedik el.  



Ha a kereket egyforma irányba vannak meghajtva, akkor a robot mozgása egyenes irányú. Abban az esetben, ha valamelyik kerék forgását lelassítjuk, akkor a mozgó robot a lassított kerék irányába fog kanyarodni. (a kanyarodás élessége függ a két kerék forgása közötti sebesség különbségétől). Ha a kerekeket ellenkező irányba, de azonos sebességgel forgatjuk meg, akkor a robot egy helyben a saját forgástengelye körül fog forogni. {[4]}

 

A kerekek kerületi sebessége a következőképpen írható fel:

A következő mozgási fajták lehetnek, ha vL: bal kerék kerületi sebessége és vR: jobb kerék kerületi sebessége:

  • Egyenes haladás: vL = vR, vL>0
  • Ívben haladás: vL > vR vagy vL > vR
  • Helyben megfordulás (óramutató járásával ellentétesen) vL = -vR, vL>0

A munkámban olyan robotot készítettem és szabályoztam, ami egy passzív kerékkel rendelkezik. Fontos az, hogy a robot váza vízszintes legyen, mert csak akkor lehet pontos irányítást végezni.

3. A mobil robot terve

A munkámban egy differenciál hajtással rendelkező robotot valósítottam meg, amely egy passzív kerekékkel rendelkezik. Előnye, az, hogy egy kerékkel is hasonló eredményt el tudunk érni, mint a két passzív kerékkel rendelkező hajtásnál.



Az irányítás hierarchiája

A robothoz beágyazott rendszerként egy Arduino alapú ATmega2560 mikrovezérlőre épülő, szabad szoftveres elektronikai fejlesztőplatformot használtam. és ez mellett egy saját fejlesztésű illesztő kártyát, szenzor-elektronikát, és két egyenáramú motort használtam. A robotot egy PC-n általam kialakított programmal tudjuk irányítani.

Megírásakor fontos szempont volt, hogy felhasználó barát legyen, és ez mellett, hogy képes legyen a mikrovezérlő által mért eredményeket vizuálisan megjeleníteni. A PC Bluetooth-on keresztül kommunikál a beágyazott rendszerrel. Az irányítás teljes hiearchiáját az ábra mutatja.

Ahhoz, hogy a leadott parancsot a robot pontosan végre tudja hajtani, az Arduino egy hurkú szabályozó algoritmust használ. A szabályozó körben két érzékelő jelét dolgozza fel (enkóder és gyorsulásmérő). Az enkódereket újrahasznosítottam két régi számítógépes egérből. Az egerek eredeti áramkörét tanulmányozva, kis változtatással alakítottam ki az enkóderek elektronikáját.

Két egyenáramú motor hajtsa meg a robotot, amelyek gyárilag fel vannak szerelve reduktorral. Motorok irányítására, és vezérlésére L293B integrált áramkört használtam, amely dupla H hidat tartalmaz, ami azt jelenti, hogy egy motormeghajtó IC-vel megbírjuk hajtani mindkét motort.



A mobil robot vázlata

Munkám során szabályozó algoritmust valósítottam meg, ami a L. Jones, Anita M. Flynn, Bruce A. Seiger csapata által 1999-ben bemutatott algoritmus tovább fejlesztett változata.

4. Az illesztőkártya

A mikrovezérlő áramköre mellé szükséges volt egy másik áramkör, amely egyszerűen csatlakoztatható rá, valamint a következő elemekkel kapcsolja össze a mikrovezérlőt:

  1.   Motorvezérlő IC (L293B), motorok,
  2.   JY-MCU Bluetooth Wireless Serial Port Module (HC-06),
  3.   Enkóderes lap,
  4.   Gyorsulásmérő (accelerometer),
  5.   Akkumulátorok,
  6.   Státusz LED-ek (hibakereséshez),
  7.   2 szervó motor és egy ultrahangos távolság mérő, amelyek nem lettek bekötve.

4.1. Az illesztőkártya megtervezése

Az illesztőkártyát az Arduino Mega2560-as áramkör lap csatlakozóira méreteztem, amely így az áramkör lapjához egyszerűen illeszthető. Mivel maga az Arduino kapcsolási rajza, és nyomtatott áramköre is az interneten ingyenesen elérhető, ezért annak alapján dolgoztam. A lap megtervezéséhez Eagle 6.5.0. laptervező program ingyenes verzióját használtam.



Az illesztőkártya kapcsolási rajza



Az illesztőkártya

 

Az eredmény pedig maga a robot lett felül illetve oldalnézetből:

5. Szenzor fúzióval való szabályozás

A munkámban enkódert és a gyorsulásmérő fúzióját alkalmazom. Előnye, hogy nem csak az enkóder jelét vesszük így figyelembe, hanem a gyorsulásmérőjét is, így nem csak a motorok által generált impulzusokat tudjuk, hanem a tengelyelmozdulást is.

A gyorsulásmérőnél elég volt csak az egyik tengelyen való változást néznem. Ahhoz, hogy tudjam, hogy milyen jeleket ad a gyoruslásmérő nyugalmi állapotban, le kellett kalibrálni.  A kalibrációt a robot akkor végzi el, amikor bekapcsoljuk. 16 mérést végez, és ebből átlagot számít. A kapott értékeket a mikrovezérlő változókban tárolja, amiket az összehasonlításhoz használ fel, minden alkalommal a szabályozásnál. Nem volt szükség, hogy EEPROM memóriába tároljam, mivel sűrűn újra kell kalibrálni a gyorsulásmérőt. Itt az enkódert 20 Hz-el mintavételeztem, a gyorsulásmérőt pedig 100 Hz-el. A gyorsulásmérő mért jelét először egy átlagoló szűrővel (moving average filter) megszűröm, azután leintegrálom, és a szabályzó kőrhöz csatolom. {[1]}

A jelet azért kellett megszűrni, hogy a magas frekvenciás összetevők eltűnjenek. Ha bal felé gyorsul a robot, a gyorsulásmérő és a kalibrációs érték különbsége pozitív, ezért a 45. ábra szerint kellett hozzácsatolni. Ez a szabályozó algoritmus is nem csak egyenesen képes haladni, hanem egy bizonyos íven is.

Más munkában Kálmán szűrőt alkalmaztak, de számomra az átlagoló szűrő is megfelelt {[1]}. Ez mellett még figyelembe vettem a modell aszimmetriáját. Több esetben is használtak szenzor fúziót hasonló feladatokra. A gyakorlatban ezeket az algoritmusokat a differenciál hajtású roboton megvalósítottam.

Bessenyei Szilárd {bessszilard (kukac) gmail (pont) com}

6. Felhasznált irodalom

  [1] Embedded Robotics - Thomas Bräunl

  [2] {http://hu.wikipedia.org/wiki/Arduino} letöltve: 2013.11.07.

  [3] {http://arduino.cc/en/Main/arduinoBoardMega2560} letöltve: 2013.11.07.

  [4] Positioning System for 4-Wheel Mobile Robot: Encoder, Gyro and Accelerometer Data Fusion with Error Model Method - Ibrahim Zunaidi , Norihiko Kato, Yoshihiko Nomura and Hirokazu Matsu 2006

TavIR-Facebook