Mobilne Aplikacje Multimedialne

Transkrypt

Mobilne Aplikacje Multimedialne
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
autor: Krzysztof Bruniecki
2
Układ odniesienia związany z
urządzeniem mobilnym (b-frame)
ZB
YB
XB
autor: Krzysztof Bruniecki
3
Lokalny układ odniesienia związany
bieżącym położeniem (m-frame)
autor: Krzysztof Bruniecki
4
Skrętność układów odniesienia
Występują dwa
„niekompatybilne”
układy odniesienia
lewoskrętny
prawoskrętny
autor: Krzysztof Bruniecki
5
Reguła prawej dłoni
autor: Krzysztof Bruniecki
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 R1, R2, R3 nie jest przemienne
autor: Krzysztof Bruniecki
7
Macierz rotacji (2)
autor: Krzysztof Bruniecki
8
Macierz rotacji (3)
Wyprowadzenie
pojedynczej składowej
autor: Krzysztof Bruniecki
9
Macierz rotacji (4)
Algebraiczna reprezentacja macierzy rotacji
autor: Krzysztof Bruniecki
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
autor: Krzysztof Bruniecki
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[])
autor: Krzysztof Bruniecki
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)
autor: Krzysztof Bruniecki
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
autor: Krzysztof Bruniecki
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
autor: Krzysztof Bruniecki
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.
autor: Krzysztof Bruniecki
16
Inklinacja magnetyczna (2)
autor: Krzysztof Bruniecki
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
autor: Krzysztof Bruniecki
18
Wyniki rotacji wektora
Urządzenie zorientowane zgodnie z lokalnym
układem odniesienia
autor: Krzysztof Bruniecki
Urządzenie
zorientowane dowolnie
19