Kasutaja tarvikud

Lehe tööriistad


projektid:voistlusrobotid:robotex:2010:voistkonnad:3

Robotex 2010 võistkond "TTÜ Robotiklubi Medved"

Liikmed

Roboti üldine kirjeldus

Jalgpallirobot „Medved“

Robot „Medved“ on tehtud kihilise ülesehitusega. Alumine ja ülemine kihid on tehtud alumiiniumist, mis oli tellitud firmast AQ Lasertool (nad teevad alumiiniumdetailide laserlõikust). Keskmine kiht on lõigatud pleksiklaasist.

Esimesel kihil paiknevad roboti veomootorid, mootorikontroller ja üks LiPo aku.

Teisel kihil paiknevad infrapuna andurid, löögimehhanism koos võimsa ja massiivse solenoidiga, rullimehhanism, jaotus moodul, Xbee laiendus plaat, solenoidi draiveri skeem ja muu elektroonika komponendid.

Kolmandal kihil paikneb PC arvuti, DC-DC konverter ning teine LiPo aku. Roboti peal on PS Eye kaamera ning roboti nupud ja staatus indikaatorid, nii nimetatud „juht paneel“.

Mehhaanika

Roboti veoajam

Kolme omniratta platvorm.

Pallihoidja

Kasutusel on pöörlev rull pallide kinnihoidmiseks. Rulli tööpõhimõte seisnes selles, et pall panna nii pöörlema, et see kogu aeg roboti poole veereks. Süsteem võimaldas robotiga isegi 360 kraadiseid pöördeid teha ilma palli kaotamata.

Löögimehhanism

Solenoid

Me kasutame võimsa ja massiivse solenoidi autost. See on nii nimetatud solenoid, mis on kasutusel kõikides autodes starteri süsteemist. Eelis on selline, et pole vaja kõrgepinge. Sisendil on ainult 12V. Teoreetiliselt on võimalik panna 24V ja solenoidi töökiirus suureneb, aga me ei proovinud. Mõned puudused ka olemas, solenoid tarbib palju voolu (umbes 5A), see tõttu meil on kasutusel ainult tema jaoks eraldi LiPo aku. Teine aspekt, mis vaja arvestada töötades selle tüüpi solenoidiga: solenoidi tööaeg on umbes 1 sek. Struktuurselt solenoid koosneb kahest induktoritest. Kui tööaeg on rohkem kui 2 sek ning vool on 5A, siis ta põleb ära. Solenoidi kontrollimiseks mikrokontrolleri abil oli realiseeritud solenoidi draiver. Rohkem info skeemi kohta elektroonika osas.

Mootorid

Mootori andmed on kirjas alljärgnevas tabelis.

Mootor M5-RS550
Perfomance Physical
Model M5-RS550-12 Weight 7.7 oz (218g)
Operating v 6v - 14.4v Length - for motor 2.24 in (57mm)
Nominal v 12v Diameter (with flux ring) 1.52 in (38.5mm)
No Load RPM 19300 Diameter (no flux ring) 1.41 in (35.8mm)
No Load A 1.4A ShaftDiameter 0.12 in (3.2mm)
Stall Torque 486.2 mN-m
Shaft Length 7.6mm
Stall Current 85A
Kt 5.7 mN-m/A
Kv 1608 rpm/V
Efficiency 70%
RPM - Peak Eff 1700
Torque - Peak Eff 62.4 mN-m
Current - Peak Eff 10.9A

Reduktorid

Reduktoritena kasutame, Banebots-i P60 planetaarreduktoreid ülekandearvuga 16:1. Täpsemad reduktori andmed on kirjas alljärgnevas tabelis.

Reduktor
Physical Specifications
Type Planetary
Reduction 16:1
Stages 2 - 4:1, 4:1
Gear Material Steel
Weight 8.0oz (227g)
Length 1.9in (48.3mm)
Width (Square) 1.5 in (38.1mm)
Shaft Diameter 0.50 in (12.7mm)
Shaft Length 1.5 in (38.1mm)
Shaft Key 0.125 in (3.2mm)
Shaft End Tap #10-32
Mounting Holes (8) #10-32

Failid

Elektroonika

Mootorikontroller

