VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL...

11
1 VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF CONTROL AND INSTRUMENTATION VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO VIRTUÁLNÍ REALITY VISUALISATION OF MEASURED SPATIAL DATA INTO VIRTUAL REALITY MRBT PROJEKT MRBT PROJECT AUTOR PRÁCE Bc. Adam Ligocki AUTHOR VEDOUCÍ PRÁCE doc. Ing. Luděk Žalud, Ph.D. SUPERVISOR BRNO, 2016

Transcript of VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL...

Page 1: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

1

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ

ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY

FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION

DEPARTMENT OF CONTROL AND INSTRUMENTATION

VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO VIRTUÁLNÍ REALITY VISUALISATION OF MEASURED SPATIAL DATA INTO VIRTUAL REALITY

MRBT PROJEKT MRBT PROJECT

AUTOR PRÁCE Bc. Adam Ligocki AUTHOR

VEDOUCÍ PRÁCE doc. Ing. Luděk Žalud, Ph.D. SUPERVISOR

BRNO, 2016

Page 2: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

2

ABSTRAKT

Tento dokument popisuje zázemí tvorby programu, který vykresluje prostorová data naměřená ve skupině

robotiky na UAMT do brýlí virtuální reality Oculus Rift Dev. Kit 2. Vstupem programu jsou data z měření

chodby, kde sídlí skupina robotiky. Tyto data jsou uložená jednak v RAW výstupu lidaru a jednak

v komprimovaném octree formátu. Projekt provádí jejich čtení a překlad do trojrozměrného

souřadnicového systému a následně je pomocí knihovny OpenGL a API pro virtuální realitu vykresluje do

brýlí. Umožňuje tak člověku lépe chápat informace se kterými pracuje robot při svém nasazení.

Zadání

Vytvořte aplikaci, která bude na rozhraní Oculus Rift Development Kit 2 zobrazovat naměřená prostorová

data vytvořená skupinou robotiky a umělé inteligence na UAMT. Připravte program, který bude načítat data

jak v textové podobě formátu .scan a .sbatch tak i data v zkomprimované podobě souborového formátu

.og3 vyvinutého v rámci skupiny robotiky.

Teoretický úvod

Skupina robotiky na UAMT dlouhodobě rozvíjí technologie zabývající se měřením prostředí, tvorbou map,

jejich kompresí, sebe lokalizací robotů a optimalizací těchto algoritmů. Tato oblast je v dnešní době stále

nedořešenou problematikou a zabývají se jí odborná pracoviště po celém světě. Na UAMT v rámci své

diplomové práce [1] se velmi podrobně právě tvorbou map a zpracováním prostorových dat zabýval

Ing. František Burian, Ph.D. Vytvořil algoritmus, který spojuje informace z lidaru, RGB kamery a termovizní

kamery a následně takto fúzovaná data komprimuje pomocí octree komprese do kompaktního formátu.

Tento projekt navazuje právě na výše zmíněnou práci, kdy si klade za cíl naměřená data interpretovat a

zobrazit uživateli skrze platformu virtuální reality a poskytnout tak intuitivní způsob náhledu na data

s kterými pracuje robot nasazený do reálné operace.

Platforma Oculus Rift

Historie stereo vidění [2] se píše od roku 1838, kdy Charles Wheatstone demonstroval princip fungování

mozku na dvou vůči sobě v prostoru posunutých fotografiích. Tím dokázal vytvořit vjem prostorového

vnímání obrazu.

V 30. letech 19 století se pak poprvé objevila v tehdejších sience fiction autora Stanley G. Weinbaum

představa brýlí, které by do každého oka dodávali jinou obrazovou informaci. V dalších letech následovaly

postupně různě konstrukce strojů, které se pokoušely právě stereo vjem vytvořit pomocí dvou obrazů. První

headset brýle se objevily v 1960 letech minulého století. Neposkytovali však žádnou funkci detekce pohybu

hlavou. O rok později pak byla přidána i inerciální jednotka a byla možná první interakce mezi uživatelem a

strojem.

V nadcházejících letech proběhlo mnoho pokusů o simulaci reálného zrakového vjemu. Zkonstruovaná

