Robotex 2002 G1 ja G2 aruanne
Grupi liikmed
- Argo Liiv Argo.Liiv AT itcollege.ee
- Jaan Oras
- Marek Lints Marek.Lints AT itcollege.ee
- Margus Ernits Margus.Ernits AT itcollege.ee
- Sander Aiaots Sander.Aiaots AT itcollege.ee
- Tannar Esna Tannar.Esna AT itcollege.ee
- G1 Robot:) (e-maili pole, kuid seda asendab vasaku kõrva poolt
tehtud pilt) vasakul
- G2 Robot (paremal)
Ülesande püstitus
Meeskondade ülesandeks oli konstrueerida autonoomne robot, mis
suudaks võistlupolügoonil olevad mustad pallid valgete seast eristada,
ning seejärel liigutama pallid ettenähtud kohta. Täpsem ülesande
kirjeldus leheküljel:http://www.ttu.ee/robot/openylesanne.html
Lühikirjeldus
Robot leiab palle pildituvastuse abil. Robotil on peal videokaamera.
Pilt saadetakse üle raadiolingi PC arvutisse, kus kujutis töödeldakse ja
robotile tagastatakse nurk pallini ja nurk pesani. Robotil on pallide
“neelamiseks” hari, mis käib sõidu ajal ringi. Pesa avastamine toimub
infrapuna-andurite abil. Pallid asetatakse pessa harja pöörlemissuuna
muutmise ja tagasisõitmisega. Roboti paneb liikuma 2 samm-mootorit.
Mehhaanika väljatöötlemisel kasutamise MECCANO konstruktorit.
Kere
|
Kere kandev konstruktsioon on 2 samm-mootori korpust,
mis on omavahel võimalikult jäigalt ühendatud. Mootorite ja ülekande
ümber on kandevkonstruktsioonid lisatud vastavalt vajadusele, järgides
printsiipi, et masskese peaks olema ratastest veidi eelpool. Masskesme
valik tagas kohapeal pööramise võimaluse ja lubas loobuda kolmandast
rattast, mis tegi kogu konstruktsiooni lihtsamaks ja kergemaks.
Masskeset oleks saanud viia ka mootorite teljele, kuid siis tekkis
ebameeldiv kõrvalefekt kohaltvõtul. Roboti mootorid tõstsid esiotsa
(toimus roboti pööre ümber mootorite võlli), mis takistas liikumist,
kuna esimene ja tagumine ots põrkasid vaheldumisi vastu maad. Antud
probleemi vältimiseks on masskese viidud ette ja kere toetamiseks on
monteeritud 2 plastiksuuska.
|
Veermik
|
Ülekanne on lihtne ja koosneb kahest hammasrattast mootori
kohta. Seega ülekanne on XX/XX.
Kuna pildituvastuse ja pööramise täpsus oli üllatavalt hea, siis
asendasime väiksema läbimõõduga rattad suuremate vastu, millega
saavutasime suurema kiiruse.
|
Kaamera
|
Kaamera on mustvalge ja ilma optikata.
Mõned pildid, mis on tehtud roboti kaameraga
  
Kaamerast tuleva pildi töötlemiseks on kasutusel PC arvuti,
kuna HB 2MHz mikrokontrolleri abil ei saa reaalajas töödeldud tulemust.
|
Raadiolink kaamera-PC
|
Kuna HB liidesed ei võimalda
kasutada i2o, sinihammast, WLAN jne, siis on kaamera videoväljund
ühendatud otse 2GHz saatjaga. Vastuvõtjast on otse composit e video
väljund PC framegrabber kaardi sisendisse. Analoogset raadiolinki
kasutatakse turvalahendustes. PC framegrabber on tavaline videosisendiga
TV kaart.
|
Roboti “Aju”
Robotit juhib HandyBoard.
HB on Motorola 6811 mikrokontrolleril baseeruv mikroprotsessorsüsteem.
HB omab integreeritud RS232, infrapuna (Sony protokoll), Digital/IO ja
Analog/IO liideseid. Taktsagedus 2MHz.

