Danijel Senekovič
PROGRAMSKI IN STROJNI VMESNIK ZA
KRMILJENJE ROBOTSKE ROKE
Diplomsko delo
Maribor, december 2010
I
Diplomsko delo visokošolskega strokovnega študijskega programa
PROGRAMSKI IN STROJNI VMESNIK ZA KRMILJENJE ROBOTSKE
ROKE
Študent: Danijel Senekovič
Študijski program: VS ŠP Računalništvo in informatika
Smer: Logika in sistemi
Mentor: prof. dr. Damjan Zazula, računalništvo
Lektorica: Monika Fičur
Maribor, december 2010
III
ZAHVALA
Ob zaključku diplomskega dela se iskreno
zahvaljujem mentorju prof. dr. Damjanu Zazuli
za strokovno pomoč in vodenje pri opravljanju
diplomskega dela.
Posebna zahvala velja staršem, ki so mi
omogočili študij.
IV
PROGRAMSKI IN STROJNI VMESNIK ZA KRMILJENJE ROBOTSKE ROKE
Ključne besede: Robotika, vgrajeni sistemi, elektronski krmilnik, programsko krmiljenje robota, serijska povezava
UDK: 004.5:007.52(043.2)
Povzetek
V diplomskem delu predstavimo najprej področje robotike. Pogledamo si trenutno
stanje robotike v svetu in kje se uporablja. Nato opisujemo zahteve za izdelavo
programskega in strojnega vmesnika za krmiljenje robotske roke. V nadaljevanju
pojasnimo, kako smo zasnovali in izdelali strojni vmesnik za krmiljenje robotske roke,
in opišemo uporabljene komponente. Zatem sledi opis zasnove programskega dela, kjer
razložimo rešitev uporabniškega grafičnega vmesnika, zasnovo protokola za
komunikacijo med računalnikom in mikrokrmilnikom, mikrokrmilniški program in
funkcionalnost za izvajanje zaporedja gibov. V zadnjih dveh poglavjih predstavimo
rezultate diplomskega dela in predlagamo, kakšne izboljšave bi še bile možne.
V
SOFTWARE AND HARDWARE INTERFACE FOR ROBOTIC
ARM CONTROL
Key words: Robotics, Embedded Systems, Electronic Controller, Program Controlled Robot, Serial Connection
UDC: 004.5:007.52(043.2)
Abstract
In this graduation work, we first introduce the area of robotics. We examine its current
role and where is it being used. Then we describe the requirements for development of a
software and hardware interface for robotic arm control. We also explain how the
hardware part of the controller was designed and developed, and describe built-in
components. Afterwards, the description of software implementation and graphic user
interface solution are revealed, design of communication protocol between personal
computer and microcontroller and microcontroller software detailed, and functionality
for executing sequential movements explained. The last two chapters interpret the
results of graduation work and investigate possibilities for further improvements of the
system built.
VI
VSEBINA
1 UVOD ...................................................................................................................... 1
2 ROBOTIKA IN NJEN RAZVOJ V SVETU ........................................................ 3
3 ZAHTEVE ZA PREPROSTO UPRAVLJANJE ROBOTSKE ROKE ............ 9
4 IZDELAVA STROJNEGA KRMILNIKA ROBOTSKE ROKE .................... 15
4.1 RAZVOJNO OKOLJE IN UPORABLJENE KOMPONENTE ............................ 16
4.1.1 Opis razvojne plošče PICDEM 2 demo board ........................................... 16
4.1.2 Mikrokrmilnik PIC 16F877A ...................................................................... 17
4.1.3 Motorski gonilnik SN754410 ...................................................................... 25
4.2 ZASNOVA MIKROKRMILNIŠKEGA VEZJA ............................................... 26
5 IZDELAVA KRMILNEGA PROGRAMA IN UPORABNIŠKEGA
VMESNIKA .................................................................................................................. 29
5.1 ZASNOVA UPORABNIŠKEGA VMESNIKA ............................................... 30
5.1.1 Grafični uporabniški vmesnik ..................................................................... 30
5.1.2 Povezava osebnega računalnika z mikrokrmilnikom ................................. 32
5.2 PROTOKOL ZA POVEZAVO UPORABNIŠKEGA VMESNIKA S KRMILNIM
PROGRAMOM.... ........................................................................................................... 36
5.3 ZASNOVA KRMILNEGA PROGRAMA ...................................................... 37
5.4 IZVAJANJE KRMILNIH ZAPOREDIJ ......................................................... 41
6 REZULTATI ......................................................................................................... 45
7 SKLEP ................................................................................................................... 47
8 VIRI ....................................................................................................................... 49
9 PRILOGE .............................................................................................................. 51
9.1 SEZNAM SLIK ....................................................................................... 51
9.2 NASLOV ŠTUDENTA ............................................................................. 52
9.3 KRATEK ŽIVLJENJEPIS.......................................................................... 52
Programski in strojni vmesnik za krmiljenje robotske roke Stran 1
1 UVOD
Človek si že od nekdaj poizkuša poenostaviti življenje z orodji in napravami, ki bi ga
razbremenili težkega, umazanega in napornega dela. Naj bo to priostren kamen, ki ga je
človek uporabljal 10000 let pred našim štetjem, ali visokotehnološki robot, ki ga najdemo v
raziskovalnem laboratoriju oziroma v kakšnem drugem okolju, kjer nam je robot v veliko
pomoč. Robot je stroj, ki ga nadzoruje računalnik in ga lahko programiramo, da samostojno
opravlja določena opravila. Izraz robot se je prvič pojavil v gledališki igri Karla Čapke, R.U.R
(Rossum's Universal Robots) leta 1920. Beseda prihaja iz češkega jezika in pomeni »delati«
(robota) [1]. Robote pogosto najdemo v industriji za prenašanje materiala ali za izvajanje
ponavljajočih se opravil. Tako lahko robotsko roko, pritrjeno na delovno mizo, uporabljamo
za barvanje delov stroja ali sestavljanje elektronskih vezij. Drugi roboti so zasnovani za delo v
človeku nevarnih okoljih (deaktiviranje bomb, raziskovanje vesolja, morskih globin itd.).
Nekateri roboti so opremljeni s tipali, na primer za dotik ali svetlobo, in so programirani tako,
da lahko na osnovi zaznanih podatkov sprejemajo preproste odločitve.
Zaradi porasta uporabe robotike v svetu je ta tehnološka veja zelo zanimiva za razvijalce. Še
posebej zato, ker so danes proizvodi, kot so na primer mikrokrmilniki, elektronski elementi,
programatorji, namenski čipi itd., cenovno zelo dostopni in jih lahko nabavimo tudi preko
svetovnega spleta. Prav tako imamo zelo veliko izbiro (brezplačnih) programskih orodij, ki
nam omogočajo zelo strukturirano in enostavno razvijanje programske opreme. Tako lahko z
relativno nizkimi stroški nabave materiala in dobro idejo ustvarimo tržno zelo zanimiv
proizvod.
S tem diplomskim projektom želimo ugotoviti, na kakšne izzive naletimo med razvojem
sistema, ki zajema praktično vsa področja snovanja računalniških sistemov: od programiranja
v visokem in zbirnem programskem jeziku do zasnove in izvedbe strojne opreme. V industriji
zelo pogosto vidimo programljivo robotsko roko, ki izvaja zaporedja gibov, da opravi
določeno opravilo. Tako bomo s tem diplomskim projektom ponazorili izvedbo in nato
delovanje programljive robotske roke, kot jo srečamo v industriji. Robotske roke pogosto
zasledimo tudi v izvedbah, pri katerih roka ne izvaja ponavljajočih se sekvenc, ampak je
poljubno krmiljena preko uporabniškega vmesnika. Tako bomo tudi mi razvili grafični
uporabniški vmesnik, ki omogoča, da z robotsko roko izvajamo poljubne gibe. Take robotske
Programski in strojni vmesnik za krmiljenje robotske roke Stran 2
roke so najpogosteje uporabljene za raziskovalne namene, ki vodijo v razvojne projekt in
industrijsko izvedbo.
V diplomskem delu se lotevamo razvoja preprostega krmilnika za namiznega robota. V
sedmih poglavjih opisujemo zasnovo in izdelavo programskega in strojnega vmesnika za
krmiljenje robotske roke na način, kot ga lahko najdemo v industriji. Uvodnemu poglavju
sledi drugo poglavje, v katerem povzemamo današnje stanje na področju robotike ter smeri
razvoja in uporabe. Tretje poglavje vsebuje zahteve za izvedbo naloge in specifikacije
komponent, ki smo jih uporabili. Kako je zasnovan in izdelan strojni vmesnik, razlagamo v
četrtem poglavju. Opisujemo uporabljene komponente in predstavimo shemo vezja. V petem
poglavju zasnujemo programske rešitve. Izdelali smo uporabniški vmesnik, preko katerega
uporabnik krmili robotsko roko. Pregledamo njegov grafični in logični nivo ter kako se
izvajajo krmilna zaporedja. Opisujemo tudi krmilni program ter kako je zasnovan protokol
med uporabniškim vmesnikom in krmilnikom. Rezultate predstavljamo v šestem poglavju,
sklep in možnosti za izboljšave pa združujemo v sedmem poglavju.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 3
2 ROBOTIKA IN NJEN RAZVOJ V SVETU
Z zahtevnejšimi opravili se je pojavila težnja po sodobnejših in zmogljivejših napravah, ki
delo opravijo hitreje in natančneje. Že ob koncu prve polovice drugega tisočletja je Leonardo
Da Vinci začel skicirati naprave v obliki človeškega telesa, ki so posnemale gibe človeka. V
obdobju industrijske revolucije so nastali veliko bolj uporabni izumi, kot na primer radijsko
voden torpedo Nikole Tesle, in nato človeku podobni androidi, ki so lahko izvajali gibe, kot
jih lahko počne človek. Tako je počasi rdeča nit razvoja postala elektronika in ne več
mehanika.
Prvi digitalni in programljivi robot je leta 1954 izumil George Devol. Imenoval ga je
Unimate. Kupilo ga je podjetje General Motors, ki ga je uporabljalo za dvigovanje vročih
kovinskih predmetov, saj je bilo to delo nevarno za delavce (slika 1). Od takrat naprej so
roboti bili vse bolj uporabljeni v industriji, da so nadomestili težka, ponavljajoča se in za
delavce nevarna dela. In, kar je še bilo tudi zelo pomembno, zmanjšali so lahko živo delovno
silo in na ta način oklestili stroške.
Slika 1: Prvi programirljivi robot
Robotika se je nato uveljavila na veliko področjih. Eno izmed najpomembnejših področij je
medicina, kjer zdravniki izvajajo posege z robotskimi rokami. Takšne operacije pridejo še
Programski in strojni vmesnik za krmiljenje robotske roke Stran 4
posebej do izraza, kjer je potrebna izredna natančnost. Zdravnik krmili robotske roke preko
terminala, ki pretvori njegove gibe v ukaze za robotsko roko. Glede na to, da je operacijska
miza fizično ločena od terminala za upravljanje robotske roke, je lahko zdravnik, ki izvaja
operacijo, v isti sobi ali pa izvaja operacijo s kakšnega oddaljenega terminala [3][7]. Rezultat
so manjši posegi v bolnikovo telo, kar zmanjša možnosti za okužbe, pospeši okrevanje
bolnika in skrajša čakalne vrste [2]. Področje, kjer se je robotika močno razvila, je tudi
vojaška industrija. Razvoj zasledimo že v obdobju druge svetovne vojne, ko je Sovjetska
zveza razvila radijsko voden tank, imenovan teletank, in Nemci njihove daljinsko vodene
mine. Danes robote uporablja veliko vojsk po svetu. Najpogostejša oblika vojaškega robota
predstavlja manjše gosenično vozilo, ki ga pehotne enote uporabljajo za pregledovanje stavb,
nekatere verzije pa imajo tudi nameščeno oborožitev, da lahko pokončajo sovražnika. Za
deaktiviranje min se uporablja robot v obliki vozila, ki ima nameščeno robotsko roko, katero
je moč upravljati z velike razdalje za varno deaktiviranje eksploziva. Uporabljajo pa se tudi
brezpilotna vodna plovila (slika 2), ki so vključena v boj proti morskemu piratstvu in
prevozom prepovedanih drog, proti čemur se bojuje ameriška obalna straža [8].
Slika 2: Robotsko plovilo za boj proti mamilskim kartelom
Robotika se je tudi močno razvila v vojaškem letalstvu. Večina vojaških velesil že uporablja
brezpilotna letala (ang. UAV – Unmanned Aerial Vehicle), ki samostojno letijo v izvidniške
misije. Ti leteči roboti so samostojni, vendar jim operater pred začetkom misije označi
območje, ki ga morajo preleteti, nato pa brezpilotno letalo samostojno izvede vzlet, izvidniško
Programski in strojni vmesnik za krmiljenje robotske roke Stran 5
misijo in pristanek. Nekatere najnovejše verzije takih letal pa imajo oborožitev, tako da lahko
cilje tudi napadejo z lasersko vodenimi izstrelki.
Področje, kjer se robotika razvija brez prave alternative, je raziskovanje globin morij in
vesolja. Ker so to območja, kamor človek ne more oziroma je zanj prenevarno, je to pravšnja
naloga za raziskovalne robote. Danes v razvoju vesoljske robotike vodi ameriška vesoljska
agencija NASA, ki je med drugim uspešno poslala na Mars dva robota za raziskovanje
površja. NASA pa ni bila prva, ki je na drugi planet poslala robota. Leta 1970 je na Luno
prvega robota poslala Sovjetska zveza. Imenovan je bil Lunokhod in je bil radijsko voden z
Zemlje. Uspelo mu je posneti fotografije, ki še dandanes spadajo med najbolj podrobne
fotografije Luninega površja [9].
Najpomembnejše ekonomske in družbene učinke pa ima gotovo razvoj robotike v industriji.
Najpogostejša oblika robota v industriji je robotska roka, ki lahko posnema gibe človeške
roke. Primer industrijske robotske roke kaže slika 3.
Slika 3: Industrijska robotska roka
Industrijski roboti večinoma izvajajo ponavljajoča se in za človeka utrujajoča dela.
Uporabljajo jih tudi za natančna varjenja in za človeku nevarna dela.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 6
Moderni industrijski roboti pomenijo enega vrhuncev tehnike. Robot v velikosti človeka z
lahkoto premika težje predmete zelo hitro in natančno tudi po več let brez prekinitve [10].
Da lahko definiramo zmožnosti robotov v industriji, jih opisujemo z lastnostmi oziroma
parametri delovanja:
- Število osi oz. stopnja svobode (ang. Degrees of Freedom)
Dve osi sta dovolj, da lahko dosežemo katerokoli točko na ravni površini. Da lahko
dosežemo katerokoli točko v prostoru, pa potrebujemo tri osi. Z nadaljnim večanjem
števila osi robota dosežemo še večjo fleksibilnost za izvajanje zahtevnejših gibov.
- Delovno območje (ang. Working envelope)
Pojem opisuje prostor, v katerem se bo robotska roka gibala.
- Kinematika
Ta je odvisna od razporeditve togih členov in sklepov robota, ki definira njegovo
možnost gibanja.
- Nosilnost
Z njo je opredeljena največja dovoljena teža predmetov, ki jih robot lahko dviguje.
- Hitrost
Določena je s tem, kako hitro lahko robot premakne konico roke do določene točke.
- Pospešek
S pospeškom definiramo, kako hitro lahko os sklepov na robotski roki pospeši. Ta
lastnost je zelo pomembna, ko razvijamo robotsko roko, pri kateri zahtevamo hitre
gibe.
- Natančnost
Natančnost robotske roke je zelo pomembna. Pove, kakšno je odstopanje od
predhodno definirane točke, ki bi jo robotska roka morala zadeti. Natančnost lahko
povečamo z zunanjimi tipali (merilnik razdalje, video kamera itd.), ki z zaznavanjem
sporočajo oddaljenost robotske roke od ciljne točke.
- Ponovljivost
Pri robotu, ki izvaja ponavljajoče se nize gibov, je zelo pomembno, da se po vsaki
zaključeni sekvenci vrne v začetni (izhodiščni) položaj. To mu omogoča, da izvede
Programski in strojni vmesnik za krmiljenje robotske roke Stran 7
vsako naslednje zaporedje gibov enako. V primeru odstopanj je treba izvesti
kalibracijo.
- Nadzor gibanja
Robot, ki izvaja preprosto, ponavljajoče se pobiranje in polaganje predmetov, ne
potrebuje nobenega dodatnega nadzora. Gibati se mora po vnaprej določenih
smernicah, ki med delovanjem ne potrebujejo nobenih popravkov. Za zahtevnejša
opravila, kot je na primer varjenje in lakiranje površin, okoliščine niso vedno povsem
enake. Zato je potreben nadzor in morebiti tudi popravljanje hitrost in usmerjenosti
robotske roke.
- Pogon
Najpogosteje se pojavljata eletrični in hidravlični pogon. Električni pogon zagotavlja
hitrost in je primeren za manjše robote. Hidravlični pogon mogoča dvigovanje težjih
bremen in je primeren za uporabo v okoljih, kjer bi lahko iskra eletričnega motorja
zanetila požar [11].
Da lahko robot samostojno opravlja naloge, ga treba najprej naučiti (programirati), katere gibe
naj izvaja in v kakšnem zaporedju. To se najpogosteje izvaja preko računalnika, ki ima
nameščeno namensko programsko opremo. Tipično je to (grafični) uporabniški vmesnik, ki
nam omogoča pisanje programov za robote. Poznamo več tehnik programiranja robotov:
- Ukazi položaja (ang. Positional commands)
Robot je voden tako, da preko grafičnega uporabniškega vmesnika ali ukazne vrstice
vnašamo želene koordinate X, Y in Z. Robot nato sledi tem koordinatam.
- Učna plošča (ang. Teach pendant)
Položaji robota so vneseni preko učne plošče. To je naprava, ki jo držimo v roki in
omogoča premik robotske roke z uporabo krmilne ročice oziroma gumbov. Položaji se
shranijo v krmilnik robota oziroma robotske roke, ki je nato vodena skozi shranjene
položaje.
- Tehnika ročnega vodenja (ang. Lead-by-the-nose)
Je tehnika, ki jo ponuja veliko proizvajalcev robotike. Pri tej metodi tehnik z rokami
premika robotsko roko v želene položaje. Medtem programska oprema beleži vse
Programski in strojni vmesnik za krmiljenje robotske roke Stran 8
premike v spomin krmilnika robotske roke. Ta tehnika se pogosto uporablja pri učenju
robotov za lakiranje površin.
- Programiranje brez povezave (ang. Offline programming)
Pri tej tehniki ne potrebujemo neposredne povezave do robotske roke, ampak za
definiranje gibov uporabljamo grafični simulator, v katerem simuliramo zaporedje
položajev robotske roke. Rezultat take simulacije je zbirka, v kateri so opisani vsi gibi
in ki jo nato naložimo v krmilnik robotske roke. Težava, na katero pri taki tehniki
največkrat naletimo, je neujemanje grafičnega modela s stvarnim modelom robota
[11].
Robotika je bila in je pogosta tema avtorjev, ki so pisali znanstveno-fantastične zgodbe. Tako
je Isaac Asimov leta 1942 zapisal tri osnovne zakone robotike, ki so aktualni še danes:
1. Robot človeka ne sme poškodovati oziroma mu škodovati s svojim nedelovanjem.
2. Robot mora ubogati ukaze, razen če so v nasprotju s prvim zakonom.
3. Robot mora zaščititi sebe, razen če je to v nasprotju s prvima zakonoma [4].
Programski in strojni vmesnik za krmiljenje robotske roke Stran 9
3 ZAHTEVE ZA PREPROSTO UPRAVLJANJE ROBOTSKE ROKE
Preučevanje krmilnih protokolov in delovanja robotskih rok je laže izvedljivo, če uporabljamo
simulatorje robotske kinematike in dinamike ali pa če se zatečemo k robotskim modelom. Tak
je bil tudi naš pristop. Razvili smo strojno in programsko opremo za krmilnik, ki usmerja
miniaturni model robotske roke [15]. S svojo rešitvijo smo želeli preizkusiti preproste
scenarije za gibanje roke, in sicer po vnaprej predpisanih scenarijih. Najprej smo podrobneje
določili zahteve za upravljanja robotske roke, pri čemer smo upoštevali specifikacije opreme,
s katero smo izvedli raziskavo. V nadaljevanju opisujemo miniaturni model robotske roke,
njegovo zasnovo in način krmiljenja, nato pa opredelimo zahteve za uporabniški vmesnik, s
katerim je mogoče voditi takšno robotsko roko po vnaprej napisanih scenarijih. Slednji je
sestavljen iz strojnega in programskega dela v krmilniškem podsklopu, povezave s
splošnonamenskim računalnikom in računalniške aplikacije za vodenje robotske roke.
Miniaturni model robotske roke Owi-535
Robotsko roko Owi-535 je mogoče kupiti v prosti prodaji preko svetovnega spleta in je
primerna za raziskovalne in eksperimentalne namene. Model je treba najprej sestaviti in
zvezati vse elektronske dele. Robotska roka je zasnovana tako, da jo nadzorujemo preko
krmilne ploščice, ki je povezana z elektromotorji, za napajanje pa so uporabljene baterije, ki
so hranjene v podnožju robotske roke. Izdelana je iz plastične mase in vsebuje pet
elektromotorjev, pri čemer je vsak elektromotor vgrajen v svoje ohišje. Elektromotor vrti
prenosna kolesca, ki delujejo kot varovalo pri preobremenitvi ali kadar hočemo člen robotske
roke iztegniti preko območja delovanja. V tem primeru začnejo kolesca preskakovati, čigar
ropotanje se tudi sliši. To preskakovanje kolesca prepreči, da bi polomili kak del robotske
roke. Vendar pa ni priporočljivo preobremenjevati roko, saj se lahko tudi kolesca trajno
poškodujejo. Ohišja elektromotorjev so med seboj povezana s plastičnimi nosilci, ki
predstavljajo člene in tvorijo obliko robotske roke. Na koncu robotske roke je nameščeno
prijemalo v obliki dvoprstnih klešč. Z njimi lahko zagrabimo manjše predmete in jih poljubno
premeščamo, kar je ena ključnih funkcionalnosti, ki bo realizirana v našem diplomskem delu.
Nad prijemalom je nameščena bela svetleča dioda (LED), s katero si lahko razsvetlimo
delovni prostor. Roka je napajana preko štirih baterij tipa D z 9 V napetosti, kar je velika
slabost, saj nam uporaba baterijskih vložkov onemogoča dolgotrajno nemoteno delovanje
Programski in strojni vmesnik za krmiljenje robotske roke Stran 10
robotske roke. Zato smo baterije odstranili in roko napajamo preko krmilniškega vezja, da si
zagotovimo stalno električno energijo brez motenj. Z robotsko roko lahko dvigamo predmete
do teže 100 g, kar je za naše raziskovalne namene dovolj, saj bomo delovanje robotske roke
demonstrirali z majhnim predmetom. Od petih elektromotorjev robotske roke so štirje
namenjeni za izvajanje gibov (štiri prostostne stopnje), eden pa za krmiljenje prijemala:
- zasuk celotne roke v levo ali desno po azimutu do 270°,
- premik celotne roke naprej ali nazaj (rama) z elevacijskim kotom do 180°,
- dvig ali spust roke (komolec) z elevacijskim kotom do 300°,
- dvig ali spust prijemala (zapestje) z elevacijskim kotom do 120°,
- zapiranje ali odpiranje prijemala do širine 4,5 cm.
Vertikalno delovno območje se razteza do 38 cm, horizontalno pa do 32 cm.
Robotska roka je prikazana na sliki 44444.
Slika 4: Robotska roka
Programski in strojni vmesnik za krmiljenje robotske roke Stran 11
Vse to omogoča dovolj veliko gibljivost, da lahko izvajamo poljubne gibe in pobiramo
predmete.
Elektromotorji robotske roke imajo dva krmilna vhoda, s katerima nadziramo tri preprosta
stanja: vrtenje v levo, vrtenje v desno in mirovanje. Prehajanje med stanji dosežemo z
menjavo polarnosti na vhodih elektromotorjev. Tako lahko vrtenje v levo dosežemo, ko na
pozitivni vhod pripeljemo pozitivno napetost, na negativni vhod pa maso (0 V). Za vrtenje v
desno pritisnemo napetosti obratno. Elektromotor zaustavimo tako, da na oba krmilna vhoda
povežemo z maso.
Ker želimo robotsko roko krmiliti in napajati z elektriko preko krmilniškega vezja, smo iz
kupljenega modela odstranili baterije in krmilno ploščico. Tako smo sprostili vhode
elektromotorjev, ki jih povežemo z gonilniškimi čipi. Prav tako elektromotorji ne bodo več
napajani z 9 V napetosti, ampak jih bomo napajali le s 5 V, saj je ta napetost dovolj visoka za
normalno gibanje robotske roke. Napetost 5 V bomo pri preizkusih jemali z razvojne
ploščice,.
Mikrokrmilniški vmesnik
Vmesnik za krmiljenje robotske roke mora poganjati elektromotorje, ki smo jih opisali v
prejšnjem podpoglavju. Za to potrebujemo ustrezne elektronske gonilnike, te pa moramo
krmiliti z mikrokrmilnikom, ki dobiva navodila po komunikacijski zvezi z računalnikom.
Mikrokrmilnik v naši rešitvi povezuje z računalnikom serijska povezava. Izbrali smo 8-bitni
mikrokrmilnik tipa PIC 16F877A, ki ima 40 priključnih nožic. Je cenovno zelo dostopen in
preprost za programiranje. Na spletu je za izbrani čip na voljo zelo veliko dokumentacije, s
katero si lahko pomagamo pri uporabi. Mikrokrmilnik PIC 16F877A lahko uporabimo na
mnogih področjih, kot so avtomobilska industrija, nadzor hišnih sistemov, industrijski
instrumenti, oddaljena tipala ali katerkoli vgrajeni sistem. Prav tako je nadvse primeren za
sisteme, ki se napajajo preko baterijskih vložkov, saj ima zelo nizko električno porabo.
Pomnilnik tipa EEPROM omogoča, da mikrokrmilnik uporabimo v sistemih, kjer
potrebujemo dolgoročno hranjenje vrednosti parametrov (hitrost motorjev, hitrost frekvence
itd.). Nizka cena, nizka električna poraba, enostavno upravljanje in prilagodljivost so privedle
do tega, da se PIC 16F877A uporablja v sistemih, v katerih mikrokrmilniki prej niso bili
uporabljeni (koprocesorske aplikacije, časovne funkcije itd.) [16]. Omogoča tako sinhrono kot
Programski in strojni vmesnik za krmiljenje robotske roke Stran 12
tudi asinhrono serijsko povezavo z računalnikom. To je ključna lastnost mikrokrmilnika za
našo diplomsko delo, saj v našem primeru mikrokrmilnik predstavlja vmesni in povezovalni
člen med osebnim računalnikom in robotsko roko. Ker je arhitektura mikrokrmilnika tipa
RISC, lahko zelo enostavno, z nekaj ukazi pripravimo mikrokrmilnik za serijsko povezavo z
računalnikom, po kateri bo sprejemal in pošiljal podatke. Prav tako potrebujemo zunanji
generator takta (10 MHz), saj je to pogoj za nemoteno delovanje serijske povezave. Notranji
generator deluje s 4 MHz taktom, kar bi privedlo do 6,99 % napake pri prenosu s hitrostjo
9600 bitov na sekundo. Pri taktu s hitrostjo 10 MHz pa je napaka le 1,73 % [6]. Podatke
hočemo prenašati po serijski povezavi do mikrokrmilnika po protokolu RS-232. Zato signale
iz mikrokrmilnika vodimo skozi čipa MAX232A, ki prilagaja napetostne nivoje med linijo RS-
232 in mikrokrmilnikom. MAX232A skrbi za dvosmerno komunikacijo. Podatkovni protokol,
ki povezuje mikrokrmilnik z osebnim računalnikom, smo zasnovali v takšnem formatu, da
lahko poslana sporočila preslikamo neposredno na mikrokrmilniške digitalne izhode. Tako se
lahko izognemo zahtevnejšim podatkovnim ali logičnim pretvorbam, ki bi zahtevale
močnejši mikrokrmilnik, kot je izbrani PIC 16F877A. Ker krmilimo 5 elektromotorjev in eno
svetlečo diodo, potrebujemo na mikrokrmilniku zadostno število izhodov. Skupno jih
potrebujemo 11 – po dva izhoda za posamezen elektromotor in en izhod za svetlečo diodo.
Upoštevati moramo še ostale vhode in izhode v mikrokrmilnik, ki so povezani z vhodno-
izhodnimi linijami. V našem primeru potrebujemo linije za sprejemanje in oddajanje
podatkov. Uporabimo tudi mikroprocesorjev priključek (nožico) za programiranje , dve nožici
za zunanji oscilator ter priključke za napajalno napetost (+5 V in masa). Zato smo se odločili,
da bomo uporabili 40-nožično verzijo mikrokrmilnika, saj bi nam na 28-nožični različici
primanjkovalo prostora. Tako bomo s 40-nožičnim mikroprocesorjem imeli pri povezovanju
komponent dovolj izbire.
Mikrokrmilnika smo programirali v zbirnem jeziku v razvojnem orodju MPLAB IDE. To
razvojno orodje si lahko brezplačno snamemo z interneta in je namenjeno pisanju programov
za vse mikrokrmilnike iz družine PIC. Omogoča tudi razhroščevanje in neposredno urejanje
vrednosti v registrih, kar nam zelo olajša delo. Mikrokrmilnik programiramo s pomočjo
naprave ICD 3, ki jo priključimo na osebni računalnik preko vrat USB, na drugi strani pa na
programatorsko vezje, v katerega je vstavljen ciljni mikrokrmilnik. Pri tem moramo paziti, da
nikoli ne izključimo naprave ICD 3 iz računalnika, če je istočasno priključena na razvojno
ploščo in je ta pod napetostjo, saj lahko napravo trajno poškodujemo.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 13
Mikrokrmilnik upravljanja elektromotorje s pomočjo integriranega gonilnika SN754410, ki
deluje po principu H-mosta in zmore poganjati dva elektromotorja hkrati. Za raziskavo v
okviru diplomskega dela smo potrebovali tri gonilnike SN754410 za elektromotorje. Z
uporabo tega čipa smo močno poenostavili strojno zasnovo motorskega krmilnika in se
izognili možnim napakam, do katerih bi lahko prišlo, če bi H-most izdelali sami. Uporabljeni
gonilnik ima vgrajeno elektrostatično zaščito ESD (Electrostatic Discharge) in 4 nožice za
odvajanje toplote [18]. Če bi zasnovo H-mostu realizirali sami, bi potrebovali 5 enakih
transistosko-diodnih vezij, ki bi bila v primerjavi z gonilnikom SN754410 dražja in manj
zanesljiva. Glavna naloga integriranega gonilnika je preslikava mikrokrmilniških logičnih
signalov v vklope in izklope elektromotorjev. To pomeni, da logični vrednosti obeh vhodov,
ki ju pripeljemo iz mikrokrmilnika na čip za posamezen elektromotor, upravljata z dvema
izhodoma, ki sta povezana z elektromotorjem. Izhode motorskih gonilnikov priključimo na
napetost, ki jo uporablja mikrokrmilniško vezje. Gonilnik SN754410 lahko na elektromotorje
prenese od 4,5 V do 36 V napetosti [17]. Pri naši izvedbi ni potreben ločen vir napajanja za
elektromotorje, saj je ustrezna tudi napetost, ki jo uporabljamo za napajanje
mikrokrmilniškega vezja.
Uporabniški vmesnik za vodenje robota
Za krmiljenje robotske uporabljamo uporabniški vmesnik, ki je napisan v objektnem jeziku
C# z razvojnim orodjem Visual Studio in ki deluje na operacijskem sistemu okna. Z gumbi na
grafičnem uporabniškem vmesniku prožimo metode razreda, ki pošiljajo ukaze
mikrokrmilniku. Uporabniški vmesnik mora omogočati dva načina vodenja robota: ali z
zaganjanjem posameznih elektromotorjev ali pa s pomočjo vnaprej pripravljenega scenarija.
Za vklop in izklop motorjev ima uporabniški vmesnik gumbe, ki omogočajo vrtenje
elektromotorjev v določeno smer in so v zaslonskem oknu razporejeni tako, da uporabnik
dobi občutek, katere elektromotorje predstavljajo. Grafični uporabniški vmesnik ima v ozadju
okna shemo oziroma sliko, ki ponazarja robotsko roko, tako da uporabnik dobi še boljšo
informacijo, katere elektromotorje naj proži, da bo izvedel želeni gib. Odziv elektromotorjev
mora biti hipen, da lahko izvajamo natančne gibe. Elektromotor sprožimo tako, da kliknemo
na gumb in držimo gumb pritisnjen. Motor se bo vrtel tako dolgo, dokler gumba ne izpustimo.
Na ta način uporabnika omejimo, da proži le en elektromotor naenkrat.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 14
Programiranje gibov robotske roke omogočajo vnaprej pripravljeni scenariji. Ti so napisani v
jeziku XML. Na uporabniškem vmesniku je na voljo gumb, ki odpre pogovorno okno, v
katerem lahko naložimo XML-datoteko, ki opisuje zaporedje gibov. V datoteki so navedeni
ukazi, ki jih mora krmilnik robotske roke izvesti. Struktura datoteke vsebuje korensko
vozlišče, ki zajema ukazna vozlišča, v kateri so navedeni parametri ukaza. V vsakem
ukaznem vozlišču definiramo, kateri elektromotor se mora zagnati, v katero smer se naj zavrti
in koliko časa naj vrtenje traja. Trajanje podamo v milisekundah. Ukazi se izvajajo v
zaporedju, v katerem so napisani. Nato z namenskim gumbom poženemo program.
Za preizkušanje povezave med uporabniškim vmesnikom in robotsko roko je na voljo gumb,
ki izvede standardiziran preizkus. Ta je zasnovan tako, da se iz uporabniškega vmesnika
pošlje vzorec podatkov, ki ga nato krmilnik vrne. Vrnjeni vzorec se nato primerja s poslanim
in če sta enaka, povezava med računalnikom in robotskim krmilnikom deluje pravilno.
Povezava je realizirana s serijskim protokolom RS-232, ki je 8-bitni. Hitrost povezave je 9600
bitov na sekundo.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 15
4 IZDELAVA STROJNEGA KRMILNIKA ROBOTSKE ROKE
Pri zasnovi in izdelavi mikrokrmilniških vezij in programov zanje potrebujemo razvojno
okolje z emulatorjem, simulatorjem in sistemsko programsko opremo od prevajalnikov do
očiščevalnikov. Na razpolago so različni razvojni sistemi, ki omogočajo enostavno
programiranje izbranega mikrokrmilnika in preizkušanje programov skupaj z razvitimi
mikrokrmilniškimi vezji.
Za zasnovo prototipa robotskega krmilnika smo si izbrali prototipno ploščo PICDEM 2 demo
board [12], ki ima vgrajen modul za serijsko povezavo in več digitalnih izhodov, s pomočjo
katerih krmilimo robotove elektromotorje. Pri programiranju mikrokrmilnika PIC 16F877A in
preizkušanju programskih rešitev v sklopu s trojno opremo smo se zatekli k emulatorju ICD 3
[13].
Shematsko je vodenje robotske roke s pomočjo našega mikrokrmilniškega vmesnika
prikazano na sliki 5.
Slika 5: Diagram celotne rešitve
Programski in strojni vmesnik za krmiljenje robotske roke Stran 16
4.1 Razvojno okolje in uporabljene komponente
V nadaljevanju podrobneje opišemo prototipno okolje, s katerim smo izdelali
mikrokrmilniški vmesnik, in posamezne komponente, pomembne za razvoj prototipnega
vezja.
4.1.1 Opis razvojne plošče PICDEM 2 demo board
Razvojno ploščo PICDEM 2 demo board proizvaja podjetje Microchip. Plošča omogoča
razvoj in preizkušanje 18-, 28- in 40-nožičnih mikrokrmilnikov PIC16 in PIC18, ki jih
programiramo s pomočjo programatorja ICD. Razvojna plošča ima veliko število različnih
elektronskih elementov, ki so že vgrajeni in s katerimi lahko preizkušamo in demonstriramo
delovanje mikrokrmilnika. Tako se lahko razvijalci bolj posvetijo sami izdelavi sistema,
hkrati pa lahko ob napačnem delovanju sistema prej locirajo napako, ker so lahko prepričani,
da napaka ni nastala v vezju na razvojni ploščici. Izvedbo plošče kaže slika 6.
Slika 6: PICDEM 2 demo board
Programski in strojni vmesnik za krmiljenje robotske roke Stran 17
PICDEM 2 demo board ima vgrajene naslednje pomembnejše elemente:
- 18-, 28- in 40-nožično podnožje, ki lahko gostijo mikrokrmilnike PIC16 in PIC18.
Naenkrat lahko uporabljamo smo en mikrokrmilnik.
- Dvovrstični prikazovalnik s tekočimi kristali (LCD), kjer lahko vsaka vrstica prikaže
16 znakov. Mogoče ga je uporabiti samo z 28- in s 40-nožičniom mikrokrmilnikom.
- Napajalno vezje: ploščo je mogoče napajati z baterijo ali napajalnikom, ki pri
napetosti 9 V proizvede 100 mA toka.
- Vrata RS-232 omogočajo serijsko povezavo z drugimi napravami (npr. z osebnim
računalnikom). Mikrokrmilnik pošilja podatke do serijskega priključka preko
vmesnika MAX232A.
- Na plošči so tri stikala, katera lahko uporabimo kot vhodne signale v mikrokrmilnik.
- 4-nožično podnožje je namenjeno oscilatorju. Imamo tudi možnost, da oscilator
izklopimo s stikalom, ki je v neposredni bližini podnožja.
- Analogni vhod: potenciometer z upornostjo 5 kΩ je preko upora 470 Ω vezan na
analogni vhod mikrokrmilnika.
- 4 svetleče diode lahko uporabimo za preizkušanje izhodov mikrokrmilnika.
- Priključek za ICD-napravo omogoča programiranje mikrokrmilnikov. Naenkrat lahko
programiramo samo en krmilnik.
4.1.2 Mikrokrmilnik PIC 16F877A
8-bitni mikrokrmilnik je tipa RISC in ima 35 ukazov fiksne dolžine. Omogoča sinhron in
asinhron prenos podatkov preko serijskega vmesnika. Vsebuje 256 zlogov električno
zbrisljivega pomnilnika (EEPROM) in 368 zlogov podatkovnega pomnilnika (registri).
Podatkovni pomnilnik vsebuje registre mikrokrmilnika in perifernih vmesnikov in je razdeljen
v 4 banke (slika 7). Omogoča neposredni in posredni dostop do podatkov. Med podatkovnimi
bankami preklapljamo s pomočjo dveh bitov v statusnem registru. Mikrokrmilnik lahko deluje
s taktom do 20 MHz, ki ga proizvaja zunanji oscilator.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 18
Slika 7: Podatkovni register razdeljen v štiri banke [6]
Mikrokrmilnik PIC 16F877A ima 40 nožic, ki večinoma predstavljajo digitalne vhode in
izhode. Smer (vhod ali izhod) nožic lahko programsko spreminjamo z definiranjem vrednosti
v registrih. Podrobnejša razlaga o načinu definiranja smeri nožic sledi v podpoglavju 4.1.2.6.
Na voljo imamo tudi 8 vhodov za analogno-digitalno pretvorbo in dva primerjalnika
napetosti. Mikrokrmilnik potrebuje za delovanje od 2,5 V do 5 V napetosti, brezhibno
delovanje pa je zagotovljeno ob temperaturah od -40° C do 125° C [19]. Fizično razporeditev
nožic mikrokrmilnika PIC 16F877A prikazuje slika 8.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 19
Slika 8: Razporeditev nožic na mikrokrmilniku PIC 16F877A
4.1.2.1 Statusni register
Statusni register (prikazan na sliki 10), ki se nahaja na pomnilniški lokaciji 03h, omogoča, da
z bitoma 5 (RP0) in 6 (RP1) preklapljamo med bankami, da lahko naslovimo želeni register.
Banke so predstavljene na sliki 9.
Slika 9: Dostop do bank
Programski in strojni vmesnik za krmiljenje robotske roke Stran 20
Pomembnejša bita sta še ničti (C) bit, ki pove, da je pri operaciji prišlo do prenosa, in bit 2
(Z), ki je postavljen na 1, ko je rezultat operacije enak 0.
Slika 10: Statusni register [6]
4.1.2.2 Register RCSTA
Register RCSTA (prikazan na sliki 11) je nadzorni in statusni register sprejemnika in se nahaja
na pomnilniški lokaciji 18h. Pomembnejša bita sta:
- bit SPEN (serijski vmesnik onemogočen (0) ali omogočen (1)) in
- bit CREN (onemogoči (0) ali omogoči (1) sprejem).
Slika 11: Register RCSTA [6]
4.1.2.3 Register PIR1
Register se nahaja na pomnilniški lokaciji 0ch. Njegov bit 5 pove, ali je podatek že prispel (1)
ali še ni prispel (0).
4.1.2.4 Register SPBRG
Registru SPBRG določimo vrednost glede na to, kakšen oscilator uporabljamo v našem vezju
in s kolikšno hitrostjo naj serijska povezava prenaša bite. Možne so nastavitve, ki jih kaže
preglednica na sliki 129.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 21
Slika 12: Predpisane vrednosti za register SPBRG pri frekvenci oscilatorja 10 MHz [6]
4.1.2.5 Register TXSTA
Nadzorni in statusni register oddajnika je register TXSTA (prikazan na sliki 13). Dostopen je
na naslovu 98h programskega pomnilnika in ima tri pomembnejše bite:
- bit TXEN: oddaja onemogočena (0) ali omogočena (1),
- bit TRMT: status oddajnega registra - oddaja je izvedena (1) ali še ni izvedena (0),
- bit SYNC: sinhroni način (1) ali asinhroni način (0) komunikacije.
Slika 13: Register TXSTA [6]
4.1.2.6 Vhodno-izhodni registri
PIC16F877A ima 5 registrov (PORTA, PORTB, PORTC, PORTD, PORTE), ki so neposredno
povezani z vhodno-izhodnim vodilom, in 5 smernih registrov (TRISA, TRISB, TRISC, TRISD,
TRISE). Smer (vhod ali izhod) posameznega bita v PORTn se določi z biti v smernem registru
TRISn. Če želimo, da so priključki na PORTn vhodi, moramo »soležne« bite v TRISn postaviti
na 1, če pa jih postavimo na 0, postanejo ustrezni priključki na PORTn izhodi.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 22
4.1.2.7 Delovni register
Delovni register se uporablja kot začasna shramba obdelovanega podatka. V operacijah
nastopa kot operand in se ne nahaja v podatkovnem pomnilniku.
4.1.2.8 Nabor zbirniških ukazov mikrokrmilnika PIC 16F877A
Ukazi za premikanje podatkov med registri
MOVF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Premik vrednosti iz izvornega v ciljni
register.
MOVWF <ime_ciljnega_registra> Premik vrednosti iz delovnega v ciljni
register.
MOVLW <konstanta> Premik konstante v delovni register.
CLRF <ime_ciljnega_registra> Ciljni register postavimo na vrednost 0.
CLRW V delovni register vpišemo vrednost 0.
SWAPF <ime_izvornega_registra>,
<ime_ciljnega_registra>
V izvornem registru se zamenjajo zgornji
štirje biti s spodnjimi, rezultat pa se shrani v
ciljni register.
Aritmetični ukazi
ADDWF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Sešteje vrednosti izvornega in delovnega
registra ter rezultat shrani v ciljni register.
SUBWF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Odšteje vrednosti izvornega in delovnega
registra. Rezultat se shrani v ciljni register.
INCF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Poveča za 1 vrednost v izvornem registru in
shrani rezultat v ciljni register.
DECF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Zmanjša za 1 vrednost v izvornem registru in
shrani rezultat v ciljni register.
ADDLW <konstanta> Prišteje vrednost konstante z vrednostjo v
delovnem registru.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 23
SUBLW <konstanta> Odšteje vrednost konstante z vrednostjo v
delovnem registru.
Logični ukazi
ANDWF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Izvede AND operacijo nad vrednostjo
izvornega registra in vrednostjo v delovnem
registru. Rezultat shrani v ciljni register.
IORWF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Izvede OR operacijo nad vrednostjo
izvornega registra in vrednostjo v delovnem
registru. Rezultat shrani v ciljni register.
XORWF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Izvede XOR operacijo nad vrednostjo
izvornega registra in vrednostjo v delovnem
registru. Rezultat shrani v ciljni register.
ANDLW <konstanta> Izvede AND operacijo med konstanto in
vrednostjo delovnega registra. Rezultat
shrani v delovni register.
IORLW <konstanta> Izvede OR operacijo med konstanto in
vrednostjo delovnega registra. Rezultat
shrani v delovni register.
XORLW <konstanta> Izvede XOR operacijo med konstanto in
vrednostjo delovnega registra. Rezultat
shrani v delovni register.
COMF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Izvede inverzijo vrednosti izvornega registra
in shrani vrednost v ciljni register.
Ukaza za rotiranje vrednosti registrov
RLF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Premakne bite v izvornem registru za en bit v
levo, upoštevajoč prenosni bit. Rezultat
shrani v ciljni register.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 24
RRF <ime_izvornega_registra>,
<ime_ciljnega_registra>
Premakne bite v izvornem registru za en bit v
desno, upoštevajoč prenosni bit. Rezultat
shrani v ciljni register.
Ukazi za delo s posameznimi biti
BCF <ime_izvornega_registra>,
<bit_v_registru>
Naveden bit v izvornem registru postavi na 0.
BSF <ime_izvornega_registra>,
<bit_v_registru>
Naveden bit v izvornem registru postavi na 1.
Ukazi za nadzor poteka izvajanja programa
GOTO <tekstovna_oznaka> Izvajanje programa se brezpogojno prestavi
na točko, kjer se nahaja tekstovna oznaka.
BTFSC <ime_izvornega_registra>,
<bit_v_registru>
Preveri bit v izvornem registru in preskoči
naslednji ukaz, če je preverjan bit enak 0.
BTFSS <ime_izvornega_registra>,
<bit_v_registru>
Preveri bit v izvornem registru in preskoči
naslednji ukaz, če je preverjan bit enak 1.
INCFSZ <ime_izvornega_registra>,
<ime_ciljnega_registra>
Vrednost v izvornem registru poveča za 1 in
shrani novo vrednost v ciljni register. Če je
nova vrednost enaka 0, preskoči naslednji
ukaz.
DECFSZ <ime_izvornega_registra>,
<ime_ciljnega_registra>
Vrednost v izvornem registru zmanjša za 1 in
shrani vrednost v ciljni register. Če je nova
vrednost enaka 0, preskoči naslednji ukaz.
CALL <tekstovna_oznaka> Izvajanje programa se brezpogojno prestavi
na točko, kjer se nahaja tekstovna oznaka
(klic podprograma). Shrani se vrednost
programskega števca.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 25
RETURN Vrnitev iz podprograma.
RETLW <konstanta> Vrnitev iz podprograma s konstanto, ki se
shrani v delovni pomnilnik.
RETFIE Vrnitev iz prekinitvene rutine.
Sistemski ukazi
NOP Porabi procesorski čas
CLRWDT Izključi čuvaja (watch-dogtimer)
SLEEP Preklopi v stanje pripravljenosti. Za ponovno
vzbujanje procesorja potrebujemo
prekinitveno rutino ali ukaz reset [19][20].
4.1.3 Motorski gonilnik SN754410
Čip omogoča krmiljenje elektromotorjev skozi tri stanja: vrtenje v levo, vrtenje v desno in
mirovanje. Deluje po principu H-mosta. Na dva vhoda za izbrani motor (glejte sliko 14 in
pridruženo pravilnostno tabelo) pripeljemo signala iz mikrokrmilnika in vzpostavimo stanje,
ki ga želimo na elektromotorju. Za delovanje uporablja elektromotor svoj izvor napajanja,
gonilnik SN754410 omogoči le, da tok iz napajanja steče skozi motor v eno ali drugo smer in
tako povzroči, da se motor zavrti desno ali levo.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 26
Slika 14: Motorski gonilnik SN754410 [5]
4.2 Zasnova mikrokrmilniškega vezja
Zasnovali smo krmilno vezje, ki ga v celoti kaže slika 15. Sestavljajo ga naslednji podsklopi,
ki jih podrobneje razlagamo v nadaljevanju:
• napetostno-napajalni del,
• mikrokrmilnik z oscilatorjem,
• gonilniki motorjev in
• serijska komunikacija RS-232.
Vsi podsklopi razen gonilnikov za motorje so na prototipni razvojni plošči PICDEM 2 demo.
Na to ploščico smo dodali gonilnike motorjev – tri čipe SN754410 in njihove vhode povezali
z izhodi mikrokrmilnika, izhode pa z elektromotorji na robotski roki.
Napetostno napajalno vezje vsebuje vhod, na katerega lahko priključimo napetost 9 V
omrežnega usmernika, tvori pa ga regulator za 5 V, preko katerega se napaja celotna ploščica.
To napajanje uporabimo tudi za poganjanje elektromotorjev na robotski roki.
Mikrokrmilnik PIC 16F877A je v vezje vgrajen z oscilatorjem, ki proizvaja takt 10 MHz.
Uporaba zunanjega oscilatorja je ključnega pomena, če želimo vzpostaviti serijsko povezavo.
Vse vhodno-izhodne nožice mikrokrmilnika so speljane na povezovalno polje, kjer so fizično
Programski in strojni vmesnik za krmiljenje robotske roke Stran 27
enostavno dostopne. Na izhodne mikrokrmilniške nožice, ki jih ustrezno inicializira in
naslavlja krmilni program,ere so povezani vhodi gonilnikov za elektromotorje.
Na mikrokrmilnikove nožice od 1 do 7 (prvo nožico štejemo z 0) na vratih PORTD so vezani
trije pari vhodov v gonilnike za nadzor treh elektromotorjev in svetleča dioda na robotski roki.
Na nožice od 1 do 4 (prvo nožico štejemo z 0) na vratih PORTB pa sta vezana dva para
vhodov v gonilnike za nadzor preostalih dveh elektromotorjev. Napajanje elektromotorjev
poteka preko gonilnikov SN754410, ki dobivajo napetost neposredno iz ploščice PICDEM 2
demo board.
Zveza med mikrokrmilnikom in serijsko komunikacijo RS-232 je vzpostavljena s pomočjo
vezja, vgrajenega na razvojni plošči. Podatki prispejo do vrat RS-232 in so nato preko
vmesnika MAX232A posredovani do sprejemne in oddajne nožice na mikrokrmilniku. Čip
MAX232A skrbi za napetostne pretvorbe signalov med 5 V na mikrokrmilniški strani in
višjimi napetostnimi nivoji na komunikacijskih linijah RS-232 [14].
Programski in strojni vmesnik za krmiljenje robotske roke Stran 29
5 IZDELAVA KRMILNEGA PROGRAMA IN UPORABNIŠKEGA
VMESNIKA
Vodenje robotske roke s pomočjo mikrokrmilniškega vmesnika, ki smo ga opisali v poglavju
4, smo realizirali s pomočjo krmilnega programa v mikrokrmilniku in uporabniškega
vmesnika na osebnem računalniku. Njuna medsebojna komunikacija poteka po serijskem
protokolu RS232. Hierarhično zasnovo celotne programske rešitve kaže slika 16.
Slika 16: Hierarhična zasnova programske rešitve
Programski in strojni vmesnik za krmiljenje robotske roke Stran 30
5.1 Zasnova uporabniškega vmesnika
Uporabniški vmesnik je zasnovam v razvojnem orodju Visual Studio 2010, v programskem
jeziku C# v okolju Framework 4.0. Program se izvaja na osebnem računalniku in komunicira
s krmilnim programom v mikrokrmilniku. Posreduje mu ukaze za vklop ali izklop
elektromotorjev na robotski roki.
Uporabniški vmesnik je izveden dvonivojsko. Zgornji nivo predstavlja grafični vmesnik z
ukaznimi gumbi, ki povzročijo zagon elektromotorjev na robotski roki, in pogovornim
oknom, s katerim naložimo program za izvajanje zaporednih gibov. Metode, ki jih prožijo
gumbi, nato kličejo metode na spodnjem nivoju. Te metode so zadolžene za pošiljanje
podatkov mikrokrmilniku, ki glede na prispeli podatek proži in krmili elektromotorje na
robotski roki.
5.1.1 Grafični uporabniški vmesnik
Grafični uporabniški vmesnik ima na oknu razporejene gumbe, ki predstavljajo vrtenje
elektromotorja v določeno smer, vklop in izklop lučke na robotski roki in gumb, ki odpre
pogovorno okno za izbiro programa, ki ga bomo naložili robotski roki za izvajanje. Obstaja še
gumb za izvedbo preizkusa povezave z mikrokrmilnikom.
V ozadju grafičnega vmesnika je slika, ki predstavlja robotsko roko. Gumbi za proženje
motorjev so razporejeni po funkcionalnosti in nameščeni na sliko robotske roke. To pomeni,
da so gumbi ob tistem delu robotske roke, na katerega imajo vpliv. Na tak način smo dosegli,
da je grafični uporabniški vmesnik prijaznejši do uporabnika in da se ta laže znajde pri
vodenju robotske roke. Robotska roka je opremljena tudi z lučko, ki jo prav tako lahko
vklopimo oziroma izklopimo. Z njo si lahko uporabnik pomaga, če upravlja robotsko roko v
temnejšem prostoru. Zasnovo grafičnega vmesnika prikazuje slika 17.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 31
Slika 17: Grafični vmesnik za upravljanje robotske roke
Elektromotor vklopimo tako, da kliknemo na gumb, ki predstavlja vrtenje motorja v določeno
smer. Dokler imamo gumb pritisnjen, se bo motor vrtel. Ko pa gumb sprostimo, se bo motor
ustavil. To rešitev smo vgradili tako, da ob miškinem kliku (event mouse down) prožimo
metodo, ki preko primerka razreda za serijsko komunikacijo pošlje ukaz mikrokrmilniku. Ta
ukaz sproži rutino, ki zažene elektromotor. Na sliki 18 vidimo metodo, ki se sproži ob kliku
na gumb za zagon elektromotorja.
Slika 18: Izsek kode, ki posredno požene motor ob kliku na gumb grafičnega vmesnika
Ko pa gumb sprostimo, se izvede koda (prikazana na sliki 19), ki požene rutino za ustavitev
elektromotorja.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 32
Slika 19: Izsek kode, ki pošlje ukaz za ustavitev motorja
Izvedemo lahko tudi preizkus povezave s mikrokrmilnikom. Mikrokrmilniku se pošlje vzorec
podatka, ki ga mikrokrmilnik vrne. Vrnjeni podatek nato primerjamo s poslanim podatkom.
Če sta enaka, to pomeni, da povezava deluje in preizkus je uspel. Obvestilo o uspelem
preizkusu je uporabniku predstavljeno v obliki opozorilnega okna, kot ga vidimo na sliki 20.
Slika 20: Obvestilo uporabniku o uspehu preizkusa povezave
5.1.2 Povezava osebnega računalnika z mikrokrmilnikom
Poseben komunikacijski program je zadolžen za komunikacijo med mikrokrmilnikom in
uporabniškim vmesnikom, torej med krmilnikom robotske roke in osebnim računalnikom.
Komunikacija poteka preko 8 bitne serijske povezave RS-232 s hitrostjo 9600 bitov na
sekundo. Te parametre povezave kot tudi ime vrat, preko katerih bo komunikacija potekala, je
možno nastaviti v konfiguracijski XML-datoteki z imenom app.config, katere strukturo
vidimo na sliki 21.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 33
Slika 21: Konfiguracijska XML-datoteka
Razred, ki nadzoruje povezavo, se imenuje ConnectionProtocol in v konstruktorju prebere
nastavitve iz konfiguracijske XML-datoteke, nato pa jih priredi primerku razreda SerialPort,
ki skrbi za serijsko povezavo. Izsek kode razreda ConnectionProtocol kaže slika 22.
Slika 22: Izsek kode, ki prikazuje kostruktor razreda ConnectionProtocol
Javne metode razreda ConnectionProtocol, ki jih kliče grafični uporabniški vmesnik, kličejo
privatno metodo SendData, ki ji kot parameter podamo spremenljivko tipa byte in vsebuje
vrednost, s katero sporočimo mikrokrmilniku, kaj želimo od njega. Podatke do
mikrokrmilnika pošljemo preko primerka razreda SerialPort z metodo Write, ki ji navedemo
tri parametre:
• polje podatkov tipa byte, ki ga pošiljamo mikrokrmilniku (v našem primeru polje
vsebuje samo en element);
Programski in strojni vmesnik za krmiljenje robotske roke Stran 34
• odmik od začetnega elementa v polju do elementa, od katerega dalje bomo poslali
znake (ker imamo v polju samo en element, ne potrebujemo odmika, zato priredimo
parametru vrednost 0);
• število zlogov, ki jih želimo poslati iz predhodno podanega polja in z upoštevanjem
odmika (pošljemo samo en znak, zato parametru priredimo vrednost 1).
Podatek, ki ga pošljemo mikrokrmilniku določa kateri elektromotor se naj vklopi in smer v
katero se naj zavrti. Komunikacijski protokol natančneje opisujemo v podpoglavju 5.2.
Metoda za komunikacijo najprej preveri, ali so vrata serijske povezave pripravljena za
oddajanje. Če so, zapiše podatek v oddajni register serijskih vrat. Dodali smo tudi kodo, ki
ulovi morebitno izjemno stanje in v tem primeru zapre serijska vrata z metodo, imenovano
Close, ki je prav tako metoda primerka razreda SerialPort. Metoda, ki izvaja te ukaze, je
prikazana na sliki 23. Če pa je pošiljanje podatka uspelo, prav tako zapremo serijska vrata.
Podatki se vedno pošljejo za vsak elektromotor posebej, tako da zagotovimo, da se dva
motorja nikoli ne vrtita hkrati.
Slika 23: Metoda, ki pošlje podatke mikrokrmliniku
Programski in strojni vmesnik za krmiljenje robotske roke Stran 35
Vsak podatek, ki ga pošljemo po serijski povezavi, mikrokrmilnik tudi vrne. Na tak način
lahko preverimo, ali povezava deluje pravilno. Možnosti za preverjanje povezave sicer ne
izrabimo pri pošiljanju vsakega znaka, ampak samo takrat, ko preizkus delovanja povezave
sprožimo z gumbom, ki je temu namenjen. Ko kliknemo gumb Preizkusi povezavo, se
mikrokrmilniku pošlje vzorec podatka, ki ga nato pričakamo na serijskih vratih. Vzorec
testnega podatka vsebuje en 8 bitov z vrednostmi dvojiških ničel. To pa zato, ker bi prisotnost
enic v podatku mikrokrmilnik razumel kot zahtevo za proženje elektromotorja. To bi privedlo
do neželenih gibov robotske roke in napak v izvajanju. Rutina mikrokrmilnika, ki proži
elektromotorje, je predstavljena v poglavju 5.3. Metoda nato primerja prispeli podatek s
poslanim in postavi zastavico testSuccessful, če se podatka ujemata. Metoda, ki pripada
grafičnemu uporabniškemu vmesniku, nato preveri to zastavico in obvesti uporabnika o
uspešnosti testa. Metoda je prikazana na sliki 24.
Slika 24: Metoda, ki primerja prispeli podatek s poslanim
Programski in strojni vmesnik za krmiljenje robotske roke Stran 36
5.2 Protokol za povezavo uporabniškega vmesnika s krmilnim programom
Krmilni program krmili pet elektromotorjev in lučko na robotski roki. Ker vsak motor pozna
samo tri stanja (vrtenje v levo, vrtenje v desno in mirovanje), lahko vsako stanje opišemo z
dvema bitoma:
00 – mirovanje,
01 – vrtenje v desno,
10 – vrtenje v levo.
Za upravljanje z lučko je dovolj en bit (0 – izklopljena, 1 – vklopljena). Ker imamo na
robotski roki pet elektromotorjev in eno lučko, je za popoln nadzor robotske roke potrebnih
11 bitov. Ker pa uporabljamo 8 bitno povezavo in 8 bitni mikrokrmilnik, smo elektromotorje
in lučko razdelili v dve skupini. V prvi skupini so poleg lučke trije motorji, ki krmilijo klešče,
zapestje in komolec robotske roke, v drugi skupini pa sta motorja, ki krmilita ramo in zasuk v
levo ali desno. Na ta način tvorimo dva ukazna paketa, s katerima spreminjamo stanje
robotske roke. Prikazuje ju slika 2522.
Slika 25: Ukazna paketa za upravljanje z motorji in lučko na robotski roki
Ukazna paketa ločimo med seboj z bitom 0: prvi paket, ki pošilja ukaze trem motorjem in
lučki, ima bit 0 postavljen na 0, drugi paket, ki vsebuje ukaza za preostala dva motorja, pa ima
bit 0 postavljen na 1. Po dva naslednja bita v podatku sta rezervirana za posamezni
Programski in strojni vmesnik za krmiljenje robotske roke Stran 37
elektromotor v skupini. To pomeni, da sta v paketu z bitom 0, enakim 0, prvi in drugi bit (bite
začnemo šteti z 0) rezervirana za motor, ki krmili prijemalo, tretji in četrti bit sta namenjena
motorju, ki krmili zapestje, peti in šesti bit pa sta rezervirana za krmiljenje komolca.
Prispeli niz osmih bitov mikrokrmilnik preslika glede na bit 0 na tiste izhode, na katere je
posredno vezan elektromotor, kateremu so podatki namenjeni.
5.3 Zasnova krmilnega programa
Naloga krmilnega programa je, da po serijski povezavi komunicira z uporabniškim
vmesnikom na osebnem računalniku, da od njega sprejema ukaze, jih interpretira in ustrezno
upravlja z robotsko roko. Programsko rešitev krmilniškega programa prikazuje diagram
poteka na sliki 26.
Programsko kodo za krmilni program smo pisali s pomočjo emulatorja ICD 3. ICD 3 je
naprava, ki jo uporabljamo za programiranje in razhroščevanje PIC-mikrokrmilnikov. Pri
razvoju krmilniškega programa nam možnost razhroščeanja zelo koristi, saj tako lažje
odpravljamo programske napake. Razhroščevanje deluje na ICD 3 tako, da se programska
koda izvaja na enak način kot na mikrokrmilniku. Za to poskrbi vgrajeno emulacijsko vezje.
ICD 3 upravljamo s programskim orodjem MPLAB IDE, ki ga namestimo na operacijski
sistem okna [13].
Programski in strojni vmesnik za krmiljenje robotske roke Stran 38
Slika 26: Diagram poteka mikrokrmilniškega programa
Krmilni program je bil napisan v razvojnem orodju MPLAB IDE v zbirnem jeziku. Ob
začetku programa naprej definiramo simbolične konstante, ki predstavljajo pomnilniške
lokacije v programskem pomnilniku. Lokacijo definiramo tako, da konstanti priredimo
šestnajstiško vrednost, ki predstavlja lokacijo registra v programskem pomnilniku.
Razporeditev lokacij registrov v programskem pomnilniku je predstavljena na sliki 7 v
poglavju 4.1.2. Definiramo tudi spremenljivke, ki jih potrebujemo med izvajanjem. Za
osnovno delovanje potrebujemo registra, s katerima lahko preklapljamo med pomnilniškimi
Programski in strojni vmesnik za krmiljenje robotske roke Stran 39
bankami in definiramo hitrost oscilatorja. To nam omogočata registra STATUS in SPBRG.
Potrebujemo še dve spremenljivki, ki s svojima vrednostma predstavljata bitni lokaciji v
statusnem registru za preklop bank.
Za sprejemanje in pošiljanje podatkov preko serijske povezave (USART) potrebujemo
registre: TXSTA, RECSTA, TXREG, RCREG in PIR1.
Elektromotorjem bomo pošiljali signale s pomočjo registrov PORTB in PORTD, ki jima z
registroma TRISB in TRISD določimo smer (vhod ali izhod). Programsko kodo z definicijo
simbolične konstante in spremenljivke prikazuje slika 27.
Slika 27: Izsek kode, ki definira simbolične konstante
Bite v registrih nato nastavimo na vrednosti, ki omogočajo delovanje vmesnika USART. V
registru TXSTA vse bite, razen bita TXEN, postavimo na 0. S tem omogočimo serijski 8-bitni,
asinhroni prenos podatkov. Da omogočimo serijski vmesnik, postavimo bita SPEN in CREN v
registru RCSTA na 1. S temi nastavitvami vzpostavimo delovanje vmesnika USART, ki lahko
nato sprejema in oddaja podatke preko serijske povezave. Prav tako postavimo vse vrednosti
izhodnih registrov na 0. S tem preprečimo, da bi se ob zagonu krmilnika poslali kakšni
naključni signali elektromotorjem in s tem povzročili nepričakovane gibe robotske roke.
Opisano inicializacijo prikazuje slika 28.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 40
Slika 28: Izsek kode, kjer definiramo začetne vrednosti registrov
Mikrokrmilniški program sprejema podatke preko serijskega vmesnika. Ko podatek prispe, se
preveri, kateri skupini elektromotorjev je namenjen. Nato se celotna 8-bitna vrednost
prispelega podatka preslika na izhode mikrokrmilnika, ki so povezani z elektromotorji
ugotovljene skupine. Podatek se tudi pošlje nazaj uporabniškemu vmesniku, kjer se lahko
primerja s poslanim podatkom in se preveri, ali je med prenosom prišlo do kakšne napake. Ta
del komunikacije in preslikave podatkov je zapisan v kodi na sliki 29.
Slika 29: Izsek kode, ki sprejme podatek in krmili elektromotorje
Programski in strojni vmesnik za krmiljenje robotske roke Stran 41
5.4 Izvajanje krmilnih zaporedij
Robotsko roko lahko vodimo tudi po vnaprej pripravljenem scenariju. Zaporedje krmilnih
ukazov lahko zložimo v obliki XML-datoteke, ki je strukturirana tako, da se scenarij začne s
korenskim vozliščem, imenovanim program. Poljubno število ukazov nato navedemo znotraj
korenskega vozlišča. Ukazno vozlišče imenujemo action in prejme tri parametre - kateri
elektromotor (startMotor) se naj proži, v katero smer naj se zavrti (direction) in koliko časa
naj to vrtenje traja (duration). Trajanje je navedeno v milisekundah, vendar pa zaradi tega, ker
ne uporabljamo strojnih časovnikov za odmerjanje časovnih intervalov, nimamo zagotovila,
da vrtenje res vedno traja točno toliko, kolikor navedemo. Zaradi rutine, ki občasno skrbi za
čiščenje pomnilnika (garbage collectrion) in nad katero nimamo nadzora, lahko pride do
manjših zakasnitev. Primer scenarija za premik robotske roke je prikazan na sliki 30.
Slika 30: scenarija z zaporedjem gibov robotske roke
V grafičnem uporabniškem vmesniku odpremo pogovorno okno, izberemo datoteko s
scenarijem, ki ga bomo naložili v izvedbo krmilniku robotske roke, in nato scenarij
poženemo.
Datoteko s scenarijem razčleni program, ki pošilja ukaze mikrokrmilniku v obliki, ki smo jo
predstavili v podpoglavju 5.2. Najprej se pošlje podatek, ki pove, kateri motor naj se požene
in v katero smer. Nato se s časovno zakasnitvijo, navedeno v atributu trajanja, pošlje ukaz, ki
ustavi motor. Tako se izvede dani scenarij korak za korakom in povzroči želeno gibanje
robotske roke.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 42
Razred, ki je zadolžen za razčlenitev XML-datoteke, se imenuje ProgramParser. Vsebuje
metodo, imenovano ParseProgram, ki kot parameter prejme lokacijo programske datoteke.
Ta se nato naloži v primerek objekta XmlDocument, skozi katerega se po elementih
sprehajamo z zanko foreach in prebiramo atribute elementa, kakor kaže slika 31.
Slika 31: Izsek kode, ki razčleni scenarij, napisan v XML-formatu
Ko se preberejo vsi atributi XML-elementa, se nato pokliče metoda ParseAttibures (slika 32),
ki glede na dane parametre pošlje ukaz mikrokrmilniku. Metoda si za sestavo ukaza pomaga z
vejitvenim stavkom switch, ki glede na vrednosti atributov privede do pravega vzorca
podatka, ki ga je treba poslati po serijski povezavi. Potem ko izvedemo pošiljanje ukaza, se
pokliče ukaz za zakasnitev trenutne izvajane niti za toliko milisekund, kot smo navedli v
atributu duration. Ko zakasnitev poteče, se pošlje ukaz, ki aktivni elektromotor izklopi. S tem
je obdelan en korak iz scenarija za vodenje robotske roke.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 44
Slika 32: Metoda, ki sestavi ukaz za mikrokrmilnik
Programski in strojni vmesnik za krmiljenje robotske roke Stran 45
6 REZULTATI
Izdelani prototipni krmilnik za upravljanje robotske roke kaže slika 33.
Preizkusi sistema za upravljanje robotske roke so pokazali, da je mogoče izvajati poljubne
gibe v petih prostostnih smereh, ki jih prožimo preko uporabniškega vmesnika. Na ta način
lahko dvigamo in premikamo manjše predmete. Vendar je za hitrejšo izvajanje natančnih
gibov takšen grafični vmesnik neprimeren. Problem je v tem, da mora uporabnik neprestano
pogledovati h grafičnem vmesniku, da zadene prave gumbe. Ob tem odmika pogled od
robotske roke, ki bi jo moral, da bi lahko izvajal hitra zaporedja gibov, neprestano imeti na
očeh. Zato bi moral biti uporabniški vmesnik bolj intuitiven v smislu, da bi uporabniku
dopuščal neprekinjeno opazovanje robotske roke.
Slika 33: Diplomski projekt
Pri preizkušanju programiranja robotske roke smo ugotovili, da je roko možno programirati
tako, da med izvajanjem zaporedja gibov lahko pobira in premika predmete na način, kot to
počnejo robotske roke v industriji. Glavna slabost pa je, da elektromotorji na robotski roki ne
Programski in strojni vmesnik za krmiljenje robotske roke Stran 46
vračajo podatka o tem, za koliko so se zasukali. Tako moramo vrtenje motorja določati s
časovnimi enotami, kar pa ni najboljša rešitev, saj definiranje programa zahteva
dolgotrajnejšo preizkušanje in popravljanje, dokler ne dosežemo želenega giba. Ker nimamo
robotska roka in krmilno vezje, ki smo ga razvili, ne dajeta povratne informacije o položaju
roke, se lahko zgodi, da želimo členek robotske roke preveč odpreti. V tem primeru začnejo
zobata kolesca preskakovati, kar lahko vodi do trajnih poškodb. Če bi želeli imeti robotsko
roko, ki nam vrača svoj položaj, bi potrebovali bolj izpopolnjeno robotsko roko, ki je višjega
cenovnega razreda.
Ker smo pri poskusih za diplomsko nalogo imeli na razpolago le preprostejšo robotsko roko,
smo morali vse gibe začenjati iz vnaprej določenega začetnega položaja. Le tako smo lahko
vedno dosegli točko, do katere nas je moral voditi napisani scenarij gibov. Začetni položaj
smo definirali tako, da roko postavimo v »pravokotni« položaj. To pomeni, da je členek, ki
predstavlja komolec roke, pokrčen pod kotom 90°, preostali del roke pa je iztegnjen in je
vzporeden s površino, na kateri stoji robotska roka.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 47
7 SKLEP
Razvili smo grafični uporabniški vmesnik, ki deluje na operacijskem sistemu Okna in ki
omogoča proženje motorjev na robotski roki in s tem izvajanje poljubnih gibov. Omogoča
tudi programiranje robotske roke, ki ji ukaze navedemo v obliki scenarija v XML-datoteki in
nato izvaja zaporedja gibov. Rešitev uporabniškega vmesnika je zasnovana dvonivojsko. Prvi
nivo predstavlja grafični vmesnik z gumbi za proženje elektromotorjev in pogovorno okno,
kjer izberemo datoteko, v kateri je shranjen scenarij za robotsko roko. Ukaze iz prvega nivoja
predela drugi nivo in jih nato pošlje mikrokrmilniku.
Podatki med uporabniškim vmesnikom in mikrokrmilnikom se prenašajo preko serijske
povezave po protokolu RS-232, ki smo ga sami zasnovali. Mikrokrmilnik PIC 16F877A te
podatke sprejme, jih nato predela in preslika na digitalne izhodne linije. Te so povezane z
gonilniki SN754410, ki krmilijo elektromotorje na robotski roki. Robotska roka omogoča, da
pobiramo manjše predmete in jih premikamo na način, kot to počnejo robotske roke v
industriji.
S takšno strojno-programsko zasnovo mikrokrmilniškega vmesnika smo omogočili, da
robotsko roko vodimo s pomočjo uporabniškega vmesnika na osebnem računalniku in
izvajamo poljubne gibe. Te gibe lahko ročno nadziramo enega za drugim, lahko pa jih
združimo v celoten scenarij, ki prek krmilniškega programa izvede predpisano zaporedje
gibov.
Fizična ločenost mikrokrmilnika od robotske roke pomeni dodatno prilagodljivost: na
mikrokrmilniško vezje lahko priključili katerokoli robotsko roko, ki za gibanje uporablja
elektromotorje. Tako se nismo omejili na eno samo robotsko roko, ampak je naša rešitev čisto
splošna.
Največ možnosti za izboljšave opisane rešitve vidimo v načinu, kako uporabnik podaja ukaze
za izvajanje poljubnih gibov robotske roke. Za uporabnika bi bilo veliko lažje, če bi lahko
robotsko roko krmilil neposredno s premiki svoje roke. Te bi snemala kamera in bi nato z
obdelavo slik zaznali premike uporabnikove roke, te pa bi pretvorili v ukaze za premike
robotske roke. Tak sistem bi vključeval vsaj dve kameri, s katerima bi lahko zaznali
tridimenzionalne gibe, tako da bi lahko krmilili robotsko roko v vseh petih prostostnih smereh
hkrati. Prav tako imamo veliko možnosti za izboljšavo na strojnem področju. Z uporabo bolj
sofisticirane robotske roke bi gibe lahko izvajali veliko natančneje in dosegli boljšo
Programski in strojni vmesnik za krmiljenje robotske roke Stran 48
ponovljivost gibov. Robotska roka bi nam vračala informacijo o svojem položaju v prostoru,
kar bi omogočilo, da členkov robotske roke ne bi silili izven njihovega delovnega območja.
Na tak način bi bilo izvajanje zaporednih gibov veliko kvalitetnejše.
Programski in strojni vmesnik za krmiljenje robotske roke Stran 49
8 VIRI
[1] Wikipedia, Robot
http://en.wikipedia.org/wiki/Robot, 24. 10. 2010.
[2] Robots in Medicine
http://www.used-robots.com/robot-education.php?page=robots+in+medicine, 24. 10. 2010.
[3] Wikipedia, Military Robot
http://en.wikipedia.org/wiki/Military_robot, 24. 10. 2010.
[4] Wikipedia, Trije zakoni robotike
http://sl.wikipedia.org/wiki/Trije_zakoni_robotike, 24. 10. 2010.
[5] DC Motor Control Using an H-Bridge
http://itp.nyu.edu/physcomp/Labs/DCMotorControl, 24. 10. 2010
[6] PIC 16F87xA Data Sheet
http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf, 24. 10. 2010.
[7] Wikipedia, Robotic Surgery
http://en.wikipedia.org/wiki/Robotic_surgery, 24. 10. 2010.
[8] Popular Mechanics, Robot Boats Hunt High-Tech Pirates on the High-Speed Seas
http://www.popularmechanics.com/technology/military/navy-ships/4229443, 24. 10. 2010.
[9] Answers.com, When was lunal rover first used on moon?
http://wiki.answers.com/Q/When_was_lunar_rover_first_used_on_moon, 24. 10. 2010.
[10] Learn about Robots
http://www.learnaboutrobots.com/industrial.htm, 13. 11. 2010
Programski in strojni vmesnik za krmiljenje robotske roke Stran 50
[11] Industrial Robot
http://en.wikipedia.org/wiki/Industrial_robot, 13. 11. 2010
[12] PICDEM 2 demo board datasheet
http://ww1.microchip.com/downloads/en/DeviceDoc/51275d.pdf, 14. 11. 2010
[13] ICD 3 datasheet
http://www.es.co.th/Schemetic/PDF/DV164035.PDF, 14. 11. 2010
[14] MAX232A čip
http://en.wikipedia.org/wiki/MAX232, 14. 11. 2010
[15] Wierd Control Robotic Arm Kit, Assembly and Instruction Manual
[16] Introduction to PIC16F877A Microcontroller
http://iddhien.blogspot.com/2007/06/introduction-to-pic16f877a.html, 21. 11. 2010
[17] The SN754410 Datasheet for an Improved Functional Replacement of SGS L293
http://datasheetoo.com/search/sn754410+ic+with+pin+description, 21. 11. 2010
[18] SN754410 Datasheet
http://focus.ti.com/lit/ds/symlink/sn754410.pdf, 21. 11. 2010
[19] PIC16F877A Microcontroller
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010242, 26. 11. 2010
[20] PIC Instructions
http://tutor.al-williams.com/pic-inst.html, 27. 11. 2010
Programski in strojni vmesnik za krmiljenje robotske roke Stran 51
9 PRILOGE
9.1 Seznam slik
Slika 1: Prvi programirljivi robot ............................................................................................... 3
Slika 2: Robotsko plovilo za boj proti mamilskim kartelom...................................................... 4
Slika 3: Industrijska robotska roka ............................................................................................. 5
Slika 4: Robotska roka ............................................................................................................. 10
Slika 5: Diagram celotne rešitve .............................................................................................. 15
Slika 6: PICDEM 2 demo board .............................................................................................. 16
Slika 7: Podatkovni register razdeljen v štiri banke [6] ........................................................... 18
Slika 8: Razporeditev nožic na mikrokrmilniku PIC 16F877A ............................................... 19
Slika 9: Dostop do bank ........................................................................................................... 19
Slika 10: Statusni register [6] ................................................................................................... 20
Slika 11: Register RCSTA [6] .................................................................................................. 20
Slika 12: Predpisane vrednosti za register SPBRG pri frekvenci oscilatorja 10 MHz [6] ....... 21
Slika 13: Register TXSTA [6] .................................................................................................. 21
Slika 14: Motorski gonilnik SN754410 [5] .............................................................................. 26
Slika 15: Shema vezja .............................................................................................................. 28
Slika 16: Hierarhična zasnova programske rešitve .................................................................. 29
Slika 17: Grafični vmesnik za upravljanje robotske roke ........................................................ 31
Slika 18: Izsek kode, ki posredno požene motor ob kliku na gumb grafičnega vmesnika ...... 31
Slika 19: Izsek kode, ki pošlje ukaz za ustavitev motorja ........................................................ 32
Slika 20: Obvestilo uporabniku o uspehu preizkusa povezave ................................................ 32
Slika 21: Konfiguracijska XML-datoteka ................................................................................ 33
Slika 22: Izsek kode, ki prikazuje kostruktor razreda ConnectionProtocol ............................. 33
Programski in strojni vmesnik za krmiljenje robotske roke Stran 52
Slika 23: Metoda, ki pošlje podatke mikrokrmliniku ............................................................... 34
Slika 24: Metoda, ki primerja prispeli podatek s poslanim ...................................................... 35
Slika 25: Ukazna paketa za upravljanje z motorji in lučko na robotski roki............................ 36
Slika 26: Diagram poteka mikrokrmilniškega programa ......................................................... 38
Slika 27: Izsek kode, ki definira simbolične konstante ............................................................ 39
Slika 28: Izsek kode, kjer definiramo začetne vrednosti registrov........................................... 40
Slika 29: Izsek kode, ki sprejme podatek in krmili elektromotorje.......................................... 40
Slika 30: scenarija z zaporedjem gibov robotske roke ............................................................. 41
Slika 31: Izsek kode, ki razčleni scenarij, napisan v XML-formatu ......................................... 42
Slika 32: Metoda, ki sestavi ukaz za mikrokrmilnik ................................................................ 44
Slika 33: Diplomski projekt ..................................................................................................... 45
9.2 Naslov študenta
Danijel Senekovič
Varda 10
2223 Jurovski Dol
9.3 Kratek življenjepis
Rodil sem se 20. 9. 1986 v Mariboru. Obiskoval sem OŠ Sv. Jurij, ki sem jo končal leta 2001
in se nato vpisal na Srednjo elektro-računalniško šolo v Mariboru, smer Računalniški tehnik.
Po končani poklicni maturi sem se leta 2005 vpisal na Fakulteto za elektrotehniko,
računalništvo in informatiko v Mariboru, smer Računalništvo in informatika, ter v
nadaljevanju izbral smer študija Logika in sistemi.