Sensortypen

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

Sensorachsen

Sensorereigniswerte vieler Sensoren werden in einem bestimmten Frame ausgedrückt, der relativ zum Gerät statisch ist.

Achsen von Mobilgeräten

Die Sensor API bezieht sich nur auf die natürliche Ausrichtung des Displays. Die Achsen werden nicht getauscht, wenn sich die Ausrichtung des Displays ändert.

Koordinatensystem der Sensor API für Mobilgeräte

Abbildung 1: Koordinatensystem (relativ zu einem Mobilgerät), das von der Sensor API verwendet wird

Automobil: Achsen

In Android Automotive-Implementierungen werden Achsen in Bezug auf den Fahrzeugrahmen definiert. Der Ursprung des Fahrzeugreferenzrahmens ist die Mitte der Hinterachse. Das Fahrzeugreferenzsystem ist so ausgerichtet, dass:

  • Die X-Achse zeigt nach rechts und liegt auf einer horizontalen Ebene, die senkrecht zur Symmetrieebene des Fahrzeugs verläuft.
  • Die Y-Achse zeigt nach vorn und liegt auf einer horizontalen Ebene.
Koordinatensystem der Sensor-API für Automotive-Geräte

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

Der Fahrzeugreferenzrahmen ist ein rechtshändiges Koordinatensystem. Die Z-Achse zeigt also nach oben.

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

Basissensoren

Basissensortypen werden nach den physischen Sensoren benannt, die sie repräsentieren. 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:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

Basissensoren sind jedoch nicht mit den zugrunde liegenden physischen Sensoren identisch und sollten nicht mit ihnen verwechselt werden. Die Daten eines Basissensors sind nicht die Rohausgabe des physischen Sensors, da Korrekturen wie die Bias-Korrektur und die Temperaturkompensation angewendet werden.

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

  • Ein Gyroskop-Chip mit einem Bias-Bereich von 1 °/s.
    • Nach der werkseitigen Kalibrierung, der Temperaturkompensation und der Bias-Kompensation wird der tatsächliche Bias des Android-Sensors reduziert, möglicherweise bis zu einem Punkt, an dem der Bias garantiert unter 0,01 °/s liegt.
    • In diesem Fall hat der Android-Sensor einen Bias von unter 0, 01 °/s, obwohl im Datenblatt des zugrunde liegenden Sensors 1 °/s angegeben ist.
  • Ein Barometer mit einem Stromverbrauch von 100 µW.
    • Da die generierten Daten vom Chip zum SoC übertragen werden müssen, kann der tatsächliche Stromverbrauch für das Erfassen von Daten vom Barometer-Android-Sensor viel höher sein, z. B. 1.000 uW.
    • In diesem Fall sagen wir, dass der Android-Sensor einen Stromverbrauch von 1.000 µW hat, obwohl der am Barometerchip gemessene Stromverbrauch 100 µW beträgt.
  • Ein Magnetometer, das im kalibrierten Zustand 100 µW verbraucht, während der Kalibrierung jedoch mehr.
    • Für die Kalibrierung muss möglicherweise das Gyroskop aktiviert werden, was 5.000 µW kostet, und ein Algorithmus ausgeführt werden, was weitere 900 µW kostet.
    • In diesem Fall beträgt der maximale Stromverbrauch des Android-Sensors (Magnetometer) 6.000 µW.
    • In diesem Fall ist der durchschnittliche Stromverbrauch die nützlichere Messgröße. Er wird in den statischen Sensoreigenschaften über den HAL gemeldet.

Beschleunigungsmesser

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

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

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

Beispiele:

  • Die Norm von (x, y, z) sollte im freien Fall nahe 0 liegen.
  • Wenn das Gerät flach auf einem Tisch liegt und auf der linken Seite nach rechts geschoben wird, ist der Wert für die X-Beschleunigung positiv.
  • Wenn das Gerät flach auf einem Tisch liegt, beträgt der Beschleunigungswert entlang der Z-Achse +9,81 m/s², was der Beschleunigung des Geräts (0 m/s²) minus der Schwerkraft (-9,81 m/s²) entspricht.
  • Wenn das Gerät flach auf einem Tisch liegt und nach oben geschoben wird, ist der Beschleunigungswert größer als +9,81, was der Beschleunigung des Geräts (+A m/s²) abzüglich der Schwerkraft (-9,81 m/s²) entspricht.

Die Messwerte werden mit folgenden Methoden kalibriert:

  • Temperaturkompensation
  • Online-Bias-Abstimmung
  • Waage online kalibrieren

Die Bias- und Skalierungskalibrierung darf nur aktualisiert werden, wenn der Sensor deaktiviert ist, um Sprünge bei den Werten während des Streamings zu vermeiden.

Der Beschleunigungsmesser gibt auch an, wie genau die Messwerte voraussichtlich sind (sensors_event_t.acceleration.status). Weitere Informationen zu möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_*-Konstanten von SensorManager.

Umgebungstemperatur

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

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

Magnetfeldsensor

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

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

Die Messung wird in den Feldern „x“, „y“ und „z“ von sensors_event_t.magnetic angegeben. Alle Werte sind in Mikrotesla (µT) angegeben.

Das Magnetometer gibt über sensors_event_t.magnetic.status auch an, wie genau die Messwerte voraussichtlich sind. Weitere Informationen zu möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_*-Konstanten von SensorManager.

Die Messwerte werden mit folgenden Methoden kalibriert:

  • Temperaturkompensation
  • Werks- oder Online-Kalibrierung mit Weicheisen
  • Online-Kalibrierung von Hard Iron

Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

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