Mootorikontroller

See on Robotiklubi poolt välja töötatud moodul. Toite vahel on lisatud kolm 200uF kondensaatorid, et vähendada häireid. Häirete vähendamiseks on veel mootorite juhtmed kokku keerutatud ja keeratud ümber ferriit rõngaste, samuti on ka 150nF kondensaatorid mootori harjadel.

Rohkem info mootorikontrolleri kohta leiab http://www.robotiklubi.ee/projektid/pisi_xbee2

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

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

Löögimehhanismi/Solenoidi juhtskeem

See on meie tiimi isevalmistatud moodul. Skeem on tehtud taimeri 555 baasil, mis on lülitatud „astable“ režiimis. Tööpõhimõte on selline. Skeem genereerib väike impulss 200ms laiusega, mis on piisab, et kiiresti lülitada solenoid ja kohe välja lülitada. Sest solenoid on võimas mänguasi ning tarbib palju voolu (umbes 5A) skeemile oli lisatud PC817 optocoupler. Seda vaja kaitsmisele, et isoleerida madalpingeline mikrokontrolleri ahel. Veel skeemil on muutuv takisti, mis on vaja impulssi laiuse muutumisele. Samuti skeemil on paigutatud kaitsme (Fuse=6A)

Toite regulaatorite moodul

Toite regulaatorite/jaotusplaat

See on meie tiimi isevalmistatud skeem, kus on paigutatud kaitsmed ning konverter 12V akupingest madalama toidepingele. Skeemil on lineaar 5V pingeregulaator LM7805 ning ka LEDid, mis näitavad kaitsmete olekut.

Toide

Toideks on kolm LiPo akud. Üks LiPo aku 4000mAh on PC arvutile. Teine LiPo 3200mAh on kogu elektroonikale, mootoritele, anduritele. Ja viimane LiPo on solenoidile. Samuti kasutati LiPo alarmid. See on 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. Meie robotil on neid kasutusel 2 tk.

Rulli juhtskeem

Rulli juhtskeem

See on väga lihtne skeem: üks transistor ja kaks takisti. Transistor töötab võtme reziimis. Kui mikrokontrolleri väljundil on loogiline 1 siis transistor on lahti ning mootor töötab, kui mikrokontrolleri väljundil on loogiline 0 siis kõik vastupidi ehk motor ei liigu.

Pallianduri skeem

Palliandur

Palli tuvastamiseks rulliku all kasutatakse infrapuna peegeldusandurit. Saatajalt peegeldunud kiirgus jõuab vastuvõtjasse ja selle kiirguse intensiivsuse järgi saab määrata objekti kauguse. Intensiivsus sõltub lisaks kaugusele ka objekti pinna värvist ja siledusest.

Kuna võistlusel on alati palju välklampe, kaameraid, valgusteid jms infrapunakiirguse allikaid, siis kasutatakse moduleeritud signaali, st saatja kiirgab teatud sagedusel ja vastuvõtja reageerib ainult sellel sagedusel olevale signaalile. Kõik selle teeb ära üks integraallülitus - Hamamatsu S4282-51. Ainsaks väliseks komponendiks on infrapunakiirgur (diood) ning tundlikkust reguleeriv takisti jadamisi dioodiga.

Andurid

Meie tiim kasutab neli IR sharp - gp2y0a41sk0f andurid. Kaks andurid vaatavad ette ja kaks mõlemalt poolt. Tagasi andurit ei ole. Kauguse limiit on 30cm. Tööpinge on 4.5-5.5V. Rohkem info võite leida siin

analog-gp2y0a41sk0f.pdf

Skeemid

Üldskeem Jaotusplaat Solenoidi juhtskeem
Üldskeem Jaotusplaat Solenoidi juhtskeem

Skeemid ja PCB failid Eagle formaadis

Tarkvara

Roboti “tarkus” peamiselt sisaldus PC-tüüpi arvutis, mille peal töötas C#-is kirjutatud programm. Lisaks sellele, robotil oli veel kaks arvutusühikut: Atmel AVR tuumaga mikrokontrollerid, neist üks töötas mootorikontrollerina, teine laiendusplaadi kontrollerina. Aga mikrokontrollerite tarkvara arendus on väljaspool selle roboti kirjeldamise skoopi. Järgnevalt kirjeldatakse ainult tarkvara PC osa.

