Tipi di sensori

Questa sezione descrive gli assi dei sensori, i sensori di base e i sensori compositi (attività, atteggiamento, non calibrata e interazione).

Assi del sensore

I valori degli eventi dei sensori di molti sensori vengono espressi in un frame specifico statico rispetto al dispositivo.

Assi del dispositivo mobile

L'API Sensor è relativa solo all'orientamento naturale dello schermo (gli assi non vengono scambiati quando cambia l'orientamento dello schermo del dispositivo).

Sistema di coordinate
dell'API sensore per i dispositivi mobili

Figura 1. Sistema di coordinate (rispetto a un dispositivo mobile) utilizzato dall'API Sensor

Assi per auto e motori

Nelle implementazioni di Android Automotive, gli assi sono definiti rispetto al telaio della carrozzeria del veicolo. L'origine del frame di riferimento del veicolo è il centro dell'asse posteriore. Il frame di riferimento del veicolo è orientato in modo che:

  • L'asse X è rivolto verso destra e si trova su un piano orizzontale, perpendicolare al piano di simmetria del veicolo.
  • L'asse Y è rivolto in avanti e si trova su un piano orizzontale.
Sistema di coordinate dell'API sensore per
dispositivi auto e motori

Figura 2. Sistema di coordinate (rispetto a un dispositivo auto e motori) utilizzato dall'API Sensor

Il frame di riferimento del veicolo è un sistema di coordinate destrorso. Pertanto, l'asse Z è rivolto verso l'alto.

L'asse Z del sistema di riferimento è allineato alla gravità, il che significa che l'asse X e l'asse Y sono entrambi orizzontali. Di conseguenza, l'asse Y potrebbe non passare sempre per l'asse anteriore.

Sensori di base

I tipi di sensori di base sono denominati in base ai sensori fisici che rappresentano. Questi sensori trasmettono dati da un singolo sensore fisico (a differenza dei sensori compositi che generano dati da altri sensori). Ecco alcuni esempi di tipi di sensori di base:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

Tuttavia, i sensori di base sono diversi e non devono essere confusi con il sensore fisico sottostante. I dati di un sensore di base non sono l'output non elaborato del sensore fisico perché vengono applicate correzioni (come la compensazione del bias e della temperatura).

Ad esempio, le caratteristiche di un sensore di base potrebbero essere diverse da quelle del suo sensore fisico sottostante nei seguenti casi d'uso:

  • Un chip giroscopio con un intervallo di bias di 1 deg/sec.
    • Dopo la calibrazione in fabbrica, vengono applicati la compensazione della temperatura e la compensazione del bias.Il bias effettivo del sensore Android verrà ridotto, possibilmente a un punto in cui è garantito che il bias sia inferiore a 0, 01 gradi/sec.
    • In questa situazione, diciamo che il sensore Android ha un bias inferiore a 0,01 deg/sec, anche se la scheda tecnica del sensore sottostante indicava 1 gra/sec.
  • Un barometro con un consumo energetico di 100 uW.
    • Poiché i dati generati devono essere trasportati dal chip al SoC, il costo energetico effettivo per raccogliere i dati dal sensore barometro Android potrebbe essere molto più elevato, ad esempio 1000 uW.
    • In questo caso, diciamo che il sensore Android ha un consumo di corrente di 1000 uW, anche se il consumo di corrente misurato ai cavi del chip del barometro è di 100 uW.
  • Un magnetometro che consuma 100 μW quando è calibrato, ma consuma di più durante la calibratura.
    • La sua routine di calibrazione potrebbe richiedere l'attivazione del giroscopio, con un consumo di 5000 uW, e l'esecuzione di un algoritmo, con un altro consumo di 900 uW.
    • In questa situazione, diciamo che il consumo massimo di energia del sensore Android (magnetometro) è 6000 uW.
    • In questo caso, il consumo medio di energia è la misura più utile ed è ciò che viene riportato nelle caratteristiche statiche del sensore tramite l'HAL.

Accelerometro

Reporting-mode: Cont.

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) restituisce un sensore non risvegliante

Un sensore di accelerazione segnala l'accelerazione del dispositivo lungo i tre assi del sensore. L'accelerazione misurata include sia l'accelerazione fisica (variazione di velocità) sia la gravità. La misurazione viene registrata nei campi x, y e z di sensors_event_t.acceleration.

Tutti i valori sono in unità SI (m/s²) e misurano l'accelerazione del dispositivo meno la forza di gravità lungo i tre assi del sensore.

Ecco alcuni esempi:

  • La norma di (x, y, z) deve essere vicina a 0 in caduta libera.
  • Quando il dispositivo è appoggiato su un tavolo e viene spinto sul lato sinistro verso destra, il valore dell'accelerazione in x è positivo.
  • Quando il dispositivo è appoggiato su un tavolo, il valore di accelerazione lungo z è +9,81 alo, che corrisponde all'accelerazione del dispositivo (0 m/s^2) meno la forza di gravità (-9,81 m/s^2).
  • Quando il dispositivo è appoggiato su un tavolo e viene spinto verso il cielo, il valore di accelerazione è superiore a +9,81, che corrisponde all'accelerazione del dispositivo (+A m/s^2) meno la forza di gravità (-9,81 m/s^2).

Le letture vengono calibrate utilizzando:

  • Compensazione della temperatura
  • Calibrazione del bias online
  • Calibrazione della bilancia online

La calibrazione di bias e scala deve essere aggiornata solo quando il sensore è disattivato, per evitare di causare salti nei valori durante lo streaming.

