Google is committed to advancing racial equity for Black communities. See how.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Tipos de sensores

Esta sección describe los ejes de los sensores, los sensores base y los sensores compuestos (actividad, actitud, no calibrado e interacción).

Ejes de sensor

Los valores de eventos de sensor de muchos sensores se expresan en un marco específico que es estático en relación con el dispositivo.

Ejes de dispositivos móviles

La API del sensor es relativa solo a la orientación natural de la pantalla (los ejes no se intercambian cuando cambia la orientación de la pantalla del dispositivo.

Sistema de coordenadas de sensor API para dispositivos móviles

Figura 1. Sistema de coordenadas (relativo a un dispositivo móvil) utilizado por Sensor API

Ejes de automoción

En las implementaciones de Android Automotive, los ejes se definen con respecto al bastidor de la carrocería del vehículo.

Sistema de coordenadas de sensor API para dispositivos automotrices

Figura 2. Sistema de coordenadas (relativo a un dispositivo automotriz) utilizado por Sensor API

  • X aumenta hacia la derecha del vehículo
  • Y aumenta hacia la nariz del cuerpo.
  • Z aumenta hacia el techo de la carrocería

El origen del sistema de coordenadas se encuentra en el centro del eje trasero del vehículo. Cuando se mira desde la dirección positiva de un eje, las rotaciones positivas son en sentido antihorario. Por lo tanto, cuando un vehículo gira a la izquierda, se espera que la velocidad de giro del giroscopio del eje z sea un valor positivo.

Sensores base

Los tipos de sensores básicos reciben el nombre de los sensores físicos que representan. Estos sensores transmiten datos de un solo sensor físico (a diferencia de los sensores compuestos que generan datos de otros sensores). Algunos ejemplos de tipos de sensores básicos incluyen:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

Sin embargo, los sensores base no son iguales ni deben confundirse con su sensor físico subyacente. Los datos de un sensor base no son la salida sin procesar del sensor físico porque se aplican correcciones (como compensación de polarización y compensación de temperatura).

Por ejemplo, las características de un sensor base pueden ser diferentes de las características de su sensor físico subyacente en los siguientes casos de uso:

  • Un chip de giroscopio clasificado para tener un rango de sesgo de 1 grado / seg.
    • Después de aplicar la calibración de fábrica, la compensación de temperatura y la compensación de sesgo, el sesgo real del sensor de Android se reducirá, puede llegar a un punto en el que se garantiza que el sesgo sea inferior a 0,01 grados / seg.
    • En esta situación, decimos que el sensor de Android tiene un sesgo por debajo de 0.01 grados / seg, a pesar de que la hoja de datos del sensor subyacente dice 1 grado / seg.
  • Un barómetro con un consumo de energía de 100 uW.
    • Debido a que los datos generados deben transportarse desde el chip al SoC, el costo de energía real para recopilar datos del sensor barómetro de Android podría ser mucho mayor, por ejemplo 1000 uW.
    • En esta situación, decimos que el sensor de Android tiene un consumo de energía de 1000 uW, aunque el consumo de energía medido en los cables del chip barómetro es de 100uW.
  • Un magnetómetro que consume 100uW cuando se calibra, pero consume más cuando se calibra.
    • Su rutina de calibración puede requerir activar el giroscopio, consumir 5000 uW y ejecutar algún algoritmo, lo que cuesta otros 900 uW.
    • En esta situación, decimos que el consumo máximo de energía del sensor de Android (magnetómetro) es de 6000 uW.
    • En este caso, el consumo medio de energía es la medida más útil, y es lo que se informa en las características estáticas del sensor a través del HAL.

Acelerómetro

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)

Un sensor de acelerómetro informa la aceleración del dispositivo a lo largo de los tres ejes del sensor. La aceleración medida incluye tanto la aceleración física (cambio de velocidad) como la gravedad. La medición se informa en los campos x, y y z de los sensores_evento_t.aceleración.

Todos los valores están en unidades SI (m / s ^ 2) y miden la aceleración del dispositivo menos la fuerza de gravedad a lo largo de los tres ejes del sensor.

