Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Types de capteurs

Cette section décrit les axes des capteurs, les capteurs de base et les capteurs composites (activité, attitude, non étalonné et interaction).

Axes du capteur

Les valeurs d'événement 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 du capteur est uniquement relative à l'orientation naturelle de l'écran (les axes ne sont pas permutés lorsque l'orientation de l'écran de l'appareil change.

Système de coordonnées de l'API de capteur pour les appareils mobiles

Figure 1. Système de coordonnées (relatif à 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.

Système de coordonnées de l'API de capteur pour les appareils automobiles

Figure 2. Système de coordonnées (relatif à un appareil automobile) utilisé par l'API Sensor

  • X augmente vers la droite du véhicule
  • Y augmente vers le nez du corps
  • Z augmente vers le toit du cadre de carrosserie

L'origine du système de coordonnées est située au centre de l'essieu arrière du véhicule. Lorsque vous regardez dans la direction positive d'un axe, les rotations positives sont dans le sens antihoraire. Ainsi, lorsqu'un véhicule effectue un virage à gauche, la vitesse de rotation du gyroscope sur l'axe z devrait être une valeur positive.

Capteurs de base

Les types de capteurs de base sont nommés d'après les capteurs physiques qu'ils représentent. Ces capteurs relaient les données d'un seul capteur physique (par opposition aux capteurs composites qui génèrent des données à partir d'autres capteurs). Exemples de types de capteurs de base:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

Cependant, les capteurs de base ne sont pas égaux et ne doivent pas être confondus avec leur capteur physique sous-jacent. Les données d'un capteur de base ne sont pas la sortie brute du capteur physique car des corrections (telles que la compensation de polarisation et la compensation de température) sont appliquées.

Par exemple, les caractéristiques d'un capteur de base peuvent être différentes des caractéristiques de son capteur physique sous-jacent dans les cas d'utilisation suivants:

  • Une puce de gyroscope conçue pour avoir une plage de polarisation de 1 deg / s.
    • Après le calibrage d'usine, la compensation de température et la compensation de polarisation sont appliquées, la polarisation réelle du capteur Android sera réduite, peut être à un point où la polarisation est garantie d'être inférieure à 0,01 deg / s.
    • Dans cette situation, nous disons que le capteur Android a un biais inférieur à 0,01 deg / s, même si la fiche technique du capteur sous-jacent indiquait 1 deg / s.
  • Un baromètre avec une consommation électrique 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 réel de l'énergie pour collecter les données du capteur baromètre Android peut être beaucoup plus élevé, par exemple 1000 uW.
    • Dans cette situation, on dit que le capteur Android a une consommation électrique de 1000 uW, même si la consommation électrique mesurée au niveau des conducteurs de la puce du baromètre est de 100uW.
  • Un magnétomètre qui consomme 100uW lors de l'étalonnage, mais qui consomme plus lors de l'étalonnage.
    • Sa routine d'étalonnage peut nécessiter l'activation du gyroscope, une consommation de 5000 uW et l'exécution d'un algorithme, ce qui coûtera 900 uW supplémentaires.
    • Dans cette situation, nous disons que la consommation électrique maximale du capteur Android (magnétomètre) est de 6000 uW.
    • Dans ce cas, la consommation d'énergie moyenne est la mesure la plus utile, et c'est ce qui est rapporté dans les caractéristiques statiques du capteur via le HAL.

Accéléromètre

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) renvoie un capteur sans réveil

Un capteur accéléromètre signale l'accélération de l'appareil le long des trois axes du capteur. L'accélération mesurée comprend à la fois l'accélération physique (changement de vitesse) et la gravité. La mesure est signalée dans les champs x, y et z de Sensor_event_t.acceleration.

Toutes les valeurs sont 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 des exemples:

  • La norme de (x, y, z) doit être proche de 0 en chute libre.
  • Lorsque l'appareil repose à plat sur une table et est poussé sur son côté gauche vers la droite, la valeur d'accélération x est positive.
  • Lorsque l'appareil repose à plat sur une table, la valeur d'accélération le long de z est +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 repose à plat sur une table et 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 étalonnées en utilisant:

  • Compensation de température
  • Calibrage du biais en ligne
  • Calibrage de la balance 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 lors du streaming.

