Kasutaja tarvikud

Lehe tööriistad


projektid:voistlusrobotid:robotex:2010:voistkonnad:1

Robotex 2010 võistkond "Printer Bob"

Löögimehhanism

Kasutusel oli eelmisel versioonil head tööd teinud pneumaatika. Kasutasime standardseid pneumo komponente, millede töörõhk on 8 bar-i. Löögi kiiremaks muutmiseks pumpasime paaki kuni 14 bar-i ja leidsime, et see ei lõhkunud ära midagi. Paagiks oli seekord sprei värvimiseks mõeldud survepudel, mis oli märkimisväärselt kergem eelmise aasta variandist ja tõenäoliselt ei oleks ka plastikust kergemat saanud. Löögimehhanism asus seekord jälle kõrgemal, kui pallid, aga mehhaaniliselt oli asi palju töökindlam, sest kasutasime lineaarlaagreid, mis vaatamata seadistamise keerukusele lõpuks päris hästi töötasid. Löömiseks kasutasime paraboolse profiiliga alumiinium plaati, mis oleks pidanud suunama palle lüües keskele, aga selle effektiivsuses kahjuks veenduda ei jõudnud. Samas töötas kogu see löömise mehhaanika päris hästi ja suuri muresid ei olnud. Pneumoklapp, mis meil lööki lülitas vajab 24VDC pinget. Selleks oli meil eraldi toiteplokk, millest oleks pidanud saama toita ka muid 24V asju robotil, aga neil lõpuks peale klapi polnudki. Klappi juhtisime releega, mis lülitas klapi mähise toidet sisse välja. Kogu löögimehhanism tervikuna oli väga töökindel ja lihtne. Puuduseks oli suured mõõtmed ja suruõhu olemasolu vajalikkus.

Kaamera

//Kaldkiri// Kasutasime jälle PS3Eye kaamerat, mis vaatamata eelmise aasta probleemidele tundus parim valik. Kaamera kokkujooksmise vähendamiseks tegime USB juhtme võimalikult lühikeseks ja katsime kaamera trükkplaadi kahepoolse teibi ja hõbepaberiga, mille omakorda maandasime USB varjestuse külge. Selle tulemusena oli kaamera palju töökindlam ja sellega enam probleeme polnud. Uue platformi ehitusest tingituna pidime kaamera panema seekord kõrgemale pallide tasapinnast ja selle tulemuseks oli palju keerulisem pildituvastuse kood. Enam ei saanud kasutada linescan moodust ja pidime kasutama muid võimalusi. Selle eeliseks, aga oli see, et saime kasutada kaamerat ka palli väravasse sihtimiseks. Kaamera oli reguleeritaval alusel, mis osutus väga kasulikuks, sest roboti monteerimisel muutus mõnikord natuke roboti kõrgus (näiteks uute ratastega) ja siis oli vaja võimalust kaamerat sättida. Võitluse ajaks panime mutrite vahele Super Attacki.

IO seadmed

Kasutasime kõigile välja töötatud USB laiendusplaati, mis lubas arvuti kaudu juhtida roboti reaalset perifeeriat. Kuna tegemist oli USB kaudu ühenduva seadmega pidime me palju vaeva nägema sellega, et meie programm oskaks suhelda õige seadmega. Robotil oli kokku kaks sellist plaati ja mõlemad kasutasid suhtluseks USB virtuaalset jadaliidest (CDC - Communications Device Class). See tähendas, aga seda, et seadmete äratundmine käis jäigalt programmeritud COM pordi numbrite järgi ja nende numbrite määramine seadmetele on täielikult Windowsi draiverite teha - meie ei tea millal ja milline number seadmele antakse. Õnneks juhtus nii, et sama seade sai enamasti ikka sama numbri ja sellega probleeme ei olnud. Probleeme esines eelkõige seadmete stabiilsuses ja nende anomaaliate põhjusi me tegelikult ei leidnudki. Peaaegu iga kord, kui me roboti programmi sulgesime kaotas Windows USB seadmetega ühenduse ja selle taastamiseks tuli seade füüsiliselt arvutist lahti ühendada ja tagasi külge panna. Teine probleem oli andmete liikumises esinevad viited, mis võisid olla põhjustatud sellest, et meie pisikesed arvutid ei jõuagi lihtsalt korraga nii paljusid USB seadmeid ilma viiteta kasutada. USB on peaaegu alati nendes arvutites põhi protsessori hallata ja, kui me kasutame väga intensiivset pilditöötlust ja arvutil vaba aega pole siis võib see põhjustada USB-l igasuguseid imelikke kõrvalekaldeid. Samas leidsime me netist ka teiste inimeste probleeme selle USB CDC klassi draiveritega Windowsi keskkonnas ja võimalik, et samad probleemid tegelikult ka meid kummitasid.