Kuna mootorite ja sensorite/täiturite juhtimine oli teostatud mikrokontrolleritel (siin on vaja kiiret reaktsiooni, nt. PID-regulaatori jaoks, arvutist juhtimine oleks liiga aeglane), arvutile jäi tegeleda roboti käitumisega ja pilditöötlusega.

Pilditöötlus

Pilditöötluse jaoks oli kasutatud olemasolev teek, mis on osa AForge.NET framework-ist: AForge.Imaging. See on kirjutatud C# keeles ja seda on mugav kasutada C# programmist.

Pilditöötlusel on kaks põhiülesannet: otsida kaamera pildist pallid ja väravad. Kuna pilditöötlus on arvutuslikult raske ülesanne ja roboti arvutil oli suhteliselt nõrk CPU (Intel Atom), siis seda tuli teha maksimaalselt efektiivselt. Näiteks, oli proovitud erinevad teegi poolt pakuvatad filtrid ja teisendused, mõned neist ei saanud kasutada just “raskuse” tõttu. Õnneks, pilditöötluse kaks ülesanned ei pea kunagi töötama samaaegselt, nii et kogu CPU võimsus oli ühe algoritmi käes korraga.

Meie arvutiga oli veel üks alternatiiv: kuna see baseerub Nvidia ION platvormil, on võimalik käivitada arvutusi videokiibil (kasutades CUDA tehnoloogiat), see peaks olema kiirem, kui CPU-l tehtav pilditöötlus ja lisaks vabastaks CPU ressurse. Aga aja ja kogemuse puudumise tõttu (tuleks ise kirjutada kõik pilditöötluse algoritmid) sellega otsustati mitte tegeleda.

Palli otsimiseks oli proovitud erinevad meetodid:

Palli tuvastus värvi järgi

See on esimesena pähe tulev meetod: pall on valge ja peaks olema väga hästi eristatav väljaku foonil. Selle meetodil on mõned probleemid: ainult pool palli on pildil valget värvi. Ülejäänud on hall ja must (sõltub valgustusest). Selle meetodi rakendamiseks tuleb kasutada värvifiltrit, mis jätab pildile ainult vastava värviga piksle.

Palli tuvastus kontuuri järgi

See meetodi idee seisneb selles, et palli ja väljaku vahel pildil on järsk värvi muutus. Värvi filtreerimisega on raske leida palli alumine osa, kuid see on võimalik servaotsiva filtriga. Tuli välja, et kõige optimaalsem on SobelEdgeDetector filter. Selle meetodi probleem on tema tundlikkus: see aitab leida kogu palli kontuur, kuid reageerib isegi väikesele värvi muutusele väljaku servades, kus väljaku kate seintel on natuke teise valguse all, kui kate väljaku põhjal. Kui pall on väljaku servale liiga lähedal ja robotist liiga kaugel, on juba väga raske eristada palli vormi filtreeritud pildil.

Lõpuks oli valitud tuvastus värvi järgi RGB värviruumis. HSL värviruum sobib vähem, kuna valgel värvil ei ole kindlat tooni (hue). Pärast pildi filtreerimist pildil jäävad ainult pikslid, mis vastavad filtri kitsendustele. Üks-teise juures olevad pikslid moodustavad regioone, mida kutsutakse blob-ideks. Järgmine pilditöötluse etapp on valida jäänud blob-idest vajalikud, mis vastavad otsitava objekti (pall, värav) omadustele.

Esiteks, blob-ide filtreerimiseks on seadistatud kitsendused: minimaalne ja maksimaalne laius/kõrgus pikslites. Seejärel valitakse vaid need blob-id, mille kujud on sarnased otsitava kujuga. Palli korral pildilt tuleb otsida ringikujulisi blob-e, mis on suure tõenäosusega pallid. Selleks kasutati AForge.NET teegist klassi SimpleShapeChecker. Aga tuli veidi seda aidata. Probleem on selles, et see kontrollib kõiki blob-i servat moodustavaid punkte kuuluvuse antud kujule (palli korral ringile). Kuna üldjuhul pildil sai tuvastada ainult palli ülemine pool, saadud blob ei olnud ringikujuline. Teades seda, on võimalik lisada üks palli põhjale vastav punkt, millega see algoritm leiab korrektse palli raadiuse ja keskpunkti pildil.

