integriranje virtualnih likova u sustav proširene stvarnosti

57
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 2950 Integriranje virtualnih likova u sustav proširene stvarnosti Vladimir Bošnjak Zagreb, lipanj 2008.

Upload: gcmarshall82

Post on 12-Jul-2016

237 views

Category:

Documents


5 download

DESCRIPTION

Diplomski rad sa Fakulteta elektrotehnike i racunarstva o prosirenoj stvarnosti

TRANSCRIPT

Page 1: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

DIPLOMSKI RAD br. 2950

Integriranje virtualnih likova u sustav proširene stvarnosti

Vladimir Bošnjak

Zagreb, lipanj 2008.

Page 2: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

Mentor rada: Prof. dr. sc. Igor S. Pandžić

Page 3: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

Sadržaj Uvod........................................................................................................................................... 1

1. Sustav za proširenu stvarnost ............................................................................................. 2

1.1. Proširena stvarnost ..................................................................................................... 2

1.1.1. Miješanje slike.................................................................................................... 2

1.1.2. Poravnavanje ...................................................................................................... 4

1.2. Video miješanje.......................................................................................................... 4

1.2.1. Stereoskopska slika ............................................................................................ 5

1.3. Optičko slijeđenje....................................................................................................... 7

1.3.1. Princip rada optičkog slijeđenja korišenjem alata ARToolkit ........................... 7

1.4. AR sustav u laboratoriju............................................................................................. 9

1.4.1. Zaslon montiran na glavu (HMD)...................................................................... 9

1.4.2. Kamere ............................................................................................................. 11

1.4.3. Montiranje kamera na HMD ............................................................................ 12

1.4.4. Razvojni alat ARToolkit .................................................................................. 14

1.4.5. OpenGL............................................................................................................ 18

1.4.6. Razvoj aplikacije .............................................................................................. 19

2. Uvođenje virtualnih ljudi ................................................................................................. 25

2.1. Virtualni ljudi ........................................................................................................... 25

2.2. Visage|SDK.............................................................................................................. 26

2.3. OpenGL.................................................................................................................... 27

2.4. Realizacija ................................................................................................................ 29

2.4.1. OpenGL............................................................................................................ 29

2.4.2. Visage|SDK...................................................................................................... 30

2.4.3. Razvoj aplikacije .............................................................................................. 34

3. Proširenje sustava s više markera..................................................................................... 38

Page 4: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

3.1. Korišetnje više markera............................................................................................ 38

3.2. Koplanarni markeri .................................................................................................. 39

3.3. Proširivanje koordinatnog sustava ........................................................................... 40

3.4. Realizacija ................................................................................................................ 41

Zaključak.................................................................................................................................. 45

Literatura .................................................................................................................................. 46

Skraćenice ................................................................................................................................ 47

Popis stranih izraza................................................................................................................... 48

Dodatak .................................................................................................................................... 50

Page 5: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

1

Uvod

Proširena stvarnost (engl. Augmented Reality,skraćeno AR) je okruženje koje u sebi sadrži

virtualne elemente i elemente iz stvarnog svijeta. Da bi si to bolje predočili, zamislimo da

korisnik uz pomoć posebnih naočala može vidjeti stvarni prostor oko sebe, ali i računarski

generirane slike projicirane na taj prostor. Tri glavne značajke takvog okruženja su: spajanje

stvarnog i virtualnog, interaktivnost u stvarnom vremenu i percepcija tri dimenzije (Azuma,

[1997]).

Zbog nedovoljne razvijenosti tehnologije, proširena stvatnost je dugo vremena bila

zapostavljana. Naime, proširena stvarnost treba puno precizniju opremu od virtualne

stvarnosti. Čak i kod najjednostavnijih primjena uređaji koji se koriste kod virtualne

stvarnosti nisu bili dostatni. Sada, kada su računalna grafika i snaga procesiranja postigli

veliki napredak, polako i oprezno se razvijaju sustavi proširene stvarnosti. Uređaji visoke

preciznosti i kvalitete su postali pristupačni cijenom tako da su se počeli pojavljivati

entuzijasti koji daju svoj doprinos tom području. Takav je i ovaj sustav, koji omogućava

prikaz i animaciju virtualnih ljudi kakav je prije bio nevjerojatan.

Savršena proširena stvarnost je toliko vjerodostojna, da korisnik ne može raspoznati koji

dijelovi okoline jesu, a koji nisu stvarni. Takva razina realističnosti još nije postignuta.

Unatoč tome, takvi sustavi već imaju veliki broj primjena. Na (Sl. 0.1 Primjeri korišetnja

proširene stvarnosti. Svi su još u visoko eksperimentalnoj fazi) vidimo nekoliko primjera

korištenja proširene stvarnosti, za sada još uvijek u nekomercijalne svrhe.

Sl. 0.1 Primjeri korišetnja proširene stvarnosti. Svi su još u visoko eksperimentalnoj fazi

Page 6: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

2

1. Sustav za proširenu stvarnost

1.1. Proširena stvarnost

Proširena stvarnost je dakle miješanje elemenata stvarnog i virtualnog svijeta. Cilj joj je da

korisniku pruži što jednostavniji i intuitivan prikaz virtualnih podataka u interakciji sa

stvarnim. Tri osnovna problema kod AR su: miješanje slike, poravnavanje i prikupljanje

podataka. Za njihovo rješavanje potrebna je zahtjevna tehnologija koja je danas dostupna.

Miješanje slike (engl. mixing) je prikazivanje stvarne i virtualne slike korisniku. Stvarna i

virtualna slika se prikazuju istovremeno na nekom tipu zaslona.

Poravnavanje (engl. registration) je postupak kojim dobivamo da se virtualni predmeti u

prostoru točno poravnavaju sa stvarnima. Da bi došlo do preklapanja virtualnih i stvarnih

predmeta potrebno je znati točno položaj i orijentaciju korisnika i svih bitnih elemenata scene.

Slijeđenje (engl. tracking) je skup tehnika kojima se doznaje pozicija i orijentacija korisnika i

stvarnih elemenata. Potrebna je pri poravnavanju virtualnih predmeta i pravilnom iscrtavanju

scene.

1.1.1. Miješanje slike

Glavni ulazni i izlazni uređaji AR sustava su vizualni. Zasnivaju na principu miješanja

virtualne i stvarne slike. Tako razlikujemo optičko, video i projekciono mješanje. Prilikom

optičkog i video miješanja korisnik na glavi nosi zaslon za glavu (engl. Head Mount Display,

kratica HMD). Optičko miješanje koristi polu prozirna ogledala ispred korisnika, po jedno za

svako oko, na koja se projicira slika s monitora, tzv. Optičku miješalicu (engl. Optical

combiner). Kod video miješanja se ne koristi optička miješalica, već se koriste kamere koje

snimaju stvarni svijet, a slika se miješa u računalu i šalje korisniku u svako oko na HMD. Oba

postupka imaju mane i karakteristike, koje se odnose na složenost, osvjetljenje,

vjerodostojnost itd. (Pandžić [2004]).

Page 7: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

3

Tablica 1.1

OPTIČKO MIJEŠANJE VIDEO MIJEŠANJE

SLOŽENOST Jednostavnije Složenije

VIDLJIVOST STVARNE OKOLINE Izravna, malo zatamnjena Smanjena rezolucija i vidni

kut

SIGURNOST OK, stvarna okolina izravno i uvijek vidljiva

Pomak položaja, nema slike u slučaju kvara

MIJEŠANJE STVARNOG I VIRTULANOG

Virtualni predmeti ne mogu potpuno prekriti stvarne Potpuna fleksibilnost

VREMENSKO USKLAĐIVANJE Virtualna slika kasni Moguće usklađivanje

zadrškom stvarne slike

USKLAĐIVANJE SVJETLINE

Nije moguće Moguće

MOGUĆA ANALIZA SLIKE

Ne (ponekad se za to montiraju kamere) Da

Kod projekcionih tipova koriste se posebno konstruirani zasloni ili projektori. Primjer jednog

takvog uređaja sa smanjenom mogučnošću interakcije je Microsoft Surface (Sl. 1.1 Microsoft

Surface).

Sl. 1.1 Microsoft Surface

Page 8: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

4

1.1.2. Poravnavanje

Poravnavanju virtualnih i stvarnih predmeta potrebno je posvetiti veliku pažnju. Čovjek može

otkriti virtualne predmete ako se pojave i male nepravilnosti . Da bi se postiglo poravnavanje

virtualna scena se konstruira s koordinatnim sustavom koji odgovara koordinatnom sustavu

stvarnog svijeta. To omogućava da se položaji stvarnih predmeta prebacuju u virtualnu scenu

i omogućuju da se virtualni predmeti postave u odnosu na njih. Za to je potreban položaj svih

stvarnih predmeta u sceni, položaj kamere (oka promatrača) u stvarnom svijetu i položaj

promatrača i drugih elemenata u virtualnom svijetu. Na taj način možemo računalno simulirati

interakciju stvarnih i virtualnih likova i dobivamo da se slike stvarne i virtualne scene točno

poklapaju.

Pri poravnavanju je potrebna velika preciznost, jer ljudsko oko detektira pomake manje od

jedne kutne minute. Stoga će i najmanja nepreciznost biti primijećena (Pandžić [2004]).

Podaci koji su potrebni za poravnavanje u AR sustavima doivaju se slijeđenjem. Slijeđenje

(engl. tracking) je postupak dobivanja položaja i orijentacije predmeta i promatrača u

stvarnom vremenu. Slijeđenje u AR sustavima rješava se na više načina. Izvedbe sustava za

slijeđenje u AR se temelje na sustavima prvobitno izvedenima za virtualnu stvarnost (engl.

Virtual Reality, kratica VR), no kod njih su manji zahtjevi za preciznost. Zbog toga postoje

različite varijante slijeđenja kod AR sustava dijelom preuzetih iz sustava za virtualnu

stvarnost, adaptiranih za AR. Neki od njih su magnetsko, ultrazvučno i mehaničko, optičko,

GPS te hibridno slijeđenje.

1.2. Video miješanje

Korisnik kod principa video miješanja koristi klasični, zatvoreni uređaj za prikaz nošen na

glavi (HMD). Slika stvarnog svijeta dolazi iz para kamera nošenih na glavi, a virtualna slika

se generira na računalu. Korisnik vidi sliku sa zaslona koja dolazi obrađena iz računala u

kojoj je pomiješana stvarna i virtualna slika. Kako su HMD i kamere spojene na računalo

kabelom, korisniku je smanjena pokretljivost. Računalo na temelju položaja izračunatog od

položaja slijednika (vizualnog, elektromagnetskog, akustičnog i sl.) generira sliku iz

odgovarajuće perspektive. Virtualna i stvarna slika kombiniraju se u video miješalici (engl.

video compositor), te tako pomiješanu sliku korisnik vidi preko para stereo zaslona. Video