L'accéléromètre indique également à quel point il s'attend à ce que ses lectures soient sensors_event_t.acceleration.status via les sensors_event_t.acceleration.status . Voir lesSensorManager SENSOR_STATUS_* pour plus d'informations sur les valeurs possibles pour ce champ.

Température ambiante

Mode de rapport: sur changement

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) renvoie un capteur sans réveil

Ce capteur fournit la température ambiante (ambiante) en degrés Celsius.

Capteur de champ magnétique

Mode de rapport: continu

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 connu sous le nom de magnétomètre) signale le champ magnétique ambiant, tel que mesuré le long des trois axes du capteur.

La mesure est rapportée dans les champs x, y et z de sensors_event_t.magnetic et toutes les valeurs sont en micro-Tesla (uT).

Le magnétomètre indique également à quel point il s'attend à ce que ses lectures soient sensors_event_t.magnetic.status via les sensors_event_t.magnetic.status . Voir les SensorManager SENSOR_STATUS_* pour plus d'informations sur les valeurs possibles pour ce champ.

Les lectures sont étalonnées en utilisant:

  • Compensation de température
  • Étalonnage du fer doux en usine (ou en ligne)
  • Calibration du fer dur en ligne

Gyroscope

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) renvoie un capteur sans réveil

Un capteur gyroscopique rapporte la vitesse de rotation de l'appareil autour des trois axes du capteur.

La rotation est positive dans le sens antihoraire (règle de droite). Autrement dit, un observateur regardant à partir d'un emplacement positif sur l'axe x, y ou z à un appareil positionné sur l'origine rapporterait une rotation positive si l'appareil semblait tourner dans le sens antihoraire. Notez qu'il s'agit de la définition mathématique standard de la rotation positive et qu'elle n'est pas en accord avec la définition aérospatiale du roulis.

La mesure est rapportée dans les champs x, y et z de sensors_event_t.gyro et toutes les valeurs sont en radians par seconde (rad / s).

Les lectures sont étalonnées en utilisant:

  • Compensation de température
  • Compensation d'échelle d'usine (ou en ligne)
  • Calibrage du biais en ligne (pour supprimer la dérive)

Le gyroscope indique également à quel point il s'attend à ce que ses lectures soient sensors_event_t.gyro.status via les sensors_event_t.gyro.status . Voir lesSensorManager SENSOR_STATUS_* pour plus d'informations sur les valeurs possibles pour ce champ.

Le gyroscope ne peut pas être émulé sur la base de magnétomètres et d'accéléromètres, car cela entraînerait une réduction de la cohérence locale et de la réactivité. Il doit être basé sur une puce de gyroscope habituelle.

Rythme cardiaque

Mode de rapport: sur changement

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 signalée dans sensors_event_t.heart_rate.bpm et l'état du capteur est indiqué dans sensors_event_t.heart_rate.status . Voir lesSensorManager SENSOR_STATUS_* pour plus d'informations sur les valeurs possibles pour ce champ. En particulier, lors de la première activation, sauf si le dispositif est connu pour ne pas être sur le corps, le champ d'état du premier événement doit être mis à SENSOR_STATUS_UNRELIABLE . Étant donné que ce capteur est en cours de modification, les événements sont générés lorsque et seulement 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 rapidement que chaque période d' sampling_period .

sensor_t.requiredPermission est toujours SENSOR_PERMISSION_BODY_SENSORS .

Lumière

Mode de rapport: sur changement

getDefaultSensor(SENSOR_TYPE_LIGHT) renvoie un capteur sans réveil

Un capteur de lumière signale l'éclairage actuel en unités SI lux.

La mesure est rapportée dans sensors_event_t.light .

Proximité

Mode de rapport: sur changement

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é signale 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, réveillant le SoC lors de la détection d'un changement de proximité. Après Android 4.4, nous vous conseillons d'implémenter d'abord la version de 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é ne prennent en charge qu'une mesure binaire «proche» ou «loin». Dans ce cas, le capteur signale sa valeur sensor_t.maxRange dans l'état "far" et une valeur inférieure à sensor_t.maxRange dans l'état "near".