A continuación se muestran algunos ejemplos:

  • La norma de (x, y, z) debe estar cerca de 0 cuando está en caída libre.
  • Cuando el dispositivo está plano sobre una mesa y se empuja sobre su lado izquierdo hacia la derecha, el valor de aceleración x es positivo.
  • Cuando el dispositivo está plano sobre una mesa, el valor de aceleración a lo largo de z es +9,81 alo, que corresponde a la aceleración del dispositivo (0 m / s ^ 2) menos la fuerza de gravedad (-9,81 m / s ^ 2).
  • Cuando el dispositivo yace sobre una mesa y se empuja hacia el cielo, el valor de aceleración es mayor que +9,81, que corresponde a la aceleración del dispositivo (+ A m / s ^ 2) menos la fuerza de gravedad (-9,81 m / s ^ 2).

Las lecturas se calibran usando:

  • Compensación de temperatura
  • Calibración de sesgo en línea
  • Calibración de báscula en línea

El sesgo y la calibración de la escala solo deben actualizarse mientras el sensor está desactivado, para evitar provocar saltos en los valores durante la transmisión.

El acelerómetro también informa qué tan precisas espera que sean sus lecturas a través de los sensors_event_t.acceleration.status . Consulte las SensorManager SENSOR_STATUS_* para obtener más información sobre los posibles valores para este campo.

Temperatura ambiente

Modo de informes: al cambiar

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)

Este sensor proporciona la temperatura ambiente (ambiente) en grados Celsius.

Sensor de campo magnético

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

Un sensor de campo magnético (también conocido como magnetómetro) informa el campo magnético ambiental, medido a lo largo de los tres ejes del sensor.

La medición se informa en los campos x, y, z de los sensors_event_t.magnetic y todos los valores están en micro-Tesla (uT).

El magnetómetro también informa cuán precisas espera que sean sus lecturas a través de sensors_event_t.magnetic.status . Consulte las SensorManager SENSOR_STATUS_* para obtener más información sobre los posibles valores para este campo.

Las lecturas se calibran usando:

  • Compensación de temperatura
  • Calibración de hierro dulce de fábrica (o en línea)
  • Calibración de hierro duro en línea

Giroscopio

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_GYROSCOPE)

Un sensor de giroscopio informa la velocidad de rotación del dispositivo alrededor de los tres ejes del sensor.

La rotación es positiva en el sentido contrario a las agujas del reloj (regla de la mano derecha). Es decir, un observador que mira desde una ubicación positiva en el eje x, y o z en un dispositivo posicionado en el origen informaría una rotación positiva si el dispositivo parece estar girando en sentido antihorario. Tenga en cuenta que esta es la definición matemática estándar de rotación positiva y no concuerda con la definición aeroespacial de balanceo.

La medición se informa en los campos x, y, yz de los sensors_event_t.gyro y todos los valores están en radianes por segundo (rad / s).

Las lecturas se calibran usando:

  • Compensación de temperatura
  • Compensación de escala de fábrica (o en línea)
  • Calibración de sesgo en línea (para eliminar la deriva)

El giroscopio también informa qué tan precisas espera que sean sus lecturas a través de los sensors_event_t.gyro.status . Consulte las SensorManager SENSOR_STATUS_* para obtener más información sobre los posibles valores para este campo.

El giroscopio no se puede emular basándose en magnetómetros y acelerómetros, ya que esto haría que tuviera una consistencia y respuesta local reducidas. Debe basarse en un chip de giroscopio habitual.

Ritmo cardiaco

Modo de informes: al cambiar

getDefaultSensor(SENSOR_TYPE_HEART_RATE) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_HEART_RATE)

Un sensor de frecuencia cardíaca informa la frecuencia cardíaca actual de la persona que toca el dispositivo.

La frecuencia cardíaca actual en latidos por minuto (BPM) se informa en los sensors_event_t.heart_rate.bpm y el estado del sensor se informa en los sensors_event_t.heart_rate.status . Consulte las SensorManager SENSOR_STATUS_* para obtener más información sobre los posibles valores para este campo. En particular, en la primera activación, a menos que se sepa que el dispositivo no está en el cuerpo, el campo de estado del primer evento debe establecerse en SENSOR_STATUS_UNRELIABLE . Debido a que este sensor está heart_rate.bpm , los eventos se generan cuando y solo cuando heart_rate.bpm o heart_rate.status han cambiado desde el último evento. Los eventos se generan no más rápido que cada sampling_period .

