Pealehele...


Robotex aruanne

"All Systems & Co" aruanne
 
 
Jaas Jezov (jaas@ut.ee, 53 326 107) 
Tarvo Kärberg (tarvo3@ut.ee, 51 906 687) 
Aapo Prii (aapo@ut.ee, palus telefoni mitte avaldada) 
Kristjan Nurmela (pckutt@hotmail.com, 55 13 389) 
Aadam Kaivo (akaivo@hotmail.com, kaotas telefoni ära) 
Roland Pihlakas (roland@ut.ee, 58 058 134) 
Juhendaja: Andres Punning (punn@ut.ee, 53 491 976) 
 
Mehaanika. 
Kahe kuu vältel, kui robotexiks valmistusime tuli teha mitmeid katsetusi sobiva roboti kere tegemiseks. Alustasime roomikutega versioonist, kuid see langes üsna kiiresti kõrvale, kuna kasutatud roomikud sõid enamuse servode energiast, mistõttu see lahendus muutus liiga aeglaseks, et üldse mingit tulemust võistlusel saada. 
Järgmiseks võtsime ette Lego. Selgus et kahe servoga süsteem ei suuda üle 1,5 kg robotit mäest üles vedada, seega läksime nelja servo peale ja tegime veel kiirendava ülekande. Tulemuseks oli umbes 30 cm/s sõitev vanker, millel oli piisavalt jõudu ka üle 2 kg roboti mäest üles vedamiseks. Legost loobusime, kuna standardsed klotsid võtsid liiga palju ruumi ning kõige muu ühendamine legoga muutus liiga keeruliseks ja ebastabiilseks.
Lõpplahendus valmis Lego vankri mõõtude järgi. Põhjaks võtsime trükiplaadi, mille külge kinnitasime alumiinium vinklitest raami. Laagritel rattad koos ülekande ja mootoriga kinnitusid eraldi moodulitena. Selles lahenduses paiknevad mootorid rataste kohal, et kere keskossa jääks rohkem ruumi elektroonikale ja karukäpa tõstemehanismile.
Kere laiuse suutsime lõpuks viia 16,5 cm peale, kitsamaks enam lihtsalt ei olnud võimalik teha.
 
Karu haaramine
Karu haaramiseks kasutasime servo motoriga üles keritavat labidat. Labidas niisama ei hoidnud aga karu piisavalt tugevasti kinni, et jõuda koos karuga majast välja ilma, et karu oleks mõne ukse taha kinni jäädes ära kadunud. Lahenduseks panime labidale vasta alumiiniumist harud, mille küljest ulatuvad välja 35 mm kruvid. Esimene vaatepilt tundub küll jõhker, kuid need kruvid on täiesti tõmbid ja seetõttu ei läbista need karu ning on seega reeglitega kooskõlas.
 
