R11

(0 comments)

Sekalaiseen harrasteluun rakennettu robotti, joka osaa navigoida ja kartoittaa. Kiinnitettynä on tällä hetkellä ainoastaan navigointiin käytettävä web-kamera, mutta lähiaikoina robottiin on tarkoitus lisätä myös Kinect ja ultraäänianturi. Aiemmin robottissa oli myös viivanseurausanturi ja sillä osallistuttiin robosodan viivanseurauskisoihin. Sijoitus kaikissa kilpailuissa oli kolmas.

Rakenne ja vähän muutakin, 03/2011:.

R10 @ 27.3.2011

 

Runko on rakennettu pääosin 4mm polyeteenistä ja pyörät sorvattiin polyasetaalista. Kaksi vetävää pyörää on kytketty askelmoottoreihin ja kolmas, vapaasti pyörivä ja kääntyvä pyörä seuraa takana.

Kumpaakin, suoraan vetäviin pyöriin kytkeytyvää, askelmoottoria ohjataan omalla moottoriohjaimellaan, joissa on myös säädettävä virranrajoitustoiminto. Käytännössä toteutus on L297 + L298-piirien referenssikytkentä kasattuna itsetehdylle piirilevylle. Moottorien ohjaimet ovat erillisiä yksiköitä ja ne ovat yhdistetty lattakaapelilla mikroprosessorilevylle.

Mikroprosessorilevy paitsi ohjaa askelmoottoreita, on myös yhteydessä ylemmällä tasolla olevaan fit-pc 2:een RS-232-väylällä. Vapaita I/O-pinnejä on  ~20. Mikroprosessorissa suoritettavana ohjelman pääsilmukka on varattu sekalaisille toiminnoille, kuten sarjaporttin anturien tiedon lukuun/kirjoitukseen. Askelmoottorien ohjaukset ovat omissa kellokeskeytyksissään. Moottorien pyörimisnopeutta muutetaan keskeytysnopeutta muuttamalla (aina keskeytyksen tultua muutetaan moottorin ohjaussignaalin tilaa). Sarjaporttiin on määritelty kevytrakenteinen prototokolla, jonka päällä varsinainen tieto siirretään. Jokaisen viestin alkuun on määritelty aloitusmerkki., jonka jälkeen tulee moottorinohjaukseen tarvittavat 5 tavua dataa, loput paketin sisällöstä voidaan määritellä tarpeen mukaan. Paketti voi olla periaatteessa rajoittamattoman pituinen, kunhan sekä lähetys- että vastaanottopää käyttävät samaa paketin rakennetta. Minkäänlaisia tarkistuksia virheiden varalle ei siis ole.

PC:ssä on tällä hetkellä Windows XP, joka on valikoitunut käyttöön lähinnä paremman hardistuen (logitechin webbikamera, Fit-pc 2:n näytönohjain, Kinectin Python wrapperi) takia.  PC:ssä pyörivät prosessit on koodattu Pythonilla, ja prosessien keskinäiseen kommunikointiin käytetään Python Remote Objects (Pyro)-kirjastoa. Kirjaston ansiosta varsinaisissa prosesseissa ei tarvitse kiinnittää suuresti huomiota prosessien välisen kommunikoinnin turvaamiseen ja datan eheyden tarkistamiseen.

Tällä hetkellä Robotin PC:llä (Fit-pc 2) pyörii kolme python-prosessia: Nimiserveri, Dataserveri ja varsinainen ohjausprosessi. Nimiserveriä tarvitaan prosessien yhdistämiseen, kun ne käynnistyvät. Dataserveri lukee tietokoneeseen kiinnitettyjä anturia (Kinectiä ja webkameraa), parsii niiden datan ja tarjoaa sitä tarvittaessa muille prosesseille. Lisäksi dataserveri ylläpitää tietoa mm. robotin tilasta, sijainnista ja manuaali-/teleoperointitilassa moottorien ohjenopeuksista. Ohjausprosessi on sarjaportin kautta yhteydessä alemmalle tasolle, ja lisäksi se tekee tarvittavat päätökset moottorien nopeuksista. Autonomisessa tilassa se hakee taskeja dataserveriltä ja toimii niiden mukaan (toteutus vaiheessa). Manuaali- ja teleoperointitilassa ohjausprosessi ainastaan reitittää moottorien pyydetyt pyörimisnopeuksista dataserveriltä mikroprosessorille ja vastaavasti toteutuneen askelluksen toiseen suuntaan.

Varsinainen ohjaus tehdään Acer:n kannettavalla/tabletilla (1825PT), joka on WLAN:lla yhteydessä robottiin. GUI on itse tehty käyttäen Pythonia PyGamea, kommunikointiin robotin kanssa käytetään edelleen pyro:a, jonka välityksellä clientillä annetut komennot siirretään dataserverille.

Käyttöliittymä viivanseurausajoilta

Kuvan alalaidassa näkyy kosketusnäytöllä käytettävä rulla ja joypadi. Edellä manittujen lisäksi vihreitä/punaisia painikkeita voidaan käyttää näytöltä painamalla. Muut kentät ovat ainastaan datan esittämistä varten.