Me proovisime sama riistvaraga ka teistsugust lähenemist, kus CDC seadme asemel kasutasime USB interrupt transferit, mis peaks olema piiritletud viitega. Selle katse tegime sellepärast, et sama arvuti ja programmi korral töötas USB hiir ja klaviatuur normaalselt - neil ei esinenud märgatavat viidet ja nad ei kukkunud kunagi küljest ära. Kahjuks ajanappuse ja muude probleemide külluse tõttu me selle katsega päris lõpuni ei jõudnud. Katseprogramm näitas küll, et andmed liikusid kiiremini, aga meie oma koodi me ümber portida ei jõudnud, seega ei või midagi kindlalt väita.

Paar nädalat enne võistlust eelvõistluse ajal juhtus meil selline asi, et ühel hetkel ei töötanud mootorite juhtimise laiendusplaat enam üldse. Me proovisime teda ISP kaudu programmeerida ja kõik paistis töötavat: kood läks ilusti sisse ja programmaator vigu ei näidanud. Vaatamata sellele ei andnud plaat enam ühtegi elumärki. Väga lihtne LED-i vilgutamise programm ei teinud ka enam midagi. Lootust kaotamas tõime kohale loogikaanalüsaatori ja programmeerisime CLKOUT fuse biti nii, et kontroller väljastaks oma kella takti ja isegi see paistis korras olevat - olenevalt valitud kella allikast muutus CLKOUT sagedus. Lõpuks saime õnneks uue plaadi, aga selle katkise plaadi viga me ei saanudki kunagi teada. Kahtlustasime staatikat või sodi, mis oli võibolla plaadile sattunud kuna plaat asus roboti põhja all. Uue plaadi panime samma kohta, aga katsime natuke paremini karbiga ära ja sellega enam midagi hullu ei juhtunud.

Ehitamise käigus selgus, et selle laiendusplaadi, ja ka USB pordi, 5V väljund on tegelikult natuke lahja korraliku roboti töötamiseks. Sharpi IR andurid olid meie robotil eraldi toitega, mis tuli mootorite akust ja läbi 7805 regulaatorite. Kuigi meie selles midagi halba ei leidnud oleks tegelikult hea hoida mootorite ja elektroonika toited täiesti lahus. Kuna meie seda teha ei saanud siis tegime parima, mida suutsime ja selleks oli ühine maanduspunkt kõigile tähtsamatele seadmetele, mis oli samas ka ainus koht, kus said kokku kahe aku maad. Sharpi andurid olid kõik eraldi filtreeritud toitega ja igale ühele jooksid eraldi toite juhtmed. Iga anduri plaadi külge jootsime veel 47uF elektrolüüt kondensaatori paralleelselt 330nF keraamilisega. IR kaugusandurid töötasid seekord peaaegu täiesti vigadeta. Ainuke probleem oli ühe anduri valesti joodetud juhtmed, mis õnneks andurile saatuslikuks ei saanud ja vea parandamise järel hakkas kõik ilusti tööle. Kahjuks ei ole Sharpi IR andurite väljundid väga kalibreeritud ja meie robotil andsid esimed IR andurid sama kauguse korral väga erinevaid näite. Selle pidime kõrvaldama koodis. Järgmise aasta plaadil võiks olla rohkem võimalusi toite andmiseks. Meie roboti puhul oleks olnud ka kaks korda suurem plaat täiesti vastuvõetav, kui see oleks võimaldanud eraldada rohkem toite gruppe ja ka kotrolleri toiteregulaator võiks olla suurem, kuna see läks mõnikord päris soojaks. USB võiks ka olla kaitstud ESD vastu.

