Sensortypen

In diesem Abschnitt werden Sensorachsen, Basissensoren und zusammengesetzte Sensoren (Aktivität, Lage, unkalibriert und Interaktion) beschrieben.

Sensorachsen

Sensorereigniswerte von vielen Sensoren werden in einem bestimmten Rahmen ausgedrückt, der im Verhältnis zum Gerät statisch ist.

Mobile Geräteachsen

Die Sensor-API ist nur relativ zur natürlichen Ausrichtung des Bildschirms (Achsen werden nicht vertauscht, wenn sich die Bildschirmausrichtung des Geräts ändert).

Koordinatensystem der Sensor-API für mobile Geräte

Abbildung 1. Koordinatensystem (relativ zu einem mobilen Gerät), das von der Sensor-API verwendet wird

Automobilachsen

In Android Automotive-Implementierungen werden Achsen in Bezug auf den Fahrzeugkarosserierahmen definiert. Der Ursprung des Fahrzeugbezugssystems ist die Mitte der Hinterachse. Der Fahrzeugbezugsrahmen ist so ausgerichtet, dass:

  • Die X-Achse zeigt nach rechts und liegt auf einer horizontalen Ebene, senkrecht zur Fahrzeugsymmetrieebene.
  • Die Y-Achse zeigt nach vorne und liegt auf einer horizontalen Ebene.
Koordinatensystem der Sensor-API für Automobilgeräte

Abbildung 2. Koordinatensystem (relativ zu einem Automobilgerät), das von der Sensor-API verwendet wird

Der Fahrzeugbezugsrahmen ist ein rechtsdrehendes Koordinatensystem. Daher zeigt die Z-Achse nach oben.

Die Z-Achse des Referenzrahmens ist auf die Schwerkraft ausgerichtet, was bedeutet, dass die X-Achse und die Y-Achse beide horizontal sind. Daher verläuft die Y-Achse möglicherweise nicht immer durch die Vorderachse.

Basissensoren

Basissensortypen werden nach den physikalischen Sensoren benannt, die sie darstellen. Diese Sensoren leiten Daten von einem einzelnen physischen Sensor weiter (im Gegensatz zu zusammengesetzten Sensoren, die Daten aus anderen Sensoren generieren). Beispiele für Basissensortypen sind:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

Allerdings sind Basissensoren nicht gleichbedeutend mit dem zugrunde liegenden physischen Sensor und sollten nicht mit diesem verwechselt werden. Die Daten eines Basissensors sind nicht die Rohausgabe des physischen Sensors, da Korrekturen (z. B. Bias-Kompensation und Temperaturkompensation) angewendet werden.

Beispielsweise können sich die Eigenschaften eines Basissensors in den folgenden Anwendungsfällen von den Eigenschaften des zugrunde liegenden physischen Sensors unterscheiden:

  • Ein Gyroskop-Chip mit einem Bias-Bereich von 1 Grad/Sek.
    • Nachdem die Werkskalibrierung, Temperaturkompensation und Bias-Kompensation angewendet wurden, wird die tatsächliche Bias des Android-Sensors reduziert, möglicherweise bis zu einem Punkt, an dem die Bias garantiert unter 0,01 Grad/Sek. liegt.
    • In dieser Situation sagen wir, dass der Android-Sensor eine Abweichung von weniger als 0,01 Grad/Sek. aufweist, obwohl im Datenblatt des zugrunde liegenden Sensors 1 Grad/Sek. angegeben ist.
  • Ein Barometer mit einem Stromverbrauch von 100 uW.
    • Da die generierten Daten vom Chip zum SoC transportiert werden müssen, könnten die tatsächlichen Stromkosten für die Datenerfassung vom Barometer-Android-Sensor viel höher sein, beispielsweise 1000 uW.
    • In dieser Situation sagen wir, dass der Android-Sensor einen Stromverbrauch von 1000 uW hat, obwohl der an den Barometer-Chipleitungen gemessene Stromverbrauch 100 uW beträgt.
  • Ein Magnetometer, das bei der Kalibrierung 100 uW verbraucht, bei der Kalibrierung jedoch mehr verbraucht.
    • Seine Kalibrierungsroutine erfordert möglicherweise die Aktivierung des Gyroskops, was 5000 uW verbraucht, und die Ausführung eines Algorithmus, was weitere 900 uW kostet.
    • In dieser Situation sagen wir, dass der maximale Stromverbrauch des (Magnetometer-)Android-Sensors 6000 uW beträgt.
    • In diesem Fall ist der durchschnittliche Stromverbrauch das nützlichere Maß und wird in den statischen Eigenschaften des Sensors über den HAL gemeldet.

Beschleunigungsmesser

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) gibt einen Nicht-Wake-up-Sensor zurück

Ein Beschleunigungssensor meldet die Beschleunigung des Geräts entlang der drei Sensorachsen. Die gemessene Beschleunigung umfasst sowohl die physikalische Beschleunigung (Geschwindigkeitsänderung) als auch die Schwerkraft. Die Messung wird in den x-, y- und z-Feldern von „sensors_event_t.acceleration“ gemeldet.

Alle Werte sind in SI-Einheiten (m/s^2) angegeben und messen die Beschleunigung des Geräts abzüglich der Schwerkraft entlang der drei Sensorachsen.

Hier sind Beispiele:

  • Die Norm von (x, y, z) sollte im freien Fall nahe bei 0 liegen.
  • Wenn das Gerät flach auf einem Tisch liegt und auf der linken Seite nach rechts geschoben wird, ist der x-Beschleunigungswert positiv.
  • Wenn das Gerät flach auf einem Tisch liegt, beträgt der Beschleunigungswert entlang z +9,81 alo, was der Beschleunigung des Geräts (0 m/s^2) minus der Schwerkraft (-9,81 m/s^2) entspricht.
  • Wenn das Gerät flach auf einem Tisch liegt und in Richtung Himmel geschoben wird, ist der Beschleunigungswert größer als +9,81, was der Beschleunigung des Geräts (+A m/s^2) minus der Schwerkraft (-9,81 m) entspricht /s^2).

Die Messwerte werden kalibriert mit:

  • Temperaturkompensation
  • Online-Bias-Kalibrierung
  • Online-Waagenkalibrierung

Die Bias- und Skalenkalibrierung darf nur bei deaktiviertem Sensor aktualisiert werden, um Wertesprünge beim Streaming zu vermeiden.

Der Beschleunigungsmesser meldet auch über sensors_event_t.acceleration.status “, wie genau er seine Messwerte erwartet. Weitere Informationen zu möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_* Konstanten des SensorManager .