zařízení však neposkytovala požadovanou kvalitu zobrazení a byla příliš velká pro reálné použití. Začátkem

90 let pak například společnosti SEGA a Nintendo se pokusily o vývoj vlastních brýlí na bázi herních konzolí.

Výsledky vývoje byly ale neuspokojivé a další postup byl v obou případech přerušen.

Teprve technologický postup v současném miléniu, který sebou nese dramatický nárůst výpočetního

výkonu a miniaturizace hardwaru umožnil vzniku mnoha projektů, které se začaly výrazně blížit stavu, kdy je

možné je nasadit v reálných aplikacích.

Page 3: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

3

K dnešnímu dni vyrábí komerční verzi brýlí virtuální, či rozšířené reality několik světových firem, jako HTC,

Sony, Microsoft, Google, atd. V tomto projektu je použit hardware výrobce Oculus VR, jehož vývoj začal

v roce 2014, kdy získal výraznou crowdfoundingovou podporu na serveru Kickstarter.

V průběhu vývoje tvůrce vydal nejprve vývojový kit 1. Ten však trpěl výraznými nedostatky, a zejména pro

nízké rozlišení nebyl hodnocen příliš kladně.

Druhá generace již zaznamenala větší úspěch ze strany vývojářů a naplno ukázala možnosti nově vznikající

platformy.

28. března tohoto roku firma vydala oficiálně konečnou verzi a začala jí hromadně distribuovat.

Ohlasy uživatelů jsou velmi pozitivní a vyzdvihují zejména vysoké rozlišení na každém oku, kdy člověk běžně

přestává vnímat jednotlivé pixely a zároveň je kladně hodnocená snímkovací frekvence 90Hz, která

zpříjemňuje sledování syntetického obrazu.

Srovnání vlastností Oculus Rit DK1 Oculus Rift DK2 Oculus (final)

Rozlišení na oko [px] 640x800 960x1080 1080x1200

FPS [Hz] 60 75 Hz 90 Hz

Úhel vidění [deg] 100 110 110

Váha [g] 380 440 470

Tabulka 1 - srovnání parametru jednotlivých Oculus Riftů

Nadále však není problematika virtuální reality dořešená. Mnoho lidí stále pociťuje nevolnost při delší

konzumaci obsahu z brýlí. Lze však očekávat, že tyto dílčí problémy budou v nadcházejících letech postupně

odstraňovány. Nejpalčivějšími problémy jsou například to, že každý člověk má jinou rozteč oči, mnoha lidem

nedělá dobře, když přestanou podprahově vnímat v obraze svůj nos, zejména pak se uživatelům dělá zle,

když vidí očima jiný pohyb, než který vnímají polokruhové kanálky ve vnitřním uchu.

Obrázek 1- Oculus Rift Dev. Kit 2[5]

Inerciální jednotka Oculus Rifru

Inerciální jednotka brýlí je sestavená z gyroskopu, akcelerometru a magnetometru. Pro zpřesnění a

zamezení translačního driftu v prostoru reálného světa je v prostoru před brýlemi umístěná snímací

kamera, která je pevným referenčním bodem.

Page 4: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

4

Výstupem inerciální jednotky je deskriptor polohy a rotace hlavy vyjádřený translačním a rotačním

vektorem v souřadném systému XYZ (viz obrázek 2) a rotačními úhly okolo souřadných os v intervalu (-1, 1).

Úhly rotace hlavy okolo souřadných os se pak dodatečné transformují do Eulerových úhlů.

Pomocí těchto údajů se pak skrze matici homogenní transformace 𝑯 provádí převod polohy a smyslu

orientace kamery ve scéně vykreslované OpenGL z počátku do polohy odpovídající poloze hlavy uživatele.

Pro výpočet homogenní transformace uvažujeme následující vztahy.

𝑻 = [𝑥𝑦𝑧

] (1)

