Tipi di sensori

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

Assi dei sensori

I valori degli eventi dei sensori di molti sensori sono 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 l'orientamento dello schermo del dispositivo cambia.

Sistema di coordinate
dell'API Sensor per i dispositivi mobili

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

Auto e motori: assi

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

  • L'asse X è rivolto a 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 Sensor per
dispositivi per il settore automobilistico

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

Il sistema 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 attraverso l'assale anteriore.

Sensori di base

I tipi di sensore di base prendono il nome dai sensori fisici che rappresentano. Questi sensori trasmettono i dati di 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 non sono uguali 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 sensore fisico sottostante nei seguenti casi d'uso:

  • Un chip giroscopio con un intervallo di bias di 1 gradi/secondo.
    • Dopo la calibrazione di fabbrica, la compensazione della temperatura e la compensazione del bias vengono applicate, il bias effettivo del sensore Android verrà ridotto, forse fino a un punto in cui è garantito che il bias sia inferiore a 0,01 gradi/secondo.
    • In questa situazione, diciamo che il sensore Android ha una distorsione inferiore a 0,01 gradi/secondo, anche se la scheda tecnica del sensore sottostante indica 1 grado/secondo.
  • Un barometro con un consumo energetico di 100 μW.
    • 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 questa situazione, si dice che il sensore Android ha un consumo energetico di 1000 μW, anche se il consumo energetico misurato sui terminali del chip del barometro è di 100 μW.
  • Un magnetometro che consuma 100 μW quando è calibrato, ma consuma di più durante la calibrazione.
    • La sua routine di calibrazione potrebbe richiedere l'attivazione del giroscopio, consumando 5000 uW e l'esecuzione di un algoritmo, con un costo aggiuntivo di 900 uW.
    • In questa situazione, il consumo massimo di energia del sensore Android (magnetometro) è di 6000 uW.
    • In questo caso, il consumo energetico medio è la misura più utile ed è ciò che viene riportato nelle caratteristiche statiche del sensore tramite l'HAL.

Accelerometro

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) restituisce un sensore non di risveglio

Un sensore dell'accelerometro 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 riportata nei campi x, y e z di sensors_event_t.acceleration.

Tutti i valori sono in unità SI (m/s^2) 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 X è positivo.
  • Quando il dispositivo è appoggiato su un tavolo, il valore dell'accelerazione lungo l'asse 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 è maggiore di +9,81, il 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 della distorsione online
  • Calibrazione della bilancia online

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

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

Temperatura ambiente

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) restituisce un sensore non di risveglio

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

Sensore del campo magnetico

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) restituisce un sensore non di risveglio

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

Un sensore di campo magnetico (noto anche come magnetometro) segnala 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 microtesla (uT).

Il magnetometro indica anche l'accuratezza prevista delle sue letture tramite sensors_event_t.magnetic.status. Per ulteriori informazioni sui valori possibili per questo campo, consulta le costanti SensorManager di SENSOR_STATUS_*.

Le letture vengono calibrate utilizzando:

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

Giroscopio

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) restituisce un sensore non di risveglio

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

La rotazione è positiva in senso antiorario (regola della mano destra). ovvero un osservatore che guarda da una posizione positiva sull'asse X, Y o Z un dispositivo posizionato sull'origine segnalerebbe una rotazione positiva se il dispositivo sembrasse ruotare in senso antiorario. Tieni presente che questa è la definizione matematica standard della rotazione positiva e non corrisponde alla definizione di rollio utilizzata in ambito aerospaziale.

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

Le letture vengono calibrate utilizzando:

  • Compensazione della temperatura
  • Compensazione in base alla scala di fabbrica (o online)
  • Calibrazione del bias online (per eliminare la deriva)

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

Il giroscopio non può essere emulato in base a magnetometri e accelerometri, in quanto ciò comporterebbe una riduzione della coerenza e della reattività locali. Deve essere basato su un normale chip giroscopico.

Battito cardiaco

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_HEART_RATE) restituisce un sensore non di risveglio

Un sensore del battito cardiaco segnala il battito cardiaco attuale 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. Per ulteriori informazioni sui valori possibili per questo campo, consulta le costanti SensorManager di SENSOR_STATUS_*. In particolare, alla prima attivazione, a meno che non sia noto che il dispositivo non è a contatto con il corpo, il campo dello stato del primo evento deve essere impostato su SENSOR_STATUS_UNRELIABLE. Poiché questo sensore è in fase di modifica, gli eventi vengono generati quando e solo quando heart_rate.bpm o heart_rate.status sono cambiati dall'ultimo evento. Gli eventi vengono generati non più velocemente di una volta ogni sampling_period.