Die Drehung ist im Gegenuhrzeigersinn positiv (Rechte-Hand-Regel). Das heißt, ein Beobachter, der von einer positiven Position auf der x-, y- oder z-Achse auf ein Gerät blickt, das sich im Ursprung befindet, würde eine positive Drehung melden, wenn sich das Gerät scheinbar gegen den Uhrzeigersinn dreht. Dies ist die standardmäßige mathematische Definition der positiven Drehung und stimmt nicht mit der Definition von Rollen in der Luft- und Raumfahrt überein.

Die Messung wird in den Feldern „x“, „y“ und „z“ von sensors_event_t.gyro gemeldet. Alle Werte werden in Radianten pro Sekunde (rad/s) angegeben.

Die Messwerte werden mit folgenden Methoden kalibriert:

  • Temperaturkompensation
  • Kompensation für die Skalierung von Fabriken (oder online)
  • Online-Bias-Abstimmung (zum Entfernen von Drift)

Das Gyroskop gibt auch an, wie genau die Messwerte voraussichtlich sein werden, und zwar über sensors_event_t.gyro.status. Weitere Informationen zu möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_*-Konstanten von SensorManager.

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

Herzfrequenz

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_HEART_RATE) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

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 von SensorManager. Insbesondere bei der ersten Aktivierung muss das Statusfeld des ersten Ereignisses auf SENSOR_STATUS_UNRELIABLE gesetzt werden, es sei denn, es ist bekannt, dass sich das Gerät nicht am Körper befindet. Da dieser Sensor auf Änderungen reagiert, 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 alle sampling_period generiert.

Das Framework überschreibt sensor_t.requiredPermission automatisch mit der entsprechenden Berechtigung, um die Kompatibilität aufrechtzuerhalten. Das Framework verwendet die Berechtigung SENSOR_PERMISSION_READ_HEART_RATE für Android 16 und höher und die Berechtigung SENSOR_PERMISSION_BODY_SENSORS für Android 15 und niedriger.

Leicht

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_LIGHT) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

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

Die Messung wird in sensors_event_t.light gemeldet.

Näherung

Berichtsmodus: Bei Änderung

Wird in der Regel als Aufwacksensor definiert

getDefaultSensor(SENSOR_TYPE_PROXIMITY) Gibt einen Sensor für das Aufwecken 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 Aktivierungssensoren, die den SoC aktivierten, wenn eine Änderung der Nähe erkannt wurde. Nach Android 4.4 empfehlen wir, zuerst die Wake-up-Version dieses Sensors zu implementieren, da sie zum Ein- und Ausschalten des Displays während Telefonanrufen verwendet wird.

Die Messung wird in Zentimetern in sensors_event_t.distance angegeben. Beachten Sie, dass einige Näherungssensoren nur eine binäre Messung („nah“ oder „fern“) unterstützen. In diesem Fall meldet der Sensor seinen sensor_t.maxRange-Wert im Status „far“ und einen Wert unter sensor_t.maxRange im Status „near“.

Luftdruck

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_PRESSURE) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein Drucksensor (auch als Barometer bezeichnet) gibt den atmosphärischen Druck in Hektopascal (hPa) an.

Die Messwerte werden mit

  • Temperaturkompensation
  • Kalibrierung der Werkseinstellung
  • Kalibrierung im Werk

Das Barometer wird häufig verwendet, um Höhenänderungen zu schätzen. Um die absolute Höhe zu schätzen, muss der Druck auf Meereshöhe (der sich je nach Wetter ändert) als Referenz verwendet werden.

Relative Luftfeuchtigkeit

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

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

Zusammengesetzte Sensortypen

Ein zusammengesetzter Sensor generiert Daten durch die Verarbeitung und/oder Zusammenführung von Daten von einem oder mehreren physischen Sensoren. Alle Sensoren, die keine Basissensoren sind, werden als zusammengesetzte Sensoren bezeichnet. Beispiele für zusammengesetzte Sensoren:

  • Schrittzähler und erhebliche Bewegung, die in der Regel auf einem Beschleunigungsmesser basieren, aber auch auf anderen Sensoren basieren könnten, wenn der Stromverbrauch und die Genauigkeit akzeptabel wären.
  • Spielrotationsvektor, basierend auf einem Beschleunigungsmesser und einem Gyroskop.
  • Nicht kalibriertes Gyroskop: Ähnlich wie der Gyroskop-Basissensor, aber die Bias-Kalibrierung wird separat gemeldet, anstatt in der Messung korrigiert zu werden.

Wie bei Basissensoren stammen die Merkmale der zusammengesetzten Sensoren aus den Merkmalen ihrer endgültigen Daten. Der Stromverbrauch eines Spielrotationsvektors entspricht beispielsweise wahrscheinlich der Summe der Stromverbräuche des Beschleunigungsmessers, des Gyroskops, des Chips, der die Daten verarbeitet, und der Busse, die die Daten transportieren. Ein weiteres Beispiel: Die Abweichung eines Spielrotationsvektors hängt sowohl von der Qualität des Kalibrierungsalgorithmus als auch von den physischen Sensoreigenschaften ab.

In der folgenden Tabelle sind die verfügbaren zusammengesetzten Sensortypen aufgeführt. Jeder zusammengesetzte Sensor basiert auf Daten von einem oder mehreren physischen Sensoren. Vermeiden Sie es, andere zugrunde liegende physische Sensoren zur Schätzung von Ergebnissen zu verwenden, da dies die Nutzerfreundlichkeit beeinträchtigt.

Sensortyp Kategorie Zugrunde liegende physische Sensoren Berichtsmodus

Rotationsvektor des Spiels

Einstellung

Beschleunigungsmesser, Gyroskop, Magnetometer DÜRFEN NICHT verwendet werden

