Mobilne Aplikacje Multimedialne Rozszerzona rzeczywistość (AR, Augmented Reality) w Systemie Android Cz.1 Krzysztof Bruniecki
Podstawy Algebra liniowa, operacje na wektorach, macierzach, iloczyn skalarny Geometria rzutu perspektywicznego, współrzędne jednorodne Grafika 3D, macierz rzutu perspektywicznego Układy odniesienia 2
Układ odniesienia związany z urządzeniem mobilnym (b-frame) Z B Y B X B 3
Lokalny układ odniesienia związany bieżącym położeniem (m-frame) 4
Skrętność układów odniesienia Występują dwa niekompatybilne układy odniesienia lewoskrętny prawoskrętny 5
Reguła prawej dłoni 6
Macierz rotacji (1) chcąc dokonać transformacji wektora wyrażonego w b-frame reprezentacji w m-frame można posłużyć się równaniem gdzie omega,fi, kapa, oznaczają elementarne obroty względem osi X, Y oraz Z i kąty, oraz oznaczają odpowiednio pitch, roll oraz heading Mnożenie macierzy R 1, R 2, R 3 nie jest przemienne 7
Macierz rotacji (2) 8
Macierz rotacji (3) Wyprowadzenie pojedynczej składowej 9
Macierz rotacji (4) Algebraiczna reprezentacja macierzy rotacji 10
Macierze rotacji i inklinacji w Androidzie (1) public static boolean getrotationmatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic) Od poziomu 3 API Umożliwia wyznaczenie macierzy inklinacji I jak również macierzy rotacji R transformującej wektor z układu odniesienia związanego z urządzeniem (b-frame) do lokalnego układu odniesienia (m-frame)zdefiniowanego: Oś X jest iloczynem wektorowym Y.Z (styczna do powierzchni Ziemi w miejscu położenia urządzenia, wskazuje w przybliżeniu wschód) Oś Y jest styczny do powierzchni Ziemi w miejscu położenia urządzenia, wskazuje północ magnetyczną Oś Z wskazuje w górę i jest prostopadła do powierzchni Ziemi 11
Macierze rotacji i inklinacji w Androidzie (2) [0 0 g] = R * gravity (g = wartość siły grawitacji) [0 m 0] = I * R * geomagnetic (m = wartość pola geomagnetycznego) R jest macierzą jednostkową w przypadku gdy urządzenie jest położone zgodnie z lokalnym układem odniesienia (m-frame), czyli kiedy? I jest macierzą rotacji reprezentującą inklinację. Wyrównuje wektor geomagnetyczny do płaszczyzny stycznej z powierzchnią Ziemi. Macierz I jest rotacją wokół osi X. Kąt inklinacji może być wyznaczony z użyciem funkcji getinclination(float[]) 12
Rozmiar macierzy rotacji i inklinacji w Androidzie Macierze są zwracane jako macierze o wymiarach 3x3 lub 4x4, zgodnie z wierszową kolejnością: W przypadku macierzy o rozmiarze 4x4: / M[ 0] M[ 1] M[ 2] M[ 3] \ M[ 4] M[ 5] M[ 6] M[ 7] M[ 8] M[ 9] M[10] M[11] \ M[12] M[13] M[14] M[15] / Taka macierz może być wykorzystana w funkcjach OpenGL, np.: glloadmatrixf(float[], int) 13
Rozmiar macierzy rotacji i inklinacji w Androidzie (2) W przypadku macierzy o rozmiarze 3x3: / M[ 0] M[ 1] M[ 2] \ M[ 3] M[ 4] M[ 5] \ M[ 6] M[ 7] M[ 8] / Macierze charakteryzują się tym iż ich transpozycje są zarazem macierzami odwrotnymi Macierze nie nadają się do wykorzystania w przypadkach: swobodnego spadania urządzenia, blisko bieguna magnetycznego, Macierze są obarczone znacznymi błędami gdy gdy urządzenie przyspiesza (np. w samochodzie), w przypadku położenia w bliskim sąsiedztwie silnego pola magnetycznego 14
Macierze rotacji i inklinacji w Androidzie parametry wejściowe R jest to macierz 9 liczb typu float, zawiera macierz rotacji (b-m frame) gdy funkcja wraca, może być null I jest to macierz 9 liczb typu float, zawiera macierz inklinacji gdy funkcja wraca, może być null gravity jest to macierz 3 liczb typu float, zawiera wektor grawitacji wyrażony w układzie urządzenia, można użyć wartości zwróconych przez sensor typu TYPE_ACCELEROMETER geomagnetic jest to macierz 3 liczb typu float, zawiera wektor pola geomagnetycznego wyrażony w układzie urządzenia, można użyć wartości zwróconych przez sensor typu TYPE_MAGNETIC_FIELD Wartość zwracana true w przypadku sukcesu, false w przypadku błędu, czyli kiedy?, w przypadku błędu macierze wejściowe nie są zmieniane 15
Inklinacja magnetyczna (1) Inklinacja magnetyczna inaczej nachylenie magnetyczne jest kątem zawartym pomiędzy wektorem natężenia ziemskiego pola magnetycznego a płaszczyzną horyzontu Inklinacją nazywamy kąt zawarty pomiędzy płaszczyzną poziomą a osią swobodnie zawieszonej igły magnetycznej. Wartość inklinacji zmienia się wraz ze zmianą szerokości geograficznej. W Polsce średnio inklinacja wynosi około +66 (na biegunie magnetycznym 90, na równiku magnetycznym 0 ). Linie łączące na mapie punkty o jednakowej inklinacji nazywamy izoklinami. 16
Inklinacja magnetyczna (2) 17
Omówienie zadań laboratoryjnych (1) Z wykorzystaniem metody public static boolean getrotationmatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic) Zaimplementować mechanizm przeliczania dowolnego wektora wyrażonego w układzie odniesienia związanym z urządzeniem do lokalnego układu odniesienia związanego z bieżącym położeniem względem Ziemi Wektor wejściowy powinien być podawany przy użyciu interfejsu użytkownika zbudowanego ze standardowych kontrolek (3 x EditText + Button). Wektor wyjściowy powinien być wyświetlany w polu TextView 18
Wyniki rotacji wektora Urządzenie zorientowane zgodnie z lokalnym układem odniesienia Urządzenie zorientowane dowolnie 19