R11

5Wiki
Versio hetkellä 21. huhtikuuta 2011 kello 01.08 – tehnyt Mokis (keskustelu | muokkaukset)

Loikkaa: valikkoon, hakuun


R11
Aloitettu: 2009
Tyyppi: Sulautettu järjestelmä
Tekijät: Mokis
Tila Käynnissä


R11 on sekalaiseen harrasteluun rakennettu, pyörillä kulkeva 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. Fyysiset mitat ovat noin 30x17x25cm (kls) ja painoa on kertynyt nelisen kiloa. Aiemmin robottissa oli myös viivanseurausanturi (8x QRE1113 ir-antureita) ja sillä osallistuttiin robosodan viivanseurauskisoihin. Sijoitus kaikissa kilpailuissa oli kolmas.

Tilanne 03/2011

[Kuva] 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 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 mikroprosessorille. Mikroprosessorina toimii PIC 18F4431

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: Nimipalvelin, Datapalvelin ja varsinainen ohjausprosessi. Nimipalvelinta tarvitaan prosessien yhdistämiseen, kun ne käynnistyvät. Datapalvelin lukee PC:hen kiinnitettyjä anturia (Kinectiä ja web-kameraa), parsii niiden datan ja tarjoaa sitä tarvittaessa muille prosesseille. Lisäksi datapalvelin 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.

[kuva] 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ä keinotekoisia merkkejä (visual servoing). Merkit ovat laadittu niin että niiden tunnistaminen kuvasta on mahdollisimman helppoa ja luotettavaa.

[kuva] 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) saadaan 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 koostuva 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 640×480 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 640×480 resoluutiolla 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.

Kartoituksen ensimmäisessä versiossa käytettiin vain yhtä pikseliriviä syvyyskuvasta, ja sitäkin vajaalla resoluutiolla. Tulokset olivat kuitenkin suhteellisen hyviä harrastusprojektiksi (video kartoituksesta). Tulevaisuudessa syvyyskuvaa on tarkoitus hyödyntää monipuolisemmin paitsi kartoituksessa, myös paikannuksessa.

Henkilökohtaiset työkalut
Nimiavaruudet

Kirjoitusjärjestelmät
Toiminnot
Valikko
mode 5w
Työkalut