Kontinuierlich

Geomagnetischer Rotationsvektor Sensor mit geringem
     Energieverbrauch

Einstellung

Beschleunigungsmesser, Magnetometer, KEIN Gyroskop

Kontinuierlich

Blick-Geste Sensor mit geringem Stromverbrauch

Interaktion

Nicht definiert

One-Shot

Schwerkraft

Einstellung

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

Kontinuierlich

Gyroskop nicht kalibriert

Nicht kalibriert

Gyroskop

Kontinuierlich

Lineare Beschleunigung

Aktivität

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

Kontinuierlich

Magnetfeld nicht kalibriert

Nicht kalibriert

Magnetometer

Kontinuierlich

Ausrichtung (eingestellt)

Einstellung

Beschleunigungsmesser, Magnetometer, Gyroskop (falls vorhanden)

Kontinuierlich

Geste zum Aufnehmen Sensor mit geringem Stromverbrauch

Interaktion

Nicht definiert

One-Shot

Rotationsvektor

Einstellung

Beschleunigungsmesser, Magnetometer, Gyroskop (falls vorhanden)

Kontinuierlich

Erhebliche Bewegung Sensor mit geringem Stromverbrauch

Aktivität

Beschleunigungsmesser (oder ein anderer Sensor mit sehr geringem Stromverbrauch)

One-Shot

Schrittzähler Sensor mit geringem Stromverbrauch

Aktivität

Beschleunigungsmesser

Bei Änderung

Schrittzähler Sensor mit geringem Stromverbrauch

Aktivität

Beschleunigungsmesser

Specials

Neigungssensor Sensor mit geringem Stromverbrauch

Aktivität

Beschleunigungsmesser

Specials

Geste zum Aufwecken Sensor mit geringem Stromverbrauch

Interaktion

Nicht definiert

One-Shot

Sensor mit geringem Stromverbrauch = Energiesparender Sensor

Zusammengesetzte Aktivitätssensoren

Lineare Beschleunigung

Zugrunde liegende physische Sensoren: Beschleunigungsmesser und (falls vorhanden) Gyroskop (oder Magnetometer, wenn kein Gyroskop vorhanden ist)

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein Sensor für lineare Beschleunigung meldet die lineare Beschleunigung des Geräts im Sensorrahmen, ohne Berücksichtigung der Schwerkraft.

Die Ausgabe ist konzeptionell die Ausgabe des Beschleunigungsmessers minus die Ausgabe des Schwerkraftsensors. Er wird in m/s^2 in den Feldern „x“, „y“ und „z“ von sensors_event_t.acceleration angegeben.

Die Messwerte auf allen Achsen sollten nahe 0 sein, wenn sich das Gerät nicht bewegt.

Wenn das Gerät ein Gyroskop hat, muss der Sensor für lineare Beschleunigung das Gyroskop und den Beschleunigungsmesser als Eingabe verwenden.

Wenn das Gerät kein Gyroskop hat, muss der Sensor für die lineare Beschleunigung den Beschleunigungsmesser und das Magnetometer als Eingabe verwenden.

Erhebliche Bewegung

Zugrunde liegender physischer Sensor: Beschleunigungsmesser (oder ein anderer, solange er wenig Strom verbraucht)

Berichtsmodus: One-Shot

Niedriger Energiebedarf

Implementieren Sie nur die Wake-up-Version dieses Sensors.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) Gibt einen Sensor für das Aufwecken zurück

Ein signifikanter Bewegungsmelder wird ausgelöst, wenn eine signifikante Bewegung erkannt wird, also eine Bewegung, die zu einer Änderung des Nutzerstandorts führen könnte.

Beispiele für solche wichtigen Bewegungen:

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

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

  • Smartphone in der Tasche und Person bewegt sich nicht
  • Das Smartphone liegt auf einem Tisch, der durch den Verkehr oder eine Waschmaschine in der Nähe leicht wackelt.

Der Sensor für erhebliche Bewegungen wird verwendet, um den Stromverbrauch bei der Standortbestimmung zu senken. Wenn die Lokalisierungsalgorithmen erkennen, dass sich das Gerät nicht bewegt, können sie in einen Energiesparmodus wechseln. In diesem Modus ist eine erhebliche Bewegung erforderlich, um das Gerät zu aktivieren, wenn der Nutzer den Standort ändert.

Dieser Sensor muss wenig Strom verbrauchen. Dabei wird ein Kompromiss beim Stromverbrauch eingegangen, der zu einer geringen Anzahl falsch negativer Ergebnisse führen kann. Das hat mehrere Gründe:

  • Ziel dieses Sensors ist es, Strom zu sparen.
  • Das Auslösen eines Ereignisses, wenn sich der Nutzer nicht bewegt (falsch positiv), ist in Bezug auf den Stromverbrauch kostspielig und sollte vermieden werden.
  • Es ist akzeptabel, wenn kein Ereignis ausgelöst wird, wenn sich der Nutzer bewegt (falsch negativ), solange dies nicht wiederholt geschieht. Wenn der Nutzer 10 Sekunden lang gegangen ist, darf in diesen 10 Sekunden kein Ereignis ausgelöst werden.

Für jedes Sensorereignis wird 1 in sensors_event_t.data[0] gemeldet.

Schrittmelder

Zugrunde liegender physischer Sensor: Beschleunigungsmesser (+ möglicherweise andere, sofern sie wenig Strom verbrauchen)

Berichtsmodus: Spezial (ein Ereignis pro ausgeführten Schritt)

Niedriger Energiebedarf

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein Schrittsensor generiert jedes Mal ein Ereignis, wenn der Nutzer einen Schritt macht.

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

