Typy czujników

W tej sekcji opisano osie czujników, czujniki podstawowe i złożone (aktywność, orientacja, brak kalibracji i interakcji).

Osie czujnika

Wartości zdarzeń czujników pochodzące z wielu czujników są wyrażane w ramach określonej klatki, która jest statyczna w stosunku do urządzenia.

Osie urządzenia mobilnego

Interfejs Sensor API jest względny tylko do naturalnej orientacji ekranu (osi nie są zamieniane, gdy zmienia się orientacja ekranu urządzenia).

System koordynacji interfejsu API czujników na urządzeniach mobilnych

Rysunek 1. Układ współrzędnych (względem urządzenia mobilnego) używany przez interfejs Sensor API

Osie samochodowe

W implementacjach Androida Automotive osie są definiowane w stosunku do ramy nadwozia pojazdu. Początkiem układu odniesienia pojazdu jest środek tylnej osi. Układ odniesienia pojazdu jest zorientowany tak, aby:

  • Oś X wskazuje w prawo i jest położona poziomo, prostopadle do płaszczyzny symetrii pojazdu.
  • Oś Y jest skierowana do przodu i znajduje się na płaszczyźnie poziomej.
System współrzędnych interfejsu API czujnika w przypadku urządzeń motoryzacyjnych

Rysunek 2. Układ współrzędnych (względem urządzenia samochodowego) używany przez interfejs Sensor API

Układ odniesienia pojazdu jest układem współrzędnych prawoskrętnych. Dlatego oś Z jest skierowana do góry.

Oś Z układu odniesienia jest wyrównana do siły grawitacji, co oznacza, że oś X i Y są poziome. W związku z tym oś Y może nie zawsze przechodzić przez oś przednią.

Czujniki bazowe

Podstawowe typy czujników są nazywane tak samo jak reprezentowane przez nie fizyczne czujniki. Te czujniki przekazują dane z pojedynczego czujnika fizycznego (w przeciwieństwie do czujników złożonych, które generują dane z innych czujników). Przykłady typów czujników podstawowych:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

Czujniki podstawowe nie są jednak tożsame z podstawowymi czujnikami fizycznymi i nie należy ich mylić. Dane z czujnika podstawowego nie są nieprzetworzonym wyjściem z czujnika fizycznego, ponieważ zostały zastosowane korekty (np. korekta błędów i kompensacja temperatury).

Na przykład właściwości czujnika podstawowego mogą się różnić od właściwości fizycznego czujnika w ramach tych przypadków użycia:

  • Element żyroskopu o szerokości zakresu błędu 1 deg/s.
    • Po kalibracji fabrycznej i zaaplikowaniu kompensacji temperatury oraz kompensacji błędów rzeczywisty błąd czujnika Androida zostanie zmniejszony, być może do poziomu, w którym błąd będzie niższy niż 0, 01 stopnia na sekundę.
    • W takiej sytuacji mówimy, że czujnik na Androidzie ma odchylenie mniejsze niż 0,01 stopnia na sekundę, mimo że w arkuszu danych podrzędnego czujnika podano wartość 1 stopnia na sekundę.
  • Barometr o poborze mocy 100 µW.
    • Generowane dane muszą być przesyłane z chipa do układu SoC, więc rzeczywiste koszty energii na zbieranie danych z czujnika barometru Androida mogą być znacznie wyższe, na przykład 1000 µW.
    • W tej sytuacji mówimy, że pobór mocy czujnika Androida wynosi 1000 µW, mimo że pobór mocy zmierzony na przewodach układu barometrycznego wynosi 100 µW.
  • Magnetometr, który po kalibracji zużywa 100 µW, ale podczas kalibracji zużywa więcej energii.
    • Rutyna kalibracji może wymagać aktywacji żyroskopu, co zużywa 5000 uW, oraz uruchomienia jakiegoś algorytmu, co kosztuje kolejne 900 uW.
    • W tej sytuacji maksymalne zużycie energii przez czujnik Androida (magnetometr) wynosi 6000 uW.
    • W tym przypadku średnie zużycie energii jest bardziej przydatnym wskaźnikiem. To właśnie jest podawane w charakterystyce statycznej czujnika w interfejsie HAL.

Akcelerometr

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) zwraca czujnik bez funkcji budzenia

Akcelerometr rejestruje przyspieszenie urządzenia wzdłuż 3 osi czujnika. Zmierzone przyspieszenie obejmuje zarówno przyspieszenie fizyczne (zmianę prędkości), jak i przyspieszenie grawitacyjne. Pomiar jest raportowany w polach x, y i z w kolumnie sensors_event_t.acceleration.

Wszystkie wartości są podawane w jednostkach SI (m/s^2) i mierzą przyspieszenie urządzenia pomniejszone o siły grawitacyjne wzdłuż 3 osi czujnika.

Oto przykłady:

  • Norma (x, y, z) powinna być zbliżona do 0 podczas swobodnego spadania.
  • Gdy urządzenie leży na stole i jest popychane w stronę prawą, wartość przyspieszenia x jest dodatnia.
  • Gdy urządzenie leży na stole, wartość przyspieszenia wzdłuż osi z wynosi +9,81 alo, co odpowiada przyspieszeniu urządzenia (0 m/s²) pomniejszonemu o siła grawitacji (-9,81 m/s²).
  • Gdy urządzenie leży na stole i jest popychane w kierunku nieba, wartość przyspieszenia jest większa niż +9,81, co odpowiada przyspieszeniu urządzenia (+A m/s^2) pomniejszemu o siły grawitacji (-9,81 m/s^2).

Wyniki są kalibrowane za pomocą:

  • Kompensacja temperatury
  • Kalibracja online z uwzględnieniem stronniczości
  • Kalibracja wagi online

Kalibracja błędów i skali musi być aktualizowana tylko wtedy, gdy czujnik jest dezaktywowany, aby uniknąć skoków wartości podczas przesyłania strumieniowego.

Przyspieszeniomierz podaje też dokładność odczytów w wartości sensors_event_t.acceleration.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w konstantach SensorManager  SENSOR_STATUS_*.

