R11

5Wiki
Versioiden väliset erot
Loikkaa: valikkoon, hakuun
(Navigointi versio 1.0)
(jxAAvUnoPYujwRo)
 
(Näytettyjen versioiden välissä on 2 versiota, jotka ovat 2 eri käyttäjän tekemiä.)
Rivi 1: Rivi 1:
{{Projekti
+
b5En syc3b6 kalaa, vaikka se oilkisin terveellistc3a4, siksi voisin ajatella Lysic3a4. Eikc3b6s Aira Samulin mainosta tc3a4tc3a4 Lysic3a4 .?
| nimi = R11
+
| logo =
+
| tyyppi = Sulautettu järjestelmä
+
| tekijät = [[Mokis]]
+
| aloitettu = 2009
+
| 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 [http://fi.wikipedia.org/wiki/Kinect Kinect] ja ultraäänianturi. Fyysiset mitat ovat noin 30x17x25cm (kls) ja painoa on kertynyt nelisen kiloa. Aiemmin robottissa oli myös viivanseurausanturi ([http://www.sparkfun.com/datasheets/Components/SMD/QRE1113.GR.pdf 8x QRE1113 ir-antureita]) ja sillä osallistuttiin [http://www.robosota.fi robosodan] viivanseurauskisoihin. Sijoitus kaikissa kilpailuissa oli kolmas.
+
 
+
==Tilanne 03/2011==
+
 
+
[Kuva] R10 @ 27.3.2011
+
 
+
Runko on rakennettu pääosin 4mm [http://fi.wikipedia.org/wiki/Polyeteeni polyeteenistä] ja pyörät sorvattiin [http://www.valuatlas.fi/tietomat/docs/plastics_POM_FI.pdf polyasetaalista]. Kaksi vetävää pyörää on kytketty [http://www.damencnc.com/tools/man/DCNC-NEMA23-1-NM.pdf 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 [http://www.st.com/stonline/books/pdf/docs/1334.pdf L297] + [http://www.st.com/stonline/books/pdf/docs/1773.pdf L298]-piirien referenssikytkentä kasattuna itsetehdylle piirilevylle. Moottorien ohjaimet ovat erillisiä yksiköitä ja ne ovat yhdistetty lattakaapelilla mikroprosessorille. Mikroprosessorina toimii [http://ww1.microchip.com/downloads/en/DeviceDoc/39616d.pdf PIC 18F4431]
+
 
+
Mikroprosessorilevy paitsi ohjaa askelmoottoreita, on myös yhteydessä ylemmällä tasolla olevaan [http://www.fit-pc2.com/ 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 [http://fi.wikipedia.org/wiki/Python Python] wrapperi) takia.  PC:ssä pyörivät prosessit on koodattu Pythonilla, ja prosessien keskinäiseen kommunikointiin käytetään [http://www.xs4all.nl/~irmen/pyro3/ 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 [http://www.pygame.org 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 [http://en.wikipedia.org/wiki/Fiduciary_marker merkkejä] ([http://en.wikipedia.org/wiki/Visual_Servoing 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 ([http://www.youtube.com/watch?v=gI3mBeSZAsg video kartoituksesta]). Tulevaisuudessa syvyyskuvaa on tarkoitus hyödyntää monipuolisemmin paitsi kartoituksessa, myös paikannuksessa.
+
 
+
[[Luokka:Projektit]]
+

Nykyinen versio 20. marraskuuta 2012 kello 07.52

b5En syc3b6 kalaa, vaikka se oilkisin terveellistc3a4, siksi voisin ajatella Lysic3a4. Eikc3b6s Aira Samulin mainosta tc3a4tc3a4 Lysic3a4 .?

Henkilökohtaiset työkalut
Nimiavaruudet

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