Mootorikontroller

Vaatamata suurele pingutusele taustameeskonna poolt ei saanud meie robot kordagi sõita ühiselt ehitatud mootorikontrolleritega. Me kasutasime Ronaldi poolt kirjutatud mootorite juhtalgoritmi, mille väljundi me suunasime PWM-i asemel hoopis laiendusplaadi jadaliidesesse ja sealt Sabertooth mootorikontrolleritesse. Sabertoothid saime me filmirobotite projektist. Need võimaldasid meil väga kiiresti ja probleemideta hakata robotit liigutama. Algul RC puldiga ja hiljem ka roboti arvutist. Probleeme esines meil Sabertooth draiverite „targa“ baudrate detektoriga, mis vajas normaalseks tööks seda, et esimesed andmed, mis talle peale reseti tulevad oleks ja 1010101.., aga meil läksid selle roboti erinevad osad käima suvalises järjekorras ja seega sai ta mõnikord väga valed käsud kohe alguses. Selle probleemi oleks saanud lahendada natuke teistsuguse seadistusega, kus baudrate oleks fikseeritud, aga siis ei oleks kiiruse reguleerimine nii sujuv. Sabertoothid ise töötasid täiesti laitmatult ja on igati oma hinda väärt. Meil ei olnud nendega kordagi ühtegi probleemi.

Mootorikontrolleri üks suur puudujääk oli see, et ta ei võimaldanud väga aeglaselt sõita ja hakkas hüppama. Suurematel kiirustel oli regulaator väga korralik, aga madalatel pööretel toimus ühes kontrolleri taimeris overflow ja siis robot hüppas. Väga tõsine probleem oli mootorite tagasisideks vajalike optokatkestitega, kuna need olid väga kitsas kohas kohe mootorite juures läksid meil seal Robotexi öösel katki juhtmed, mille parandamiseks tuli kogu robot ära lammutada. Me proovisime ka koodrite signaali lahtisidestada, sest kartsime, et sealt mootorite juurest tulevad juhtmed võivad kanda ka häireid. Me tegime isegi plaadi juba selle jaoks, aga seda lõpuks ei kasutanud. Kuna iga mootori juurest tuli kontrollerisse kaks juhet oli kokku vaja täpselt õigesse kohta ühendada 6 juhet ja see oli väga keeruline, kuna roboti all ei olnud just väga palju ruumi. Järgmisel aastal peaks rohkem rõhku panema erinevate moodulite korpustele ja kautusmugavusele. Näiteks võiks olla pistikud sellised, et valet koodrit ei saa panna valesse sisendisse. Roboti disaini etapis peaks rohkem rõhku panema ka sellele, et igasugused juhtmed oleksid võimalikult lühikesed ja ei jääks kuhugi vahele ja ette. Meie robotil oli sees suur liikuv solenid, mille vahele jäid mootori koodrite juhtmed vähemalt kahel korral.

Toide

Robotil oli kasutusel kaks LiPo akut. Mõlemad olid ette nähtud 4000mAh 11.1V, aga need jäidki vaid unistuseks. Reaalselt sõitis robot kahe suvalise enamvähem 12V LiPo akuga. Üks aku oli ette nähtud ainult mootorite toiteks ja see oleks olnud siis täielikult eraldatud roboti arvutist ja elektroonikast. Kahjuks see polnud võimlaik ja lõpuks oli robotil küll kaks akut, aga nende kahe aku miinus klemmid olid kokku ühendatud ja omakorda olid need samad miinused ka roboti korpuse külge ühendatud. Selle tulemusena küll suurenes risk lühiste tekkimiseks, aga samas vähenes häirete tekkimise oht. Kuna me ei leidnudki poodidest sellist nuppu, mis oleks kannatanud lülitada mootorite stardivoolu pidime kasutama autoreleed. See töötas üllatavalt hästi ja lõpuks oligi robotil kaks nuppu, millest üks ühendas arvuti toite aku ja teine pingestas relee mähise, mis siis ühendas mootorite toite. Mõlemal akul oli pluss juhtmes ka auto kaitse. Väga palju tegi meile muret LiPo akude ühendamiseks kasutatav pistik, mis oli väga raskesti ühendatav ja samas murdus juhe korduvalt kohe pistiku juurest. Kasutasime oma roboti pneumaatika toitmiseks veel ka ühte DC-DC muundurit, mis andis meile 24V, mis oli vajalik solenidklapi töötamiseks.

