Kasutaja tarvikud

Lehe tööriistad


projektid:voistlusrobotid:robotex:2008:voistkonnad:4

Robotex 2008 võistkond 4 - "Lambanina"

Võistkond

Visioon robotist

Robot sõidab vastavalt anduritelt saadud infole väljakul ringi, ning kui tema ette jääb purk, siis esmalt lükkab roboti eest olev traat purgi ümber ja seejärel rull tõmbab purgi roboti alla. Robot jätkab väljakul ringi sõitmist kuni on täis kaks minutit või kuni robotisse enam ei mahu purke, mispeale võtab majakatelt x, y koordinaadid ja sõidab purkide kogumisala juurde. Käivitub vaheseina mootor, rull hakkab teistpidi tööle ja purgid lükatakse kogumisalasse. Kui robotile jääb ette sokk niimoodi, et on mõlema esitoe taga kinni, siis sokiandurid teavitavad sellest, robot tagurdab ja sõidab sokist viltu mõõda. Takistuste vältimiseks kasutatakse infrapuna andureid. Roboti mõistuseks on ATmega128 arendusplaat.

Dokumentatsioon

Lahenduse kirjeldus

Kere

Roboti kere on valmistatud 2mm paksusest alumiiniumplekist ja koosneb kolmest tükist (ülemine osa ja kaks külge), mis on kinnitatud neetidega. Needid olid valitud sellepärast, et vältida kere osade lahti tulemist ja ka sellepärast, et ei olnud vajalik kere lahti võtmine. Kere tugevuse tõstmiseks lisasime ka kere tagaotsa L-kujulisest alumiiniumprofiilist lati, mille kinnitasime kere külgede külge kahe poldi ja mutriga. Ilma selleta vajusid küljed natuke laiali st kere ei olnud piisavalt jäik. Selle sama profiili külge kinnitasime ka alumiiniumist plaadi elektroonikat toitva aku kinnituse jaoks. Aku ja plaadi omavaheliseks sidumiseks kasutasime Velcro riba. Elektroonika kinnituse jaoks puurisime kere ülemisse plaati vastavalt elektroonikaplaatide kinnituskohtadele augud, kuhu kinnitasime läbi kere poltidega plastmassist puksid, mille peale läksid omakorda elektroonikaplaadid.

Rattad ja esitoed

Esitoed tegime Kinder Surprise'i munadest, mida tavaliselt kasutatakse mänguasja hoidmiseks. Munad lõigati pooleks ja tema sisse liimiti äärega tasa puidust klots, mis oli sobivaks lõigatud. Klotsi sisse oli läbivalt puuritud poldi jaoks auk, ülemisse osasse oli puuritud aga selline auk, kuhu sai täpselt mutri sisse suruda. Seega läks polt läbi klotsi ja oli mutriga ülevalt kinnitatud. Selline lähenemine võimaldas neid esitugesid keerates eemaldada ja ka reguleerida. Eest vaadates vasak esitugi oli läks vaheseina kinnituse külge, kuid parema jaoks pidi tegema eraldi alumiiniumlatist kinnituse, kuhu tugi keerata.

Kuna mootorikonrolleriga RD01 kaasa tulnud rattad kippusid väljaku põrandal libisema, siis sai eraldi ostetud ratta kummid, mis liimiti ratastele peale. See parandas haakumist väljakuga tunduvalt.

Rull ja traat

Traadi ülesandeks oli lükata ettejäävad purgid ümber ja ta ulatus rullist pisut ettepoole. Ümberlükkamise saavutasime traadi õige kõrguse valikuga. Traat pidi olema nii, et läheb täpselt purgi kaela vastu. Traadi kinnitasime nippudega läbi keres olevate aukude. Rull oli kinnitatud nii, et ei käiks vastu roboti keret. Rull kujutas endast pehmet 8cm läbimõõduga maalrirulli, mille ülesandeks oli traadi poolt pikali lükatud purgi roboti alla tõmbamine ja sõidu ajal purkide roboti all hoidmine ning purkide väljalükkamisel purkide lükkamise abistamine. Rulli kinnitamiseks oli süsteem, mis võimaldas reguleerida kõrgust. Ühelt poolt oli rulli tsentrisse lükatud lihtsalt M8 polt ja teisel pool oli rulli külge kruvitud servo otsik, mille küljes oli omakorda servo, mis seda ringi ajas.