temperatura otoczenia;

Tryb raportowania: przy zmianie

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) zwraca czujnik bez funkcji budzenia

Ten czujnik mierzy temperaturę otoczenia (w pomieszczeniu) w stopniach Celsjusza.

Czujnik pola magnetycznego

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) zwraca czujnik bez funkcji budzenia

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

Czujnik pola magnetycznego (zwany też magnetometrem) przekazuje informacje o polu magnetycznym otoczenia zmierzonym wzdłuż 3 osi czujnika.

Pomiar jest raportowany w polach x, y i z w ramach sensors_event_t.magnetic, a wszystkie wartości są podawane w mikroteslach (uT).

Magnetometer podaje też dokładność odczytów w wartości sensors_event_t.magnetic.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w konstantach SensorManager SENSOR_STATUS_*.

Wyniki są kalibrowane za pomocą:

  • Kompensacja temperatury
  • kalibracja żelazka w fabryce (lub online);
  • Kalibracja online żelaza

Żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) zwraca czujnik bez funkcji budzenia

Czujnik żyroskopowy podaje szybkość obrotu urządzenia wokół 3 osi.

Obrócenie w zależności od kierunku ruchu wskazówek zegara (reguła prawej ręki). Oznacza to, że obserwator patrzący z poziomu dodatniego na osi X, Y lub Z na urządzenie znajdujące się w początku układu współrzędnych odnotowałby dodatnie obracanie się urządzenia, gdyby wydawało mu się, że obraca się ono w przeciwnym kierunku do ruchu wskazówek zegara. Pamiętaj, że jest to standardowa definicja matematyczna pozytywnej rotacji i nie zgadza się z definicją lotniczą przechylenia.

Pomiar jest raportowany w polach x, y i z w sensors_event_t.gyro. Wszystkie wartości są podawane w radianach na sekundę (rad/s).

Wyniki są kalibrowane za pomocą:

  • Kompensacja temperatury
  • Kompensacja za skalowanie fabryczne (lub online)
  • kalibracja online (w celu usunięcia dryftu);

Żyroskop podaje też dokładność odczytów w ramach sensors_event_t.gyro.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w konstantach SensorManager SENSOR_STATUS_*.

Żyroskopu nie można emulować na podstawie magnetometru i akcelerometru, ponieważ spowodowałoby to zmniejszenie spójności i szybkości działania na poziomie lokalnym. Musi być oparty na zwykłym układzie żyroskopu.

Tętno

Tryb raportowania: przy zmianie

getDefaultSensor(SENSOR_TYPE_HEART_RATE) zwraca czujnik bez funkcji budzenia

Czujnik tętna informuje o aktualnym tętnie osoby dotykającej urządzenia.

Obecne tętno w uderzeniach na minutę (BPM) jest wyświetlane w sensors_event_t.heart_rate.bpm, a stan czujnika – w sensors_event_t.heart_rate.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w konstantach SensorManager SENSOR_STATUS_*. W szczególności przy pierwszej aktywacji, o ile nie wiadomo, że urządzenie nie znajduje się na ciele, pole stanu pierwszego zdarzenia musi mieć wartość SENSOR_STATUS_UNRELIABLE. Ponieważ ten czujnik jest aktywny, zdarzenia są generowane tylko wtedy, gdy heart_rate.bpm lub heart_rate.status zmieniły się od ostatniego zdarzenia. Zdarzenia są generowane nie szybciej niż co sampling_period.

sensor_t.requiredPermission jest zawsze SENSOR_PERMISSION_BODY_SENSORS.

Jasny

Tryb raportowania: Zmiana

getDefaultSensor(SENSOR_TYPE_LIGHT) zwraca czujnik niewybudzający

Czujnik światła podaje aktualne natężenie oświetlenia w jednostkach SI luksów.

Pomiar jest raportowany w strumieniu sensors_event_t.light.

Bliskość

Tryb raportowania: Zmiana

Zwykle definiowany jako czujnik pobudki

getDefaultSensor(SENSOR_TYPE_PROXIMITY) zwraca czujnik wybudzania

Czujnik zbliżeniowy podaje odległość od czujnika do najbliższej widocznej powierzchni.

Do Androida 4.4 czujniki zbliżeniowe były zawsze czujnikami aktywującymi, które aktywowały SoC po wykryciu zmiany odległości. W przypadku Androida 4.4 zalecamy najpierw zaimplementowanie wersji tego czujnika służącej do aktywacji, ponieważ to ona służy do włączania i wyłączania ekranu podczas wykonywania połączeń telefonicznych.

Wymiar jest podany w centymetrach w sensors_event_t.distance. Pamiętaj, że niektóre czujniki zbliżeniowe obsługują tylko binarne pomiary „blisko” lub „daleko”. W tym przypadku czujnik podaje wartość sensor_t.maxRange w stanie „daleko” oraz wartość mniejszą niż sensor_t.maxRange w stanie „blisko”.

Ciśnienie

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_PRESSURE) zwraca czujnik niewybudzający

Czujnik ciśnienia (zwanym też barometrem) podaje ciśnienie atmosferyczne w hektopaskale (hPa).

Wyniki są kalibrowane za pomocą

  • Kompensacja temperatury
  • Kalibracja fabryczna
  • Kalibracja wagi fabrycznej

Barometr jest często używany do szacowania zmian wysokości. Aby oszacować bezwzględną wysokość, należy użyć ciśnienia na poziomie morza (zmieniającego się w zależności od pogody) jako wartości referencyjnej.

Wilgotność względna

Tryb raportowania: Zmiana

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) zwraca czujnik niewybudzający

Czujnik wilgotności względnej mierzy wilgotność względną powietrza otoczenia i zwraca wartość w procentach.

Typy złożonych czujników