L'accelerometro indica anche l'accuratezza prevista per le letture tramite sensors_event_t.acceleration.status. Consulta le costanti SENSOR_STATUS_* di SensorManager per ulteriori informazioni sui possibili valori di questo campo.

Temperatura ambiente

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) restituisce un sensore di non attivazione

Questo sensore fornisce la temperatura ambiente (della stanza) in gradi Celsius.

Sensore di campo magnetico

Modalità di reporting: Continuo

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) restituisce un sensore non risvegliante

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

Un sensore di campo magnetico (noto anche come magnetometro) rileva il campo magnetico ambientale, misurato lungo i tre assi del sensore.

La misurazione viene riportata nei campi x, y e z di sensors_event_t.magnetic e tutti i valori sono in micro-Tesla (uT).

Il magnetometro segnala anche l'accuratezza prevista che le letture siano fino a sensors_event_t.magnetic.status. Consulta le costanti SENSOR_STATUS_* di SensorManager per ulteriori informazioni sui possibili valori di questo campo.

Le letture vengono calibrate utilizzando:

  • Compensazione della temperatura
  • Calibrazione del ferro dolce in fabbrica (o online)
  • Calibrazione del hardware online

Giroscopio

Reporting-mode: Cont.

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) restituisce un sensore di non attivazione

Un sensore giroscopio segnala la velocità di rotazione del dispositivo attorno ai tre assi del sensore.

La rotazione è positiva in senso antiorario (regola della mano destra). In altre parole, un osservatore che guarda da una posizione positiva sull'asse x, y o z di un dispositivo posizionato sull'origine segnalerebbe una rotazione positiva se il dispositivo sembra ruotare in senso antiorario. Tieni presente che questa è la definizione matematica standard della rotazione positiva e non è in accordo con la definizione aerospaziale di roll.

La misurazione viene riportata nei campi x, y e z di sensors_event_t.gyro e tutti i valori sono in radianti al secondo (rad/s).

Le letture vengono calibrate utilizzando:

  • Compensazione della temperatura
  • Compensazione della scala di fabbrica (o online)
  • Calibrazione del bias online (per rimuovere la deriva)

Il giroscopio indica anche l'accuratezza prevista per le letture tramite sensors_event_t.gyro.status. Consulta le costanti SENSOR_STATUS_* di SensorManager per ulteriori informazioni sui possibili valori di questo campo.

Il giroscopio non può essere emulato in base a magnetometri e accelerometri, poiché ciò ridurrebbe la coerenza e la reattività locale. Deve essere basato su un chip giroscopio standard.

Frequenza cardiaca

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_HEART_RATE) restituisce un sensore di non attivazione

Un sensore del battito cardiaco rileva il battito cardiaco corrente della persona che tocca il dispositivo.

La frequenza cardiaca attuale in battiti al minuto (BPM) è riportata in sensors_event_t.heart_rate.bpm e lo stato del sensore è riportato in sensors_event_t.heart_rate.status. Consulta le costanti SENSOR_STATUS_* di SensorManager per ulteriori informazioni sui possibili valori di questo campo. In particolare, alla prima attivazione, a meno che non sia noto che il dispositivo non è sul corpo, il campo stato del primo evento deve essere impostato su SENSOR_STATUS_UNRELIABLE. Poiché questo sensore è in continuo cambiamento, gli eventi vengono generati quando e solo quando i valori heart_rate.bpm o heart_rate.status sono cambiati dall'ultimo evento. Gli eventi vengono generati non più velocemente di ogni sampling_period.

sensor_t.requiredPermission è sempre SENSOR_PERMISSION_BODY_SENSORS.

Chiaro

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_LIGHT) restituisce un sensore non di risveglio

Un sensore di luminosità segnala l'illuminazione attuale nelle unità SI lux.

La misurazione è riportata in sensors_event_t.light.

Prossimità

Reporting-mode: On-change

Definito solitamente come sensore di sveglia

getDefaultSensor(SENSOR_TYPE_PROXIMITY) restituisce un sensore di riattivazione

Un sensore di prossimità segnala la distanza dal sensore alla superficie visibile più vicina.

Fino ad Android 4.4, i sensori di prossimità erano sempre sensori di attivazione, che riattivavano il SoC quando rilevavano un cambiamento di prossimità. Dopo Android 4.4, consigliamo di implementare prima la versione di questo sensore per la riattivazione, poiché è quella utilizzata per accendere e spegnere lo schermo durante le chiamate.

La misurazione viene riportata in centimetri in sensors_event_t.distance. Tieni presente che alcuni sensori di prossimità supportano solo la misurazione binaria "vicino" o "lontano". In questo caso, il sensore riporta il valore sensor_t.maxRange nello stato "lontano" e un valore inferiore a sensor_t.maxRange nello stato "vicino".

Pressione

Reporting-mode: Cont.

getDefaultSensor(SENSOR_TYPE_PRESSURE) restituisce un sensore non risveglio

Un sensore di pressione (noto anche come barometro) indica la pressione atmosferica in hectopascal (hPa).

Le letture vengono calibrate utilizzando

  • Compensazione della temperatura
  • Calibrazione bias di fabbrica
  • Calibrazione della bilancia di fabbrica

Il barometro viene spesso utilizzato per stimare le variazioni di quota. Per stimare l'elevazione assoluta, deve essere utilizzata come riferimento la pressione al livello del mare (che varia a seconda del meteo).