Pärast ringikujulisi blob-ide leidmist kontrollitakse veel üht omadust: kas selle asukoht pildil (Y koordinaat) vastab ringi raadiusele. On võimalik leida matemaatiline seadus kuidas palli raadius pildil sõltub tema asukohast pildil (mis sõltub palli kaugusest robotilt). Kui leitud blob-i raadius ja asukoht ekraanil ei vasta sellele seadusele, siis järelikult see ei ole pall. Teades täpse seaduse, on võimalik eristada pallid, mis on värava sees nendest, mis on veel väljakus. See on vajalik tegevus, sest vastasel juhul robot hakkab proovima võtma palle, mis on juba väravas (seda probleemi võib üldse elimineerida kui panna kaamera alla – siis väravas olevad pallid on valel tasemel ja neid ei tuvastata).

Peaaegu sama algoritm kehtib väravate otsimise puhul, kuid seal kasutakse HSL värviruumis töötavat filtrit (väraval on kindel värv) ja otsitakse ristküliku kujuga blob-e.

Juhtimisalgoritm

Juhtimisalgoritm põhiülesanne on otsustada, mida peab robot käesoleval hetkel teha. Selleks juhtimisalgoritm võtab vastu info pilditöötlusest, anduritest, nuppudest. Väljunditeks on käsud mootorikontrolleritele ja teistele täituritele (rulliku mootor, solenoidi draiver).

Juhtimisalgoritm töötab oma lõimes (thread), sest ta peab alati olema võimeline teha otsuseid. Teised tegevused (eriti pilditöötlus) ei tohi juhtimisalgoritmi tööd segada.

Et lihtsustada silumist, robotit on võimalik viia käsijuhtimise režiimi – siis on võimalik robotit käsitsi liigutada, rakendada täitureid, samm-sammult vaadata juhtimisalgoritmi tööd.

Juhtimisalgoritm on realiseeritud olekumasina põhimõttel: on mitu olekut, milles algoritm võib olla ja võimalikud siirded ühest olekust teis(tess)e. Võimalikud olekus on järgmised:

  • Idle – robot on peatatud.
  • InitialState – roboti stardiolek. Automaatrežiimis sellele kohe järgneb SearchForBall. See olek on kasulik käsirežiimis.
  • SearchForBall – otsitakse palle. Robot pöörleb ümber oma telje ja püüab kaameraga leida palle.
  • ApproachBall – pall on leitud ja robot suundub selle juurde.
  • AlignWithGoal – robot hoiab palli ja nüüd pöörleb ümber oma telje ja otsib kaameraga väravat.
  • KickBall – värav on leitud, kõik on valmis et lasta pall väravasse. Rakendatakse solenoid.
  • WanderingAround – kui robot pöörles olekus SearchForBall liiga kaua ja ei näinud palle, siis see võib tähendada et palle enam ei ole või pall on liiga kaugel ja pilditöötlus ei saa seda tuvastada. Siis robot valib suvalise suunda ja liigub mõni aeg sinna ja proovib uuesti leida palle.

Üks roboti konstruktsiooni eripära on see, et kaamera ei näe mis toimub vahetult roboti ees: 10cm roboti ees ei ole kaameraga nähtavad. Selle tagajärg on see, et kui robot sõidab palli juurde (olekus ApproachBall), siis viimased 10cm teest peab ta sõitma pimesi. Kui pall kaob vaateväljast ära ja viimasel hetkel ta oli pildi alumise serva keskel (siis robot saab seda sõites edasi), siis käivitatakse taimer, mille lõppemiseni robot peaks palli saama (seda saab teada andurist). Kui taimer lõpeb varem, siis edasi pimesi enam ei sõida ja hakatakse otsima palli uuesti.

Pildid

projektid/voistlusrobotid/robotex/2010/voistkonnad/3.txt · Viimati muutnud: 2016/09/03 15:43 persoon raivo.riiel