Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Tipi di sensori

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

Assi del sensore

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

Asce del dispositivo mobile

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

Sistema di coordinate dell'API del sensore per dispositivi mobili

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

Asce automobilistiche

Nelle implementazioni di Android Automotive, gli assi sono definiti rispetto al telaio del veicolo.

Sistema di coordinate dell'API del sensore per dispositivi automobilistici

Figura 2. Sistema di coordinate (relativo a un dispositivo automobilistico) utilizzato dall'API Sensor

  • X aumenta verso destra del veicolo
  • Y aumenta verso il naso del telaio del corpo
  • Z aumenta verso il tetto del telaio del corpo

L'origine del sistema di coordinate si trova al centro dell'asse posteriore del veicolo. Quando si guarda dalla direzione positiva di un asse, le rotazioni positive sono in senso antiorario. Pertanto, quando un veicolo sta girando a sinistra, la velocità di rotazione del giroscopio dell'asse z dovrebbe essere un valore positivo.

Sensori di base

I tipi di sensori di base prendono il nome dai sensori fisici che rappresentano. Questi sensori trasmettono i dati da un singolo sensore fisico (al contrario dei sensori compositi che generano dati da altri sensori). Esempi di tipi di sensori di base includono:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

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

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

  • Un chip giroscopio valutato per avere un intervallo di polarizzazione di 1 grado / sec.
    • Dopo aver applicato la calibrazione di fabbrica, la compensazione della temperatura e la compensazione della polarizzazione, la polarizzazione effettiva del sensore Android verrà ridotta, fino a quando la polarizzazione sarà inferiore a 0,01 gradi / sec.
    • In questa situazione, diciamo che il sensore Android ha una polarizzazione inferiore a 0,01 gradi / sec, anche se la scheda tecnica del sensore sottostante diceva 1 grado / sec.
  • Un barometro con un consumo di energia di 100 uW.
    • Poiché i dati generati devono essere trasportati dal chip al SoC, il costo effettivo dell'energia per raccogliere i dati dal sensore Android del barometro potrebbe essere molto più elevato, ad esempio 1000 uW.
    • In questa situazione, diciamo che il sensore Android ha un consumo di energia di 1000 uW, anche se il consumo di energia misurato sui cavi del chip del barometro è 100uW.
  • Un magnetometro che consuma 100uW quando calibrato, ma consuma di più durante la calibrazione.
    • La sua routine di calibrazione potrebbe richiedere l'attivazione del giroscopio, il consumo di 5000 uW e l'esecuzione di un algoritmo, che costa altri 900 uW.
    • In questa situazione, diciamo che il consumo massimo di energia del sensore (magnetometro) Android è di 6000 uW.
    • In questo caso, il consumo medio di energia è la misura più utile ed è ciò che viene riportato nelle caratteristiche statiche del sensore attraverso l'HAL.

Accelerometro

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) restituisce un sensore di non sveglia

Un sensore 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 è riportata nei campi x, ye z dell'accelerazione sensor_event_t..

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) dovrebbe essere vicina a 0 in caduta libera.
  • Quando il dispositivo si trova su un tavolo e viene spinto sul lato sinistro verso destra, il valore di accelerazione x è positivo.
  • Quando il dispositivo si trova su un tavolo, il valore di accelerazione lungo z è +9,81 alo, che corrisponde all'accelerazione del dispositivo (0 m / s ^ 2) meno la forza di gravità (-9,81 m / s ^ 2).
  • Quando il dispositivo si trova su un tavolo e viene spinto verso il cielo, 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 sono calibrate usando:

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

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

L'accelerometro segnala anche quanto si aspetta che le sue letture siano tramite sensors_event_t.acceleration.status . Vedere le SensorManager SENSOR_STATUS_* per ulteriori informazioni sui possibili valori per questo campo.

Temperatura ambiente

Modalità di reporting: in modifica

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) restituisce un sensore di non riattivazione

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

Sensore di campo magnetico

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) restituisce un sensore di non riattivazione

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

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

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

Il magnetometro riporta anche quanto si aspetta che le sue letture siano tramite sensors_event_t.magnetic.status . Vedere le SensorManager SENSOR_STATUS_* per ulteriori informazioni sui possibili valori per questo campo.