𝑹 = [

𝑐𝑜𝑠 𝛽 𝑐𝑜𝑠 𝛾 𝑐𝑜𝑠 𝛾 𝑠𝑖𝑛 𝛼 𝑠𝑖𝑛 𝛽 − 𝑐𝑜𝑠 𝛼 𝑠𝑖𝑛 𝛾 𝑐𝑜𝑠 𝛼 𝑐𝑜𝑠 𝛾 𝑠𝑖𝑛 𝛽 + 𝑠𝑖𝑛 𝛼 𝑠𝑖𝑛 𝛾𝑐𝑜𝑠 𝛽 𝑠𝑖𝑛 𝛾 𝑐𝑜𝑠 𝛼 𝑐𝑜𝑠 𝛾 + 𝑠𝑖𝑛 𝛼 𝑠𝑖𝑛 𝛽 𝑠𝑖𝑛 𝛾 −𝑐𝑜𝑠 𝛾 𝑠𝑖𝑛 𝛼 + 𝑐𝑜𝑠 𝛼 𝑠𝑖𝑛 𝛽 𝑠𝑖𝑛 𝛾

−𝑠𝑖𝑛 𝛽 𝑐𝑜𝑠 𝛽 𝑠𝑖𝑛 𝛼 𝑐𝑜𝑠 𝛼 𝑐𝑜𝑠 𝛽] (2)

𝑯 = [𝑹 𝑻𝟎 𝑆

] (3)

Kde 𝑻 je matice translace dvou souřadných systémů vůči sobě, 𝑥, 𝑦, 𝑧 jsou vektory translace, 𝑹 je matice

rotace a 𝑆 je měřítko. V našem případě chceme rozměry zachovat, proto volíme 𝑆 = 1.

Převod polohy kamery z počátku do pozice hlavy uživatele Oculusu pak vypočteme jako

𝑷𝟏 = 𝑯𝟏𝟎 ∗ 𝑷𝟎 (4)

𝑷𝒊 = [

𝑥𝑖

𝑦𝑖𝑧𝑖

1

] (5)

Obrázek 2 - Souřadnicový systém Oculus Riftu (shodný s souřad. sys. OpenGL)[6]

Page 5: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

5

Kde 𝑷𝟏 je výsledná poloha kamery, 𝑯𝟏𝟎 je matice homogenní transformace vytvořená z dat z Oculusu a 𝑷𝟎

počátek umístění kamery v rámci souřadného systému rendrované scény.

OpenGL

OpenGL [3] je open source průmyslový standard, který vznikl v roce 1992 pro vývoj 2D a 3D grafických

aplikací. V rámci grafických nástrojů se jedná o nejrozšířenější a nejčastěji používané prostředí, které skrze

své API poskytuje přímý přístup na grafický hardware a umožňuje tak optimalizaci práce s grafikou.

Samotné OpenGL disponuje například také rozšířením do oblasti mobilních zařízení, kde umožňuje

specifický přistup ke tvorbě her na malých méně výkonných zařízeních.

Pro doplnění je možné uvést také standart DirectX, který je úzce vázaný na platformy firmy Microsoft.

Obdobou pro konsorcium Apple je v loňském roce představená technologie Metal. V tomto roce pak byl

uvolněn standard Vulcan v rámci skupiny KHRONOS, který je ve vývoji přímým nástupcem použitého

OpenGL.

Práce s OpenGL

Při práci s OpenGL využíváme několika úrovní knihoven.

Core OpenGL (GL) – sada stovek příkazů pro modelování objektů a geometrických primitiv.

OpenGL Utility Library (GLU) – knihovna zastřešující Core. Zpřístupňuje funkce typu nastavení úhlu

pohledu. Ovládání kamery, nastavení perspektivy, atd.

OpenGL Utilities Toolkit (GLUT) – Zastřešuje celé OpenGL a umožňuje interakci s hostitelským

operačním systémem. Spravuje okna, vytváří most mezi aplikací a OS a izoluje programátora od

specifik konkrétního operačního systému. V rámci této aplikace byla využita knihovna GLFW

#include <windows.h>

#include <GL/glut.h>

void initGL() {

glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // inicializace pozadi

}

void display() {

glClear(GL_COLOR_BUFFER_BIT); // vycisteni barevneho bufferu

glBegin(GL_TRIANGLES); // zacatek kresleni trojuhelniku

glColor3f(0.0f, 0.0f, 1.0f); //volba modre barvy

glVertex2f(0.1f, -0.6f);

glVertex2f(0.7f, -0.6f);

glVertex2f(0.4f, -0.1f);

glEnd();

glFlush(); // Vynuceni vykresleni

}

