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 che è 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.

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.

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 della 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 grezzo 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 giroscopico 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/sec.
- 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 μW.
- 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 energetico massimo del sensore (magnetometro) Android è 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 riattivazione
Un sensore dell'accelerometro rileva 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 di accelerazione lungo l'asse z è +9,81, che corrisponde all'accelerazione del dispositivo (0 m/s²) meno la forza di gravità (-9,81 m/s²).
- Quando il dispositivo è appoggiato su un tavolo e viene spinto verso l'alto, il valore di accelerazione è maggiore di +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 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 possibili valori 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 riattivazione
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 riattivazione
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 microtesla (uT).
Il magnetometro indica anche l'accuratezza prevista delle sue letture
tramite sensors_event_t.magnetic.status
. Per ulteriori informazioni sui possibili valori 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 riattivazione
Un sensore giroscopico indica la velocità di rotazione del dispositivo intorno 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 sembra ruotare in senso antiorario. Tieni presente che questa è la definizione matematica standard di rotazione positiva e non corrisponde alla definizione di rollio 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 della scala di fabbrica (o online)
- Calibrazione del bias online (per rimuovere la deriva)
Il giroscopio indica anche l'accuratezza prevista delle sue letture tramite
sensors_event_t.gyro.status
. Per ulteriori informazioni sui possibili valori 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.
Frequenza cardiaca
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
restituisce un sensore non di riattivazione
Un sensore del battito cardiaco rileva il battito cardiaco attuale della persona che tocca il dispositivo.
La frequenza cardiaca attuale in battiti al minuto (BPM) è indicata in
sensors_event_t.heart_rate.bpm
e lo stato del sensore è
indicato in
sensors_event_t.heart_rate.status
. Per ulteriori informazioni sui possibili valori 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 di 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
per
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 riattivazione
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 riattivazione
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 della scala di fabbrica
Il barometro viene spesso utilizzato per stimare le variazioni di elevazione. 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 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 combinando 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:
- Rilevatore di passi e movimento significativo, che di solito si basano su un accelerometro, ma potrebbero basarsi anche su altri sensori, se il consumo energetico e la precisione fossero accettabili.
- Vettore di rotazione del gioco, basato su un accelerometro e un giroscopio.
- Giroscopio non calibrato, simile al sensore di base del giroscopio, ma con la calibrazione del bias segnalata separatamente anziché corretta nella misurazione.
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 del 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 |
---|---|---|---|
Atteggiamento |
Accelerometro, giroscopio, NON UTILIZZARE il magnetometro |
Continuo |
|
Atteggiamento |
Accelerometro, magnetometro, NON UTILIZZARE il giroscopio |
Continuo |
|
Gesto di sguardo ![]() |
Interazione |
Non definito |
One-shot |
Atteggiamento |
Accelerometro, giroscopio (se presente) o magnetometro (se il giroscopio non è presente) |
Continuo |
|
Non calibrato |
Giroscopio |
Continuo |
|
Attività |
Accelerometro, giroscopio (se presente) o magnetometro (se il giroscopio non è presente) |
Continuo |
|
Non calibrato |
Magnetometro |
Continuo |
|
Orientamento (deprecato) |
Atteggiamento |
Accelerometro, magnetometro, giroscopio (se presente) |
Continuo |
Interazione |
Non definito |
One-shot |
|
Atteggiamento |
Accelerometro, magnetometro, giroscopio (se presente) |
Continuo |
|
Attività |
Accelerometro (o un altro sensore a bassissimo consumo) |
One-shot |
|
Attività |
Accelerometro |
Al cambio |
|
Attività |
Accelerometro |
Speciale |
|
Attività |
Accelerometro |
Speciale |
|
Interazione |
Non definito |
One-shot |
= 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 riattivazione
Un sensore di accelerazione lineare segnala l'accelerazione lineare del dispositivo nel frame del sensore, esclusa la 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 di questo tipo sono:
- A piedi o in bicicletta
- 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 alcuni 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 trigger di un evento quando l'utente è in movimento (falso negativo) è accettabile purché non si verifichi ripetutamente. Se l'utente ha camminato 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 (one event per step taken)
Basso consumo
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
restituisce un sensore non di riattivazione
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 dell'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 contapassi è attivato 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 (e possibilmente altri a basso consumo energetico)
Reporting-mode: On-change
A basso consumo
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
restituisce un sensore non di riattivazione
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. Sia il rilevatore di passi sia 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 conducente possa eseguire la manutenzione del contatore.
Come indicato in Interazione, mentre questo sensore è in funzione, non deve interrompere il funzionamento di altri sensori, in particolare dell'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 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
Le accelerazioni elevate senza una variazione dell'orientamento dello smartphone non devono attivare un
evento di inclinazione. Ad esempio, una curva brusca 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 del 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 una 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 le coordinate 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 i quattro componenti x, y, z, w senza unità 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 indica un'accuratezza della direzione stimata:
sensors_event_t.data[4] = estimated_accuracy
(in radianti)
L'errore di intestazione 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 di accelerometro e 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 riattivazione
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 punta a nord, ma a un altro riferimento. Questo riferimento può variare dello stesso ordine di grandezza della deriva 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
restituisce 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 riattivazione
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 dispone di un 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 riattivazione
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 (obsoleto)
Sensori fisici sottostanti: accelerometro, magnetometro e (se presente) giroscopio
Modalità di segnalazione: Continua
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
restituisce un sensore non di riattivazione
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. Se possibile, utilizza il sensore del vettore di rotazione anziché il sensore di orientamento.
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 intorno 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 intorno 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):

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 possibili valori per questo campo, consulta le costanti
SensorManager
di
SENSOR_STATUS_*
.
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ò distorcere i risultati.
Accelerometro non calibrato
Sensore fisico sottostante: accelerometro
Modalità di segnalazione: Continua
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
restituisce un sensore non di riattivazione
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 Xy_uncalib
: accelerazione (senza compensazione del bias) lungo l'asse Yz_uncalib
: accelerazione (senza compensazione del bias) lungo l'asse Zx_bias
: distorsione stimata lungo l'asse Xy_bias
: distorsione stimata lungo l'asse Yz_bias
: distorsione stimata 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 riattivazione
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/secondo e vengono riportati nei campi di
sensors_event_t.uncalibrated_gyro
:
x_uncalib
: velocità angolare (senza compensazione della deriva) attorno all'asse Xy_uncalib
: velocità angolare (senza compensazione della deriva) intorno all'asse Yz_uncalib
: velocità angolare (senza compensazione della deriva) attorno all'asse Zx_bias
: deriva stimata intorno all'asse Xy_bias
: deriva stimata intorno all'asse Yz_bias
: deriva 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 la stima del bias
cambia e dovrebbero rimanere stabili per il resto del tempo.
Per informazioni dettagliate 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 riattivazione
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 sono riportati nei campi di
sensors_event_t.uncalibrated_magnetic
:
x_uncalib
: campo magnetico (senza compensazione del ferro duro) lungo l'asse Xy_uncalib
: campo magnetico (senza compensazione del ferro duro) lungo l'asse Yz_uncalib
: campo magnetico (senza compensazione del ferro duro) lungo l'asse Zx_bias
: distorsione di tipo hard-iron stimata lungo l'asse Xy_bias
: distorsione hard-iron stimata lungo l'asse Yz_bias
: distorsione hard-iron stimata 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 duro. I valori di
x_bias
, y_bias
e z_bias
dovrebbero
aumentare non appena
cambia la stima del ferro dolce 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 ed 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 modificare 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 definiti (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 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) potrebbe essere disattivato dall'utente nelle impostazioni del dispositivo. Le modifiche alle impostazioni non influiscono sul comportamento del sensore: solo se il framework accende 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 del sensore segnala 1
in sensors_event_t.data[0]
.
Gesto di sollevamento
Sensori fisici sottostanti: non definiti (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 definiti (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 visualizzare rapidamente i 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 rapidamente le notifiche o altri contenuti mentre il dispositivo rimane bloccato in uno stato non interattivo (modalità 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 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 del 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 riattivazione
Un sensore degli 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 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.
Assi limitati del giroscopio
Sensori fisici sottostanti: giroscopio
Modalità di segnalazione: Continua
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
restituisce un sensore non di riattivazione
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 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 riattivazione
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 riattivazione
Un sensore giroscopio con assi limitati non calibrato 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
sono supportati i valori di velocità angolare e deriva per gli assi x, y e z. 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 con assi limitati composito è equivalente a un sensore IMU con assi limitati, ma invece di 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 |
valori[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.
Titolo
Sensori fisici sottostanti: qualsiasi combinazione di GPS, magnetometro, accelerometro e giroscopio.
Modalità di segnalazione: Continua
getDefaultSensor(SENSOR_TYPE_HEADING)
restituisce un sensore non di riattivazione
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 direzione include due valori SensorEvent
.
Uno per l'intestazione del dispositivo misurato e uno per l'accuratezza del valore dell'intestazione 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.