Umgebungstemperatur

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) gibt einen Nicht-Wake-up-Sensor zurück

Dieser Sensor liefert die Umgebungstemperatur (Raumtemperatur) in Grad Celsius.

Magnetfeldsensor

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) gibt einen Nicht-Wake-up-Sensor zurück

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

Ein Magnetfeldsensor (auch Magnetometer genannt) meldet das Umgebungsmagnetfeld, gemessen entlang der drei Sensorachsen.

Die Messung wird in den x-, y- und z-Feldern von sensors_event_t.magnetic gemeldet und alle Werte sind in Mikro-Tesla (uT) angegeben.

Das Magnetometer meldet auch über sensors_event_t.magnetic.status , wie genau es seine Messwerte erwartet. Weitere Informationen zu möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_* Konstanten des SensorManager .

Die Messwerte werden kalibriert mit:

  • Temperaturkompensation
  • Weicheisenkalibrierung im Werk (oder online).
  • Online-Kalibrierung von Harteisen

Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) gibt einen Nicht-Wake-up-Sensor zurück

Ein Gyroskopsensor meldet die Rotationsgeschwindigkeit des Geräts um die drei Sensorachsen.

Die Drehung erfolgt positiv gegen den Uhrzeigersinn (Rechte-Hand-Regel). Das heißt, ein Beobachter, der von einer positiven Position auf der x-, y- oder z-Achse auf ein am Ursprung positioniertes Gerät blickt, würde eine positive Drehung melden, wenn sich das Gerät scheinbar gegen den Uhrzeigersinn dreht. Beachten Sie, dass dies die standardmäßige mathematische Definition der positiven Rotation ist und nicht mit der Luft- und Raumfahrtdefinition von Roll übereinstimmt.

Die Messung wird in den Feldern x, y und z von sensors_event_t.gyro gemeldet und alle Werte sind im Bogenmaß pro Sekunde (rad/s) angegeben.

Die Messwerte werden kalibriert mit:

  • Temperaturkompensation
  • Kompensation im Werksmaßstab (oder online).
  • Online-Bias-Kalibrierung (um Drift zu entfernen)

Das Gyroskop meldet auch über sensors_event_t.gyro.status , wie genau es seine Messwerte erwartet. Weitere Informationen zu möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_* Konstanten des SensorManager .

Das Gyroskop kann nicht auf Basis von Magnetometern und Beschleunigungsmessern emuliert werden, da dies zu einer verringerten lokalen Konsistenz und Reaktionsfähigkeit führen würde. Es muss auf einem üblichen Gyroskop-Chip basieren.

Pulsschlag

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_HEART_RATE) gibt einen Nicht-Wake-up-Sensor zurück

Ein Herzfrequenzsensor meldet die aktuelle Herzfrequenz der Person, die das Gerät berührt.

Die aktuelle Herzfrequenz in Schlägen pro Minute (BPM) wird in sensors_event_t.heart_rate.bpm “ und der Status des Sensors in sensors_event_t.heart_rate.status gemeldet. Weitere Informationen zu möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_* Konstanten des SensorManager . Insbesondere muss bei der ersten Aktivierung, sofern nicht bekannt ist, dass sich das Gerät nicht am Körper befindet, das Statusfeld des ersten Ereignisses auf SENSOR_STATUS_UNRELIABLE gesetzt werden. Da sich dieser Sensor ändert, werden Ereignisse nur dann generiert, wenn sich heart_rate.bpm oder heart_rate.status seit dem letzten Ereignis geändert haben. Die Ereignisse werden nicht schneller als jede sampling_period generiert.

sensor_t.requiredPermission ist immer SENSOR_PERMISSION_BODY_SENSORS .

Licht

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_LIGHT) gibt einen Nicht-Weck-Sensor zurück

Ein Lichtsensor meldet die aktuelle Beleuchtung in SI-Lux-Einheiten.

Die Messung wird in sensors_event_t.light gemeldet.

Nähe

Berichtsmodus: Bei Änderung

Normalerweise als Wecksensor definiert

getDefaultSensor(SENSOR_TYPE_PROXIMITY) gibt einen Wecksensor zurück

Ein Näherungssensor meldet den Abstand vom Sensor zur nächstgelegenen sichtbaren Oberfläche.

Bis Android 4.4 waren die Näherungssensoren immer Wake-up-Sensoren, die den SoC aufweckten, wenn eine Änderung der Nähe erkannt wurde. Nach Android 4.4 empfehlen wir, zunächst die Weckversion dieses Sensors zu implementieren, da dieser zum Ein- und Ausschalten des Bildschirms beim Telefonieren verwendet wird.

Die Messung wird in Zentimetern in sensors_event_t.distance angegeben. Beachten Sie, dass einige Näherungssensoren nur eine binäre „Nah“- oder „Fern“-Messung unterstützen. In diesem Fall meldet der Sensor seinen sensor_t.maxRange Wert im Zustand „fern“ und einen Wert kleiner als sensor_t.maxRange im Zustand „nah“.

Druck

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_PRESSURE) gibt einen nicht aufweckbaren Sensor zurück

Ein Drucksensor (auch Barometer genannt) meldet den Luftdruck in Hektopascal (hPa).

Die Messwerte werden mit kalibriert

  • Temperaturkompensation
  • Werkseitige Bias-Kalibrierung
  • Kalibrierung im Werksmaßstab

Das Barometer wird häufig zur Schätzung von Höhenänderungen verwendet. Um die absolute Höhe abzuschätzen, muss der Meeresspiegeldruck (der sich je nach Wetterlage ändert) als Referenz verwendet werden.

Relative Luftfeuchtigkeit

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) gibt einen Nicht-Wake-up-Sensor zurück

Ein Sensor für relative Luftfeuchtigkeit misst die relative Luftfeuchtigkeit der Umgebungsluft und gibt einen Wert in Prozent zurück.

Zusammengesetzte Sensortypen

Ein zusammengesetzter Sensor generiert Daten durch die Verarbeitung und/oder Fusion von Daten von einem oder mehreren physischen Sensoren. (Jeder Sensor, der kein Basissensor ist, wird als Verbundsensor bezeichnet.) Beispiele für Verbundsensoren sind:

  • Schrittdetektor und signifikante Bewegung , die normalerweise auf einem Beschleunigungsmesser basieren, könnten aber auch auf anderen Sensoren basieren, wenn der Stromverbrauch und die Genauigkeit akzeptabel wären.
  • Spielrotationsvektor , basierend auf einem Beschleunigungsmesser und einem Gyroskop.
  • Unkalibriertes Gyroskop , das dem Gyroskop-Basissensor ähnelt, wobei die Bias-Kalibrierung jedoch separat gemeldet wird, anstatt in der Messung korrigiert zu werden.