int main(int argc, char** argv) {

glutInit(&argc, argv);

glutCreateWindow("Demo Okno");

glutInitWindowSize(640, 420);

glutInitWindowPosition(0, 0);

glutDisplayFunc(display);

initGL();

glutMainLoop();

return 0;

}

Kód 1 - Ukázka programu s interakcí s OpenGL [4]

Page 6: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

6

Proces proměny elementárních OpenGL příkazů do obrazu se nazývá rendrování. Pro 3D grafiku pobíhá

v několika následujících krocích.

Zpracování vertexů - výpočet umístění jednotlivých vrcholů geometrických primitiv do

souřadnicového systémů.

Rasterizace – převedení geometrických primitiv do mřížky, která odpovídá pixelům v 3D prostoru.

Zpracování fragmentů – nanesení barvy, běh shaderů

Promítnutí 3D prostoru do 2D zobrazovací roviny.

Pro mapování trojrozměrného prostoru do dvourozměrné roviny zobrazovací jednotky se používá funkce

void gluPerspective(GLdouble fovy, GLdouble aspectRatio, GLdouble zNear, GLdouble zFar);

Vstupními argumenty této funkce jsou FOV (Field of View), tedy vertikální rozpětí zorného pole. Pro Oculus je horizontální rozpětí 110°. To je přepočteno na vertikální poměrem stran obrazovky před jedním okem. Druhým parametrem je poměr stran obrazu. Třetí parametr udává nejkratší vzdálenost, pod kterou nebude zanesené geometrické primitivum vykresleno a na závěr nejvzdálenější hranice vykreslování. Geometrickou interpretací této vykreslované oblasti nazývané “flutsum”. Můžeme si jej představit jako jehlan s osou procházející kamerou a pokračujícím ve smyslu orientace kamery. Doplňkem k gluPerspective je glOrtho, který poskytuje ortogonální pohled na scénu.

Pro přenos obrazové informace mezi OpenGL a Oculusem se používá objekt zvaný Framebuffer. V zjednodušené podobě se jedná o místo v paměti, do kterého jsou lineárně zapisovány barevné, respektive hloubkové informace o vyrendrovaném obraze. Takovýto objekt je předán SDK Oculusu, které programátora odstíní od rutin přístupu na zobrazovací jednotku brýlí.

Implementace řešení

Výsledný program byl vytvořen v jazyce C++ na platformě Windows 10 a to z důvodu, že v současné době

výrobce Oculusu neposkytuje aplikační rozhraní pro jiné operační systémy. Do budoucna však výrobce

přislíbil rozvoj podpory i pro platformy Linuxu a OS X.

Obrázek 3 - Pipeline zpracování grafiky v OpenGL [4]

Obrázek 4 - Projekce 3D prostoru do COP (Center Of Projection) [4]

Page 7: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

7

Vstupní data

Vstupními daty do programu jsou celkem 3 různé datové struktury. První je soubor s příponou .scan. Tento

soubor v sobě nese RAW informace z lidaru o jeho kompletním měření okolí z jednoho bodu. Celkem se

jedná o přibližně 242 000 změřených bodů. Každý bod je přitom popsán X Y Z souřadnicemi vztaženými k

počátku soustavy uprostřed lidaru. Dále format popisuje odrazivost bodu a přesnost s jakou byl bod

změřen. Řádky obsahující znak ‘=’ jsou komentářem.

Druhým forátem je soubor .sbatch. Ten nese informace o homogenních transformacích mezi jednotlivými

počátky měření souborů .sbat. Každý řádek popisuje translaci a rotaci jednoho .sbat souboru.

V rámci projektu byla napsána dodatečně třída, která převádí výše zmíněný formát do binární podoby

souboru .bscan. Ten je načtený do paměti řádově rychleji než zmíněná textová data.

Třetím vstupním formátem jsou soubory typu .og3. Ty jsou výsledkem již zmíněné diplomové práce [1].

Soubor nese informaci o zaplnění prostoru s rastrem 4cm a dále popisuje v daném bodě informaci z RGB