HB programmeerimine käib IC (InteracticeC) abil. Kahjuks ei saa HB
programmeerida GNU gcc abil (stabiilne gcc sellele platvormile puudub),
siis kasutasime suletud tarkvara IC3.x. IC toetab mitmeid C
konstruktsioone, kuid palju on puudu. Kõige rohkem häiris case valikulause puudumine.
HP programm
HB I/O
Puuteandurid kasutavad HB digital in viike. Infrapunaandurid
kasutavad analoosisendeid. PC-st saadetud nurkade edastamiseks on
kasutusel HB RS232 port. Kuna HB RS232 port ei opereeri pingega
-12V...+12V vaid 0..5V, siis on PC->HB andmete saatmisel vahel HB
liides (MAX232). HB juhtimiseks on kasutusel nupud start ja stop.
Raadiolink PC-HB
helisignaali
edastamiseks. Kuna HB omab RS232 sisendit, siis PC-HB nurkade edastamine
kulges varem kolmejuhtmelise RS232 kaabli kaudu. Kaabel rippus les ja
oli suhteliseltKuna PC töötleb pildi ja arvutab välja nurga pallini ja
nurga pesani, siis nende andmete saatmiseks ei saa kasutada
turvasüsteemist laenatud raadiolinki, mis on mõeldud videosignaali ja
ebamugav robotit siduv seade. RS232 raadiolingi realiseerimiseks on
kasutusel 433MHz Tranciever. Kuna antud seade on ette nähtud
suhtlemiseks BasicStamp nimelise kontrolleriga, ning kontrolleris on
sisend/väljund-takistuste sobitamiseks emitterjärgurid, siis sai
vastavad järgurid ja toitepinget reguleerivad skeemid ise kokku pandud
ja lahendus toimis.
Puuteandurid
Ülesane lahendamisel võib
robot sõita vastu takistust ja kindlasti tuleb midagi ette võtta,
näiteks pöörata takistusest eemale. Kuna sein või muu takistus võib ette
sattuda igal ajal, siis seadsime robotile lülitina töötavad andurid.
Puuteanduri moodustab kaks jäika traati, mis seina või muu takistuse
kaasabil moodustab vooluringi. Kahjuks praktikas selgus, et kaks voolu
juhtivat traaditükki ei pruugi kokku saades voolu juhtida või ühe
"impulsi" asemel antakse mõned impulsid. Esmapilgul lihtsana näiv
ülesanne "teha lüliti" osutus üheks keerukamaks probleemiks. Teha
tundlik, töökindel ja kerge, kogu robotit piirav puuteandurite võrk oli
tegevus, mille peale kulus rohkem aega, kui ülejäänud mehaanika peale
kokku.
Signaaligeneraator
Roboti
vedavaks jõuks on samm-mootorid. Mootorite valik võimaldab robotit väga
täpselt pöörata. Mootorite pideva pöörlemise tagamiseks peaks HB
genereerima digitaalväljundisse stabiilselt signaali. Suured mured
tekkisid peale HB-s kasutatava programmikoodi kasvamist. Kuna programm
jookseb lõpmatus tsüklis ja "main" tsükkli pikkus kasvas pidevalt, siis
jäi HB poolt samm-mootorite "step" signaali genereerimine järjest
aeglasemaks. Kindlasti oleks lahendus peatsüklis "step" signaali mitmes
kohas saata, kui see oleks ikkagi tagajärgede "ravimine".
Robotiehitamine on põnev selle poolest, et erinevaid asju annab väga
erinevalt lahendada. Mõne probleemi lahendab mehaanika ja mõne tarkvara.
Kuna antud ülesandes on vaja toota juhitavat "step" signaali mõlema
ajami jaoks, siis tegime lihtsa elektroonikaskeemi digitaalsignaali
tootmiseks.

