Cette section décrit les axes des capteurs, les capteurs de base et les capteurs composites (activité, attitude, non calibré et interaction).
Axes des capteurs
Les valeurs d'événements des capteurs de nombreux capteurs sont exprimées dans un frame spécifique qui est statique par rapport à l'appareil.
Axes de l'appareil mobile
L'API Sensor n'est relative qu'à l'orientation naturelle de l'écran (les axes ne sont pas permutés lorsque l'orientation de l'écran de l'appareil change).
Axes de l'automobile
Dans les implémentations Android Automotive, les axes sont définis par rapport au cadre de la carrosserie du véhicule. L'origine du cadre de référence du véhicule est le centre de l'essieu arrière. Le cadre de référence 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.
Le cadre de référence du véhicule est un système de coordonnées à main droite. Par conséquent, l'axe Z pointe vers le haut.
L'axe Z du cadre de référence est aligné sur la gravité, ce qui signifie que l'axe X et l'axe 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 à leur capteur physique sous-jacent et ne doivent pas être confondus avec celui-ci. Les données provenant d'un capteur de base ne constituent pas la sortie brute du capteur physique, car des corrections (telles que la compensation de biais et la compensation de 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 de gyroscope avec une plage de biais de 1 deg/s.
- Après le calibrage en usine, la compensation de la température et la compensation du biais sont appliquées.Le biais réel du capteur Android est alors réduit, peut-être à un point où le biais est garanti en dessous de 0, 01 deg/s.
- Dans ce cas, nous disons que le capteur Android présente un biais inférieur à 0,01 deg/s, alors que la fiche technique du capteur sous-jacent indique 1 deg/s.
- Un baromètre d'une consommation d'énergie de 100 uW
- Étant donné que les données générées doivent être transportées de la puce au SoC, le coût énergétique réel pour collecter les données du capteur Android du baromètre peut être beaucoup plus élevé, par exemple 1 000 µW.
- Dans ce cas, nous disons que le capteur Android a une consommation d'énergie de 1 000 µW, même si la consommation d'énergie mesurée aux broches du chip baromètre est de 100 µW.
- Un magnétomètre qui consomme 100 µW lors de la calibration, mais consomme plus lors de la calibration.
- Sa routine d'étalonnage peut nécessiter l'activation du gyroscope, ce qui consomme 5 000 uW et l'exécution d'un algorithme, ce qui représente un coût supplémentaire de 900 uW.
- Dans ce cas, nous disons que la consommation d'énergie maximale du capteur Android (magnétomètre) est de 6 000 µW.
- Dans ce cas, la consommation d'énergie moyenne est la mesure la plus utile, et c'est ce qui est indiqué dans les caractéristiques statiques du capteur via le HAL.
Accéléromètre
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)
renvoie un capteur de réveil
Un accéléromètre indique l'accélération de l'appareil le long des trois axes des capteurs. 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²) et mesurent l'accélération de l'appareil moins la force de gravité sur les trois axes du capteur.
Voici quelques exemples:
- La norme de (x, y, z) doit être proche de 0 en chute libre.
- Lorsque l'appareil est posé à plat sur une table et qu'il est poussé sur son côté gauche vers la droite, la valeur d'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²) moins la force de gravité (-9,81 m/s²).
- Lorsque l'appareil est posé à 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²) moins la force de gravité (-9,81 m/s²).
Les mesures sont calibrées à l'aide des éléments suivants:
- Compensation de température
- Calibration du biais en ligne
- Calibrage de l'échelle en ligne
Le calibrage du biais et de l'échelle ne doit être mis à 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 pour ses mesures via sensors_event_t.acceleration.status
. Pour en savoir plus sur les valeurs possibles de ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
.
Température ambiante
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)
renvoie un capteur de réveil
Ce capteur fournit la température ambiante (de la pièce) en degrés Celsius.
Capteur de champ magnétique
Mode création de rapports: continu
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)
renvoie un capteur de 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, 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
, et toutes les valeurs sont exprimées en micro-Tesla (uT).
Le magnétomètre indique également la précision attendue pour ses mesures via sensors_event_t.magnetic.status
. Pour en savoir plus sur les valeurs possibles de ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
.
Les mesures sont calibrées à l'aide des éléments suivants:
- Compensation de température
- Calibrage en usine (ou en ligne) avec fer doux
- Étalonnage du fer dur en ligne
Gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
renvoie un capteur de réveil
Un capteur de gyroscope 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). Autrement dit, un observateur regardant un appareil positionné à l'origine depuis un point positif sur les axes X, Y ou Z indiquerait une rotation positive si l'appareil semblait 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 et qu'elle ne correspond pas à la définition aérospatiale 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 mesures sont calibrées à l'aide des éléments suivants:
- Compensation de température
- Compensation de la mise à l'échelle en usine (ou en ligne)
- Calibrage des biais en ligne (pour éliminer la dérive)
Le gyroscope indique également le degré de précision attendu de ses relevés via sensors_event_t.gyro.status
. Pour en savoir plus sur les valeurs possibles de ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
.
Le gyroscope ne peut pas être émulé en fonction des magnétomètres et des accéléromètres, car cela réduirait sa cohérence et sa réactivité locales. Il doit être basé sur une puce de gyroscope habituelle.
Fréquence cardiaque
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
renvoie un capteur de 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 de ce champ, consultez les constantes
SENSOR_STATUS_*
de
SensorManager
. En particulier, lors de la première activation, sauf si l'appareil n'est pas porté, le champ d'état du premier événement doit être défini sur SENSOR_STATUS_UNRELIABLE
. Étant donné que ce capteur est activé en cas de modification, les événements sont générés uniquement lorsque heart_rate.bpm
ou heart_rate.status
ont changé depuis le dernier événement. Les événements ne sont pas générés plus d'une fois toutes les sampling_period
.
sensor_t.requiredPermission
est toujours SENSOR_PERMISSION_BODY_SENSORS
.
Léger
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_LIGHT)
renvoie un capteur de réveil
Un capteur de luminosité indique l'éclairage actuel en unités SI de 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'à la version Android 4.4, les capteurs de proximité étaient toujours des capteurs d'activation, qui réveillent le SoC lors de la détection d'un changement de proximité. Après Android 4.4, nous vous recommandons d'implémenter d'abord la version de réveil de ce capteur, car c'est celle qui permet d'allumer et d'é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 "loin".
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
Mode création de rapports: continu
getDefaultSensor(SENSOR_TYPE_PRESSURE)
renvoie un capteur de réveil
Un capteur de pression (également appelé baromètre) indique la pression atmosphérique en hectopascals (hPa).
Les mesures sont calibrées à l'aide de
- Compensation de température
- Calibrage du biais d'usine
- Étalonnage de l'échelle d'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 varie 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 de 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 de 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 peuvent également être basés sur d'autres capteurs, si la consommation d'énergie et la précision sont acceptables.
- Vecteur de rotation du jeu, basé sur un accéléromètre et un gyroscope.
- Gyroscope non étalonné, qui est semblable au capteur de base du gyroscope, mais dont le calibrage du biais est indiqué séparément au lieu d'être corrigé dans la mesure.
Comme pour les capteurs de base, les caractéristiques des capteurs composites proviennent des caractéristiques de leurs données finales. Par exemple, la consommation d'énergie d'un vecteur de rotation de jeu est probablement égale à la somme des consommations d'énergie de la puce d'accéléromètre, de la puce de gyroscope, de la puce qui traite les données et des bus qui les transportent. Autre exemple : la dérive d'un vecteur de rotation de jeu dépend autant de la qualité de l'algorithme d'étalonnage 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 de plusieurs capteurs physiques. Évitez de choisir d'autres capteurs physiques sous-jacents pour obtenir des résultats approximatifs, car ils offrent une mauvaise expérience utilisateur.
Type de capteur | Catégorie | Capteurs physiques sous-jacents | Mode de création de rapports |
---|---|---|---|
Attitude |
Accéléromètre, gyroscope, NE DOIT PAS UTILISER de magnétomètre |
Continu |
|
Attitude |
Accéléromètre, magnétomètre, NE DOIVENT PAS UTILISER le gyroscope |
Continu |
|
Geste de balayage | Interaction |
Indéterminé |
One-shot |
Attitude |
Accéléromètre, gyroscope |
Continu |
|
Non étalonné |
Gyroscope |
Continu |
|
Activité |
Accéléromètre, gyroscope (s'il y en a un) ou magnétomètre (s'il n'y en a pas) |
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 |
Continu |
|
Activité |
Accéléromètre (ou autre, à condition que la consommation d'énergie soit très faible) |
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 (si présent) gyroscope (ou magnétomètre si le gyroscope n'est pas présent)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
renvoie un capteur de 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é. Il est indiqué en m/s^2 dans les champs x, y et z de sensors_event_t.acceleration
.
Les lectures sur tous les axes doivent être proches de 0 lorsque l'appareil est immobile.
Si l'appareil est équipé d'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 dispose 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, à condition qu'il consomme peu d'énergie)
Reporting-mode: One-shot
Faible consommation d'énergie
N'implémentez que la version de réveil de ce capteur.
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)
renvoie un capteur d'activation
Un détecteur de mouvement significatif se déclenche lors de la détection d'un mouvement important, c'est-à-dire un mouvement susceptible d'entraîner une modification de la position géographique de l'utilisateur.
Voici quelques exemples de motions importantes:
- À pied ou à vélo
- Assis dans une voiture, un autocar ou un train en mouvement
Exemples de situations qui ne déclenchent pas de mouvement important:
- Téléphone dans la poche et personne immobile
- Le téléphone est posé sur une table qui tremble un peu en raison du trafic ou d'un lave-linge à proximité
De manière générale, le détecteur de mouvement important permet de réduire la consommation d'énergie de la détermination de l'emplacement. 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éveiller l'appareil lorsque l'utilisateur change de position.
Ce capteur doit être à faible consommation d'énergie. Il effectue un compromis sur la consommation d'énergie, ce qui peut entraîner un petit nombre de faux négatifs. Cela s'explique par plusieurs raisons:
- 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 d'énergie. Il est donc préférable de l'éviter.
- Le fait de ne pas déclencher d'événement lorsque l'utilisateur se déplace (faux négatif) est acceptable tant qu'il n'est pas répété. Si l'utilisateur marche depuis 10 secondes, il n'est pas acceptable de ne pas déclencher d'événement dans ces 10 secondes.
Chaque événement de capteur signale 1
dans sensors_event_t.data[0]
.
Détecteur de pas
Capteur physique sous-jacent: accéléromètre (+ éventuellement d'autres, à condition que la puissance soit faible)
Mode de création de rapports: spécifique (un événement par étape effectuée)
Faible consommation d'énergie
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
renvoie un capteur qui n'est pas activé
Un détecteur de pas génère un événement chaque fois qu'un pas est effectué par l'utilisateur.
L'horodatage de l'événement sensors_event_t.timestamp
correspond au moment où le pied touche le sol, ce qui génère une forte variation d'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. Autrement dit, si la détection de pas ne peut pas être effectuée au niveau matériel, ce capteur ne doit pas être défini. Plus particulièrement, lorsque le détecteur de pas est activé et que l'accéléromètre ne l'est pas, seules les étapes 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 signale 1
dans sensors_event_t.data[0]
.
Podomètre
Capteur physique sous-jacent: accéléromètre (+ éventuellement d'autres, à condition que la puissance soit faible)
Reporting-mode: On-change
Faible consommation d'énergie
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
renvoie un capteur de 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 signalée en tant que uint64_t
dans sensors_event_t.step_counter
et n'est remise à zéro qu'au redémarrage du système.
Le code temporel de l'événement est défini sur l'heure à laquelle la dernière étape a été effectuée pour cet événement.
Consultez le type de capteur Détecteur de pas pour connaître la signification de l'heure d'un 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 offre une grande précision. Le nombre de pas après une journée complète de mesures doit se situer dans les 10% du nombre de pas réel. Le détecteur de pas et le compteur de pas détectent tous deux quand l'utilisateur marche, court ou 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.
Le matériel doit s'assurer que le nombre de pas interne ne déborde jamais. La taille minimale du compteur interne du matériel doit être de 16 bits. En cas de débordement imminent (au maximum toutes les étapes 2^16), le SoC peut être réveillé pour que le pilote puisse effectuer la maintenance du compteur.
Comme indiqué dans la section Interaction, ce capteur ne doit pas perturber les autres capteurs, en particulier l'accéléromètre, qui peut très bien être utilisé.
Si un appareil particulier ne prend pas en charge ces modes de fonctionnement, ce type de capteur ne doit pas être signalé par le HAL. Autrement dit, il n'est pas acceptable d'"émuler" ce capteur dans le HAL.
Ce capteur doit être à faible consommation d'énergie. Autrement dit, 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, seules les étapes 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 (+ éventuellement d'autres, à condition que la puissance soit faible)
Reporting-mode: Special
Faible consommation d'énergie
N'implémentez que la version de 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'un événement d'inclinaison est détecté.
Un événement d'inclinaison est défini par la direction de la gravité moyenne sur une période 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 utilisé:
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 lorsque le dernier événement d'inclinaison a été généré.current_estimated_gravity
= moyenne des mesures de l'accéléromètre au cours des deux dernières secondes.- Déclenchement lorsque
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 brusque ou une forte accélération lorsque vous conduisez une voiture ne doit pas déclencher d'événement d'inclinaison, même si l'angle d'accélération moyenne peut varier de plus de 35 degrés.
En règle générale, ce capteur n'est implémenté qu'à l'aide d'un accéléromètre. D'autres capteurs peuvent également être utilisés s'ils n'augmentent pas de manière significative la consommation d'énergie. Il s'agit d'un capteur basse consommation qui doit permettre au SoC de passer en mode suspension. N'émulez pas ce capteur dans le HAL. Chaque événement de capteur signale 1
dans sensors_event_t.data[0]
.
Capteurs d'attitude composite
Vecteur de rotation
Capteurs physiques sous-jacents: accéléromètre, magnétomètre et gyroscope
Mode création de rapports: continu
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)
renvoie un capteur qui n'est pas activé
Un capteur de vecteur de rotation indique l'orientation de l'appareil par rapport au repère de coordonnées Est-Nord-Haut. Il est généralement obtenu par l'intégration des mesures de l'accéléromètre, du gyroscope et du magnétomètre. Le système de coordonnées est défini comme une base orthonormale directe où:
- L'axe X pointe vers l'est et est tangentiel par rapport au sol.
- L'axe Y pointe vers le nord et est tangentiel 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 sur les coordonnées du téléphone. Autrement dit, appliquer la rotation au cadre mondial (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 référence (alignée est-nord-haut) de l'appareil à l'orientation actuelle de l'appareil. La rotation est encodée sous la forme des quatre composantes x, y, z et 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
correspond à l'angle de rotation.
Le quaternion est un quaternion unitaire: il doit avoir une norme 1
.
Si vous ne le faites pas, le comportement du client sera erratique.
De plus, ce capteur indique une précision d'orientation 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 entrée principale pour le changement d'orientation.
Ce capteur utilise également l'entrée 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é uniquement avec 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 (sans magnétomètre)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)
renvoie un capteur de réveil
Un capteur de vecteur de rotation de jeu est semblable à un capteur de vecteur de rotation, mais n'utilise pas le champ géomagnétique. Par conséquent, l'axe Y ne pointe 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 n'indique pas d'estimation de la précision de la direction : sensors_event_t.data[4]
est réservé et doit être défini sur 0
.
Dans l'idéal, un téléphone qui a été tourné et remis dans la même orientation réelle doit indiquer 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, via l'estimation du biais du gyroscope.
Gravity
Capteurs physiques sous-jacents: accéléromètre et (si présent) gyroscope (ou magnétomètre si le gyroscope n'est pas présent)
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GRAVITY)
renvoie un capteur de réveil
Un capteur de gravité indique la direction et l'intensité de la gravité dans les coordonnées de l'appareil.
Les composantes du vecteur de gravité sont indiquées 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².
Si l'appareil est équipé d'un gyroscope, le capteur de gravité doit utiliser le gyroscope et l'accéléromètre comme entrée.
Si l'appareil ne dispose 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 qui n'est pas activé
Un vecteur de rotation géomagnétique est semblable à un capteur à vecteur de rotation, mais il utilise un magnétomètre et aucun 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.
Tout 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 à faible consommation d'énergie. Il doit donc être implémenté en matériel.
Orientation (obsolète)
Capteurs physiques sous-jacents: accéléromètre, magnétomètre et (le cas échéant) gyroscope
Mode création de rapports: continu
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
renvoie un capteur de réveil
Remarque:Il s'agit d'un type de capteur plus ancien qui est obsolète 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 dans la mesure du 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 le 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
: inclinaison, 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
: roll, rotation autour de l'axe Y (-90<=roll<=90
), avec des valeurs positives lorsque l'axe X se déplace vers l'axe Z.
Notez 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 antihoraire):
Cette définition diffère de celle de l'inclinaison, du tangage et du roulis utilisés dans l'aviation, où l'axe X se trouve le long du côté long de l'avion (de la queue au nez).
Le capteur d'orientation indique également la précision attendue pour ses mesures via sensors_event_t.orientation.status
. Consultez les constantes
SENSOR_STATUS_*
de
SensorManager
pour en savoir plus sur les valeurs possibles de ce champ.
Capteurs non étalonnés
Les capteurs non étalonnés fournissent des résultats plus bruts et peuvent inclure des biais, mais ils contiennent également moins de "à-coups" dus aux corrections appliquées lors de l'étalonnage. Certaines applications peuvent préférer ces résultats non étalonnés, car ils sont plus fluides et plus fiables. Par exemple, si une application tente de réaliser sa propre fusion de capteurs, l'introduction de calibrages peut 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 de réveil
Un capteur d'accéléromètre non étalonné indique l'accélération de l'appareil sur les trois axes du capteur sans correction de biais (le biais d'usine et la compensation de température sont appliqués aux mesures non étalonné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 de biais) sur l'axe Zx_bias
: biais estimé sur l'axe Xy_bias
: biais estimé le long de l'axe Yz_bias
: biais estimé le long de l'axe Z
Gyroscope non étalonné
Capteur physique sous-jacent: gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
renvoie un capteur de réveil
Un gyroscope non calibré indique le taux de rotation autour des axes du capteur sans leur appliquer de compensation de biais, et fournit 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 dérive) autour de l'axe Xy_uncalib
: vitesse angulaire (sans compensation de dérive) autour de l'axe Yz_uncalib
: vitesse angulaire (sans compensation de 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 sauter dès que l'estimation du biais change, et elles devraient être stables le reste du temps.
Pour en savoir plus sur le système de coordonnées utilisé, consultez la définition du capteur gyroscope.
Le calibrage d'usine et la compensation de température doivent être appliqués aux mesures. En outre, l'estimation de la dérive du gyroscope doit être mise en œuvre pour que des estimations raisonnables puissent être enregistrées dans x_bias
, y_bias
et z_bias
. Si l'implémentation ne peut pas estimer la dérive, ce capteur ne doit pas être implémenté.
Si ce capteur est présent, le capteur gyroscopique correspondant doit également l'être, et les deux capteurs doivent partager les mêmes valeurs sensor_t.name
et sensor_t.vendor
.
Champ magnétique non étalonné
Capteur physique sous-jacent: magnétomètre
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
renvoie un capteur qui n'est pas activé
Un capteur de champ magnétique non étalonné indique le champ magnétique ambiant avec une estimation de l'étalonnage du fer dur. Toutes les valeurs sont exprimées en micro-Tesla (uT) et sont indiquées dans les champs de sensors_event_t.uncalibrated_magnetic
:
x_uncalib
: champ magnétique (sans compensation du fer dur) le long de l'axe Xy_uncalib
: champ magnétique (sans compensation du fer dur) le long de l'axe Yz_uncalib
: champ magnétique (sans compensation du fer dur) le long de l'axe Zx_bias
: biais estimé en fer dur le long de l'axe Xy_bias
: biais estimé du fer permanent le long de l'axe Yz_bias
: biais estimé de l'aimant permanent 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 matériel physique change, et elles devraient être stables le reste du temps.
Le calibrage au fer doux et la compensation de température doivent être appliqués aux mesures. En outre, une estimation du fer forgé doit être mise en œuvre pour que des estimations raisonnables puissent être signalées dans x_bias
, y_bias
et z_bias
. Si l'implémentation ne peut pas 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 wakeup
Un capteur d'angle de charnière mesure l'angle, en degrés, entre deux parties intégrantes 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 de réveil
Capteurs physiques sous-jacents: non définis (faible consommation d'énergie)
Reporting-mode: One-shot
Faible consommation d'énergie
N'implémentez que la version de 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 pas d'incidence sur le comportement du capteur: il suffit d'indiquer 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, 7j/7.
Chaque événement de capteur signale 1
dans sensors_event_t.data[0]
.
Relever le geste
Capteurs physiques sous-jacents: non définis (faible consommation d'énergie)
Reporting-mode: One-shot
Faible consommation d'énergie
N'implémentez que la version de réveil de ce capteur.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
renvoie un capteur d'activation
Un capteur de geste de prise en main se déclenche lorsque l'appareil est pris en main, quel que soit l'endroit où il se trouvait auparavant (bureau, poche, sac).
Chaque événement des capteurs indique 1
en sensors_event_t.data[0]
.
Geste Coup d'œil
Capteurs physiques sous-jacents: non défini (tout élément à faible consommation d'énergie)
Mode de création de rapports: One-shot
Faible consommation d'énergie
Implémentez uniquement la version d'activation de ce capteur.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
renvoie un capteur d'activation
Un capteur de geste de regard permet d'allumer brièvement l'écran pour permettre à l'utilisateur de jeter un coup d'œil sur le contenu à l'écran en fonction d'un mouvement spécifique. Lorsque ce capteur se déclenche, l'appareil s'allume momentanément pour permettre à l'utilisateur de jeter un coup d'œil aux notifications ou à d'autres contenus pendant que l'appareil reste verrouillé dans un état non interactif (sommeil). L'écran s'éteint ensuite. Ce comportement (allumage bref de 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 aucun impact sur le comportement du capteur, mais uniquement sur le fait que 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, 7j/7.
Chaque événement de capteur signale 1
dans sensors_event_t.data[0]
.
Capteurs IMU à axes limités
Disponibles à partir d'Android 13, les capteurs IMU à axe limité sont des capteurs qui sont compatibles avec les cas d'utilisation où les trois axes (x, y, z) ne sont pas disponibles. Les types d'IMU standards dans Android (comme
SENSOR_TYPE_ACCELEROMETER
et
SENSOR_TYPE_GYROSCOPE
) supposent que les trois axes sont compatibles. Toutefois, tous les facteurs de forme et tous les appareils ne sont pas compatibles avec les accéléromètres et les gyroscopes à trois axes.
Axes limités de l'accéléromètre
Capteurs physiques sous-jacents: accéléromètre
Mode création de rapports: continu
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
renvoie un capteur de réveil
Un capteur d'accéléromètre à axes limités est équivalent à 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 du capteur signalées par le capteur indiquent si la valeur d'accélération pour les axes x, y et z est prise 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 des axes inutilisés sur 0
, au lieu d'avoir des valeurs non définies.
Axes limités du gyroscope
Capteurs physiques sous-jacents: le gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
renvoie un capteur de réveil
Un capteur d'axes limités du gyroscope est équivalent à 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 vitesse angulaire pour les axes X, Y et Z est prise 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 pour les axes inutilisés sur 0
.
Axes limités de l'accéléromètre non étalonnés
Capteurs physiques sous-jacents: accéléromètre
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
renvoie un capteur de réveil
Un capteur non calibré à axes limités de l'accéléromètre équivaut à TYPE_ACCELEROMETER_UNCALIBRATED
, mais est compatible avec les cas où un ou deux axes ne sont pas acceptés.
Les trois dernières valeurs d'événements transmises par le capteur indiquent si les valeurs d'accélération et de biais pour les axes x, y et z sont acceptées. 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 sur 0
pour les axes inutilisés.
Axes limités du gyroscope non étalonnés
Capteurs physiques sous-jacents: le gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
renvoie un capteur de réveil
Un capteur non étalonné à axes limités du gyroscope est équivalent à TYPE_GYROSCOPE_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 de vitesse angulaire et de dérive pour les axes X, Y et Z sont prises en charge. La valeur 1.0
indique que l'axe est pris en charge, tandis que la valeur 0
indique qu'il n'est pas compatible. 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 pour les axes inutilisés sur 0
.
IMU à axes composites limités
Capteurs physiques sous-jacents: toute combinaison d'accéléromètres à 3 axes, de gyroscopes à 3 axes, d'accéléromètres 3 axes non calibrés et de capteurs non calibrés du gyroscope à 3 axes.
Reporting-mode: Continuous
Un capteur IMU à axes limités composite est équivalent à un capteur IMU à axes limités, mais au lieu d'être compatible avec le 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 à trois axes standard en accéléromètre à axes limités composite.
Valeurs SensorEvent pour SENSOR_TYPE_ACCELEROMETER | Exemple d'événement SensorEvent SENSOR_TYPE_ACCELEROMETER | SensorEvent composite SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES |
---|---|---|
values[0] | -0,065 |
-0,065 |
valeurs[1] | 0,078 |
0,078 |
valeurs[2] | 9,808 |
9,808 |
valeurs[3] | N/A |
1.0 |
valeurs[4] | N/A |
1.0 |
valeurs[5] | N/A |
1.0 |
Capteurs automobiles
Capteurs pour les cas d'utilisation automobiles
Titre
Capteurs physiques sous-jacents: toute combinaison de GPS, de magnétomètre, d'accéléromètre et de gyroscope.
Mode création de rapports: continu
getDefaultSensor(SENSOR_TYPE_HEADING)
renvoie un capteur de réveil
Disponible à partir d'Android 13, un capteur de direction mesure en degrés la direction de l'appareil par rapport au nord géographique. Le capteur de direction comprend deux valeurs SensorEvent
.
L'une pour l'orientation de l'appareil mesurée et l'autre pour l'exactitude de la valeur d'orientation fournie.
Les valeurs d'orientation signalées par ce capteur doivent être comprises entre 0.0
(inclus) et 360.0
(exclu), 0
indiquant le nord, 90
l'est, 180
le sud et 270
l'ouest.
La précision de ce capteur est définie avec une confiance de 68 %. Si la distribution sous-jacente est normale gaussienne, la précision est d'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 degrés et 70 degrés.