Page 9: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

5

mješalica je redovito računalo koje ima potrebnu snagu za obradu podataka koji su potrebni

za prikaz. Važno je primijetiti da u video miješalici i stvarna i virtualna slika mogu stići u

digitalnom obliku, te postoji potpuna sloboda obrade signala, što se može iskoristiti za razne

efekte. Dijagram rada video mješanja možemo vidjeti na (Sl. 1.2). Na primjer, u stvarnu video

sliku može se unijeti kašnjenje i time je sinkronizirati s virtualnom slikom (kod koje se

kašnjenje ne može izbjeći iz tehničkih razloga). Važan efekt koji se može dobiti je i potpuno

prekrivanje stvarnih predmeta virtualnima. Najbitniji dio za ovaj rad je što se stvarnu sliku

obradom i analizom može korisno upotrijebiti pri slijeđenju položaja. Ove funkcije

nedostupne su kod optičkog miješanja, te je to bio jedan od presudnih razloga za konstuiranje

modela proširene stvarnosti sa video miješanjem (Ozan Cakmakci [2006]).

Sl. 1.2 Dijagram metode video miješanja u AR

Nedostatak ovog principa mješanja je to što u slučaju kvara ili isključivanja sustava korisnik

gubi sliku stvarnog svijeta oko sebe, što može biti sigurnosni problem. Korisnik koji tako

naglo izgubi vid mogao bi se ozlijediti udarivši u neki predmet. Drugi nedostatak je to što je

fizički nemoguće postaviti kamere na točno isto mjesto gdje su i korisnikove oči, što znači da

korisnik vidi svijet iz drugačije perspektive nego što je navikao. Sve je pomaknuto, što može

biti i sigurnosni i praktičan problem (Pandžić [2004]).

1.2.1. Stereoskopska slika

Za što vjerniji prikaz slike u AR sustavu potrebna nam je i stereoskopska slika. Stereoskopska

slika je jedno od najvažnijih svojstava ljudskog oka. Ona nam omogućava trodimenzionalni

doživljaj prostora.

Page 10: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

6

Sl. 1.3 Stereoskopski pogled

Na (Sl. 1.3) je jednostavni prikaz stereoskopskog vida. S lijeve strane su oči (očne jabučice -

pupile), koje su razmaknute za očnu distancu (engl. Interpupilary distance, IPD). Desno je

jednostavan prikaz dva trodimenzionalna objekta (valjci). Zbog razmaka među očima predmet

promatramo s dvije različite točke, što nam daje informaciju o relativnom razmaku među 3D

objektima i njihovoj udaljenosti. Nakon što dobijemo dvije slike, po jedno za svako oko, te

dvije slike mozak procesira i spaja u jednu, koja nam daje trodimenzionalan prikaz prostora.

Za dobivanje stereoskopske slike koriste se dvije vrste HMD-a s kamerama. Jedan je

biokularni (engl. biocular), a drugi binokularni (engl. binocular). U biokularnom sustavu se

prikazuje potpuno ista slika u oba ekrana pred očima. Takav način ne prikazuje pravu

stereoskopsku sliku, jer u stvarnosti su slike svakog oka pomaknute. Kod binokularnog,

prikazuju se dvije različite slike, a cilj je imitirati distancu među očima i različit kut gledanja

dva oka. AR sustav konstruiran za ovaj rad je binokularan, tj. postoje dvije razmaknute

kamere (Ozan Cakmakci [2006], Wikipedia [2008]).

Kod VST-HMD-a koriste se dvije vrste stereoskopskih slika. Prvo je stereoskopska slika

stvarnog svijeta, dobivena pomoću dvije kamere, a druga stereoskopska slika virtualnih

predmeta u sceni. Nakon što su dobivene stereoskopske slike virtualnog i stvarnog, te dvije

slike se miješaju i prikazuju na ekranima HMD-a. Lijeva kamera (engl. left camera) snima

sliku koju vidi lijevo oko, a desna kamera (engl. right camera) sliku koju vidi desno oko.

Nakon što se slika dobivena kamerama obradi sliku sa lijeve kamere se šalje u lijevi ekran, a

sa desne u desni ekran HMD-a. Pri tome se uzima dio slike ovisno o vidnom polju (FOV) i

željenom pogledu (uvećana ili umanjena slika) kako je prikazano na (Sl. 1.4)

Page 11: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

7

Sl. 1.4 Slike dobivene kamerama za lijevo i desno oko. Unutar osvjetljenog bijelog kvadrata je vidno

polje svakog oka

Za što bolji prikaz proširene stvarnosti VST-HMD mora što vjerodostojnije imitirati ljudski

vid, tj. treba se postići stereoskopska slika što sličnija prirodnom čovjekovom vidu.

Video miješanje je nešto složenije po konceptu, ali današnji sustavi koji su temeljeni na video

miješanju su postali puno precizniji i kvalitetniji, a dobivena slika je vjerodostojnija nego kod

optičkog miješanja. Zaslon za glavu temeljen na video miješanju (engl. Video see trough

HMD, kratica VST-HMD) je izveden na zavodu. Na fakultetu se već prije za projekte i

diplomske radove koristio Visette 2 HMD (Stereo3d [2008]). Nakon razmatranja preporuka i

proučavanja specifikacija, nabavljene su i dvije usb 2.0 kamere visoke rezolucije pogodne za

ovakav sustav (Logitech Qickcam for Notebooks PRO) (TechGage [2008], Everything USB

[2008]).

1.3. Optičko slijeđenje

Optičko slijeđenje radi na principu detektiranja posebnih markera u slici koje računalo prima

iz stvarnog svijeta. Markeri mogu biti različitih oblika i boja, mogu čak biti i nevidljivi oku -

infra-crveni (u tom slučaju se koriste posebne kamere za njihovu detekciju). Slika koja se

dobije iz kamere se u računalu obrađuje i pretražuje za markere. Pomoću dobivene pozicije

markera, računalo dobija podatke o stvarnom svijetu, npr. lokaciji predmeta, promatrača i sl.

1.3.1. Princip rada optičkog slijeđenja korišenjem alata ARToolkit

Za objašnjenje rada sustava optičkog slijeđenja najbolje je opisati takav jedan sustav. Za rad

sa ARToolkit-om potrebni su kamera, marker i kvalitetno računalo s dobrom grafičkom

karticom. Markeri koji se postavljaju u prostor su ispisane slike kvadrata unutar kojeg je

Page 12: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

8

ucrtan neki znak za raspoznavanje. (HIT laboratories [2008]). Primjeri takvih markera su na

(Sl. 1.5).

Sl. 1.5 Primjeri raznih markera

Proces rada aplikacije koja koristi napredne funkcije alata ARToolkit je slijedeći:

1. U početku kameru hvata sliku prostora i šalje sliku računalu kao struju bitova (engl. video

stream from camera).

2. Program na računalu pretražuje svaku primljenu sliku iz video stream-a za crni okvir koji

označava marker (engl. search for markers)

3. Program računa 3D poziciju i orijentaciju markera u odnosu na kameru i sprema je u

transformacijsku matricu (engl. find marker 3D position and orientation).

4. Program identificira marker tako da gleda simbol unutar crnog okvira, uspoređujući ga sa

predlošcima spremljenim u memoriji (engl. Identify markers)

5. Koristeći transformacijsku matricu za podudaranje 3D virtualnog objekta sa markerom

virtualni lik se pozicionira na marker (engl. position and orient objects)

6. Model se iscrtava iznad slike stvarnog svijeta uhvaćene kamerom, tako da se čini

zalijepljen za marker (engl. render 3D object in video frame)

7. Na kraju program šalje sliku sa virtualnim 3D modelom na ekran korisnika (engl. video

stream to the users HMD)

Proces koji obavlja program se može lakše shvatiti iz dijagrama na (Sl. 1.6).

Page 13: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

9

Sl. 1.6 Osnovni princip rada programa koji koriste ARToolkit

Prilikom izrade AR sustava odabrano je optičko slijeđenje kao najbolje rješenje. Po cijeni je

ono najpovoljnije – potreban je samo marker, računalo obavlja ostatak posla. Danas se većina

eksperimentalnih sustava za bazira na takvom slijeđenju, ne samo zbog cijene, već i zbog

visoke preciznosti koja se postiže. Rezultat toga je uz bolje poravnavanje slike i veća

kompatibilnost sa sličnim sustavima u upotrebi.

Razmatrana je i buduća nadogradnja sustava. Ako se markeri fiksiraju na unaprijed određene

pozicije, koordinatni sustav se može proširiti da pokriva cijelu prostoriju. Za to je potrebna

povećana preciznost markera. Preciznost se može povećati (smatra se da je kalibracija

optimalno provedena) povećanjem samih markera, stavljanjem sustava markera i sl.

Jednostavnija verzija dobivanja pozicije pomoću više markera je implementirana. Razne

mogućnosti se mogu zamisliti i nadograditi na taj sustav.

Sa proširenim koordinatnim sustavom dobila bi se mogućnost poravnavanja u kojemu se

stvarne i virtualne scene točno poklapaju. U takvom sustavu mogu se modelirati svi predmeti

koji se nalaze u prostoriji i napraviti njihovo preklapanje sa stvarnima. To omogućuje bolji

prikaz proširene stvarnosti, jer tada virtualni likovi mogu biti u potpunoj interakciji sa

stvarnim predmetima u sceni.

Page 14: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

10

1.4. AR sustav u laboratoriju

1.4.1. Zaslon montiran na glavu (HMD)

Zaslon montirani na glavu (engl. head mounted display, kratica HMD) je vizualna izlazna

jedinica, koja ima poseban zaslon ispred svakog oka. Često se koristi pri simuliranju virtualne

stvarnosti.

Najvažnija svojstva HMD-a su veličina, težina, udobnost, vidni kut, tj. vidno polje (engl.

Field Of View, FOV) i rezolucija. Vidni kut se može proširiti upotrebom odgovarajuće optike

tako da se rezolucija ne promjeni. U tom slučaju postoji problem jer se ista rezolucija, tj. isti

broj točaka, rasteže na veći prostor. Jedna točka se povećava i nastaje veća zrnatost sa

grubljom slikom.

Cilj prilikom odabira HMD-a je da bude što manji, lakši, udobniji HMD s podesivim vidnim

kutom i velikom rezolucijom. Ti kriteriji su bitni prilikom odabira HMD za bilo koju

namjenu, ali su kod ove još posebno istaknuti.

Kod većine HMD-a postoji problem sa dugotrajnim korištenjem. Kod normalnog vida oči se

po potrebi fokusiraju na predmete različite udaljenosti. Kod korišenja HMD-a fokusiraju se

uvijek na istu udaljenost (udaljenost zaslona) neovisno o tome koliko mi percipiramo da je