sensor_t.requiredPermission es siempre SENSOR_PERMISSION_BODY_SENSORS .

Ligero

Modo de informes: al cambiar

getDefaultSensor(SENSOR_TYPE_LIGHT) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_LIGHT)

Un sensor de luz informa la iluminación actual en unidades SI lux.

La medición se informa en sensors_event_t.light .

Proximidad

Modo de informes: al cambiar

Por lo general, se define como un sensor de activación.

getDefaultSensor(SENSOR_TYPE_PROXIMITY) devuelve un sensor de getDefaultSensor(SENSOR_TYPE_PROXIMITY)

Un sensor de proximidad informa la distancia desde el sensor hasta la superficie visible más cercana.

Hasta Android 4.4, los sensores de proximidad siempre eran sensores de despertador, despertando el SoC al detectar un cambio de proximidad. Después de Android 4.4, recomendamos implementar primero la versión de activación de este sensor, ya que es el que se usa para encender y apagar la pantalla mientras se realizan llamadas telefónicas.

La medida se informa en centímetros en sensors_event_t.distance . Tenga en cuenta que algunos sensores de proximidad solo admiten una medición binaria "cercana" o "lejana". En este caso, el sensor informa su valor sensor_t.maxRange en el estado "lejos" y un valor menor que sensor_t.maxRange en el estado "cerca".

Presión

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_PRESSURE) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_PRESSURE)

Un sensor de presión (también conocido como barómetro) informa la presión atmosférica en hectopascales (hPa).

Las lecturas se calibran usando

  • Compensación de temperatura
  • Calibración de sesgo de fábrica
  • Calibración de escala de fábrica

El barómetro se usa a menudo para estimar cambios de elevación. Para estimar la elevación absoluta, se debe utilizar como referencia la presión al nivel del mar (que cambia según el clima).

Humedad relativa

Modo de informe: al cambiar

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)

Un sensor de humedad relativa mide la humedad relativa del aire ambiente y devuelve un valor en porcentaje.

Tipos de sensores compuestos

Un sensor compuesto genera datos procesando y / o fusionando datos de uno o varios sensores físicos. (Cualquier sensor que no sea un sensor base se llama sensor compuesto). Algunos ejemplos de sensores compuestos incluyen:

Al igual que con los sensores base, las características de los sensores compuestos provienen de las características de sus datos finales. Por ejemplo, el consumo de energía de un vector de rotación del juego es probablemente igual a la suma de los consumos de energía del chip acelerómetro, el chip del giroscopio, el chip que procesa los datos y los buses que transportan los datos. Como otro ejemplo, la deriva de un vector de rotación del juego depende tanto de la calidad del algoritmo de calibración como de las características físicas del sensor.

La siguiente tabla enumera los tipos de sensores compuestos disponibles. Cada sensor compuesto se basa en datos de uno o varios sensores físicos. Evite elegir otros sensores físicos subyacentes para aproximar los resultados, ya que brindan una mala experiencia al usuario.

Tipo de sensor Categoría Sensores físicos subyacentes Modo de informes

Vector de rotación de juego

Actitud

Acelerómetro, giroscopio, NO DEBE UTILIZAR magnetómetro

Continuo

Vector de rotación geomagnética Sensor de baja potencia

Actitud

Acelerómetro, magnetómetro, NO DEBE UTILIZAR giroscopio

Continuo

Gesto de mirada Sensor de baja potencia

Interacción

Indefinido

Un trago

Gravedad

Actitud

Acelerómetro, giroscopio

Continuo

Giroscopio sin calibrar

Sin calibrar

Giroscopio

Continuo

Aceleración lineal

Actividad

Acelerómetro, giroscopio (si está presente) o magnetómetro (si no hay giroscopio)

Continuo

Campo magnético sin calibrar