- R1 muudetava takistusega takisti 1.5K
- C1 0.1µF
- C2,C3 2nF
- Mikroskeem SN74HC00N (K155LA3)
Signaaligeneraator töötas ostsillograafiga mõõtmisel väga hästi.
Reaalselt samm-mootori draiveri plaadi külge ühendamisel nõksusid
mootorid edasi-tagasi sõltumatult takisti R1 väärtuse muutmisest.
Juhendaja andis vihje, et "Kas signaali kuju on ikka ilus?". Kuna "ossi"
ekraanil oli signaal kena siis seda kahtlustada ei osanud. Mootorid said
kena hoo sisse, kui väljundi silumiseks kondendsaatorid C2 ja C3 skeemi
ühendasime. Roboti ehitamise käigus vaikselt tekkiv paranoia sundis
skeemi täiendama toitepingega paralleelse elektrolüütkondendsaatori ja
valgusdioodindikaatori näol.
|
Protokoll PC ja roboti vahel
Kuna mõlemad grupid kasutavad sama PC tarkvara, siis alustasime
sellest, et leppisime kokku protokolli e "mängureeglid" PC ja Roboti
vaheliseks suhtlemiseks. Kuna dokument valmis enne programmikoodi, siis
oli selle implementeerimine kerge.
Protokoll andmevahetuseks arvuti ja roboti vahel
Andmeid edastatakse 1 baidiste elementidena
baidi 2 ülemist bitti määravad ära edastatava andmeelemendi sisu.
esimest kahte baiti nim. bitmapiks
00 - nurk lähima objektini e 0-63 kümnendsüsteemis
01 - nurk pesani 64-127
10 - käsklus 128-191
11 - reserv 192-255
Nurk lähima objektini:
bitmap 00
Sisu: Nurk 0-63
Implementeerime
0 - 30 - pööra vasakule (0 pöörab rohkem)
31 - keskpunkt st ei pööra
32 - 62 pööra paremale (62 pöörab rohkem)
Nurk pesani
bitmap 01 (arvud 64-127 kümnendsüsteemis)
64 - 94 pesa vasakul
95 - pesa otse ees
96 - 125 pesa paremal
Käsklus:
bitmap 10
Sisu: Roboti juhtimise käsud
Implementatsioon
0 - stop 128 //robot seisma
1 - start 129
2 - tagasikäik b010000010 e 130
3 - edasikäik 131 b010000011
4 - pööra vasakule 132 b10000100
5 - pööra paremale 133 b10000101
6 - lülitu käsitsijuhtimisele 134 b10000110
7 - lülitub kaamera juhtimisel 135 b10000111
8 - exit 136 // pidu läbi ... start ei mõju ka enam
9 - pallid välja 137
Reserv
bitmap 11 e 192-255 kümnendsüsteemis
PC arvuti
Kuna HB protsessori jõudlus pole piisav pilditöötluse lahendamiseks,
siis kasutasime PC masinat videosignaali töötlemiseks reaalajas.
Esimesed katsed sai tehtud Matrox framegrabberi ja WinXP peal. Kahjuks
"pangus" süsteem katsetamise käigus korduvalt (peale debuggerist
väljumist VC all masin bootis alati) Kuna mõistus probleemist üle ei
käinud, siis installisime Linux
süsteemi, Video4linux teegid,
SDL e Simple DirectMedia Layer
teegid ja bttv
draiveri. Valisime poest odava WinTV "telekakaardi" installeerisme selle
masinasse ja kasutades libbgrab teeke saime pildi kätte.
Framegrabberisse saime video turvasüsteemides kasutatava 2GHz
videovastuvõtja abil. Robotist saabuvat pilti saab vaadata ka suvalise
TV programmi abil. Testimisel kasutasime xawtv programmi. G2 Jaani poolt
kirjutatud pilditöötluse programmi kasutasime mõlema meeskonnaga. Koodi
korduvkasutus ja suuremahuline tööjaotus oli mõlema grupi heade
võistlustulemuste alus. Programm kirjutab arvutustulemuse COM porti.
Pordiga suhtlemise programmi kirjutamiseks kasutasime levinumat
programmeerimismeetodit CAP e CopyAndPaste lehelt Linux
Serial Programming HOWTO Programmi ise (Kui Jaan on nõus GPL
litsentsiga)
"BOTMASTER" Klahvid
ESC - botmasterist välja
Nooleklahvid (vasakule, paremale, edasi, tagasi)
e - exit saadetakse robotile
s - start
m - command mode on
k - command mode off
f - full screem on/off
c - view mode camera/regogn
9 - kontrastsus vähemaks
0 - kontrastsus suuremaks
7 - heledus väiksemaks
8 - heledus suuremaks
Kasutatud tarkvara
Samm-mootori draiver
Samm-mootorite ringiajamiseks kasutasime mikroskeeme
UNC5804 (üks mootori kohta) Directionjuhitakse
HB digital oudist. Step Input saame
signaaligeneraatorist.
|
Probleemid
- Puuteandurid on liiga ebatöökindlad
Probleem: kui andur on sama töökindel nagu tööstuslik lüliti, siis ei
ole andur tundlik, või ei ümbritse robotit igalt poolt. Samas kui andur
on tundlik, siis võib andur jääda sisse või anda valehäiret või lakata
töötamast.
Lahendus: Dubleeritud andurid (1 tundlik ja 1 töökindel) Kui programm
saab aru, et tundlik andur on kinni kiilunud, siis tuleb selle
kontrollimine lõpetada.
- Ülesande lahendust annab alati täiustada roboti kere,
elektroonika, programmi jne muutmisega. Iga muudatus eeldab teiste
komponentide eemaldamist, kohendamist ja testimist. Seega ei saa teha
väga stabiilset lahendust. Näiteks ei saa teha korralikku töökindlat
keret. Lahendus Veermik teha töökindel ja ülejäänud osad peavad olema
kergelt vahetatavad (puuteandureid võib olla ka tagavaraks) Elektroonika
peab olema roboti küljest kergesti eemaldatav ja tagasi monteeritav.
(krõpsuga kinni ja pistikud peavad paremad olema)
- Programmi muudatusega kaasneb keeruline test, kuna selleks, et
veenduda muudatuse piisavuses ja selles, et originaalfunktsionaalsus
pole vähenenud on vaja teha moodulteste (teha testprogrammid ainult
roboti ühe käitumissituatsiooni testimiseks. Näiteks nurka sõitmise
algoritmi peab saama eraldi testida ilma terve programmikoodi robotisse
laadimiseta. Lahendus moodulid preprotsessori abil eraldatuks ja seda,
mida robotise laetakse peab olema kergelt konfigureeritav.
- Probleem: Robot käitub kummaliselt aeglaselt/raskelt ja ei saa
aru, kas muudatus kere ehituses või elektroonikas põhjustab selle või on
aku tühi, kuna akude täituvust on raske hinnata. Tihti tühjeneb
sõiduaku ühe testitsükkli käigus. Lahendus akulaadijaid peab olema
rohkem, kui üks iga akutüübi kohta. Aku täituvuse kontrolliks tuleb aku
väikese takistusega ära koormata ja mõõta pingelangu takistil (seega
saab hinnata aku sisetakistust.
Mida õppisime?
Mitte midagi:) Kuna oleme veendunud, et katset tuleb korrata!
Tegelikut sai iga liige erinevat kogemust ja teavet. Seega toon ära iga
liikme subjektiivse arvamuse http://www.itcollege.ee/~aliiv/robot/.
Lõpp:)
Pilte G1 ja G2 robotitest http://gallery.ejaam.com/view_album.php?set_albumName=robot
Lehe sodis kokku Margus.