Lyhyt opas Martin käyttöön

Tietojenkäsittelytieteen laitoksella on tutkimuskäyttöön tarkoitettu robotti, joka on nimeltään Martti. (Mobiili autonominen robotti). Robotti on Nomadic Technologies Inc.:n valmistamaa Super Scout II-mallia. (Uusimpien tietojen mukaan Nomadic Techologies on lopettanut robottien valmistuksen).

Seuraavassa on kuvattu lyhyesti robotin laitteistoa, ohjelmistoja ja peruskäyttöä.

1 Robotin sensorit ja aktuaattorit

Robotissa on sensoreina pyöräodometria, törmäystunnistimet, ääniluotaimet ja värikamera. Aktuaattoreina robotilla on kaksi erikseen kontrolloitavaa pyörää sekä kameran kohdistamiseen tarkoitettu pan-tilt-yksikkö. Alla on lyhyesti kuvattu eri sensorit ja aktuaattorit.

Sensorit

Pyöräodometria

Pyörien akseleiden pyörimistä havainnoimalla saadaan arviot kuljetusta matkasta ja rintamasuunnasta. Paikka- ja suunta-arvioiden virhe kasvaa kumulatiivisesti, ja pitkillä matkoilla niihin ei tulisi luottaa suoraan.

Ohjelmointirajapinta (Nclient.h) tarjoaa suoraan arviot robotin paikka- ja suuntakoordinaateista, sekä pyörien pyörimisnopeuksista. Koordinaatiston origo voidaan asettaa esim. ohjelman käynnistyessä.

Törmäystunnistimet

6 kappaletta. Törmäystunnistimet muodostavat robotin ympärillä olevan punaisen puskurin. Törmäystunnistimien avulla voidaan havaita fyysiset kontaktit. Ohjelmointirajapinnan (Nclient.h) kautta voidaan tutkia, mitkä tunnistimista ovat painettuina.

Ääniluotaimet (sonarit)

16 kappaletta. Sonareiden avulla voidaan mitata etäisyyksiä robotin ympärillä oleviin objekteihin. Pisin havaittava etäisyys on n. 255 tuumaa (n. 6,5 m) ja lyhin n. 4 (10 cm) tuumaa. Mittaustarkkuudet kuitenkin vaihtelevat merkittävästi, ja sonardata on virheherkkää mm. peiliheijastusten takia. Super Scoutin sonarit ovat tasavälein sijoitettu robotin ympärille 22,5 asteen välein. Sonareiden keilat eivät mene päällekkäin, vaan ovat n. 22 asteen levyisiä.

Ohjelmointirajapinnan (Nclient.h) kautta saadaan kunkin sonarin antama etäisyysmittaus tuumina (väliltä 0-255). Arvo 255 tarkoittaa, ettei sonar havainnut objektia välillä 0-254. Huomaa yksikön ero odometria- ja liikekomentoihin, jotka annetaan tuuman kymmenesosina.

Värikamera

Värikameran kuvaa kaapataan kuvankaappauskortilla. Kuvankaappauskortissa on Bt848-siru, joka mahdollistaa kuvan kaappauksen eri resoluutioilla ja eri muodoissa. Tyypillisesti kaapataan RGB-kuvaa, mutta kuvaa voidaan kaapata mm. UYV422 muodossa esimerkiksi värisegmentointia varten (kts. CMVision alla). Resoluutio voi vaihdella 48x32 ja 768x480 välillä, ja esimerkiksi 768x32 kuvan kaappaminen on mahdollista.

Kuvankaappauksessa käytetään Video4Linux-projektin videodev.h-rajapintaa.

Aktuaattorit

Pyörät

Robotissa on kaksi erikseen ohjattavaa pyörää. Pyörät voivat pyöriä sekä eteen- että taaksepäin. Robottia on näin mahdollista kääntää paikallaan pyörittämällä pyöriä eri suuntiin.

Ohjelmointirajapinta (Nclient.h) mahdollistaa pyörien kiihtyvyyden ja nopeuden säätelyn, etenemisen halutulla nopeudella tai halutun suuruisen matkan tai käännöksen suorittamisen.

Kameran pan-tilt-yksikkö

Kameraa voi suunnata robottia kääntämättä erillisellä pan-tilt-yksiköllä. Pan-tilt-yksikön avulla on mahdollista suunnata kameraa ylös- tai alaspäin, sekä kääntää kameraa sivusuunnassa. Kameraa ei ole mahdollista kääntää täyttä 360 astetta. Kamera kääntyy kuitenkin riittävästi, jotta 360 asteen näkymän voi muodostaa 6 kuvan avulla. Yksi kuva kattaa n. 60 asteen näkymän.