Sin calibrar

Magnetómetro

Continuo

Orientación (en desuso)

Actitud

Acelerómetro, magnetómetro, giroscopio (si está presente)

Continuo

Recoger gesto Sensor de baja potencia

Interacción

Indefinido

Un trago

Vector de rotación

Actitud

Acelerómetro, magnetómetro, giroscopio

Continuo

Movimiento significativo Sensor de baja potencia

Actividad

Acelerómetro (u otro siempre que sea de muy baja potencia)

Un trago

Contador de pasos Sensor de baja potencia

Actividad

Acelerómetro

Al cambiar

Detector de pasos Sensor de baja potencia

Actividad

Acelerómetro

Especial

Detector de inclinación Sensor de baja potencia

Actividad

Acelerómetro

Especial

Gesto de despertar Sensor de baja potencia

Interacción

Indefinido

Un trago

Sensor de baja potencia = Sensor de baja potencia

Sensores compuestos de actividad

Aceleración lineal

Sensores físicos subyacentes: acelerómetro y (si está presente) giroscopio (o magnetómetro si no hay giroscopio)

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)

Un sensor de aceleración lineal informa la aceleración lineal del dispositivo en el marco del sensor, sin incluir la gravedad.

La salida es conceptualmente: salida del acelerómetro menos la salida del sensor de gravedad . Se informa en m / s ^ 2 en los campos x, y y z de los sensors_event_t.acceleration .

Las lecturas en todos los ejes deben estar cerca de 0 cuando el dispositivo está inmóvil.

Si el dispositivo posee un giroscopio, el sensor de aceleración lineal debe usar el giroscopio y el acelerómetro como entrada.

Si el dispositivo no posee un giroscopio, el sensor de aceleración lineal debe usar el acelerómetro y el magnetómetro como entrada.

Movimiento significativo

Sensor físico subyacente: acelerómetro (u otro siempre que sea de baja potencia)

Modo de informes: One-shot

Baja potencia

Implemente solo la versión de activación de este sensor.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) devuelve un sensor de getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)

Un detector de movimiento significativo se activa cuando detecta un movimiento significativo : un movimiento que puede provocar un cambio en la ubicación del usuario.

Ejemplos de movimientos tan importantes son:

  • Caminar o andar en bicicleta
  • Sentado en un automóvil, autocar o tren en movimiento

Ejemplos de situaciones que no provocan un movimiento significativo:

  • Teléfono en el bolsillo y la persona no se mueve
  • El teléfono está sobre una mesa y la mesa tiembla un poco debido al tráfico cercano o la lavadora

En el nivel alto, el detector de movimiento significativo se utiliza para reducir el consumo de energía de la determinación de la ubicación. Cuando los algoritmos de localización detectan que el dispositivo es estático, pueden cambiar a un modo de bajo consumo, donde dependen de un movimiento significativo para activar el dispositivo cuando el usuario cambia de ubicación.

Este sensor debe ser de baja potencia. Hace una compensación por el consumo de energía que puede resultar en una pequeña cantidad de falsos negativos. Esto se hace por varias razones:

  • El objetivo de este sensor es ahorrar energía.
  • Activar un evento cuando el usuario no se está moviendo (falso positivo) es costoso en términos de energía, por lo que debe evitarse.
  • No desencadenar un evento cuando el usuario se está moviendo (falso negativo) es aceptable siempre que no se haga repetidamente. Si el usuario ha estado caminando durante 10 segundos, no es aceptable no activar un evento dentro de esos 10 segundos.

Cada evento de sensor reporta 1 en sensors_event_t.data[0] .

Detector de pasos

Sensor físico subyacente: acelerómetro (+ posiblemente otros siempre que sean de baja potencia)

Modo de informe: especial (un evento por paso realizado)

Baja potencia

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)

Un detector de pasos genera un evento cada vez que el usuario da un paso.

La marca de tiempo del evento sensors_event_t.timestamp corresponde a cuando el pie golpea el suelo, generando una alta variación en la aceleración.