Il framework esegue automaticamente l'override di sensor_t.requiredPermission con l'autorizzazione appropriata per mantenere la compatibilità. Il framework utilizza l'autorizzazione SENSOR_PERMISSION_READ_HEART_RATE per Android 16 e versioni successive e l'autorizzazione SENSOR_PERMISSION_BODY_SENSORS per Android 15 e versioni precedenti.

Chiaro

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_LIGHT) restituisce un sensore non di risveglio

Un sensore di luce segnala l'illuminazione corrente in unità lux SI.

La misurazione viene riportata in sensors_event_t.light.

Prossimità

Reporting-mode: On-change

Solitamente definito come sensore di risveglio

getDefaultSensor(SENSOR_TYPE_PROXIMITY) restituisce un sensore di riattivazione

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

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

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

Pressione

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_PRESSURE) restituisce un sensore non di 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 della polarizzazione di fabbrica
  • Calibrazione su scala di fabbrica

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

Umidità relativa

Reporting-mode: On-change

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) restituisce un sensore non di risveglio

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 combinando i dati di uno o più sensori fisici. Qualsiasi sensore che non sia un sensore di base viene 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 del gioco è probabilmente uguale alla somma dei consumi energetici di il chip dell'accelerometro, il chip del giroscopio, il chip che elabora i dati e i bus che trasportano i dati. Un altro esempio è la deriva di un vettore di rotazione di un gioco, che dipende tanto dalla qualità dell'algoritmo di calibrazione quanto dalle caratteristiche fisiche del sensore.

La tabella seguente elenca 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 sottostanti per approssimare i risultati, in quanto offrono un'esperienza utente scadente.

Tipo di sensore Categoria Sensori fisici sottostanti Modalità di reporting

Vettore di rotazione del gioco

Atteggiamento

Accelerometro, giroscopio, NON UTILIZZARE il magnetometro

Continuo

Vettore di rotazione geomagnetica Sensore
     a basso consumo

Atteggiamento

Accelerometro, magnetometro, NON UTILIZZARE il giroscopio

Continuo

Gesto di sguardo Sensore a basso consumo

Interazione

Non definito

One-shot

Gravità

Atteggiamento

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

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 a basso consumo

Interazione

Non definito

One-shot

Vettore di rotazione

Atteggiamento

Accelerometro, magnetometro, giroscopio (se presente)

Continuo

Movimento significativo Sensore a basso consumo

Attività

Accelerometro (o un altro sensore a bassissimo consumo)

One-shot

Contapassi Sensore a basso consumo

Attività

Accelerometro

Al cambio

Rilevatore di passi Sensore a basso consumo

Attività

Accelerometro

Speciale

Rilevatore di inclinazione Sensore a basso consumo

Attività

Accelerometro

Speciale

Gesto di riattivazione Sensore a basso consumo

Interazione

Non definito

One-shot

Sensore a basso consumo = 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)

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) restituisce un sensore non di risveglio

Un sensore di accelerazione lineare segnala l'accelerazione lineare del dispositivo nel frame del sensore, escluso quello della gravità.

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

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

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

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

Movimento significativo

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

Reporting-mode: One-shot

Basso consumo

Implementa solo la versione di riattivazione di questo sensore.

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 comportare una variazione della posizione dell'utente.

Esempi di movimenti significativi sono:

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

Esempi di situazioni che non attivano un movimento significativo:

  • Smartphone in tasca e persona ferma
  • Lo smartphone è su un tavolo e il tavolo trema un po' a causa del traffico o della lavatrice nelle vicinanze

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

Questo sensore deve essere a basso consumo energetico. Compromesso per il consumo energetico che potrebbe comportare un piccolo numero di falsi negativi. Questo viene fatto per diversi motivi:

  • Lo scopo di questo sensore è risparmiare energia.
  • L'attivazione di un evento quando l'utente non si sta muovendo (falso positivo) è costosa in termini di energia, quindi deve essere evitata.
  • Il mancato attivamento di un evento quando l'utente è in movimento (falso negativo) è accettabile purché non si verifichi ripetutamente. Se l'utente cammina per 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 (e possibilmente altri a basso consumo energetico)

