Kasutaja tarvikud

Lehe tööriistad


projektid:voistlusrobotid:robotex:2009:voistkonnad:1

Robotex 2009 võistkond "Mäger"

Liikmed

Lahenduse kirjeldus

Mehhaanika

Kere

Robot on ülesehitatud peaaegu ümmargusele(VA esikülg) alumiiniumist põhjale, millele on kinnitatud veomootorid, kaamera, toitemoodul, mootoridraiver ja erineva pikkusega püstised 10×10 mm alumiinium pulgad. Roboti tagapool pulkade otsas on mootorite kohal plastikust plaat, mille peal on ARM moodul ja bufferloogika. Eespool on pulkade otsas kinnitatud löögimehhanism sobivale kõrgusele.

Löögimehhanismi küljes on ka löögimehhanismi draiveri moodul ja rulli draiveri moodul. Löögimehhanismi esimeste tugipulkade küljes on ette ja külgedele vaatavad IR andurid. Ees on lühikeste pulkade külge kinnitatud rull, koos mootori ja Suure poldiga, mis annab lisaraskust. Lisaks on ees alusplaadile kinnitatud sellega paralleelsed 2 pulka löögisaha äärtes, mille sees on pallituvastuse andur. Löögimehhanismi külge on kinnitatud vastava kujuga sahk, et saaks palli lüüa ja kaamera vaateväli poleks piiratud.

Robotipõhja külgedel on veel 4 pikemat pulka, mille küljes on PC-d toetav raam, see asub siis löögimehhanismi kohal. Raami küljes on keskel ees IR andur millega tuvastatakse värava latti ja raami all ARM mooduli kohal on DC muundur, mis teeb PC-le toite. Lisaks 5 cm kõrgusel maast on robotil kaitseks piirdeliistud. PC peal asub IR värava tuvastamise moodul. Robotil on 2 veomootorit EMG30 ja 2 EMG30 komplekti kuuluvat ratast, mis on väiksemaks tehtud ja mille ümber on pehme aknatihend. Roboti esiküljel on 2 isevalmistatud kuuli peal liikuvat rullikut. Vaata ka all pilte, milline robot välja näeb!

Löögimehhanism

Vajalik mehhaniline osa, et saaks palli lüüa. Löögimehhanism töötab vedruga, mille abil toimub löök. Mehhanismi pästikuks on solenoid ja vinnastamiseks servo koos vardaga. Löögimehhanismi tööd juhib löögimehhanismi draiver. Tööpõhimõtet vaata ka löögimehhanismi draiveri kirjelduse alt.

Rull

Pehmest printeri rullist valmistatud rull, mis on tarvlik palli saha ees hoidmiseks ja vastase robotilt palli ära võtmiseks. rull saab üles/alla liikuda seadistatud vahemikus. Rulli põrkamise vältimiseks on selle hoidja külge pandud raskuseks suur polt ja liikumist võimaldavad kruvid pingutatud täpselt nii palju, et rull liiguks üles/alla kuid mitte kergelt - see toimib amortisaatorina. Rulli veab väike mootor koos hammasratas ülekandega.

Elektroonika

Roboti elektroonika koosneb akust, SHARP analoogväljundiga IR anduritest(GPD12 jt) ja järgnevalt toodud moodulitest, mis moodustavad koos veomootorite, rulli- ja löögimehhanismi täitur seadistega tervikliku süsteemi, mida oli tarvis 2009 robotexi ülesande lahendamiseks.

ARM

Luminary Micro LM3S1968 Evaluation Board. Moodulis on realiseeritud roboti liikumise algoritm. Lisaks loetakse andurite-, IR-kontrolleri ja mootori enkoodrite infot ning edastatakse see PC-le. Rohkem infot ARM mooduli kohta leiab: http://focus.ti.com/lit/ug/spmu037/spmu037.pdf

PC

ASRock ION 330 PC. Lisa infot leiab: http://www.asrock.com/nettop/overview.asp?Model=ION%20330

DC/DC muundur