Arvuti

Esialgu oli plaanis kasutada sama arvutit, mis eelminegi aasta - Artigo A1000. Mida edasi aga tarkvara arendus läks, seda selgemaks sai, et see arvuti ei suuda koodi piisavalt kiiresti täita. Tänu Kultuuriklubile ja Tudengibussile, saime laenuks tunduvalt kiirema Fit-PC2'e, mis on vanem versioon Mägra tiimi poolt kasutatavast Fit-PC2i'st. Võrreldes Artigoga oli Fit-PC2 ikka tunduvalt kiirem.

Tarkvara

Arvutipoolne tarkvara on kirjutatud C#-s, Visual Studio 2010 arenduskeskonnas. Tarkvara arendamisega - nagu alati - jäime veidikene hiljaks ning koodis oli mõningaid suuremaid ning väiksemaid vigu sees.

Suhtlus IO seadmetega

Arvuti ning pisiXbee2 vaheline suhtlus toimus üle virtuaalse serial pordi. Andmed tulid arvutisse paketthaaval, kusjuures iga pakett sisaldas kogu infot. Näiteks saatis mootorikontrollereid juhtiv laiendusplaat korraga kogu enkoodrite poolt saadava tagasiside korraga. Samuti saatis andureid, lüliteid jm lugev laiendusplaat kõikide sisendite info korraga. Igat paketti eraldas reavahetus. Arvuti poolel oli kirjutatud klass, mis tegeles laiendusplaatidelt info lugemisega. Antud klass jookis ka eraldi lõimes.

Kaameraga toimus suhtlus üle USB pordi. Kasutasime Code-Laboratries'i poolt arendatud draivereid ning API-t.

Pilditöötlus

Pallituvastus

Pilditöötluseks kasutasime AForge.Net teeke. Alguses oli plaanis kasutada eelmise aasta linescan algoritmi, kuid kuna löögimehhanismi ehituse tõttu ei olnud võimalik paigutada kaamerat pallidega ühte tasapinda, siis antud algoritmi ei saanud kasutada.

AForge.Neti teekidest kasutasime pallide tuvastamiseks „Blob detection“-t, mis otsis väljakult ümmargusi esemeid. Et tuvastamine võimalik oleks tuli pilt filtrite abil muuta selliseks, et kogu taust oleks must ning ainult pallid valged. Välistamaks võimalust, et robot tuvastab pallina mõnda ümmargust valget objekti, mis ei ole pall (näit. teise roboti ratas), sai tehtud küllaltki suur hulk mõõtmisi, et teada saada, kui suur võib robotist mingil kaugusel asuv pall olla.

Üldiselt võib öelda, et pallide tuvastus töötas piisavalt hästi.

Väravatuvastus

Värava tuvastamiseks kasutasime samuti „Blob detection“-t. Siin oli aga väike probleem, nimelt olid RGB värviruumis sinine värav ning väljak vägagi sarnast värvi, nii et RGB filtrite kasutamine „lõikas“ pildilt ära ka sinise värava. Seetõttu sai RGB värviruumis olev pilt konverteeritud HSL värviruumi. Kuna konverteerimine ühest värviruumist teise nõuab küllaltki palju arvutusi, siis oli väravatuvastusalgoritm tunduvalt aeglasem kui pallide tuvastamise osa. Ka väravatuvastus töötas hästi, kuid võistlusel said segavaks faktoriks väljaku ääres olevad sinised objektid, mistõttu robot mõnikord ka värava asemel palli vastu seina lõi.

Mootorid

Mootoritena kasutame RS550 tüüpi mootoreid, millel on ka tagumine võll. Mootori andmed on kirjas alljärgnevas tabelis.

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.

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

Pildid

Tegijad

Failid

mudel.zip - Esialgne 3D mudel mootorite kihist(SW2009)

projektid/voistlusrobotid/robotex/2010/voistkonnad/1.txt · Viimati muutnud: 2016/09/03 16:25 persoon raivo.riiel