Wie bei Basissensoren ergeben sich die Eigenschaften der Verbundsensoren aus den Eigenschaften ihrer Enddaten. Beispielsweise ist der Stromverbrauch eines Spielrotationsvektors wahrscheinlich gleich der Summe des Stromverbrauchs des Beschleunigungsmesser-Chips, des Gyroskop-Chips, des Chips, der die Daten verarbeitet, und der Busse, die die Daten transportieren. Als weiteres Beispiel hängt die Drift eines Wildrotationsvektors sowohl von der Qualität des Kalibrierungsalgorithmus als auch von den physikalischen Sensoreigenschaften ab.

In der folgenden Tabelle sind die verfügbaren Verbundsensortypen aufgeführt. Jeder zusammengesetzte Sensor basiert auf Daten von einem oder mehreren physischen Sensoren. Vermeiden Sie die Auswahl anderer zugrunde liegender physischer Sensoren zur Annäherung an die Ergebnisse, da diese ein schlechtes Benutzererlebnis bieten.

Sensorart Kategorie Zugrunde liegende physikalische Sensoren Berichtsmodus

Spielrotationsvektor

Attitüde

Beschleunigungsmesser, Gyroskop, Magnetometer DÜRFEN NICHT VERWENDET WERDEN

Kontinuierlich

Geomagnetischer Rotationsvektor Sensor mit geringer Leistung

Attitüde

Beschleunigungsmesser, Magnetometer, Gyroskop DARF NICHT VERWENDET WERDEN

Kontinuierlich

Blickgeste Sensor mit geringer Leistung

Interaktion

Nicht definiert

One-Shot

Schwere

Attitüde

Beschleunigungsmesser, Gyroskop

Kontinuierlich

Gyroskop unkalibriert

Unkalibriert

Gyroskop

Kontinuierlich

Lineare Beschleunigung

Aktivität

Beschleunigungsmesser, Gyroskop (falls vorhanden) oder Magnetometer (falls kein Gyroskop vorhanden)

Kontinuierlich

Magnetfeld nicht kalibriert

Unkalibriert

Magnetometer

Kontinuierlich

Ausrichtung (veraltet)

Attitüde

Beschleunigungsmesser, Magnetometer, Gyroskop (falls vorhanden)

Kontinuierlich

Geste zum Aufnehmen Sensor mit geringer Leistung

Interaktion

Nicht definiert

One-Shot

Rotationsvektor

Attitüde

Beschleunigungsmesser, Magnetometer, Gyroskop

Kontinuierlich

Bedeutende Bewegung Sensor mit geringer Leistung

Aktivität

Beschleunigungsmesser (oder ein anderer, sofern die Leistung sehr gering ist)

One-Shot

Schrittzähler Sensor mit geringer Leistung

Aktivität

Beschleunigungsmesser

Bei Änderung

Schrittdetektor Sensor mit geringer Leistung

Aktivität

Beschleunigungsmesser

Besonders

Neigungsdetektor Sensor mit geringer Leistung

Aktivität

Beschleunigungsmesser

Besonders

Aufwachen-Geste Sensor mit geringer Leistung

Interaktion

Nicht definiert

One-Shot

Sensor mit geringer Leistung = Sensor mit geringer Leistung

Zusammengesetzte Aktivitätssensoren

Lineare Beschleunigung

Zugrunde liegende physikalische Sensoren: Beschleunigungsmesser und (falls vorhanden) Gyroskop (oder Magnetometer, falls kein Gyroskop vorhanden)

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) gibt einen Nicht-Wake-up-Sensor zurück

Ein linearer Beschleunigungssensor meldet die lineare Beschleunigung des Geräts im Sensorrahmen, ohne Berücksichtigung der Schwerkraft.

Die Ausgabe ist konzeptionell: Ausgabe des Beschleunigungsmessers minus Ausgabe des Schwerkraftsensors . Die Angabe erfolgt in m/s^2 in den x-, y- und z-Feldern von sensors_event_t.acceleration .

Die Messwerte auf allen Achsen sollten nahe bei 0 liegen, wenn das Gerät stillsteht.

Wenn das Gerät über ein Gyroskop verfügt, muss der lineare Beschleunigungssensor das Gyroskop und den Beschleunigungsmesser als Eingang verwenden.

Wenn das Gerät kein Gyroskop besitzt, muss der lineare Beschleunigungssensor den Beschleunigungsmesser und das Magnetometer als Eingang verwenden.

Bedeutende Bewegung

Zugrunde liegender physikalischer Sensor: Beschleunigungsmesser (oder ein anderer, sofern die Leistung niedrig ist)

Berichtsmodus: One-Shot

Geringer Strom

Implementieren Sie nur die Weckversion dieses Sensors.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) gibt einen Wecksensor zurück

Ein Bewegungsmelder wird ausgelöst, wenn eine erhebliche Bewegung erkannt wird: eine Bewegung, die zu einer Änderung des Standorts des Benutzers führen kann.

Beispiele für solche bedeutenden Anträge sind:

  • Zu Fuß oder mit dem Fahrrad
  • Sitzen in einem fahrenden Auto, Bus oder Zug

Beispiele für Situationen, die keine nennenswerte Bewegung auslösen:

  • Telefon in der Tasche und Person bewegt sich nicht
  • Das Telefon liegt auf einem Tisch und der Tisch wackelt aufgrund des Verkehrs oder der Waschmaschine in der Nähe etwas

Auf der hohen Ebene wird der signifikante Bewegungsmelder verwendet, um den Stromverbrauch der Standortbestimmung zu reduzieren. Wenn die Lokalisierungsalgorithmen erkennen, dass das Gerät statisch ist, können sie in einen Energiesparmodus wechseln, in dem sie sich auf deutliche Bewegungen verlassen, um das Gerät aufzuwecken, wenn der Benutzer seinen Standort ändert.

Dieser Sensor muss eine geringe Leistung haben. Dabei muss der Stromverbrauch in Kauf genommen werden, was zu einer geringen Anzahl falsch-negativer Ergebnisse führen kann. Dies geschieht aus mehreren Gründen:

  • Das Ziel dieses Sensors ist es, Strom zu sparen.
  • Das Auslösen eines Ereignisses, wenn sich der Benutzer nicht bewegt (falsch positiv), ist energieintensiv und sollte daher vermieden werden.
  • Es ist akzeptabel, kein Ereignis auszulösen, wenn sich der Benutzer bewegt (falsch negativ), solange dies nicht wiederholt geschieht. Wenn der Benutzer 10 Sekunden lang gelaufen ist, ist es nicht akzeptabel, innerhalb dieser 10 Sekunden kein Ereignis auszulösen.