Reporting-mode: Special (un evento per ogni passaggio effettuato)

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 terra, generando una forte variazione di accelerazione.

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

Questo sensore deve essere a basso consumo energetico. ovvero, se il rilevamento dei passi non può essere eseguito nell'hardware, questo sensore non deve essere definito. In particolare, quando il rilevatore di passi è attivato e l'accelerometro no, solo i passi devono attivare 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 (e possibilmente altri a basso consumo energetico)

Reporting-mode: On-change

A basso consumo

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) restituisce un sensore non di risveglio

Un contapassi registra il numero di passi compiuti dall'utente dall'ultimo riavvio durante l'attivazione.

La misurazione viene segnalata 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 per quell'evento.

Consulta il tipo di sensore Rilevatore di passi per il significato dell'ora di un passo.

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

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

Come indicato in Interazione, durante il funzionamento questo sensore non deve interrompere il funzionamento di altri sensori, in particolare l'accelerometro, che potrebbe essere in uso.

Se un determinato dispositivo non supporta queste modalità di funzionamento, questo tipo di sensore non deve essere segnalato dall'HAL. ovvero non è accettabile "emulare" questo sensore nell'HAL.

Questo sensore deve essere a basso consumo energetico. ovvero, se il rilevamento dei passi non può essere eseguito nell'hardware, questo sensore non deve essere definito. In particolare, quando il contapassi è attivato e l'accelerometro no, solo i passi devono attivare interruzioni (non i dati dell'accelerometro).

Rilevatore di inclinazione

Sensore fisico sottostante: accelerometro (e possibilmente altri a basso consumo energetico)

Reporting-mode: Special

A basso consumo

Implementa solo la versione di 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 della 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 la gravità stimata al momento della generazione dell'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

Le accelerazioni elevate senza una variazione dell'orientamento dello smartphone non devono attivare un evento di inclinazione. Ad esempio, una curva stretta o una forte accelerazione alla guida di un'auto non devono attivare un evento di inclinazione, anche se l'angolo dell'accelerazione media può variare di oltre 35 gradi. In genere, questo sensore viene implementato con l'aiuto di un solo accelerometro. Possono essere utilizzati anche altri sensori se non aumentano in modo significativo il consumo energetico. Si tratta di un sensore a basso consumo che dovrebbe consentire al SoC di entrare in modalità di sospensione. Non emulare questo sensore nell'HAL. Ogni evento sensore segnala 1 in sensors_event_t.data[0].

Sensori compositi di assetto

Vettore di rotazione

Sensori fisici sottostanti: accelerometro, magnetometro e giroscopio

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) restituisce un sensore non di riattivazione

Un sensore del vettore di rotazione segnala l'orientamento del dispositivo rispetto al sistema di coordinate Est-Nord-Alto. Di solito si ottiene integrando le letture di accelerometro, giroscopio e magnetometro. Il sistema di coordinate Est-Nord-Alto è definito come base ortonormale diretta in cui:

  • X punta a est ed è tangente al terreno.
  • Y punta a nord ed è tangente al terreno.
  • L'asse Z è rivolto verso il cielo ed è perpendicolare al terreno.

L'orientamento dello smartphone è rappresentato dalla rotazione necessaria per allineare le coordinate Est-Nord-Alto con quelle dello smartphone. ovvero, l'applicazione della rotazione al frame del mondo (X,Y,Z) li allineerebbe alle coordinate dello smartphone (x,y,z).

La rotazione può essere vista come la rotazione dello smartphone di un angolo theta attorno a un asse rot_axis per passare dall'orientamento del dispositivo di riferimento (allineato a est-nord-alto) all'orientamento attuale del dispositivo. La rotazione è codificata come le quattro componenti x, y, z, w di un quaternione 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)

Dove:

  • I campi x, y e z di rot_axis sono le coordinate Est-Nord-Alto di un vettore di lunghezza unitaria che rappresenta l'asse di rotazione
  • theta è l'angolo di rotazione

Il quaternione è un quaternione unitario: deve avere norma 1. Se non lo fai, il comportamento del client sarà irregolare.

Inoltre, questo sensore segnala un'accuratezza della direzione stimata:

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

L'errore di orientamento deve essere inferiore a estimated_accuracy il 95% del tempo. Questo sensore deve utilizzare un giroscopio come input principale per il cambio di 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)

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) restituisce un sensore non di risveglio

