programski in strojni vmesnik za krmiljenje robotske … · software and hardware interface for...

62
Danijel Senekovič PROGRAMSKI IN STROJNI VMESNIK ZA KRMILJENJE ROBOTSKE ROKE Diplomsko delo Maribor, december 2010

Upload: others

Post on 22-Jan-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

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

II

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 28

Slika 15: Shema vezja

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 43

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.

Programski in strojni vmesnik za krmiljenje robotske roke Stran 53

Programski in strojni vmesnik za krmiljenje robotske roke Stran 54