Czujnik złożony generuje dane przez przetwarzanie lub łączenie danych z jednego lub kilku czujników fizycznych. (każdy czujnik, który nie jest czujnikiem podstawowym, nazywany jest czujnikiem złożonym). Przykłady czujników złożonych:

  • Detektor krokówdetektor znacznego ruchu, które zwykle działają na podstawie akcelerometru, ale mogą też korzystać z innych czujników, jeśli pobór mocy i dokładność są do zaakceptowania.
  • Wektor obrotu gry na podstawie akcelerometru i żyroskopu.
  • Żyroskop bez kalibracji, który jest podobny do czujnika podstawy żyroskopu, ale z kalibracją biasu zgłaszaną osobno zamiast być korygowana w pomiarach.

Podobnie jak w przypadku czujników podstawowych, właściwości czujników złożonych pochodzą z właściwości ich danych końcowych. Na przykład zużycie energii wektora obrotu w grze jest prawdopodobnie równe sumie zużycia energii przez układ akcelerometru, układ żyroskopu, układ przetwarzania danych i szyny przesyłające dane. Innym przykładem jest dryft wektora obrotu gry, który zależy zarówno od jakości algorytmu kalibracji, jak i od właściwości fizycznych czujnika.

W tabeli poniżej znajdziesz dostępne typy czujników złożonych. Każdy czujnik złożony korzysta z danych z jednego lub kilku czujników fizycznych. Unikaj wybierania innych czujników fizycznych, aby uzyskać przybliżone wyniki, ponieważ powoduje to niewygodę dla użytkownika.

Typ czujnika Kategoria Podstawowe czujniki fizyczne Tryb raportowania

Wektor rotacji gry

Postawa

Akcelerometr, żyroskop – NIE UŻYWAĆ magnetometru

Ciągły

Wektor rotacji geomagnetycznej czujnik mocy o niskiej mocy;

Postawa

Akcelerometr, magnetometr, NIE UŻYWAĆ żyroskopu

Ciągły

Gest rzut oka Czujnik o niskim poborze mocy

Interakcja

Niezdefiniowana

One-Shot

Grawitacja

Postawa

akcelerometr, żyroskop (jeśli jest dostępny) lub magnetometr (jeśli żyroskop jest niedostępny).

Ciągły

Żyroskop nieskalibrowany

Nieskalibrowany

Żyroskop

Ciągły

Przyspieszenie liniowe

Aktywność

akcelerometr, żyroskop (jeśli jest dostępny) lub magnetometr (jeśli żyroskop jest niedostępny).

Ciągły

pole magnetyczne nieskalibrowane,

Nieskalibrowany

Magnetometr

Ciągły

Orientacja (wycofana)

Postawa

akcelerometr, magnetometr, żyroskop (jeśli jest dostępny).

Ciągły

Gest odbioru Czujnik o niskim poborze mocy

Interakcja

Niezdefiniowana

One-shot

Wektor obrotu

Postawa

Akcelerometr, magnetometr, żyroskop

Ciągły

Istotny ruch Czujnik o niskim poborze mocy

Aktywność

akcelerometr (lub inny, o bardzo niskim poborze mocy).

One-shot

Licznik kroków Czujnik o niskim poborze mocy

Aktywność

Akcelerometr

W trakcie zmiany

Detektor schodów Czujnik o niskim poborze mocy

Aktywność

Akcelerometr

Specjalny

Wykrywacz pochylenia Czujnik o niskim poborze mocy

Aktywność

Akcelerometr

Specjalny

Gest wybudzania Czujnik o niskim poborze mocy

Interakcja

Niezdefiniowana

One-shot

Czujnik o niskim poborze mocy = czujnik o niskim poborze mocy

Czujniki złożone aktywności

Przyspieszenie liniowe

Podstawowe czujniki fizyczne: akcelerometr i (jeśli jest dostępny) żyroskop (lub magnetometr, jeśli nie ma żyroskopu).

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) zwraca czujnik niewybudzający

Czujnik przyspieszenia liniowego podaje przyspieszenie liniowe urządzenia w ramce czujnika, nie uwzględniając przyspieszenia ziemskiego.

Ogólnie rzecz biorąc, dane wyjściowe to dane z akcelerometru pomniejszone o dane z czujnika grawitacyjnego. Wartość ta jest podawana w m/s^2 w polach x, y i z w metryczce sensors_event_t.acceleration.

Gdy urządzenie jest nieruchome, odczyty na wszystkich osiach powinny być zbliżone do 0.

Jeśli urządzenie ma żyroskop, czujnik przyspieszenia liniowego musi używać jako danych wejściowych żyroskopu i akcelerometru.

Jeśli urządzenie nie ma żyroskopu, czujnik przyspieszenia liniowego musi używać akcelerometru i magnetometru jako danych wejściowych.

znaczący ruch;

Podstawowy czujnik fizyczny: akcelerometr (lub inny, o niskim poborze mocy).

Tryb raportowania: jednokrotny.

Niski poziom energii

Wdrożyć tylko wersję tego czujnika, która umożliwia jego aktywację.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) zwraca czujnik wybudzania

Detektor znaczącego ruchu uruchamia się, gdy wykryje znaczący ruch, czyli taki, który może spowodować zmianę lokalizacji użytkownika.

Przykłady takich znaczących ruchów:

  • pieszo lub rowerem;
  • Siedzenie w samochodzie, autokarze lub pociągu

Przykłady sytuacji, które nie powodują wykrycia znacznego ruchu:

  • Telefon w kieszeni i osoba nieruchoma
  • Telefon leży na stole, który lekko się trzęsie z powodu ruchu ulicznego lub pralki.

Ogólnie rzecz biorąc, czujnik ruchu jest używany do zmniejszenia poboru mocy na potrzeby określania lokalizacji. Gdy algorytmy lokalizacji wykryją, że urządzenie jest nieruchome, mogą przełączyć się w tryb niskiego poboru mocy, w którym korzystają z znaczącego ruchu, aby włączyć urządzenie, gdy użytkownik zmienia lokalizację.