Moodul, mis teeb 11,1 V LIPO aku pingest 19V pinge PC toiteks. Tegemist on valmis mooduliga. Väljundpinge valik on seadistatav 15…24 V ja väljund vool max 3,5 A Rohkem infot: http://www.oomipood.ee/?t=k_ki&i=MW2172CE

Akutester

Moodul, mis annab märku LED-ga ja heliga kui LIPO aku on saanud liiga tühjaks. Sobib kasutamiseks 2 ja 3 elemendiliste LIPO akudega, mille pinge on 7,4 .. 11,1 V. Ühendatakse LIPO aku balancer-i pistikusse. Tegemist on valmis mooduliga, mis on valmistatud Hiinas. (Sarnased moodulid on leitavad nt ebay-st märksõnaga „lipo alarm“)

Kaamera

Kaamera on sony playstation-i lisamoodul: „PlayStation Eye“. Ühendatakse USB liidese abil. PC jaoks on ka netist leitav draiver. Rohkem infot kaamera kohta leiab: http://en.wikipedia.org/wiki/PlayStation_Eye

IR kontroller

Isevalmistatud moodul, mille abil robot tuvastab väravaid. Võtab vastu RC5 koodi ja tuvastab TV kanaleid 1…4. Baseerub ATiny45 kontrolleritel. Moodulis on 2 vastuvõtjat ja nende vahel eraldav sein, et saaks tuvastada värava saatja asukohta ja positsioneerida robot palli lööma värava keskele. Mõlema vastuvõtja jaoks on oma kontroller. Kanal valitakse dil lüliti abil. Kuna kontrolleril on vähe IO-d, siis kanali valikuks kasutatakse takistimaatriksit ja ADC-d. Moodul annab väljundiks 4 binaarsignaali: 1) kas vastuvõtjasse jõuab lülitiga valitud kanali signaal(vastase värav). 2) kas vastuvõtjasse jõuab signaal teisest kanalist(oma värav). 3,4 samad signaalid teisest vastuvõtjast. Lisaks on ka 4 LED-i, mis näitavad signaalide olekut. Töötab 5 V toitepingel, väljundis on pingejagur 5 ⇒ 3,2 V. Kontrolleri tarkvara on kirjutatud Basic keeles ja selle kohta võib ehk leida rohkem infot robotex 2009 võistkonna 1. 3. 5 dokumentatsioonist.

Rulli draiver

Isevalmistatud moodul rulli vedava mootori sisse/välja lülitamiseks. Töötab toitepingel 12 V. Sisend on optiliselt eraldatud. Skeemi ja PCB Eagle failid on leitavad „Skeemid“ alt.

Löögimehhanismi draiver

Isevalmistatud moodul löögimehhanismi solenoidi ja servo juhtimiseks. Vajab löögiks 1 impulssi ja teeb ise kõik muu vajaliku: Peale löögi impulssi vabastatakse solenoidi abil löögi sahk, siis väike delay ja servo tõmbab saha tagasi ja solenoidi konks lukustab selle järgmiseks löögiks ning servo pööratakse sellisesse asendisse, et sahka tagasi tõmbav varras ei jääks ette, kui toimub järgmine löök. Enne uut lööki sooritada ei saa kuni saha tagasitõmbe operatsioon on sooritatud, st selle operatsiooni ajal antavad löömise impulsid ei tee midagi. Sisend on optiliselt eraldatud. Toitepingeks vajab 12 V ja 5 V. Servo on tavaline käigukastiga servomootor, millest on elektroonika osa eemaldatud! Skeemi ja PCB Eagle failid on leitavad „Skeemid“ alt.

Toite regulaatorite/jaotus moodul

Isevalmistatud moodul, kus on kaitsmed ja tehakse erinevate moodulite jaoks 11,1 V akupingest madalamad toitepinged. Seal on 2 lineaar 5 V pingeregulaatorit, millelt saavad toidet löögimehhanismi servo ja mootori draiveri mikroskeemi L298 loogikaosa. Lisaks on LM2596 DC/DC stepdown regulaator, mis teeb 5 V pinge: ARM mooduli, SHARP IR andurite palli anduri ja IR kontrolleri mooduli jaoks. PCB-l on ka LED-d, mis näitavad kaitsmete olekut. Skeemi ja PCB Eagle failid on leitavad „Skeemid“ alt.