Le letture sono calibrate usando:

  • Compensazione della temperatura
  • Taratura su ferro dolce di fabbrica (o online)
  • Calibrazione online del ferro duro

Giroscopio

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) restituisce un sensore di non riattivazione

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

La rotazione è positiva in senso antiorario (regola della mano destra). Cioè, un osservatore che guarda da una posizione positiva sull'asse x, yo z su un dispositivo posizionato sull'origine segnalerebbe una rotazione positiva se il dispositivo sembrava ruotare in senso antiorario. Si noti che questa è la definizione matematica standard di rotazione positiva e non concorda con la definizione aerospaziale di rollio.

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

Le letture sono calibrate usando:

  • Compensazione della temperatura
  • Compensazione della bilancia di fabbrica (o online)
  • Calibrazione di polarizzazione online (per rimuovere la deriva)

Il giroscopio riporta anche la precisione con cui si aspetta che le sue letture vengano sensors_event_t.gyro.status da sensors_event_t.gyro.status . Vedere le SensorManager SENSOR_STATUS_* per ulteriori informazioni sui possibili valori per questo campo.

Il giroscopio non può essere emulato in base a magnetometri e accelerometri, in quanto ciò avrebbe una consistenza e una reattività locali ridotte. Deve essere basato su un normale chip giroscopio.

Frequenza del battito cardiaco

Modalità di reporting: in modifica

getDefaultSensor(SENSOR_TYPE_HEART_RATE) restituisce un sensore di non riattivazione

Un sensore di frequenza cardiaca segnala la frequenza cardiaca 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 . Vedere le SensorManager SENSOR_STATUS_* per ulteriori informazioni sui possibili valori per questo campo. In particolare, alla prima attivazione, a meno che non sia noto che il dispositivo non si trova sul 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 non vengono generati più velocemente di ogni periodo di sampling_period .

sensor_t.requiredPermission è sempre SENSOR_PERMISSION_BODY_SENSORS .

Luce

Modalità di reporting: in modifica

getDefaultSensor(SENSOR_TYPE_LIGHT) restituisce un sensore di non sveglia

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

La misurazione è riportata in sensors_event_t.light .

Prossimità

Modalità di reporting: in modifica

Generalmente definito come sensore di sveglia

getDefaultSensor(SENSOR_TYPE_PROXIMITY) restituisce un sensore di riattivazione

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

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

La misurazione è riportata in centimetri in sensors_event_t.distance . Si noti che alcuni sensori di prossimità supportano solo una misurazione binaria "vicino" o "lontano". In questo caso, il sensore riporta il suo 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) riporta la pressione atmosferica in ectopascal (hPa).

Le letture sono calibrate usando

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

Il barometro viene spesso utilizzato per stimare i cambiamenti di quota. Per stimare l'elevazione assoluta, la pressione a livello del mare (che varia in base alle condizioni meteorologiche) deve essere utilizzata come riferimento.

Umidità relativa

Modalità di reporting: in modifica

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) restituisce un sensore di non riattivazione

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

Tipi di sensori compositi

Un sensore composito genera dati elaborando e / o fondendo i dati da uno o più sensori fisici. (Qualsiasi sensore che non è un sensore di base è chiamato sensore composito.) Esempi di sensori compositi includono:

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

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 forniscono un'esperienza utente scadente.

Tipo di sensore Categoria Sensori fisici sottostanti Modalità di segnalazione

Vettore di rotazione del gioco

Atteggiamento

Accelerometro, giroscopio, NON DEVE USARE il magnetometro

Continuo

Vettore di rotazione geomagnetica Sensore a bassa potenza

Atteggiamento

Accelerometro, magnetometro, NON DEVE USARE il giroscopio

Continuo

Gesto gesto Sensore a bassa potenza

Interazione

Non definito

Un colpo

Gravità

Atteggiamento

Accelerometro, giroscopio

Continuo

Giroscopio non calibrato

Non calibrato

Giroscopio

Continuo

Accelerazione lineare

Attività

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

Continuo

Campo magnetico non calibrato

Non calibrato

Magnetometro

Continuo

Orientamento (obsoleto)

Atteggiamento

Accelerometro, magnetometro, giroscopio (se presente)

Continuo

Prendi il gesto Sensore a bassa potenza

Interazione

Non definito

Un colpo