Umidità relativa

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) restituisce un sensore di non riattivazione

Un sensore di umidità relativa misura l'umidità relativa dell'aria ambiente e restituisce un valore in percentuale.

Tipi di sensori compositi

Un sensore composito genera dati elaborando e/o fondendo i dati di uno o più sensori fisici. Qualsiasi sensore diverso da un sensore di base è chiamato sensore composito. Ecco alcuni esempi di sensori compositi:

Come per i sensori di base, le caratteristiche dei sensori compositi derivano dalle caratteristiche dei dati finali. Ad esempio, il consumo energetico di un vettore di rotazione di un gioco è probabilmente uguale alla somma dei consumi del chip dell'accelerometro, del chip del giroscopio, del chip che elabora i dati e degli autobus che trasportano i dati. Come ulteriore esempio, la deviazione di un vettore di rotazione di un gioco dipende tanto dalla qualità dell'algoritmo di calibrazione che dalle caratteristiche del sensore fisico.

Nella tabella seguente sono elencati i tipi di sensori compositi disponibili. Ogni sensore composito si basa sui dati di uno o più sensori fisici. Evita di scegliere altri sensori fisici di base per approssimare i risultati, in quanto offrono un'esperienza utente negativa.

Tipo di sensore Categoria Sensori fisici sottostanti Modalità di generazione di report

Vettore di rotazione del gioco

Atteggiamento

Accelerometro, giroscopio, NON DEVE ESSERE UTILIZZATO il magnetometro

Continuo

Vettore di rotazione geomagnetica Sensore
     di basso consumo

Atteggiamento

Accelerometro, magnetometro, NON DEVE UTILIZZARE il giroscopio

Continuo

Gesto di panoramica Sensore di basso consumo

Interazione

Non definito

One-shot

Gravità

Atteggiamento

Accelerometro, giroscopio

Continuo

Giroscopio non calibrato

Non calibrato

Giroscopio

Continuo

Accelerazione lineare

Attività

Accelerometro, giroscopio (se presente) o magnetometro (se il giroscopio non è presente)

Continuo

Campo magnetico non calibrato

Non calibrato

Magnetometro

Continuo

Orientamento (deprecato)

Atteggiamento

Accelerometro, magnetometro, giroscopio (se presente)

Continuo

Gesto di sollevamento Sensore di basso consumo

Interazione

Non definito

One-shot

Vettore di rotazione

Atteggiamento

Accelerometro, magnetometro, giroscopio

Continuo

Movimento significativo Sensore di basso consumo

Attività

Accelerometro (o altro, purché a potenza molto bassa)

One-shot

Contatore dei passi Sensore di basso consumo

Attività

Accelerometro

Al cambio

Rilevatore di passi Sensore a bassa potenza

Attività

Accelerometro

Speciale

Rilevamento inclinazione Sensore di basso consumo

Attività

Accelerometro

Speciale

Gesto di attivazione Sensore di basso consumo

Interazione

Non definito

One-shot

Sensore a bassa potenza = Sensore a basso consumo

Sensori compositi di attività

Accelerazione lineare

Sensori fisici sottostanti: accelerometro e (se presente) giroscopio (o magnetometro se il giroscopio non è presente)

Reporting-mode: Continua

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) restituisce un sensore non risveglio

Un sensore di accelerazione lineare registra l'accelerazione lineare del dispositivo nel frame del sensore, esclusa la gravità.

L'output è concettualmente: l'output dell'accelerometro meno l'output del sensore di gravità. È riportato in m/s^2 nei campi x, y e z di sensors_event_t.acceleration.

Le letture su tutti gli assi devono essere vicine allo 0 quando il dispositivo è immobile.

Se il dispositivo è dotato di un giroscopio, il sensore di accelerazione lineare deve utilizzare il giroscopio e l'accelerometro come input.

Se il dispositivo non dispone di un giroscopio, il sensore di accelerazione lineare deve utilizzare l'accelerometro e il magnetometro come input.

Movimenti significativi

Sensore fisico sottostante: accelerometro (o un altro, purché a basso consumo)

Reporting-mode: One-shot

Basso consumo

Implementa solo la versione di questo sensore per la riattivazione.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) restituisce un sensore di riattivazione

Un rilevatore di movimento significativo si attiva quando rileva un movimento significativo: un movimento che potrebbe portare a una modifica della posizione dell'utente.

Esempi di movimenti così significativi sono:

  • A piedi o in bicicletta
  • Seduti in un'auto, in un pullman o in un treno in movimento

Esempi di situazioni che non attivano movimenti significativi:

  • Smartphone in tasca e persona non in movimento
  • Lo smartphone è su un tavolo che trema leggermente a causa del traffico o della lavatrice nelle vicinanze

A livello generale, il rilevatore di movimenti significativi viene utilizzato per ridurre il consumo energetico per la determinazione della posizione. Quando gli algoritmi di localizzazione rilevano che il dispositivo è statico, possono passare a una modalità a basso consumo, in cui si basano su movimenti significativi per riattivare il dispositivo quando l'utente cambia posizione.

Questo sensore deve avere un consumo ridotto. Il compromesso è un consumo energetico che può comportare una piccola quantità di falsi negativi. Ciò è possibile per diversi motivi:

  • L'obiettivo di questo sensore è risparmiare energia.
  • Attivare un evento quando l'utente non si sta muovendo (falso positivo) è costoso in termini di energia, quindi dovrebbe essere evitato.
  • La mancata attivazione di un evento durante il movimento dell'utente (falso negativo) è accettabile purché non venga eseguita ripetutamente. Se l'utente cammina da 10 secondi, non attivare un evento entro questi 10 secondi non è accettabile.