Pression

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_PRESSURE) renvoie un capteur sans réveil

Un capteur de pression (également appelé baromètre) indique la pression atmosphérique en hectopascal (hPa).

Les lectures sont calibrées à l'aide

  • Compensation de température
  • Étalonnage du biais en usine
  • Étalonnage de l'échelle d'usine

Le baromètre est souvent utilisé pour estimer les changements d'altitude. Pour estimer l'élévation absolue, la pression au niveau de la mer (variable en fonction de la météo) doit être utilisée comme référence.

Humidité relative

Mode de rapport: sur changement

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 des données d'un ou plusieurs capteurs physiques. (Tout capteur qui n'est pas un capteur de base est appelé un capteur composite.) Des exemples de capteurs composites incluent:

  • Détecteur de pas et mouvement significatif , qui sont généralement basés sur un accéléromètre, mais 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.
  • Gyroscope non étalonné, similaire au capteur de base du gyroscope, mais l'étalonnage du biais étant rapporté 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 électrique d'un vecteur de rotation de jeu est probablement égale à la somme des consommations électriques de la puce accéléromètre, de la puce gyroscope, de la puce traitant les données et des bus transportant les données. 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 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 rapport

Vecteur de rotation du jeu

Attitude

Accéléromètre, gyroscope, NE DOIT PAS UTILISER de magnétomètre

Continu

Vecteur de rotation géomagnétique Capteur de faible puissance

Attitude

Accéléromètre, magnétomètre, NE DOIT PAS UTILISER de gyroscope

Continu

Geste du regard Capteur de faible puissance

Interaction

Indéfini

Un tir

La gravité

Attitude

Accéléromètre, gyroscope

Continu

Gyroscope non étalonné

Non calibré

Gyroscope

Continu

Accélération linéaire

Activité

Accéléromètre, gyroscope (si présent) ou magnétomètre (si gyroscope pas présent)

Continu

Champ magnétique non calibré

Non calibré

Magnétomètre

Continu

Orientation (obsolète)

Attitude

Accéléromètre, magnétomètre, gyroscope (si présent)

Continu

Prendre le geste Capteur de faible puissance

Interaction

Indéfini

Un tir

Vecteur de rotation

Attitude

Accéléromètre, magnétomètre, gyroscope

Continu

Mouvement important Capteur de faible puissance

Activité

Accéléromètre (ou autre aussi longtemps que très faible puissance)

Un tir

Compteur de pas Capteur de faible puissance

Activité

Accéléromètre

Sur le changement

Détecteur de pas Capteur de faible puissance

Activité

Accéléromètre

Spécial

Détecteur d'inclinaison Capteur de faible puissance

Activité

Accéléromètre

Spécial

Réveiller le geste Capteur de faible puissance

Interaction

Indéfini

Un tir

Capteur de faible puissance = Capteur de faible puissance

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)

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) renvoie un capteur sans réveil

Un capteur d'accélération linéaire signale l'accélération linéaire de l'appareil dans le cadre du capteur, sans compter la gravité.

La sortie est conceptuellement: 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 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 autre aussi longtemps que faible puissance)

Mode de rapport: One-shot

Batterie faible

N'implémentez que la version de réveil de ce capteur.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) renvoie un capteur de réveil

Un détecteur de mouvement significatif se déclenche lors de la détection d'un mouvement significatif : un mouvement qui pourrait conduire à un changement de localisation de l'utilisateur.

Des exemples de ces mouvements importants sont:

  • Marche ou vélo
  • Assis dans une voiture en mouvement, un autocar ou un train

Exemples de situations qui ne déclenchent pas de mouvement significatif:

  • Téléphone dans la poche et personne ne bouge
  • Le téléphone est sur une table et la table tremble un peu à cause de la circulation à proximité ou de la machine à laver

Au niveau élevé, le détecteur de mouvement significatif est utilisé pour 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 d'emplacement.