Im Vergleich zum Schrittzähler sollte der Schrittdetektor eine geringere Latenz (weniger als zwei Sekunden) aufweisen. Sowohl der Schrittdetektor als auch der Schrittzähler erkennen, wenn der Nutzer geht, läuft oder Treppen steigt. Sie sollten nicht ausgelöst werden, wenn der Nutzer mit dem Fahrrad oder Auto unterwegs ist oder sich in anderen Fahrzeugen befindet.

Dieser Sensor muss wenig Strom verbrauchen. Wenn die Schrittzählung nicht in der Hardware erfolgen kann, sollte dieser Sensor nicht definiert werden. Insbesondere wenn der Schrittzähler aktiviert und der Beschleunigungsmesser deaktiviert ist, sollten nur Schritte Unterbrechungen auslösen (nicht jede Beschleunigungsmessung).

sampling_period_ns hat keine Auswirkungen auf Schrittdetektoren.

Für jedes Sensorereignis wird 1 in sensors_event_t.data[0] gemeldet.

Schrittzähler

Zugrunde liegender physischer Sensor: Beschleunigungsmesser (+ möglicherweise andere, sofern sie wenig Strom verbrauchen)

Berichtsmodus: Bei Änderung

Geringer Stromverbrauch

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein Schrittzähler gibt die Anzahl der Schritte an, die der Nutzer seit dem letzten Neustart gemacht hat, während er aktiviert war.

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

Der Zeitstempel des Ereignisses wird auf die Zeit festgelegt, zu der der letzte Schritt für dieses Ereignis ausgeführt wurde.

Informationen zur Bedeutung des Zeitpunkts eines Schritts finden Sie unter dem Sensortyp Schrittzähler.

Im Vergleich zum Schrittsensor kann der Schrittzähler eine höhere Latenz (bis zu 10 Sekunden) haben. Dank dieser Latenz hat dieser Sensor eine hohe Genauigkeit. Die Schrittzahl nach einem ganzen Tag sollte innerhalb von 10% der tatsächlichen Schrittzahl liegen. Sowohl der Schrittdetektor als auch der Schrittzähler erkennen, wenn der Nutzer geht, läuft oder Treppen steigt. Sie sollten nicht ausgelöst werden, wenn der Nutzer mit dem Fahrrad oder Auto unterwegs ist oder sich in anderen Fahrzeugen befindet.

Die Hardware muss dafür sorgen, dass die interne Schrittzahl nie überläuft. Die Mindestgröße des internen Zählers der Hardware muss 16 Bit betragen. Bei einem drohenden Überlauf (höchstens alle ~2^16 Schritte) kann der SoC aktiviert werden, damit der Treiber die Zählerwartung durchführen kann.

Wie unter Interaktion beschrieben, darf dieser Sensor während des Betriebs keine anderen Sensoren stören, insbesondere nicht den Beschleunigungsmesser, der möglicherweise in Verwendung ist.

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

Dieser Sensor muss wenig Strom verbrauchen. Wenn die Schrittzählung nicht in der Hardware erfolgen kann, sollte dieser Sensor nicht definiert werden. Insbesondere wenn der Schrittzähler aktiviert und der Beschleunigungsmesser deaktiviert ist, sollten nur Schritte Unterbrechungen auslösen (nicht Beschleunigungsmesserdaten).

Neigungssensor

Zugrunde liegender physischer Sensor: Beschleunigungsmesser (+ möglicherweise andere, sofern sie wenig Strom verbrauchen)

Berichtsmodus: Special

Geringer Stromverbrauch

Implementieren Sie nur die Wake-up-Version dieses Sensors.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) Gibt einen Sensor für das Aufwecken zurück

Ein Neigungssensor generiert jedes Mal ein Ereignis, wenn eine Neigung erkannt wird.

Ein Neigungsereignis wird durch die Richtung der durchschnittlichen Schwerkraft im 2-Sekunden-Fenster definiert, die sich seit der Aktivierung oder dem letzten vom Sensor generierten Ereignis um mindestens 35 Grad geändert hat. So funktioniert der Algorithmus:

  • reference_estimated_gravity = Durchschnitt der Beschleunigungsmessungen in der ersten Sekunde nach der Aktivierung oder der geschätzten Schwerkraft, als das letzte Neigungsereignis generiert wurde.
  • current_estimated_gravity = Durchschnitt der Beschleunigungsmesserwerte der letzten 2 Sekunden.
  • Auslösen, wenn angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

Bei starken Beschleunigungen ohne Änderung der Ausrichtung des Smartphones sollte kein Neigungsereignis ausgelöst werden. Eine scharfe Kurve oder eine starke Beschleunigung beim Autofahren sollte beispielsweise kein Neigungsereignis auslösen, auch wenn sich der Winkel der durchschnittlichen Beschleunigung um mehr als 35 Grad ändert. Normalerweise wird dieser Sensor nur mit einem Beschleunigungsmesser implementiert. Andere Sensoren können ebenfalls verwendet werden, sofern sie den Stromverbrauch nicht wesentlich erhöhen. Dies ist ein Sensor mit geringem Stromverbrauch, der es dem SoC ermöglichen sollte, in den Ruhezustand zu wechseln. Dieser Sensor darf nicht im HAL emuliert werden. Bei jedem Sensorereignis wird 1 in sensors_event_t.data[0] gemeldet.

Zusammengesetzte Lagesensoren

Rotationsvektor

Zugrunde liegende physische Sensoren: Beschleunigungsmesser, Magnetometer und Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet werden kann