Ten czujnik musi być niskonapięciowy. W tym trybie zużycie energii jest mniejsze, ale może to powodować niewielkie ilości wyników fałszywie negatywnych. Robimy to z kilku powodów:

  • Celem tego czujnika jest oszczędzanie energii.
  • Wywoływanie zdarzenia, gdy użytkownik się nie porusza (fałszywie pozytywny wynik), jest kosztowne pod względem zapotrzebowania na moc, dlatego należy tego unikać.
  • Nieuruchamianie zdarzenia, gdy użytkownik się przemieszcza (fałszywie negatywny wynik) jest dopuszczalne, o ile nie jest wykonywane wielokrotnie. Jeśli użytkownik szedł przez 10 sekund, nie wywołanie zdarzenia w ciągu tych 10 sekund jest niedopuszczalne.

Każde zdarzenie czujnika jest rejestrowane w sensors_event_t.data[0] jako 1.

Detektor kroków

Podstawowy czujnik fizyczny: akcelerometr (+ inne, o ile mają niskie zużycie energii)

Tryb raportowania: Specjalny (jedno zdarzenie na każdy wykonany krok)

Niski poziom energii

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) zwraca czujnik bez funkcji budzenia

Detektor kroków generuje zdarzenie za każdym razem, gdy użytkownik wykona krok.

Sygnatura czasowa zdarzenia sensors_event_t.timestamp odpowiada chwili, w której stopa dotyka podłoża, co powoduje dużą zmienność przyspieszenia.

W porównaniu z licznikiem kroków licznik kroków powinien mieć krótszy czas oczekiwania (mniej niż 2 sekundy). Zarówno licznik kroków, jak i detektor kroków wykrywają, kiedy użytkownik chodzi, biega i wchodzi po schodach. Nie powinny aktywować się, gdy użytkownik jeździ na rowerze, samochodem lub innym pojazdem.

Ten czujnik musi być niskonapięciowy. Oznacza to, że jeśli wykrywanie kroków nie jest możliwe na poziomie sprzętu, nie należy definiować tego czujnika. W szczególności, gdy czujnik kroków jest włączony, a przyspieszeniomierz nie działa, przerwy powinny być wywoływane tylko przez kroki (a nie każde odczyty przyspieszeniomierza).

sampling_period_ns nie ma wpływu na liczniki kroków.

Każde zdarzenie czujnika jest rejestrowane w sensors_event_t.data[0] jako 1.

Licznik kroków

Podstawowy czujnik fizyczny: akcelerometr (+ inne, o ile mają niskie zużycie energii).

Tryb raportowania: Zmiana

Niski poziom energii

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) zwraca czujnik bez funkcji budzenia

Licznik kroków podaje liczbę kroków wykonanych przez użytkownika od ostatniego ponownego uruchomienia urządzenia, gdy licznik był włączony.

Pomiar jest raportowany jako uint64_tsensors_event_t.step_counter i zostaje wyzerowany tylko po ponownym uruchomieniu systemu.

Czas zdarzenia to czas wykonania ostatniego kroku w ramach tego zdarzenia.

Informacje o czasie wykonania kroku znajdziesz w typie czujnika Step detector.

W porównaniu z detektorem kroków licznik kroków może mieć dłuższy czas reakcji (do 10 sekund). Dzięki temu opóźnieniu czujnik ma wysoką dokładność. Liczba kroków po pełnym dniu pomiarów powinna mieścić się w 10% zakresie rzeczywistej liczby kroków. Zarówno wykrywacz kroków, jak i licznik kroków wykrywają, kiedy użytkownik idzie, biega i wchodzi po schodach. Nie powinny się aktywować, gdy użytkownik jeździ na rowerze, samochodem lub innym pojazdem.

Sprzęt musi zapewnić, że wewnętrzna liczba kroków nigdy nie przekroczy wartości maksymalnej. Minimalny rozmiar wewnętrznego licznika sprzętowego to 16 bitów. W przypadku zbliżającego się przepełnienia (co najwyżej co około 2 16 kroków) SoC może zostać uaktywniony, aby sterownik mógł przeprowadzić konserwację licznika.

Jak opisano w sekcji Interakcja, podczas działania tego czujnika nie może on zakłócać działania innych czujników, w szczególności akcelerometru, który może być używany.

Jeśli konkretne urządzenie nie obsługuje tych trybów działania, to interfejs HAL nie może zgłaszać tego typu czujnika. Oznacza to, że nie można „zasymulować” tego czujnika w HAL.

Ten czujnik musi być niskonapięciowy. Oznacza to, że jeśli wykrywanie kroków nie jest możliwe na poziomie sprzętu, nie należy definiować tego czujnika. W szczególności, gdy licznik kroków jest włączony, a akcelerometr nie jest, przerwy powinny być wywoływane tylko przez kroki (a nie dane z akcelerometru).

Detektor przechyłu

Podstawowy czujnik fizyczny: akcelerometr (+ inne, o ile mają niskie zużycie energii)

Tryb raportowania: Specjalny

Niski poziom energii

Wdrożyć tylko wersję tego czujnika, która umożliwia jego aktywację.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) zwraca czujnik wybudzania

Detektor przechylenia generuje zdarzenie za każdym razem, gdy zostanie wykryte przechylenie.

Zdarzenie przechylenia jest zdefiniowane przez kierunek zmiany średniej siły grawitacji w oknie 2-sekundowym o co najmniej 35 stopni od momentu aktywacji lub ostatniego zdarzenia wygenerowanego przez czujnik. Oto algorytm:

  • reference_estimated_gravity = średnia z pomiary akcelerometru w pierwszej sekundzie po aktywacji lub szacunkowa wartość przyspieszenia grawitacyjnego w momencie wygenerowania ostatniego zdarzenia pochylenia.
  • current_estimated_gravity = średnia z pomiarów akcelerometru w ciągu ostatnich 2 sekund.
  • Wywołuj, gdy angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

Duże przyspieszenia bez zmiany orientacji telefonu nie powinny powodować zdarzenia przechylenia. Na przykład ostre skręcanie kierownicą lub mocne przyspieszanie podczas jazdy samochodem nie powinny powodować zdarzenia przechylenia, mimo że kąt przyspieszenia średniego może się zmieniać o ponad 35 stopni. Zwykle ten czujnik jest implementowany tylko za pomocą akcelerometru. Można też używać innych czujników, jeśli nie zwiększają one znacząco zużycia energii. Jest to czujnik o niskim poborze mocy, który powinien umożliwić procesowi SoC przejście w tryb zawieszenia. Nie emuluj tego czujnika w HAL. Każde zdarzenie czujnika jest rejestrowane w 1sensors_event_t.data[0].