Elektroonika
Robot koosneb kahest peamisest trükiplaadist - üks on kontrollerplaat, teine ümberlülituste plaat. Kontrollerplaadil on kaks PIC18F4500 ning plaat on konstrueeritud nõnda, et seda saaks kasutada erinevate konfiguratsioonidega robotites.
Ümberlülituste plaat sisaldab antud roboti spetsiifilisi ühendusi ning takisteid. Lisaks on roboti "kõhu" sees hiire rataste lugemiseks PS2 hiire plaat ning infrapuna-jooneandurite ümberlülituste plaat koos vastavate takistitega - plaadilt tuleb välja juba tavaline lintkaabel andmeliinide ja kahe toiteliiniga, nõnda et seda sobib otse PICi külge ühendada.
Kompassi ja valgustus-LEDisid on võimalik PICi juhtimisel sisse ja välja lülitada, selleks on ümberlülituste plaadil kaks transistorit. Kompassi väljalülitamise vajadus tuleneb sellest, et kui tekib I2C suhtuses probleem või tekib ajutine vooluhäire, siis võib kompassi PIC kokku joosta, mis toob kaasa kaks asja: pole enam saadaval kompassi näit ning teiseks I2C suhtus võib samuti hanguma hakata. Selle vastu aitab kompassi toitele lühiajalise reseti tegemine.
Kontrollerplaadil on kaks + toite sisendit: üks on servomootorite pin-idesse, teine PICide jaoks. Servomootoritele antakse otse akudest 5-6V pinget. Lisaks on see toide stabiliseeritud 3300 uF kondensaatoriga, kuna servode töö tekitab päris suuri voolukõikumisi. Üldiselt servod ise selle pärast segi ei lähe, kuid igaks juhuks.
PICi toite + peab olema alates 8.4V pingel, kuna plaadil on diood vale polaarsuse kaitseks, mis langetab pinget, ning seejärel veel pingestabilisaator, mis lõpuks annab välja täpselt 5V. Pingestabilisaatoril on radiaator, sest muidu läheb ta värskelt laaditud patareide ajal päris kuumaks. Ka PICide poole vool on stabiliseeritud täiendavalt kondensaatoriga 3300 uF.
PICid ise paistavad pingekõikumisi päris hästi taluvat, mida aga ei saa öelda kompassi kohta, mis on pandud samasse vooluringi - juba pinge langemisel alla 4.7-4.8V kompass jookseb kokku. Seega on pinge stabiliseerimine 5V peale väga oluline.
AD muundirte, mis on ühendatud IR andurite külge, sisendite juurde on lisatud 1nF kondensaatorid, et välja filtreerida mingi mürasagedus, mida võis muidu ostsillograafis näha vähemalt siis, kui roboti toide toiteplokist võeti. 1nF osutus selleks tarbeks kõige paremaks mahtuvuseks.
 
Andurid
Kõigi ülesande osade täitmiseks tuli robot anduritega üle kuhjata. Joone jälgimiseks kinnitasime 5 IR-andurit ühele teljele roboti esiossa. Keskmine andur on OK asendi taastamiseks. Kaks keskmise lähedal asuvat äärmist on sujuvate pöörete sooritamiseks. Kõige äärmised andurid paigaldasime võimalikult kaugele üksteisest. Need on täisnurkade läbimiseks. Kui must joon satub nende andurite vaatevälja teeb robot järsu kohal pöörde.
Kummalegi küljele panime hiire sisust tehtud teekonna andurid, mis töötavad üle PS2 pordi. Veerevatele ratastele liimisime superliimiga liivapaberi liiva. Haardumine muutus seeläbi tõesti väga heaks ja kokkuvõttes on need väga täpsed andurid. Võistluse ajaks hakkas ratastele liimitud liiv maha tulema, soovitan matistada veerevat pinda enne liimimist. Nendega andurite abiga oli plaan sõita väljaspool joont asuvate laipadeni ja tagasi joonele. Väike abi oleks neist olnud ka lühima tagasitee leidmisel. Võistlusel ei teinud me kumbagi, kuna video soft ei olnud veel päris valmis, et kaameraid actionis kasutada.
Robotil on peal kaks ukseandurit, mis on lihtsad lülitid, mis takerdudes uste taha annavad pic-ile katkestuse. Selliseid lüliteid kasutasime veel käpa all ja ülal oleku määramiseks. Karu käpa vahele jäämist kontrollib moduleeritud IR-signaaliga ise kokku pandud digitaal andur. See andur annab märku kui mingi objekt ilmub paari cm kaugusele.
Kummalgi küljel esiosas on terastraadist painutatud puuteandurid, mis annavad märku ees olvat seinast. Neid andureid kasutasime ka karu leidmisel, kuna kaamerad ei olnud selleks veel valmis. Kaamerad olid mõeldud muidu roboti ette otsa servoga liigutatavate varraste otsa. Need pidid tuppa sisenedes skännima tuba, et leida joonel mitte asuvaid laipu. Sõitmise ajal oleks seisnud kaamerad paigal ette suunatult, aidates leida rohelisi laipu, mille otsimisega joone anduritel tekkis raskusi.
Võimalikult kaugel magnetvälja tekitavatest servodest asub kompass, mis koos teekonna anduritega pidi sooritama joonelt ära minekut laibani ja tagasi joonele taastades esialgse oleku.
Kaldteede tuvastamiseks kasutasime kaht kallutusandurit. Need töötavad põhimõttel et metallkuul veereb rennis, mille ühes otsas on kontaktid, mis lühistakse kalde korral. Kahjuks on need väga tundlikud ja aktiveeruvad ka roboti järskudel liigutustel. Selle vältimiseks kasutasime programset kogumisfunktsiooni, mis tuvastab pidevat lühist kallutusandurite kontaktide vahel. Sellest abinõust hoolimata tekkis robotil siiski probleeme ja koos katsetamata softiga arvas meie robot robotexi esimeses voorus, et ta on kogu aeg kaldteel, vältis järskude pöörete tegemist ja sõitis seina. Siit ühtlasi motiiv tulevikuks luua robotitele programm käitumiseks kriisioludes, ehk siis näiteks endise "normaalsema" seisu taastamise oskus peale rajalt väljasõitu.
 