En comparación con el contador de pasos, el detector de pasos debe tener una latencia más baja (menos de dos segundos). Tanto el detector de pasos como el contador de pasos detectan cuando el usuario camina, corre y sube las escaleras. No deben activarse cuando el usuario está en bicicleta, conduciendo o en otros vehículos.

Este sensor debe ser de baja potencia. Es decir, si la detección de pasos no se puede realizar en hardware, este sensor no debe definirse. En particular, cuando el detector de pasos está activado y el acelerómetro no, solo los pasos deben activar las interrupciones (no todas las lecturas del acelerómetro).

sampling_period_ns no tiene ningún impacto en los detectores de pasos.

Cada evento de sensor reporta 1 en sensors_event_t.data[0] .

Contador de pasos

Sensor físico subyacente: acelerómetro (+ posiblemente otros siempre que sean de baja potencia)

Modo de informes: al cambiar

De baja potencia

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)

Un contador de pasos informa el número de pasos realizados por el usuario desde el último reinicio mientras estaba activado.

La medición se informa como un uint64_t en sensors_event_t.step_counter y se restablece a cero solo al reiniciar el sistema.

La marca de tiempo del evento se establece en la hora en que se realizó el último paso para ese evento.

Consulte el tipo de sensor detector de pasos para conocer el significado del tiempo de un paso.

En comparación con el detector de pasos, el contador de pasos puede tener una latencia más alta (hasta 10 segundos). Gracias a esta latencia, este sensor tiene una alta precisión; el recuento de pasos después de un día completo de medidas debe estar dentro del 10% del recuento de pasos real. Tanto el detector de pasos como el contador de pasos detectan cuando el usuario camina, corre y sube las escaleras. No deben activarse cuando el usuario está en bicicleta, conduciendo o en otros vehículos.

El hardware debe garantizar que el recuento de pasos interno nunca se desborde. El tamaño mínimo del contador interno del hardware será de 16 bits. En caso de un desbordamiento inminente (como máximo cada ~ 2 ^ 16 pasos), el SoC puede activarse para que el conductor pueda hacer el mantenimiento del mostrador.

Como se indica en Interacción , mientras este sensor funcione, no interrumpirá ningún otro sensor, en particular, el acelerómetro, que muy bien podría estar en uso.

Si un dispositivo en particular no puede admitir estos modos de funcionamiento, el HAL no debe informar sobre este tipo de sensor. Es decir, no es aceptable "emular" este sensor en el HAL.

Este sensor debe ser de baja potencia. Es decir, si la detección de pasos no se puede realizar en hardware, este sensor no debe definirse. En particular, cuando el contador de pasos está activado y el acelerómetro no, solo los pasos deben activar las interrupciones (no los datos del acelerómetro).

Detector de inclinación

Sensor físico subyacente: acelerómetro (+ posiblemente otros siempre que sean de baja potencia)

Modo de informes: especial

De baja potencia

Implemente solo la versión de activación de este sensor.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) devuelve un sensor de getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)

Un detector de inclinación genera un evento cada vez que se detecta un evento de inclinación.

Un evento de inclinación se define por la dirección de la gravedad promedio de la ventana de 2 segundos que cambia al menos 35 grados desde la activación o el último evento generado por el sensor. Aquí está el algoritmo:

  • reference_estimated_gravity = promedio de las mediciones del acelerómetro durante el primer segundo después de la activación o la gravedad estimada cuando se generó el último evento de inclinación.
  • current_estimated_gravity = promedio de las mediciones del acelerómetro durante los últimos 2 segundos.
  • Disparo cuando el angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

Las grandes aceleraciones sin un cambio en la orientación del teléfono no deberían desencadenar un evento de inclinación. Por ejemplo, un giro brusco o una fuerte aceleración mientras se conduce un automóvil no deberían desencadenar un evento de inclinación, aunque el ángulo de la aceleración promedio pueda variar en más de 35 grados. Normalmente, este sensor se implementa solo con la ayuda de un acelerómetro. También se pueden utilizar otros sensores si no aumentan significativamente el consumo de energía. Este es un sensor de baja potencia que debería permitir que el SoC entre en modo de suspensión. No emule este sensor en el HAL. Cada evento de sensor reporta 1 en sensors_event_t.data[0] .