Ein Rotationsvektorsensor meldet die Ausrichtung des Geräts relativ zum Koordinatensystem „East-North-Up“ (ENU). Sie wird in der Regel durch die Integration von Messwerten von Beschleunigungsmesser, Gyroskop und Magnetometer ermittelt. Das Koordinatensystem „East-North-Up“ (ENU) ist als direkte orthonormale Basis definiert, wobei gilt:

  • X zeigt nach Osten und verläuft tangential zum Boden.
  • Y zeigt nach Norden und verläuft tangential zum Boden.
  • Z zeigt in den Himmel und steht senkrecht zum Boden.

Die Ausrichtung des Smartphones wird durch die Drehung dargestellt, die erforderlich ist, um die Koordinaten für Ost-Nord-Oben mit den Koordinaten des Smartphones in Einklang zu bringen. Das heißt, wenn die Rotation auf den Weltrahmen (X,Y,Z) angewendet wird, werden sie an den Koordinaten des Smartphones (x,y,z) ausgerichtet.

Die Drehung kann als Drehung des Smartphones um einen Winkel Theta um eine Achse rot_axis angesehen werden, um von der Referenz (Ausrichtung nach Osten, Norden und oben) zur aktuellen Geräteausrichtung zu gelangen. Die Drehung wird als die vier einheitenlosen x-, y-, z- und w-Komponenten eines Einheitsquaternions 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)

Dabei gilt:

  • Die Felder „x“, „y“ und „z“ von rot_axis sind die Koordinaten des Einheitsvektors der Rotationsachse im East-North-Up-Koordinatensystem.
  • theta ist der Drehwinkel.

Die Quaternion ist eine Einheitsquaternion: Sie muss die Norm 1 haben. Andernfalls kann es zu unregelmäßigem Clientverhalten kommen.

Außerdem gibt dieser Sensor eine geschätzte Kursgenauigkeit an:

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

Der Kursfehler muss in 95% der Fälle unter estimated_accuracy liegen. Dieser Sensor muss ein Gyroskop als primäre Eingabe für die Änderung der Ausrichtung verwenden.

Dieser Sensor verwendet auch Beschleunigungsmesser- und Magnetometereingaben, um die Gyroskopdrift auszugleichen. Er kann nicht nur mit dem Beschleunigungsmesser und dem Magnetometer implementiert werden.

Spielrotationsvektor

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

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein Sensor für die Spielrotation ist ähnlich wie ein Sensor für den Rotationsvektor, verwendet aber nicht das geomagnetische Feld. Daher zeigt die Y-Achse nicht nach Norden, sondern auf eine andere Referenz. Diese Referenz darf um dieselbe Größenordnung abweichen wie die Drift des Gyroskops um die Z-Achse.

Weitere Informationen zum Festlegen von sensors_event_t.data[0-3] finden Sie unter Rotationsvektorsensor. Dieser Sensor meldet keine geschätzte Kursgenauigkeit: sensors_event_t.data[4] ist reserviert und sollte auf 0 festgelegt werden.

Im Idealfall sollte ein Smartphone, das gedreht und in dieselbe Ausrichtung in der realen Welt zurückgebracht wird, denselben Spielrotationsvektor melden.

Dieser Sensor muss auf einem Gyroskop und einem Beschleunigungsmesser basieren. Das Magnetometer kann nicht als Eingabe verwendet werden, außer indirekt durch die Schätzung des Gyroskop-Bias.

Gravity

Zugrunde liegende physische Sensoren: Beschleunigungsmesser und (falls vorhanden) Gyroskop (oder Magnetometer, wenn kein Gyroskop vorhanden ist)

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GRAVITY) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

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

Die Komponenten des Schwerkraftvektors werden in m/s² in den Feldern „x“, „y“ und „z“ von sensors_event_t.acceleration gemeldet.

Wenn sich das Gerät in Ruhe befindet, sollte die Ausgabe des Schwerkraftsensors mit der des Beschleunigungsmessers identisch sein. Auf der Erde beträgt der Betrag etwa 9, 8 m/s².

Wenn das Gerät ein Gyroskop hat, muss der Schwerkraftsensor das Gyroskop und den Beschleunigungsmesser als Eingabe verwenden.

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

Geomagnetischer Rotationsvektor

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

Berichtsmodus: Kontinuierlich

Geringer Stromverbrauch

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

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

Dieser Sensor muss auf einem Magnetometer basieren. Sie kann nicht mit einem Gyroskop implementiert werden und Gyroskopeingaben können von diesem Sensor nicht verwendet werden.

Weitere Informationen zum Festlegen von sensors_event_t.data[0-4] finden Sie unter Rotationsvektorsensor.

Genau wie beim Sensor für den Rotationsvektor muss der Kursfehler in 95% der Fälle kleiner als die geschätzte Genauigkeit (sensors_event_t.data[4]) sein.

Dieser Sensor muss wenig Strom verbrauchen und muss daher in der Hardware implementiert werden.

Ausrichtung (eingestellt)

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

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ORIENTATION) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Hinweis:Dies ist ein älterer Sensortyp, der im Android SDK eingestellt wurde. Er wurde durch den Sensor für den Rotationsvektor ersetzt, der klarer definiert ist. Verwenden Sie nach Möglichkeit den Rotationsvektorsensor anstelle des Orientierungssensors.

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

  • sensors_event_t.orientation.x: Azimut, der Winkel zwischen der Richtung des magnetischen Nordens 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: Neigung, 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.

Aus historischen Gründen ist der Rollwinkel im Uhrzeigersinn positiv. Mathematisch gesehen sollte sie im Uhrzeigersinn positiv sein:

Darstellung der Ausrichtung relativ zu einem Gerät

Abbildung 3: Ausrichtung relativ zu einem Gerät