Jedes Sensorereignis meldet 1 in sensors_event_t.data[0] .

Schrittdetektor

Zugrunde liegender physikalischer Sensor: Beschleunigungsmesser (+ möglicherweise andere, solange die Leistung niedrig ist)

Berichtsmodus: Speziell (ein Ereignis pro durchgeführtem Schritt)

Geringer Strom

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) gibt einen Nicht-Wake-up-Sensor zurück

Ein Schrittdetektor generiert jedes Mal ein Ereignis, wenn der Benutzer einen Schritt ausführt.

Der Zeitstempel des Ereignisses sensors_event_t.timestamp “ entspricht dem Zeitpunkt, an dem der Fuß den Boden berührte, was zu einer starken Beschleunigungsschwankung führte.

Im Vergleich zum Schrittzähler sollte der Schrittdetektor eine geringere Latenz haben (weniger als zwei Sekunden). Sowohl der Schrittdetektor als auch der Schrittzähler erkennen, wann der Benutzer geht, rennt und die Treppe hinaufgeht. Sie sollten nicht ausgelöst werden, wenn der Benutzer Fahrrad fährt, fährt oder in anderen Fahrzeugen sitzt.

Dieser Sensor muss eine geringe Leistung haben. Das heißt, wenn die Schritterkennung nicht in der Hardware erfolgen kann, sollte dieser Sensor nicht definiert werden. Insbesondere wenn der Schrittdetektor aktiviert ist und der Beschleunigungsmesser nicht, sollten nur Schritte Interrupts auslösen (nicht jeder Beschleunigungsmesserwert).

sampling_period_ns hat keinen Einfluss auf Schrittdetektoren.

Jedes Sensorereignis meldet 1 in sensors_event_t.data[0] .

Schrittzähler

Zugrunde liegender physikalischer Sensor: Beschleunigungsmesser (+ möglicherweise andere, solange die Leistung niedrig ist)

Berichtsmodus: Bei Änderung

Geringer Strom

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) gibt einen Nicht-Wake-up-Sensor zurück

Ein Schrittzähler meldet die Anzahl der Schritte, die der Benutzer seit dem letzten Neustart bei Aktivierung unternommen hat.

Die Messung wird als uint64_t in sensors_event_t.step_counter gemeldet und nur bei einem Systemneustart auf Null zurückgesetzt.

Der Zeitstempel des Ereignisses wird auf den Zeitpunkt gesetzt, zu dem der letzte Schritt für dieses Ereignis ausgeführt wurde.

Die Bedeutung der Zeit eines Schrittes finden Sie unter dem Sensortyp „Schrittdetektor“ .

Im Vergleich zum Schrittdetektor kann der Schrittzähler eine höhere Latenz haben (bis zu 10 Sekunden). Dank dieser Latenzzeit verfügt dieser Sensor über eine hohe Genauigkeit; Die Schrittzahl nach einem ganzen Tag mit Maßnahmen sollte innerhalb von 10 % der tatsächlichen Schrittzahl liegen. Sowohl der Schrittdetektor als auch der Schrittzähler erkennen, wann der Benutzer geht, rennt und die Treppe hinaufgeht. Sie sollten nicht ausgelöst werden, wenn der Benutzer Fahrrad fährt, fährt oder in anderen Fahrzeugen sitzt.

Die Hardware muss sicherstellen, dass die interne Schrittzahl niemals überläuft. Die Mindestgröße des hardwareinternen Zählers muss 16 Bit betragen. Im Falle eines drohenden Überlaufs (höchstens alle ~2^16 Schritte) kann der SoC aufgeweckt werden, damit der Treiber die Zählerwartung durchführen kann.

Wie unter „Interaktion“ angegeben, darf dieser Sensor, während er in Betrieb ist, keine anderen Sensoren stören, insbesondere den Beschleunigungsmesser, der durchaus im Einsatz sein könnte.

Wenn ein bestimmtes Gerät diese Betriebsarten nicht unterstützt, darf dieser Sensortyp nicht vom HAL gemeldet werden. Das heißt, es ist nicht akzeptabel, diesen Sensor im HAL zu „emulieren“.

Dieser Sensor muss eine geringe Leistung haben. Das heißt, wenn die Schritterkennung nicht in Hardware erfolgen kann, sollte dieser Sensor nicht definiert werden. Insbesondere wenn der Schrittzähler aktiviert ist, der Beschleunigungsmesser jedoch nicht, sollten nur Schritte Interrupts auslösen (keine Beschleunigungsmesserdaten).

Neigungsdetektor

Zugrunde liegender physikalischer Sensor: Beschleunigungsmesser (+ möglicherweise andere, solange die Leistung niedrig ist)

Berichtsmodus: Spezial

Geringer Strom

Implementieren Sie nur die Weckversion dieses Sensors.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) gibt einen Wecksensor zurück

Ein Neigungsdetektor generiert jedes Mal ein Ereignis, wenn ein Neigungsereignis erkannt wird.

Ein Neigungsereignis wird dadurch definiert, dass sich die Richtung der durchschnittlichen Schwerkraft im 2-Sekunden-Fenster seit der Aktivierung oder dem letzten vom Sensor generierten Ereignis um mindestens 35 Grad ändert. Hier ist der Algorithmus:

  • reference_estimated_gravity = Durchschnitt der Beschleunigungsmessermessungen in der ersten Sekunde nach der Aktivierung oder die geschätzte Schwerkraft, als das letzte Neigungsereignis generiert wurde.
  • current_estimated_gravity = Durchschnitt der Beschleunigungsmessermessungen der letzten 2 Sekunden.
  • Wird ausgelöst, wenn angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

Große Beschleunigungen ohne Änderung der Telefonausrichtung sollten kein Neigungsereignis auslösen. Beispielsweise sollte eine scharfe Kurve oder eine starke Beschleunigung beim Autofahren kein Kippereignis auslösen, auch wenn der Winkel der durchschnittlichen Beschleunigung um mehr als 35 Grad variieren kann. Typischerweise wird dieser Sensor nur mit Hilfe eines Beschleunigungsmessers implementiert. Es können auch andere Sensoren verwendet werden, wenn diese den Stromverbrauch nicht wesentlich erhöhen. Dabei handelt es sich um einen Low-Power-Sensor, der es dem SoC ermöglichen soll, in den Suspend-Modus zu wechseln. Emulieren Sie diesen Sensor nicht im HAL. Jedes Sensorereignis meldet 1 in sensors_event_t.data[0] .