Ce capteur doit être de faible puissance. Il fait un compromis pour la consommation d'énergie qui peut entraîner une petite quantité de faux négatifs. Ceci est fait pour plusieurs raisons:

  • Le but 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 puissance, il faut donc l'éviter.
  • 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 a marché pendant 10 secondes, ne pas déclencher un événement dans ces 10 secondes n'est pas acceptable.

Chaque événement de capteur rapporte 1 dans sensors_event_t.data[0] .

Détecteur de pas

Capteur physique sous-jacent: accéléromètre (+ éventuellement d'autres aussi longtemps que faible puissance)

Reporting-mode: Spécial (un événement par étape prise)

Batterie faible

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) renvoie un capteur sans réveil

Un détecteur de pas génère un événement à chaque fois qu'un pas est franchi par l'utilisateur.

L'horodatage de l'événement sensors_event_t.timestamp correspond au moment où le pied a heurté le sol, générant 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 le moment où l'utilisateur marche, court et monte les escaliers. Ils ne doivent pas se déclencher lorsque l'utilisateur fait du vélo, de la voiture ou dans d'autres véhicules.

Ce capteur doit être de faible puissance. Autrement dit, si la détection de pas ne peut pas être effectuée dans le 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 (pas toutes les lectures de l'accéléromètre).

sampling_period_ns n'a aucun impact sur les détecteurs à pas.

Chaque événement de capteur rapporte 1 dans sensors_event_t.data[0] .

Compteur de pas

Capteur physique sous-jacent: accéléromètre (+ éventuellement d'autres aussi longtemps que faible puissance)

Mode de rapport: sur changement

Batterie faible

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 signalée sous la forme d'un uint64_t dans sensors_event_t.step_counter et est remise à zéro uniquement lors d'un 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.

Voir le type de capteur Détecteur de pas pour la signification du temps d'un pas.

Comparé 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 a une grande précision; le nombre de pas après une journée complète de mesures doit être à moins de 10% du nombre de pas réel. Le détecteur de pas et le compteur de pas détectent le moment où l'utilisateur marche, court et monte les escaliers. Ils ne doivent pas se déclencher lorsque l'utilisateur fait du vélo, de la voiture ou dans d'autres véhicules.

Le matériel doit garantir que le nombre de pas internes 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 plus toutes les ~ 2 ^ 16 étapes), le SoC peut être réveillé afin que le pilote puisse effectuer la maintenance du compteur.

Comme indiqué dans Interaction , pendant que ce capteur fonctionne, il ne doit perturber aucun autre capteur, en particulier l'accéléromètre, qui pourrait très bien être utilisé.

Si un appareil particulier ne peut pas prendre 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 la HAL.

Ce capteur doit être de faible puissance. Autrement dit, si la détection de pas ne peut pas être effectuée dans le 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 (pas les données de l'accéléromètre).

Détecteur d'inclinaison

Capteur physique sous-jacent: accéléromètre (+ éventuellement d'autres aussi longtemps que faible puissance)

Mode de rapport: spécial

Batterie faible

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 de la fenêtre de 2 secondes changeant 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 sur la première seconde après l'activation ou la 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 2 dernières secondes.
  • Déclenchement lorsque l' angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

Les grandes accélérations sans changement d'orientation du téléphone ne devraient pas déclencher un événement d'inclinaison. Par exemple, un virage serré ou une forte accélération pendant la conduite d'une voiture ne devrait pas déclencher un é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 mis en œuvre à l'aide d'un seul accéléromètre. D'autres capteurs peuvent également être utilisés s'ils n'augmentent pas considérablement la consommation d'énergie. Il s'agit d'un capteur de faible puissance qui devrait permettre au SoC de passer en mode suspension. N'émulez pas ce capteur dans la HAL. Chaque événement de capteur rapporte 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

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) renvoie un capteur sans réveil

Un capteur de vecteur de rotation signale l'orientation de l'appareil par rapport au cadre de coordonnées Est-Nord-Haut. Il est généralement obtenu par intégration de lectures d'accéléromètre, de gyroscope et de 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 tangentiel au sol.
  • 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 les coordonnées du téléphone. Autrement dit, l'application de la rotation à l'image du monde (X, Y, Z) les alignerait avec 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é Est-Nord-Up) à l'orientation actuelle de l'appareil. La rotation est codée comme les 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: il doit être de norme 1 . Le non-respect de cette règle entraînera un comportement erratique du client.

De plus, ce capteur rapporte une précision de cap estimée:

sensors_event_t.data[4] = estimated_accuracy (en radians)

L'erreur de cap doit être inférieure à la précision estimated_accuracy 95% du temps. Ce capteur doit utiliser un gyroscope comme entrée principale de changement d'orientation.

Ce capteur utilise également une entrée d'accéléromètre et de magnétomètre pour compenser la dérive du gyroscope, et il ne peut pas être mis en œuvre 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)

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) renvoie un capteur sans réveil