Roboti programm
Robot töötas kahel PIC-il - üks neist tegeles PWM genereerimisega taimeri katkestuste abil ning PS2 hiire suhtlusega, mis samuti nõudis suurel sagedusel katkestusi. Teine tegeles üldise juhtimise ja planeerimisega. Kokku oli PICides tööd kolmel tasandil: programm, madala prioriteediga katkestused, kõrge prioriteediga katkestused. Jõudluse poolest oleksid nad kõik ka ühte PICi ära mahtunud nii et kõik oleks töötanud hästi ajastatult. Kuid paraku tekkisid sellega seoses mälu riknemised, mille kõiki põhjusi ei õnnestunudki üles leida. Lõpptulemusena saigi tehtud kahe PICiga lahendus. "Master" PIC töötab programmi ja madala taseme katkestuste tasemel, "slave" PIC kõrge ja madala taseme katkestuste tasemel - programmi tase on tühi while(1) loop.
Mõlemas PICis on programmeerimise mugavuse ja kiiruse huvides tegelikult täpselt ühesugune programm, kuid PICid jooksutavad sellest erinevat osa sõltuvalt LEDiga seotud jala polaarsusest alglaadimise ajal.
Teostasin moodulid PWM genereerimiseks timeri katkestuste abil, mis võimaldab saada täiesti puhast signaali. Ka PS2 - hiire suhtluse koodi muutsin ringi nii et kogu (nii sisse kui välja) suhtlus käiks ainult katkestuste peal. See võimaldab vähendada pausisid juhtprogrammi töös - ootamist nõudvad protsessid viiakse läbi väljaspool juhtprogrammi järjekorda.
Debugimise jaoks kirjutasin Ilmari antud LCD juhtimise koodi ringi C keelde ja täiendasin nõnda, et teda oleks võimalik mitmel moel mugavalt kasutada.
Lisaks sisaldab kood I2C suhtluse tuge, ning moodulit kompassi ja sonaritega suhtluse jaoks. Moodulid on lihtsad, kuid vajalikud, et arvestada mõningate iseärasustega nende seadmete töös.
Kahe PICi vaheline suhtlus toimub samuti I2C teel - jällegi üle katkestuste. Servode juhtimisel saadetakse Master PICi poolt välja soovitud intervall ning seejärel loetakse uuesti slave PICist sisse - et kontrollida andmete korrektselt kättesaamist. Kui tulemus ei vasta oodatule, andmete edastamist korratakse. Kogemus näitab, et aegajalt esineb signaalis müra, ning binaarse signaali puhul mis esindab intervalle, võib see olulisi tagajärgi tekitada. Siiski pole praegune veaparanduse lahendus parim - see aeg, mis kulub kättesaadud andmete tagasi pärimiseks ning paranduse saatmiseks, slave PIC kasutab valesid andmeid. On plaanis lisada igale paketile checksum, mis võimaldaks vigased paketid kohe kõrvale heita ning võibolla ka teha veaparandust kuulavas pooles ilma täiendava suhtluse ootamiseta.
AD-muundurite lugemise moodul töötab samuti täielikult katkestustel, et seega protsess viia väljapoole põhiprogrammi tsüklit ning oleks võimalik sisse lülitada suvaline arv AD muundureid - just nii palju kui parajasti tarvis. Ka IR-kaugusandurid töötavad AD muunduri kaudu. On pooleli moodul, mis võimaldab robotil avastada/pöörata/hoida ennast kaugusandurite info abil mingi seinas asuva ukse suunda ning joonistada toa seinte orientatsiooni ning uste asukohtade kaarti.
Roboti käpa tõstmise ja langetamise jaoks on roboti sees kaks lülitit, üks ütleb kui käpp on maas ning nöör muutub lõdvaks, teine - kui käpa kang on üleval. Kui üks neist kontaktidest lülitub, tekitatakse slave PICil katkestus ning mootori töö peatatakse koheselt - vastasel korral mootor võib mehhaanika puruks rebida või hakata nööri valepidi keerama.
Kompassi jaoks on kirjutatud moodul, mis võimaldab kalibreerida kompassi näitude tabeli ning selle järgi robotit mistahes suunda pöörata. Kompassi enda skaala ei ole lineaarne - ainus mis on usaldusväärne, on see, et samas suunas näitab ta alati sama numbrit. Kompassi moodul võimaldab juhtida mootoreid nii, et robot lõpuks võimalikult täpselt teatud suunas vaatab.
PS2 hiire rataste jaoks on kirjutatud samuti moodul, mis kalibreerib väikese hiire rataste erineva veeremise tabeli, mille põhjal on hiljem võimalik rataste näitusid igas suunas liikumisel või pööramisel alati ühtlustada. Hiire rattad kummalgi küljel veerevad natuke erineva kiirusega, eriti suur on aga erinevus edasi ja tagasi veeremise näitude suhtes. Samuti näidud on erinevad kohapeal pööramise vs otsesõidu korral.
Hiirerataste moodul võimaldab juhtida robotit sõitma teatud distantsi või pöörata teatud arv kraade (peale eelnevat kompassiga kalibreerimist). Hiirerataste info abil juhtimine on üldjuhul täpsem kui kompassiga, kuid esineb hetki kui hiirerattad kõvasti valetavad. Selle olukorra paranduseks on plaanis lisada ka aja näitaja arvessevõtmine distantside sõitmisel või pöörete tegemisel.
Lisaks võimaldab hiirerataste moodul joonistada koostöös ThinCaniga läbitud teekonna kaarti.
On olemas moodul USB suhtluse tarvis, jällegi pandud tööle katkestustel. USB võimaldab saada ja vastu võtta infot ThinCanist, mis tegeleb näiteks videotöötlusega, kaardindusega, lühimat teed mööda tagasisõidu instrueerimisega. Videotöötluse soft on pooleli - aegajalt suudab ta eristada igat värvi laipasid kui ka karu, kuid valgustingimuste muutudes ta ennast ringi kalibreerida veel ei oska.
 
Tulevik
Robot on loodud käesoleva võistlusülesande täieliku lahendamise tarvis mitmete "meelte" ja tegevusvõimalustega (oluline osa selles on haaramise võimel). Edaspidi on plaanis jupphaaval asendada roboti juhtprogramm tehisintellektiga. Erinevate meelte ja tegevuste hulk ning võislusülesande keerukus ja mitmekesisus on selles ettevõtmises väga kasuks, kuna see võimaldab tehisintellektil hakata infot ühest modaalsusest teise tõlkima ja integreerima ning seeläbi oma mõtlemise taset võimalikult kõrgele tõsta.
 
Joonised
Suurendamiseks kliki pildil.
 
Kontrollerplaat
 
Ümberlülituste plaat
 
 
Pilte 
Suurendamiseks kliki pildil.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   
 
Piltide eest aitäh Endelile.
 
 
 
 
 
RAPORTI LÕPP.