Czujniki złożone dotyczące orientacji

Wektor obrotu

Podstawowe czujniki fizyczne: akcelerometr, magnetometr i żyroskop

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) zwraca czujnik bez funkcji budzenia

Czujnik wektor obrotu informuje o orientacji urządzenia względem układu współrzędnych Wschód-Północ-W górę. Zwykle jest ona uzyskiwana przez zintegrowanie odczytów z akcelerometru, żyroskopu i magnetometru. System współrzędnych Wschód-Północ-W górę jest zdefiniowany jako bezpośrednia baza ortonormalna, w której:

  • X wskazuje na wschód i jest styczny do ziemi.
  • Y wskazuje na północ i jest styczny do ziemi.
  • Z wskazuje niebo i jest prostopadły do ziemi.

Orientacja telefonu jest reprezentowana przez obrót potrzebny do dopasowania współrzędnych Wschód-Północ-W górę do współrzędnych telefonu. Oznacza to, że zastosowanie obrotu do ramki świata (X,Y,Z) dopasowuje je do współrzędnych telefonu (x,y,z).

Obracanie można rozumieć jako obracanie telefonu o kąt teta wokół osi rot_axis, aby przejść od orientacji odniesienia (wyrównanej na wschód, północ i górę) do bieżącej orientacji urządzenia. Obrót jest kodowany jako 4 bezwymiarowe komponenty x, y, z, w jednostkowego kwadratu:

  • sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
  • sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
  • sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
  • sensors_event_t.data[3] = cos(theta/2)

Gdzie:

  • Pola x, y i z obiektu rot_axis to współrzędne wschód-północ-góra wektora jednostkowego długości, który reprezentuje oś obrotu.
  • theta to kąt obrotu

Kwaternion jest jednostkowym kwaternionem: musi mieć normę 1. Jeśli tego nie zrobisz, może to spowodować nieprawidłowe działanie klienta.

Ten czujnik podaje też szacowaną dokładność kursu:

sensors_event_t.data[4] = estimated_accuracy (w radianach)

Błąd nagłówka musi być mniejszy niż estimated_accuracy w 95% przypadków. Ten czujnik musi używać żyroskopu jako głównego wejścia zmiany orientacji.

Ten czujnik wykorzystuje też dane z akcelerometru i magnetometru, aby kompensować dryft żyroskopu. Nie można go zaimplementować, używając tylko akcelerometru i magnetometru.

Wektor rotacji gry

Podstawowe czujniki fizyczne: akcelerometr i żyroskop (bez magnetometru).

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) zwraca czujnik niewybudzający

Sensor wektora obrotu w grze jest podobny do sensora wektora obrotu, ale nie wykorzystuje pola geomagnetycznego. Dlatego oś Y nie wskazuje na północ, ale na inny punkt odniesienia. Ten punkt odniesienia może się przesuwać o ten sam rząd wielkości co przesuwanie się żyroskopu wzdłuż osi Z.

Szczegółowe informacje o ustawianiu sensors_event_t.data[0-3] znajdziesz w sekcji dotyczącej czujnika Wektor obrotu. Ten czujnik nie przekazuje szacowanej dokładności kursu: sensors_event_t.data[4] jest zarezerwowany i powinien być ustawiony na 0.

W idealnym przypadku telefon, który został obrócony i zwrócony do tej samej orientacji w rzeczywistości, powinien zgłaszać ten sam wektor obrotu w grze.

Ten czujnik musi być oparty na żyroskopie i akcelerometrze. Nie może używać magnetometru jako danych wejściowych, z wyjątkiem pośredniego szacowania na podstawie błędu żyroskopu.

Grawitacja

Podstawowe czujniki fizyczne: akcelerometr i (jeśli jest dostępny) żyroskop (lub magnetometr, jeśli nie ma żyroskopu).

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_GRAVITY) zwraca czujnik niewybudzający

Czujnik grawitacji informuje o kierunku i wielkości przyciągania grawitacyjnego w uwzględnieniu współrzędnych urządzenia.

Składowe wektora grawitacyjnego są podawane w jednostkach m/s^2 w polach x, y i z w elementach sensors_event_t.acceleration.

Gdy urządzenie jest nieruchome, dane z czujnika grawitacyjnego powinny być identyczne z danymi z akcelerometru. Na Ziemi przyspieszenie ziemskie wynosi około 9, 8 m/s^2.

Jeśli urządzenie ma żyroskop, czujnik przyspieszenia musi używać jako danych wejściowych żyroskopu i akcelerometru.

Jeśli urządzenie nie ma żyroskopu, czujnik grawitacji musi używać akcelerometru i magnetometru jako danych wejściowych.

Wektor rotacji geomagnetycznej

Podstawowe czujniki fizyczne: akcelerometr i magnetometr (bez żyroskopu)

Tryb raportowania: ciągły.

Niski poziom energii

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) zwraca czujnik niewybudzający

Wektor obrotu geomagnetycznego jest podobny do czujnika wektora obrotu, ale wykorzystuje magnetometr, a nie żyroskop.

Ten czujnik musi być oparty na magnetomierzu. Nie można go zaimplementować za pomocą żyroskopu, a ten czujnik nie może używać danych z żyroskopu.

Szczegółowe informacje o ustawianiu sensors_event_t.data[0-4] znajdziesz w sekcji dotyczącej czujnika Wektor obrotu.

Podobnie jak w przypadku czujnika wektora obrotu, błąd kursu musi być mniejszy od szacowanej dokładności (sensors_event_t.data[4]) w 95% przypadków.

Czujnik musi zużywać niewiele energii, dlatego musi być wbudowany w sprzęt.

Orientacja (wycofana)

Podstawowe czujniki fizyczne: akcelerometr, magnetometr i (jeśli jest dostępny) żyroskop.

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_ORIENTATION) zwraca czujnik niewybudzający