Vettore di rotazione

Atteggiamento

Accelerometro, magnetometro, giroscopio

Continuo

Movimento significativo Sensore a bassa potenza

Attività

Accelerometro (o altro purché a bassissima potenza)

Un colpo

Contapassi Sensore a bassa potenza

Attività

Accelerometro

On-change

Rilevatore di passi Sensore a bassa potenza

Attività

Accelerometro

Speciale

Rivelatore di inclinazione Sensore a bassa potenza

Attività

Accelerometro

Speciale

Gesto di sveglia Sensore a bassa potenza

Interazione

Non definito

Un colpo

Sensore a bassa potenza = Sensore a bassa potenza

Sensori compositi di attività

Accelerazione lineare

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

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) restituisce un sensore di non riattivazione

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

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

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

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

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

Movimento significativo

Sensore fisico sottostante: accelerometro (o altro fino a bassa potenza)

Modalità di segnalazione: One-shot

Bassa potenza

Implementare solo la versione di sveglia 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 portare a un cambiamento nella posizione dell'utente.

Esempi di tali movimenti significativi sono:

  • Camminare o andare in bicicletta
  • Seduto su un'auto, un pullman o un treno in movimento

Esempi di situazioni che non attivano movimenti significativi:

  • Telefono in tasca e la persona non si muove
  • Il telefono è su un tavolo e il tavolo trema leggermente a causa del traffico nelle vicinanze o della lavatrice

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

Questo sensore deve essere a bassa potenza. Fa un compromesso per il consumo di energia che può comportare una piccola quantità di falsi negativi. Questo viene fatto per alcuni motivi:

  • L'obiettivo di questo sensore è risparmiare energia.
  • Attivare un evento quando l'utente non si muove (falso positivo) è costoso in termini di potenza, quindi dovrebbe essere evitato.
  • Non è possibile attivare un evento quando l'utente si sta spostando (falso negativo) purché non venga ripetuto ripetutamente. Se l'utente ha camminato per 10 secondi, non è possibile attivare un evento entro quei 10 secondi.

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

Rilevatore di passi

Sensore fisico sottostante: accelerometro (+ eventualmente altri fino a bassa potenza)

Modalità di reporting: speciale (un evento per passaggio effettuato)

Bassa potenza

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) restituisce un sensore di non riattivazione

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

Il timestamp dell'evento sensors_event_t.timestamp corrisponde a quando il piede ha colpito il terreno, generando un'alta variazione di accelerazione.

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

Questo sensore deve essere a bassa potenza. Cioè, se non è possibile eseguire il rilevamento di passi nell'hardware, questo sensore non dovrebbe essere definito. In particolare, quando il rilevatore di passi è attivato e l'accelerometro non lo è, solo i passaggi dovrebbero innescare interruzioni (non tutte le letture dell'accelerometro).

sampling_period_ns non ha alcun impatto sui rilevatori di passi.

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

Contapassi

Sensore fisico sottostante: accelerometro (+ eventualmente altri fino a bassa potenza)

Modalità di segnalazione: in modifica

A bassa potenza

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) restituisce un sensore di non riattivazione

Un contapassi riporta il numero di passaggi eseguiti dall'utente dall'ultimo riavvio mentre è attivato.

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.

Vedere il tipo di sensore del rilevatore di passi per il significato del tempo di un passo.

Rispetto al rilevatore di gradini, il contapassi può avere una latenza più elevata (fino a 10 secondi). Grazie a questa latenza, questo sensore ha un'alta precisione; il conteggio dei passi dopo un giorno intero di misure dovrebbe essere compreso entro il 10% del conteggio dei passi effettivo. Sia il rilevatore di gradini sia il contapassi rilevano quando l'utente sta camminando, correndo e salendo le scale. Non devono attivarsi quando l'utente è in bicicletta, guida o in altri veicoli.

L'hardware deve garantire che il conteggio dei passi interno non trabocchi mai. La dimensione minima del contatore interno dell'hardware deve essere di 16 bit. In caso di overflow imminente (al massimo ogni ~ 2 ^ 16 passaggi), è possibile riattivare il SoC in modo che il conducente possa eseguire la manutenzione del contatore.

Come indicato in Interazione , mentre questo sensore funziona, non deve interrompere nessun altro sensore, in particolare l'accelerometro, che potrebbe benissimo essere in uso.