Ogni evento del sensore segnala 1 in sensors_event_t.data[0].

Rilevatore di passi

Sensore fisico sottostante: accelerometro (+ eventualmente altri, purché a basso consumo)

Modalità di generazione di report: Speciale (un evento per ogni passaggio eseguito)

Basso consumo

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) restituisce un sensore non di risveglio

Un rilevatore di passi genera un evento ogni volta che l'utente fa un passo.

Il timestamp dell'evento sensors_event_t.timestamp corrisponde al momento in cui il piede tocca il suolo, generando un'elevata variazione di accelerazione.

Rispetto al contapassi, il rilevatore di passi dovrebbe avere una latenza inferiore (meno di due secondi). Sia il rilevatore di passi sia il contapassi rilevano quando l'utente cammina, corre o sale le scale. Non devono attivarsi quando l'utente è in bicicletta, in auto o in altri veicoli.

Questo sensore deve essere a bassa potenza. In altre parole, se il rilevamento dei passi non può essere eseguito in hardware, questo sensore non deve essere definito. In particolare, quando il rilevatore di passi è attivo e l'accelerometro non lo è, solo i passi devono attivare le interruzioni (non ogni lettura dell'accelerometro).

sampling_period_ns non ha alcun impatto sui rilevatori di passi.

Ogni evento del sensore segnala 1 in sensors_event_t.data[0].

Contapassi

Sensore fisico sottostante: accelerometro (+ eventualmente altri, purché a basso consumo)

Modalità di generazione dei report: In modifica

Basso consumo

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) restituisce un sensore non di risveglio

Un contapassi segnala il numero di passi effettuati dall'utente dall'ultimo riavvio durante l'attivazione.

La misurazione viene registrata come uint64_t in sensors_event_t.step_counter e viene reimpostata su zero solo al riavvio del sistema.

Il timestamp dell'evento è impostato sull'ora in cui è stato eseguito l'ultimo passaggio dell'evento.

Vedi il tipo di sensore Sensore di passi per il significato del tempo di un passo.

Rispetto al rilevatore di passi, il contatore dei passi può avere una latenza più elevata (fino a 10 secondi). Grazie a questa latenza, questo sensore ha un'elevata precisione; il conteggio dei passi dopo un'intera giornata di misurazioni deve rientrare nel 10% del conteggio effettivo dei passi. Sia il rilevatore di passi sia il contatore dei passi rilevano quando l'utente cammina, corre e sale le scale. Non devono attivarsi quando l'utente è in bicicletta, in auto o in altri veicoli.

L'hardware deve garantire che il conteggio dei passi interno non superi mai gli overflow. La dimensione minima del contatore interno dell'hardware deve essere di 16 bit. In caso di overflow imminente (al massimo ogni circa 2^16 passaggi), il SoC può essere riattivato in modo che il driver possa eseguire la manutenzione del contatore.

Come indicato nella sezione Interazione, durante il funzionamento di questo sensore, non interrompe nessun altro sensore, in particolare l'accelerometro, che potrebbe essere perfettamente in uso.

Se un determinato dispositivo non è in grado di supportare queste modalità di funzionamento, questo tipo di sensore non deve essere registrato dall'HAL. In altre parole, non è accettabile "emulare" questo sensore nell'HAL.

Questo sensore deve avere un consumo ridotto. In altre parole, se il rilevamento dei passi non può essere eseguito in hardware, questo sensore non deve essere definito. In particolare, quando il contatore dei passi è attivo e l'accelerometro non lo è, solo i passi devono attivare le interruzioni (non i dati dell'accelerometro).

Rilevatore di inclinazione

Sensore fisico sottostante: accelerometro (+ eventualmente altri, purché a basso consumo)

Reporting-mode: Special

Basso consumo

Implementa solo la versione riattivazione di questo sensore.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) restituisce un sensore di riattivazione

Un rilevatore di inclinazione genera un evento ogni volta che viene rilevato un evento di inclinazione.

Un evento di inclinazione è definito dalla direzione della gravità media di una finestra di 2 secondi che cambia di almeno 35 gradi dall'attivazione o dall'ultimo evento generato dal sensore. Ecco l'algoritmo:

  • reference_estimated_gravity = media delle misurazioni dell'accelerometro nel primo secondo dopo l'attivazione o della gravità stimata quando è stato generato l'ultimo evento di inclinazione.
  • current_estimated_gravity = media delle misurazioni dell'accelerometro negli ultimi 2 secondi.
  • Si attiva quando angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

Accelerazioni elevate senza variazione dell'orientamento dello smartphone non devono attivare un evento di inclinazione. Ad esempio, una curva a gomito o un'accelerazione brusca mentre guidi un'auto non deve attivare un evento di inclinazione, anche se l'angolo dell'accelerazione media può variare di più di 35 gradi. In genere, questo sensore viene implementato con l'aiuto di un solo accelerometro. È possibile utilizzare anche altri sensori se non aumentano in modo significativo il consumo energetico. Si tratta di un sensore a bassa potenza che dovrebbe consentire al SoC di attivare la modalità di sospensione. Non emulare questo sensore nell'HAL. Ogni evento del sensore registra 1 in sensors_event_t.data[0].

Sensori compositi di assetto

Vettore di rotazione

Sensori fisici sottostanti: accelerometro, magnetometro e giroscopio