Diese Definition unterscheidet sich von den in der Luftfahrt verwendeten Begriffen „Gieren“, „Nicken“ und „Rollen“, bei denen die X-Achse entlang der Längsseite des Flugzeugs verläuft (vom Heck zur Nase).

Der Ausrichtungssensor gibt über sensors_event_t.orientation.status auch an, wie genau seine Messwerte voraussichtlich sein werden. Weitere Informationen zu den möglichen Werten für dieses Feld finden Sie in den SENSOR_STATUS_*-Konstanten von SensorManager.

Nicht kalibrierte Sensoren

Unkalibrierte Sensoren liefern mehr Rohdaten und können einige Abweichungen aufweisen, enthalten aber auch weniger „Sprünge“ durch Korrekturen, die durch die Kalibrierung angewendet werden. Einige Apps bevorzugen möglicherweise diese nicht kalibrierten Ergebnisse, da sie gleichmäßiger und zuverlässiger sind. Wenn eine App beispielsweise versucht, eigene Sensorfusion durchzuführen, können Kalibrierungen die Ergebnisse verzerren.

Beschleunigungsmesser nicht kalibriert

Zugrunde liegender physischer Sensor: Beschleunigungsmesser

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein nicht kalibrierter Beschleunigungsmesser meldet die Beschleunigung des Geräts entlang der drei Sensorachsen ohne Bias-Korrektur (der werkseitige Bias und die Temperaturkompensation werden auf nicht kalibrierte Messungen angewendet) sowie eine Bias-Schätzung. Alle Werte werden in SI-Einheiten (m/s²) angegeben und in den Feldern von sensors_event_t.uncalibrated_accelerometer gemeldet:

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

Gyroskop nicht kalibriert

Zugrunde liegender physischer Sensor: Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein nicht kalibriertes Gyroskop gibt die Rotationsgeschwindigkeit um die Sensorachsen ohne Bias-Korrektur sowie eine Bias-Schätzung an. Alle Werte werden in Radiant pro Sekunde angegeben und 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 Abweichung um die X-Achse
  • y_bias: Geschätzte Abweichung um die Y-Achse
  • z_bias: Geschätzte Abweichung um die Z-Achse

Konzeptionell ist die nicht kalibrierte Messung die Summe der kalibrierten Messung und der Schätzung der Verzerrung: _uncalibrated = _calibrated + _bias.

Die Werte für x_bias, y_bias und z_bias sollten sich sprunghaft ändern, sobald sich die Schätzung des Bias ändert. Danach sollten sie stabil bleiben.

Weitere Informationen zum verwendeten Koordinatensystem finden Sie in der Definition des Gyroskopsensors.

Auf die Messungen müssen die Werkskalibrierung und die Temperaturkompensation angewendet werden. Außerdem muss die Schätzung der Gyroskop-Drift implementiert werden, damit in x_bias, y_bias und z_bias sinnvolle Schätzungen gemeldet werden können. Wenn die Implementierung die Abweichung nicht schätzen kann, darf dieser Sensor nicht implementiert werden.

Wenn dieser Sensor vorhanden ist, muss auch der entsprechende Gyroskop-Sensor vorhanden sein. Beide Sensoren müssen dieselben sensor_t.name- und sensor_t.vendor-Werte haben.

Magnetfeld nicht kalibriert

Zugrunde liegender physischer Sensor: Magnetometer

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein nicht kalibrierter Magnetfeldsensor meldet das Magnetfeld der Umgebung zusammen mit einer Schätzung der Hard-Iron-Kalibrierung. Alle Werte werden in Mikrotesla (uT) angegeben und in den Feldern von sensors_event_t.uncalibrated_magnetic gemeldet:

  • x_uncalib: Magnetfeld (ohne Hard-Iron-Kompensation) entlang der X‑Achse
  • y_uncalib: Magnetfeld (ohne Hard-Iron-Korrektur) entlang der Y-Achse
  • z_uncalib: Magnetfeld (ohne Hard-Iron-Kompensation) entlang der Z-Achse
  • x_bias: geschätzter Hard-Iron-Bias entlang der X-Achse
  • y_bias: geschätzter Hard-Iron-Bias entlang der Y-Achse
  • z_bias: geschätzter Hard-Iron-Bias entlang der Z-Achse

Konzeptionell ist die nicht kalibrierte Messung die Summe der kalibrierten Messung und der Schätzung der Verzerrung: _uncalibrated = _calibrated + _bias.

Das nicht kalibrierte Magnetometer ermöglicht es Algorithmen auf höherer Ebene, eine schlechte Schätzung des harten Eisens zu verarbeiten. Die Werte x_bias, y_bias und z_bias sollten sich sprunghaft ändern, sobald sich die Schätzung der Hard-Iron-Veränderungen ändert. Danach sollten sie stabil bleiben.

Auf die Messungen müssen eine Weicheisen-Kalibrierung und eine Temperaturkompensation angewendet werden. Außerdem muss die Schätzung von Hard-Iron-Effekten implementiert werden, damit in x_bias, y_bias und z_bias sinnvolle Schätzungen gemeldet werden können. Wenn die Implementierung den Bias nicht schätzen kann, darf dieser Sensor nicht implementiert werden.

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

Scharnierwinkel

Berichtsmodus: Bei Änderung

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) Gibt einen Sensor für das Aufwachen zurück

Ein Scharnierwinkelsensor misst den Winkel in Grad zwischen zwei integralen Teilen des Geräts. Die Bewegung eines Scharniers, die von diesem Sensortyp gemessen wird, soll die Art und Weise verändern, wie der Nutzer mit dem Gerät interagieren kann, z. B. durch Aufklappen oder Aufdecken eines Displays.