Pan-tilt-yksikköä ohjataan sarjaportin kautta, mutta yksinkertaisen ohjelmointirajapinnan (pantilt.h) avulla voi pan-tilt-yksikön asentoa ja nopeutta helposti ohjata. Pan-tilt-yksiköllä on oma mittayksikkönsä (kts. yksikön manuaali tai lyhyt selostus).

Puhesyntetisaattori

Robotissa on erillinen kortti, jolla on mahdollista muodostaa puhetta, mutta kaiuttimen puutteen takia sitä ei ole toistaiseksi kokeiltu.

2 Akut

Robotti saa virtansa kahdesta akusta, joita se lataa automaattisesti olleessaan kytkettynä sähköverkkoon. Ajojen ulkopuolella robotti pidetään kiinni sähköverkossa. Akut latautuvat vain robotin ollessa päällä. Tästä syystä robotti tulee pitää koko ajan päällä.

Akkuja ei koskaan saa päästää kulumaan loppuun, vaan varoitusäänen (pitkä piippaus) kuuluessa on robotti kytkettävä sähköverkkoon, ja akut on ladattava täyteen.

3 Tietokonelaitteisto ja käyttöjärjestelmä

Robotin sisällä on normaali tietokone, jossa on muistia 256 megatavua, n. 5 gigatavun kovalevy, verkkokortti, radiolinkki ja kuvankaappauskortti. Käyttöjärjestelmäksi koneeseen on asennettu laitoksen Red Hat Linux -versio (CSL2), joka on suurinpiirtein Red Hat 6.1:n kaltainen.

Pyöriä ja osaa sensoreista kontrolloi erillinen mikroprosessori. Mikroprosessorin kanssa kommunikoidaan sarjaportin kautta, mutta erillinen ohjelmointirajapinta (Nclient.h) peittää varsinaisen sarjaportin ohjelmoinnin. Sisäisen perus-PC-koneen ansiosta robotin ohjelmia voi kehittää lähes normaaliin tapaa.

Robottiin voidaan kytkeä näppäimistö ja näyttö, jolloin voidaan suoraan käyttää robotin sisällä olevaa PC-konetta. Yleensä ulkopuolisesta koneesta (pekko) otetut ssh-yhteydet ovat käytännöllisempi ja riittävä tapa.

Robotin laitteistoa kuvataan Nomad Scout User's Manual:ssa. Käyttöjärjestelmä on kuitenkin eri kuin Nomadin asentama Linux, eikä manuaalissa mainitusta read-only-mode:sta tarvitse huolehtia.

4 Kommunikaatio

Robotissa on verkkokortti ja erillinen radiolinkki. Robotti muodostaa robottilabran (D427) pekko-koneen kanssa oman verkkonsa, joten siihen saa yhteyden vain pekosta. Muista laitoksen koneista voi kuitenkin ottaa yhteyden pekkoon, ja siitä edelleen marttiin.

Ajojen aikana robottiin voidaan olla yhdeydessä radiolinkin yli. Robotin ollessa paikallaan voidaan radiolinkki ohittaa, ja yhdistää robotti suoraan kaapelilla pekkoon. Tällöin suurien datamäärien, esimerkiksi kuvien, siirtäminen sujuu nopeammin.

Radionlinkin ohitus tapahtuu irroittamalla pekon radiolinkistä (se pikkulaatikko, jossa on antenni) hubiin (se harmaa pitkähkö mokkula pekon päällä) lähtevä johto, ja kytkemällä se robotin sisältä tulevaan verkkokortin johtoon,

5 Peruskäyttö

Robottiin voidaan ottaa yhteys ssh:lla. Turvallisuussyistä Martti muodostaa oman verkkonsa robottilabran pekko-koneen kanssa, joten yhteyden voi ottaa vain pekko-koneesta.

Esim:
ttkurppa@pekko:~$ ssh -l ttkurppa martti
Tiedostojen siirtoa ja ohjelmien kääntämistä voi tehdä etätyönä ottamalla yhteyden pekkoon, ja sieltä marttiin. Mitään robottiohjelmia ei saa ajaa, jollei itse ole läsnä robottilabrassa. Kannattaa myös huomata, ettei martissa kannata käynnistää mitään X-ohjelmia, sillä se on yleensä yhteydessä pekkoon radiolinkin yli, jossa on rajoitettu tiedonsiirtokapasiteetti.