Se un particolare dispositivo non è in grado di supportare queste modalità operative, questo tipo di sensore non deve essere segnalato dall'HAL. Cioè, non è accettabile "emulare" questo sensore nell'HAL.

Questo sensore deve essere a bassa potenza. Cioè, se il rilevamento del passo non può essere eseguito nell'hardware, questo sensore non dovrebbe essere definito. In particolare, quando il contapassi è attivato e l'accelerometro non lo è, solo i passaggi dovrebbero attivare gli interrupt (non i dati dell'accelerometro).

Rivelatore di inclinazione

Sensore fisico sottostante: accelerometro (+ eventualmente altri fino a bassa potenza)

Modalità di segnalazione: speciale

A bassa potenza

Implementare solo la versione di sveglia 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.
  • Attiva quando l' angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees

Le grandi accelerazioni senza una modifica dell'orientamento del telefono non dovrebbero attivare un evento di inclinazione. Ad esempio, una curva brusca o una forte accelerazione durante la guida di un'auto non dovrebbero innescare un evento di inclinazione, anche se l'angolo dell'accelerazione media potrebbe variare di oltre 35 gradi. In genere, questo sensore è implementato con l'aiuto di un solo accelerometro. È possibile utilizzare anche altri sensori se non aumentano significativamente il consumo di energia. Questo è un sensore a bassa potenza che dovrebbe consentire al SoC di entrare in modalità di sospensione. Non emulare questo sensore nell'HAL. Ogni evento del sensore riporta 1 in sensors_event_t.data[0] .

Sensori compositi di atteggiamento

Vettore di rotazione

Sensori fisici sottostanti: accelerometro, magnetometro e giroscopio

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) restituisce un sensore di non riattivazione

Un sensore vettoriale di rotazione riporta l'orientamento del dispositivo rispetto al riquadro delle coordinate est-nord-su. Di solito è ottenuto dall'integrazione delle letture dell'accelerometro, del giroscopio e del magnetometro. Il sistema di coordinate Est-Nord-Alto è definito come una base ortonormale diretta in cui:

  • X punta ad est ed è tangenziale al suolo.
  • Y punta a nord ed è tangenziale al suolo.
  • Z punta verso il cielo ed è perpendicolare al suolo.

L'orientamento del telefono è rappresentato dalla rotazione necessaria per allineare le coordinate Est-Nord-Su con le coordinate del telefono. Cioè, applicare la rotazione al riquadro del mondo (X, Y, Z) li allineare con le coordinate del telefono (x, y, z).

La rotazione può essere vista come la rotazione del telefono di un angolo theta attorno ad un asse rot_axis per passare dall'orientamento del dispositivo di riferimento (allineato est-nord-su) all'orientamento attuale del dispositivo. La rotazione è codificata come quattro componenti x, y, z, w senza unità di un quaternione di unità:

  • 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, ye z dell'asse rot_axis sono le coordinate est-nord-su di un vettore di lunghezza unitaria che rappresenta l'asse di rotazione
  • theta è l'angolo di rotazione

Il quaternione è un'unità quaternione: deve essere di norma 1 . In caso contrario, si verificherà un comportamento errato del client.

Inoltre, questo sensore riporta una precisione di rotta stimata:

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

L'errore di intestazione deve essere inferiore alla estimated_accuracy 95% delle volte. Questo sensore deve utilizzare un giroscopio come input per la modifica dell'orientamento principale.

Questo sensore utilizza anche l'ingresso 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 (senza magnetometro)

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) restituisce un sensore di non 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 invece a qualche altro riferimento. Tale riferimento può spostarsi dello stesso ordine di grandezza del giroscopio che si sposta sull'asse Z.

Vedere il sensore vettoriale di rotazione per i dettagli su come impostare sensors_event_t.data[0-3] . Questo sensore non segnala una precisione di prua stimata: sensors_event_t.data[4] è riservato e deve essere impostato su 0 .

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

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

Gravità

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

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_GRAVITY) restituisce un sensore non di riattivazione

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

I componenti del vettore di gravità sono riportati in m / s ^ 2 nei campi x, ye z dell'accelerazione sensors_event_t.acceleration ..