Vahesein

Vaheseina idee seisnes selles, et kui purgid on kokku kogutud, siis sõidab robot kogumisala juurde ja liikuv vahesein lükkab purgid välja. Vahesein ise oli tehtud ühelt poolt vasega kaetud trükkplaadist, mille ülemisse paremasse nurka oli joodetud M6 mutter, mis omakorda liikus piki M6 keermeslatti. Et vahesein ei saaks ennast liikumisel pöörata, oli ka alumises paremas nurga auk, mida läbis sile varras. Ülemine keermeslatt ja alumine varras toetusid mõlemad kahele ühesugusele alumiiniumlatist tehtud kinnitustele, mis olid kinnitatud roboti külje poltidega. Kinnitused kujutasid endast lihtsat alumiiniumlatti, millesse oli puuritud kaks ava. Alumine sile varras oli ka poltidega altpoolt kinni kruvitud. Keermeslatti liigutas Speed 400 mootor koos reduktoriga. Reduktor oli vajalik selleks, et mootoril oleks piisavalt jõudu keermeslati keeramiseks. Speed 400 mootor sobis aga sellepärast, et on suure pööretearvuga, mis oli vajalik selleks, et purkide väljalükkamine toimuks piisavalt kiiresti. Mootori kinnitus oli tehtud L-kujulisest alumiiniumprofiilist, mis oli poltidega kruvitud reduktori külge ja teiselt poolt roboti kere ülemise osa külge. Vaheseina asendi kontrollimise jaoks olid kaks lülitit. Tagumise piirasendi lüliti oli liimitud tagumise tagaseina kinnituse külge ja esimese piirasendi lüliti robot kere ülemise osa külge, nii ette kui võimalik. Selleks, et purgid väljalükkamisel ei jääks vaheseina kinnituse ega ka vastasküljel oleva esitoe kinnituse vahele kinni, olid mõlemale küljele kinnitatud painutatud plekist „rambid“, mis suunasid purgid neist mööda. Selleks, et need aga vaheseinale ette ei jääks, pidi tegema vaheseina sisselõiked.

Peegelkera

Peegelkera on vajalik selleks, et võstlusväljaku nurkades paiknevatelt majakatelt tulevad ultrahelisignaalid jõuaksid robotil paiknevasse vastuvõtjasse. Selleks, et kõik neli majakat oleksid vastuvõtjale korraga ja enam-vähem ühtmoodi kuulda, tuli vastuvõtja paigutada suunaga üles. Paraku aga selgus, et kuna saatjad võisid olla ainult kuni 20cm kõrgusel maapinnast, ei olnud nad vastuvõtjale, mis paiknes muu elektroonika vahel, kuigi hästi kuulda. Siin tuli appi peegelkera, mis peegeldab ultrahelisignaalid vastuvõtjasse. Signaali poolt läbitud teekond seetõttu küll pikeneb, kuid seda on võimalik positsiooni arvutamisel arvestada.

Positsioneerimissüsteem