Reporting-mode: Continua

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) restituisce un sensore non risveglio

Un sensore di vettore di rotazione segnala l'orientamento del dispositivo rispetto al sistema di coordinate est-nord-alto. Di solito viene ottenuta integrando le letture di accelerometro, giroscopio e magnetometro. Il sistema di coordinate est-nord-alto è definito come una base ortonormale diretta in cui:

  • X è rivolta verso est ed è tangente al suolo.
  • L'asse Y è rivolto verso nord ed è tangente al suolo.
  • Z è rivolta verso il cielo ed è perpendicolare al suolo.

L'orientamento dello smartphone è rappresentato dalla rotazione necessaria per allineare le coordinate est-nord-alto con le coordinate dello smartphone. In altre parole, l'applicazione della rotazione al frame del mondo (X,Y,Z) le allinea alle coordinate dello smartphone (x,y,z).

La rotazione può essere vista come la rotazione dello smartphone di un angolo teta attorno a un asse rot_axis per passare dall'orientamento di riferimento (allineato a est-nord-sopra) all'orientamento corrente del dispositivo. La rotazione è codificata come i quattro componenti x, y, z, w senza unità di una quaternione unitaria:

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

Dove:

  • I campi x, y e z di rot_axis sono le coordinate est-nord-alto di un vettore di lunghezza pari a 1 che rappresenta l'asse di rotazione
  • theta è l'angolo di rotazione

Il quaternione è un quaternione unitario: deve avere norma 1. La mancata verifica di questo aspetto causerà un comportamento incostante del client.

Inoltre, questo sensore riporta un'accuratezza stimata della rotta:

sensors_event_t.data[4] = estimated_accuracy (in radianti)

L'errore di indicazione deve essere inferiore a estimated_accuracy il 95% del tempo. Questo sensore deve utilizzare un giroscopio come input principale per la variazione dell'orientamento.

Questo sensore utilizza anche l'input dell'accelerometro e del magnetometro per compensare la deriva del giroscopio e non può essere implementato utilizzando solo l'accelerometro e il magnetometro.

Vettore di rotazione del gioco

Sensori fisici sottostanti: accelerometro e giroscopio (nessun magnetometro)

Reporting-mode: Continua

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) restituisce un sensore non risvegliante

Un sensore di vettore di rotazione del gioco è simile a un sensore di vettore di rotazione, ma non utilizza il campo geomagnetico. Pertanto, l'asse Y non è rivolto verso nord, ma verso un altro riferimento. Questo riferimento può avere un'incertezza dello stesso ordine di grandezza del giroscopio attorno all'asse Z.

Consulta il sensore Vettore di rotazione per i dettagli su come impostare sensors_event_t.data[0-3]. Questo sensore non segnala una stima della precisione dell'orientamento: sensors_event_t.data[4] è riservato e deve essere impostato su 0.

In un caso ideale, un telefono ruotato e riportato allo stesso orientamento reale dovrebbe registrare lo stesso vettore di rotazione del gioco.

Questo sensore deve essere basato su un giroscopio e un accelerometro. Non può utilizzare il magnetometro come input, oltre che indirettamente, tramite la stima della bias del giroscopio.

Gravity

Sensori fisici sottostanti: accelerometro e (se presente) giroscopio (o magnetometro se il giroscopio non è presente)

Modalità di generazione dei report: continua

getDefaultSensor(SENSOR_TYPE_GRAVITY) restituisce un sensore non di risveglio

Un sensore di gravità segnala la direzione e l'intensità della gravità nelle coordinate del dispositivo.

Le componenti del vettore di gravità sono riportate in m/s^2 nei campi x, y e z di sensors_event_t.acceleration.

Quando il dispositivo è a riposo, l'output del sensore di gravità deve essere identico a quello dell'accelerometro. Sulla Terra, la magnitudo è di circa 9,8 m/s^2.

Se il dispositivo è dotato di un giroscopio, il sensore di gravità deve utilizzare il giroscopio e l'accelerometro come input.

Se il dispositivo non dispone di un giroscopio, il sensore di gravità deve utilizzare come input l'accelerometro e il magnetometro.

Vettore di rotazione geomagnetica

Sensori fisici sottostanti: accelerometro e magnetometro (nessun giroscopio)

Reporting-mode: Continua

Basso consumo

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) restituisce un sensore di non attivazione

Un vettore di rotazione geomagnetico è simile a un sensore di vettore di rotazione, ma utilizza un magnetometro e non un giroscopio.

Questo sensore deve essere basato su un magnetometro. Non può essere implementato utilizzando un giroscopio e l'input del giroscopio non può essere utilizzato da questo sensore.

Per informazioni dettagliate su come impostare sensors_event_t.data[0-4], consulta il sensore Vettore di rotazione.

Come per il sensore di vettore di rotazione, l'errore di rotta deve essere inferiore all'accuratezza stimata (sensors_event_t.data[4]) il 95% delle volte.

Questo sensore deve avere un basso consumo energetico, quindi deve essere implementato in hardware.

Orientamento (deprecato)

Sensori fisici sottostanti: accelerometro, magnetometro e (se presente) giroscopio

Reporting-mode: Continua

getDefaultSensor(SENSOR_TYPE_ORIENTATION) restituisce un sensore non di risveglio

Nota: si tratta di un tipo di sensore precedente che è stato ritirato nell'SDK Android. È stato sostituito dal sensore del vettore di rotazione, che è definito più chiaramente. Se possibile, utilizza il sensore del vettore di rotazione anziché il sensore di orientamento.