predmet udaljen. Zasloni su veoma blizu očiju i kod dugotrajnog korišenja oči su fokusirane

na malu udaljenost. Zbog toga dolazi do glavobolje nakon dužeg neprekidnog korištenja. Zato

se rade pauze u korištenju.

Na fakultetu se koristi Visette2 HMD, tvrtke Visette prikazan na (Sl. 1.7). Visette2 je HMD

sa visokom rezolucijom 640x480 (VGA) i sa velikim vidnim kutom (FOV) od 60 stupnjeva.

Visette Pro ima 920000 piksela po zaslonu (engl. pixel per display), podesivi razmak između

očiju 60-70 mm, 2 nezavisna kanala za koja ne treba sinkronizacija (stereo), VGA, Composite

NTSC ili PAL ulaze, ima težinu 840 g. (Stereo3d [2008]).

Page 15: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

11

Sl. 1.7 Visette 2 zaslon za montiranje na glavu

Visette2 (Sl. 1.7) je veoma udoban za nošenje na glavi i ima ugrađene slušalice. Testiranja su

pokazala da nema nuspojava ako se Visette2 koristi 20 minuta bez prekida. Proizvođač je

zbog sigurnosti postavio preventivnu zaštitu od nuspojava, koja omogućuje da se HMD sam

isključi nakon dvadeset minuta. Za nastavak rada treba isključiti napajanje i ponovo ga

uključiti.

Sl. 1.8 Adapter za Visette2

Visette2 se na računalo spaja pomoću posebnog adaptera, koji se vidi na (Sl. 1.8). Dva

modificirana SCART kabla priključuju se na adapter. Adapter uz korištenje Visette2

omogućava i korištenje magnetskih slijednika od čijeg se korišenja za sada odustalo zbog

veće pouzdanosti video slijednika. Adapter se spaja na računalo preko 2 vga video ulaza (Sl.

1.9). Zvučni ulaz adaptera se spaja na stereo izlaz zvučne jedinice računala.

Page 16: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

12

Sl. 1.9 Spajanje Visette 2 adaptera na izlaze iz grafičke kartice računala

1.4.2. Kamere

Za izgradnju AR sustava potrebne su dvije kamere za simulaciju stereoskopske slike. Kamere

koje se koriste za izgradnju AR sustava moraju imati nekoliko osnovnih osobina. To su male

dimenzije i težina kamere, velika brzina osvježavanja (FPS) i vidni kut kamere (FOV).

Male i lagane kamere su potrebne kako i što manje ograničavale pokretljivost korisnika i

olakšale montiranje. Brzina osvježavanja bi trebala biti minimalno 15 fps, koliko je potrebno

da se zavara ljudsko oko. Vidni kut kamere treba biti što veći - približno jednak vidnom kutu

očiju.

Razvojem kamera za kompjutore, posebno usb kamera, čija je inicijalna svrha bila

komercijalne prirode (video chat, video over IP itd.) postignut je veliki korak i za AR sustave.

Takve kamere danas imaju veliki i podesivi kut gledanja, male su i lagane, a brzina

osvježavanja im je preko 30 fps. Dobre performanse i mogućnost spajanja sa sada već gotovo

opće prihvaćenim usb portom je uvelike olakšalo izgradnju AR sustava.

U svrhu izgradnje VST-HMD sustava koriste se Logitechove QuickCam For Notebooks Pro

kamere koje se vide na (Sl. 1.10).

Sl. 1.10 Logitech QuickCam For Notebook Pro

Page 17: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

13

Na slici lijevo vidimo kako izgleda kamera, a na slici desno je njen prikaz pokraj mobitela i

usb memory sticka. Kamere se vrlo praktične, lagane i malene. Spajaju se na računalo USB

2.0 portom, kakvog ima većina stolnih računala i notebooka. Svaka kamera ima mogućnost

snimanja video u rezoluciji do 640x480 piksela, a statičku sliku fotografira do rezolucije

1280x960 piksela. Rezolucija senzora je 1.3 megapixela, a brzina osvježavanja prilikom

snimanja videa je i do 30 fps-a. Driveri kamere dolaze sa Logitech RightLight tehnologijom

koja omogućava kvalitetno snimanje u različitim svjetlosnim uvjetima (TechGage [2008],

Everything USB [2008]).

1.4.3. Montiranje kamera na HMD

Napravljeni VST-HMD rješava problem razmaka očiju, stereoskopsku sliku i paralaksu, no ne

rješava problem razmaka oka i kamere kao ni kompleksnije probleme kao što su pomicanje

očiju ili konvergencija.

Prvo je bilo potrebno odrediti gdje će stajati kamere s obzirom na njihovu veličinu. Pri izboru

kamera pažnja je posvećena da mogu biti montirane s prednje strane HMD-a. Postolje treba

biti napravljeno od laganog ali izdržljivog materijala, koji se lagano oblikuje i dostupan je.

Kao materijal za montiranje kamera primjenjen je tvrdi stiropor zbog svojih povoljnih

karakteristika (težina, laka obrada, lako montiranje, cijena). Takav stiropor bilo je potrebno

oblikovati tako da s jedne strane mogu biti fiksne kamere, a s druge, da slijedi oblik HMD i ne

narušava njegov rad (ne blokira otvore za hlađenje) i da se može jednostavno montirati na

njega. Konačan izgled HMD-a sa montiranim kamerama može se vidjeti na (Sl. 1.11) (Sl.

1.12) (Sl. 1.13).

Sl. 1.11 Bočni prikaz VST-HMD-a

Page 18: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

14

Sl. 1.12 Osnovni dijelovi VST-HMD-a (pogled odozgo)

Sl. 1.13 Frontalni pogled na VST-HMD

Kamere imaju vrlo kratke USB kablove, a glavni kabel HMD-a je dugačak oko dva metra. Da

bi mogle biti funkcionalno montirane na HMD, kamere je bilo nužno produžiti spojiti sa dva

produžna USB kabla dužine dva metra. Ti kablovi su zatim spojeni sa glavnim kablom HMD-

a tako da tvore cjelinu zbog funkcionalnosti.

Page 19: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

15

1.4.4. Razvojni alat ARToolkit

ARToolkit je software library za programske jezike C i C++. Ona omogućava korisniku da

lakše razvija AR aplikacije.Jedan od najtežih djelova u razvoju AR programa je precizno

izračunavanje točke promatrača u realnom vremenu. To je potrebno da bi se virtualni objekti

mogli što preciznije poravnati sa objektima u stvarnom svijetu. ARToolkit upotrebljava

metode računalne slike kako bi izračunao poziciju i orijentaciju stvarne kamere u odnosu sa

markerom, omogučujući programeru da pozicionira virtualne objekte (HIT laboratories

[2008]).

ARToolKit je softverski alat koji se sastoji od više dijelova (engl. ToolKit). Sastoji se od

predefiniranih funkcija koje se pozivaju prilikom konstruiranja AR programa. ARToolKit

koristi OpenGL za renderiranje (engl. rendering). (Sl. 1.14) prikazuje arhitekturu ARToolKit-

a (engl. Framework) i njegovu hijerarhijsku poziciju.

Sl. 1.14 Arhitektura ARToolKita

ARToolKit library se sastoji od četiri modula:

1. AR modul – jezgra modula koja sadrži rutine za slijeđenje i prepoznavanje markera,

kalibraciju i skupljanje parametara

2. Video modul – kolekcija rutina za hvatanje ulaznih slika (engl. input frames) iz videa.

Ovaj modul je ovojnica oko standardnog SDK modula za hvatanje videa (engl. SDK

video capturing routines).

3. Gsub modul – grafičke rutine bazirane na OpenGL i GLUT library-ima

4. Gsub Lite modul – zamjenjuje Gsub modul sa kvalitetnijim kolekcijama grafičkih rutina

Page 20: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

16

U radu se isključivo koristi Gsub Lite modul. On daje bolje performanse i potreban je za rad

sa više kamera. Hijerarhija ARToolki modula može se bolje shvatitit iz (Sl. 1.15). Ispod je

dan i prikaz protočne strukture koji se koristi u programu (Sl. 1.16)

Moduli poštuju globalnu protočnu strukturu (video->slijeđenje->prikaz) tako da korisnik

može bilo koji od modula zamijeniti s nekim drugim po svojoj želji (npr. Gsub rendering s

Open Inventor renderingom).

Sl. 1.15 Hijerarhija ARToolKit-a sa Gsub_Lite modulom

Sl. 1.16 Protočna struktura ARToolkita

ARToolKit-ov algoritam za prepoznavanje markera se temelji na prepoznavanju rubova

markera sa algoritmom za brzo izračunavanje pozicije markera u prostoru. Za bolje

razumijevanje je cijeli proces detekcije prikazan slikom (Sl. 1.17).

Page 21: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

17

a: Originalna slika b: Tresholded image c: Spojene komponente

d: Konture e: Ekstrahirani kutovi f: Komponirani rubovi

i rubovi markera kocke Sl. 1.17 Sažetak rada ARToolkit algoritma u slikama

Taj algoritam je implementiran u ARToolkit software library (library je u ovom smislu skup

subrutina koji pomaže prilikom razvoja novih programa) te ga nije potrebno dodatno

mijenjati. Dijagram toka algoritma je na (Sl. 1.18).

Page 22: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

18

Sl. 1.18 Dijagram toka algoritma za prepoznavanje markera

ARToolKit definira različite koordinatne sustave za algoritme računalnog vida i iscrtavanje

(engl. rendering). ArToolKit nam daje poziciju markera u koordinatnom sustavu kamere i

koristi matrični sustav OpenGL-a za pozicioniranje virtualnog objekta.

Kod prepoznavanja markera funkcije ARToolkita vraćaju koordinate markera u koordinatnom

sustavu kamere. Za poziciju kamere u koordinatnom sustavu markera, mora se napraviti

inverznu matricu. Vezu koordinatnog sustava kamere i markera se vidi na (Sl. 1.19).

Page 23: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

19

Sl. 1.19 Koordinatni sustav kompjuterskog vida

Koordinatni sustav markera pri tom je isti kao i koordinatni sustav OpenGL-a.

1.4.5. OpenGL

OpenGL (skraćeno od Open Graphics Library) je aplikacijsko programsko sučelje (engl.

application programming interface, skarćeno API) prema grafičkom sklopovlju. OpenGL radi

sa primitivnim oblicima (engl. primitives) kao što su točka, crta, poligon, bitmap i slika, a

sastoji od funkcija koje služe za crtanje i kontrolu stanja. Sustav radi pomoću stanja. O

trenutnom stanju ovisi trenutni način rada. Stanje ovisi o parametrima koji ga opisuju (npr.

boja, matrica projekcije i sl.). Način rada se mijenja tako da se promijeni stanje u neko novo

pomoću odgovarajućih funkcija (OpenGL [2008]).

Sve OpenGL funkcije koriste istu konvenciju. Imaju prefiks gl i sufiks koji se mijenja, a