kamery a z termovize o barvě a teplotě. Každý z těchto souborů popisuje prostor v krychli 5.12x5.12x5.12m

a jeho poloha je jednoznačně identifikován svým názvem ve formátu:

[+-]XX,[+-]YY,[+-]ZZ.og3

Kde XX, YY a ZZ jsou násobkem offsetu dané krychle v prostoru, přičemž offset je roven délce hrany

krychle. Formát komprese dat je popsán v následující podkapitole.

K datu odevzdání této práce ještě nebyla třida implementující dekompresi dat z .og3 plně funkční. Program

provádí dekompresi, čtení pravděpodobnosti výskytu objektu v daném bodě, jeho barvu a teplotu. Není ale

funkční správné umístění bodu do prostoru.

Comment=Xcoord;Ycoord;Zcoord;reflection;accuracy

Time=20110906-151554.300

0.1180634;1.499602;0.006971977;0.00390625;0.01

0.1138625;1.488701;0.01753529;0.00390625;0.01

-0.08647966;1.477493;0.2092446;0.00390625;0.01

Kód 2 - Ukázka .scan souboru

Scan-20110906-151554-300.scan;36.282;0;0;180;0;0

Scan-20110906-151554-300x.scan;36.282;0;0;180;0;0

Scan-20110906-151833-580.scan;34.549;0;0;180;0;0

Kód 3 - Ukázka .sbatch souboru

Page 8: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

8

Octree

Octree je stromová datová struktura, která rekurzivně popisuje obsazenost svých jednotlivých subprostorů.

Obrázek 5 - Schématické zázornění Octree [7]

Bázová krychle je rozdělená do osmi sub krychlí, přičemž každé ze zmíněných sub krychlí je specifikováno,

zda celý její prostor je obsazen (stává se koncovým listem), je obsazen částečně, či je prázdný. Pokud je

prostor obsazen částečně, stává se sub krychle krychli bázovou a můžeme rekurzivně zkoumat její obsah.

V případě formátu .og3 v tomto projektu byly všechny data zkomprimována tak, že koncový list byl vždy až

na nejjemnějším rastru, tj. 4cm. Toto však není podmínka nutná a je třeba počítat i s listem libovolné

velikosti.

V rámci [1] je pak popsáno, že za každým koncovým listem se nacházejí v souboru 2 byty dat o jeho

pravděpodobnosti výskytu v tomto místě (v rámci projektu vždy 1), barvě a teplotě.

API pro virtuální realitu

Pro interakci programu, potažmo operačního systému s platformou Oculusu je nutné nainstalovat

výrobcem zdarma dodávané SDK a runtime, které obsahují všechny nezbytné knihovny libOVR.

Po startu programu se nainicializuje spojení s Oculusem funkcí

ovrResult result = ovr_Initialize(nullptr);

V opačném případě se vrací chybová hodnota a program je ukončen. Zároveň s touto funkcí se aktivuje

vnitřní inerciální jednotka brýlí, která zfuzovaná s kamerou sleduje pohyb a orientaci hlavy v prostoru.

Dále funkcí

ovrHmdDesc desc = ovr_GetHmdDesc(ovrSession hmd);

získáme podrobný popis hardwaru a všech jeho technický specifikací, jako jsou rozlišení, zorný úhel,

obnovovací perioda, atd.

Následně se připraví barevný a hloubkový framebuffer s odpovídajícími rozměry a nainicializují se jeho

parametry chování (viz zdrojové kódy v příloze)

Dále se provede .inicializace zobrazovacích konstant vyčtených z deskriptoru hardwaru. Poté následuje

načtení zobrazovaných dat a program pak pokračuje do smyčky, která cyklicki provádí načtení pozice a

orientace brýlí,

ovrTrackingState tracking = ovr_GetTrackingState(hmd, 0, true);

nastavení parametrů scény a kamery, a vykreslí data do framebufferu. Poté se provede se jeho odeslání do

runtime Oculusu.

Page 9: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

9

Demonstrační program

Prvotní záměr byl vytvořit zobrazovací aplikaci v game engine prostředí Unity. To se však posléze ukázalo