Uusi käyttöliittymä (vaiheessa) lainaa joitakin elementtejä vanhasta GUI:sta, mutta kirjoitetaan pääosin uudestaan. Tärkeimmäksi elementiksi tulee karttanäyttö, jonka avulla robotille voidaan antaa taskeja, ja lisäksi sen avulla nähdään robotin ympärillä olevat esteet. lisäksi molempien kameroiden videokuvaa on mahdollisuus esittää käyttöliittymässä (tällä hetkellä webkamera toimii, kinect ei).

Navigointi, versio 1.0:

Kaikessa yksinkertaisuudessaan robotissa oleva kamera kuvaa suoraan ylöspäin ja koittaa tunnistaa kattoon kiinnitettäviä merkkejä (visual servoing). Merkit ovat laadittu niin että niiden tunnistaminen kuvasta on mahdollisimman helppoa ja luotettavaa.

Näkymä navigointiin käytetystä kamerasta

Merkkien paikka on sidottu tilan koordinaatteihin, ja näin robotin koordinaatit voidaan laskea, jos tiedetään oma siirtymä suhteessa johonkin merkkiin. Jos oletetaan että kalibroinnit on suoritettu oikein ja tiedetään kameran katselukulmat, oma etäisyys merkistä (r) laskettua trikonomertialla kun tiedetään merkin etäisyys pikseleinä kuvan keskipisteestä ja huonekorkeus. Edellä mainittu laskutoimitus antaa vasta etäisyyden merkistä, toisin sanottuna robotti voi sijaita r-säteiden ympyrän kaarella missä pisteessä tahansa ja lisäksi sen suuntakulma ei ole tunnettu.

Merkin sisällä olevan koodauksen ansiosta sen suuntakulma (heading) voidaan tunnistaa, sillä koodaus on joka suuntaan epäsymmetrinen. Lisäksi koodaus yksilöi jokaisen merkin ja erottaa sen luonnollisista objekteista, jotka saattavat olla sopivan kokoisia ja neliömäisiä. Merkin orientaatiosta saadaan suuntakulman ero robottiin ja sitä kautta edelleen robotin suuntakulma. Tämän jälkeen oma paikka ympyrän kaarella on yksiselitteinen piste. Näin ollen selville saadaan sekä x ja y, että suuntakulma.

Kameranavigoinnin lisäksi robotti laskee paikkaansa merkintälaskua (odometry) hyväksikäyttäen. Se tarkoittaa käytännössä robotin paikan laskentaa matematiikkaa hyväksikäyttäen kun tiedetään pyörien hakaisija, niiden etäisyys toisistaan, sekä kummankin pyörän kulkema matka. Kun em. suureista kostuva yhtälö ratkaistaan tarpeeksi usein (20-100 kertaa sekunnissa), saadaan hyvä arvio robotin tämänhetkisestä paikasta, jos paikka on tunnettu jollain edeltävänä ajanhetkenä. Haittapuolena menetelmässä on, että virhe kasaantuu sitä suuremmaksi, mitä kauemmaksi mennään ajanhetkestä, milloin robotin paikka tiedettiin suhteellisen varmasti. Merkintälaskua tarvitaan etenkin tilanteissa, joissa kamera kadottaa kattoon kiinnitetyt merkit tilapäisesti, tai pidemmäksi ajaksi näkyvistään. Toisaalta Merkintälaskun avulla voidaan poistaa kameraan perustuvan navigoinnin kohinaa merkittävästi, vaikka merkit olisi näkyvissäkin. Tämä johtuu siitä, että merkintälaskun tulos ei kohise.

Riippuen kameran resoluutiosta, kalibroinnista, huonekorkeudesta, yms. edellä mainitulla navigointimetodilla saavutetaan normaalitilanteessa noin +- 0.5cm paikoitustarkkuus, ja alle 3 asteen kulmavirhe. (olettaen, että ainakin yksi navigointi-merkki on näkyvissä)

Kartoitus, versio 1.0:

Kartoitukseen käytetään Xbox 360:een tarkoitettua Kinect-peliohjainta. Laitteessa on tavallinen 640x480 näkyvän alueen kamera ja  lisäksi ir-projektori, sekä sille herkkä, huomattavasti suuremmalla resoluutiolla toimiva, syvyyskuvaa muodostava kamera. Syvyyskuva tulee kuitenkin laitteesta ulos samalla 640x480 reosluutiolla kuin rgb-kuvakin. Syynä tähän on se, että syvyyskamera tarvii useamman ir-projektorin heijastaman pisteen koodatakseen yksittäisten pikselien etäisyyden kamerasta. Rgb- ja syvyyskameran streami on keskenään synkroonissa, ja lisäksi niiden pikselit vastaavat täydellisesti toisiaan. Syvyysinformaatio jokaiselle pikselille tulee 11 bittisenä arvona, jonka merkitys perustuu vain harrastelijoiden testeihin. Kaiken kaikkiaan se on suhteellisen epälineaarinen, eikä vielä kolmannen asteen funktiokaan approksimoi etäisyysarvon käyttäytymistä täydellisesti. Openkinectin sivulta löytyy lisätietoa, sekä mm. ajurit ja kirjastot eri käyttöjärjestelmille ja ohjelmointikielille. Microsoft on kuitenkin huomannut harrastelijoiden kiinnostuksen laitetta kohtaan, ja on luvannut (luultavimmin .net) SDK:n kevään aikana.

Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required