predstavlja ime funkcije i tip argumenta. OpenGL pruža pristup svim funkcijama grafičkog

protočnog sustava, kao što su:

• iscrtavanje poligona, crta i točaka,

• osnovni model kamere,

• transformacije koordinatnog sustava,

• materijali,

• svjetla,

• model osvjetljenja,

• gouraud ili plošno sjenčanje,

Page 24: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

20

• spremnici i operacije sa spremnicima,

• dvostruki spremnik boje i alpha,

• z-spremnik,

• akumulacijski spremnik,

• spremnik predloška,

• teksturiranje,

• odabir i sl.

Također postoji i univerzalno sučelje GLUT (OpenGL Utility Toolkit) koje ima standardni

način koji omogućuje sve sistemski specifične radnje kao što su kreiranje prozora, uzimanje

podataka sa ulaznih jedinica i sl. Na taj način se može jednostavno prijeći sa jednog sustava

na drugi tako da se samo pronađe GLUT za drugi sustav.

Kod OpenGL-a postoje tri načina iscrtvanja objekata. Prvi način je da se grafičkoj kartici prije

svakog iscrtavanja šalje jedan po jedan verteks (engl. immediate mode), drugi je da se šalje

polje verteksa prije svakog iscrtavanja (engl. vertex arrays), a treći način je da se verteksi

jednom pošalju grafičkoj kartici i onda ostanu pohranjeni na njoj (engl. vertex buffer objects)

(Richard S. Wright Jr [2004], OpenGL [2008]). Prilikom programske realizacije AR sustava

korištena je treća metoda. Koristi se GLUT za operativni sustav MS Windows.

1.4.6. Razvoj aplikacije

Za razvoj programa za AR sustav korišten je MS Visual Studio 2005 i programski jezik C++.

On je odabran zbog kompatibilnosti sa svim komponentama sustava i alata koji su potrebni za

njegov razvoj.

Aplikacija koja se razvija korištenjem alata ARToolKit sasoji se od stvaranja same aplikacije i

podešavanja i isprobavanja njenih rutina sa markerima.

Glavnom kodu aplikacije sadrži korake prikazane na (Tablica 1.2).

Page 25: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

21

Tablica 1.2 Koraci razvoja aplikacije

Inicijalizacija 1. Inicijaliziraj hvatanje struje videa i učitaj parametre i uzorke markera i kamere.

2. Hvataj ulaznu struju videa.

3. Detektiraj markere i prepoznaj uzorke na markerima u ulaznoj struji markera.

4. Izračunaj transformacije kamere relativno na detektirane uzorke markera.

Glavna petlja

5. Iscrtaj virtualne objekte nad detektiranim uzorcima markera.

Ugasi 6. Zatvori hvatanje struje videa.

Koraci od 2 do 5 iz tablice se ponavljaju sve dok se aplikacija ne završi, dok se koraci 1 i 6

vrše samo prilikom inicijalizacije i završavanja aplikacije.

Prvi korak aplikacije je inicijalizacija kamera i uzorka markera.

Parametri kamere dobiveni kalibracijom učitavaju iz datoteke camera_para.dat. Osnovni

podaci o video konfiguraciji su pohranjeni u XML datotekama zapisanih po DsVideoLib.xsd

shemi priloženoj u ARToolkit razvojnoj okolini.

Otvaraju se dva video stream-a tako da je funkciju ar2VideoOpen() potrebno pozvati za

svaku kameru. Preko podatka cameraCount prenosi se broj kamera u upotrebi. Inicijalni

podaci kamera spremljeni su u listu objekata tipa CONTEXT_INFO.

Definicija tipa CONEXT_INFO:

typedef struct { // API-specific index into an array of display contexts. int apiContextIndex; // Camera parameter. ARParam ARTCparam; // Video parameters AR2VideoParamT *ARTVideo; // Most recent image. ARUint8 *ARTImage; // Threshold for marker detection. int ARTThreshhold; // Frames received. long callCountMarkerDetect; // Marker transformation. double patt_trans[3][4]; // Whether marker transformation is valid. int patt_found; // Settings from ARGL. ARGL_CONTEXT_SETTINGS_REF arglSettings; } CONTEXT_INFO;

Page 26: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

22

Inicijalizacija kamera:

static int setupCameras(const int cameraCount, const char *cparam_names[], char *vconfs[]){ ... /*funkcija za učitavanje podataka kalibracije kamere*/ ar2VideoOpen(vconfs); }

Datoteka sa kalibracijom markera uobičajeno počinje nazivom „patt.“ (npr. patt.hiro).

Inicijalizacija se obavlja pozivom funkcije setupMarker(). Tamo se učitava kalibracija

markera i njegove postavke se povezuju sa virtualnim likom koji se iscrtava na njegovom

mjestu.

Učitavanje datoteke sa kalibracijom markera:

static int setupMarker(const char *patt_name, int *patt_id){ ... //funkcija za učitavanje podataka kalibracije markera arLoadPatt(patt_name); }

Nakon inicijalizacije otvara se prozor za iscrtavanje pozivanjem GLUT funkcije

glutCreateWindow(). Kako je potrebno 2 prozora, funkcija se poziva dva puta. Pridodan je i

naziv svakog prozora da i se mogli razlikovati.

Slijedi registracija GLUT callback funkcija koje se koriste. Te funkcije se izvode u zasebnim

nitima ili se pozivaju po potrebi, za što se brine GLUT. U slučaju da OS nemože pridjeliti

jednake prioritete svim nitima, programer se mora sam pobrinuti za to. (Richard S. Wright Jr

[2004]) U ovom slučaju se koristi OS MS Windows koji to automatski obavlja.

Koristimo slijedeće funkcije:

glutDisplayFunc(Display);

glutReshapeFunc(Reshape);

glutIdleFunc(Idle);

glutKeyboardFunc(Keyboard);

Idle U njoj se obavlja korak 2, 3. i 4 korak aplikacije. Tu su standardni pozivi za hvatanje video

stream-a ARToolkita. Svaki od njih se poziva za svaku kameru zasebno. Svaka kamera ima

Page 27: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

23

set svojih podataka u jednom članu globalne liste tipa CONTEXT_INFO što nam olakšava

pristup podacima.

Funkcija Idle, bitni djelovi koda za hvatanje slike, detekciju markera i dobivanje

transformacijske matrice:

static void Idle(void) { ... for (i = 0; i < gContextsActiveCount; i++) { // Korak 2. hvatanje video slike if ((image = ar2VideoGetImage(gContextsActive[i].ARTVideo)) != NULL) { gContextsActive[i].ARTImage = image;// Spremanje slike } ... // Detektiranje markera u video slici. if (arDetectMarkerLite(gContextsActive[i].ARTImage, gContextsActive[i].ARTThreshhold, &marker_info, &marker_num) < 0) { exit(-1); } ... // Ako postoji marker, onda se racuna transformacija izmedju markera i kamere i sprema u gPatt_trans1. arGetTransMat(&(marker_info[k]), gPatt_centre, gPatt_width, gContextsActive[i].patt_trans); gContextsActive[i].patt_found = TRUE; ... }

Datoteka sa kalibracijom markera uobičajeno počinje nazivom „patt.“ (npr. patt.hiro).

Inicijalizacija se obavlja pozivom funkcije setupMarker(). Tamo se učitava kalibracija

markera i njegove postavke se povezuju sa virtualnim likom koji se iscrtava na njegovom

mjestu.

Učitavanje datoteke sa kalibracijom markera:

static int setupMarker(const char *patt_name, int *patt_id){ ... //funkcija za učitavanje podataka kalibracije markera arLoadPatt(patt_name); }

Page 28: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

24

Reshape Namješta veličinu GLUT prozora na onu dobivenu iz parametara koji se unose na početku

programa. Za te parametre se brine ARToolkit koji ih dobiva od korisnika prilikom pokretanja

programa.

Display Poziva funkcije za iscrtavanje i funkcije koje mijenjaju sa koje kamere se trenutačno iscrtava

slika.

Keyboard Ulaz sa tastature se koristi za mijenjanje nekih parametara i za prekid programa.

Objekt koji se iscrtava je kocka sa jednostavnim teksturama (Sl. 1.20). Sprema se na GLUT

listu (Jackie Neider et al. [1993]) koja se kasnije poziva kod iscrtavanja. Na svakom zaslonu

primjenjuje se posebno iscrtavanje zbog različitih perspekiva. Jednaka kocka je spremljena

dva puta na listu, svaki put namještena za perspektivu jedne kamere kameru (contextIndex je

indeks kamere za koju se vrši iscrtavanje).

Način spremanja naredbi za iscrtavanje na GLUT listu:

gDrawListBox[contextIndex] = glGenLists (1); glNewList(gDrawListBox[contextIndex], GL_COMPILE); glBegin (GL_QUADS); ... glEndList ();

Testiranje je pokazalo zadovoljavajuću brzinu osvježavanja slike (FPS). Virtualni objekt je

odlično pozicioniran na marker i postojan je (ne treperi zbog mogućeg gubitka lokacije

markera).

Sl. 1.20 Proširena stvarnost, prikaz sa dvije kamere, virtualni objekt kocka sa teksturom

Page 29: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

25

Iscrtavanje kompliciranijih virtualnih objekata je sa ovim programom moguće ukoliko se

precizno modeliraju unutar koda.

Kod za obojanu kocku koja je iscrtana na slici (Jackie Neider [1993]):

for (f = 0; f < cube_num_faces; f++) for (i = 0; i < 4; i++) { glColor3f (cube_vertex_colors[cube_faces[f][i]][0], cube_vertex_colors[cube_faces[f][i]][1], cube_vertex_colors[cube_faces[f][i]][2]); glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize); } glEnd (); glColor3f (0.0, 0.0, 0.0); for (f = 0; f < cube_num_faces; f++) { glBegin (GL_LINE_LOOP); for (i = 0; i < 4; i++) glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize); glEnd (); }

Jednostavnije virtualne likove, već definirane u GLUT library je trivijalno iscrtati. Kôd kocke

zamijenimo nekim od preddefiniranih likova kao što je prikazano na (Sl. 1.21). (koristi se

GLUT funkcija glutSolidTeapot()).

Sl. 1.21 U 3D grafici uvijek popularan - čajnik

Page 30: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

26

2. Uvođenje virtualnih ljudi

2.1. Virtualni ljudi

Virtualnim ljudima (engl. virtual characters) nazivamo simulaciju ljudi na računalu. Pri tome

se nastoji da virtualni model što više sliči i ponaša se poput čovjeka. Simulacija ljudi na

računalu se tretira kao posebna grana u računalnoj grafici (Igor S. Pandžić [2004]). To je zato

jer je simuliranje ljudskog tijela, pokreta i ponašanja puno zahtjevnija od simulacije drugih

predmeta. Zbog toga razrađujemo i simulaciju virualnih ljudi u proširenoj stvarnosti odvojeno

od ostalih računalno generiranih tijela. Kako računalni lik uklapamo u stvarni svijet oko sebe

tako mu i dajemo neki kredibilitet, imamo veći osjećaj prisutnosti nego kad je okružen

virtualnom okolinom.

Modeli virtualnih ljudi mogu biti različitih razina realističnosti, od fotorealističnih do

karikatura. Kako bi te karikaturalne likove predstavili kao virtualne ljude, moramo koristiti

pokrete i geste što sličnije ljudskima. Kod realističnih likova mora se paziti da loša imitacija

pokreta, glasa i loša „osobnost“ lika ne unište dojam koji steknemo na prvi pogled.

Sl. 2.1 Primjeri virtualnih likova različite realističnosti

Primjena Kod filma, reklama i TV programa možemo zamisliti brojne nove upotrebe i značajno

unaprijediti stare. Već se koriste jednostavniji oblici proširene stvarnosti u svim tim

područjima, tako da je napredak te tehnologije i dodavanje virtualnih ljudi neminovno.

U računalnim igrama se virtualni ljudi koriste već odavno. Skoro se svaki programer sa tog

područja susreo sa njima. Sav potreban hardware je već tu i polako se razvijaju novi programi

Page 31: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

27

koji će iskorisiti nove ulazne i izlazne jedinice koje sada standardno dolaze sa novim igraćim

konzolama (dodaci za PS3 i Ninendo Wii).

U industriji virtualni ljudi se već sada koriste za testiranje virtualnih prototipova. Sada se to

može proširiti i na stvarne modele i upotpuniti interakciju sa korisnikom.

Najveća mogućnost primjene je naravno u komunikaciji. Prisustvo na daljinu (engl.

telepresence) o kojemu se već odavno priča se napokon počeo primjenjivati (Sl. 2.2). Pomoću

proširene stvarnosti i virtualnih ljudi telepresence se može postići sa dosad još neviđenom

realnošću. Korištenje virtualnih ljudi kod prijenosa videa je preporučen način jer se prenosi

manje podataka i manje je zagušenje mreže. Povećane brzine prijenosa podataka u mobilnim

komunikacijama, prisutstvo broadband internet veze na svakom koraku, snaga današnjih

računala i mobitela osiguravaju svu potrebnu građu sa kojom se virtualni ljudi u proširenoj

stvarnosti mogu uvesti u korištenje.

Sl. 2.2 Primjeri sadašnjeg telepresence konferencije. Rješenje firme Cisco

2.2. Visage|SDK

Do sad su se koristili jednostavniji virtualni likovi koje smo modelirali pomoću jednostavnih

OpenGL funkcija. Naravno, tako smo mogli modelirati i složenije modele, ali to bi bio

mukotrpan proces koji bi za svaku, pa i najmanju promjenu trebao promjene u kodu i

ponovno kompajliranje. Zato je bio potreban neki programski alat koji bi pojednostavio

modeliranje i iscrtavanje modela.

Visage technologies je udruga koja se specijalizirala za animaciju lica i tijela i svojim

aplikacijskim rješenjima nudi širok krug primjene. Sve Visage-ove aplikacije bazirane su na

MPEG-4 tehnologiji za animaciju tjela i lica (Visage Technologies [2008]). Već prije su za

rješavanje zadatka na FER-u bila iskorištena neka rješenja ove udruge, Visage toolkit i Visage

SDK. Visage|toolkit je skup aplikacijskog alata za izradu animacije lica i tijela za film, TV,

Page 32: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

28

računalne igre, Internet i drugo. Omogućava nam brže i jednostavnije kreiranje animiranih

likova. Toolkit je baziran na MPEG4-fba (engl. Face and body animation) standardu.

Kompatibilan je sa drugim 3D alatima kao što su 3DS Max, Maya, SoftImage. Za porebe

ovog rada je korišen Visage|SDK (Software Development Kit).

Sl. 2.3 Primjeri likova iscrtanih korištenjem Visage-a

Visage|SDK se nametnuo kao logičan izbor za rješavanje zadatka. Ima upravo tu

funkcionalnost koja je bila potrebna za prikazivanje likova. Primjere nekih možemo vidjeti i

na (Sl. 2.3).

Postoji nekoliko glavnih prednosti Visage|SDK. Koristi se MPEG-4 standardom pri

modeliranju likova. Taj standard pruža relativno kompleksnu ali vrlo dobru aproksimaciju

ljudskog tijela i lica, te njihovih pokreta (Igor S. Pandžić et al. [2002]). Time se postiže visoka

kompatibilnost modela. Naravno, pri korišenju standardiziranih rješenja dobivamo i

zajamčenu kvalitetu. Mogu se koristiti razni modeli koji su već upotrebljavani kod nekih

drugih aplikacija razvijenih na fakultetu, a i znatno je olakšano modeliranje novih. Postojeći

likovi se lako mogu mijenjati i nadograđivati sa razvojnim alatom visage|toolkit. Visage|SDK

omogućava još jednu vrlo bitnu stvar. Sve modelirane likove možemo animirati standardnim

animacijskim funkcijama. Kako su svi modeli standardizirani, napravljene animacije se mogu

primjeniti na bilo koji model. Postoji još nekoliko naprednih animacija kao što je lip-sync

koje se mogu koristiti u suradnji sa drugim (npr. komunikacijskim) programima za dobivanje

realističnog govora i gesti lica (Tomislav Košutić et al. [2007]).

2.3. OpenGL

Razvojni alat ARtoolkit je omogućio da precizno detektiramo položaj i orijentaciju vizualnog

markera. Pomoću funkcije ARtoolkita (arGetTransMat()[ARtoolkit]) dobija se

Page 33: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

29

transformacijska matrica koja virtualni lik pozicionira na središte markera. Sa jednostavninim

likovima nisu se koristile mogućnosti transformacija koje pruža OpenGL. Virtualni element je

bilo dovoljno iscrtati na marker transformacijom koja je dobivena od lociranja markera. Kod

virtualnih ljudi to nije dovoljno. Prije iscrtavanja virtualnog lika, moraju se napraviti dodatne

transformacije u odnosu na marker: pomak od površine markera, orijentaciju lika (da li stoji

na markeru ili gleda u smjeru od njega), veličinu lika i dr. Sve se to može postići sa

standardnim funkcijama OpenGL-a (Jackie Neider et al. [1993], OpenGL [2008]).

Transformacijski proces za dobivanje željene virtualne scene sa OpenGL-om je sličan

fotografiranju. Gruba usporedba bila bi:

• Namještanje kamere da gleda na scenu koju želimo snimiti (engl. viewing

transformation – transformacija pogleda).

• Namještanje kompozicije scene, preslagivanje objekata (engl. modeling

transformation – transformacija modela).

• Određivanje objektiva koji koristimo (engl. projection transformation – transformacija

projekcije)

• Određivanje veličine fotografije (engl. viewport transformation – transformacija

okvira slike).

OpenGL sve operacije izvršava transformacijama matrica 4x4. A redoslijed primjenjivanja

operacija na matrične koordinate objekta možemo vidjeti na (Sl. 2.4).

Sl. 2.4 Dijagram primjenjivanja transformacija na matricu sa položajem virtualnog objekta.

Page 34: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

30

2.4. Realizacija

2.4.1. OpenGL

U radu se već koristio GLUT prilikom kreiranja prozora za iscrtavanje i podešavanja njegovih

parametara. Kod pravilnog iscrtavanja lika potrebne su nam još neke OpenGL funkcije.

Sva manipulacija virtualnog lika se radi na modelview matrici (GL_MODELVIEW – trenutni

mod matrice odabire se sa glMatrixMode() funkcijom). Prvo treba odrediti kako će virtualni

lik stajati. Ako se marker drži npr. na zidu, onda će lik biti okrenut u smjeru licem od

markera. Ako je marker na stolu ili podu virtualni lik ćemo postaviti uspravno, tj. pod kutem

od 90º na ravninu markera. To se napravi pomoću transformacije za modeliranje glRotatef()

(Sl. 2.5).

Sl. 2.5 Rotacija objekta po osima

Sljedeći korak je pozicioniranje lika u prostoru. Prvo što treba napraviti je udaljiti virtualni lik

od ravnine markera. To je potrebno da se ne bi dogodilo da lik ne „uroni“ u pod ili zid.

Ukoliko se marker drži na fiksnoj poziciji, može ga se koristiti i kao sidrište za globalne

koordinate. Tada ćemo napraviti translaciju virtualnog lika na ravninu poda prostorije. To sve

se može napraviti sa preciznim korištenjem glTranslatef() i glRotatef() funkcija (Sl. 2.5) i (Sl.

2.6).

Page 35: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

31

Sl. 2.6 Translacija objekta

Zadnja stvar koja je potrebna je određivanje veličine lika. Modelirani likovi često nisu

napravljeni u stvarnim mjerama pa ih je potrebno povećati ili u rjeđim slučajevima smanjiti.

To se postiže sa funkcijom glScale() (Sl. 2.7).

Sl. 2.7 Skaliranje objekta po koordinatnim osima

Treba obratiti posebnu pažnju kod korištenja te funkcije jer njena upotreba smanjuje

performanse kalkulacija za osvjetljenje (Jackie Neider [2004]). Kod upotrebe u normalnim

granicama, kod ovakvog korištenja je zadovoljavajuća.

2.4.2. Visage|SDK

Visage|SDK se sastoji od nekoliko library pakea od koje svaki ima svoj set funkcija. Library

visoke razine (engl. high-level library) (Tablica 2.1) pokrivaju većinu funkcija koje su

potrebne kod uobičajenog razvijanja programa i koje programeri najčešće koriste – lip-sync,

govornu animaciju, proceduralnu animaciju, rad sa datotekama i dr.

Library niske razine (engl. low-level library) (Tablica 2.2) se najčešće netrebaju koristiti

direktno. Dostupni su kako bi omogućili pristup svim detaljima animacije virtualnog lika,

deformacija, kodiranja, pristupa datotekama i mehanizmima za iscrtavanje. Koriste se da bi

programerima kod razvijanja složenijih aplikacija pružili potpunu kontrolu (Visage

Technologies [2008]).

Page 36: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

32

Tablica 2.1 Library visoke razine

LIBRARY KRATKI OPIS GLAVNE KLASE

visageFAPlayer Centralni library paket zadužen za animacije, spremanje animacija i dr. Integrira sve druge

komponente.

FAPlayer FbaAction

FbaFileAction

visageLipSync Lip-sync u stvarnom vremenu. VisageLipSync LipSyncEventHandler

visageSAPI5TTS Animacija lica i govora u stvarnom vremenu

pomoću aplikacije za pretvorbu teksta u govor kompatibilnog sa SAPI-5.

Visagesapi5tts Visagesapi5ttsObserver

Page 37: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

33

Tablica 2.2 Library niske razine

visageFBAEncoder

Kodiranje slijeda

animacija prikazanih

BAP (FBAP) u ISO-standard MPEG-4 FBA

CFBAEncoder FBACodec

visageFBADecoder

Dekodiranje MPEG-4 FBA animacije za

dobivanje BAP (Body

Animation Parameters)

CFBADecoder FBAPs FAPs BAPs

FAPNames BAPNames

VisemeNames ExpressionNames

FBACodec

visagesdkAFM

Baratanje modelima za animaciju i

običnim VRML

modelima. Koristi se kod

potpunog pristupa

geometriji, animaciji,

deformaciji i učitavanju.

AFM VRMLModel

VRMLTraverser FileIO

BaseFileIO AFMDeformer

BaseAFMDeformer

SimpleAnimation

visageVRMLRenderer

Apstraktni interface koji podržava bilo koji sustav za iscrtavanje.

Sadrži OpenGL implemenaciju.

VRMLModelRenderer BaseOGLVRMLModelRenderer SimplePlayer

Page 38: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

34

Visage technologies ima preporuku za razvijanje novih aplikacija. Dani su primjeri i kosturi

koda programa. U ovom radu oni nisu korišteni. Neke njihove funkcionalnosti nisu bile

porebne jer su već realizirane na drugi način, a neke nisu bile kompatibilne sa rješenjem za

AR.

Zato su za svrhe ovog rada su korišteni library niske razine, koji omogućavaju potpuni pristup

modelu. Tako je zadržana većina funkcionalnosti visage|SDK, a povećana je mogućnost

manipulacije virtualnim likom u kodu.

BaseOGLVRMLModelRenderer klasa Ova klasa pruža osnovnu funkcionalnost renderer-a (engl. render – iscrtati, renderer –

iscrtavač) baziranog na OpenGL-u. Preporuka u Visage|SDK je da se koristi pri iscrtavanju

lika u integraciji sa MFC-om (MFC – Microsoft Foundation Classes). To u ovom slučaju nije

bilo moguće jer library ARToolkit-a nisu kompatibilni sa MFC-om. Potrebna dodatna

funkcionalnost je realizirana na drugi način, pomoću GLUT-a i zadovoljava potrebe rada.

Konkretno u programu se koristi samo metoda RenderToScreen() koja iscrtava model, ako je

model učitan, inače očisti sliku. Osim kod iscrtavanja ova metoda se korisi i u inicijalizaciji.

Teksture modela se učitaju tek kod prvog poziva ove metode, što obično traje oko 1-2

sekunde. Da se to kašnjenje izbjegne, pozivamo metodu RenderToScreen() prilikom

inicijalizacije. To je normalni i preporučeni postupak objašnjen i u dokumenaciji visage|SDK.

FAPlayer klasa Jedna od najvažnijih klasa visage|SDK. Implementira mehanizme za animaciju tijela i lica u

stvarnom vremenu i off-line. To je klasa visoke razine, ali ima brojne metode koje nam daju

potpunu kontrolu nad virtualnim likom. Nema nikakvih konflikata pri upotrebi sa ARToolkit-

om i GLUT-om tako da se može koristiti bez ograničenja.

FAPlayer se inicijalizira učitavanjem AFM-a (engl. Animatable Face and Body Model ) iz

datoteke. Takvom modelu se mogu dodavati razne animacije i pokretati sa meodom play().

Animacije se učitavaju iz FBA datoteka metodom addTrack() i pokreću po potrebi. Moguće

je pokrenuti više animacija u isto vrijeme, kao i svaku zasebno. Animacija je u memoriji

predstavljena apstraktnom animacijskom klasom FbaAction koja je osnova za sve tipove

animacije. To omogućava vrlo moćan mehanizam za primjenjivanje raznih mehanizama

animacije, poput Visagesapi5tts (pretvara tekst u govor i animira lice i usta), VisageLipSync

(analizira audio signal i stvara animaciju lica i usta na temelju toga) već implementiranih u

visage|SDK.

Page 39: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

35

2.4.3. Razvoj aplikacije

Program se temelji na već opisanom AR sustavu, tako da kostur ostaje nepromijenjen. Neke

funkcije će se zamijeniti (modeliranje lika i iscrtavanje), neke izbaciti, a neke samo

nadograditi.

Inicijalizacija

Prilikom iscrtavanja kocke, postoji inicijalizacija koja se sastoji od alociranja memorije

potrebne da se ona pohrani (kod jednostavnijeg modela čajnika to nije bilo potrebno). Sada se

ta pojednostavljenu inicijalizacija može zamjeniti inicijalizacijom visage modela. U funkciji

Init() učitava se AFM datoteka koja sadrži opis modela koji se koristi. Kako datoteka mora

postojati da bi program radio, doći će do prekida ako datoteka ne postoji ili se iz nekog

razloga nemože pročitati. Kod inicijalizacije se inicijalizira i instanca FAPlayera sa meodom

FAPlayera->init(). Ona je potrebna samo kod korištenja animacija na modelu. Ukoliko se ne

koriste animacije, nije ju potrebno stvarati. Inicijalizacija BaseOGLVRMLModelRenderer-a

(u ovom slučaju dvije – po jedna za svaku kameru kako bi se dva sustava iscrtavanja potpuno

odvojila) se radi sa metodom Init() klase BaseOGLVRMLModelRender.

Inicijalizacija:

static int Init( void ) { afm = new AFM(MODEL); // Učitavanje modela // Provjera da li je model učitan if(!afm->getVCModel()->initialized) return(FALSE); ... m_FAPlayer.init(afm); // Inicijalizacija FAPlayera ... // Dvije inicijalizacije BaseOGLVRMLModelRenderera BRenderer[0].Init(m_FAPlayer.getFaceModel()); BRenderer[1].Init(m_FAPlayer.getFaceModel()); }

Ukoliko se žele dodati animacije modelu, potrebno ih je učitati iz FBA datoteka. FAPlayer

ima metodu addTrack() predviđenu za tu namjenu. Moguće ih je dodati više istom modelu.

Animacije je najbolje dodati već kod inicijalizacije, ali moguće ih je dodati i kasnije. Kako

program može funkcionirati bez njihove prisutnosti, nije ga neophodno prekidati ukoliko ne

postoje ili radi drugih razloga nemogu biti učitane.

Page 40: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

36

Animacije dodajemo na instancu FAPlayera:

m_FAPlayer.addTrack(ANIMATION1); // Dodaj animaciju 1 m_FAPlayer.addTrack(ANIMATION2); // Dodaj animaciju 2

Teksture modela se učitaju tek kod prvog poziva metode BaseOGLVRMLModelRenderer->

RenderToScreen(), što obično traje oko 1-2 sekunde. Po preporuci Visage technologies, bilo

bi dobro pozvati ju kod inicijalizacije drugih parametara. To nije moguće. Ukoliko se metoda

RenderToScreen() pozove prije stvaranja prozora za iscrtavanje pomoću GLUT-a, teksture se

svejedno neće učitati. Zbog toga je ona stavljena izvan funkcije Init(), odmah iza otvaranja

GLUT prozora.

Otvaranje prozora i učitavanje tekstura:

int main(int argc, char** argv) { ... // Kreiranje prozora if ((gContextsActive[i].apiContextIndex = glutCreateWindow(windowTitle)) < 1) { fprintf(stderr, "main(): Unable to create window.\n"); exit(-1); } // Inicijalizacija iscrtavanja, učitavanje tekstura BRenderer[i].RenderToScreen(); ... }

Iscrtavanje

Iscrtavanje virtualnog lika je izvedeno funkcijom drawVirtual(). Kako se za iscrtavanje

samog lika brine klasa visage-a BaseOGLVRMLModelRenderer, potrebno je samo dobro

pozicionirati virtualni lik. Za to se koriste OpenGL funkcije glRotatef(), glTranslatef() i

glScalef(). Pri testiranju programa, korištena su dva osnovna tipa modela: prvi sadrži glavu i

prsa (bista, poprsje), drugi cijelo tijelo. Za svaki od njih je potrebna posebna transformacija.

Kod modela cijelog tijela se koristi pozicioniranje da model „stoji“ na markeru (Sl. 2.8). Kod

biste se model postavi da gleda iz smjera markera, „polegnut“ je na marker (Sl. 2.9).

Page 41: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

37

Sl. 2.8 Primjer kad model „leži“ na markeru

Sl. 2.9 Primjer kada model stoji na markeru

Primjer transformacija virtualnog lika:

static void drawVirtual (int contextIndex) { ... glMatrixMode(GL_MODELVIEW); if (MODEL_TYPE == "STANDING") { // Rotacija da stoji uspravno glRotatef(GLfloat (90.0), 1.0f, 0.0f, 0.0f); // Translacija da ne propadne kroz marker glTranslatef( 0.0, 0.0, 4.0 ); // Povećanje glScalef (5.0, 5.0, 5.0); }

Kod iscrtavanja virtualnih ljudi dodano je i osvjetljenje:

glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_AMBIENT, ambi); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash); glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);

Page 42: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

38

Dodatne promjene Kod iscrtavanja slike druge kamere dolazi do usporavanja prilikom iscrtavanja. Dvije niti koje

se brinu za iscrtavanje bi trebale biti ravnopravne i jednako se puta izvršavati. Pretpostvka je

da do problema dolazi jer OS smatra jednu nit „ravnopravnijom“ od druge. Bez detaljnijeg

proučavanja problema, unešeno je kašnjenje u funkciji Display() (već je prije bila opisana)

kad se iscrtava slika sa prve kamere. To daje veću šansu drugoj niti da „dođe na red”.

Kašnjenje:

if ((contextIndex = getContextIndexForCurrentGLUTWindow()) == 0) { ms = glutGet(GLUT_ELAPSED_TIME); s_elapsed = (float)(ms - ms_prev) * 0.001; if (s_elapsed < 0.1f) return; // Don't update more often than 100 Hz. ms_prev = ms; }

U funkciju keyboard() (već opisanu prije u tekstu) moguće je dodati još nekoliko naredba za

interakciju sa virtualnim likom (npr. kojom bi pokrenuli i zaustavili animaciju ili nešto

složenije).

Page 43: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

39

3. Proširenje sustava s više markera

3.1. Korišetnje više markera

Sustav proširene stvarnosti koji bi se koristio u svakodnevnoj primjeni treba imati brzo,

robusno i precizno praćenje. U prostoru gdje nije dostupna sofisticirana oprema mogu se

koristiti sustavi za praćenje sa markerima. U laboratorijskim uvjetima jedan manji marker je

dovoljan za praćenje neke jednostavnije scene. Kod proširenja mogućnosti takvog sustava nije

dovoljno koristiti jedan marker je pozicija dobivena iz njega nije dovoljno stabilna. Sa

pomicanjem i gubitkom vizualne slike dijela markera gubi se pozicija. Cjelokupna procjena

pozicije se može znatno poboljšati ako se koristi više markera u fiksnom odnosu jedan na

drugi. Time se osigurava bolja preciznost i smanjuje se mogućnost gubljenja markera.

Sustav sa više markera može biti koplanarni ili ne. Ako su svi markeri u jednoj ravnini, lakše

je izvesti proračune za njih. Takvi markeri povećavaju preciznost i donekle poboljšavaju

hvatanje markera u prostoru, ali za široku primjenu bi se trebali proširiti. Sam postupak

proširivanja aplikacije za rad na više ne-koplanarnih markera nije pretjerano zahtjevan. Ono

što je teže izvesti, ali je i prijeko potrebno ako bi takav sustav radio, je precizna kalibracija uz

strogo kontrolirane uvjete postavljanja markera. Ukoliko bi se markeri micali, čak i za mali

pomak, cijela kalibracija bi se trebala ponovo provesti. Mali pomak kod orijentacije markera

može značiti veliki pomak za virtualni predmet koji iscravamo. Koordinatni sustav se

određuje pomoću markera i što je predmet dalje od njega, to je pogreška veća. Isti problem se

naravno javlja i kod koplanarnih markera, ali zbog njihovih ograničenja, koristimo ih na

znatno manjem prostoru, pa je time i pogreška manja. Primjer koplanarnih markera je dan na

slici (Sl. 3.1).

Page 44: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

40

Sl. 3.1 Primjer koplanarnog sustava markera

3.2. Koplanarni markeri

Koplanarni sustav je jednostavniji za kalibriranje. Zbog toga su rezultati dobiveni detekcijom

takih markera precizniji. Konfiguracija više markera zahtijeva da su poznati odnosi svih

markera, precizne udaljenosti i precizne transformacije između njih. Kako je sve to potrebno

izmjeriti u stvarnom svijetu i zatim još pretvoriti u mjere u virtualnom svijetu, to je dugotrajni

proces. Koplanarni markeri mogu pojednostaviti dio izračuna kod kalibracije, pa će se u ovom

radu koristiti samo takve.

Ukoliko bude dostupan program za automatsko kalibriranje sustava više markera, jednostavno

je proširiti aplikaciju da koristi i njih.

Na slici (Sl. 3.2) se vidi primjer korištenog sustava više markera tzv. multi-marker (engl.

Multi-Marker).

Sl. 3.2 Primjer multi-markera korišten na fakultetu

Page 45: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

41

Korištenjem multi-marker sustava omoguće da detektiramo pozicije markera koje ne vidimo.

Njihova pozicija se izračuna iz pozicija poznatih markera. Osim toga, omogućuje veću

vjerojatnost da će se barem jedan od markera detektirati. Veća pokrivenost prostora i

redundantnost nam omogućuju preciznije pozicioniranje virtualnih likova. Na slici (Sl. 3.3)

vidimo primjer kada se jedan marker nije detektirao. Crvena kocka je iscrtana iako nema

podataka o markeru na kojem se nalazi.

Sl. 3.3 Primjer upotrebe multi-markera

3.3. Proširivanje koordinatnog sustava

Proširivanje koordinatnog sustava je logičan korak kod unaprjeđena AR sustava. Kako su

uvedeni virtualni ljudi, mora im se i osigurati prikladan prostor u kojemu se oni mogu kretati.

Proširenjem se virtualni lik može kretati po prostoriji poput pravog lika.Daljnja prednost je u

tome što se može postići bolja mogućnost preklapanja.

Da bi prošireni koordinatni sustav radio, bilo je potrebno povećati vjerojatnost detekcije i

precizost markera. Zato je uveden multi-marker sustav. Pozicije svih markera u prostoriji su

unaprijed poznate, kao i transformacije između njih. Ako se precizno detektira i jedan od njih,

mogu se dobiti globalne koordinate prostorije. Sa tim koordinatama se virtualni likovi mogu

Page 46: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

42

postaviti bilo gdje u njoj. To otvara mogućnost interakcije virtualnih likova sa stvarnim

prostorom.

Postojeći sustav ne detektira elemente stvarnog svijeta kako bi mogli biti u interakciji sa

virtualnim. Elementi iz stvarnog svijeta će u svakom trenutku biti u pozadini virtualog lika,

dok ne prekrijemo marker. Da se postigne bolja interakcija, potrebno je modelirati u računalu

i stvarne elemente iz okoline. Takvi virtualni elementi, temeljeni na stvarnima bili iscrtani

„nevidljivi“. To se može postići tako da se iscrtavaju samo u z-Buffer gdje će prekriti

virtualne likove iza njih. Potrebno je i isključiti Color Buffer kako bi stvarni predmet bio

zamijenjen pozadinom. Postupak kako se uklapa u postojeće iscrtavanje:

• Očisti z-buffer

• arglDispImage(). Iscrtaj sliku sa kamere na ekran

• arglCameraFrustum(). Namjesti kameru (modelview) i osvjetljenje

• glColorMask(0,0,0,0). Isključi color buffer i iscrtaj stvarni element

• glColorMask(1,1,1,1) Ponovo uključi color buffer i iscrtaj sve virtualne elemente

Za sada je AR sustav limitiran samo na jedan multi-marker i još nije implementiran globalni

koordinatni sustav. Poteškoće su u sporosti procesa kalbiracije novih markera i modeliranju

prostorije.

3.4. Realizacija

Osnove rada i funkcionalnosti OpenGL i ARToolKit biblioteka su opisane u poglavljima

(1.4.4), (1.4.5), (2.3), (2.4.1). Nije ih potrebno detaljnije objašnjavati kod proširivanja

programa. Koristi se nekoliko novih ARToolKit funkcija koje će biti objašnjene dalje u

tekstu.

Nadogradnja za korištenje više markera se radi na postojeći AR sustav. Oprema ostaje u

potpunosti nepromijenjena. Potrebno je napraviti multi-marker koji će se koristiti. Zatim treba

kalibrirati te markere tako da se podaci o novom multi-markeru mogu učitati u program.

Nakon toga je potrebno prepraviti i kod programa da radi sa novim markerima.

Upute za dizajniranje markera Kreiranje markera je slično kreiranju jednog markera. Potrebno je uzeti predložak sa crnim

okvirom i u njemu nacrtati uzorak. Najbolji uzorci su asimetrični i bez previše detalja. Treba

napraviti nekoliko različitih markera i ispisati ih ili zalijepiti na isti papir (zbog

Page 47: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

43

pojednostavljenja radilo se samo sa koplanarnim markerima iako je sustav lako proširiv i za

ne-koplanarne). Trebalo bi uzeti najmanje 5 različitih markera (potrebno je da se detektira

barem jedan u svakom trenutku).

Kako bi kalibracija bila što jednostavnija, dobro je uzeti markere koji su koplanarni i blizu

jedan drugoga. To pojednostavljuje mjerenje. Nije neophodno da markeri budu koplanarni,

dapače, predviđeno je da se sustav proširi sa markerima koji će obuhvaćati čitavu prostoriju.

Kada se kalibracija pojednostavni to će biti lako provesti.

Kalibracija markera Kalibracija markera je zahtjevniji dio posla. Svaki marker se mora posebno kalibrirati na

standardni način (koristeći program mkpatt.exe koji dolazi sa ARToolKit-om). Multi-markeri

imaju jednu zajedničku datoteku u kojoj su odnosi markera. Kratki opis datoteke za

konfiguraciju multi-marker sustava je na slici (Sl. 3.4).

Sl. 3.4 Datoteka sa podacima o multi-marker sustavu

Potrebno je precizno definirati veličinu markera, osnovne koordinate i na kraju

transformacijsku matricu koja će dati lokaciju središnjih koordinata. Podešavanje novih multi-

markera je dug i mukotrpan proces. Jednostavniji način bi bio automatizirati taj proces. Takva

aplikacija je već predstavljena na jednom ISMAR-u, ali nije Open Source, te se nemože

koristiti bez autorskih prava.

Redizajniranje koda Sve funkcije u aplikaciji ostaju i zadržavaju svoju prvotnu primjenu. Izmjenit će se samo

dijelovi nekih funkcija i dodati par novih globalnih varijabli.

Potrebno je uključiti u program library arMulti.h. U toj biblioteci su sadržane funkcije

potrebne za baratanje sa više markera koristeći postojeće ARToolKit funkcije. Kako je

Page 48: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

44

promijenjena datoteka sa podacima o markeru, moramo promijeniti i naziv datoteke i način na

koji se ona učitava. Inicijalizacija markera (učitavanje podataka iz datoteke i prosljeđivanje)

se radilo pomoću funkcije setupMarker(). Za minimalnu intervenciju u kodu je najbolje

mijenjati samo nju. Provjera za pravilno učitavanje ostaje, samo se funkcija arLoadPatt()

zamijenjuje funkcijom arMultiReadConfigFile(). Za prosljeđivanje podataka o markeru

koristimo multi_config globalnu varijablu tipa ARMultiMarkerInfoT. Time je riješen prvi dio

u aplikaciji, što se tiče kalibracije.

Pri detekciji markera, hvata se slika sa video stream-a svakih nekoliko milisekundi. Ta slika

se zatim procesira i pretražuje. Ako je nađen crni okvir koji označava marker, nastavlja se

identifikacija markera. Taj dio ostaje nepromijenjen kod programa sa više markera. To je zato

jer je već omogućeno detektiranje više markera i to iz dva razloga: prvi je ako koristimo više

različitih markera da iscrtavamo poseban lik na svakom od njih; a drugi je zbog poboljšane

deekcije markera. Kod poboljšane detekcije koristi se samo jedan marker. Ako se javi greška

ili se iz nekog razloga on pojavi više puta na slici, bira se onaj sa najvećom pouzdanošću. Ta

dodatna detekcija se isključuje za ovu primjenu. Detekcija je kako slijedi:

/* detect the markers in the video frame */ if( arDetectMarkerLite(dataPtr, thresh, &marker_info, &marker_num) < 0 ) { cleanup(); exit(0); }

Ono što se razlikuje je način računanja transformacijske matrice. Kod prethodnog slučaja

računala se samo iz jednog markera, a sada se dobija iz sredine svih. Ako su u slici pronađeni

potencijalni markeri, prelazi se na njihovu identifikaciju. Nakon učitanih podataka o markeru

iz konfiguracijske datoteke, dobijemo broj markera, visibility zastavicu ako je detektiran i

transformacijsku matricu. Ako je barem jedan marker iz sustava markera detektiran, položaj

se može odrediti. Za identifikaciju se koristi:

if( (err=arMultiGetTransMat(marker_info, marker_num, multi_config)) < 0 ) { argSwapBuffers(); return; }

Parametar marker_info su podaci iz datoteke, marker_num je broj markera, a u multi_config,

koji je struktura tipa ARMultiMarkerInfoT podatke o identificiranim markerima.

Page 49: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

45

Iz tih podataka je moguće dobiti poziciju svakog markera posebno, vidljivog ili ne. Za ovu

primjenu nam to nije potrebno, već samo središnja pozicija. Transformacijsku matricu za tu

lokaciju možemo izčitati iz multi_config->trans ako je barem jedan marker detektiran.

Provjeru detekcije vršimo pomoću:

if (multi_config->prevF){ for( int ii = 0; ii < 3; ii++) for ( int jj = 0; jj < 4; jj++) gContextsActive[i].patt_trans[ii][jj] = multi_config->trans[ii][jj]; gContextsActive[i].patt_found = TRUE;

U prevF je zastavica koja označava da je barem jedan marker pronađen. Ako je pronađen,

matricu iz multi_config->trans prebacujemo u gContextsActive[i].patt_trans gdje je i broj

konteksta u kojem je marker.

Ako je iz nekog razloga potrebna lokacija pojedinog markera, može se dobiti iz strukture tipa

ARMultiMarkerInfoT: multi_config->marker[i].trans gdje je i broj markera koji tražimo.

Sl. 3.5 Primjer prikaza lika sa multi-markerom

Page 50: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

46

Zaključak

Proširena stvarnost kod mnogih studenata probudi interes kada se spominje. Nažalost, taj

interes splasne kada spoznaju koliko je rada još potrebno da bi se postigla proširena stvarnost.

Kolega Ivor Bakša i ja smo odlučili napraviti AR sustav na fakultetu koji će probuditi interes

budućih studenata i pomoći im ako se odluče za rad na tom području. Osnovnu aplikaciju

koju smo zajedno napravili nastavio sam nadograđivati. Postigao sam integraciju virtualnih

ljudi sa AR sustavom, korištenjem sustava Visage|SDK koji je omogućio i jednostavno

mijenjanje modela. Još bitnije, korištenje Visage je omogućilo i animaciju modela.

Virtualni ljudi su uključeni u program sa idejom interakcije, koja nažalost još nije ostvarena.

Omogućen je zato prvi korak kako bi se smjestili u prirodnu okolinu. Korištenjem multi-

markera otvorena je mogućnost proširivanja koordinatnog sistema kako bi bio vezan za

prostoriju. Time se može postići da virtualni ljudi hodaju po prostoriji, sjede, komuniciraju i

izvode različite radnje u prirodnoj veličini.

Ovaj sustav proširene stvarnosti pruža odličnu bazu za nadogradnju. Od poboljšanja samog

sustava do proširivanja sa novim sadržajima Dobar je i kao podsjetnik kod početka razvoja

potpuno novih AR sustava.

Page 51: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

47

Literatura

[1] AZUMA, RONALD T. 1997. A Survey of Augmented Reality. Presence: Teleoperators and Virtual Environments 6

[2] IGOR S. PANDŽIĆ, 2004. Virtualna okruženja, Element

[3] IGOR S. PANDŽIĆ, ROBERT FORCHHEIMER, 2002. MPEG-4 Facial Animation – The standard, implementations and applications, John Wiley & Sons

[4] JACKIE NEIDER, TOM DAVIS, MASON WOO, 1993. OpenGL Programming Guide, Addison-Wesley Publishing Company

[5] OZAN CAKMAKCI, JANNICK ROLLAND, 2006. Head-Worn Displays: A Review journal of display technology, vol. 2, no. 3, IEEE

[6] RICHARD S. WRIGHT JR., BENJAMIN LIPCHAK, 2004. OpenGL SuperBible, Sams Publishing

[7] TOMISLAV KOŠUTIĆ, MIRAN MOŠMONDOR, MARIO WEBER, 2004. Osobni virtualni likovi u pokretnoj mreži, Rad za natječaj za dodjelu rektorove nagrade

[8] EVERYTHING USB, 2008. special interest website focusing on the latest development of Universal Serial Bus technology [http://www.everythingusb.com/logitech_quickcam_for_notebooks_pro.html]

[9] HUMAN INTERFACE TECHNOLOGY LABORATORY INTERNET FORUM 2008. [http://www.hitlabnz.org/forum/archive/index.php/]

[10] HUMAN INTERFACE TECHNOLOGY LABORATORY, UNIVERSITY OF WASHINGTON, 2008. Documentation of ARToolkit development tool [http://www.hitl.washington.edu/artoolkit/]

[11] OPENGL, 2008. OpenGL Reference Manual, inačica 1.4. [http://www.opengl.org]

[12] STEREO3D, 2008. The independent 3D and Virtual Reality resource [http://www.stereo3d.com/3dhome.htm]

[13] TECHGAGE, 2008. independent technology news site for IT professionals [http://techgage.com/article/logitech_quickcam_for_notebooks_pro/]

[14] VISAGE TECHNOLOGIES, 2008. - The Face Animation Company, [www.visagetechnologies.com]

[15] WIKIPEDIA 2008. encyclopedia [www.wikipedia.org]

Page 52: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

48

Skraćenice

API Aplication Programming Iterface Programsko sučelje

AR Augmented Reality Proširena Stvarnost

ARToolKit Augmented Reality Tool Kit Softverski alat za izradu proširene

stvarnosti

FOV Field Of View Vidno polje

FPS Frames per second Slika po sekundi (brzina

osvježavanja slike)

HMD Head Mount Display Zaslon za glavu

IPD Interpupilary distance Očna distanca

ISMAR International Symposium on Internacionalni simpozij o miješanoj

Mixed and Augmented Reality i proširenoj stvarnosti

OpenGL Open Graphics Library Softverski API za grafičke aplikacije

OS Operating System Operativni sustav

SDK Software Development Kit skup računarskih alata

VGA Video Graphics Array Analogni računalni video standard

VST-HMD Video see trough HMD Zaslon za glavu temeljen na video

miješanju

Page 53: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

49

Popis stranih izraza

Binarization Binarizacija

Binocular HMD Binokularni HMD

Biocular HMD Biokularni HMD

Callback povratni poziv

Computer vision Računalni vid

Device name Ime uređaja

Device id Identifikator uređaja

Framework konceptualna struktura za rješavanje problema

Hardware hardver, slopovska/strojna oprema

Library Biblioteka, kolekcija subrutina skupljenih u

jednu datoteku

Logitech QuickCam For Notebooks Pro Usb kamere marke Logitech

Mixing Miješanje

multi-marker sustav sa više markera

Open source Kod nezaštićen autorskim pravom

Optical combiner Optička mješalica, uređaj za miješanje slike

kod optičkog mješanja

pixel per display Pikseli po zaslonu

Position/orientation Položaj/orijentacija (u prostoru)

Registration Poravnavanje

Render (to Screen) Prikazivanje, izvođenje, računalstvu se koristi

za iscrtavanje (može biti na ekran ili u

memoriju grafičke kartice)

Software Programska oprema

Page 54: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

50

Telepresence prisutstvo na daljinu

Tracking Slijeđenje

Treshold image Trashold slika (slika dobivena postupkom

binarizacije)

Video Compositor Video mješalica, Uređaj za mješanje kod video

mješanja.

Video Stream Struja videa, u računalstvu se koristi za niz

bitova koji predstavlja video zapis

Page 55: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

51

Dodatak

Upute za instalaciju opreme Spajanje opreme se vrši u dva dijela. Prvi dio se odvija prije namještanja slike na računalu, a

drugi nakon.

Sl. 0.1 Priključci na adapteru za HMD

Potrebno je spojiti video ulaze HMD na adapter. Na slici (Sl. 0.1) je prikazan adapter i

priključci. Kablove je potrebno priključiti pravilno, postoje lijevi i desni označeni su sa L i R.

Nakon toga je potrebno spojiti kamere preko USB priključaka. Kod spajanja kamera nije

bitno koji USB priključci računala se koriste.

Drugi dio prikapčanja se odvija tek kad namjestimo sliku na monitoru. Kablovi monitora

priključeni u grafičku karticu se isključuju i zamjenjuju kablovima koji vode do HMD

adaptera. Potrebno ih je spojiti kao na slici (Sl. 0.2) koristeći adaptere za vga izlaz.

Sl. 0.2 Priključeni kablovi na grafičku karticu

Adapteri za video izlaze se moraju koristiti, inače postoje prolemi sa slikom.

Page 56: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

52

Upute za korištenje Prvo se provede prvi korak instalacije opreme opisan ranije. Prije pokretanja programa

potreno je namjestiti sliku. Uključuju se oba monitora. U podešenjima slike potrebno je

odabrati opciju horizontal span. Rezolucija slike mora biti 1280x480 kako bi HMD mogao

raditi (HMD ima rezoluciju ekrana 640x480, za oba ekrana to je 1280x480).

Potrebno je pokrenuti jednu od verzija programa. Za obje kamere potrebno je odabrati

rezoluciju 640x480 i 30 FPS (Sl. 0.3). Nakon pokretanja dobivena su 2 prozora, po jedan za

svaku kameru. Prozor lijeve kamere potrebno je staviti na lijevi ekran, a desne na desni.

Sl. 0.3 Odabir rezolucije i FPS kamere

Sada je potrebno provesti drugi korak instalacije opreme. HMD je sada spreman za korištenje.

Marker se nalazi na kartonskom podlošku. Treba ga se postaviti na željenu lokaciju. Prilikom

pogleda na marker sa HMD-om vidjet će se virtualni lik.

Pokretanje na drugim računalima Ukoliko se program želi pokrenuti na novom računalu, prvo je potrebno provjeriti da li ima

odgovarajuću grafičku karticu. Grafička kartica mora imati barem 2 video izlaza. Mora

postojati mogućnost podešavanja rezolucije 1280x480. Moguće je da kod noviji driver za

grafičku karticu ne podržava tu rezoluciju, kao u ovom slučaju. Kod takvog slučaja potrebno

je na web-u proizvođača pronaći stariju verziju koja možda podržava tu rezoluciju.

Računalo mora imati i barem 2 usb priključka, verzije 2.0.

Page 57: Integriranje Virtualnih Likova u Sustav Proširene Stvarnosti

53

Potrebno je instalirati sav potreban software i prije pokretanja programa dobro je provesti

osnovne testove ARToolKit-a. Od instaliranih programa potrebno je imati: DirectX (verzija

9.0 ili više), Glut, library ARToolkita, library Visage|SDK.

Prilikom podešavanja datoteka za kamere (WDM_camera.xml i WDM_camera1.xml) device

id kamera može se dobiti pomoću programa Graphedit.

Ukoliko postoje problemi sa pokretanjem programa, pomoć je najbolje potražiti na web-u

ARToolKit-a ili Visage Technologies. Dobrih savjeta ima na forumu Human Interface

Technology Laboratory. Lokacije su u popisu literature.