Uwaga: jest to starszy typ czujnika, który został wycofany z pakietu Android SDK. Został on zastąpiony przez czujnik wektora obrotu, który jest lepiej zdefiniowany. W miarę możliwości używaj czujnika wektora obrotu zamiast czujnika orientacji.

Czujnik orientacji informuje o orientacji urządzenia. Pomiary są raportowane w stopniach w kolumnach x, y i z w pliku sensors_event_t.orientation:

  • sensors_event_t.orientation.x: azymut, kąt między kierunkiem magnetycznego północy a osią Y, wokół osi Z (0<=azimuth<360). 0=północ, 90=wschód, 180=południe, 270=zachód.
  • sensors_event_t.orientation.y: pochylenie, obrót wokół osi X (-180<=pitch<=180), wartości dodatnie, gdy oś Z przesuwa się w kierunku osi Y.
  • sensors_event_t.orientation.z: obrót wokół osi Y (-90<=roll<=90), z dodatnimi wartościami, gdy oś X przesuwa się w kierunku osi Z.

Ze względów historycznych kąt przechylenia jest dodatni w kierunku zgodnym z kierunkiem ruchu wskazówek zegara. (z matematycznego punktu widzenia powinien być dodatni w kierunku przeciwnym do ruchu wskazówek zegara):

Ilustracja orientacji względem urządzenia

Rysunek 3. Orientacja względem urządzenia

Ta definicja różni się od skrętu, pochylenia i oscylacji stosowanych w lotnictwie, gdzie oś X jest równoległa do długiej krawędzi samolotu (od ogona do nosa).

Czujnik orientacji podaje też, jak dokładne są jego odczyty, za pomocą wartości sensors_event_t.orientation.status. Więcej informacji o możliwych wartościach tego pola znajdziesz w konstantach SensorManager  SENSOR_STATUS_*.

Nieskalibrowane czujniki

Nieskalibrowane czujniki zapewniają bardziej surowe wyniki i mogą zawierać pewne odchylenia, ale również mniej „przeskoków” wynikających z poprawek wprowadzonych podczas kalibracji. Niektóre aplikacje mogą preferować te wyniki bez kalibracji, ponieważ są one płynniejsze i bardziej niezawodne. Jeśli na przykład aplikacja próbuje przeprowadzić własną fuzje czujników, wprowadzenie kalibracji może spowodować zniekształcenie wyników.

Akcelerometr nieskalibrowany

Ukryty czujnik fizyczny: akcelerometr

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) zwraca czujnik bez funkcji budzenia

Nieskalibrowany czujnik przyspieszenia podaje przyspieszenie urządzenia wzdłuż 3 osi czujnika bez żadnej korekty błędów (do nieskalibrowanych pomiarów stosuje się fabryczne wartości błędów i kompensację temperatury) wraz z szacowaną wartością błędów. Wszystkie wartości są podawane w jednostkach SI (m/s^2) i są raportowane w polach sensors_event_t.uncalibrated_accelerometer:

  • x_uncalib: przyspieszenie (bez kompensacji błędów) wzdłuż osi X
  • y_uncalib: przyspieszenie (bez kompensacji błędów) na osi Y
  • z_uncalib: przyspieszenie (bez kompensacji błędów) na osi Z
  • x_bias: szacowana tendencja na osi X
  • y_bias: szacowana tendencja na osi Y
  • z_bias: oszacowany bias na osi Z

nieskalibrowany żyroskop;

Ukryty czujnik fizyczny: żyroskop

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) zwraca czujnik bez funkcji budzenia

Nieskalibrowany żyroskop podaje szybkość obrotu wokół osi czujnika bez stosowania kompensacji błędów, a także szacuje błąd. Wszystkie wartości są podawane w radianach na sekundę i są raportowane w polach wymiaru sensors_event_t.uncalibrated_gyro:

  • x_uncalib: prędkość kątowa (bez kompensacji dryftu) wokół osi X
  • y_uncalib: prędkość kątowa (bez kompensacji dryfu) wokół osi Y
  • z_uncalib: prędkość kątowa (bez kompensacji dryfu) wokół osi Z
  • x_bias: szacunkowa odchyłka wokół osi X
  • y_bias: szacunkowa odchyłka wokół osi Y
  • z_bias: szacunkowa odchyłka wokół osi Z

Koncepcyjnie, pomiar bez kalibracji to suma skalibrowanych pomiarów i oszacowania błędu: _uncalibrated = _calibrated + _bias.

Wartości x_bias, y_biasz_bias powinny gwałtownie się zmieniać, gdy tylko zmieni się szacowana wartość stronniczości, a pozostały czas powinny być stabilne.

Szczegółowe informacje o używanym układzie współrzędnych znajdziesz w definicji czujnika żyroskopu.

pomiary muszą być skalibrowane fabrycznie i skorygowane pod kątem temperatury; Musisz też zaimplementować szacowanie dryfu żyroskopu, aby można było raportować rozsądne szacunki w elementach x_bias, y_biasz_bias. Jeśli implementacja nie jest w stanie oszacować dryftu, nie należy stosować tego czujnika.

Jeśli ten czujnik jest obecny, musi być też obecny odpowiedni czujnik żyroskopu. Oba czujniki muszą mieć te same wartości sensor_t.namesensor_t.vendor.

Nieskalibrowane pole magnetyczne

Ukryty czujnik fizyczny: magnetometr

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) zwraca czujnik bez funkcji budzenia

Nieskalibrowany czujnik pola magnetycznego podaje szacowany pomiar pola magnetycznego otoczenia z uwzględnieniem kalibracji na stałym rdzeniu. Wszystkie wartości są podawane w mikrotelach (uT) i są raportowane w polach sensors_event_t.uncalibrated_magnetic:

  • x_uncalib: pole magnetyczne (bez kompensacji twardego żelaza) wzdłuż osi X
  • y_uncalib: pole magnetyczne (bez kompensacji twardego żelaza) na osi Y
  • z_uncalib: pole magnetyczne (bez kompensacji twardego żelaza) na osi Z
  • x_bias: szacowana tendencja do stosowania niestandardowych ustawień na osi X
  • y_bias: szacowana wartość błędu twardego na osi Y
  • z_bias: szacowana wartość przesunięcia na osi Z