Un sensore di orientamento segnala l'inclinazione del dispositivo. Le misurazioni sono riportate in gradi nei campi x, y e z di sensors_event_t.orientation:

  • sensors_event_t.orientation.x: azimut, l'angolo tra la direzione nord magnetica e l'asse Y, attorno all'asse Z (0<=azimuth<360). 0=Nord, 90=Est, 180=Sud, 270=Ovest.
  • sensors_event_t.orientation.y: inclinazione, rotazione attorno all'asse X (-180<=pitch<=180), con valori positivi quando l'asse Z si sposta verso l'asse Y.
  • sensors_event_t.orientation.z: roll, rotazione attorno all'asse Y (-90<=roll<=90), con valori positivi quando l'asse X si sposta verso l'asse Z.

Tieni presente che, per motivi storici, l'angolo di inclinazione è positivo in direzione in senso orario. (Dal punto di vista matematico, il valore dovrebbe essere positivo in senso antiorario):

Raffigurazione dell&#39;orientamento
   rispetto a un dispositivo

Figura 3. Orientamento rispetto a un dispositivo

Questa definizione è diversa da imbardata, beccheggio e rollio utilizzati nell'aviazione, dove l'asse X è lungo il lato lungo dell'aereo (dalla coda alla prua).

Il sensore di orientamento indica anche l'accuratezza prevista per le letture tramite sensors_event_t.orientation.status. Consulta le costanti SENSOR_STATUS_* di SensorManager per ulteriori informazioni sui possibili valori di questo campo.

Sensori non calibrati

I sensori non calibrati forniscono risultati più non elaborati e potrebbero includere alcuni bias, ma contengono anche meno "salti" dovuti alle correzioni applicate tramite la calibrazione. Alcune app potrebbero preferire questi risultati non calibrati perché più uniformi e affidabili. Ad esempio, se un'app tenta di eseguire la propria fusione dei dati dei sensori, l'introduzione di calibrazioni può distorcere i risultati.

Accelerometro non calibrato

Sensore fisico sottostante: accelerometro

Reporting-mode: Continua

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) restituisce un sensore non di risveglio

Un sensore dell'accelerometro non calibrato riporta l'accelerazione del dispositivo lungo i tre assi dei sensori senza alcuna correzione del bias (il bias di fabbrica e la compensazione della temperatura vengono applicati alle misurazioni non calibrate), insieme a una stima del bias. Tutti i valori sono in unità SI (m/s^2) e vengono riportati nei campi di sensors_event_t.uncalibrated_accelerometer:

  • x_uncalib: accelerazione (senza compensazione della distorsione) lungo l'asse X
  • y_uncalib: accelerazione (senza compensazione della distorsione) lungo l'asse Y
  • z_uncalib: accelerazione (senza compensazione della distorsione) lungo l'asse Z
  • x_bias: bias stimato lungo l'asse X
  • y_bias: bias stimato lungo l'asse Y
  • z_bias: bias stimato lungo l'asse Z

Giroscopio non calibrato

Sensore fisico sottostante: giroscopio

Reporting-mode: Continua

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) restituisce un sensore non risvegliante

Un giroscopio non calibrato registra la velocità di rotazione attorno agli assi del sensore senza applicare una compensazione del bias, oltre a una stima del bias. Tutti i valori sono in radianti/secondo e vengono riportati nei campi di sensors_event_t.uncalibrated_gyro:

  • x_uncalib: velocità angolare (senza compensazione della deriva) intorno all'asse X
  • y_uncalib: velocità angolare (senza compensazione della deviazione) attorno all'asse Y
  • z_uncalib: velocità angolare (senza compensazione della deriva) attorno all'asse Z
  • x_bias: deviazione stimata attorno all'asse X
  • y_bias: deviazione stimata attorno all'asse Y
  • z_bias: deriva stimata intorno all'asse Z

Concettualmente, la misurazione non calibrata è la somma della misurazione calibrata e della stima del bias: _uncalibrated = _calibrated + _bias.

I valori x_bias, y_bias e z_bias dovrebbero aumentare non appena cambia la stima del bias e dovrebbero essere stabili per il resto del tempo.

Consulta la definizione del sensore giroscopio per dettagli sul sistema di coordinate utilizzato.

Alle misurazioni devono essere applicate la calibrazione di fabbrica e la compensazione della temperatura. Inoltre, è necessario implementare la stima dell'errore del giroscopio in modo da poter generare stime ragionevoli in x_bias, y_bias e z_bias. Se l'implementazione non è in grado di stimare la deriva, questo sensore non deve essere implementato.

Se questo sensore è presente, deve essere presente anche il corrispondente sensore giroscopio ed entrambi i sensori devono condividere gli stessi valori sensor_t.name e sensor_t.vendor.

Campo magnetico non calibrato

Sensore fisico sottostante: magnetometro

Reporting-mode: Continua

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) restituisce un sensore non di risveglio

Un sensore di campo magnetico non calibrato riporta il campo magnetico ambientale insieme a una stima della calibrazione del ferro duro. Tutti i valori sono in micro-Tesla (uT) e sono riportati nei campi di sensors_event_t.uncalibrated_magnetic:

  • x_uncalib: campo magnetico (senza compensazione del ferro duro) lungo l'asse X
  • y_uncalib: campo magnetico (senza compensazione del ferro duro) lungo l'asse Y
  • z_uncalib: campo magnetico (senza compensazione in ferro duro) lungo l'asse Z
  • x_bias: bias hard-iron stimato lungo l'asse X
  • y_bias: bias di hard-iron stimato sull'asse Y
  • z_bias: bias di ferro duro stimato lungo l'asse Z