Un sensore del vettore di rotazione del gioco è simile a un sensore del vettore di rotazione, ma non utilizza il campo geomagnetico. Pertanto, l'asse Y non punta a nord, ma a un altro riferimento. Il riferimento può variare dello stesso ordine di grandezza delle deviazioni del giroscopio attorno all'asse Z.

Per informazioni dettagliate su come impostare sensors_event_t.data[0-3], consulta il sensore Vettore di rotazione. Questo sensore non segnala una precisione della direzione stimata: sensors_event_t.data[4] è riservato e deve essere impostato su 0.

In una situazione ideale, uno smartphone ruotato e riportato allo stesso orientamento nel mondo reale dovrebbe segnalare 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, se non indirettamente, tramite la stima della distorsione del giroscopio.

Gravity

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

Modalità di segnalazione: 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.

I componenti del vettore di gravità sono riportati 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 è dotato di giroscopio, il sensore di gravità deve utilizzare l'accelerometro e il magnetometro come input.

Vettore di rotazione geomagnetica

Sensori fisici sottostanti: accelerometro e magnetometro (nessun giroscopio)

Modalità di segnalazione: Continua

A basso consumo

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) restituisce un sensore non di risveglio

Un vettore di rotazione geomagnetico è simile a un sensore del vettore di rotazione, ma utilizza un magnetometro e nessun 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 del vettore di rotazione, l'errore di direzione deve essere inferiore all'accuratezza stimata (sensors_event_t.data[4]) nel 95% dei casi.

Questo sensore deve essere a basso consumo energetico, quindi deve essere implementato nell'hardware.

Orientamento (deprecato)

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

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_ORIENTATION) restituisce un sensore non di risveglio

Nota:questo è un tipo di sensore precedente che è stato ritirato dall'SDK Android. È stato sostituito dal sensore del vettore di rotazione, che è definito in modo più chiaro. Utilizza il sensore del vettore di rotazione anziché il sensore di orientamento ogni volta che è possibile.

Un sensore di orientamento segnala l'assetto 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 del nord magnetico e l'asse Y, intorno all'asse Z (0<=azimuth<360). 0=nord, 90=est, 180=sud, 270=ovest.
  • sensors_event_t.orientation.y: beccheggio, 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: rollio, 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 rollio è positivo in senso orario. (Matematicamente parlando, deve essere positivo in senso antiorario):

Rappresentazione dell&#39;orientamento
   rispetto a un dispositivo

Figura 3. Orientamento rispetto a un dispositivo

Questa definizione è diversa da beccheggio, rollio e imbardata utilizzati in aviazione, dove l'asse X si trova lungo il lato lungo dell'aereo (dalla coda al muso).

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

Sensori non calibrati

I sensori non calibrati forniscono risultati più grezzi 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ù fluidi e affidabili. Ad esempio, se un'app tenta di eseguire la propria fusione dei sensori, l'introduzione di calibrazioni può effettivamente distorcere i risultati.

Accelerometro non calibrato

Sensore fisico sottostante: accelerometro

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) restituisce un sensore non di risveglio

Un sensore dell'accelerometro non calibrato segnala l'accelerazione del dispositivo lungo i tre assi del sensore 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 sono riportati nei campi di sensors_event_t.uncalibrated_accelerometer:

  • x_uncalib: accelerazione (senza compensazione del bias) lungo l'asse X
  • y_uncalib: accelerazione (senza compensazione del bias) lungo l'asse Y
  • z_uncalib: accelerazione (senza compensazione del bias) 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

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) restituisce un sensore non di risveglio

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

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

A livello concettuale, 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 rimanere stabili per il resto del tempo.

Per i dettagli sul sistema di coordinate utilizzato, consulta la definizione del sensore giroscopio.

La calibrazione di fabbrica e la compensazione della temperatura devono essere applicate alle misurazioni. Inoltre, deve essere implementata la stima della deriva del giroscopio in modo che possano essere segnalate 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 sensore giroscopio corrispondente e entrambi i sensori devono condividere gli stessi valori sensor_t.name e sensor_t.vendor.

Campo magnetico non calibrato

Sensore fisico sottostante: magnetometro

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) restituisce un sensore non di risveglio

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

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

A livello concettuale, 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 una stima errata del ferro dolce. I valori di x_bias, y_bias e z_bias dovrebbero aumentare non appena la stima delle variazioni di hard-iron e dovrebbero rimanere stabili per il resto del tempo.