jako nereálné, protože engine podporuje maximálně 65 000 objektů ve scéně. To je sice číslo dostatečné

pro vizualizaci podobného prostoru, bylo by však nutné provést redukci polynomů ve scéně a minimalizovat

tak množství zobrazovaných dat, která jsou v současné době zbytnělá. To ale není předmětem tohoto

projektu.

Z výše zmíněného důvodu jsem se vydal cestou tvorby vlastní nízko úrovňové aplikace, která pracuje přímo

s výše zmíněnými OpenGL a libOVR knihovnami.

Výsledkem práce je program napsaný jako projekt ve Visual Studiu, který po startu načte data v

požadovaném rozsahu a formátu, a provede jejich zapsání do paměti, nainicializuje komunikaci s brýlemi

virtuální reality a začne cyklicky vykreslovat uživateli scénu pro každé oko zvlášť.

Diskuze, dosažené výsledky a závěr

V rámci projektu se podařilo vytvořit program na platformě Windows, který dokáže pomocí OpenGL

standardu prostorově zobrazovat vstupní data v brýlích virtuální reality Oculus Rift a poskytnout tak člověku

možnost lepšího pochopení informací se kterými pracuje robot v rámci své mise, či případně si prohlédnout

dříve vytvořenou mapu s trojrozměrným vjemem.

Dále se podařilo vytvořit algoritmy na načítání a dekompresi dvou různých datových formátů, přičemž jeden

z nich obsahuje kromě prostorové kompozice okolí také informace o teplotě a barvě jednotlivých objektů.

Ke dni odevzdání projektu se však ještě nepodařilo dokončit poziční rozložení bodů načtených z .og3

formátu. Tato funkce bude dále dovyvinutá. Ke každému prostorovému bodu je však správně přiřazená jeho

barva a teplota.

Dalším možným pokračování projektu je zaměření se na optimalizaci grafického rendrování dat, protože při

současné práci se stovkami tisíc čtyřcentimetrových bloků ani výkonná herní grafická karta Nvidia řady 960

není schopná vykreslovat obraz v uspokojivé snímkovací frekvenci. Reálně se daří vykreslit přibližně 100 až

150 tisíc bloků, aniž by došlo k nepříjemnému snížení obnovovací frekvence obrazu v brýlích.

Page 10: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

10

Obrázek 7 - Ukázka obrazu vykresleného pro 1 oko z dat z .scan souborů

Obrázek 6 - Chybně rozmístěné barevné bloky z .og3 souborů

Page 11: VIZUALIZACE NAMĚŘENÝCH PROSTOROVÝCH DAT DO …robotika/2016_MRBT/2016_M10_oculus.pdfOpenGL Utility Library (GLU) – knihovna zastřešující ore. Zpřístupňuje funkce typu

11

Literatura

[1] BURIAN, FRANTIŠEK. TVORBA MULTISPEKTRÁLNÍCH MAP V MOBILNÍ ROBOTICE [online]. Brno, 2014 [cit.

2016-05-05]. Dostupné z: https://www.vutbr.cz/www_base/zav_prace_soubor_verejne.php?file_id=93023

[2] History Of Virtual Reality [online]. [cit. 2016-05-05]. Dostupné z: http://www.vrs.org.uk/virtual-

reality/history.html

[3] OpenGL official site [online]. [cit. 2016-05-05]. Dostupné z: https://www.opengl.org

[4] OpenGL Tutorial [online]. [cit. 2016-05-05]. Dostupné z:

https://www3.ntu.edu.sg/home/ehchua/programming/opengl/CG_Introduction.html

[5] [online]. [cit. 2016-05-05]. Dostupné z:

https://d3nevzfk7ii3be.cloudfront.net/igi/in1WqvSDlbQLvTiM.medium

[6] Oculus Rift Developer Documentation [online]. [cit. 2016-05-05]. Dostupné z:

https://developer.oculus.com/documentation/pcsdk/latest/concepts/dg-

sensor/#dg_sensor_position_tracking

[7] Wikipedia [online]. [cit. 2016-05-05]. Dostupné z:

https://upload.wikimedia.org/wikipedia/commons/thumb/2/20/Octree2.svg/958px-Octree2.svg.png