Sensores compuestos de actitud

Vector de rotación

Sensores físicos subyacentes: acelerómetro, magnetómetro y giroscopio

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)

Un sensor de vector de rotación informa la orientación del dispositivo en relación con el marco de coordenadas Este-Norte-Arriba. Por lo general, se obtiene mediante la integración de lecturas de acelerómetro, giroscopio y magnetómetro. El sistema de coordenadas Este-Norte-Arriba se define como una base ortonormal directa donde:

  • X apunta al este y es tangencial al suelo.
  • Y apunta al norte y es tangencial al suelo.
  • Z apunta hacia el cielo y es perpendicular al suelo.

La orientación del teléfono está representada por la rotación necesaria para alinear las coordenadas Este-Norte-Arriba con las coordenadas del teléfono. Es decir, aplicar la rotación al marco del mundo (X, Y, Z) los alinearía con las coordenadas del teléfono (x, y, z).

La rotación puede verse como una rotación del teléfono en un ángulo theta alrededor de un eje rot_axis para ir de la orientación del dispositivo de referencia (alineado Este-Norte-Arriba) a la orientación actual del dispositivo. La rotación se codifica como los cuatro componentes x, y, z, w sin unidades de un cuaternión unitario:

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

Dónde:

  • Los campos x, y, z de rot_axis son las coordenadas Este-Norte-Arriba de un vector de longitud unitaria que representa el eje de rotación
  • theta es el ángulo de rotación

El cuaternión es un cuaternión unitario: debe ser de norma 1 . No asegurarse de que esto ocurra provocará un comportamiento errático del cliente.

Además, este sensor informa una precisión de rumbo estimada:

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

El error de rumbo debe ser menor que la estimated_accuracy 95% del tiempo. Este sensor debe utilizar un giroscopio como entrada principal de cambio de orientación.

Este sensor también usa una entrada de acelerómetro y magnetómetro para compensar la deriva del giroscopio, y no se puede implementar usando solo el acelerómetro y el magnetómetro.

Vector de rotación de juego

Sensores físicos subyacentes: acelerómetro y giroscopio (sin magnetómetro)

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)

Un sensor de vector de rotación de juego es similar a un sensor de vector de rotación pero no utiliza el campo geomagnético. Por lo tanto, el eje Y no apunta al norte sino a alguna otra referencia. Se permite que esa referencia se desplace en el mismo orden de magnitud a medida que el giroscopio se desvía alrededor del eje Z.

Consulte el sensor de vector de rotación para obtener detalles sobre cómo configurar los sensors_event_t.data[0-3] . Este sensor no informa una precisión de rumbo estimada: los sensors_event_t.data[4] está reservado y debe establecerse en 0 .

En un caso ideal, un teléfono girado y vuelto a la misma orientación del mundo real debería informar el mismo vector de rotación del juego.

Este sensor debe estar basado en un giroscopio y un acelerómetro. No puede utilizar el magnetómetro como entrada, además, indirectamente, mediante la estimación del sesgo del giroscopio.

Gravedad

Sensores físicos subyacentes: acelerómetro y (si está presente) giroscopio (o magnetómetro si no hay giroscopio)

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_GRAVITY) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_GRAVITY)

Un sensor de gravedad informa la dirección y la magnitud de la gravedad en las coordenadas del dispositivo.

Los componentes del vector de gravedad se expresan en m / s ^ 2 en los campos x, y y z de los sensors_event_t.acceleration .

Cuando el dispositivo está en reposo, la salida del sensor de gravedad debe ser idéntica a la del acelerómetro. En la Tierra, la magnitud es de alrededor de 9,8 m / s ^ 2.

Si el dispositivo posee un giroscopio, el sensor de gravedad debe usar el giroscopio y el acelerómetro como entrada.

Si el dispositivo no posee un giroscopio, el sensor de gravedad debe usar el acelerómetro y el magnetómetro como entrada.

Vector de rotación geomagnética

Sensores físicos subyacentes: acelerómetro y magnetómetro (sin giroscopio)

Modo de informes: continuo

De baja potencia

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)