Quando il dispositivo è a riposo, l'uscita del sensore di gravità dovrebbe essere identica a quella dell'accelerometro. Sulla Terra, la magnitudine è di circa 9,8 m / s ^ 2.

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

Se il dispositivo non possiede 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 (senza giroscopio)

Modalità di segnalazione: continua

A bassa potenza

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) restituisce un sensore di non riattivazione

Un vettore di rotazione geomagnetica è simile a un sensore di 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'ingresso del giroscopio non può essere utilizzato da questo sensore.

Vedere il sensore vettoriale di rotazione per i dettagli su come impostare sensors_event_t.data[0-4] .

Proprio come per il sensore vettoriale di rotazione, l'errore di rotta deve essere inferiore alla precisione stimata ( sensors_event_t.data[4] ) il 95% delle volte.

Questo sensore deve essere a bassa potenza, quindi deve essere implementato nell'hardware.

Orientamento (obsoleto)

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

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_ORIENTATION) restituisce un sensore non di riattivazione

Nota: si tratta di un tipo di sensore meno recente che è stato deprecato in Android SDK. È stato sostituito dal sensore del vettore di rotazione, che è più chiaramente definito. Utilizzare il sensore vettoriale di rotazione sopra il sensore di orientamento quando possibile.

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

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

Per motivi storici, l'angolo di rollio è positivo in senso orario. (Matematicamente parlando, dovrebbe essere positivo in senso antiorario):

Rappresentazione dell'orientamento rispetto a un dispositivo

Figura 3. Orientamento relativo a un dispositivo

Questa definizione è diversa da imbardata, beccheggio e rollio utilizzati nell'aviazione in cui l'asse X si trova lungo il lato lungo del piano (dalla coda al naso).

Il sensore di orientamento riporta anche quanto si aspetta che le sue letture siano tramite sensors_event_t.orientation.status . Vedere le SensorManager SENSOR_STATUS_* per ulteriori informazioni sui possibili valori per questo campo.

Sensori non calibrati

I sensori non calibrati forniscono risultati più grezzi e possono includere alcuni pregiudizi ma contengono anche meno "salti" dalle correzioni applicate attraverso la calibrazione. Alcune app potrebbero preferire questi risultati non calibrati come più fluidi e affidabili. Ad esempio, se un'app sta tentando di condurre la propria fusione del sensore, l'introduzione delle 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 di non sveglia

Un sensore accelerometro non calibrato segnala l'accelerazione del dispositivo lungo i tre assi del sensore senza alcuna correzione di polarizzazione (la polarizzazione di fabbrica e la compensazione della temperatura vengono applicate alle misurazioni non calibrate), insieme a una stima di polarizzazione. 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 : polarizzazione stimata lungo l'asse Z.

Giroscopio non calibrato

Sensore fisico sottostante: giroscopio

Modalità di segnalazione: continua

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) restituisce un sensore di non sveglia

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

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

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

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

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

La calibrazione di fabbrica e la compensazione della temperatura devono essere applicate alle misurazioni. Inoltre, è necessario implementare la stima della deriva del giroscopio in modo da poter riportare 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 ed 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 di non riattivazione

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

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

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

Il magnetometro non calibrato consente agli algoritmi di livello superiore di gestire una stima del ferro duro cattivo. I x_bias , y_bias e z_bias dovrebbero saltare non appena cambia la stima del ferro duro 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, è necessario implementare la stima del ferro duro in modo da poter riportare stime ragionevoli in x_bias , y_bias e z_bias . Se l'implementazione non è in grado di stimare il bias, questo sensore non deve essere implementato.

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

Sensori compositi di interazione

Alcuni sensori vengono utilizzati principalmente per rilevare le interazioni con l'utente. We don't define how those sensors must be implemented, but they must be low power and it's the responsibility of the device manufacturer to verify their quality in terms of user experience.

Wake up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) returns a wake-up sensor

A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7.

Each sensor event reports 1 in sensors_event_t.data[0] .

Pick up gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) returns a wake-up sensor

A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).

Each sensor event reports 1 in sensors_event_t.data[0] .

Glance gesture

Underlying physical sensors: Undefined (anything low power)

Reporting-mode: One-shot

Low-power

Implement only the wake-up version of this sensor.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) returns a wake-up sensor

A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.

This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1 in sensors_event_t.data[0] .