Mobo projekti

Projektin tarkoitus on tehdä mobiilirobotti (mobo = mobiilirobotti), joka muodostaa ympäristöstä kartan, jota käytetään myöhemmin paikannuksen ja navigointiin. Sain idean projektista jo vuonna 1997, mutta silloin ei taidot riittäneet ohjelmointiin ja robotin rakentamiseen, joten aloitin opiskelemaan ohjelmointia ja rakentamiseen tarvittavia taitoja. Ideana oli tehdä mobiilirobotti, joka on radion avulla yhteydessä tietokonesovellukseen, sovellus kerää robotin antureilta tietoa ja näyttää ne käyttäjälle. Käyttäjä voi vaikuttaa robotin kulkuun eli radion pitää olla kaksisuuntainen.

Projektin historiaa

Vuonna 2001 aloitin tekemään ensimmäistä versiota robotista, mikro-ohjaimena on PIC16F877 ja antureina optiset anturit renkaissa (20 pulssia/renkaan kierros) ja edessä ultraäänietäisyysanturi. Radiopiirinä on nRF401, joka toimii kaksisuuntaisesti. Tietokoneeseen tarvittava radio kytketään mikro-ohjaimen avulla sarjaporttiin. Alla on kuva ensimmäisestä versiosta.

Versio 1 rakennettu vuosina 2001-2004
v1.JPG ohjelma_v1.JPG
Kuvassa oleva ohjelman näkymä on simuloitu, ei robotilta saatujen tietojen perusteella tehty, koska en saanut robottia koskaan toimimaan.

Versio 2 rakennettu vuosina 2004-2007
MSP430F1611, radiopiiri nRF2401, IR etäisyysanturi (GP2D12), optiset anturit renkaissa 256 pulssia/renkaan kierros. Tietokoneeseen tarvittava radio kytketään mikro-ohjaimen avulla USB -porttiin (FT232 piirillä).
v2.JPG ohjelma_v2.JPG
Tämä versio toimii hyvin, mutta ajetun matkan mittaaminen ei ollut riittävän tarkka.

Ohjelma on kehittynyt ensimäisestä versiosta paljon, sain lopulta tehtyä ohjelman joka lähettää ohjauskommennot radion kautta robotille. Ohjauskomennot ovat ajettavan matkan pituus ja suunta, jotka saadaan käyttöliittymästä siten, että kun käyttäjä painaa hiiren nappia niin ohjelma lukee kursorin kohdalta koordinaatit. Robotti lähettää ajon aikana tietoa mitatusta matkasta ja etäisyydet mahdollisiin esteisiin.
Ohjelma ei kuitenkaan sisältänyt vielä navigointi ominaisuutta, mutta onneksi löysin sivulta [1] hienon esimerkin, miten robotin liikkumiseen saa enemmän älyä. Ohjelma näyttää käyttäjälle sinisellä neliöllä missä robottiauto on päivitys hetkellä ja vihreällä neliöllä näkyy maalipiste minne robotin pitäisi mennä. Maalipiste on annettu käyttäjän toimesta hiiren avulla painamalla halutussa ruudussa hiiren nappia. Robotti lähtee ajamaan kohti maalipistettä, mutta jos matkalla on esteitä sovellus yrittää löytää vaihtoehtoisen reitin maalipisteeseen ja näyttää käyttäjälle mustilla neliöillä esteet. Tämä navigointi on kuitenkin aika rajoittunutta, robottia ohjataan 90 asteen käännöksillä ja esimerkiksi 10 cm kerallaan eteenpäin. Huonoa tässä on myös se, että robotti tietää matkan mittauksen avulla sijaintinsa, joten mekaniikan takia paikkatieto muuttuu nopeasti virheelliseksi (jo muutaman metrin jälkeen).

Versio 3 rakennetu vuonna 2009.
PIC18F452, radiona bluetooth, IR etäisyysanturi (GP2D12) , optiset anturit moottoreissa 2000 pulssia/renkaan kierros.
v3.JPG testiajo.JPG
Tämä versio alkaa olla jo riittävän hyvä, jotta se pystyy mittaamaan kunnollisesti ajettua matkaa, mutta tässäkin muutaman metrin ajon jälkeen robotti on eri paikassa mitä se luulee olevan. Ohjelma näyttää sinisellä viivalla robotin kulkeman reitin ja mustilla pisteillä esteet. Matkamittausantureilla tapahtuva paikannus on selvitetty hyvin sivulla [2]. Tämä versio on vielä keskeneräinen, seuraavaksi teen ohjelmaan paremman paikannuksen, ajattelin käyttää siihen SLAM -menetelmää [3].

Paikannus

Projektin ideana siis muodostaa robotin liikkumaympäristöstä kartta, jota käytetään myöhemmin navigointiin. Molemmissa tarvitaan paikkatietoa, joka tällä hetkellä on vain matkamittausantureiden avulla tapahtuva paikannus [4]. Kuten kuvista nähdään on robotin mekaaniikka pyritty pitämään yksinkertaisena eli kaksi vetävää pyörää ja yksi vapaasti liikkuva tukipyörä, ohjaaminen tapahtuu muuttamalla vetävien pyörien nopeutta eli robotin ohjaaminen perustuu differentiaaliohjaamiseen [5].

Tulevaisuudessa robottiin tulee enemmän etäisyysantureita ja eri antureiden tietojen yhdistelemistä sopivalla algortimilla (SLAM), jolloin paikkatieto on luotettavampaa. SLAM -menetelmässä voi käyttää Kalman- tai partikkelisuuodinta, todennäköisesti käytän partikkelisuodinta.

Ohjelma

Käyttöliittymä löytyy SRY:n versionhallinnasta:
http://code.google.com/p/srycode/source/browse/#svn/trunk/tyokalut/Robomap

Robotin ohjelma:
http://code.google.com/p/srycode/source/browse/#svn/trunk/robotit/Mobo_v3
(CCS:n kääntäjä)

Markus J
9.3.2010

Linkkejä
[1] http://www.societyofrobots.com/programming_wavefront.shtml
[2] http://www.geology.smu.edu/~dpa-www/robo/challenge/index.html
[3] http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping
[4] http://en.wikipedia.org/wiki/Odometry
[5] http://www.societyofrobots.com/programming_differentialdrive.shtml

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License