Koncepcyjnie, pomiar bez kalibracji to suma skalibrowanych pomiarów i oszacowania błędu: _uncalibrated = _calibrated + _bias.

Nieskalibrowany magnetometr pozwala algorytmom wyższego poziomu na obsługę złej estymacji sprzętu. Wartości x_bias, y_biasz_bias powinny wzrosnąć, gdy tylko zmieni się szacowana wartość sprzętu, a później powinny pozostać stabilne.

W przypadku pomiarów należy zastosować kalibrację na zimno i kompensację temperatury. Musisz też zaimplementować szacowanie twardego sprzętu, aby można było raportować rozsądne szacunki w x_bias, y_biasz_bias. Jeśli implementacja nie jest w stanie oszacować wartości przesunięcia, nie należy stosować tego czujnika.

Jeśli ten czujnik jest obecny, musi być też obecny odpowiedni czujnik pola magnetycznego. Oba czujniki muszą mieć te same wartości sensor_t.namesensor_t.vendor.

Kąt zawiasu

Tryb raportowania: Zmiana

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) zwraca czujnik przebudzenia

Czujnik kąta zawiasu mierzy kąt w stopniach między dwoma integralnymi częściami urządzenia. Ruch zawiasu mierzony przez ten typ czujnika powinien zmieniać sposób interakcji użytkownika z urządzeniem, na przykład przez rozkładanie lub odsłanianie wyświetlacza.

Czujniki złożone interakcji

Niektóre czujniki służą głównie do wykrywania interakcji z użytkownikiem. Nie określamy sposobu implementacji tych czujników, ale muszą one zużywać niewiele energii. Sprawdzenie jakości tych czujników pod kątem wrażeń użytkownika leży po stronie producenta urządzenia.

Gest wybudzania

Podstawowe czujniki fizyczne: nieokreślone (wszystkie o niskiej mocy)

Tryb raportowania: jednorazowy.

Niski poziom energii

Wdrożyć tylko wersję tego czujnika, która umożliwia jego aktywację.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) zwraca czujnik wybudzania

Czujnik gestów umożliwia wybudzanie urządzenia za pomocą określonego ruchu. Gdy czujnik zostanie aktywowany, urządzenie zachowuje się tak, jakby został naciśnięty przycisk zasilania, i włącza ekran. Użytkownik może wyłączyć to zachowanie (włączanie ekranu po aktywacji tego czujnika) w ustawieniach urządzenia. Zmiany w ustawieniach nie wpływają na działanie czujnika: tylko na to, czy framework włącza ekran po jego uruchomieniu. Nie określa się dokładnego gestu, który ma być wykrywany. Może go wybrać producent urządzenia.

Czujnik musi mieć niski pobór mocy, ponieważ będzie prawdopodobnie aktywny przez całą dobę.

Każde zdarzenie czujnika jest rejestrowane w sensors_event_t.data[0] jako 1.

Gest podnoszenia

Podstawowe czujniki fizyczne: nieokreślone (wszystkie o niskiej mocy)

Tryb raportowania: jednorazowy.

Niski poziom energii

Wdrożyć tylko wersję tego czujnika, która umożliwia jego aktywację.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) zwraca czujnik wybudzania

Czujnik gestów podnoszenia uruchamia się, gdy podnosisz urządzenie, niezależnie od tego, gdzie się ono znajdowało wcześniej (na biurku, w kieszeni lub torebce).

Każde zdarzenie czujnika jest rejestrowane w sensors_event_t.data[0] jako 1.

Gest rzutu oka

Podstawowe czujniki fizyczne: nieokreślone (wszystkie o niskiej mocy)

Tryb raportowania: jednorazowy.

Niski poziom energii

Wdrożyć tylko wersję tego czujnika, która umożliwia jego aktywację.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) zwraca czujnik wybudzania

Czujnik gestów umożliwiający zerkanie umożliwia krótko włączyć ekran, aby użytkownik mógł zerknąć na treści na ekranie na podstawie określonego ruchu. Gdy ten czujnik zostanie uruchomiony, urządzenie chwilowo włączy ekran, aby umożliwić użytkownikowi przeglądanie powiadomień lub innych treści, przy jednoczesnym pozostaniu w zamkniętym stanie (uśpieniu). Następnie ekran znów się wyłączy. To zachowanie (krótkie włączanie ekranu po aktywacji czujnika) może zostać wyłączone przez użytkownika w ustawieniach urządzenia. Zmiany w ustawieniach nie wpływają na działanie czujnika: tylko na to, czy framework krótko włącza ekran po jego uruchomieniu. Nie określa się, jaki gest ma być wykrywany. Może go wybrać producent urządzenia.

Czujnik musi mieć niski pobór mocy, ponieważ będzie prawdopodobnie aktywny przez całą dobę. Każde zdarzenie czujnika jest rejestrowane w 1sensors_event_t.data[0].

Czujniki IMU z ograniczoną liczbą osi

Czujniki IMU z ograniczoną liczbą osi, dostępne od Androida 13, to czujniki obsługujące przypadki użycia, w których nie są dostępne wszystkie 3 osi (x, y, z). Standardowe typy IMU w Androidzie (np. SENSOR_TYPE_ACCELEROMETER SENSOR_TYPE_GYROSCOPE) zakładają, że obsługiwane są wszystkie 3 osi. Nie wszystkie formaty i urządzenia obsługują akcelerometry i 3-osiowe żyroskopy.

Ograniczone osie akcelerometru

Podstawowe czujniki fizyczne: akcelerometr

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) zwraca czujnik bez funkcji budzenia

Czujnik przyspieszenia z ograniczonymi osiami jest odpowiednikiem czujnika TYPE_ACCELEROMETER, ale obsługuje przypadki, w których jedna lub dwie osie nie są obsługiwane.