Bufferloogika moodul

Isevalmistatud moodul, mis on vajalik ARM kontrolleri väljundite ja teiste moodulite liidestamiseks, kuna ARM-i väljundid annavad vähe voolu. Baseerub 74AC541N mikroskeemil. Töötab 3,3 V toitepingel. Skeemi ja PCB Eagle failid on leitavad „Skeemid“ alt.

Palli andur

Isevalmistatud andur, mis on vajalik selleks, et tuvastada kas pall on löögiulatuses roboti ees. Baseerub Hamamatsu anduri S4282-51 mikroskeemil. Andur on paigutatud 10x10mm seest tühja alumiinium pulga sisse(1-s pulgas andur, teises LED). Rohkem infot ja skeem Hamamatsu anduri kohta: http://www.digchip.com/datasheets/parts/datasheet/190/S4282-51-pdf.php

Mootoridraiver

Isevalmistatud moodul, mis on vajalik roboti veomootorite juhtimiseks. Baseerub L298 draiveri mikroskeemil. Vajab toitepingeid 5 ja 12 V. L298-l on sees ka loogika ja kaitselülitused. Skeem võimaldab ka optiliselteraldatud sisendeid, kuid kuna viletsate optronide tõttu see ei toiminud, siis sai otse ühendatud. Samuti on ka sellel PCB-l vajalikud ahelad mootorite küljes olevate enkoodrite jaoks. Skeemi ja PCB Eagle failid on leitavad „Skeemid“ alt. Rohkem infot L298 kohta leiab: http://www.st.com/stonline/books/pdf/docs/1773.pdf

Skeemid

Üldskeem Mootoridraiver Toitemoodul
Üldskeem Mootoridraiver Toitemoodul
Buffer Kick draiver Rulli draiver
Buffer Kick draiver Rulli draiver

Tarkvara

Robotil „Mäger“ on kaks arvutusplatvormi, millede vahel jaguneb ka roboti tarvis kirjutatud tarkvara. LMS3S1968 ARM-tüüpi protsessor on programmeeritud koguma ja edastama kõigi roboti andurite andmeid ning vastu võtma käske, mis käivitavad täitureid nagu rataste mootorid, rulli mootorit ja löögimehhanismi. ARM protsessor suhtleb serial-over-USB PC-tüüpi arvutiga(edaspidi arvuti), millel jooksevad pildituvastuse ja roboti juhtloogika algoritmid.

ARM protsessori tarkvara on programmeeritud C keeles kasutades Code Red Technologies arenduskeskkonda ning arvuti tarkvara on kirjutatud C++/CLI keeles kasutades Microsoft Visual Studio arenduskeskkonda.

Järgnev annab ülevaate tarkvara ülesehitusest koodi selgitavatesse detailidesse laskumata. Koodist arusaamiseks võib abi olla koodi kommentaaridest või kasutatud notatsioonist.

2009_roboti_mager_kood.zip

ARM-protsessori tarkvara

ARM protsessor saab arvutilt käske mis kiirusega peaksid rataste mootorid liikuma ning protsessorisse programmeeritud PI regulaator, mis kasutades rataste liikumise tagasisidet, reguleerib mootori pinget(mis antakse mootorile PWM signaalina) nii et saavutatakse nõutud mootorite kiirus.

Katkestuse funktsiooni SysTickIntHandler() kutsutakse välja 200 korda sekundis ning selles uuendatakse 40 korda sekundis mootori pingete väljundeid vastavalt PI regulaatori väljundile, loetakse kõikide andurite ja sisendite väärtusi ning saadetakse see arvutisse.

Arvutist tulevaid käske ja jadapordi kaudu tulevat informatsiooni infrapuna majakate kohta töödeldakse lõputus tsüklis mis asub main() funktsioonis.

Arvuti tarkvara