Verbundwerkstoff-Attitude-Sensoren

Rotationsvektor

Zugrunde liegende physikalische Sensoren: Beschleunigungsmesser, Magnetometer und Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) gibt einen Nicht-Wake-up-Sensor zurück

Ein Rotationsvektorsensor meldet die Ausrichtung des Geräts relativ zum Ost-Nord-Oben-Koordinatenrahmen. Es wird normalerweise durch die Integration von Beschleunigungsmesser-, Gyroskop- und Magnetometermesswerten ermittelt. Das Ost-Nord-Oben-Koordinatensystem ist als direkte orthonormale Basis definiert, wobei:

  • X zeigt nach Osten und ist tangential zum Boden.
  • Y zeigt nach Norden und ist tangential zum Boden.
  • Z zeigt zum Himmel und steht senkrecht zum Boden.

Die Ausrichtung des Telefons wird durch die Drehung dargestellt, die erforderlich ist, um die Ost-Nord-Oben-Koordinaten an den Koordinaten des Telefons auszurichten. Das heißt, wenn man die Drehung auf den Weltrahmen (X,Y,Z) anwendet, werden diese an den Telefonkoordinaten (x,y,z) ausgerichtet.

Die Drehung kann als Drehung des Telefons um einen Winkel Theta um eine Achse rot_axis angesehen werden, um von der Referenzgeräteausrichtung (Ost-Nord-Oben-Ausrichtung) zur aktuellen Geräteausrichtung zu gelangen. Die Drehung wird als die vier einheitenlosen x-, y-, z- und w-Komponenten einer Einheitsquaternion codiert:

  • 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)

Wo:

  • Die x-, y- und z-Felder von rot_axis sind die Ost-Nord-Oben-Koordinaten eines Einheitslängenvektors, der die Rotationsachse darstellt
  • theta ist der Rotationswinkel

Die Quaternion ist eine Einheitsquaternion: Sie muss der Norm 1 entsprechen. Wenn dies nicht sichergestellt wird, führt dies zu unberechenbarem Clientverhalten.

Darüber hinaus meldet dieser Sensor eine geschätzte Kursgenauigkeit:

sensors_event_t.data[4] = estimated_accuracy (im Bogenmaß)

Der Kursfehler muss in 95 % der Fälle kleiner als estimated_accuracy sein. Dieser Sensor muss ein Gyroskop als Haupteingang für die Ausrichtungsänderung verwenden.

Dieser Sensor verwendet auch Beschleunigungsmesser- und Magnetometer-Eingänge, um die Gyroskopdrift auszugleichen, und kann nicht nur mit Beschleunigungsmesser und Magnetometer implementiert werden.

Spielrotationsvektor

Zugrunde liegende physikalische Sensoren: Beschleunigungsmesser und Gyroskop (kein Magnetometer)

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) gibt einen Nicht-Wake-up-Sensor zurück

Ein Rotationsvektorsensor für Wild ähnelt einem Rotationsvektorsensor, nutzt jedoch nicht das Erdmagnetfeld. Daher zeigt die Y-Achse nicht nach Norden, sondern auf eine andere Referenz. Diese Referenz darf um die gleiche Größenordnung driften wie das Gyroskop um die Z-Achse.

Weitere Informationen zum Festlegen sensors_event_t.data[0-3] finden Sie im Abschnitt „Rotationsvektorsensor“ . Dieser Sensor meldet keine geschätzte Kursgenauigkeit: sensors_event_t.data[4] ist reserviert und sollte auf 0 gesetzt werden.

Im Idealfall sollte ein Telefon, das gedreht und in die gleiche reale Ausrichtung zurückgebracht wird, denselben Rotationsvektor im Spiel melden.

Dieser Sensor muss auf einem Gyroskop und einem Beschleunigungsmesser basieren. Es kann kein Magnetometer als Eingabe verwenden, außer indirekt durch Schätzung der Gyroskopvorspannung.

Schwere

Zugrunde liegende physikalische Sensoren: Beschleunigungsmesser und (falls vorhanden) Gyroskop (oder Magnetometer, falls kein Gyroskop vorhanden)

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GRAVITY) gibt einen Nicht-Wake-up-Sensor zurück

Ein Schwerkraftsensor meldet die Richtung und Stärke der Schwerkraft in den Koordinaten des Geräts.

Die Schwerkraftvektorkomponenten werden in m/s^2 in den x-, y- und z-Feldern von sensors_event_t.acceleration angegeben.

Im Ruhezustand des Geräts sollte die Ausgabe des Schwerkraftsensors mit der des Beschleunigungsmessers identisch sein. Auf der Erde beträgt die Magnitude etwa 9,8 m/s^2.

Wenn das Gerät über ein Gyroskop verfügt, muss der Schwerkraftsensor das Gyroskop und den Beschleunigungsmesser als Eingabe verwenden.

Wenn das Gerät kein Gyroskop besitzt, muss der Schwerkraftsensor den Beschleunigungsmesser und das Magnetometer als Eingabe verwenden.

Geomagnetischer Rotationsvektor

Zugrunde liegende physikalische Sensoren: Beschleunigungsmesser und Magnetometer (kein Gyroskop)

Berichtsmodus: Kontinuierlich

Geringer Strom

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) gibt einen Nicht-Wake-up-Sensor zurück

Ein geomagnetischer Rotationsvektor ähnelt einem Rotationsvektorsensor, verwendet jedoch ein Magnetometer und kein Gyroskop.

Dieser Sensor muss auf einem Magnetometer basieren. Es kann nicht mit einem Gyroskop implementiert werden und der Gyroskopeingang kann von diesem Sensor nicht verwendet werden.

Weitere Informationen zum Festlegen sensors_event_t.data[0-4] finden Sie im Abschnitt „Rotationsvektorsensor“ .

Genau wie beim Rotationsvektorsensor muss der Kursfehler in 95 % der Fälle geringer sein als die geschätzte Genauigkeit ( sensors_event_t.data[4] ).

Dieser Sensor muss stromsparend sein und muss daher in Hardware implementiert werden.

Ausrichtung (veraltet)

Zugrunde liegende physikalische Sensoren: Beschleunigungsmesser, Magnetometer und (falls vorhanden) Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ORIENTATION) gibt einen Nicht-Wake-up-Sensor zurück