Zusammengesetzte Interaktionssensoren

Einige Sensoren werden hauptsächlich verwendet, um Interaktionen mit dem Nutzer zu erkennen. Wir legen nicht fest, wie diese Sensoren implementiert werden müssen. Sie müssen jedoch einen geringen Stromverbrauch haben. Der Gerätehersteller ist dafür verantwortlich, ihre Qualität in Bezug auf die Nutzerfreundlichkeit zu überprüfen.

Geste zum Aktivieren

Zugrunde liegende physische Sensoren: Nicht definiert (alles mit geringem Stromverbrauch)

Berichtsmodus: One-Shot

Geringer Stromverbrauch

Implementieren Sie nur die Wake-up-Version dieses Sensors.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) Gibt einen Sensor für das Aufwecken zurück

Ein Sensor für die Aufwachgeste ermöglicht das Aufwecken des Geräts durch eine gerätespezifische Bewegung. Wenn dieser Sensor ausgelöst wird, verhält sich das Gerät so, als ob die Ein/Aus-Taste gedrückt wurde, und schaltet das Display ein. Dieses Verhalten (Aktivieren des Displays, wenn dieser Sensor ausgelöst wird) kann vom Nutzer in den Geräteeinstellungen deaktiviert werden. Änderungen an den Einstellungen haben keine Auswirkungen auf das Verhalten des Sensors. Sie legen nur fest, ob das Display durch das Framework eingeschaltet wird, wenn der Sensor ausgelöst wird. Die tatsächlich zu erkennende Geste ist nicht festgelegt und kann vom Gerätehersteller ausgewählt werden.

Dieser Sensor muss wenig Strom verbrauchen, da er wahrscheinlich rund um die Uhr aktiviert ist.

Für jedes Sensorereignis wird 1 in sensors_event_t.data[0] gemeldet.

Geste zum Aufnehmen

Zugrunde liegende physische Sensoren: Nicht definiert (alles mit geringem Stromverbrauch)

Berichtsmodus: One-Shot

Geringer Stromverbrauch

Implementieren Sie nur die Wake-up-Version dieses Sensors.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) Gibt einen Sensor für das Aufwecken zurück

Ein Sensor für die Aufnahmebewegung wird ausgelöst, wenn das Gerät aufgenommen wird, unabhängig davon, wo es sich zuvor befand (Schreibtisch, Tasche, Rucksack).

Für jedes Sensorereignis wird 1 in sensors_event_t.data[0] gemeldet.

Blickgeste

Zugrunde liegende physische Sensoren: Nicht definiert (alles mit geringem Stromverbrauch)

Berichtsmodus: One-Shot

Geringer Stromverbrauch

Implementieren Sie nur die Wake-up-Version dieses Sensors.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) Gibt einen Sensor für das Aufwecken zurück

Ein Sensor für die Blickgeste ermöglicht das kurze Einschalten des Displays, damit der Nutzer Inhalte auf dem Display auf Grundlage einer bestimmten Bewegung sehen kann. Wenn dieser Sensor ausgelöst wird, schaltet das Gerät das Display kurz ein, damit der Nutzer Benachrichtigungen oder andere Inhalte sehen kann, während das Gerät gesperrt und in einem nicht interaktiven Zustand (Dozing) ist. Danach wird das Display wieder ausgeschaltet. Dieses Verhalten (kurzes Einschalten des Displays, wenn dieser Sensor ausgelöst wird) kann vom Nutzer in den Geräteeinstellungen deaktiviert werden. Änderungen an den Einstellungen haben keine Auswirkungen auf das Verhalten des Sensors. Sie bestimmen lediglich, ob das Display kurz eingeschaltet wird, wenn der Sensor ausgelöst wird. Die tatsächlich zu erkennende Geste ist nicht angegeben und kann vom Hersteller des Geräts ausgewählt werden.

Dieser Sensor muss wenig Strom verbrauchen, da er wahrscheinlich rund um die Uhr aktiviert ist. Bei jedem Sensorereignis wird 1 in sensors_event_t.data[0] gemeldet.

IMU-Sensoren mit eingeschränkten Achsen

IMU-Sensoren mit eingeschränkten Achsen sind ab Android 13 verfügbar und unterstützen Anwendungsfälle, in denen nicht alle drei Achsen (x, y, z) verfügbar sind. Bei Standard-IMU-Typen in Android (z. B. SENSOR_TYPE_ACCELEROMETER und SENSOR_TYPE_GYROSCOPE) wird davon ausgegangen, dass alle drei Achsen unterstützt werden. Allerdings unterstützen nicht alle Formfaktoren und Geräte 3‑Achsen-Beschleunigungsmesser und 3‑Achsen-Gyroskope.

Beschleunigungsmesser – eingeschränkte Achsen

Zugehörige physische Sensoren: Beschleunigungsmesser

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein Beschleunigungsmesser mit eingeschränkten Achsen entspricht TYPE_ACCELEROMETER, unterstützt aber Fälle, in denen eine oder zwei Achsen nicht unterstützt werden.

Die letzten drei vom Sensor gemeldeten Sensorereigniswerte geben an, ob der Beschleunigungswert für die X-, Y- und Z-Achse unterstützt wird. Der Wert 1.0 gibt an, dass die Achse unterstützt wird, der Wert 0, dass sie nicht unterstützt wird. Gerätehersteller geben die unterstützten Achsen zur Build-Zeit an. Die Werte ändern sich während der Laufzeit nicht.

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

Begrenzte Achsen des Gyroskops

Zugrunde liegende physische Sensoren: Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein Gyroskop mit eingeschränkten Achsen entspricht TYPE_GYROSCOPE, unterstützt aber Fälle, in denen eine oder zwei Achsen nicht unterstützt werden.