Concettualmente, la misurazione non calibrata è la somma della misurazione calibrata e della stima del bias: _uncalibrated = _calibrated + _bias.

Il magnetometro non calibrato consente agli algoritmi di livello superiore di gestire la stima del ferro magnetico di scarsa qualità. I valori x_bias, y_bias e z_bias dovrebbero aumentare non appena la stima dell'hardware cambia e dovrebbero essere stabili per il resto del tempo.

Alle misurazioni devono essere applicate la calibrazione del ferro dolce e la compensazione della temperatura. Inoltre, è necessario implementare la stima del hardware fisico in modo da poter generare stime ragionevoli in x_bias, y_bias e z_bias. Se l'implementazione non è in grado di stimare il bias, questo sensore non deve essere implementato.

Se questo sensore è presente, deve essere presente anche il sensore di campo magnetico corrispondente e entrambi i sensori devono condividere gli stessi valori sensor_t.name e sensor_t.vendor.

Angolo della cerniera

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) restituisce un sensore di riattivazione

Un sensore dell'angolo della cerniera misura l'angolo, in gradi, tra due parti integrate del dispositivo. Il movimento di una cerniera misurato da questo tipo di sensore dovrebbe alterare i modi in cui l'utente può interagire con il dispositivo, ad esempio aprendo o rivelando un display.

Sensori compositi di interazione

Alcuni sensori vengono utilizzati principalmente per rilevare le interazioni con l'utente. Non definiamo come devono essere implementati questi sensori, ma devono avere un basso consumo di energia e è responsabilità del produttore del dispositivo verificarne la qualità in termini di esperienza utente.

Gesto di attivazione

Sensori fisici sottostanti: indefinito (qualsiasi dispositivo a bassa potenza)

Reporting-mode: One-shot

Basso consumo

Implementa solo la versione di questo sensore per la riattivazione.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) restituisce un sensore di riattivazione

Un sensore dei gesti di riattivazione consente di riattivare il dispositivo in base a un movimento specifico del dispositivo. Quando questo sensore si attiva, il dispositivo si comporta come se fosse stato premuto il tasto di accensione, accendendo lo schermo. Questo comportamento (accensione dello schermo quando si attiva questo sensore) può essere disattivato dall'utente nelle impostazioni del dispositivo. Le modifiche alle impostazioni non influiscono sul comportamento del sensore: solo sull'attivazione o meno dello schermo quando si attiva il framework. Il gesto effettivo da rilevare non è specificato e può essere scelto dal produttore del dispositivo.

Questo sensore deve avere un basso consumo energetico, in quanto è probabile che venga attivato 24 ore su 24, 7 giorni su 7.

Ogni evento del sensore segnala 1 in sensors_event_t.data[0].

Gesto di sollevamento

Sensori fisici sottostanti: indefinito (qualsiasi dispositivo a bassa potenza)

Reporting-mode: One-shot

Basso consumo

Implementa solo la versione di questo sensore per la riattivazione.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) restituisce un sensore di riattivazione

Un sensore dei gesti di sollevamento si attiva quando il dispositivo viene sollevato, indipendentemente da dove si trovava in precedenza (scrivania, tasca, borsa).

Ogni evento del sensore segnala 1 in sensors_event_t.data[0].

Gesto di Glance

Sensori fisici sottostanti: non definito (qualsiasi dispositivo a basso consumo)

Modalità di generazione dei report: One-shot

Basso consumo

Implementa solo la versione di questo sensore per la riattivazione.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) restituisce un sensore di riattivazione

Il sensore dei gesti di sguardo consente di attivare brevemente lo schermo per consentire all'utente di dare un'occhiata ai contenuti sullo schermo in base a un movimento specifico. Quando questo sensore si attiva, il dispositivo accende temporaneamente lo schermo per consentire all'utente di dare un'occhiata alle notifiche o ad altri contenuti mentre il dispositivo rimane bloccato in uno stato non interattivo (sospensione), quindi lo schermo si spegne di nuovo. Questo comportamento (accensione breve dello schermo quando si attiva questo sensore) potrebbe essere disattivato dall'utente nelle impostazioni del dispositivo. Le modifiche alle impostazioni non influiscono sul comportamento del sensore: solo sul fatto che il framework accenda brevemente lo schermo quando si attiva. Il gesto effettivo da rilevare non è specificato e può essere scelto dal produttore del dispositivo.

Questo sensore deve essere a bassa potenza, in quanto è probabile che venga attivato 24 ore su 24, 7 giorni su 7. Ogni evento del sensore registra 1 in sensors_event_t.data[0].

Sensori IMU con assi limitati

Disponibili da Android 13, i sensori IMU ad assi limitati sono sensori che supportano i casi d'uso in cui non sono disponibili tutti e tre gli assi (x, y, z). I tipi di IMU standard in Android (ad esempio SENSOR_TYPE_ACCELEROMETER e SENSOR_TYPE_GYROSCOPE) assumeno che tutti e tre gli assi siano supportati. Tuttavia, non tutti i fattori di forma e i dispositivi supportano gli accelerometri a 3 assi e i giroscopi a 3 assi.

Assi limitati con accelerometro

Sensori fisici sottostanti: accelerometro