Hinweis: Dies ist ein älterer Sensortyp, der im Android SDK veraltet ist. Er wurde durch den Rotationsvektorsensor ersetzt, der klarer definiert ist. Verwenden Sie nach Möglichkeit den Rotationsvektorsensor anstelle des Ausrichtungssensors.

Ein Orientierungssensor meldet die Lage des Geräts. Die Messungen werden in Grad in den x-, y- und z-Feldern von sensors_event_t.orientation angegeben:

  • sensors_event_t.orientation.x : Azimut, der Winkel zwischen der magnetischen Nordrichtung und der Y-Achse, um die Z-Achse ( 0<=azimuth<360 ). 0=Norden, 90=Osten, 180=Süden, 270=Westen.
  • sensors_event_t.orientation.y : Steigung, Drehung um die X-Achse ( -180<=pitch<=180 ), mit positiven Werten, wenn sich die Z-Achse in Richtung der Y-Achse bewegt.
  • sensors_event_t.orientation.z : Rollen, Drehung um die Y-Achse ( -90<=roll<=90 ), mit positiven Werten, wenn sich die X-Achse in Richtung der Z-Achse bewegt.

Bitte beachten Sie, dass der Rollwinkel aus historischen Gründen im Uhrzeigersinn positiv ist. (Mathematisch gesehen sollte es gegen den Uhrzeigersinn positiv sein):

Darstellung der Ausrichtung relativ zu einem Gerät

Abbildung 3. Ausrichtung relativ zu einem Gerät

Diese Definition unterscheidet sich von der in der Luftfahrt verwendeten Gier-, Nick- und Rollbewegung, bei der die X-Achse entlang der Längsseite des Flugzeugs verläuft (Heck bis Nase).

Der Orientierungssensor meldet auch über sensors_event_t.orientation.status , wie genau er seine Messwerte erwartet. Weitere Informationen zu möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_* Konstanten des SensorManager .

Unkalibrierte Sensoren

Nicht kalibrierte Sensoren liefern mehr Rohergebnisse und können eine gewisse Verzerrung aufweisen, weisen aber auch weniger „Sprünge“ aufgrund der durch die Kalibrierung vorgenommenen Korrekturen auf. Einige Apps bevorzugen diese unkalibrierten Ergebnisse möglicherweise als flüssiger und zuverlässiger. Wenn eine App beispielsweise versucht, ihre eigene Sensorfusion durchzuführen, kann die Einführung von Kalibrierungen die Ergebnisse tatsächlich verfälschen.

Beschleunigungsmesser nicht kalibriert

Zugrunde liegender physikalischer Sensor: Beschleunigungsmesser

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) gibt einen Nicht-Wake-up-Sensor zurück

Ein unkalibrierter Beschleunigungssensor meldet die Beschleunigung des Geräts entlang der drei Sensorachsen ohne jegliche Bias-Korrektur (werkseitige Bias- und Temperaturkompensation werden auf unkalibrierte Messungen angewendet) zusammen mit einer Bias-Schätzung. Alle Werte sind in SI-Einheiten (m/s^2) angegeben und werden in den Feldern sensors_event_t.uncalibrated_accelerometer angegeben:

  • x_uncalib : Beschleunigung (ohne Bias-Kompensation) entlang der X-Achse
  • y_uncalib : Beschleunigung (ohne Bias-Kompensation) entlang der Y-Achse
  • z_uncalib : Beschleunigung (ohne Bias-Kompensation) entlang der Z-Achse
  • x_bias : geschätzte Vorspannung entlang der X-Achse
  • y_bias : geschätzte Abweichung entlang der Y-Achse
  • z_bias : geschätzte Vorspannung entlang der Z-Achse

Gyroskop unkalibriert

Zugrunde liegender physikalischer Sensor: Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) gibt einen Nicht-Wake-up-Sensor zurück

Ein unkalibriertes Gyroskop meldet die Rotationsrate um die Sensorachsen, ohne eine Bias-Kompensation auf sie anzuwenden, zusammen mit einer Bias-Schätzung. Alle Werte sind im Bogenmaß/Sekunde angegeben und werden in den Feldern von sensors_event_t.uncalibrated_gyro gemeldet:

  • x_uncalib : Winkelgeschwindigkeit (ohne Driftkompensation) um die X-Achse
  • y_uncalib : Winkelgeschwindigkeit (ohne Driftkompensation) um die Y-Achse
  • z_uncalib : Winkelgeschwindigkeit (ohne Driftkompensation) um die Z-Achse
  • x_bias : geschätzte Drift um die X-Achse
  • y_bias : geschätzte Drift um die Y-Achse
  • z_bias : geschätzte Drift um die Z-Achse

Konzeptionell ist die unkalibrierte Messung die Summe der kalibrierten Messung und der Bias-Schätzung: _uncalibrated = _calibrated + _bias .

Es wird erwartet, dass die Werte x_bias , y_bias und z_bias ansteigen, sobald sich die Schätzung des Bias ändert, und sie sollten für den Rest der Zeit stabil bleiben.

Einzelheiten zum verwendeten Koordinatensystem finden Sie in der Definition des Gyroskopsensors .

Die Messungen müssen werkseitig kalibriert und temperaturkompensiert werden. Außerdem muss die Schätzung der Gyroskopdrift implementiert werden, damit vernünftige Schätzungen in x_bias , y_bias und z_bias gemeldet werden können. Wenn die Implementierung die Drift nicht abschätzen kann, darf dieser Sensor nicht implementiert werden.

Wenn dieser Sensor vorhanden ist, muss auch der entsprechende Gyroskopsensor vorhanden sein und beide Sensoren müssen die gleichen Werte sensor_t.name und sensor_t.vendor haben.

Magnetfeld unkalibriert

Zugrunde liegender physikalischer Sensor: Magnetometer

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) gibt einen Nicht-Wake-up-Sensor zurück

Ein unkalibrierter Magnetfeldsensor meldet das Umgebungsmagnetfeld zusammen mit einer Schätzung der Harteisenkalibrierung. Alle Werte sind in Mikro-Tesla (uT) angegeben und werden in den Feldern sensors_event_t.uncalibrated_magnetic angegeben:

  • x_uncalib : Magnetfeld (ohne Harteisenkompensation) entlang der X-Achse
  • y_uncalib : Magnetfeld (ohne Harteisenkompensation) entlang der Y-Achse
  • z_uncalib : Magnetfeld (ohne Harteisenkompensation) entlang der Z-Achse
  • x_bias : geschätzte Harteisen-Vorspannung entlang der X-Achse
  • y_bias : geschätzter Harteisen-Bias entlang der Y-Achse
  • z_bias : geschätzte Harteisen-Vorspannung entlang der Z-Achse