Robotexi reeglistik lubas võistlusväljaku nurkadesse paigaldada kuni 10x10x20cm majakad. Valik langes Crossbow Cricketitele, mis kujutavad endast ultraheli saatjate ja vastuvõtjatega Mica2 kübemeid. Cricketitele on Berkley ülikoolis välja töötatud tarkvara, mis võimaldab mõõta saatja ja vastuvõtja vahelist kaugust. Kauguse mõõtmine põhineb raadiosignaalide ja ultraheli levimise kiiruste erinevusele. Cricket saadab korraga välja nii raadiopaketi oma koordinaatidega kui ka ultrahelisignaali. Kuna raadiosignaal levib palju kiiremini, siis saavad vastuvõtjad käivitada taimeri ning mõõta aega, mis kulub ultrahelisignaali kättesaamiseni. Mõõdetud ajast ja valguse- ning helikiirustest arvutatakse kaugus. Cricketeid on võimalik seadistada nii saatjateks kui vastuvõtjateks, Robotexi lahenduses töötasid nurkades olevad Cricketid saatjatena ja robotil paiknev Cricket vastuvõtjana. See võimaldab kogu vajaliku informatsiooni kätte saada ühest kohast. Majakad ühtlasi jälgivad teiste majakate signaale, et vältida üheaegset signaalide saatmist. Cricketid tagavad teoreetiliselt üpriski hea täpsuse, kuid tegelikus keskkonnas tekib paratamatult soovimatuid signaalide peegeldusi ja kokkupõrkeid ning tekib suhteliselt palju mõõtmisvigu. Eeldatakse, et korraga saadab ultrahelisignaale ainult üks majakas, signaalid ise on vastuvõtja jaoks kõik ühesugused. Cricketitelt saadud kaugustest ja koordinaatidest lähtuvalt on võimalik arvutada trilateratsiooni algoritmiga vastuvõtja koordinaadid.

Positsioneerimise arvutust oleks saanud põhimõtteliselt teostada ka robotit juhtinud kontrolleril, kuid kasutasime selleks eraldi Gumstixi. Ühelt poolt oli Gumstixi platvormi jaoks juba olemas eelnevate projektide raames välja töötatud vajalik tarkvara Cricketitelt andmete kogumiseks, vigaste tulemuste filtreerimiseks ja positsiooni arvutamiseks ning vaja oli seda ainult kohandada Robotexi tingimuste jaoks. Teiselt poolt oli roboti kontroller juba niigi üpris suure koormuse all ning ka positsioneerimistarkvara portimine ning integreerimine oleks olnud väga ajamahukas ülesanne. Positsioneerimistarkvara filtreerib mõõtetulemusi põhiliselt viimasest teadaolevast positsioonist ja liikumisvõimalustest lähtuvalt ning annab arvutatud positsioonile täpsushinnangu. Arvutatud positsioon ja selle täpsushinnang saadetakse jadaühenduse kaudu roboti kontrollerile.

Varasemates lahendustes olid Cricketid põhiliselt kasutusel konfiguratsioonis, kus majakad paiknesid liikumisala kohal saatjad suunaga alla ning vastuvõtja maas liikuval seadmel suunaga üles. Robotexil see võimalik ei olnud ning selgus, et madalal paiknevatelt majakatelt kvaliteetsete signaalide saamine on problemaatiline. Üheks võimaluseks oleks olnud kasutada ühel Cricketil mitut vastuvõtjat, et ultrahelisignaal ikkagi tuvastataks. Paraku ei olnud võistluse ajaks võimalik vajalikke komponente saada ning Cricketile vajalikke modifikatsioone teha. Probleemi lahendas robotile paigaldatud diskokera, millest peegelduvaid signaale tuvastab selle alla paigaldatud Cricket palju paremini. Peegeldus tähendab küll seda, et ultraheli signaali teekond pikeneb, kuid õnneks alati ühtemoodi. Seetõttu on seda võimalik positsioneerimise arvutuses arvesse võtta.

Cricketi tarkvara: http://cricket.csail.mit.edu/

Cricketi riistvara tootja: http://www.xbow.com

Gumstix: http://www.gumstix.com/

Elektroonika

Elektroonikaskeemid on toodud allpool.

Komponentide nimekiri

Skeemid

Põhimõtteskeem

Elektroonikaskeemid

Programm

Töövahendid

Programmi kirjutamisel kasutati AVR C++ teeki. Programm kirjutati ning kompileeriti Programmer's Notepad abil, hex-faili allalaadimiseks robotisse kasutati ARVStudiot ning JTAG Ice programmaatorit.