Ostatnie 3 wartości zdarzeń czujnika zgłaszane przez czujnik wskazują, czy wartości przyspieszenia dla osi X, Y i Z są obsługiwane. Wartość 1.0 wskazuje, że oś jest obsługiwana, a wartość 0 wskazuje, że nie jest obsługiwana. Producenci urządzeń identyfikują obsługiwane osie w czasie kompilacji, a wartości nie zmieniają się w czasie działania.

Producenci urządzeń muszą ustawić wartości przyspieszenia dla nieużywanych osi na 0, zamiast nieokreślonych wartości.

Ograniczone osie żyroskopu

Podrzędne czujniki fizyczne: żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) zwraca czujnik bez funkcji budzenia

Czujnik z ograniczonymi osiami żyroskopu jest odpowiednikiem TYPE_GYROSCOPE, ale obsługuje przypadki, w których nie są obsługiwane 1 lub 2 osi.

Ostatnie 3 wartości zdarzeń czujnika zwracane przez czujnik wskazują, czy obsługiwana jest wartość prędkości kątowej dla osi X, Y i Z. Wartość 1.0 wskazuje, że oś jest obsługiwana, a wartość 0 wskazuje, że nie jest ona obsługiwana. Producenci urządzeń identyfikują obsługiwane osie w czasie kompilacji, a wartości nie zmieniają się w czasie działania.

Producenci urządzeń muszą ustawić wartości prędkości kątowej dla nieużywanych osi na 0.

Akcelerometr: nieskalibrowane osie ograniczone

Podstawowe czujniki fizyczne: akcelerometr

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) zwraca czujnik bez funkcji budzenia

Nieskalibrowany czujnik z ograniczonymi osiami akcelerometru jest odpowiednikiem czujnikaTYPE_ACCELEROMETER_UNCALIBRATED, ale obsługuje przypadki, w których jedna lub dwie osie nie są obsługiwane.

Ostatnie 3 wartości zdarzeń czujnika zwracane przez czujnik wskazują, czy wartości przyspieszenia i błądu dla osi X, Y i Z są obsługiwane. Wartość 1.0 wskazuje, że oś jest obsługiwana, a wartość 0 wskazuje, że nie jest ona obsługiwana. Producenci urządzeń określają obsługiwane osie w czasie kompilacji, a wartości nie zmieniają się w czasie działania.

Producenci urządzeń muszą ustawić wartości przyspieszenia i uśredniania dla nieużywanych osi na 0.

Nieskalibrowane osie z ograniczonym dostępem do danych z żyroskopu

Podrzędne czujniki fizyczne: żyroskop

Tryb raportowania: Ciągły

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) zwraca czujnik bez funkcji budzenia

Nieskalibrowany czujnik z ograniczonymi osiami żyroskopu jest odpowiednikiem czujnika TYPE_GYROSCOPE_UNCALIBRATED, ale obsługuje przypadki, w których nie są obsługiwane 1 lub 2 osi.

Ostatnie 3 wartości zdarzeń czujnika zwracane przez czujnik wskazują, czy wartości prędkości kątowej i odchylenia dla osi X, Y i Z są obsługiwane. Wartość 1.0 wskazuje, że oś jest obsługiwana, a wartość 0 wskazuje, że nie jest ona obsługiwana. Producenci urządzeń określają obsługiwane osie w czasie kompilacji, a wartości nie zmieniają się w czasie działania.

Producenci urządzeń muszą ustawić wartości prędkości kątowej i odchylenia dla nieużywanych osi na 0.

IMU z ośami ograniczonymi złożonymi

Podstawowe czujniki fizyczne: dowolna kombinacja 3-osiowego akcelerometru, 3-osiowego żyroskopu, nieskalibrowanych 3-osiowych akcelerometrów i nieskalibrowanych 3-osiowych żyroskopów.

Tryb raportowania: Ciągły

Składany czujnik IMU z ograniczonymi osiami jest odpowiednikiem czujnika IMU z ograniczonymi osiami, ale zamiast obsługi przez HAL konwertuje dane z 3-osiowego czujnika na odpowiednik z ograniczonymi osiami. Te złożone czujniki są dostępne tylko w przypadku urządzeń samochodowych.

Poniższa tabela pokazuje przykładową konwersję standardowego 3-osiowego akcelerometru na złożony akcelerometr z ograniczoną liczbą osi.

Wartości SensorEvent dla SENSOR_TYPE_ACCELEROMETER Przykład SensorEvent o typie SENSOR_TYPE_ACCELEROMETER Złożony typ SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent
values[0]

-0,065

-0,065

values[1]

0,078

0,078

values[2]

9,808

9,808

values[3]

Nie dotyczy

1,0

values[4]

Nie dotyczy

1,0

values[5]

Nie dotyczy

1,0

Czujniki samochodowe

czujniki do obsługi zastosowań motoryzacyjnych;

Nagłówek

Podstawowe czujniki fizyczne: dowolna kombinacja GPS, magnetometru, akcelerometru i żyroskopu.

Tryb raportowania: ciągły.

getDefaultSensor(SENSOR_TYPE_HEADING) zwraca czujnik bez funkcji budzenia

Czujnik kierunku dostępny w Androidzie 13 mierzy kierunek, w jakim urządzenie jest skierowane względem geograficznego północy w stopniach. Sensor kierunku zawiera 2 wartości SensorEvent. Jeden dla zmierzonego nagłówka urządzenia, a drugi dla dokładności podanej wartości nagłówka.

Wartości kierunku podawane przez ten czujnik muszą mieścić się w zakresie od 0.0 (włącznie) do 360.0 (wyłącznie), przy czym 0 oznacza północ, 90 — wschód, 180 — południe, a 270 — zachód.

Dokładność tego czujnika jest określona na poziomie 68-procentowego poziomu ufności. W przypadku, gdy rozkład bazowy jest rozkładem Gaussa-Laplace'a, dokładność wynosi jedno odchylenie standardowe. Jeśli na przykład czujnik kierunku zwraca wartość 60° i wartość dokładności 10°, prawdopodobieństwo, że rzeczywista wartość kierunku mieści się w zakresie od 50° do 70°, wynosi 68%.