Arvutil jooksev, roboti masinnägemise ja juhtimisega tegelev tarkvara töötab kolmes lõimes(ingl k thread) millede kood on vastavalt kolmes klassis :

- RobotHardware klass – loeb ARM plaadilt tulevaid andmeid, töötleb neid ning edastab saabunud andmed algoritmi lõimele.

- LineScanShadowCheck klass – võtab pildikaadreid arvutiga ühendatud kaamerast, leiab pildilt ülesse pallid ning edastab andmed töödeldud pildi kohta algoritmi lõimele.

- Algorithm4 klass – selles klassis on realiseeritud olekumasinana roboti juhtloogika, mis vastavalt pilditöötlusest ja ARM plaadilt tulnud sensorite andmetele saadab RobotHardware klassi kaudu roboti täituritele(rattad, löögimehhanism) käske.

Et uute algoritmide muutmine ja uute algoritmide kasutuselevõtt oleks lihtsam, on pilditöötluse klasside(LineScanShadowCheck) ja algoritmi klasside(Algoritm4) jaoks kirjutatud baasklassid IVisionAlgorithm ja AlgorithmBase millede meetodeid tuletatud klassid üle kirjutavad. Koodis on objektid defineeritud baasklassi tüüpidega.

Pilditöötluse algoritm

Pilditöötluse algoritm eeldab et kaamera on asetatud nii et optiline telg on paralleelne maaga ja palli keskkohaga samal kõrgusel. Algoritm käib vasakult paremale läbi kõik pikslid mis on keskmisel kõrgusel. Kui tuvastatakse et piksli värv on selline mis võib kuuluda pallile ning eelmine piksel oli mänguväljaku serva värvi, siis võib tegu olla palli servaga. Et kontrollida kas tegu on palliga ja teada saada mis on palli raadius pildil, hakkab algoritm käima läbi piksleid mis jäävad eelmisest paremale ja alla ehk liigutakse potensiaalsest palli servast diagonaalselt alla vasakule kuni avastatakse tume piksel, mis on tõenäoliselt palli alumine serv ja palli vari. Kui varju ei avastata, jätkatakse mööda keskmist pikslirida järgmist potensiaalselt palli serva otsimist. Kui vari avastati, siis servast eemale liigutud horisontaalne või vertikaalne pikslite arv vastab avastatud palli raadiusele. Enne palli kindlat tuvastamist kontrollitakse et avastatud palli kontuuri sees oleksid pikslid palli värvi. Peale palli tuvastamist jätkatakse pildi keskmise rea kontrollimist, et leida veel potensiaalseid palli servi ja palle. Et kompenseerida kaamera telje mitte-horisontaalsust ja kõrguse erinevust palli keskkoha kõrgusest, korratakse sama algoritmi erinevatel pildi piksliridadel. Topelt avastatud pallid ei tekita juhtloogika algoritmile probleeme ning neid pole vaja välja filtreerida.

Pildid

Hinnang

Robotil läks päris hästi, saavutas teise koha. Süsteemi töös muid erilisi vigu ei esinenud VA vahest statilise elektri mõjul kaamera draiveri kokkujooksmine vastase robotiga kokkupõrkel ja häired IR andurite töös. Roboti testimiseks ja katsetamiseks koos teiste robotitega oleks võinud rohkem aega olla, siis oleks ehk antud probleemid jõudnud kõrvaldada. Ideid nende probleemide kõrvaldamiseks: Kaamera korralikult varjestada ja roboti osad, mis puutuvad vastasega kokku katta elektrit mittejuhtivate materjalidega. IR andureid võiks osa mida hetkel vaja pole välja lülitada, nii et võimalikult vähe neid koos töötaks - see väldib 1-e anduri poolt tekitatava signaaali jõudmist teise andurisse, mis häirib viimase tööd. (90 kraadise nurga all olevad andurid segavad muidu üksteist, kui on mingi pind ees, millelt mõlema kiir peegeldub.)

Arrayprojektid/voistlusrobotid/robotex/2009/voistkonnad/1.txt · Viimati muutnud: 2016/09/03 15:43 persoon raivo.riiel

Lehekülje tarvikud