Un vector de rotación geomagnético es similar a un sensor de vector de rotación pero utiliza un magnetómetro y no un giroscopio.

Este sensor debe estar basado en un magnetómetro. No se puede implementar con un giroscopio y este sensor no puede utilizar la entrada del giroscopio.

Consulte el sensor de vector de rotación para obtener detalles sobre cómo configurar los sensors_event_t.data[0-4] .

Al igual que para el sensor de vector de rotación, el error de rumbo debe ser menor que la precisión estimada ( sensors_event_t.data[4] ) el 95% del tiempo.

Este sensor debe ser de baja potencia, por lo que debe implementarse en hardware.

Orientación (en desuso)

Sensores físicos subyacentes: acelerómetro, magnetómetro y (si está presente) giroscopio

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_ORIENTATION) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_ORIENTATION)

Nota: Este es un tipo de sensor más antiguo que ha quedado obsoleto en el SDK de Android. Ha sido reemplazado por el sensor de vector de rotación, que está más claramente definido. Utilice el sensor de vector de rotación sobre el sensor de orientación siempre que sea posible.

Un sensor de orientación informa la actitud del dispositivo. Las medidas se informan en grados en los campos x, y y z de sensors_event_t.orientation :

  • sensors_event_t.orientation.x : acimut, el ángulo entre la dirección norte magnética y el eje Y, alrededor del eje Z ( 0<=azimuth<360 ). 0 = Norte, 90 = Este, 180 = Sur, 270 = Oeste.
  • sensors_event_t.orientation.y : paso, rotación alrededor del eje X ( -180<=pitch<=180 ), con valores positivos cuando el eje Z se mueve hacia el eje Y.
  • sensors_event_t.orientation.z : rollo, rotación alrededor del eje Y ( -90<=roll<=90 ), con valores positivos cuando el eje X se mueve hacia el eje Z.

Tenga en cuenta que, por razones históricas, el ángulo de balanceo es positivo en el sentido de las agujas del reloj. (Matemáticamente hablando, debería ser positivo en sentido antihorario):

Representación de la orientación relativa a un dispositivo

Figura 3. Orientación relativa a un dispositivo

Esta definición es diferente de la guiñada, cabeceo y balanceo que se utilizan en la aviación, donde el eje X está a lo largo del lado largo del avión (de cola a nariz).

El sensor de orientación también informa qué tan precisos espera que sean sus lecturas a través de los sensors_event_t.orientation.status . Consulte las SensorManager SENSOR_STATUS_* para obtener más información sobre los posibles valores para este campo.

Sensores no calibrados

Los sensores no calibrados proporcionan resultados más brutos y pueden incluir algún sesgo, pero también contienen menos "saltos" de las correcciones aplicadas a través de la calibración. Algunas aplicaciones pueden preferir estos resultados no calibrados como más suaves y confiables. Por ejemplo, si una aplicación intenta realizar su propia fusión de sensores, introducir calibraciones puede distorsionar los resultados.

Acelerómetro sin calibrar

Sensor físico subyacente: acelerómetro

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)

Un sensor de acelerómetro no calibrado informa la aceleración del dispositivo a lo largo de los tres ejes del sensor sin ninguna corrección de sesgo (el sesgo de fábrica y la compensación de temperatura se aplican a las mediciones no calibradas), junto con una estimación de sesgo. Todos los valores están en unidades SI (m / s ^ 2) y se informan en los campos de los sensors_event_t.uncalibrated_accelerometer :

  • x_uncalib : aceleración (sin compensación de sesgo) a lo largo del eje X
  • y_uncalib : aceleración (sin compensación de sesgo) a lo largo del eje Y
  • z_uncalib : aceleración (sin compensación de sesgo) a lo largo del eje Z
  • x_bias : sesgo estimado a lo largo del eje X
  • y_bias : sesgo estimado a lo largo del eje Y
  • z_bias : sesgo estimado a lo largo del eje Z

Giroscopio sin calibrar

Sensor físico subyacente: giroscopio

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)