Kun robottissa ajetaan ohjelmia, jotka liikuttavat robottia, on robotti tietysti kytkettävä irti sähköverkosta ja muista johdoista. Robottia voi liikuttaa työntämällä, kun STOP/RUN-kytkin on STOP-asennossa. Kun robottia halutaan liikuttaa ohjelmallisesti on kytkin laitettava RUN-asentoon. Ohjelmia voi kuitenkin ajaa, vaikka kytkin olisi STOP-asennossa. Tällöin vain pyörien liikekomennot eivät välity pyörille asti.

Robotin hätäpysäytys

Omien ohjelmien toimiessa virheellisesti, voi ohjelman keskeyttää, ja ajaa komentoriviltä komennon panic_stop, joka sammuttaa robotin sonarit ja pysäyttää robotin.

6 Ohjelmointi

Robotin perusohjelmointi on kuvattu manuaaleissa Nomad Scout User's Manual ja Nomad Scout Language Reference Manual. Manuaaleissa on useita virheitä, joten kannattaa epäselvissä kohdissa kysyä apua.

Ohjelmien kääntäminen

Ohjelmia voi kehittää missä tahansa laitoksen koneessa, ja siirtää Marttiin vasta oikein kääntyvät ohjelmat. Koska tarvittavat kirjastot ovat laitoksen verkossa ja Martissa eri poluilla, kannattaa pieniäkin ohjelmia varten tehdä oma Makefile.

Tarvittavat pakkaukset ja kirjastot löytyvät

Tästä polusta käytetään jatkossa nimeä ROBOT_DIR.

Robotin ohjelmoinnissa tarvittavat tiedostot Nclient.h, Nclient.o ja Ndirect.o löytyvät hakemistosta ROBOT_DIR/nomad

Kun ohjelmoit laitoksen verkossa, voit kääntää ohjelmia, ja ajaa niitä simulaattorilla. Tällöin linkität ohjelmaasi Nclient.o-tiedoston. Kun haluat ajaa ohjelmaasi oikealla robotilla, on ohjelmaan linkitettävä tiedosto Ndirect.o. Voit etänä siirtää lähdekooditiedostot Marttiin (komento scp on kätevä tässä, kts. man scp), ja kääntää ne siellä linkittäen Ndirect.o-tiedoston ohjelmaan Nclient.o:n sijasta. Makefile helpottaa tässä, itse käytän seuraavan kaltaista yksinkertaista mallia:

CC = g++
CPPFLAGS = -Wall -pedantic  -g -I$(NOMAD_DIR)
LIBS = -lm

# Kommentoi toinen pois sen mukaan oletko martissa vai laitoksen verkossa 
ROBOT_DIR=/home/group/robotics/libs
#ROBOT_DIR=/usr/local/src

# Kommentoi toinen pois sen mukaan, käytetäänkö direct- vai client-modea
MODE = $(NOMAD_DIR)/Nclient.o
#MODE = $(NOMAD_DIR)/Ndirect.o

NOMAD_DIR=$(ROBOT_DIR)/nomad
PANTILT_DIR=$(ROBOT_DIR/pantilt




OBJS = obj1.o obj2.o obj3.o  
ohjelman_nimi: $(OBJS)
        $(CC) $(CPPFLAGS)  -o $@ $(OBJS) $(MODE) $(LIBS)

all: ohjelman_nimi
	
Sivistyneemmät Makefile:n tuntijat voivat viritellä hienompia tapoja.

Robotin liikekomennot

Robotin liikuttamiseen käytetään yleensä jotain seuraavista komennoista: Komennoilla vm ja pr voi ohjata suoraan pyöriä. Scout_vm ja scout_pr ovat yleensä helpompia käyttää:
Esimerkki 1. Käännetään robottia paikallaan 90 astetta vasemmalle: scout_pr(0, 900)
Esimerkki 2. Liikutetaan robottia 40 tuumaa (n. metri) eteenpäin: scout_pr(400,0)

Komennot scout_vm ja scout_pr taas ovat käytännön ohjelmointia helpottavia makroja, joilla robotin liikkumista voidaan ohjata etenemisen ja kääntymisen yhdistelmänä. Makrot on määritelty vm- ja pr-komentojen avulla, ja määritelmät voi katsoa tiedostosta ROBOT_DIR/nomad/Nclient.h.

Esimerkkinä komentojen vm ja pr käytöstä käy ympyrän kaaren ajava rutiini travel_arc.


This page is maintained by
Teemu Kurppa
It was updated on Tue Mar 20 15:28:02 2001