Un capteur de vecteur de rotation de jeu est similaire à 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 le gyroscope dérive autour de l'axe Z.

Reportez-vous au capteur de vecteur de rotation pour plus de détails sur la façon de définir sensors_event_t.data[0-3] . Ce capteur ne rapporte pas une estimation de la précision du cap: sensors_event_t.data[4] est réservé et doit être mis à 0 .

Dans un cas idéal, un téléphone tourné et retourné à la même orientation du monde réel devrait signaler le même vecteur de rotation de 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, en plus, indirectement, par l'estimation du biais du gyroscope.

La gravité

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)

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_GRAVITY) renvoie un capteur sans réveil

Un capteur de gravité signale la direction et l'amplitude 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 ^ 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)

Mode de rapport: continu

Batterie faible

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) renvoie un capteur sans réveil

Un vecteur de rotation géomagnétique est similaire à un capteur de vecteur de rotation mais utilisant un magnétomètre et pas de 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.

Reportez-vous au capteur de vecteur de rotation pour plus de détails sur la façon de définir sensors_event_t.data[0-4] .

Tout comme pour le capteur vectoriel 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 de faible puissance, il doit donc être implémenté dans le matériel.

Orientation (obsolète)

Capteurs physiques sous-jacents: accéléromètre, magnétomètre et (le cas échéant) gyroscope

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_ORIENTATION) renvoie un capteur sans 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 sur le capteur d'orientation autant que possible.

Un capteur d'orientation signale l'attitude de l'appareil. Les mesures sont rapportées en degrés dans les champs x, y et z de sensors_event_t.orientation :

  • sensors_event_t.orientation.x : azimut, l'angle entre la direction 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 : pitch, 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 devrait être positif dans le sens anti-horaire):

Représentation de l'orientation par rapport à un appareil

Figure 3. Orientation par rapport à un appareil

Cette définition est différente du lacet, du tangage et du roulis utilisés dans l'aviation où l'axe X est le long du côté long de l'avion (de la queue au nez).

Le capteur d'orientation indique également à quel point il s'attend à ce que ses lectures soient sensors_event_t.orientation.status via les sensors_event_t.orientation.status . Voir les SensorManager SENSOR_STATUS_* pour plus d'informations sur les valeurs possibles pour ce champ.

Capteurs non calibrés

Les capteurs non étalonnés fournissent plus de résultats bruts et peuvent inclure un certain biais, mais contiennent également moins de "sauts" des corrections appliquées à l'étalonnage. Certaines applications peuvent préférer ces résultats non calibrés comme plus fluides et plus fiables. Par exemple, si une application tente de réaliser sa propre fusion de capteurs, l'introduction d'étalonnages peut en fait fausser les résultats.

Accéléromètre non calibré

Capteur physique sous-jacent: accéléromètre

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) renvoie un capteur sans réveil

Un capteur d'accéléromètre non calibré rapporte l'accélération de l'appareil le long des trois axes du capteur sans aucune 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 en unités SI (m / s ^ 2) et sont reportées dans les champs de sensors_event_t.uncalibrated_accelerometer :

  • x_uncalib : accélération (sans compensation de biais) le long de l'axe X
  • y_uncalib : accélération (sans compensation de biais) le long de l'axe Y
  • z_uncalib : accélération (sans compensation de polarisation) le long de l'axe Z
  • x_bias : biais estimé le long de l'axe X
  • y_bias : biais estimé le long de l'axe Y
  • z_bias : biais estimé le long de l'axe Z