Die letzten drei vom Sensor gemeldeten Sensorereigniswerte geben an, ob der Winkelgeschwindigkeitswert für die X-, Y- und Z-Achse unterstützt wird. Der Wert 1.0 gibt an, dass die Achse unterstützt wird, der Wert 0, dass sie nicht unterstützt wird. Gerätehersteller geben die unterstützten Achsen zur Build-Zeit an. Die Werte ändern sich während der Laufzeit nicht.

Gerätehersteller müssen die Werte für die Winkelgeschwindigkeit für nicht verwendete Achsen auf 0 festlegen.

Beschleunigungsmesser – begrenzte Achsen nicht kalibriert

Zugehörige physische Sensoren: Beschleunigungsmesser

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein nicht kalibrierter Sensor mit eingeschränkten Achsen für den Beschleunigungsmesser entspricht TYPE_ACCELEROMETER_UNCALIBRATED, unterstützt aber Fälle, in denen eine oder zwei Achsen nicht unterstützt werden.

Die letzten drei Sensorereigniswerte, die vom Sensor gemeldet werden, geben an, ob die Beschleunigungs- und Bias-Werte für die X-, Y- und Z-Achse unterstützt werden. Der Wert 1.0 gibt an, dass die Achse unterstützt wird, der Wert 0, dass sie nicht unterstützt wird. Gerätehersteller geben die unterstützten Achsen zur Build-Zeit an. Die Werte ändern sich während der Laufzeit nicht.

Gerätehersteller müssen die Beschleunigungs- und Bias-Werte für nicht verwendete Achsen auf 0 festlegen.

Gyroskop – eingeschränkte Achsen nicht kalibriert

Zugrunde liegende physische Sensoren: Gyroskop

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ein Gyroskop mit eingeschränkten Achsen und unkalibriertem Sensor entspricht TYPE_GYROSCOPE_UNCALIBRATED, unterstützt aber Fälle, in denen eine oder zwei Achsen nicht unterstützt werden.

Die letzten drei Sensorereigniswerte, die vom Sensor gemeldet werden, geben an, ob die Werte für Winkelgeschwindigkeit und Drift für die X-, Y- und Z-Achse unterstützt werden. Der Wert 1.0 gibt an, dass die Achse unterstützt wird, der Wert 0, dass sie nicht unterstützt wird. Gerätehersteller geben die unterstützten Achsen zur Build-Zeit an. Die Werte ändern sich während der Laufzeit nicht.

Gerätehersteller müssen die Werte für Winkelgeschwindigkeit und Drift für nicht verwendete Achsen auf 0 festlegen.

Zusammengesetzte IMU mit begrenzter Achsenzahl

Zugrunde liegende physische Sensoren: Eine beliebige Kombination aus 3‑Achsen-Beschleunigungsmesser, 3‑Achsen-Gyroskop, unkalibriertem 3‑Achsen-Beschleunigungsmesser und unkalibriertem 3‑Achsen-Gyroskop.

Berichtsmodus: Kontinuierlich

Ein zusammengesetzter IMU-Sensor mit eingeschränkten Achsen entspricht einem IMU-Sensor mit eingeschränkten Achsen. Anstatt jedoch auf der HAL unterstützt zu werden, werden die 3-Achsen-Sensordaten in die entsprechenden Varianten mit eingeschränkten Achsen umgewandelt. Diese zusammengesetzten Sensoren sind nur für Geräte im Automobilbereich aktiviert.

Die folgende Tabelle zeigt ein Beispiel für die Konvertierung von einem Standard-3-Achsen-Beschleunigungsmesser in einen zusammengesetzten Beschleunigungsmesser mit eingeschränkten Achsen.

SensorEvent-Werte für SENSOR_TYPE_ACCELEROMETER Beispiel für SENSOR_TYPE_ACCELEROMETER SensorEvent Zusammengesetztes SensorEvent vom Typ SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES
values[0]

–0,065

–0,065

values[1]

0,078

0,078

values[2]

9.808

9.808

values[3]

1.0

values[4]

1.0

values[5]

1.0

Automobilsensoren

Sensoren zur Unterstützung von Automotive-Anwendungsfällen.

Überschrift

Zugrunde liegende physische Sensoren: Eine beliebige Kombination aus GPS, Magnetometer, Beschleunigungsmesser und Gyroskop.

Berichtsmodus: Kontinuierlich

getDefaultSensor(SENSOR_TYPE_HEADING) gibt einen Sensor zurück, der nicht zum Aufwecken des Geräts verwendet wird

Ab Android 13 misst ein Richtungssensor die Richtung, in die das Gerät zeigt, relativ zum geografischen Norden in Grad. Der Kurs-Sensor enthält zwei SensorEvent-Werte. Einer für die Ausrichtung des gemessenen Geräts und einer für die Genauigkeit des angegebenen Ausrichtungswerts.

Die von diesem Sensor gemeldeten Kurswerte müssen zwischen 0.0 (einschließlich) und 360.0 (ausschließlich) liegen. Dabei steht 0 für Norden, 90 für Osten, 180 für Süden und 270 für Westen.

Die Genauigkeit für diesen Sensor wird mit einem Konfidenzniveau von 68 % definiert. Wenn die zugrunde liegende Verteilung normal ist, entspricht die Genauigkeit einer Standardabweichung. Wenn der Kurs-Sensor beispielsweise einen Kurswert von 60 Grad und einen Genauigkeitswert von 10 Grad zurückgibt, besteht eine Wahrscheinlichkeit von 68 %, dass der tatsächliche Kurs zwischen 50 und 70 Grad liegt.