Un giroscopio no calibrado informa la velocidad de rotación alrededor de los ejes del sensor sin aplicarles compensación de sesgo, junto con una estimación de sesgo. Todos los valores están en radianes / segundo y se informan en los campos de sensors_event_t.uncalibrated_gyro :

  • x_uncalib : velocidad angular (sin compensación de deriva) alrededor del eje X
  • y_uncalib : velocidad angular (sin compensación de deriva) alrededor del eje Y
  • z_uncalib : velocidad angular (sin compensación de deriva) alrededor del eje Z
  • x_bias : deriva estimada alrededor del eje X
  • y_bias : deriva estimada alrededor del eje Y
  • z_bias : deriva estimada alrededor del eje Z

Conceptualmente, la medición no calibrada es la suma de la medición calibrada y la estimación de sesgo: _uncalibrated = _calibrated + _bias .

Se espera que los valores x_bias , y_bias y z_bias salten tan pronto como cambie la estimación del sesgo, y deberían permanecer estables el resto del tiempo.

Consulte la definición del sensor de giroscopio para obtener detalles sobre el sistema de coordenadas utilizado.

Se debe aplicar la calibración de fábrica y la compensación de temperatura a las mediciones. Además, se debe implementar la estimación de la deriva del giroscopio para que se puedan informar estimaciones razonables en x_bias , y_bias y z_bias . Si la implementación no puede estimar la deriva, este sensor no debe implementarse.

Si este sensor está presente, entonces el sensor de giroscopio correspondiente también debe estar presente y ambos sensores deben compartir los mismos valores de sensor_t.name y sensor_t.vendor .

Campo magnético sin calibrar

Sensor físico subyacente: magnetómetro

Modo de informes: continuo

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) devuelve un sensor que no se getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)

Un sensor de campo magnético no calibrado informa del campo magnético ambiental junto con una estimación de calibración de hierro duro. Todos los valores están en micro-Tesla (uT) y se informan en los campos de los sensors_event_t.uncalibrated_magnetic :

  • x_uncalib : campo magnético (sin compensación de hierro duro) a lo largo del eje X
  • y_uncalib : campo magnético (sin compensación de hierro duro) a lo largo del eje Y
  • z_uncalib : campo magnético (sin compensación de hierro duro) a lo largo del eje Z
  • x_bias : x_bias estimado de hierro duro a lo largo del eje X
  • y_bias : y_bias estimado de hierro duro a lo largo del eje Y
  • z_bias : z_bias estimado de hierro duro a lo largo del eje Z

Conceptualmente, la medición no calibrada es la suma de la medición calibrada y la estimación de sesgo: _uncalibrated = _calibrated + _bias .

El magnetómetro no calibrado permite algoritmos de mayor nivel para manejar una mala estimación de hierro duro. Se espera que los valores x_bias , y_bias y z_bias salten tan pronto como cambie la estimación del hierro duro, y deberían permanecer estables el resto del tiempo.

Se debe aplicar a las mediciones la calibración de hierro dulce y la compensación de temperatura. Además, se debe implementar una estimación de hierro duro para que se puedan informar estimaciones razonables en x_bias , y_bias y z_bias . Si la implementación no puede estimar el sesgo, entonces este sensor no debe implementarse.

Si este sensor está presente, entonces el sensor de campo magnético correspondiente debe estar presente y ambos sensores deben compartir los mismos valores de sensor_t.name y sensor_t.vendor .

Ángulo de bisagra

Modo de informes: al cambiar

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) devuelve un sensor de getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)

Un sensor de ángulo de bisagra mide el ángulo, en grados, entre dos partes integrales del dispositivo. Se espera que el movimiento de una bisagra medido por este tipo de sensor altere las formas en que el usuario puede interactuar con el dispositivo, por ejemplo, desplegando o revelando una pantalla.

Sensores compuestos de interacción

Algunos sensores se utilizan principalmente para detectar interacciones con el usuario. No definimos cómo deben implementarse esos sensores, pero deben ser de baja potencia y es responsabilidad del fabricante del dispositivo verificar su calidad en términos de experiencia del usuario.

Despertar gesto

Sensores físicos subyacentes: indefinidos (cualquier cosa de baja potencia)

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