Tööpõhimõte

Programmi üldine voodiagramm on toodud allpool. Programmi alguses Initilize() funktsioonis toimub taimerite, jadaportide, I2C liidese, ADC muunurite, sisend/väljund jalgade (pin) ning globaalsete katkestuste algseadistamine.

Iga main() tsükli alguses toimub programmi töösoldud aja kontroll. Kui 3 minutit on täis, siis programm lahkub peatsüklist ning lõpetab töö. 2 minuti ja 55 sekundi möödumisel väljastab robot purgid (ReleaseJars()) lootuses, et ehk mõni jõuab kogumisalasse. 2 minuti ja 15 sekundi möödumisel läheb robot purkide-kogumisalasse-viimise-režiimi (jarMode). Samasse režiimi läheb robot ka siis kui laseranduritelt on saadud info, et robot on korjanud vähemalt 3 purki (Cans > 2). jarMode režiimis leiab robot oma asukoha, suuna ning seab paika oma liikumise orientatsiooni ruumis ehk kuhu poole peab eelistatult pöörama takistusega kohtumisel, et jõuaks purkide kogumisalasse (kõik parameetrid määratakse SetOrientation() funktsioonis). Asukoha ja suuna leidmiseks kasutatakse 2 punkti x,y koordinaate. Nende 2 punkti vahel liigub robot otse.

Programmi põhitöö toimub funktsioonides ReadSensors() ja MakeDecision(). Esimeses neist loetakse 4 IR Sharp sensori väljundpinge näidud, 2 joone/soki tuvastamise anduri väljundpinged ning 2 laseri loogilised olekud (kõrge, madal).

MakeDecision() funktsioonis tehakse juba otsused lähtuvalt loetud sisendandmetest. 4 IR sensori abil tuvastatakse seina, katalooge ning purke. Nende näitude abil välditakse seinu ning katalooge ning purgi avastamisel liigutakse selle poole. 2 joone/soki anduriga tuvastatakse musta joont kogumisala ees. Kui kasvõi üks anduritest näitab joone olemasolu, siis kontrollitekse, kas robot on jarMode režiimis. Kui robot on selles režiimis, siis liigutatakse robotit nii, et mõlemad joone andurid näevad joont ning robot võib purgid väljastada (ReleaseJars() funktsioon). Kui robot ei ole jarMode režiimis, siis robot väldib kogumisala ning liigub ruumis edasi. Kui joone/soki andur tuvastab soki, siis robot üritab vältida sokki sellest möödudes. Sokke välditakse, kuna see ummistab purkide kogumisava robotil. 2 laseri abil, mis on asetatud üksteise kohale erinevatele kõrgustele, tuvastakse objekte, mis liiguvad roboti purkide kogumisavast sisse. Kui mõlema laseri kiired katkestatakse, siis tegu on purgiga, kui ainult alumise laseri kiir on katkestatud, siis tegu on kataloogiga, kuna kataloog on madalam, kui purk pikali asendis.

Iga tsükli lõpus tehakse viide 200 ms.

Programmi kood

Voodiagramm

Pildid

Oops, aga mitte muhvigi ei leitud.

Hinnang

Positiivne:

  • Huvitav kogemus
  • Ajakirjas „Tarkade klubi“ robotist suur pilt (A4)
  • Atraktiivne disain
  • Saime targemaks
  • Uued tutvused

Negatiivne:

  • Võistlusel koguti 0 punkti
  • Ei jõutud ideelahenduse osas kiiresti kokkuleppele, reaalseks ehituseks jäi vähe aega
  • Kogenematus (teadmised, ehitamine, ajaplaneerimine)
  • Lõplik idee ei olnud ikkagi õige
projektid/voistlusrobotid/robotex/2008/voistkonnad/4.txt · Viimati muutnud: 2016/09/03 15:43 persoon raivo.riiel