upravljanje modelom vozila putem raČunalne mreŽe · pdf fileveleuČilište u rijeci...
TRANSCRIPT
VELEUČILIŠTE U RIJECI
Dimitrij Vukelić
UPRAVLJANJE MODELOM VOZILA PUTEM RAČUNALNE MREŽE I RASPBERRY PI RAČUNALA
ZAVRŠNI RAD
Rijeka, 2013.
VELEUČILIŠTE U RIJECI
Stručni studij Telematike
UPRAVLJANJE MODELOM VOZILA PUTEM
RAČUNALNE MREŽE I RASPBERRY PI RAČUNALA
(završni rad)
MENTOR STUDENT
Marino Franušić Dimitrij Vukelić MBS: 2427004056/10
Rijeka, lipanj 2013.
vELEUerLrSrn u RTJECT
srnudrvr srnDrJ TELEMATTKE
Rijeka, 01.03.2013
ZADATAKza zavrini rad
Pristupniku Dimitrij Vukelid MBS: 2427004056110
Studentu strudnog studija telematike izdaje se zadatak zavr5ni rad - tema zavr5nog radapod nazivom:
Upravljanje modelom vozila putem ra6unalne mreie i Raspberry Pi raiunala
Sadriaj zadatkaz
Opisati upravljanje vozilom na daljinu. Opisati Raspberry Pi radunalo. Dati pregledmogudih primjena Raspberry Pi radunala. Objasniti mogudnost upravljanja putemradunalne mre?.r- uredajima spojenim na Raspberry Pi radunalo. Povezati volan i radunalo.Izraditi sklop za povezivanje Raspberry Pi radunala i modela voala. Izraditi potrebneaplikacije za udaljeno upravljanje vozilom. Prikupiti video pr*laz s kamere postavljenena vozilo.
Preporuka:
Zainadu sustava preporuda se kori5tenje javno dostupnih materijala i projekata koji su sebavili slidnom tematikom.
Rad obraditi sukladno odredbama Pravilnika o zawlnom radu VeleudiliSta u Rijeci.
T.adano: 01. oZuj ka 2013 Predati do: 5. srpnja 2013
Marino FranuSii, predavad
Voditelj studija: r -
a""-- Q.D--
Zadattkprimio dana: 01. oZujka 2013
.-.ff L"/n
Dostavlja se:- mentoru- pristupniku
Dimitrij Vukelid
IZJAVA
Izjavliujem da sam zawsni rad pod naslovom UPRAVU44'F HoDFAom cn
ptrierr P.s&rNArue [ere-F r ?rspBERLY Pt aA;oilsrA izradiosamostalnopod
nadmrom i uz strudnu pomo6 mentora mRetNA lParqutt dn
SAŽETAK
Upravljanje na daljinu olakšava i ubrzava procese koje čovjek izvodi. Od davnina on
istražuje i izrađuje alate koji to čine. Današnjim napretkom tehnologije zrak oko nas
isprepleten je signalima za daljinsku komunikaciju i/ili upravljanje, bilo da se radi o zabavi ili
radnim procesima. Vozila upravljana na daljinu nalaze se u svim sferama ljudskog života, od
malih nogu dijete se igra autom ili brodom na daljinsko upravljanje i tako postaje svjestan da
može upravljati sa strojem. Rover na Marsu ili vozilo za razminiranja primjer su vozila
upravljanih na daljinu koje pomažu u istraživanju ili zamjenjuju čovjeka u radnjama opasnima
za život. Prvi dio rada obrađuje teoretski dio upravljanja na daljinu kao i potrebne elemente
korištene u izradi rada, a drugi dio aplikativni dio potreban za izvedbu upravljanja.
Ključne riječi: upravljanje, daljina, aplikacija, lokalna mreža
SADRŽAJ
1. UVOD .................................................................................................................................... 1
2. UPRAVLJANJE VOZILIMA NA DALJINU ................................................................... 2
2.1. Princip rada upravljanja vozilom na daljinu ............................................................................................... 4
3. RASPBERRY PI RAČUNALO ......................................................................................... 12
4. NAČIN POVEZIVANJA NA RAČUNALNU MREŽU ILI INTERNET ..................... 16
5. SUČELJE ZA PROGRAMIRANJE APLIKACIJA KOJE SE KORISTI ZA UPRAVLJANJE ULAZIMA/IZLAZIMA RASPBERRY PI RAČUNALA ..................... 18
5.1. Izrađeni JavaAPI za povezivanje ...............................................................................................................19 5.1.1. Metoda u klasi za određivanje parametara konekcije ............................................................................ 19 5.1.2. Metoda definiranja GPIO priključnica u klasi definicije .......................................................................... 20 5.1.3. Metoda postavljanja atributa priključnice u klasi definicije ................................................................... 20 5.1.4. Metoda pozivanja makro funkcije definirane na serveru ....................................................................... 21 5.1.5. Metoda slanja HTTP zahtjeva ................................................................................................................. 22
6. IZRADA APLIKACIJE ..................................................................................................... 23
6.1. Izrada dijela aplikacije koji komunicira s volanom ....................................................................................25
6.2. Izrada dijela aplikacije koji prosljeđuje naredbe na Raspberry Pi .............................................................27
6.3. Prilagodba serverske aplikacije koji upravlja vozilom ...............................................................................28 6.3.1. Definiranje priključnica ....................................................................................................................... 29 6.3.2. Definiranje funkcija ............................................................................................................................ 29 6.3.3. Makro naredbe ................................................................................................................................... 30 6.3.4. Sigurnosni mehanizam ....................................................................................................................... 30 6.3.5. Registriranje skripte ........................................................................................................................... 32
6.4. Izrada dijela aplikacije koji prima video prikaz s kamere ..........................................................................32
7. OPIS RADA CJELOKUPNOG SUSTAVA I SVIH FUNKCIONALNOSTI ............... 35
8. ZAKLJUČAK ..................................................................................................................... 36
POPIS KRATICA .................................................................................................................. 37
LITERATURA ....................................................................................................................... 37
POPIS SLIKA ......................................................................................................................... 38
završni rad
1
1. UVOD
Čovjek od svojih samih početaka kreira alate i strojeve koji bi mu olakšali pri
obavljanju poslova. Daljinsko upravljanje može se definirati kao – procesi koji su upravljani
na daljinu, automatizirano ili manualno uz pomoć čovjeka. Proces definiramo kao niz
određenih, smislenih aktivnosti koje imaju određeni cilj, a upravljati možemo bilo što, radni
stroj, vozilo, softver, kućnu automatizaciju pa čak i s čovjekom samim. Iako možda na prvi
pogled nema smisla da je moguće daljinski upravljati s čovjekom, izdavanje radnog zadatka
preko mobilnog uređaja je upravo to. Nadređena osoba je udaljena od radnika koji izvršava
radni proces i zadaje mu radni zadatak. Identično se ponaša i daljinski upravljano vozilo
igračka, dijete željenu naredbu prenosi kontrolerom bežično na vozilo.
Današnja daljinski upravljana vozila ne razlikuju se mnogo od prvih pokušaja
upravljanja uređaja radio valovima Nikole Tesle, 1898. godine kada se i prvi puta spominje
izraz - "teleautomaton" – teleautomatika, danas prihvaćena kao telematika. Tehnički su,
današnja vozila, superiornija u pogledu veličine, brzine odziva i količine utrošene energije, no
princip rada je ostao potpuno isti. Operator putem daljinskog kontrolera upravlja uređajem. I
dalje se koriste radio signali kao i u Teslinom brodu, a uređaji su napajani baterijama.
Svijet danas je nezamisliv bez daljinskih upravljača, rijetko da postoji kućanstvo bez
njega. Daljinski upravljana vozila su svoju primjenu našla u svim sferama ljudskog života, od
vojske do znanstvene zajednice i medicine. Ubrzanim razvojem tehnologije čovjek se sve više
prilagođava činjenici da mora manje razmišljati jer ga zamjenjuju „pametni“ daljinski
upravljani strojevi koji imaju mogućnost ispraviti pogrešku operatora u kritičnim situacijama
(vozilo koje daljinskim putem dobiva informaciju o mogućoj koliziji s drugim vozilom pa
preuzima kontrolu nad vozačem i koči kako bi izbjegao koliziju). Koliko je to poboljšanje, a
koliko hendikep pokazat će vrijeme.
završni rad
2
2. Upravljanje vozilima na daljinu
Sustav za daljinsko djelovanje (eng. teleoperation) podrazumijeva različite načine upravljanja
udaljenim uređajem koji je pomoću određenog komunikacijskog medija povezan s osobom
koja na udaljenoj lokaciji upravlja i kontrolira pokrete: vozila, robota i sličnih uređaja
smještenih u stvarnom svijetu. Povezanost operatora s udaljenim uređajem dovodi do osjećaja
fizičke prisutnosti na udaljenoj lokaciji, što pridonosi kvaliteti reakcija operatora prilikom
određenih situacija, pokreta u kojima se sam uređaj nalazi. Taj osjećaj dovodi do povećanja
osjetilno-motornih sposobnosti u rješavanju zadataka koji se izvršavaju na udaljenoj lokaciji;
pomicanje, skretanje, podizanje ili spuštanje tereta odnosno općenito interakcija s okolinom.
Rukovanje i upravljanje na daljinu dobiva osobiti značaj u aktivnostima koje zahtijevaju
izrazitu preciznost, štetne su za život operatera ili zahtijevaju brzo djelovanje kao što je
primjer u kirurgiji, vojnim aktivnostima, rukovanju opasnim tvarima i slično. Obavljanjem
aktivnosti na udaljenim lokacijama na koje operator nije mogao pristupiti zbog opasnosti po
život ili potrebe za brzim djelovanjem na nekoj drugoj lokaciji, povećana je djelotvornost i
učinkovitost te kvaliteta življenja.
Iluzija o prisutnosti operatora na udaljenoj lokaciji postignuta je određenim stupnjem prividne
stvarnosti. Složeni elektro-kemijski procesi interpretiraju se u mozgu iz svih osjetila na
temelju stečenih predznanja o svijetu, odnosno mozak ima referentni model, znanje koje je
pohranjeno u njemu. Ta znanja nisu samo informacije iz okoline već percepcije osjetila i
mozga koje je čovjek u nekoj situaciji primio iz okoline i pohranio ih u svojoj memoriji.
Memorirana znanja stvaraju osjećaj prividne stvarnosti u trenutku upravljanja na daljinu.
Moguće je potpuno se nalaziti u svijetu prividnosti, operator ne vidi ništa drugo osim
prividnog svijeta sa zaslona računala, ali ako operator nije u potpunosti uživljen u taj svijet
onda se govori o djelomičnom efektu. Iz toga razloga potrebno je poboljšati elemente koji
stvaraju osjećaj prividne stvarnosti. Ako je riječ o računalnoj aplikaciji, potrebno je
unaprijediti kvalitetu elemenata aplikacije koji stvaraju osjećaj virtualne stvarnosti. Današnja
osobna računala, pametni telefoni i tablet uređaji uskoro bi mogli navoditi ljude u raznim
aktivnostima pa čak i upravljati obućom koja ljude odvodi do željenog odredišta
završni rad
3
Upravljanje udaljenim uređajem patentirao je još davne 1893. godine Nikola Tesla,
koji je osmislio upravljanje vozilima i plovilima pomoću radiovalova. Najveća je
komercijalna upotreba daljinskih upravljača kojima se iz udobnih naslonjača upravlja
televizorima. Nakon tolike udobnosti ugodnog naslonjača Nintendova Wii igraća konzola
omogućila je fizičku aktivnost tako da sustav senzora prati ljudske pokrete i na taj način
zahtjeva aktivan fizički angažman koji je natjerao svog korisnika da se podigne iz udobnog
naslonjača. Upravljanje vozilima na daljinu može se pratiti kroz dječje igračke s obzirom da
su komercijalno najdostupnije. Prve dječje igračke, autići na daljinska upravljanja zapravo to i
nisu s obzirom da su vozilo i daljinski upravljač bili povezani kabelom koji je omogućavao
udaljavanje osobe od vozila tek pokoji metar, koliko je dozvoljavala dužina kabela. Nešto
kasnije razvile su se igračke, vozila s pravim daljinskim navođenjem do udaljenosti koje je
omogućavao radio signal između vozila i daljinskog upravljača. No, ni takav način
upravljanja nije stvorio iluziju stvarnog navođenja vozila. Računalne igre te uređaji poput
volana koji se povezuje s računalom i služi upravljanju igrom doveli su do povećanja
stvaranja osjećaja stvarnog upravljanja vozilom koje se zapravo pokreće u digitalnom svijetu
odnosno aplikaciji. Takve vrste simulacija koriste se u mnogim granama, kao što su vojne i
medicinske svrhama, odnosno proizvodnja i aktivnosti koje zahtijevaju određenu preciznost
prilikom navođenja.
Vozila koja bez neposrednog upravljanja čovjeka prikupljaju određene informacije iz
okoline mogu djelovati potpuno samostalno i razmjenjivati podatke s okolinom jeftinije i
pouzdanije te sigurnije za čovjeka. Primjer je vozilo poslano na Mars kako bi prikupilo
podatke prije nego što ljudska posada posjeti taj planet. Njegov „zadatak“ je prikupljati
uzorke tla i atmosferske podatke, obrađivati ih i informacije slati u centar na Zemlji. Vozilo za
razminiranje je primjer vozila koje zamjenjuje čovjeka u opasnim zadatcima. Nažalost zbog
visoke cijene nabavke u Hrvatskoj se jako malo ili uopće ne koriste.
Važnost automatiziranih sustava u vojnim svrhama je od posebne važnosti što je
posebno vidljivo kod bespilotnih letjelica koje se koriste još od sredine prošlog stoljeća i
godinama se njihove sposobnosti i mogućnosti samo poboljšavaju bez obzira da li djeluju u
zraku, na kopnu ili u vodi. Američke su vojne snage obavljale pedesetih godina prošlog
stoljeća, nadgledanja sovjetskih teritorija pomoću bespilotnih letjelica koje su upravljane
daljinskim putem prikupljale važne informacije te su ih operatori obrađivali u vojnim bazama
završni rad
4
bez opasnosti prelaska nedozvoljenih granica. Takvih je primjera u vojnoj industriji veliki
broj, ali nisu svi poznati širokoj javnosti. Činjenica da danas svatko tko se bavi
automatizacijom može razvijati vozilo upravljano na daljinu otvara pitanje koliko je daleko
danas otišla vojna industrija kada prosječni čovjek uspijeva automatizirati svoju vlastitu
okolinu.
2.1. Princip rada upravljanja vozilom na daljinu
Svako radijski upravljano vozilo (u daljnjem tekstu RC) sastoji se od dvije osnovne
komponente, prijemnika i predajnika, iako se u naprednijim vozilima nalaze primopredajnici s
obje strane. Predajnik se nalazi kod operatera (unutar upravljača) i služi za odašiljanje
obrađenih informacija s upravljača prema vozilu. Prijemnik u vozilu spojen je na ostatak
upravljačke logike, prima i interpretira dobivene informacije te ih šalje prema upravljačkoj
logici.
Signal se, između operatera i vozila, prenosi bežičnim putem koristeći radijske
frekvencije. Postoji određen (dodijeljen od strane regulatornih agencija) spektar frekvencija
kao i snaga odašiljanja koje se smiju koristiti za upravljanje vozilima. Iako postoje velike
razlike u regulativi među državama o korištenju frekvencija, isti raspon se koristi za svaki
uređaj svugdje u svijetu kako slijedi :
• Radio kontrola: 35 - 73 MHz (posebni RC kanali)
• Telemetrijski Podatci: 868 - 915 MHz (Europa SRD G3 područje/ISM
područje)
• Radio kontrola / Telemetrija / Video konekcije: 2.4 GHz (ISM područje)
• Podatkovne / Video konekcije : 5 GHz (ISM područje)
Područja koja se najčešće koriste u pojedinim državama svijeta
(https://pixhawk.ethz.ch/tutorials/frequency):
Austrija
• 27 MHz RC modeli (sve vrste)
završni rad
5
• 35 MHz RC samo avioni i helikopteri (35.000 - 35.220 MHz)
• 40 MHz RC modeli
o 40.665 - 40.695 MHz (kanali 50 - 53) za avione, automobile i brodove
• 2.4 GHz je dozvoljena za korištenje (10 mW i 100 mW)
Francuska
• 27 MHz RC modeli (sve vrste)
• 35 MHz (35.000 and 35.010 MHz) Avioni
• 41 MHz RC modeli
o 41.000 - 41.100 MHz Avioni
o 41.110 - 41.200 MHz svi modeli
• 72 MHz (72.210 - 72.490 MHz) svi modeli
• 2.4 GHz je dozvoljena za korištenje (10 mW i 100 mW)
Njemačka
• 27 MHz RC modeli (sve vrste, standardna frekvencija za jeftine
igračke)
• 35 MHz RC samo avioni i helikopteri
• 40 MHz RC modeli
o 40,665 - 40,695 (kanali 50 - 53) za avione, automobile i brodove
o 40,715 - 40,985 (kanali 54 - 92) za automobile i brodove
• 2.4 GHz je dozvoljena za korištenje (10 mW i 100 mW)
Ako se govori o jednostavnim igračkama, parametri upravljanja su kretanje naprijed,
natrag, lijevo i desno. Takvi upravljači koriste tipkala, popularno zvane digitalne komande,
zbog stanja 0/1 – uključeno isključeno (Slika 1).
završni rad
6
Slika 1: Jednostavni kontroler
Izvor: http://battlemachinesrc.com/images/lg/controller_lg.jpg
Kod naprednijih upravljača stvari se malo kompliciraju i broj parametara se povećava
zbog načina upravljanja vozilom. Napredniji upravljači koristi analogne komande u obliku
potenciometara, kako bi se moglo upravljati brzinom vozila i finim zakretom kuta prednjih
kotača. U pravilu kontroliranje ovakvih vozila zahtjeva određeno prilagođavanje na upravljač
i potrebno je prvo vježbati kako ne bi došlo do uništavanja samog vozila. Tada se koriste
primopredajnici u upravljačima, jer osim što upravljač šalje operaterove komande vozilu, on i
prima informacije s vozila, brzinu, stanje napona baterije, trenutnu potrošnju struje,
temperaturu motora pa čak i video sliku s kamere iz vozila (Slika 2).
Slika 2: Napredni kontroler
Izvor : http://fpvcentral.net/wp-content/uploads/2012/04/osrc.jpg
završni rad
7
U vozilu se nalazi upravljačka logika i prijemnik/primopredajnik. Ona upravlja, kako
joj i samo ime kaže, motorima vozila. Čak i najjednostavnija vozila moraju imati određeni
sklop kako bi se mogao mijenjati smjer kretanja odnosno vrtnje motora. U tu svrhu koristi se
H-most (Slika 3).
Slika 3: Prikaz rada H-mosta
Izvor: http://blog.solutions-cubed.com/wp-content/uploads/2012/06/h-bridge_thumb.png
Kako je vidljivo na gornjoj slici, zavisno od kombinacije prekidača mijenja se polaritet
napona na priključnicama, a time i sam smjer vrtnje motora. H-most, bilo da se govori o
elektromehaničkom uz pomoć releja (Slika 4) ili elektroničkom uz pomoć tranzistora ili
gotovih H-most elemenata (Slika 5) služi kako bi se okrenuo polaritet odnosno smjer vrtnje
istosmjernog motora ponašajući se identično kao prekidači na gornjoj slici.
završni rad
8
Slika 4: Relejni H-most
Izvor : obrada autora
Slika 5: LM298 H-most
Izvor:http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/L298_IMGP4533_wp.jpg/220px-
L298_IMGP4533_wp.jpg
Ne ulazeći u princip rada istosmjernog motora, bitno je znati da se promjenom
polariteta priključnica mijenja i smjer vrtnje motora, a da bi to bilo moguće bez kratkog spoja
na priključnicama koristi se H-most.
Brzina vrtnje, kao i zakret kotača su upravljani pomoću PWM – Pulse Width
Modulation metode. Princip PWM-a je emulacija analognog napona digitalnim signalom.
Visoko frekventnim izmjenama logičkih stanja (0/1), šalju se impulsi napona i zbog histereze
gašenja upravljani motor se brže, odnosno sporije kreće. Potrebno je paziti na struju
uključenja motora tako da svaki motor neće raditi od 0% PWM-a. Najsigurnije je pokušati sa
70% i onda postepeno smanjivati postotak napona uključenja. Mjerenjem struje uključenja
motora moguće je utvrditi najpogodniji napon uključenja.
završni rad
9
Zakret kotača se vrši pomoću servo motora (Slika 6).
Slika 6: Prikaz servo motora
Izvor: http://www.ermicro.com/blog/wp-content/uploads/2009/02/servo_00.jpg
To je u osnovi okretni aktuator koji dozvoljava preciznu kontrolu stupnja okreta.
Sastoji se od motora uparenog sa senzorom pozicije preko mjenjača redukcije. Za kontrolu
takvog motora potreban je posebni kontroler. Najčešće je maksimalni kut zakreta 180° iako
postoje motori s kutom od 360° koji mogu napraviti kružno gibanje. Upravljanje se također
vrši PWM metodom samo je u ovom slučaju točno određeno kakav signal i u kojem trajanju
prenosi određeni stupanj zakreta motora.
Na slikama (Slika 7 i Slika 8) prikazan je PWM signal, 100 i 50 % radnog ciklusa, na
osciloskopu kod upravljanja brzinom, zelena linija, te zakretom kuta servo motora, crvena
linija. Primjetna je razlika u frekvenciji kojom se odašilju impulsi. Dok je, na slici 8, kod
100% PWM signala, upravljanje brzinom ravna linija (3.3 V), upravljanje zakretom i dalje
ima impuls određenog trajanja. Prikaz je informativnog karaktera, korištene su ručno izrađene
sonde spojene na ulaz audio kartice računala.
završni rad
10
Slika 7: PWM 50%
Izvor : obrada autora
Slika 8: PWM 100%
Izvor : obrada autora
Na slici (Slika 9) prikazana je blok shema elektroničke kontrole brzine motora (ESC –
eng. Electronic speed control) i kruga za otklanjanje baterije (BEC – eng. battery eliminator
circuit). Sva vozila na daljinsko upravljanje više klase obvezno u sebi imaju ova dva sklopa.
Prvi služi za regulaciju brzine i smjera vrtnje motora (ESC), a drugi za napajanje kontrolera i
aktuatora(BEC).
završni rad
11
Slika 9: Shema ESC-a i BEC-a u radu
Izvor: obrada autora
ESC i BEC je autor izradio za potrebe završnog rada, jer vozilo nije imalo regulaciju
brzine niti servo podešavanje zakreta kuta vozila pa je bilo potrebno izraditi potpuno novu
elektroniku za upravljanje vozila. Autor je vodio računa o modularnosti vozila pa su određene
komponente (napajanje Raspberry Pi-a) odvojive od ostatka elektronike ili univerzalne
(priključnica za kontroler) kako bi olakšao daljnju možebitnu nadogradnju vozila.
završni rad
12
3. Raspberry Pi računalo
Raspberry Pi računalo, pogonjeno „Linux“ ili „RISCOS“ operacijskim sustavom (OS),
veličine je kreditne kartice koje se priključuje na televizor/monitor i periferne jedinice kao
tipkovnica ili računalni miš. Zamišljeno je za mnogobrojne aktivnosti kao što su obrada
teksta, multimedijalni centar, izrada proračunskih tablica, igranje igara, upravljanje vanjskim
uređajima ali prvenstveno u edukacijske svrhe za učenje programiranja (većinom u „Python“ i
„Scratch“ programskim jezicima) i rada na računalu. Svojom niskom cijenom, oko tristo
kuna, pa i manje, zavisno od modela, dostupan je svim učenicima i studentima koji žele
savladati prve korake programiranja bez ulaganja velikih iznosa u skupu računalnu opremu.
Postoje dva modela Pi računala, model A ima 256MB RAM-a, jedan USB ulaz, dok model B
ima 512MB RAM-a, dva USB ulaza i mrežni priključak. Oba modela pogoni ARM -
1176JZFS procesor na 700MHz (moguće je napraviti overclock na 1GHz). Grafičke
mogućnosti su gotovo jednake onima XBox konzole, Videocore 4 grafički procesor sposoban
dekodirati filmove BlueRay kvalitete pri 1080p rezoluciji, te OpenGL ES2.0 i OpenVG
zahvaljujući 3D jezgri. U prodaji su dostupne memorijske kartice s operacijskim sustavom za
Raspberry Pi, ali one se plaćaju dodatno te ako se kupuje bez kartice s operacijskim sustavom,
potrebno je koristiti dodatno računalo za instalaciju operacijskog sustava na Pi računalo. To
predstavlja negativnu stranu ovog uređaja odnosno govori o njegovoj nesamostalnosti. Uređaj
teži tek 45 g, a njegova veličina je 85.60mm x 56mm x 21mm. Utor za SD karticu i konektori
malo povećavaju veličinu cijelog uređaja (Slika 10).
Slika 10: Raspberry PI
Izvor: http://www.gadgeterija.net/2013/01/20/recenzija-raspberry-pi-komadic-pite-za-svakoga/#.UWFiGTdj9Sp
završni rad
13
Instalacija operacijskog sustava na Pi računalo vrlo je jednostavna s obzirom na to da
postoje gotove „Linux“ distribucije. Preporučeni izvor napajanja je 700mA uz 5V, a za
napajanje se mogu koristiti punjači pametnih telefona. Većina prosječnih korisnika koristit će
„Raspbian“ OS baziran na „Debian“ distribuciji „Linux“ i neće imati velikih problema
prilagodbe na sučelje ako su prije radili u Windows okruženju (Slika 11).
Slika 11: Sučelje Raspberry PI
Izvor:http://www.gadgeterija.net/2013/01/20/recenzija-raspberry-pi-komadic-pite-za-svakoga/#.UWFiGTdj9Sp
Kao i kod svake „Linux“ distribucije za sve napredne sistemske postavke potrebno je
poznavati rad u terminalu i princip rada „Linux“ kao operacijskog sustava. Distribucije se
redovno osvježavaju novim mogućnostima pa je tako najnovija inačica obogaćena „dućanom“
za aplikacije i aplikacijom za spajanje na bežične mreže što je prije bilo potrebno raditi u
terminalu.
Osim spajanja na monitor i korištenja kao klasično računalo (monitor, miš,
tipkovnica), Raspberry Pi-u je moguće pristupiti preko SSH (eng. Secure Shell) konekcije,
bilo preko terminala u „Linux“ okruženju ili preko „Putty“ aplikacije u „Windows“
okruženju.
Posebnost Raspberry Pi računala je u tome što ima mogućnost jednostavne interakcije
s vanjskim svijetom koristeći GPIO (eng. General Purpose Input Output) priključnice. To su
završni rad
14
dakle digitalni ulazi i izlazi kojima se pristupa putem priključnica koje se nalaze na ploči
računala, a ukupno ih ima 26, dva reda po 13 (Slika 12).
Slika 12: Raspored GPIO priključnica
Izvor : http://sansgridpdx.com/images/6/68/Raspberry-pi-rev-1-gpio-pin-out1.jpg
Kako je vidljivo na slici iznad, osim naponskih (3V3 i 5V) i minus (Ground)
priključnica, ostale se mogu koristiti kao digitalni ulazi-izlazi ili imaju specijalnu namjenu,
kao što su serijska konekcija (UART) ili I2C za spajanje elemenata.
Kod spajanja posebno treba obratiti pažnju da priključnice Raspberry Pi računala rade
na 3.3V i svako spajanje s uređajima ili elementima koji koriste 5V signal doveli bi do trajnog
uništenja samog računala. Primjera radi, ako se Raspberry Pi spaja s Arduino
mikrokontrolerom preko UART, serijske veze, potrebno je koristiti MAX2322 sklop između
završni rad
15
kako bi se zaštitio Raspberry Pi jer serijska veza na Arduinu koristi 5V signal. Ako ih se spaja
putem USB ulaza tada nema problema jer je to interno riješeno.
završni rad
16
4. Način povezivanja na računalnu mrežu ili internet
Raspberry Pi je moguće povezati u lokalnu računalnu mrežu, a samim time i na
internet na dva načina, žično i bežično. Žično se spaja putem UTP kabela kao i svako drugo
računalo. Za bežično spajanje potrebno je koristiti USB bežični adapter i pritom je potrebno
pripaziti kod kupnje jer Raspberry Pi koristi „Linux“ koji ne podržava sve adaptere, a i
ograničen je sa strujom napajanja preko USB priključka pa je moguće da neki adapteri ne
rade..Prije.kupovine.svakako.je.potrebno.provjeriti.web.sjedište
http://elinux.org/RPi_VerifiedPeripherals i provjeriti je li netko već imao iskustva sa željenim
adapterom. Isto se odnosi na sve ulazno-izlazne uređaje koji se spajaju na Raspberry Pi.
Kako bi se proveo postupak spajanja na bežičnu mrežu potrebno je ili spojiti Pi na
monitor te tipkovnicu i miš, ili ga žično spojiti na mrežu pa koristiti „Putty“ ili neki drugi
SSH terminal. Potom je potrebno u terminalu naredbom lsusb dobiti popis svih USB uređaja
koji su spojeni i provjeriti da li je mrežni adapter na popisu. Ako nije, velika je vjerojatnost da
mrežni adapter ne radi s Pi računalom, Za provjeru je potrebno probati isključiti Pi i ponovno
ga uključiti dok je kartica u USB utoru. Ne preporučuje se korištenje produžnih USB kablova.
Ako je na popisu, postoje dva ispravna načina. Jedan je preko grafičkog sučelja, a drugi u
terminalu. Za početnike se preporučuje korištenje grafičkog sučelja, ali je tada pored „Putty“
programa potreban i „VNC“ softver za grafički prikaz (ako se spaja putem SSH).
Podešavanje preko terminala:
1. Provjeriti inačicu operacijskog sustava i nadograditi s posljednjim
dostupnim nadogradnjama
sudo apt-get update
sudo apt-get upgrade
2. Ponovno pokrenuti (resetirati) računalo
sudo reboot
3. Provjeriti postavke sučelja
sudo nano /etc/network/interfaces
završni rad
17
4. Postaviti kao što je navedeno ispod, pod pretpostavkom da je uključeno
dinamičko dodjeljivanje adresa (DHCP)
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
5. Pohraniti postavke – ctrl+X , pa zatim odabrati Yes
6. Upisati naredbu za promjenu konfiguracije
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
7. Postaviti konfiguraciju mreže
network={
ssid="SSID-IME MREŽE"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="WIFI-ZAPORKA"
}
8. Snimiti postavke – ctrl+X , pa zatim odabrati Yes
9. Ponovno pokrenuti (resetirati) računalo
sudo reboot
(http://pingbin.com/2012/12/setup-wifi-raspberry-pi/)
Za postavljanje u grafičkom modu postoji intuitivna aplikacija pomoću koje je jednostavno
podesiti spajanje na bežičnu mrežu.
završni rad
18
5. Sučelje za programiranje aplikacija koje se koristi za upravljanje ulazima/izlazima Raspberry Pi računala
Komunikacija između klijentskog računala i Raspberry Pi-a se vrši pomoću
„WebIOPi“ okvira. Serverski dio napisan je u „Python“ programskom jeziku, a za udaljenu
komunikaciju koristi se HTTP (eng. hyper text transfer protocol – protokol za internet
pregledavanje) ili CoAP (eng. Constrained Application Protocol – jednostavan protokol
zamišljen za komunikaciju jednostavnih uređaja preko interneta) REST (eng.
Representational State Transfer – stil softverske arhitekture koja se koristi na internetu,
najčešće korištene su GET i POST metode za web komunikaciju) API (eng. application
programming interface – određuje kako pojedine softverske komponente djeluju međusobno).
Autor okvira, Eric Ptak, je preradio Apache web server i prilagodio ga kako bi mogao
„komunicirati“ s GPIO priključnicama Pi-a. Termin „komunicirati“ je pogodniji od
kontrolirati i/ili upravljati jer kako je već rečeno postoje protokoli komunikacije putem GPIO
pa je moguće putem web stranice proslijediti tekstualnu informaciju kroz serijsku vezu dalje
prema periferijama, kao i iščitati tekstualne podatke poslane sa strane periferija. Trenutna
verzija je 0.6+, a autor rada aktivno sudjeluje u razvoju okvira. Jedan od razloga zašto je
upravo ovaj način komunikacije odabran za rad je, osim testiranja i promoviranje
jednostavnog, a opet moćnog servera za komunikaciju s periferijama. Osnovni način rada i
arhitektura „WebIOPi“ okvira prikazana je na slici ispod (Slika 13). Sve informacije te
postupak instalacije i prilagodbe moguće je naći na web sjedištu -
https://code.google.com/p/webiopi/
Slika 13: WebIOPi arhitektura
Izvor: http://trouch.com/wp-content/uploads/2012/11/webiopi-architecture.png
završni rad
19
5.1. Izrađeni JavaAPI za povezivanje
Za potrebe rada autor je izradio jednostavan Java API, „jWebIOPi“, za spajanje Java
aplikacija na „WebIOPi“ server putem HTTP protokola. API se sastoji od dvije klase, prva
definira metodu spajanja (adresu,vrata (eng. port), korisničko ime i zaporku), a druga metode
komunikacije preko GPIO priključnica. Na taj način programeru je olakšano komuniciranje sa
serverom jer je API napravljen intuitivno i sličan je Arduino načinu pisanja komandi. Kako je
API rađen u suradnji sa autorom „WebIOPi“ servera, sve metode kao i „Java doc“
(dokumentacija API-ja koja se generira u kodu pozivajući /** , a služi programeru koji koristi
API u objašnjenju pozivanja i svrhe metoda) su na engleskom jeziku. Trenutna inačica je 1.0
RC, a osim standardnih funkcija IN, OUT i PWM podržava još serijsku komunikaciju te
pozivanje makro funkcija i stalno se nadograđuje novim funkcionalnostima prateći razvoj
serverske.aplikacije..Dostupan.je,.pod.„Apache.2.0.“.licencom,.na.web.sjedištu
https://code.google.com/p/java-api-for-webiopi/,.a.„Java.doc“.na.
http://ucka.veleri.hr/~dvukeli1/.
5.1.1. Metoda u klasi za određivanje parametara konekcije
Metodom se definiraju adresa računala, port i eventualno dodatna putanja servera,
unutar if-a su riješeni određeni specifični slučajevi unosa adrese. Prvo metoda provjerava je li
programer unio http:// prefiks, ako nije onda ga ona dodaje, nakon toga provjerava ima li
adresa unos webiopi ili root u sintaksi, ako ima onda ga uklanja jer nije potreban odnosno
može dovesti do rušenja servera. Sljedeća provjera je li programer unio dodatnu putanju do
servera i po tome slaže konačnu sintaksu koju pohranjuje u modelu veze.
public HTTPWebIOPiConnection(String url, String port , String path ){
if(url.contains("http://")){ if(path.contains("webiopi")||path.contains("root")|| path.equals("")){
setAdress(url + ":" + port + "/"); } else { setAdress(url + ":" + port + "/"+ path + "/"); }
završni rad
20
} else {
if(path.contains("webiopi")||path.contains("root")|| path.equals("")){
setAdress("http://" + url + ":" + port + "/"); } else {
setAdress("http://" + url + ":" + port + "/"+ path + "/"); } }
}
5.1.2. Metoda definiranja GPIO priključnica u klasi definicije
Jedna od četiri moguće definicije metode za korištenje GPIO priključnica. Programer
unosi predefiniranu konekciju iz prvog primjera, broj GPIO priključnice i funkciju
priključnice: in, out, pwm, a metoda je sprema u model. Ova metoda ne koristi autorizaciju za
pristup serveru i koristi se samo ako nije uključena zaporka i korisničko ime na „WebIOPi“
serveru. Postoje još identična metoda ovoj samo s autorizacijom, metoda za pristup uređajima
(serijska veza) te metoda kojom se definiraju samo konekcija i autorizacija, a služi za
pozivanje makro funkcija objašnjenih u četvrtom primjeru.
public DefineGPIO(HTTPWebIOPiConnection konekcija , int pinNuber , String
function) {
this.konekcija = konekcija;
this.pinNumber = pinNuber;
adress = konekcija.getAdress();
SetGpioFunction(pinNumber, function);
}
5.1.3. Metoda postavljanja atributa priključnice u klasi definicije
Metoda kojom se postavlja PWM vrijednost GPIO priključnica. Programer pri
pozivanju metode upisuje vrijednost između 0 i 100% , a ona onda to pretvara u double
vrijednost između 0 i 1 jer je tako određeno serverom. Metoda po primljenoj vrijednosti
završni rad
21
provjerava njenu ispravnost, ako je ispravna poziva send metodu i vraća poruku sa servera, a
ako je neispravno unijeta vrijednost vraća poruku o neispravnosti unosa.
public String SetPWM(int percentRatio ){
double ratio = Double.valueOf(percentRatio)/100;
if(ratio >= 0 && ratio <= 1){
try {
response=String.valueOf(send("GPIO/"+pinNumber+"/pulseRatio/"+ratio));
} catch (IOException e) {
return e.getMessage();
}
}
else {
response = "Ratio must be between 0 and 100";
}
return response;
}
5.1.4. Metoda pozivanja makro funkcije definirane na serveru
Nakon pozivanja metode potrebno je samo upisati naziv makro naredbe, nakon toga
metoda slaže sintaksu i poziva metodu objašnjenu ispod, a vraća poruku servera.
public String startMacro(String macro){
try {
response = send("macros/"+macro+"/");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return response;
}
završni rad
22
5.1.5. Metoda slanja HTTP zahtjeva
Autor za HTTP konekciju koristi Apache server-klijent API. Metoda za slanje HTTP
POST zahtjeva serveru koja se poziva svaki put kada je potrebna pojedinoj metodi za
manipulaciju GPIO priključnicama. Ona sintaksi dodaje putanju određenu pozivanjem metode
objašnjene u prvom primjeru, brine se za autorizaciju na serveru, i prihvaća odgovor servera
koji zatim šalje metodi koja ju je pozvala.
private String send (String order) throws IOException{
URL url = new URL(adress + order);
final HttpURLConnection conn = (HttpURLConnection)
url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
String encodedLogin =
org.apache.commons.codec.binary.Base64.encodeBase64String(logIn.getBytes());
conn.setRequestProperty("Authorization", "Basic " + encodedLogin);
InputStream is = conn.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String response = readAll(rd);
return response;
}
završni rad
23
6. Izrada aplikacije
Osnovni cilj je izraditi aplikaciju koja prihvaća komande igraćeg volana (Slika 14).
Slika 14: Trust igrači volan
Izvor: http://www.trust.com/_images/products/500/13153-1.jpg
Aplikacija primljene komande prenosi putem lokalne bežične mreže na Raspberry Pi, a
korisniku na zaslonu prikazuje video prikaz kamere iz vozila. Izrađena je u „JavaFX“
programskom jeziku koji se podosta razlikuje od klasičnog programiranja u „Java“
programskom jeziku. Grafički dizajn je potpuno odvojen od softvera za programiranje i tako
dopušta lakši timski rad jer je moguće potpuno odvojiti dizajn grafičkog sučelja od logike
aplikacije do samog kraja izrade. Programer koristi posebnu aplikaciju „Scene builder“ koji
sve elemente grafičkog korisničkog sučelja zapisuje u fxml formatu. Slično kao Android
programiranje grafičkog sučelja u „Java“ i fxml je inačica XML. Najveći problem u izradi
aplikacije je nastao jer Oracle, vlasnik „JavaFX“, iako želi uzeti primat HTML-5 u web
dizajnu, iz nepoznatog razloga ukida podršku za veliki broj video formata pa tako i za mjpeg,
te loše napisan engine za prikaz web stranica.
Prvotna ideja je bila napraviti aplikaciju koja vjerno prikazuje unutrašnjost vozila i
tako stvoriti dojam proširene stvarnosti (spoj realnih i virtualnih elemenata koji korisniku
stvaraju dojam tjelesne prisutnosti na drugom mjestu ili omogućuju primitak informacija o
nečemu, na primjer informacije o zgradi koju gleda kroz kameru na zaslonu svog mobilnog
završni rad
24
aparata ) kako bi korisnik imao stvaran dojam da upravlja vozilom (volan se okreće sljedeći
pokrete korisnika na igračem volanu, a snaga motora i stanje mjenjača dinamički se mijenjaju
zavisno od zadanih komandi na monitoru desno od volana (Slika 15 ).
Slika 15: Izrađena JavaFX aplikacija
Izvor: obrada autora
Oznake mjenjača su standardizirana slova kao na automatskom mjenjaču: D (eng.
drive - vožnja), P (eng. parking – parkirna brzina), N (eng. neutral – „ler“,neutralno), R(eng.
reverse – „rikverc“,vožnja u natrag) i B (eng. breake - ručna kočnica). Umjesto brzine vozila
prikazana je postotak pritiska papučice gasa od 0% do 100% preslikavajući postotak snage
motora, istovremeni pritisak na papučicu kočnice razmjerno djeluje na snagu motora
smanjujući je, a time i usporavajući vozilo. Ovdje se autor vodio preglednošću podataka jer je
prvotna verzija s kontrolnim satom, iako efektnija i realnija, bila nepregledna za korisnika.
završni rad
25
Autor je pokušao koristiti AVR 328p mikrokontroler (osnova Arduino kontrolera) kao
kontroler niže razine koji bi upravljao motorima putem PWM-a, a sa Raspberry Pi-em putem
serijske veze. Ideja je nastala zbog toga što Pi nema hardverski nego softverski PWM koji
ovisi o procesoru, za razliku od AVR-a koji ima hardversku izvedbu. Odustajanje od ove
varijante je uzrokovano s dva problema. Manji problem je razlika u naponu logike PI-a i
AVR-a (Pi radi na 3.3V logici, a AVR na 5V) jer se snižavanjem radnog takta AVR-a sa 16
MHz na 8 MHz, a time i napajanja AVR-a na potrebnih 3.3V, to moglo riješiti. Veći problem
je serijska komunikacija kao izvedba protokola na „WebIOPi“ serveru. Za razliku od
standardnih komandi koje se šalju serveru preko zaglavlja HTTP POST metode, serijska
komunikacija se odvija na sljedeći način – u zaglavlju se šalje korisničko ime i zaporka, a u
tijelu poruke se šalje tekstualna naredba. Ovaj način poprilično usporava komunikaciju jer
nakon primitka Pi prvo obrađuje primljenu informaciju, prekodira je te serijski šalje naredbu
AVR-u. AVR je dekodira i pretvara u komandu i bilo bi nebitno da se radi o recimo
zatvaranju zavjesa gdje 300 ili 500 mili sekundi kašnjenja ne igra značajnu ulogu, ali vozilo
treba što prije dobiti informaciju kako ne bi na primjer došlo do kolizije s nekim predmetom u
okolini. Autor „WebIOPi“ servera ima informaciju i pokušava riješiti problem kako bi
uspješno spojili Raspberry Pi i Arduino u budućnosti, bilo poboljšanom izvedbom serijske
komunikacije ili na neki drugi način.
6.1. Izrada dijela aplikacije koji komunicira s volanom
Pošto se „Java“ aplikacija izvodi u „Java“ virtualnoj mašini, za pristup periferijama
kao što je kontroler potrebno je koristiti nativne biblioteke (eng. Native libraries) operativnog
sustava na kojem se izvodi. Autor koristi jinput API u kombinaciji sa „JinputJoystick“
klasom, koja pojednostavljuje uporabu API-ja definirajući samo bitne metode za
komunikaciju. Uz klasu i API potrebno je kopirati nativne biblioteke u isti direktorij gdje se
nalazi sama aplikacija (Slika 16).
završni rad
26
Slika 16: Nativne biblioteke
Izvor: obrada autora
Kako je vidljivo iz gornje slike, kopirane su sve biblioteke i time je omogućeno
korištenje aplikacije na svim operacijskim sustavima (Windows 32 i 64 bit, Linux 32 i 64 bit
te OSX) te je time zadržana ideja višeplatformske aplikacije.
Samo korištenje API-ja je izuzetno jednostavno, potrebno je definirati novu instancu
kontrolera i nakon toga samo pozivati informacije koje su potrebne iz kontrolera.
JInputJoystick joystick;
joystick = new JInputJoystick(Controller.Type.WHEEL,Controller.Type.STICK);
Moguće je u isto vrijeme definirati dvije vrste kontrolera, u radu se definira volan i gamepad
tako ostavljajući mogućnost upravljanja vozilom s različitim kontrolerima.
završni rad
27
Izuzetno je bitno definirati broj tipki samog kontrolera, jer različite izvedbe samog
uređaja imaju i različiti broj tipki, kako ne bi došlo do pogreške pri čitanju stanja tipki (true –
pritisnuta, false – ne pritisnuta).
int brTipki = joystick.getNumberOfButtons();
izlaz = joystick.getButtonValue(0);
Tipke su prilagođene igraćem volanu koji se koristi u radu te bi za potrebe spajanja
različitih modela trebalo napraviti klasu za postavke kontrolera te kalibraciju istog. Podatci o
X i Y osi kontrolera (X je volan, Y su pedale) se mogu čitati na 3 moguća načina:
• joystick.getXAxisPercentage()
• joystick.getXAxisValue()
• joystick.getXRotationPercentage()
Razlika je u brojčanoj vrijednosti koju API vraća. U prvom i trećem slučaju vraća
postotak od 0% do 100% što je pogodno za upravljanje servo motorom, kojem se u API-ju za
komunikaciju određuje maksimalni kut, jer se tako dinamički određuje sam kut zakreta.
Nasuprot tome kod druge metode vraćene vrijednosti su tipa double s vrijednostima od -1 do
1, pa su pogodne za pedale vozila jer nepotisnute daju vrijednost 0, pritiskom pedale za gas
vrijednost raste prema 1, ali se istovremeno zbraja s pritiskom pedale kočnice. To za rezultat
ima situaciju ako su pritisnute obje pedale da je vraćena vrijednost 0 (-1 +1=0). Tako je
moguće dobiti efekt smanjenja brzine vozila kada operater uz pritisnutu papučicu gasa krene
stiskati papučicu kočnice.
6.2. Izrada dijela aplikacije koji prosljeđuje naredbe na Raspberry Pi
Za dio aplikacije koja prosljeđuje naredbe Pi-u korišten je vlastiti API odnosno
„jWebIOPi“. Kako je već navedeno izrada API-ja vođena je principom Arduino sintakse
pisanja koda. Postoji i službeni „Java“ API autora „WebIOPi“ servera, koji je napisan s
završni rad
28
verzijom servera 0.6 koji koristi oba načina komunikacije HTTP i CoaP, ali za ovaj rad
odabran je vlastiti API.
• Primjer definiranja GPIO priključnica
DefineGPIO kutSretanja = new DefineGPIO(spajanje, login, 18, "pwm") {
};
Ovo je primjer definiranja metode objašnjene u poglavlju 5.1., 2. primjer. Programer definira
novu instancu metode koristeći adresu i autorizaciju, određujući da će GPIO priključnica 18
imati funkciju PWM.
• Primjer postavljanja vrijednosti na priključnice
brzinaVozila.SetPWM(novaBrzina);
kutSretanja.SetServoAnglePercent(zakretVolana);
Dva primjera postavljanja vrijednosti na priključnice. Iako su obje varijable definirane
funkcijski kao PWM razlikuju se po načinu slanja signala na aktuatore, razlika je objašnjena u
poglavlju 2.1. iznad slika (Slika 7 i Slika 8).
6.3. Prilagodba serverske aplikacije koji upravlja vozilom
„Java“ aplikacija, kako je već navedeno, šalje POST naredbe koje server prosljeđuje
„Python“ skripti te ona komunicira s GPIO kontrolerom. Napravljena je „Python“ skripta koja
definira priključnice, njihove funkcije, makro naredbe te sigurnosni mehanizam ako dođe do
prekida komunikacije između aplikacije i vozila.
završni rad
29
6.3.1. Definiranje priključnica
Korišteno je pet priključnica, tri za upravljanje vožnjom dvije za promjenu pravca, 10
i 11 te jedna za promjenu brzine, 9), jedna za promjenu smjera kretanja vozila (18) te jedna za
provjeru veze klijenta i servera.
# Retrieve GPIO lib
GPIO = webiopi.GPIO
VOLAN = 18
BRZINA = 9
NAPRIJED = 10
NATRAG = 11
PROVJERA = 22
Start = 0;
6.3.2. Definiranje funkcija
Iako je skripta pisana u „Python“ programskom jeziku, kod je jako sličan Arduino
sintaksi jer je autor servera u komunikaciji s korisnicima zaključio da ih velika većina ima
iskustva u radu s njim. Nakon pozivanja funkcije GPIO.setFunction potrebno je unutar
zagrada napisati broj ili naziv priključnice ( ako je definirana kao u 1. primjeru ), te funkciju
iste.
# Called by WebIOPi at script loading
def setup():
webiopi.debug("Script with macros - Setup")
# Setup GPIOs
GPIO.setFunction(VOLAN, GPIO.PWM)
GPIO.setFunction(PROVJERA, GPIO.OUT)
završni rad
30
6.3.3. Makro naredbe
Uporabom makro naredbi umanjuje se količina komunikacije sa samim serverom i
programeru olakšava izradu klijentske aplikacije. Definirati izlazne vrijednosti je moguće na
dva načina, ili kao u primjeru iznad ili brojčano 0 – 1 gdje LOW predstavlja 0, a HIGH 1.
Alternativni način bi bio slanje dvije naredbe za postavljanje GPIO priključnica, koji
nije neispravan, ali se u tom slučaju radi o dva HTTP POST paketa prema serveru umjesto
jednog i sigurno se ne izvedu istom brzinom kao kada je to napravio sam server.
# Makro naredba za naprijed
@webiopi.macro
def Naprijed():
GPIO.digitalWrite(NAPRIJED, GPIO.HIGH)
GPIO.digitalWrite(NATRAG, GPIO.LOW)
6.3.4. Sigurnosni mehanizam
Slučajno pri jednom testu, aplikacija se srušila i vozilo je nastavilo nekontrolirano
voziti zbog toga što je ostalo u zadnjem primljenom stanju priključnica. Postoji više načina
sigurnosnih mehanizama, jedan od kojih je konstantno slati naredbu za pravac, ali tražen je
način kako bi se što više smanjio broj paketa koji se šalje. Na kraju je izabrana vremenska
provjera stanja posebne priključnice i stavljanja stanja motora u blokadu kod ne odgovarajuće
vrijednosti.
• Primjer klijentskog dijela „pinga“
void slanjePinga() {
Timeline javljanje = new Timeline(new KeyFrame(Duration.seconds(1), new
EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
ping.SetStateON(true);
}
završni rad
31
}));
javljanje.setCycleCount(Timeline.INDEFINITE);
javljanje.play();
}
U „JavaFX“ programskom jeziku postoji metoda Timeline u kojoj se vremenski
određuje trajanje radnje koja se poziva unutar njenog tijela. Tako je pojednostavljeno
korištenje vremenskog brojača kod radnji koje je potrebno izvršavati u pravilnim vremenskim
razmacima. U ovom slučaju vrijeme ciklusa je postavljeno na jednu sekundu, a vrijeme
ukupnog izvođenja na beskonačno, metoda ping postavlja vrijednost priključnice 22 na 1.
• Primjer serverskog dijela „pinga“
# Looped by WebIOPi
def loop():
# Provjera konekcije
global Start
Timer = time.time()
value = GPIO.digitalRead(PROVJERA)
if Timer - Start >= 2 and value == 0:
GPIO.digitalWrite(NAPRIJED, GPIO.HIGH)
GPIO.digitalWrite(NATRAG, GPIO.HIGH)
Start = Timer
elif Timer - Start >= 2 and value == 1:
GPIO.digitalWrite(PROVJERA, GPIO.LOW)
Start = Timer
Prikazana beskonačna petlja definirana s def loop(): obavlja provjeru, svake dvije sekunde,
stanja priključnice 22 i ako nije ispravna (vrijednost 1 ) blokira motor vozila, a ako je
postavlja stanje na 0. Ovim načinom provjere osigurani su slučajevi rušenja aplikacije ili bilo
kojeg drugog načina gubitka veze između vozila i aplikacije
završni rad
32
6.3.5. Registriranje skripte
„Python“.skripta.se.nalazi.na.Pi.računalu,.putanja.je
/home/pi/webiopi/examples/scripts/auto. Potrebno je nakon izrade korisničke skripte, web
stranicu kojom je upravljana i skriptu, spremiti u isti direktorij te naredbom sudo nano
/etc/webiopi/config registrirati putanju na kojoj se nalazi kako bi je server pokrenuo pri
startu te putanju gdje se nalazi korijenski direktorij servera i web stranice (Slika 17).
Slika 17: Config datoteka WebIOPi-a
Izvor: obrada autora
6.4. Izrada dijela aplikacije koji prima video prikaz s kamere
Na Raspberry Pi-u se nalazi „MJPEG –Streamer“ server koji upravlja web kamerom i
vrši video prijenos na lokalnom web serveru. Aplikacija se prvo spaja na Pi putem SSH (eng.
završni rad
33
Secure shell) konekcije, prijavi se u sustav i pokrene „Linux“ ljuska(shell) skriptu koristeći
„Ganymed SSH-2“ Java API(http://www.cleondris.ch/opensource/ssh2/).
sess = conn.openSession();
sess.execCommand("./server.sh &");
Naredba sess.execCommand("./server.sh &"); pokreće autorovu skriptu za pokretanje
servera koja se nalazi na putanji home/pi/ Pi računala.
sudo /etc/init.d/webiopi restart
cd mjpg-streamer/mjpg-streamer
./mjpg_streamer -i "./input_uvc.so -n -f 25 -r 160x120" -o "./output_http.so -p$
Parametre video prikaza je moguće mijenjati na Pi računalu, unutar skripte koristeći
nano server.sh naredbu. Preporučeni parametri za mijenjanje su isključivo brojevi iza –f ,
broj slika u sekundi i iza –r , rezolucija video prikaza. Trenutno korištena kamera može
isporučiti samo do 10 slika u sekundi bez obzira na parametar koji je zadan. Bitno je znati da
se zbog formata video prikaza drastično povećava količina podatkovnog prometa jer se radi o
nizu jpeg fotografija, a ne o pravom video formatu. Naredba za ponovno pokretanje
„WebIOPi“ servera je dodana iz predostrožnosti ako se isti ne bi pokrenuo pri samom paljenju
računala.
Server se ne pokreće automatski kod paljenja Pi računala, kako se isti ne bi mogao
zloupotrijebiti za video prikaz ako je automobil upaljen bez aplikacije jer je serveru moguće
pristupiti s bilo kojeg računala u istoj lokalnoj mreži koristeći internet preglednik. Nakon
gašenja aplikacije poziva se naredba sess.execCommand("sudo shutdown now"); koja gasi Pi
računalo, a time i kameru na njemu.
Klijentski dio prikaza videa je riješen putem webview metode JavaFX-a.
we = video.getEngine();
we.load("http://raspberrypi:8880/javascript_simple.html");
Metoda webview je u stvari jednostavan internet preglednik koji prikazuje odabrano web
sjedište, a koristi se u kombinaciji sa webengine metodom. Trenutni problem koji se javlja
kod prikaza videa je Javascript u web prikazu. Loše napisan engine webview metode uzrokuje
neispravan rad Java garbage collector alata. Njegov zadatak je oslobađati memoriju od
završni rad
34
instanci varijabli koje se više ne koriste, ali to ne čini pa se video prikaz zna prekinuti
odnosno dolazi do prepunjenosti memorije – heap greške. Oracle navodi na svojim stranicama
da je moguće koristi „Javascript“ u webview, čak i da je moguće koristiti metode „Javascript“
za mijenjanje i kontrolu drugih elemenata u „JavaFX“ grafičkom prikazu pa autoru ostaje
nepoznanica zbog čega dolazi do ovog problema. Istu metodu prikaza autor je isprobao u
„Java swing“ grafičkom prikazu i tamo ne dolazi do istog problema, ali zbog superiornosti
„JavaFX“ grafičkog prikaza nad swing-om, autor ostavlja ovaj problem kao zadatak koji treba
odraditi, bilo koristeći drugu web kameru i drugi format ili pričekati da zajednica napiše
alternativnu webview metodu koja će koristiti „Mozilla“ ili „Chrome“ engine za
prikaz.Isproban je i prikaz koristeći „vlcj“ API koji koristi „VLC“ player, ali dolazi do
kašnjenja u prikazu od 1 do 2 sekunde pa je ta metoda prikaza odbačena kao ne prihvatljiva.
završni rad
35
7. Opis rada cjelokupnog sustava i svih funkcionalnosti
Operater sjedi za računalom i igraćim volanom upravlja vozilom. Aplikacija prihvaća
informacije iz kontrolera putem USB sučelja, obrađuje ih i putem lokalne mreže HTTP POST
metodom prosljeđuje serveru koji se nalazi na Raspberry Pi računalu. Server bežično prima
informacije s klijentskog računala, obrađuje ih i putem GPIO priključnice vrši zadane radnje
na motorima vozila. U isto vrijeme, softver na Pi računalu, uz pomoć web kamere stvara
video zapis, obrađuje ga i prikazuje na lokalnom web serveru. Aplikacija za upravljanje
vozilom na klijentskom računalu spaja se na server i prikazuje sliku operateru. Vozilo ima
osnovne mogućnosti upravljanja: kretnje naprijed-natrag, mijenjanje brzine vožnje i skretanje
lijevo-desno.
Kako je već navedeno aplikativni dio rada pokušava na vjeran način pokazati
unutrašnjost vozila i donekle prikazati virtualnu realnost operateru kao da se nalazi unutar
vozila. Mogućnosti primjene su sama mašta operatera u trenutku upravljanja vozilom.
Moguće je vježbati vožnju vozila, s automatskim mjenjačem, bez straha od mogućih ozljeda
samog vozača ili vozila. Zatim je moguća primjena u terapijske svrhe osoba koje su imale
veliki stres uzrokovan prometnom nezgodom i sada ih je strah sjesti ponovno za volan vozila.
Proširenja mogućnosti vozila su isto ograničena samo maštom, financijama i
količinom slobodnog vremena za rad na vozilu. Trenutno je komunikacija upravljanja
jednosmjerna, od operatera prema vozilu i operater nema povratne informacije o stanju vozila
osim video prikaza iz samog vozila. Prvenstveno bi trebalo opremiti vozilo sustavom protiv
kolizije, zatim sustavom za praćenje stanja baterije kako bi operater znao koliko još može
upravljati istim. Potrebno je zamijeniti web kameru s nekom koja podržava drugi video
format kako bi se izbjeglo kašnjenje signala. Vrlo korisno bi bilo dodati senzor za mjerenje
broja okretaja kotača, a samim time i trenutne brzine vozila te akcelerometar na osovini koji
bi iskoristio force feedback mogućnosti pojedinih volana i tako dodatno povećao realnost
upravljanja. Sve navedeno nije problem dodavati zahvaljujući modularnosti samog sustava
upravljanja i komunikacije. Dodavanjem Arduina ili analogno-digitalnih pretvarača na
Raspberry Pi moguće je relativno jednostavno proširiti sadašnje mogućnosti vozila.
završni rad
36
8. ZAKLJUČAK
U okviru postavljenog zadatka izrađena je klijentska aplikacija u skladu s trendom
dizajna grafičkog sučelja i primjene proširene stvarnosti. U pravilu su aplikacije kopije
fizičkih daljinskih upravljača s dodatkom video prikaza, a proširena stvarnost omogućava
bolji iskustveni doživljaj korisnika. Korišteni način hardverske izvedbe nije se pokazao kao
potpuno uspješan jer, iako korišteni Raspberry Pi ima jako velik potencijal kod upravljanja
kućnom automatizacijom, pada na testu gdje je potrebno informaciju prenijeti u izuzetno
kratkom roku. Ostaje za istražiti da li je problem u načinu komunikacije klijenta i servera ili u
samom računalu. Pouzdanost računala još uvijek nije na istom nivou kao pouzdanost mikro
kontrolera zbog samog operacijskog sustava koji iako rasterećen do maksimuma pokazuje
svoje mane u samoj izvedbi zadanih operacija.
Rad može biti temelj za daljnja istraživanja na polju bežičnog upravljanja vozilima, a
zbog modularnosti izrade nudi visoki potencijal ponovne izvedbe koristeći drugi upravljački
kontroler. U nekim budućim istraživanjima, moglo bi se iskoristiti Raspberry Pi računalo kao
upravljački sklop višeg nivoa, za bežičnu komunikaciju i video prikaz, a mikro kontroler za
upravljački sklop niže razine koji će upravljati samim aktuatorima i može bitnim senzorima
vozila. Komunikaciju između klijenta i mikro kontrolera moglo bi se izvesti tako da Pi
dobivene informacije s klijenta samo proslijedi mikro kontroleru bez ikakve obrade bilo
serijskom vezom ili na neki drugi način. Potencijalno bolji rezultati bi bili postignuti pisanjem
serverske aplikacije koja ne koristi HTTP POST i GET metode, nego neki drugi
komunikacijski protokol ili da je napisan vlastiti protokol.
Ovaj rad zasnovan na proširenoj stvarnosti primjenjiv je u mnogobrojnim granama
ljudske djelatnosti, ali terapijske svrhe savladavanja straha od upravljanja vozilom nakon
prometne nezgode najrealnija su i ljudski gledano najkorisnija primjena.
završni rad
37
POPIS KRATICA
RC – Radio Control – radio upravljanje
GPIO – General Pin Input Output – osnovne ulazno-izlazne priključnice
HTML – HyperText Markup Language – programski jezik za web
XML – Extensible Markup Language – univerzalni programski jezik
API - Application programming interface – most između softverskih komponenti
BEC - battery eliminator circuit – strujni krug za uklanjanje baterije
ESC - electronic speed control – elektronska kontrola brzine
SSH - Secure Shell – internet protokol
HTTP - Hypertext Transfer Protocol - internet protokol
CoaP - Constrained Application Protocol – internet protokol
PWM - Pulse-width modulation – način pretvaranja digitalnog u analogni signal
LITERATURA 2
1. Downey A., Elkner J., Meyers C., How to Think Like a Computer Scientist - Learning
with Python, Green Tea Press, Wellesley, Massachusetts, 2008.
2. Membrey P., Hows D., Learn Raspberry Pi with Linux, Apress, 2013.
3. Weaver J.L., Gao W., Chin S., Pro JavaFX 2 A Definitive Guide to Rich Clients with
Java Technology, Apress, 2012
4. Richardson M., Wallace S., Getting Started with Raspberry Pi, O’Reilly Media,
Inc.,2013.
5. http://www.pfst.hr/~ivujovic/stare_stranice/pdf_zip_word/POGL8.pdf (7.4.2013.)
6. http://www.computerworld.com/slideshow/detail/74332 (7.4.2013.)
7. http://planb.tportal.hr/teme/64677/Daljinski-upravljac.html#.UWFJnTdj9So
(7.4.2013.)
8. http://www.hrvatski-vojnik.hr/hrvatski-vojnik/1002003/sustav.asp (7.4.2013.)
9. http://www.gadgeterija.net/2013/01/20/recenzija-raspberry-pi-komadic-pite-za-
svakoga/#.UV1yM6JA3lQ (7.4.2013.)
završni rad
38
10. http://www.raspberrypi.org/faqs (7.4.2013.)
POPIS SLIKA Slika 1: Jednostavni kontroler .................................................................................................... 6
Slika 2: Napredni kontroler ........................................................................................................ 6
Slika 3: Prikaz rada H-mosta ...................................................................................................... 7
Slika 4: Relejni H-most .............................................................................................................. 8
Slika 5: LM298 H-most .............................................................................................................. 8
Slika 6: Prikaz servo motora ....................................................................................................... 9
Slika 7: PWM 50% ................................................................................................................... 10
Slika 8: PWM 100% ................................................................................................................. 10
Slika 9: Shema ESC-a i BEC-a u radu ..................................................................................... 11
Slika 10: Raspberry PI .............................................................................................................. 12
Slika 11: Sučelje Raspberry PI ................................................................................................. 13
Slika 12: Raspored GPIO priključnica ..................................................................................... 14
Slika 13: WebIOPi arhitektura ................................................................................................. 18
Slika 14: Trust igrači volan ...................................................................................................... 23
Slika 15: Izrađena JavaFX aplikacija ....................................................................................... 24
Slika 16: Nativne biblioteke ..................................................................................................... 26
Slika 17: Config datoteka WebIOPi-a ...................................................................................... 32