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.
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 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_ACCELEROMETERSENSOR_TYPE_GYROSCOPESENSOR_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:
- 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 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 |
|---|---|---|---|
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 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_axissono 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):
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 Xy_uncalib: accelerazione (senza compensazione del bias) lungo l'asse Yz_uncalib: accelerazione (senza compensazione del bias) lungo l'asse Zx_bias: bias stimato lungo l'asse Xy_bias: bias stimato lungo l'asse Yz_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 Xy_uncalib: velocità angolare (senza compensazione delle deviazioni) attorno all'asse Yz_uncalib: velocità angolare (senza compensazione delle deviazioni) attorno all'asse Zx_bias: deviazione stimata intorno all'asse Xy_bias: deviazione stimata intorno all'asse Yz_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 Xy_uncalib: campo magnetico (senza compensazione del ferro dolce) lungo l'asse Yz_uncalib: campo magnetico (senza compensazione del ferro dolce) lungo l'asse Zx_bias: bias hard-iron stimato lungo l'asse Xy_bias: bias hard-iron stimato lungo l'asse Yz_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.