Modalità di generazione dei report: continua

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) restituisce un sensore di non attivazione

Un sensore di assi limitati dell'accelerometro è equivalente a TYPE_ACCELEROMETER, ma supporta i casi in cui uno o due assi non sono supportati.

Gli ultimi tre valori dell'evento del sensore registrati dal sensore indicano se il valore di accelerazione per gli assi x, y e z è supportato. Un valore di 1.0 indica che l'asse è supportato, mentre un valore di 0 indica che non è supportato. I produttori di dispositivi identificano gli assi supportati in fase di compilazione e i valori non cambiano durante l'esecuzione.

I produttori di dispositivi devono impostare i valori di accelerazione per gli assi inutilizzati su 0, anziché avere valori indefiniti.

Assi limitati del giroscopio

Sensori fisici sottostanti: giroscopio

Reporting-mode: Cont.

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) restituisce un sensore di non attivazione

Un sensore con assi limitati del giroscopio è equivalente a TYPE_GYROSCOPE , ma supporta i casi in cui uno o due assi non sono supportati.

Gli ultimi tre valori dell'evento del sensore registrati dal sensore indicano se il valore della velocità angolare per gli assi x, y e z è supportato. Un valore di 1.0 indica che l'asse è supportato, mentre un valore di 0 indica che non è supportato. I produttori di dispositivi identificano gli assi supportati in fase di compilazione e i valori non cambiano durante l'esecuzione.

I produttori di dispositivi devono impostare i valori di velocità angolare per gli assi inutilizzati su 0.

Assi limitati dell'accelerometro non calibrati

Sensori fisici sottostanti: accelerometro

Reporting-mode: Cont.

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) restituisce un sensore di non attivazione

Un sensore non calibrato con assi con accelerometro limitato equivale a TYPE_ACCELEROMETER_UNCALIBRATED, ma supporta i casi in cui uno o due assi non sono supportati.

Gli ultimi tre valori evento del sensore registrati dal sensore indicano se i valori di accelerazione e bias per gli assi x, y e z sono supportati. Il valore 1.0 indica che l'asse è supportato, mentre il valore 0 non è supportato. I produttori di dispositivi identificano gli assi supportati al momento della build e i valori non cambiano durante il runtime.

I produttori di dispositivi devono impostare i valori di accelerazione e bias per gli assi non utilizzati su 0.

Assi limitati del giroscopio non calibrati

Sensori fisici sottostanti: giroscopio

Modalità di reporting: Continuo

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) restituisce un sensore non di risveglio

Un sensore non calibrato ad assi limitati del giroscopio equivale a TYPE_GYROSCOPE_UNCALIBRATED, ma supporta i casi in cui uno o due assi non sono supportati.

Gli ultimi tre valori degli eventi del sensore riportati dal sensore indicano se i valori di velocità angolare e deviazione per gli assi x, y e z sono supportati. Un valore di 1.0 indica che l'asse è supportato, mentre un valore di 0 indica che non è supportato. I produttori di dispositivi identificano gli assi supportati al momento della build e i valori non cambiano durante il runtime.

I produttori di dispositivi devono impostare i valori di velocità angolare e deriva per gli assi non utilizzati su 0.

IMU con assi limitati compositi

Sensori fisici sottostanti: qualsiasi combinazione di accelerometro a 3 assi, giroscopio a 3 assi, accelerometro a 3 assi non calibrato e giroscopio a 3 assi non calibrato.

Reporting-mode: Continua

Un sensore IMU con assi limitati composito è equivalente a un sensore IMU con assi limitati, ma invece di essere supportato nell'HAL, converte i dati del sensore a 3 assi nelle varianti con assi limitati equivalenti. Questi sensori compositi sono attivati solo per i dispositivi per auto e motori.

La tabella seguente mostra un esempio di conversione da un accelerometro a tre assi standard a un accelerometro a assi limitati composito.

Valori SensorEvent per SENSOR_TYPE_ACCELEROMETER Esempio di evento sensore SENSOR_TYPE_ACCELEROMETER Composito SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent
valori[0]

-0,065

-0,065

valori[1]

0,078

0,078

valori[2]

9,808

9,808

valori[3]

N/D

1.0

valori[4]

N/D

1.0

valori[5]

N/D

1.0

Sensori per auto

Sensori per supportare i casi d'uso nel settore auto e motori.

Titolo

Sensori fisici sottostanti: qualsiasi combinazione di GPS, magnetometro, accelerometro e giroscopio.

Reporting-mode: Continua

getDefaultSensor(SENSOR_TYPE_HEADING) restituisce un sensore di non attivazione

Disponibile da Android 13, un sensore di rotta misura la direzione in cui è rivolto il dispositivo rispetto al nord magnetico in gradi. Il sensore di rotta include due valori SensorEvent. Uno per l'orientamento del dispositivo misurato e uno per l'accuratezza del valore fornito per l'orientamento.

I valori di rotta registrati da questo sensore devono essere compresi tra 0.0 (incluso) e 360.0 (escluso), con 0 che indica nord, 90 est, 180 sud e 270 ovest.

L'accuratezza di questo sensore è definita con un livello di confidenza del 68%. Nel caso in cui la distribuzione di fondo sia normale gaussiana, l'accuratezza è pari a una deviazione standard. Ad esempio, se il sensore di orientamento restituisce un valore di orientamento di 60 gradi e un valore di accuratezza di 10 gradi, esiste una probabilità del 68% che la vera rotta sia compresa tra 50 e 70 gradi.