La calibrazione del ferro dolce e la compensazione della temperatura devono essere applicate alle misurazioni. Inoltre, deve essere implementata la stima del ferro duro in modo che possano essere riportate stime ragionevoli in x_bias, y_bias e z_bias. Se l'implementazione non è in grado di stimare la distorsione, questo sensore non deve essere implementato.

Se questo sensore è presente, deve essere presente anche il sensore del 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 integrali 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 essere a basso consumo energetico e è responsabilità del produttore del dispositivo verificarne la qualità in termini di esperienza utente.

Gesto di riattivazione

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

Reporting-mode: One-shot

A basso consumo

Implementa solo la versione di riattivazione di questo sensore.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) restituisce un sensore di riattivazione

Un sensore di risveglio 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 questo sensore si attiva) potrebbe essere disattivato dall'utente nelle impostazioni del dispositivo. Le modifiche alle impostazioni non influiscono sul comportamento del sensore: solo sull'attivazione dello schermo quando viene attivato. Il gesto effettivo da rilevare non è specificato e può essere scelto dal produttore del dispositivo.

Questo sensore deve essere a 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: non definito (qualsiasi dispositivo a basso consumo energetico)

Reporting-mode: One-shot

A basso consumo

Implementa solo la versione di riattivazione di questo sensore.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) restituisce un sensore di riattivazione

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

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

Gesto di sguardo

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

Reporting-mode: One-shot

A basso consumo

Implementa solo la versione di riattivazione di questo sensore.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) restituisce un sensore di riattivazione

Un sensore di gesture di sguardo consente di accendere 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, lo schermo del dispositivo si accende momentaneamente per consentire all'utente di visualizzare le notifiche o altri contenuti mentre il dispositivo rimane bloccato in uno stato non interattivo (modalità sonno), quindi lo schermo si spegne di nuovo. Questo comportamento (accensione breve dello schermo quando questo sensore si attiva) potrebbe essere disattivato dall'utente nelle impostazioni del dispositivo. Le modifiche alle impostazioni non influenzano il comportamento del sensore: solo se il framework accende 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 basso consumo energetico, in quanto è probabile che venga attivato 24 ore su 24, 7 giorni su 7. Ogni evento sensore segnala 1 in sensors_event_t.data[0].

Sensori IMU con assi limitati

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

Assi limitati dell'accelerometro

Sensori fisici sottostanti: accelerometro

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) restituisce un sensore non di risveglio

Un sensore di accelerometro con assi limitati equivale a TYPE_ACCELEROMETER, ma supporta i casi in cui uno o due assi non sono supportati.

Gli ultimi tre valori dell'evento sensore segnalati 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 non definiti.

Giroscopio con assi limitati

Sensori fisici sottostanti: giroscopio

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) restituisce un sensore non di risveglio

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

Gli ultimi tre valori dell'evento sensore segnalati 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.

Accelerometro con assi limitati non calibrato

Sensori fisici sottostanti: accelerometro

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) restituisce un sensore non di risveglio

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

Gli ultimi tre valori dell'evento sensore segnalati dal sensore indicano se i valori di accelerazione e bias 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 in fase di compilazione e i valori non cambiano durante l'esecuzione.

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

Giroscopio con assi limitati non calibrato

Sensori fisici sottostanti: giroscopio

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) restituisce un sensore non di risveglio

Un sensore giroscopio non calibrato con assi limitati 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 segnalati dal sensore indicano se i valori di velocità angolare e deriva 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 in fase di compilazione e i valori non cambiano durante l'esecuzione.

I produttori di dispositivi devono impostare i valori di velocità angolare e deriva per gli assi inutilizzati 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.

Modalità di segnalazione: Continua

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

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

Valori SensorEvent per SENSOR_TYPE_ACCELEROMETER Esempio di SensorEvent SENSOR_TYPE_ACCELEROMETER SensorEvent SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES composito
values[0]

-0,065

-0,065

values[1]

0,078

0,078

values[2]

9.808

9.808

values[3]

N/D

1,0

values[4]

N/D

1,0

values[5]

N/D

1,0

Sensori per auto

Sensori per supportare i casi d'uso automobilistici.

Intestazione

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

Modalità di segnalazione: Continua

getDefaultSensor(SENSOR_TYPE_HEADING) restituisce un sensore non di risveglio

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

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

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