Cette section décrit les axes de capteur, les capteurs de base et les capteurs composites (activité, attitude, non calibrés et interaction).
Axes du capteur
Les valeurs des événements de capteur de nombreux capteurs sont exprimées dans un cadre spécifique qui est statique par rapport à l'appareil.
Axes des appareils mobiles
L'API Sensor n'est relative qu'à l'orientation naturelle de l'écran (les axes ne sont pas inversés lorsque l'orientation de l'écran de l'appareil change).

Figure 1 : Système de coordonnées (par rapport à un appareil mobile) utilisé par l'API Sensor
Axes automobiles
Dans les implémentations Android Automotive, les axes sont définis par rapport au châssis du véhicule. L'origine du repère du véhicule est le centre de l'essieu arrière. Le repère du véhicule est orienté de sorte que :
- L'axe X pointe vers la droite et se trouve sur un plan horizontal, perpendiculaire au plan de symétrie du véhicule.
- L'axe Y pointe vers l'avant et se trouve sur un plan horizontal.

Figure 2. Système de coordonnées (par rapport à un appareil automobile) utilisé par l'API Sensor
Le repère du véhicule est un système de coordonnées direct. L'axe Z pointe donc vers le haut.
L'axe Z du repère est aligné sur la gravité, ce qui signifie que les axes X et Y sont tous deux horizontaux. Par conséquent, l'axe Y ne passe pas toujours par l'essieu avant.
Capteurs de base
Les types de capteurs de base sont nommés d'après les capteurs physiques qu'ils représentent. Ces capteurs transmettent les données d'un seul capteur physique (contrairement aux capteurs composites qui génèrent des données à partir d'autres capteurs). Voici quelques exemples de types de capteurs de base :
SENSOR_TYPE_ACCELEROMETER
SENSOR_TYPE_GYROSCOPE
SENSOR_TYPE_MAGNETOMETER
Toutefois, les capteurs de base ne sont pas identiques à leurs capteurs physiques sous-jacents et ne doivent pas être confondus avec eux. Les données d'un capteur de base ne sont pas la sortie brute du capteur physique, car des corrections (telles que la compensation du biais et de la température) sont appliquées.
Par exemple, les caractéristiques d'un capteur de base peuvent être différentes de celles de son capteur physique sous-jacent dans les cas d'utilisation suivants :
- Un chip gyroscope dont la plage de biais est de 1 degré/seconde.
- Après la calibration en usine, la compensation de température et la compensation de biais sont appliquées.Le biais réel du capteur Android est alors réduit, peut-être jusqu'à un point où le biais est garanti inférieur à 0, 01 degré/seconde.
- Dans ce cas, nous disons que le capteur Android présente un biais inférieur à 0,01 degré/s, même si la fiche technique du capteur sous-jacent indique 1 degré/s.
- Un baromètre avec une consommation d'énergie de 100 uW.
- Étant donné que les données générées doivent être transportées du chip au SoC, le coût énergétique réel pour collecter les données du capteur barométrique Android peut être beaucoup plus élevé, par exemple 1 000 uW.
- Dans ce cas, nous disons que le capteur Android a une consommation d'énergie de 1 000 uW, même si la consommation d'énergie mesurée au niveau des broches de la puce du baromètre est de 100 uW.
- Un magnétomètre qui consomme 100 uW lorsqu'il est calibré, mais qui consomme plus lors du calibrage.
- Sa routine de calibration peut nécessiter l'activation du gyroscope, qui consomme 5 000 uW, et l'exécution d'un algorithme, qui coûte 900 uW supplémentaires.
- Dans ce cas, nous disons que la consommation d'énergie maximale du capteur Android (magnétomètre) est de 6 000 uW.
- Dans ce cas, la consommation électrique moyenne est la mesure la plus utile. C'est celle qui est indiquée dans les caractéristiques statiques du capteur via le HAL.
Accéléromètre
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)
renvoie un capteur sans réveil
Un capteur accéléromètre indique l'accélération de l'appareil le long des trois axes du capteur. L'accélération mesurée inclut à la fois l'accélération physique (changement de vitesse) et la gravité. La mesure est indiquée dans les champs x, y et z de sensors_event_t.acceleration.
Toutes les valeurs sont exprimées en unités SI (m/s^2) et mesurent l'accélération de l'appareil moins la force de gravité le long des trois axes du capteur.
Voici quelques exemples :
- La norme de (x, y, z) doit être proche de 0 en cas de chute libre.
- Lorsque l'appareil est à plat sur une table et qu'il est poussé sur son côté gauche vers la droite, la valeur de l'accélération x est positive.
- Lorsque l'appareil est posé à plat sur une table, la valeur d'accélération le long de l'axe Z est de +9,81 alo, ce qui correspond à l'accélération de l'appareil (0 m/s^2) moins la force de gravité (-9,81 m/s^2).
- Lorsque l'appareil est à plat sur une table et qu'il est poussé vers le ciel, la valeur d'accélération est supérieure à +9,81, ce qui correspond à l'accélération de l'appareil (+A m/s^2) moins la force de gravité (-9,81 m/s^2).
Les lectures sont calibrées à l'aide des éléments suivants :
- Compensation de température
- Calibration du biais en ligne
- Calibration en ligne de la balance
La calibration du biais et de l'échelle ne doit être mise à jour que lorsque le capteur est désactivé, afin d'éviter de provoquer des sauts de valeurs pendant le streaming.
L'accéléromètre indique également la précision attendue de ses lectures via sensors_event_t.acceleration.status
. Pour en savoir plus sur les valeurs possibles pour ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
.
Température ambiante
Reporting-mode : On-change
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)
renvoie un capteur sans réveil
Ce capteur fournit la température ambiante (de la pièce) en degrés Celsius.
Capteur de champ magnétique
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)
renvoie un capteur sans réveil
SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD
Un capteur de champ magnétique (également appelé magnétomètre) indique le champ magnétique ambiant, tel qu'il est mesuré le long des trois axes du capteur.
La mesure est indiquée dans les champs x, y et z de sensors_event_t.magnetic
. Toutes les valeurs sont exprimées en microteslas (uT).
Le magnétomètre indique également la précision attendue de ses lectures via sensors_event_t.magnetic.status
. Pour en savoir plus sur les valeurs possibles pour ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
.
Les lectures sont calibrées à l'aide des éléments suivants :
- Compensation de température
- Calibrage en usine (ou en ligne) du fer doux
- Calibration en ligne du fer doux
Gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
renvoie un capteur sans réveil
Un capteur gyroscopique indique la vitesse de rotation de l'appareil autour des trois axes du capteur.
La rotation est positive dans le sens inverse des aiguilles d'une montre (règle de la main droite). En d'autres termes, un observateur regardant un appareil positionné à l'origine depuis un emplacement positif sur l'axe X, Y ou Z signalera une rotation positive si l'appareil semble tourner dans le sens inverse des aiguilles d'une montre. Notez qu'il s'agit de la définition mathématique standard de la rotation positive, qui ne correspond pas à la définition aéronautique du roulis.
La mesure est indiquée dans les champs x, y et z de sensors_event_t.gyro
. Toutes les valeurs sont exprimées en radians par seconde (rad/s).
Les lectures sont calibrées à l'aide des éléments suivants :
- Compensation de température
- Compensation de la balance en usine (ou en ligne)
- Calibration des biais en ligne (pour supprimer la dérive)
Le gyroscope indique également la précision attendue de ses lectures via sensors_event_t.gyro.status
. Pour en savoir plus sur les valeurs possibles pour ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
.
Le gyroscope ne peut pas être émulé à partir de magnétomètres et d'accéléromètres, car cela réduirait sa cohérence et sa réactivité locales. Il doit être basé sur une puce gyroscope habituelle.
Fréquence cardiaque
Reporting-mode : On-change
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
renvoie un capteur sans réveil
Un capteur de fréquence cardiaque indique la fréquence cardiaque actuelle de la personne qui touche l'appareil.
La fréquence cardiaque actuelle en battements par minute (BPM) est indiquée dans sensors_event_t.heart_rate.bpm
, et l'état du capteur est indiqué dans sensors_event_t.heart_rate.status
. Pour en savoir plus sur les valeurs possibles pour ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
. En particulier, lors de la première activation, sauf si l'appareil est connu pour ne pas être sur le corps, le champ d'état du premier événement doit être défini sur SENSOR_STATUS_UNRELIABLE
. Comme ce capteur est "on-change", les événements ne sont générés que lorsque heart_rate.bpm
ou heart_rate.status
ont changé depuis le dernier événement. Les événements ne sont générés qu'une fois toutes les sampling_period
.
Le framework remplace automatiquement sensor_t.requiredPermission
par l'autorisation appropriée pour maintenir la compatibilité. Le framework utilise l'autorisation SENSOR_PERMISSION_READ_HEART_RATE
pour Android 16 et versions ultérieures, et l'autorisation SENSOR_PERMISSION_BODY_SENSORS
pour Android 15 et versions antérieures.
Léger
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_LIGHT)
renvoie un capteur sans réveil
Un capteur de luminosité indique l'éclairement actuel en unités SI (lux).
La mesure est indiquée dans sensors_event_t.light
.
Proximité
Reporting-mode: On-change
Généralement défini comme un capteur de réveil
getDefaultSensor(SENSOR_TYPE_PROXIMITY)
renvoie un capteur de réveil
Un capteur de proximité indique la distance entre le capteur et la surface visible la plus proche.
Jusqu'à Android 4.4, les capteurs de proximité étaient toujours des capteurs de réveil, qui réveillaient le SoC lorsqu'ils détectaient un changement de proximité. Après Android 4.4, nous vous conseillons d'implémenter d'abord la version avec réveil de ce capteur, car c'est celle qui est utilisée pour allumer et éteindre l'écran lors des appels téléphoniques.
La mesure est indiquée en centimètres dans sensors_event_t.distance
. Notez que certains capteurs de proximité n'acceptent qu'une mesure binaire "proche" ou "éloigné".
Dans ce cas, le capteur indique sa valeur sensor_t.maxRange
dans l'état "loin" et une valeur inférieure à sensor_t.maxRange
dans l'état "proche".
Pression
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_PRESSURE)
renvoie un capteur sans réveil
Un capteur de pression (également appelé baromètre) indique la pression atmosphérique en hectopascals (hPa).
Les lectures sont calibrées à l'aide de
- Compensation de température
- Calibrage du biais en usine
- Calibrage à l'échelle de l'usine
Le baromètre est souvent utilisé pour estimer les changements d'altitude. Pour estimer l'altitude absolue, la pression au niveau de la mer (qui change en fonction de la météo) doit être utilisée comme référence.
Humidité relative
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
renvoie un capteur sans réveil
Un capteur d'humidité relative mesure l'humidité relative de l'air ambiant et renvoie une valeur en pourcentage.
Types de capteurs composites
Un capteur composite génère des données en traitant et/ou en fusionnant les données d'un ou plusieurs capteurs physiques. (Tout capteur qui n'est pas un capteur de base est appelé capteur composite.) Voici quelques exemples de capteurs composites :
- Détecteur de pas et mouvement important, qui sont généralement basés sur un accéléromètre, mais qui pourraient également être basés sur d'autres capteurs si la consommation d'énergie et la précision étaient acceptables.
- Vecteur de rotation du jeu, basé sur un accéléromètre et un gyroscope.
- Le gyroscope non calibré, qui est semblable au capteur de base du gyroscope, mais dont la calibration du biais est signalée séparément au lieu d'être corrigée dans la mesure.
Comme pour les capteurs de base, les caractéristiques des capteurs composites proviennent de celles de leurs données finales. Par exemple, la consommation d'énergie d'un vecteur de rotation du jeu est probablement égale à la somme des consommations d'énergie de la puce de l'accéléromètre, de la puce du gyroscope, de la puce traitant les données et des bus transportant les données. Par exemple, la dérive d'un vecteur de rotation de jeu dépend autant de la qualité de l'algorithme de calibration que des caractéristiques physiques du capteur.
Le tableau suivant répertorie les types de capteurs composites disponibles. Chaque capteur composite s'appuie sur les données d'un ou plusieurs capteurs physiques. Évitez de choisir d'autres capteurs physiques sous-jacents pour approximer les résultats, car ils offrent une mauvaise expérience utilisateur.
Type de capteur | Catégorie | Capteurs physiques sous-jacents | Mode de reporting |
---|---|---|---|
Attitude |
Accéléromètre, gyroscope, NE DOIT PAS UTILISER le magnétomètre |
Continu |
|
Attitude |
Accéléromètre, magnétomètre, NE DOIT PAS UTILISER le gyroscope |
Continu |
|
Geste "Coup d'œil" ![]() |
Interaction |
Indéterminé |
One-shot |
Attitude |
Accéléromètre, gyroscope (le cas échéant) ou magnétomètre (si le gyroscope n'est pas présent) |
Continu |
|
Non calibré |
Gyroscope |
Continu |
|
Activité |
Accéléromètre, gyroscope (le cas échéant) ou magnétomètre (si le gyroscope n'est pas présent) |
Continu |
|
Non calibré |
Magnétomètre |
Continu |
|
Orientation (obsolète) |
Attitude |
Accéléromètre, magnétomètre, gyroscope (le cas échéant) |
Continu |
Interaction |
Indéterminé |
One-shot |
|
Attitude |
Accéléromètre, magnétomètre, gyroscope (le cas échéant) |
Continu |
|
Activité |
Accéléromètre (ou un autre capteur à très faible consommation d'énergie) |
One-shot |
|
Activité |
Accéléromètre |
Lors d'un changement |
|
Activité |
Accéléromètre |
Spécial |
|
Activité |
Accéléromètre |
Spécial |
|
Interaction |
Indéterminé |
One-shot |
= Capteur basse consommation
Capteurs composites d'activité
Accélération linéaire
Capteurs physiques sous-jacents : accéléromètre et (le cas échéant) gyroscope (ou magnétomètre si le gyroscope n'est pas présent)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
renvoie un capteur sans réveil
Un capteur d'accélération linéaire indique l'accélération linéaire de l'appareil dans le cadre du capteur, sans inclure la gravité.
Conceptuellement, la sortie correspond à la sortie de l'accéléromètre moins la sortie du capteur de gravité. Elle est exprimée en m/s^2 dans les champs x, y et z de sensors_event_t.acceleration
.
Les valeurs sur tous les axes doivent être proches de 0 lorsque l'appareil est immobile.
Si l'appareil possède un gyroscope, le capteur d'accélération linéaire doit utiliser le gyroscope et l'accéléromètre comme entrée.
Si l'appareil ne possède pas de gyroscope, le capteur d'accélération linéaire doit utiliser l'accéléromètre et le magnétomètre comme entrée.
Mouvement important
Capteur physique sous-jacent : accéléromètre (ou un autre capteur à faible consommation d'énergie)
Reporting-mode: One-shot
Faible consommation d'énergie
Implémentez uniquement la version avec réveil de ce capteur.
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)
renvoie un capteur de réveil
Un détecteur de mouvement important se déclenche lorsqu'il détecte un mouvement important, c'est-à-dire un mouvement susceptible d'entraîner un changement de position de l'utilisateur.
Voici quelques exemples de motions importantes :
- À pied ou à vélo
- Assis dans une voiture, un car ou un train en mouvement
Voici quelques exemples de situations qui ne déclenchent pas de mouvement important :
- Téléphone dans la poche et personne immobile
- Un téléphone est posé sur une table qui tremble légèrement à cause de la circulation ou d'une machine à laver à proximité.
De manière générale, le détecteur de mouvement important est utilisé pour réduire la consommation d'énergie de la détermination de la position. Lorsque les algorithmes de localisation détectent que l'appareil est statique, ils peuvent passer en mode basse consommation, où ils s'appuient sur un mouvement important pour réactiver l'appareil lorsque l'utilisateur change de position.
Ce capteur doit être à faible consommation d'énergie. Il fait un compromis sur la consommation d'énergie, ce qui peut entraîner un petit nombre de faux négatifs. Plusieurs raisons expliquent cette décision :
- L'objectif de ce capteur est d'économiser de l'énergie.
- Déclencher un événement lorsque l'utilisateur ne bouge pas (faux positif) est coûteux en termes de consommation d'énergie. Il faut donc l'éviter.
- Il est acceptable qu'un événement ne soit pas déclenché lorsque l'utilisateur se déplace (faux négatif), à condition que cela ne se produise pas de manière répétée. Si l'utilisateur marche depuis 10 secondes, il n'est pas acceptable qu'aucun événement ne soit déclenché pendant ces 10 secondes.
Chaque événement de capteur indique 1
dans sensors_event_t.data[0]
.
Détecteur de pas
Capteur physique sous-jacent : accéléromètre (et éventuellement d'autres, à condition qu'ils soient à faible consommation d'énergie)
Reporting-mode: Special (one event per step taken)
Faible consommation d'énergie
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
renvoie un capteur sans réveil
Un détecteur de pas génère un événement chaque fois que l'utilisateur fait un pas.
Le code temporel de l'événement sensors_event_t.timestamp
correspond au moment où le pied a touché le sol, ce qui a généré une forte variation de l'accélération.
Par rapport au compteur de pas, le détecteur de pas doit avoir une latence plus faible (moins de deux secondes). Le détecteur de pas et le compteur de pas détectent lorsque l'utilisateur marche, court et monte les escaliers. Elles ne doivent pas se déclencher lorsque l'utilisateur fait du vélo, conduit ou se trouve dans d'autres véhicules.
Ce capteur doit être à faible consommation d'énergie. En d'autres termes, si la détection de pas ne peut pas être effectuée au niveau matériel, ce capteur ne doit pas être défini. En particulier, lorsque le détecteur de pas est activé et que l'accéléromètre ne l'est pas, seuls les pas doivent déclencher des interruptions (et non chaque lecture de l'accéléromètre).
sampling_period_ns
n'a aucun impact sur les détecteurs de pas.
Chaque événement de capteur indique 1
dans sensors_event_t.data[0]
.
Podomètre
Capteur physique sous-jacent : accéléromètre (et éventuellement d'autres, à condition qu'ils soient à faible consommation d'énergie)
Reporting-mode: On-change
Faible consommation d'énergie
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
renvoie un capteur sans réveil
Un compteur de pas indique le nombre de pas effectués par l'utilisateur depuis le dernier redémarrage, lorsqu'il est activé.
La mesure est indiquée sous la forme d'un uint64_t
dans sensors_event_t.step_counter
et n'est réinitialisée à zéro qu'en cas de redémarrage du système.
L'horodatage de l'événement est défini sur l'heure à laquelle la dernière étape de cet événement a été effectuée.
Pour connaître la signification de l'heure d'un pas, consultez le type de capteur Détecteur de pas.
Par rapport au détecteur de pas, le compteur de pas peut avoir une latence plus élevée (jusqu'à 10 secondes). Grâce à cette latence, ce capteur est très précis. Le nombre de pas après une journée complète de mesures devrait être à moins de 10 % du nombre de pas réel. Le détecteur de pas et le compteur de pas détectent lorsque l'utilisateur marche, court et monte les escaliers. Ils ne doivent pas se déclencher lorsque l'utilisateur fait du vélo, conduit ou se trouve dans d'autres véhicules.
Le matériel doit s'assurer que le nombre de pas interne ne dépasse jamais la limite. La taille minimale du compteur interne du matériel doit être de 16 bits. En cas de dépassement imminent (au maximum toutes les ~2^16 étapes), le SoC peut être réactivé pour que le pilote puisse effectuer la maintenance du compteur.
Comme indiqué dans Interaction, lorsque ce capteur fonctionne, il ne doit pas perturber les autres capteurs, en particulier l'accéléromètre, qui peut très bien être en cours d'utilisation.
Si un appareil particulier n'est pas compatible avec ces modes de fonctionnement, ce type de capteur ne doit pas être signalé par la HAL. Autrement dit, il n'est pas acceptable d'"émuler" ce capteur dans la HAL.
Ce capteur doit être à faible consommation d'énergie. En d'autres termes, si la détection de pas ne peut pas être effectuée au niveau matériel, ce capteur ne doit pas être défini. En particulier, lorsque le compteur de pas est activé et que l'accéléromètre ne l'est pas, seuls les pas doivent déclencher des interruptions (et non les données de l'accéléromètre).
Détecteur d'inclinaison
Capteur physique sous-jacent : accéléromètre (et éventuellement d'autres, à condition qu'ils soient à faible consommation d'énergie)
Reporting-mode: Special
Faible consommation d'énergie
Implémentez uniquement la version avec réveil de ce capteur.
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)
renvoie un capteur de réveil
Un détecteur d'inclinaison génère un événement chaque fois qu'une inclinaison est détectée.
Un événement d'inclinaison est défini par la direction de la gravité moyenne de la fenêtre de deux secondes, qui change d'au moins 35 degrés depuis l'activation ou le dernier événement généré par le capteur. Voici l'algorithme :
reference_estimated_gravity
= moyenne des mesures de l'accéléromètre au cours de la première seconde après l'activation ou gravité estimée lors de la génération du dernier événement d'inclinaison.current_estimated_gravity
= moyenne des mesures de l'accéléromètre au cours des deux dernières secondes.- Déclenchement lorsqu'un utilisateur…
angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees
Les fortes accélérations sans changement d'orientation du téléphone ne doivent pas déclencher d'événement d'inclinaison. Par exemple, un virage serré ou une forte accélération au volant d'une voiture ne doivent pas déclencher d'événement d'inclinaison, même si l'angle de l'accélération moyenne peut varier de plus de 35 degrés.
En règle générale, ce capteur est implémenté à l'aide d'un accéléromètre uniquement. D'autres capteurs peuvent également être utilisés s'ils n'augmentent pas la consommation d'énergie de manière significative. Il s'agit d'un capteur basse consommation qui devrait permettre au SoC de passer en mode veille. N'émulez pas ce capteur dans la HAL. Chaque événement de capteur indique 1
dans sensors_event_t.data[0]
.
Capteurs composites d'attitude
Vecteur de rotation
Capteurs physiques sous-jacents : accéléromètre, magnétomètre et gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)
renvoie un capteur non wake-up
Un capteur de vecteur de rotation indique l'orientation de l'appareil par rapport au repère de coordonnées Est-Nord-Haut. Elle est généralement obtenue en intégrant les lectures de l'accéléromètre, du gyroscope et du magnétomètre. Le système de coordonnées Est-Nord-Haut est défini comme une base orthonormée directe où :
- X pointe vers l'est et est tangent au sol.
- Y pointe vers le nord et est tangent au sol.
- L'axe Z pointe vers le ciel et est perpendiculaire au sol.
L'orientation du téléphone est représentée par la rotation nécessaire pour aligner les coordonnées Est-Nord-Haut avec celles du téléphone. Autrement dit, l'application de la rotation au repère du monde (X,Y,Z) les alignerait sur les coordonnées du téléphone (x,y,z).
La rotation peut être considérée comme une rotation du téléphone d'un angle thêta autour d'un axe rot_axis
pour passer de l'orientation de l'appareil de référence (alignée sur l'axe Est-Nord-Haut) à l'orientation actuelle de l'appareil. La rotation est encodée sous la forme des quatre composantes x, y, z, w sans unité d'un quaternion unitaire :
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)
Où :
- Les champs x, y et z de
rot_axis
sont les coordonnées est-nord-haut d'un vecteur de longueur unitaire représentant l'axe de rotation. theta
est l'angle de rotation.
Le quaternion est un quaternion unitaire : sa norme doit être 1
.
Si vous ne le faites pas, le client aura un comportement erratique.
De plus, ce capteur indique une précision de cap estimée :
sensors_event_t.data[4] = estimated_accuracy
(en radians)
L'erreur de cap doit être inférieure à estimated_accuracy
95 % du temps. Ce capteur doit utiliser un gyroscope comme principale entrée de changement d'orientation.
Ce capteur utilise également les données de l'accéléromètre et du magnétomètre pour compenser la dérive du gyroscope. Il ne peut pas être implémenté en utilisant uniquement l'accéléromètre et le magnétomètre.
Vecteur de rotation du jeu
Capteurs physiques sous-jacents : accéléromètre et gyroscope (pas de magnétomètre)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)
renvoie un capteur sans réveil
Un capteur de vecteur de rotation de jeu est semblable à un capteur de vecteur de rotation, mais il n'utilise pas le champ géomagnétique. L'axe Y ne pointe donc pas vers le nord, mais vers une autre référence. Cette référence peut dériver du même ordre de grandeur que la dérive du gyroscope autour de l'axe Z.
Pour savoir comment définir sensors_event_t.data[0-3]
, consultez le capteur Vecteur de rotation. Ce capteur ne signale pas de précision de cap estimée :
sensors_event_t.data[4]
est réservé et doit être défini sur 0
.
Dans l'idéal, un téléphone qui est pivoté et remis dans la même orientation dans le monde réel doit signaler le même vecteur de rotation du jeu.
Ce capteur doit être basé sur un gyroscope et un accéléromètre. Il ne peut pas utiliser le magnétomètre comme entrée, sauf indirectement, par le biais de l'estimation du biais du gyroscope.
Gravity
Capteurs physiques sous-jacents : accéléromètre et (le cas échéant) gyroscope (ou magnétomètre si le gyroscope n'est pas présent)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GRAVITY)
renvoie un capteur sans réveil
Un capteur de gravité indique la direction et l'intensité de la gravité dans les coordonnées de l'appareil.
Les composants du vecteur de gravité sont indiqués en m/s^2 dans les champs x, y et z de sensors_event_t.acceleration
.
Lorsque l'appareil est au repos, la sortie du capteur de gravité doit être identique à celle de l'accéléromètre. Sur Terre, la magnitude est d'environ 9,8 m/s^2.
Si l'appareil possède un gyroscope, le capteur de gravité doit utiliser le gyroscope et l'accéléromètre comme entrée.
Si l'appareil ne possède pas de gyroscope, le capteur de gravité doit utiliser l'accéléromètre et le magnétomètre comme entrée.
Vecteur de rotation géomagnétique
Capteurs physiques sous-jacents : accéléromètre et magnétomètre (pas de gyroscope)
Reporting-mode: Continuous
Faible consommation d'énergie
getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)
renvoie un capteur sans réveil
Un vecteur de rotation géomagnétique est semblable à un capteur de vecteur de rotation, mais il utilise un magnétomètre et non un gyroscope.
Ce capteur doit être basé sur un magnétomètre. Il ne peut pas être implémenté à l'aide d'un gyroscope, et l'entrée du gyroscope ne peut pas être utilisée par ce capteur.
Pour savoir comment définir sensors_event_t.data[0-4]
, consultez le capteur Vecteur de rotation.
Comme pour le capteur de vecteur de rotation, l'erreur de cap doit être inférieure à la précision estimée (sensors_event_t.data[4]
) 95 % du temps.
Ce capteur doit être à basse consommation et doit donc être implémenté dans le matériel.
Orientation (obsolète)
Capteurs physiques sous-jacents : accéléromètre, magnétomètre et gyroscope (le cas échéant)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
renvoie un capteur sans réveil
Remarque : Il s'agit d'un ancien type de capteur qui a été abandonné dans le SDK Android. Il a été remplacé par le capteur de vecteur de rotation, qui est plus clairement défini. Utilisez le capteur de vecteur de rotation plutôt que le capteur d'orientation chaque fois que possible.
Un capteur d'orientation indique l'attitude de l'appareil. Les mesures sont indiquées en degrés dans les champs x, y et z de sensors_event_t.orientation
:
sensors_event_t.orientation.x
: azimut, angle entre la direction du nord magnétique et l'axe Y, autour de l'axe Z (0<=azimuth<360
). 0=Nord, 90=Est, 180=Sud, 270=Ouest.sensors_event_t.orientation.y
: tangage, rotation autour de l'axe X (-180<=pitch<=180
), avec des valeurs positives lorsque l'axe Z se déplace vers l'axe Y.sensors_event_t.orientation.z
: roulis, rotation autour de l'axe Y (-90<=roll<=90
), avec des valeurs positives lorsque l'axe X se déplace vers l'axe Z.
Veuillez noter que, pour des raisons historiques, l'angle de roulis est positif dans le sens des aiguilles d'une montre. (Mathématiquement parlant, il doit être positif dans le sens inverse des aiguilles d'une montre) :

Figure 3. Orientation par rapport à un appareil
Cette définition diffère du lacet, du tangage et du roulis utilisés en aviation, où l'axe X est orienté dans le sens de la longueur de l'avion (de la queue au nez).
Le capteur d'orientation indique également la précision attendue de ses lectures via sensors_event_t.orientation.status
. Pour en savoir plus sur les valeurs possibles de ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
.
Capteurs non calibrés
Les capteurs non calibrés fournissent des résultats plus bruts et peuvent inclure un certain biais, mais contiennent également moins de "sauts" dus aux corrections appliquées lors de la calibration. Certaines applications peuvent préférer ces résultats non calibrés, car ils sont plus fluides et plus fiables. Par exemple, si une application tente d'effectuer sa propre fusion de capteurs, l'introduction de calibrages peut en fait fausser les résultats.
Accéléromètre non calibré
Capteur physique sous-jacent : accéléromètre
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
renvoie un capteur sans réveil
Un capteur d'accéléromètre non calibré indique l'accélération de l'appareil le long des trois axes du capteur sans correction de biais (le biais d'usine et la compensation de température sont appliqués aux mesures non calibrées), ainsi qu'une estimation du biais.
Toutes les valeurs sont exprimées en unités SI (m/s^2) et sont indiquées dans les champs de sensors_event_t.uncalibrated_accelerometer
:
x_uncalib
: accélération (sans compensation du biais) le long de l'axe Xy_uncalib
: accélération (sans compensation du biais) le long de l'axe Yz_uncalib
: accélération (sans compensation du biais) le long de l'axe Zx_bias
: biais estimé le long de l'axe Xy_bias
: biais estimé le long de l'axe Yz_bias
: biais estimé le long de l'axe Z
Gyroscope non calibré
Capteur physique sous-jacent : gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
renvoie un capteur sans réveil
Un gyroscope non calibré indique la vitesse de rotation autour des axes du capteur sans appliquer de compensation du biais, ainsi qu'une estimation du biais. Toutes les valeurs sont exprimées en radians/seconde et sont indiquées dans les champs de sensors_event_t.uncalibrated_gyro
:
x_uncalib
: vitesse angulaire (sans compensation de la dérive) autour de l'axe Xy_uncalib
: vitesse angulaire (sans compensation de la dérive) autour de l'axe Yz_uncalib
: vitesse angulaire (sans compensation de la dérive) autour de l'axe Zx_bias
: dérive estimée autour de l'axe Xy_bias
: dérive estimée autour de l'axe Yz_bias
: dérive estimée autour de l'axe Z
Conceptuellement, la mesure non calibrée correspond à la somme de la mesure calibrée et de l'estimation du biais : _uncalibrated = _calibrated + _bias
.
Les valeurs x_bias
, y_bias
et z_bias
devraient augmenter dès que l'estimation du biais change, et rester stables le reste du temps.
Pour en savoir plus sur le système de coordonnées utilisé, consultez la définition du capteur gyroscope.
L'étalonnage en usine et la compensation de température doivent être appliqués aux mesures. De plus, l'estimation de la dérive du gyroscope doit être implémentée afin que des estimations raisonnables puissent être signalées dans x_bias
, y_bias
et z_bias
. Si l'implémentation n'est pas en mesure d'estimer la dérive, ce capteur ne doit pas être implémenté.
Si ce capteur est présent, le capteur Gyroscope correspondant doit également être présent, et les deux capteurs doivent partager les mêmes valeurs sensor_t.name
et sensor_t.vendor
.
Champ magnétique non calibré
Capteur physique sous-jacent : magnétomètre
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
renvoie un capteur sans réveil
Un capteur de champ magnétique non calibré indique le champ magnétique ambiant ainsi qu'une estimation de la calibration du fer dur. Toutes les valeurs sont exprimées en microteslas (uT) et sont indiquées dans les champs de sensors_event_t.uncalibrated_magnetic
:
x_uncalib
: champ magnétique (sans compensation du fer doux) le long de l'axe Xy_uncalib
: champ magnétique (sans compensation du fer doux) le long de l'axe Yz_uncalib
: champ magnétique (sans compensation hard-iron) le long de l'axe Zx_bias
: biais hard-iron estimé le long de l'axe Xy_bias
: biais hard-iron estimé le long de l'axe Yz_bias
: biais de fer dur estimé le long de l'axe Z
Conceptuellement, la mesure non calibrée correspond à la somme de la mesure calibrée et de l'estimation du biais : _uncalibrated = _calibrated + _bias
.
Le magnétomètre non calibré permet aux algorithmes de niveau supérieur de gérer une mauvaise estimation du fer dur. Les valeurs x_bias
, y_bias
et z_bias
devraient augmenter dès que l'estimation du fer dur change, puis rester stables le reste du temps.
La calibration du fer doux et la compensation de température doivent être appliquées aux mesures. L'estimation du fer dur doit également être implémentée afin que des estimations raisonnables puissent être signalées dans x_bias
, y_bias
et z_bias
. Si l'implémentation n'est pas en mesure d'estimer le biais, ce capteur ne doit pas être implémenté.
Si ce capteur est présent, le capteur de champ magnétique correspondant doit également l'être, et les deux capteurs doivent partager les mêmes valeurs sensor_t.name
et sensor_t.vendor
.
Angle de la charnière
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
renvoie un capteur de réveil
Un capteur d'angle de charnière mesure l'angle, en degrés, entre deux parties intégrales de l'appareil. Le mouvement d'une charnière mesuré par ce type de capteur est censé modifier la façon dont l'utilisateur peut interagir avec l'appareil, par exemple en dépliant ou en révélant un écran.
Capteurs composites d'interaction
Certains capteurs sont principalement utilisés pour détecter les interactions avec l'utilisateur. Nous ne définissons pas la manière dont ces capteurs doivent être implémentés, mais ils doivent être à faible consommation d'énergie. Il incombe au fabricant de l'appareil de vérifier leur qualité en termes d'expérience utilisateur.
Geste pour réactiver l'écran
Capteurs physiques sous-jacents : non définis (tout ce qui est basse consommation)
Reporting-mode: One-shot
Faible consommation d'énergie
Implémentez uniquement la version avec réveil de ce capteur.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
renvoie un capteur de réveil
Un capteur de geste de réveil permet de réveiller l'appareil en fonction d'un mouvement spécifique à l'appareil. Lorsque ce capteur se déclenche, l'appareil se comporte comme si le bouton Marche/Arrêt avait été enfoncé, ce qui allume l'écran. Ce comportement (allumer l'écran lorsque ce capteur se déclenche) peut être désactivé par l'utilisateur dans les paramètres de l'appareil. Les modifications apportées aux paramètres n'ont aucune incidence sur le comportement du capteur. Elles déterminent uniquement si le framework allume l'écran lorsqu'il se déclenche. Le geste à détecter n'est pas spécifié et peut être choisi par le fabricant de l'appareil.
Ce capteur doit être à faible consommation d'énergie, car il est susceptible d'être activé 24h/24 et 7j/7.
Chaque événement de capteur indique 1
dans sensors_event_t.data[0]
.
Geste de prise en charge
Capteurs physiques sous-jacents : non définis (tout ce qui est basse consommation)
Reporting-mode: One-shot
Faible consommation d'énergie
Implémentez uniquement la version avec réveil de ce capteur.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
renvoie un capteur de réveil
Un capteur de geste de prise en main se déclenche lorsque l'appareil est pris en main, quelle que soit sa position précédente (sur un bureau, dans une poche ou dans un sac).
Chaque événement de capteur indique 1
dans sensors_event_t.data[0]
.
Geste Regarder
Capteurs physiques sous-jacents : non définis (tout ce qui est basse consommation)
Reporting-mode: One-shot
Faible consommation d'énergie
Implémentez uniquement la version avec réveil de ce capteur.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
renvoie un capteur de réveil
Un capteur de geste de balayage permet d'allumer brièvement l'écran pour permettre à l'utilisateur de consulter le contenu à l'écran en fonction d'un mouvement spécifique. Lorsque ce capteur se déclenche, l'écran de l'appareil s'allume brièvement pour permettre à l'utilisateur de consulter les notifications ou d'autres contenus pendant que l'appareil reste verrouillé dans un état non interactif (veille), puis l'écran s'éteint à nouveau. Ce comportement (allumer brièvement l'écran lorsque ce capteur se déclenche) peut être désactivé par l'utilisateur dans les paramètres de l'appareil. Les modifications apportées aux paramètres n'ont pas d'incidence sur le comportement du capteur. Elles déterminent uniquement si le framework allume brièvement l'écran lorsqu'il se déclenche. Le geste à détecter n'est pas spécifié et peut être choisi par le fabricant de l'appareil.
Ce capteur doit être à faible consommation d'énergie, car il est susceptible d'être activé 24h/24 et 7j/7.
Chaque événement de capteur indique 1
dans sensors_event_t.data[0]
.
Capteurs IMU à axes limités
Disponibles à partir d'Android 13, les capteurs IMU à axes limités sont des capteurs qui prennent en charge les cas d'utilisation où les trois axes (x, y, z) ne sont pas tous disponibles. Les types d'IMU standards dans Android (tels que
SENSOR_TYPE_ACCELEROMETER
et
SENSOR_TYPE_GYROSCOPE
)
supposent que les trois axes sont pris en charge. Toutefois, tous les facteurs de forme et appareils ne sont pas compatibles avec les accéléromètres et gyroscopes à trois axes.
Axes limités de l'accéléromètre
Capteurs physiques sous-jacents : accéléromètre
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
renvoie un capteur sans réveil
Un capteur d'accéléromètre à axes limités équivaut à TYPE_ACCELEROMETER
, mais prend en charge les cas où un ou deux axes ne sont pas pris en charge.
Les trois dernières valeurs d'événement de capteur signalées par le capteur indiquent si la valeur d'accélération pour les axes X, Y et Z est acceptée. Une valeur 1.0
indique que l'axe est compatible, et une valeur 0
indique qu'il ne l'est pas. Les fabricants d'appareils identifient les axes compatibles au moment de la compilation, et les valeurs ne changent pas pendant l'exécution.
Les fabricants d'appareils doivent définir les valeurs d'accélération des axes inutilisés sur 0
au lieu de valeurs indéfinies.
Axes limités du gyroscope
Capteurs physiques sous-jacents : gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
renvoie un capteur sans réveil
Un capteur de gyroscope à axes limités équivaut à TYPE_GYROSCOPE
, mais prend en charge les cas où un ou deux axes ne sont pas pris en charge.
Les trois dernières valeurs d'événement du capteur signalées par le capteur indiquent si la valeur de la vitesse angulaire pour les axes X, Y et Z est acceptée. Une valeur 1.0
indique que l'axe est compatible, et une valeur 0
indique qu'il ne l'est pas. Les fabricants d'appareils identifient les axes compatibles au moment de la compilation, et les valeurs ne changent pas pendant l'exécution.
Les fabricants d'appareils doivent définir les valeurs de vitesse angulaire des axes inutilisés sur 0
.
Accéléromètre : axes limités non calibrés
Capteurs physiques sous-jacents : accéléromètre
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
renvoie un capteur sans réveil
Un capteur d'accéléromètre non calibré à axes limités équivaut à TYPE_ACCELEROMETER_UNCALIBRATED
, mais prend en charge les cas où un ou deux axes ne sont pas pris en charge.
Les trois dernières valeurs d'événement du capteur signalées par le capteur indiquent si les valeurs d'accélération et de biais pour les axes x, y et z sont prises en charge. Une valeur 1.0
indique que l'axe est compatible, et une valeur 0
indique qu'il ne l'est pas. Les fabricants d'appareils identifient les axes compatibles au moment de la compilation, et les valeurs ne changent pas pendant l'exécution.
Les fabricants d'appareils doivent définir les valeurs d'accélération et de biais pour les axes inutilisés sur 0
.
Gyroscope à axes limités non calibré
Capteurs physiques sous-jacents : gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
renvoie un capteur sans réveil
Un capteur gyroscope non calibré à axes limités équivaut à TYPE_GYROSCOPE_UNCALIBRATED
, mais il est compatible avec les cas où un ou deux axes ne sont pas pris en charge.
Les trois dernières valeurs d'événement de capteur signalées par le capteur indiquent si les valeurs de vitesse angulaire et de dérive pour les axes X, Y et Z sont prises en charge. Une valeur 1.0
indique que l'axe est compatible, et une valeur 0
indique qu'il ne l'est pas. Les fabricants d'appareils identifient les axes compatibles au moment de la compilation, et les valeurs ne changent pas pendant l'exécution.
Les fabricants d'appareils doivent définir les valeurs de vitesse angulaire et de dérive des axes inutilisés sur 0
.
IMU à axes limités composites
Capteurs physiques sous-jacents : toute combinaison d'accéléromètre à trois axes, de gyroscope à trois axes, d'accéléromètre à trois axes non calibré et de gyroscope à trois axes non calibré.
Reporting-mode: Continuous
Un capteur IMU à axes limités composite est équivalent à un capteur IMU à axes limités, mais au lieu d'être pris en charge au niveau de la HAL, il convertit les données du capteur à trois axes en variantes à axes limités équivalentes. Ces capteurs composites ne sont activés que pour les appareils automobiles.
Le tableau suivant présente un exemple de conversion d'un accéléromètre standard à trois axes en un accéléromètre composite à axes limités.
Valeurs SensorEvent pour SENSOR_TYPE_ACCELEROMETER | Exemple d'événement SensorEvent SENSOR_TYPE_ACCELEROMETER | Composite SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent |
---|---|---|
values[0] | -0.065 |
-0.065 |
values[1] | 0.078 |
0.078 |
values[2] | 9.808 |
9.808 |
values[3] | N/A |
1.0 |
values[4] | N/A |
1.0 |
values[5] | N/A |
1.0 |
Capteurs automobiles
Capteurs pour prendre en charge les cas d'utilisation automobile.
Titre
Capteurs physiques sous-jacents : toute combinaison de GPS, de magnétomètre, d'accéléromètre et de gyroscope.
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_HEADING)
renvoie un capteur sans réveil
Disponible à partir d'Android 13, un capteur de cap mesure en degrés la direction dans laquelle pointe l'appareil par rapport au nord géographique. Le capteur de cap inclut deux valeurs SensorEvent
.
Une pour l'en-tête de l'appareil mesuré et une pour la précision de la valeur de l'en-tête fournie.
Les valeurs de cap signalées par ce capteur doivent être comprises entre 0.0
(inclus) et 360.0
(exclus), avec 0
indiquant le nord, 90
l'est, 180
le sud et 270
l'ouest.
La précision de ce capteur est définie à un niveau de confiance de 68 %. Dans le cas où la distribution sous-jacente est normale gaussienne, la précision correspond à un écart-type. Par exemple, si le capteur de cap renvoie une valeur de cap de 60 degrés et une valeur de précision de 10 degrés, il y a 68 % de chances que le cap réel soit compris entre 50 et 70 degrés.