Konzeptionell ist die unkalibrierte Messung die Summe der kalibrierten Messung und der Bias-Schätzung: _uncalibrated = _calibrated + _bias .

Das unkalibrierte Magnetometer ermöglicht es höheren Algorithmen, schlechte Harteisenschätzungen zu verarbeiten. Es wird erwartet, dass die Werte x_bias , y_bias und z_bias ansteigen, sobald sich die Schätzung des Harteisens ändert, und für den Rest der Zeit sollten sie stabil bleiben.

Bei den Messungen müssen Weicheisenkalibrierung und Temperaturkompensation angewendet werden. Außerdem muss eine Harteisenschätzung implementiert werden, damit vernünftige Schätzungen in x_bias , y_bias und z_bias gemeldet werden können. Wenn die Implementierung den Bias nicht abschätzen kann, darf dieser Sensor nicht implementiert werden.

Wenn dieser Sensor vorhanden ist, muss auch der entsprechende Magnetfeldsensor vorhanden sein und beide Sensoren müssen dieselben Werte sensor_t.name und sensor_t.vendor aufweisen.

Scharnierwinkel

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) gibt einen Wecksensor zurück

Ein Scharnierwinkelsensor misst den Winkel in Grad zwischen zwei integralen Teilen des Geräts. Es wird erwartet, dass die von diesem Sensortyp gemessene Bewegung eines Scharniers die Art und Weise verändert, wie der Benutzer mit dem Gerät interagieren kann, indem er beispielsweise ein Display aufklappt oder freigibt.

Interaktionsverbundsensoren

Einige Sensoren werden hauptsächlich zur Erkennung von Interaktionen mit dem Benutzer verwendet. Wir definieren nicht, wie diese Sensoren implementiert werden müssen, aber sie müssen einen geringen Stromverbrauch haben und es liegt in der Verantwortung des Geräteherstellers, ihre Qualität im Hinblick auf die Benutzererfahrung zu überprüfen.

Aufwachen-Geste

Zugrunde liegende physikalische Sensoren: Undefiniert (alles mit geringer Leistung)

Berichtsmodus: One-Shot

Geringer Strom

Implementieren Sie nur die Weckversion dieses Sensors.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) gibt einen Wecksensor zurück

Ein Weckgestensensor ermöglicht das Aufwecken des Geräts basierend auf einer gerätespezifischen Bewegung. Wenn dieser Sensor ausgelöst wird, verhält sich das Gerät so, als ob der Netzschalter gedrückt wurde und den Bildschirm einschalten würde. Dieses Verhalten (das Einschalten des Bildschirms, wenn dieser Sensor ausgelöst wird) kann vom Benutzer in den Geräteeinstellungen deaktiviert werden. Änderungen in den Einstellungen beeinflussen nicht das Verhalten des Sensors: Nur ob das Framework den Bildschirm beim Auslösen einschalten. Die tatsächliche zu erkannte Geste ist nicht angegeben und kann vom Hersteller des Geräts ausgewählt werden.

Dieser Sensor muss eine geringe Leistung sein, da er wahrscheinlich rund um die Uhr aktiviert wird.

Jedes Sensorereignis berichtet 1 in sensors_event_t.data[0] .

Geste aufnehmen

Zugrunde liegende physikalische Sensoren: undefiniert (alles geringe Leistung)

Berichtsmodus: One-Shot

Geringer Strom

Implementieren Sie nur die Weckversion dieses Sensors.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) gibt einen Wecksensor zurück

Ein Pick-up-Gestensensor löst sich aus, wenn das Gerät abgeholt wird, unabhängig davon, wo es sich vor dem Vorgang befand (Schreibtisch, Tasche, Tasche).

Jedes Sensorereignis berichtet 1 in sensors_event_t.data[0] .

Blick Geste

Zugrunde liegende physikalische Sensoren: undefiniert (alles geringe Leistung)

Berichtsmodus: One-Shot

Geringer Strom

Implementieren Sie nur die Weckversion dieses Sensors.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) gibt einen Wecksensor zurück

Ein Blick auf einen Blick zu Gestensensor ermöglicht es kurz, den Bildschirm einzuschalten, damit der Benutzer auf dem Bildschirm basierend auf einer bestimmten Bewegung einen Blick auf den Bildschirm werfen kann. Wenn dieser Sensor ausgelöst wird, schaltet das Gerät den Bildschirm momentan ein, damit der Benutzer einen Blick auf die Benachrichtigungen oder einen anderen Inhalt werfen kann, während das Gerät in einem nicht-interaktiven Zustand (Döste) gesperrt bleibt, dann wird der Bildschirm wieder ausgeschaltet. Dieses Verhalten (kurz einschalten, wenn dieser Sensor ausgelöst wird) könnte vom Benutzer in den Geräteeinstellungen deaktiviert werden. Änderungen in den Einstellungen haben keinen Einfluss auf das Verhalten des Sensors: Nur ob das Framework den Bildschirm kurz einschaltet, wenn er ausgelöst wird. Die tatsächliche zu erkannte Geste ist nicht angegeben und kann vom Hersteller des Geräts ausgewählt werden.

Dieser Sensor muss eine geringe Leistung sein, da er wahrscheinlich rund um die Uhr aktiviert wird. Jedes Sensorereignis berichtet 1 in sensors_event_t.data[0] .

Begrenzte Achsen IMU -Sensoren

Erhältlich bei Android 13, limitierte Achsen imu -Sensoren sind Sensoren, die Anwendungsfälle unterstützen, bei denen nicht alle drei Achsen (x, y, z) verfügbar sind. Standard -IMU -Typen in Android (wie SENSOR_TYPE_ACCELEROMETER und SENSOR_TYPE_GYROSCOPE ) gehen davon aus, dass alle drei Achsen unterstützt werden. Allerdings unterstützen nicht alle Formfaktoren und Geräte die 3-Achsen-Beschleunigungsmesser und 3-Achsen-Gyroskope.

Beschleunigungsmesser begrenzte Achsen

Zugrunde liegende physikalische Sensoren: Beschleunigungsmesser

Berichtsmodus: kontinuierlich

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) gibt einen Nicht-Wach-Sensor zurück

Ein Beschleunigungsmesser -Sensor für begrenzte Achsen entspricht dem TYPE_ACCELEROMETER , unterstützt jedoch Fälle, in denen ein oder zwei Achsen nicht unterstützt werden.