Gyroscope non étalonné

Capteur physique sous-jacent: Gyroscope

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) renvoie un capteur sans réveil

Un gyroscope non étalonné rapporte la vitesse de rotation autour des axes du capteur sans leur appliquer de compensation de biais, ainsi qu'une estimation de biais. Toutes les valeurs sont en radians / seconde et sont reportées dans les champs de sensors_event_t.uncalibrated_gyro :

  • x_uncalib : vitesse angulaire (sans compensation de dérive) autour de l'axe X
  • y_uncalib : vitesse angulaire (sans compensation de dérive) autour de l'axe Y
  • z_uncalib : vitesse angulaire (sans compensation de dérive) autour de l'axe Z
  • x_bias : dérive estimée autour de l'axe X
  • y_bias : dérive estimée autour de l'axe Y
  • z_bias : dérive estimée autour de l'axe Z

Conceptuellement, la mesure non calibrée est la somme de la mesure calibrée et de l'estimation du biais: _uncalibrated = _calibrated + _bias .

Les 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.

Voir la définition du capteur gyroscopique pour plus de détails sur le système de coordonnées utilisé.

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 rapportées dans x_bias , y_bias et z_bias . Si l'implémentation n'est pas capable d'estimer la dérive, alors 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

Mode de rapport: continu

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) renvoie un capteur sans réveil

Un capteur de champ magnétique non calibré rapporte le champ magnétique ambiant avec une estimation d'étalonnage du fer dur. Toutes les valeurs sont en micro-Tesla (uT) et sont reportées dans les champs de sensors_event_t.uncalibrated_magnetic :

  • x_uncalib : champ magnétique (sans compensation de fer dur) le long de l'axe X
  • y_uncalib : champ magnétique (sans compensation de fer dur) le long de l'axe Y
  • z_uncalib : champ magnétique (sans compensation de fer dur) le long de l'axe Z
  • x_bias : x_bias estimé du fer dur le long de l'axe X
  • y_bias : y_bias estimé du fer dur le long de l'axe Y
  • z_bias : z_bias estimé du fer dur le long de l'axe Z

Conceptuellement, la mesure non étalonnée est la somme de la mesure étalonnée et de l'estimation du biais: _uncalibrated = _calibrated + _bias .

Le magnétomètre non calibré permet à des algorithmes de niveau supérieur de gérer une mauvaise estimation du fer dur. Les x_bias , y_bias et z_bias devraient sauter dès que l'estimation du hard-iron change, et elles devraient être stables le reste du temps.

L'étalonnage du fer doux et la compensation de température doivent être appliqués aux mesures. De plus, une estimation hard-iron doit être mise en œuvre pour que des estimations raisonnables puissent être rapportées dans x_bias , y_bias et z_bias . Si l'implémentation n'est pas en mesure d'estimer le biais, alors ce capteur ne doit pas être implémenté.

Si ce capteur est présent, le capteur de champ magnétique correspondant doit être présent et les deux capteurs doivent partager les mêmes valeurs sensor_t.name et sensor_t.vendor .

Angle de charnière

Mode de rapport: sur changement

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. On s'attend à ce que le mouvement d'une charnière mesuré par ce type de capteur modifie la manière dont l'utilisateur peut interagir avec le dispositif, par exemple en dépliant ou en révélant un affichage.

Capteurs composites d'interaction

Certains capteurs sont principalement utilisés pour détecter les interactions avec l'utilisateur. Nous ne définissons pas comment ces capteurs doivent être mis en œuvre, mais ils doivent être de faible puissance et il est de la responsabilité du fabricant de l'appareil de vérifier leur qualité en termes d'expérience utilisateur.

Réveiller le geste

Capteurs physiques sous-jacents: non définis (tout ce qui est de faible puissance)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) returns a wake-up sensor

A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7.

Each sensor event reports 1 in sensors_event_t.data[0] .

Pick up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) returns a wake-up sensor

A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).

Each sensor event reports 1 in sensors_event_t.data[0] .

Glance gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) returns a wake-up sensor

A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1 in sensors_event_t.data[0] .