Die letzten drei vom Sensor gemeldeten Sensorereignisse stellen dar, ob der Beschleunigungswert für X, Y und Z -Achsen unterstützt werden. Ein Wert von 1.0 zeigt an, dass die Achse unterstützt wird und ein Wert von 0 angibt, dass sie nicht unterstützt wird. Die Gerätehersteller identifizieren die unterstützten Achsen zum Bauzeit und die Werte ändern sich während der Laufzeit nicht.

Die Gerätehersteller müssen die Beschleunigungswerte für nicht verwendete Achsen auf 0 einstellen, anstatt undefinierte Werte zu haben.

Gyroskop begrenzte Achsen

Zugrunde liegende physikalische Sensoren: Gyroskop

Berichtsmodus: kontinuierlich

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) gibt einen Nicht-Wach-Sensor zurück

Ein Sensor mit begrenzten Achsen mit Gyroskopen entspricht dem TYPE_GYROSCOPE , unterstützt jedoch Fälle, in denen ein oder zwei Achsen nicht unterstützt werden.

Die letzten drei vom Sensor gemeldeten Sensorereignisse stellen dar, ob der Winkelgeschwindigkeitswert für x, y und z -Achsen unterstützt werden. Ein Wert von 1.0 zeigt an, dass die Achse unterstützt wird und ein Wert von 0 angibt, dass sie nicht unterstützt wird. Die Gerätehersteller identifizieren die unterstützten Achsen zum Bauzeit und die Werte ändern sich während der Laufzeit nicht.

Die Gerätehersteller müssen die Winkelgeschwindigkeitswerte für nicht verwendete Achsen auf 0 einstellen.

Beschleunigungsmesser begrenzte Achsen unkalibriert

Zugrunde liegende physikalische Sensoren: Beschleunigungsmesser

Berichtsmodus: kontinuierlich

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) gibt einen Nicht-Wach-Sensor zurück

Ein Beschleunigungsmesser begrenzter Achsen, der nicht kalibriert ist, entspricht TYPE_ACCELEROMETER_UNCALIBRATED unterstützt jedoch Fälle, in denen ein oder zwei Achsen nicht unterstützt werden.

Die letzten drei vom Sensor gemeldeten Sensorereigniswerte stellen dar, ob die Beschleunigungs- und Verzerrungswerte für die X-, Y- und Z -Achsen unterstützt werden. Ein Wert von 1.0 zeigt an, dass die Achse unterstützt wird und ein Wert von 0 angibt, dass sie nicht unterstützt wird. Die Gerätehersteller identifizieren die unterstützten Achsen zum Bauzeit und die Werte ändern sich während der Laufzeit nicht.

Die Gerätehersteller müssen die Beschleunigungs- und Verzerrungswerte für nicht verwendete Achsen auf 0 einstellen.

Gyroskop begrenzte Achsen unkalibriert

Zugrunde liegende physikalische Sensoren: Gyroskop

Berichtsmodus: kontinuierlich

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) gibt einen Nicht-Wach-Sensor zurück

Ein nicht kalibriertes Sensor mit Gyroskop begrenztem Achsen entspricht dem TYPE_GYROSCOPE_UNCALIBRATED , unterstützt jedoch Fälle, in denen ein oder zwei Achsen nicht unterstützt werden.

Die letzten drei vom Sensor gemeldeten Sensorereignisse stellen dar, ob die Winkelgeschwindigkeits- und Driftwerte für die Achsen x, y und z unterstützt werden. Ein Wert von 1.0 zeigt an, dass die Achse unterstützt wird und ein Wert von 0 angibt, dass sie nicht unterstützt wird. Die Gerätehersteller identifizieren die unterstützten Achsen zum Bauzeit und die Werte ändern sich während der Laufzeit nicht.

Die Gerätehersteller müssen die Winkelgeschwindigkeits- und Driftwerte für nicht verwendete Achsen auf 0 einstellen.

Composite Limited Aches IMU

Zugrunde liegende physikalische Sensoren: Jede Kombination aus 3-Achsen-Beschleunigungsmesser, 3-Achsen-Gyroskop, 3-Achsen-Beschleunigungsmesser unkalibriert und 3-Achsen-Gyroskop-unkalibrierte Sensoren.

Berichtsmodus: kontinuierlich

Ein zusammengesetzter IMU-Sensor für zusammengesetzte Achsen entspricht einem IMU-Sensor mit begrenzten Achsen, aber anstatt am HAL unterstützt zu werden, wandelt er die 3-Achsen-Sensordaten in die äquivalenten begrenzten Achsenvarianten um. Diese Verbundsensoren sind nur für Automobilgeräte aktiviert.

Die folgende Tabelle zeigt eine Beispielumwandlung von einem Standard-3-Achse-Beschleunigungsmesser in ein Composite Limited Aches Accelerometer.

Sensorvent -Werte für Sensor_Type_accelerometer Beispiel Sensor_type_accelerometer SensorEvent Composite sensor_type_accelerometermetermesser_limited_axes sensorEvent
Werte [0]

-0.065

-0.065

Werte [1]

0,078

0,078

Werte [2]

9.808

9.808

Werte [3]

N / A

1,0

Werte [4]

N / A

1,0

Werte [5]

N / A

1,0

Automobilsensoren

Sensoren zur Unterstützung von Automobilanwendungsfällen.

Überschrift

Unterliegende physikalische Sensoren: Jede Kombination aus GPS, Magnetometer, Beschleunigungsmesser und Gyroskop.

Berichtsmodus: kontinuierlich

getDefaultSensor(SENSOR_TYPE_HEADING) gibt einen Nicht-Wach-Sensor zurück

Er ist bei Android 13 erhältlich und misst ein Überschriftensensor die Richtung, in der das Gerät relativ zu True North in Grad zeigt. Der Überschriftensensor enthält zwei SensorEvent . Eine für die gemessene Vorrichtung und eine für die Genauigkeit des bereitgestellten Überschriftenwerts.

Die von diesem Sensor gemeldeten Überschriftenwerte müssen zwischen 0.0 (inklusiv) und 360.0 (exklusiv) liegen, wobei 0 Nord, 90 East, 180 South und 270 West anzeigen.

Die Genauigkeit für diesen Sensor ist mit 68 Prozent Vertrauen definiert. In dem Fall, in dem die zugrunde liegende Verteilung Gaußsche Normalität ist, ist die Genauigkeit eine Standardabweichung. Wenn der Überschriftensensor beispielsweise einen Überschriftenwert von 60 Grad und einen Genauigkeitswert von 10 Grad zurückgibt, besteht eine Wahrscheinlichkeit von 68 Prozent, dass die tatsächliche Überschrift zwischen 50 Grad und 70 Grad liegt.