Sensör türleri

Bu bölümde sensör eksenleri, temel sensörler ve bileşik sensörler (aktivite, tutum, kalibre edilmemiş ve etkileşim) açıklanmaktadır.

Sensör eksenleri

Birçok sensörden gelen sensör olay değerleri, cihaza göre statik olan belirli bir çerçevede ifade edilir.

Mobil cihaz eksenleri

Sensör API'si yalnızca ekranın doğal yönüne göredir (cihazın ekran yönü değiştiğinde eksenler değiştirilmez.

Mobil cihazlar için sensör API'sinin koordinat sistemi

Şekil 1. Sensor API tarafından kullanılan koordinat sistemi (mobil cihaza göre)

Otomotiv eksenleri

Android Automotive uygulamalarında eksenler araç gövde çerçevesine göre tanımlanır. Araç referans çerçevesinin orijini, arka aksın merkezidir. Araç referans çerçevesi, şu şekilde yönlendirilir:

  • X ekseni sağa işaret eder ve aracın simetri düzlemine dik olan yatay bir düzlemdedir.
  • Y ekseni ileriyi gösterir ve yatay bir düzlemdedir.
Otomotiv cihazları için sensör API'sinin koordinat sistemi

Şekil 2. Sensor API tarafından kullanılan koordinat sistemi (bir otomotiv cihazına göre)

Araç referans çerçevesi, sağ elini kullanan bir koordinat sistemidir. Bu nedenle, Z ekseni yukarıyı gösterir.

Referans çerçevesinin Z ekseni yerçekimine göre hizalanmıştır, bu da X ekseni ve Y ekseninin her ikisinin de yatay olduğu anlamına gelir. Sonuç olarak, Y ekseni her zaman ön akstan geçmeyebilir.

Baz sensörleri

Baz sensör türleri, temsil ettikleri fiziksel sensörlerin adını alır. Bu sensörler, verileri tek bir fiziksel sensörden iletir (diğer sensörlerden veri üreten kompozit sensörlerin aksine). Baz sensör tiplerinin örnekleri şunları içerir:

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

Ancak, temel sensörler, temel fiziksel sensörlerine eşit değildir ve bunlarla karıştırılmamalıdır. Temel sensörden gelen veriler, fiziksel sensörün ham çıktısı değildir , çünkü düzeltmeler (önyargı telafisi ve sıcaklık telafisi gibi) uygulanır.

Örneğin, aşağıdaki kullanım durumlarında bir temel sensörün özellikleri, temeldeki fiziksel sensörünün özelliklerinden farklı olabilir:

  • 1 derece/sn sapma aralığına sahip olarak derecelendirilen bir jiroskop çipi.
    • Fabrika kalibrasyonu, sıcaklık telafisi ve önyargı telafisi uygulandıktan sonra, Android sensörünün gerçek önyargısı azaltılacaktır, önyargının 0,01 derece/sn altında olması garanti edilen bir noktaya kadar olabilir.
    • Bu durumda, altta yatan sensörün veri sayfası 1 derece/sn demesine rağmen, Android sensörünün 0,01 derece/sn'nin altında bir önyargıya sahip olduğunu söylüyoruz.
  • 100 uW güç tüketimine sahip bir barometre.
    • Üretilen verilerin çipten SoC'ye aktarılması gerektiğinden, barometre Android sensöründen veri toplamak için gerçek güç maliyeti çok daha yüksek olabilir, örneğin 1000 uW.
    • Bu durumda barometre çip uçlarında ölçülen güç tüketimi 100uW olmasına rağmen Android sensörün 1000 uW güç tüketimine sahip olduğunu söylüyoruz.
  • Kalibre edildiğinde 100uW tüketen, ancak kalibre ederken daha fazla tüketen bir manyetometre.
    • Kalibrasyon rutini, jiroskopun etkinleştirilmesini, 5000 uW tüketilmesini ve bazı algoritmaların çalıştırılmasını gerektirebilir, bu da 900 uW daha maliyetlidir.
    • Bu durumda (manyetometre) Android sensörünün maksimum güç tüketiminin 6000 uW olduğunu söylüyoruz.
    • Bu durumda, ortalama güç tüketimi daha kullanışlı bir ölçüdür ve HAL aracılığıyla sensör statik özelliklerinde rapor edilen şeydir.

ivmeölçer

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) , uyanmayan bir sensör döndürür

Bir ivmeölçer sensörü, cihazın üç sensör ekseni boyunca ivmesini bildirir. Ölçülen ivme, hem fiziksel ivmeyi (hız değişikliği) hem de yerçekimini içerir. Ölçüm, sensor_event_t.acceleration'ın x, y ve z alanlarında raporlanır.

Tüm değerler SI birimlerindedir (m/s^2) ve cihazın ivmesini eksi üç sensör ekseni boyunca yerçekimi kuvvetini ölçer.

İşte örnekler:

  • Serbest düşüşte (x, y, z) normu 0'a yakın olmalıdır.
  • Cihaz bir masa üzerinde düz durduğunda ve sol tarafından sağa doğru itildiğinde, x ivme değeri pozitiftir.
  • Cihaz bir masa üzerinde düz durduğunda, z boyunca ivme değeri +9,81 alo'dur; bu, cihazın ivmesinden (0 m/s^2) yerçekimi kuvvetinin (-9,81 m/s^2) çıkarılmasına karşılık gelir.
  • Cihaz bir masa üzerinde düz durduğunda ve gökyüzüne doğru itildiğinde, ivme değeri +9,81'den büyüktür, bu da cihazın ivmesinden (+A m/s^2) yerçekimi kuvvetinin (-9,81 m) çıkarılmasına karşılık gelir. /s^2).

Okumalar aşağıdakiler kullanılarak kalibre edilir:

  • Sıcaklık telafisi
  • Çevrimiçi önyargı kalibrasyonu
  • Çevrimiçi terazi kalibrasyonu

Önyargı ve ölçek kalibrasyonu, akış sırasında değerlerde atlamalara neden olmaktan kaçınmak için yalnızca sensör devre dışı bırakıldığında güncellenmelidir.

İvmeölçer ayrıca, sensors_event_t.acceleration.status aracılığıyla okumalarının ne kadar doğru olmasını beklediğini de bildirir. Bu alan için olası değerler hakkında daha fazla bilgi için SensorManager SENSOR_STATUS_* sabitlerine bakın.

Ortam sıcaklığı

Raporlama modu: Değişiklik sırasında

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) , uyanmayan bir sensör döndürür

Bu sensör ortam (oda) sıcaklığını Santigrat derece cinsinden sağlar.

Manyetik alan sensörü

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) , uyanmayan bir sensör döndürür

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

Bir manyetik alan sensörü (manyetometre olarak da bilinir), üç sensör ekseni boyunca ölçüldüğü gibi ortam manyetik alanını bildirir.

Ölçüm, sensors_event_t.magnetic x, y ve z alanlarında rapor edilir ve tüm değerler mikro-Tesla (uT) cinsindendir.

Manyetometre ayrıca, sensors_event_t.magnetic.status aracılığıyla okumalarının ne kadar doğru olmasını beklediğini de bildirir. Bu alan için olası değerler hakkında daha fazla bilgi için SensorManager SENSOR_STATUS_* sabitlerine bakın.

Okumalar aşağıdakiler kullanılarak kalibre edilir:

  • Sıcaklık telafisi
  • Fabrikada (veya çevrimiçi) yumuşak demir kalibrasyonu
  • Çevrimiçi sert demir kalibrasyonu

Jiroskop

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) , uyanmayan bir sensör döndürür

Bir jiroskop sensörü, cihazın üç sensör ekseni etrafındaki dönüş hızını bildirir.

Dönme saat yönünün tersine pozitiftir (sağ el kuralı). Yani, orijine yerleştirilmiş bir cihazda x, y veya z eksenindeki bir pozitif konumdan bakan bir gözlemci, cihaz saat yönünün tersine dönüyor gibi görünüyorsa pozitif dönüş bildirecektir. Bunun pozitif dönüşün standart matematiksel tanımı olduğunu ve havacılık ve uzayda yuvarlanma tanımıyla uyuşmadığını unutmayın.

Ölçüm, sensors_event_t.gyro x, y ve z alanlarında rapor edilir ve tüm değerler radyan/saniye (rad/s) cinsindendir.

Okumalar aşağıdakiler kullanılarak kalibre edilir:

  • Sıcaklık telafisi
  • Fabrika (veya çevrimiçi) terazi telafisi
  • Çevrimiçi önyargı kalibrasyonu (sapmayı gidermek için)

Jiroskop ayrıca, sensors_event_t.gyro.status aracılığıyla okumalarının ne kadar doğru olmasını beklediğini de bildirir. Bu alan için olası değerler hakkında daha fazla bilgi için SensorManager SENSOR_STATUS_* sabitlerine bakın.

Jiroskop, manyetometrelere ve ivmeölçerlere dayalı olarak taklit edilemez, çünkü bu, yerel tutarlılığın ve tepki vermenin azalmasına neden olur. Normal bir jiroskop çipine dayanmalıdır.

Nabız

Raporlama modu: Değişiklik sırasında

getDefaultSensor(SENSOR_TYPE_HEART_RATE) , uyanmayan bir sensör döndürür

Bir kalp atış hızı sensörü, cihaza dokunan kişinin mevcut kalp atış hızını bildirir.

Dakikadaki atış (BPM) cinsinden mevcut kalp atış hızı, sensors_event_t.heart_rate.bpm içinde rapor edilir ve sensörün durumu, sensors_event_t.heart_rate.status içinde rapor edilir. Bu alan için olası değerler hakkında daha fazla bilgi için SensorManager SENSOR_STATUS_* sabitlerine bakın. Özellikle ilk aktivasyon üzerine cihazın gövde üzerinde olmadığı bilinmediği sürece ilk olayın durum alanı SENSOR_STATUS_UNRELIABLE olarak ayarlanmalıdır. Bu sensör değişimde olduğundan, olaylar yalnızca son olaydan bu yana heart_rate.bpm veya heart_rate.status değiştiğinde oluşturulur. Olaylar, her sampling_period daha hızlı oluşturulmaz.

sensor_t.requiredPermission her zaman SENSOR_PERMISSION_BODY_SENSORS .

Işık

Raporlama modu: Değişiklik sırasında

getDefaultSensor(SENSOR_TYPE_LIGHT) , uyanmayan bir sensör döndürür

Bir ışık sensörü, mevcut aydınlatmayı SI lüks birimlerinde bildirir.

Ölçüm, sensors_event_t.light içinde rapor edilir.

yakınlık

Raporlama modu: Değişiklik sırasında

Genellikle uyandırma sensörü olarak tanımlanır

getDefaultSensor(SENSOR_TYPE_PROXIMITY) bir uyandırma sensörü döndürür

Bir yakınlık sensörü, sensörden en yakın görünen yüzeye olan mesafeyi bildirir.

Android 4.4'e kadar, yakınlık sensörleri her zaman uyandırma sensörleriydi ve yakınlıkta bir değişiklik algıladığında SoC'yi uyandırıyordu. Android 4.4'ten sonra, telefon görüşmeleri yaparken ekranı açıp kapatmak için kullanılan bu sensörün uyandırma sürümünü önce uygulamanızı öneririz.

Ölçüm, sensors_event_t.distance içinde santimetre cinsinden rapor edilir. Bazı yakınlık sensörlerinin yalnızca ikili "yakın" veya "uzak" ölçümü desteklediğini unutmayın. Bu durumda, sensör sensor_t.maxRange değerini "uzak" durumda ve "yakın" durumda sensor_t.maxRange değerinden küçük bir değer bildirir.

Baskı yapmak

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_PRESSURE) , uyanmayan bir sensör döndürür

Bir basınç sensörü (barometre olarak da bilinir), atmosfer basıncını hektopaskal (hPa) cinsinden bildirir.

Okumalar kullanılarak kalibre edilir

  • Sıcaklık telafisi
  • Fabrika önyargı kalibrasyonu
  • Fabrika terazisi kalibrasyonu

Barometre genellikle yükseklik değişikliklerini tahmin etmek için kullanılır. Mutlak yüksekliği tahmin etmek için deniz seviyesi basıncı (hava durumuna göre değişen) referans olarak kullanılmalıdır.

Bağıl nem

Raporlama modu: Değişiklik sırasında

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) , uyanmayan bir sensör döndürür

Bir bağıl nem sensörü, bağıl ortam hava nemini ölçer ve yüzde olarak bir değer döndürür.

Kompozit sensör tipleri

Kompozit bir sensör, bir veya birkaç fiziksel sensörden gelen verileri işleyerek ve/veya birleştirerek veri üretir. (Temel sensör olmayan herhangi bir sensöre bileşik sensör denir.) Kompozit sensör örnekleri şunları içerir:

  • Adım dedektörü ve önemli hareket , genellikle bir ivmeölçeri temel alır, ancak güç tüketimi ve doğruluğu kabul edilebilir olsaydı, diğer sensörlere de dayanabilirdi.
  • Bir ivmeölçer ve bir jiroskopa dayalı oyun döndürme vektörü .
  • Jiroskop temel sensörüne benzeyen, ancak sapma kalibrasyonunun ölçümde düzeltilmek yerine ayrı olarak bildirildiği kalibre edilmemiş jiroskop.

Baz sensörlerde olduğu gibi, kompozit sensörlerin özellikleri de nihai verilerinin özelliklerinden gelir. Örneğin, bir oyun döndürme vektörünün güç tüketimi muhtemelen ivmeölçer çipinin, jiroskop çipinin, verileri işleyen çipin ve verileri taşıyan otobüslerin güç tüketimlerinin toplamına eşittir. Başka bir örnek olarak, bir oyun döndürme vektörünün kayması, fiziksel sensör özellikleri kadar kalibrasyon algoritmasının kalitesine de bağlıdır.

Aşağıdaki tablo mevcut kompozit sensör tiplerini listeler. Her kompozit sensör, bir veya birkaç fiziksel sensörden gelen verilere dayanır. Kötü bir kullanıcı deneyimi sağladıklarından, sonuçları yaklaşık olarak belirlemek için temeldeki diğer fiziksel sensörleri seçmekten kaçının.

Sensör tipi Kategori Temel fiziksel sensörler Raporlama modu

Oyun döndürme vektörü

Davranış

İvmeölçer, jiroskop, manyetometre KULLANILMAMALIDIR

Sürekli

Jeomanyetik döndürme vektörü Düşük güç sensörü

Davranış

İvmeölçer, manyetometre, jiroskop KULLANMAMALIDIR

Sürekli

bakış hareketi Düşük güç sensörü

Etkileşim

Tanımsız

Tek atış

Yerçekimi

Davranış

İvmeölçer, jiroskop

Sürekli

jiroskop kalibre edilmemiş

kalibre edilmemiş

Jiroskop

Sürekli

Doğrusal ivme

Aktivite

İvmeölçer, jiroskop (varsa) veya manyetometre (jiro yoksa)

Sürekli

Kalibre edilmemiş manyetik alan

kalibre edilmemiş

manyetometre

Sürekli

Yönlendirme (kullanımdan kaldırıldı)

Davranış

İvmeölçer, manyetometre, jiroskop (varsa)

Sürekli

Al jest Düşük güç sensörü

Etkileşim

Tanımsız

Tek atış

döndürme vektörü

Davranış

İvmeölçer, manyetometre, jiroskop

Sürekli

önemli hareket Düşük güç sensörü

Aktivite

İvmeölçer (veya çok düşük güç olduğu sürece başka bir şey)

Tek atış

Adım sayacı Düşük güç sensörü

Aktivite

ivmeölçer

değiştirildiğinde

Adım dedektörü Düşük güç sensörü

Aktivite

ivmeölçer

Özel

eğim dedektörü Düşük güç sensörü

Aktivite

ivmeölçer

Özel

Uyandırma hareketi Düşük güç sensörü

Etkileşim

Tanımsız

Tek atış

Düşük güç sensörü = Düşük güç sensörü

Aktivite kompozit sensörleri

Doğrusal ivme

Temel fiziksel sensörler: İvmeölçer ve (varsa) jiroskop (veya jiroskop yoksa manyetometre)

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) , uyanmayan bir sensör döndürür

Doğrusal bir ivme sensörü, yerçekimi hariç, sensör çerçevesindeki cihazın doğrusal ivmesini bildirir.

Çıktı kavramsal olarak: ivmeölçerin çıktısı eksi yerçekimi sensörünün çıktısı. sensors_event_t.acceleration x, y ve z alanlarında m/s^2 cinsinden rapor edilir.

Cihaz hareketsizken tüm eksenlerdeki okumalar 0'a yakın olmalıdır.

Cihaz bir jiroskopa sahipse, lineer ivme sensörü jiroskopu ve ivmeölçeri girdi olarak kullanmalıdır.

Cihazda jiroskop yoksa lineer hızlanma sensörü giriş olarak ivmeölçer ve manyetometreyi kullanmalıdır.

önemli hareket

Temel fiziksel sensör: İvmeölçer (veya düşük güç olduğu sürece başka bir)

Raporlama modu: Tek seferlik

Düşük güç

Bu sensörün yalnızca uyandırma sürümünü uygulayın.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) bir uyandırma sensörü döndürür

Önemli bir hareket detektörü, önemli bir hareket algılandığında tetiklenir: kullanıcı konumunda bir değişikliğe yol açabilecek bir hareket.

Bu tür önemli hareketlere örnekler:

  • Yürümek veya bisiklete binmek
  • Hareket eden bir arabada, vagonda veya trende oturmak

Önemli bir hareketi tetiklemeyen durumlara örnekler:

  • Telefon cebinde ve kişi hareket etmiyor
  • Telefon bir masanın üzerinde ve yakındaki trafik veya çamaşır makinesi nedeniyle masa biraz sallanıyor

Yüksek seviyede, konum belirlemenin güç tüketimini azaltmak için önemli hareket dedektörü kullanılır. Lokalizasyon algoritmaları cihazın statik olduğunu algıladığında, düşük güç moduna geçebilirler ve burada kullanıcı konum değiştirirken cihazı uyandırmak için önemli bir harekete güvenirler.

Bu sensör düşük güçte olmalıdır. Az miktarda yanlış negatif sonuç verebilecek güç tüketimi için bir ödünleşim yapar. Bu birkaç nedenden dolayı yapılır:

  • Bu sensörün amacı güç tasarrufu yapmaktır.
  • Kullanıcı hareket etmiyorken bir olayı tetiklemek (yanlış pozitif) güç açısından maliyetlidir, bu nedenle bundan kaçınılmalıdır.
  • Kullanıcı hareket ederken bir olayın tetiklenmemesi (yanlış negatif), tekrar tekrar yapılmadığı sürece kabul edilebilir. Kullanıcı 10 saniyedir yürüyorsa, bu 10 saniye içinde bir olayı tetiklememek kabul edilemez.

Her sensör olayı, sensors_event_t.data[0] içinde 1 rapor eder.

Adım dedektörü

Temel fiziksel sensör: İvmeölçer (+ düşük güç olduğu sürece muhtemelen diğerleri)

Raporlama modu: Özel (atılan adım başına bir olay)

Düşük güç

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) , uyanmayan bir sensör döndürür

Bir adım dedektörü, kullanıcı tarafından her adım atıldığında bir olay üretir.

sensors_event_t.timestamp olayının zaman damgası, ayağın yere çarptığı zamana karşılık gelir ve hızlanmada yüksek bir değişiklik oluşturur.

Adım sayıcı ile karşılaştırıldığında, adım dedektörü daha düşük bir gecikmeye (iki saniyeden az) sahip olmalıdır. Hem adım dedektörü hem de adım sayacı, kullanıcının ne zaman yürüdüğünü, koştuğunu ve merdivenlerden yukarı çıktığını algılar. Kullanıcı bisiklet sürerken, araba kullanırken veya başka araçlardayken tetiklenmemelidir.

Bu sensör düşük güçte olmalıdır. Yani donanımda adım tespiti yapılamıyorsa bu sensör tanımlanmamalıdır. Özellikle, adım dedektörü etkinleştirildiğinde ve ivmeölçer olmadığında, yalnızca adımlar kesintileri tetiklemelidir (her ivmeölçer okuması değil).

sampling_period_ns adım algılayıcılar üzerinde hiçbir etkiye sahip değildir.

Her sensör olayı, sensors_event_t.data[0] içinde 1 rapor eder.

Adım sayacı

Temel fiziksel sensör: İvmeölçer (+ düşük güç olduğu sürece muhtemelen diğerleri)

Raporlama modu: Değişiklik sırasında

Düşük güç

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) , uyanmayan bir sensör döndürür

Bir adım sayacı, etkinleştirildiğinde son yeniden başlatmadan bu yana kullanıcı tarafından atılan adım sayısını bildirir.

Ölçüm, uint64_t sensors_event_t.step_counter rapor edilir ve yalnızca sistem yeniden başlatıldığında sıfıra sıfırlanır.

Olayın zaman damgası, o olay için son adımın atıldığı zamana ayarlanır.

Bir adımın zamanının anlamı için Adım dedektörü sensör tipine bakın.

Adım dedektörü ile karşılaştırıldığında, adım sayacı daha yüksek bir gecikme süresine (10 saniyeye kadar) sahip olabilir. Bu gecikme sayesinde bu sensör yüksek bir doğruluğa sahiptir; tam bir günlük ölçümden sonraki adım sayısı, gerçek adım sayısının %10'u dahilinde olmalıdır. Hem adım dedektörü hem de adım sayacı, kullanıcının ne zaman yürüdüğünü, koştuğunu ve merdivenlerden yukarı çıktığını algılar. Kullanıcı bisiklet sürerken, araba kullanırken veya başka araçlardayken tetiklenmemelidir.

Donanım, dahili adım sayısının asla taşmamasını sağlamalıdır. Donanımın dahili sayacının minimum boyutu 16 bit olacaktır. Ani taşma durumunda (en fazla ~2^16 adımda bir), SoC uyandırılabilir, böylece sürücü sayaç bakımını yapabilir.

Etkileşim bölümünde belirtildiği gibi, bu sensör çalışırken diğer sensörleri, özellikle de kullanımda olabilecek ivmeölçeri bozmamalıdır.

Belirli bir cihaz bu çalışma modlarını desteklemiyorsa, bu sensör tipi HAL tarafından bildirilmemelidir. Yani, bu sensörü HAL'de "taklit etmek" kabul edilemez.

Bu sensör düşük güçte olmalıdır. Yani donanımda adım tespiti yapılamıyorsa bu sensör tanımlanmamalıdır. Özellikle, adım sayacı etkinleştirildiğinde ve ivmeölçer olmadığında, kesintileri yalnızca adımlar tetiklemelidir (ivmeölçer verileri değil).

eğim dedektörü

Temel fiziksel sensör: İvmeölçer (+ düşük güç olduğu sürece muhtemelen diğerleri)

Raporlama modu: Özel

Düşük güç

Bu sensörün yalnızca uyandırma sürümünü uygulayın.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) bir uyandırma sensörü döndürür

Bir eğim dedektörü, her eğim olayı algılandığında bir olay oluşturur.

Bir eğim olayı, etkinleştirme veya sensör tarafından oluşturulan son olaydan bu yana en az 35 derece değişen 2 saniyelik pencere ortalama yerçekiminin yönü ile tanımlanır. İşte algoritma:

  • reference_estimated_gravity = aktivasyondan sonraki ilk saniyedeki ivmeölçer ölçümlerinin ortalaması veya son eğim olayı oluşturulduğunda tahmini yerçekimi.
  • current_estimated_gravity = son 2 saniyedeki ivmeölçer ölçümlerinin ortalaması.
  • angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees olduğunda tetikle

Telefon yönlendirmesini değiştirmeden büyük hızlanmalar bir tilt olayını tetiklememelidir. Örneğin, bir arabayı sürerken keskin bir dönüş veya güçlü bir hızlanma, ortalama hızlanma açısı 35 dereceden fazla değişse bile bir eğim olayını tetiklememelidir. Tipik olarak, bu sensör yalnızca bir ivmeölçer yardımıyla uygulanır. Güç tüketimini önemli ölçüde artırmazlarsa diğer sensörler de kullanılabilir. Bu, SoC'nin askıya alma moduna geçmesine izin vermesi gereken düşük güçlü bir sensördür. Bu sensörü HAL'de taklit etmeyin. Her sensör olayı, sensors_event_t.data[0] içinde 1 rapor eder.

Tutum bileşik sensörleri

döndürme vektörü

Temel fiziksel sensörler: İvmeölçer, manyetometre ve jiroskop

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) uyanmayan bir sensör döndürür

Bir dönüş vektörü sensörü, cihazın Doğu-Kuzey-Yukarı koordinat çerçevesine göre yönünü bildirir. Genellikle ivmeölçer, jiroskop ve manyetometre okumalarının entegrasyonu ile elde edilir. Doğu-Kuzey-Yukarı koordinat sistemi, aşağıdaki durumlarda doğrudan ortonormal bir temel olarak tanımlanır:

  • X doğuyu gösterir ve yere teğettir.
  • Y kuzeyi gösterir ve yere teğettir.
  • Z gökyüzünü işaret eder ve yere diktir.

Telefonun yönü, Doğu-Kuzey-Yukarı koordinatlarını telefonun koordinatlarıyla hizalamak için gereken dönüşle temsil edilir. Yani, döndürmeyi dünya çerçevesine (X,Y,Z) uygulamak, onları telefon koordinatlarıyla (x,y,z) hizalayacaktır.

Döndürme, referans (Doğu-Kuzey-Yukarı hizalı) cihaz yöneliminden mevcut cihaz yönelimine gitmek için telefonu bir eksen rot_axis etrafında bir teta açısı kadar döndürmek olarak görülebilir. Dönme, bir birim kuaternyonun dört birimsiz x, y, z, w bileşeni olarak kodlanmıştır:

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

Neresi:

  • rot_axis x, y ve z alanları, dönme eksenini temsil eden bir birim uzunluk vektörünün Doğu-Kuzey-Yukarı koordinatlarıdır.
  • theta dönme açısıdır

Kuaterniyon bir birim kuaterniyondur: Norm 1 olmalıdır. Bunun sağlanamaması, hatalı istemci davranışına neden olacaktır.

Ek olarak, bu sensör tahmini bir yön doğruluğu bildirir:

sensors_event_t.data[4] = estimated_accuracy (radyan cinsinden)

Yön hatası, zamanın %95'inde estimated_accuracy edilen_doğruluktan az olmalıdır. Bu sensör, ana yön değiştirme girişi olarak bir jiroskop kullanmalıdır.

Bu sensör ayrıca jiroskop kaymasını telafi etmek için ivmeölçer ve manyetometre girişi kullanır ve yalnızca ivmeölçer ve manyetometre kullanılarak uygulanamaz.

Oyun döndürme vektörü

Temel fiziksel sensörler: İvmeölçer ve jiroskop (manyetometre yok)

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) uyanmayan bir sensör döndürür

Oyun döndürme vektörü sensörü, döndürme vektörü sensörüne benzer ancak jeomanyetik alanı kullanmaz. Bu nedenle Y ekseni kuzeyi değil, bunun yerine başka bir referansı gösterir. Bu referansın, jiroskopun Z ekseni etrafında kaymasıyla aynı büyüklükte kaymasına izin verilir.

sensors_event_t.data[0-3] nasıl ayarlanacağıyla ilgili ayrıntılar için Döndürme vektör sensörüne bakın. Bu sensör tahmini bir rota doğruluğu bildirmiyor: sensors_event_t.data[4] ayrılmıştır ve 0 olarak ayarlanmalıdır.

İdeal bir durumda, döndürülen ve aynı gerçek dünya yönüne döndürülen bir telefon, aynı oyun döndürme vektörünü bildirmelidir.

Bu sensör bir jiroskopa ve bir ivme ölçere dayalı olmalıdır. Manyetometreyi bir girdi olarak kullanamaz, ayrıca dolaylı olarak jiroskop önyargısının tahmini yoluyla.

Yerçekimi

Temel fiziksel sensörler: İvmeölçer ve (varsa) jiroskop (veya jiroskop yoksa manyetometre)

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_GRAVITY) , uyanmayan bir sensör döndürür

Bir yerçekimi sensörü, cihazın koordinatlarında yerçekiminin yönünü ve büyüklüğünü bildirir.

Yerçekimi vektörü bileşenleri, sensors_event_t.acceleration x, y ve z alanlarında m/s^2 cinsinden rapor edilir.

Cihaz hareketsizken yerçekimi sensörünün çıkışı ivmeölçerin çıkışıyla aynı olmalıdır. Dünya'da büyüklük 9.8 m/s^2 civarındadır.

Cihazda jiroskop varsa, yerçekimi sensörü giriş olarak jiroskop ve ivmeölçer kullanmalıdır.

Cihazda jiroskop yoksa yerçekimi sensörü ivmeölçer ve manyetometreyi giriş olarak kullanmalıdır.

Jeomanyetik döndürme vektörü

Temel fiziksel sensörler: İvmeölçer ve manyetometre (jiroskop yok)

Raporlama modu: Sürekli

Düşük güç

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) uyanmayan bir sensör döndürür

Bir jeomanyetik dönüş vektörü, bir dönüş vektörü sensörüne benzer, ancak bir manyetometre kullanır ve jiroskop içermez.

Bu sensör bir manyetometreye dayalı olmalıdır. Jiroskop kullanılarak uygulanamaz ve jiroskop girişi bu sensör tarafından kullanılamaz.

sensors_event_t.data[0-4] nasıl ayarlanacağıyla ilgili ayrıntılar için Döndürme vektör sensörüne bakın.

Dönme vektör sensöründe olduğu gibi, rota hatası tahmini doğruluktan ( sensors_event_t.data[4] ) zamanın %95'inden az olmalıdır.

Bu sensör düşük güçlü olmalıdır, bu nedenle donanımda uygulanmalıdır.

Yönlendirme (kullanımdan kaldırıldı)

Temel fiziksel sensörler: İvmeölçer, manyetometre ve (varsa) jiroskop

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_ORIENTATION) , uyanmayan bir sensör döndürür

Not: Bu, Android SDK'da kullanımdan kaldırılmış daha eski bir sensör türüdür. Bunun yerini, daha net bir şekilde tanımlanan dönüş vektör sensörü almıştır. Mümkün olduğunda yönlendirme sensörü üzerinde dönüş vektörü sensörünü kullanın.

Bir yön sensörü, cihazın durumunu bildirir. Ölçümler, sensors_event_t.orientation x, y ve z alanlarında derece cinsinden rapor edilir:

  • sensors_event_t.orientation.x : azimut, manyetik kuzey yönü ile Y ekseni arasındaki, Z ekseni etrafındaki açı ( 0<=azimuth<360 ). 0=Kuzey, 90=Doğu, 180=Güney, 270=Batı.
  • sensors_event_t.orientation.y : eğim, X ekseni etrafında dönüş ( -180<=pitch<=180 ), Z ekseni Y eksenine doğru hareket ettiğinde pozitif değerler.
  • sensors_event_t.orientation.z : yuvarlanma, Y ekseni etrafında dönme ( -90<=roll<=90 ), X ekseni Z eksenine doğru hareket ettiğinde pozitif değerlerle.

Lütfen tarihsel nedenlerden dolayı yuvarlanma açısının saat yönünde pozitif olduğunu unutmayın. (Matematiksel olarak, saat yönünün tersine pozitif olmalıdır):

Bir cihaza göre oryantasyonun tasviri

Şekil 3. Bir cihaza göre oryantasyon

Bu tanım, X ekseninin uçağın uzun kenarı boyunca (kuyruktan buruna) olduğu havacılıkta kullanılan yalpalama, eğim ve yuvarlanmadan farklıdır.

Yön sensörü ayrıca, sensors_event_t.orientation.status aracılığıyla okumalarının ne kadar doğru olmasını beklediğini de bildirir. Bu alan için olası değerler hakkında daha fazla bilgi için SensorManager SENSOR_STATUS_* sabitlerine bakın.

Kalibre edilmemiş sensörler

Kalibre edilmemiş sensörler daha ham sonuçlar sağlar ve bazı sapmalar içerebilir, ancak kalibrasyon yoluyla uygulanan düzeltmelerden daha az "atlama" içerebilir. Bazı uygulamalar, bu kalibre edilmemiş sonuçları daha sorunsuz ve daha güvenilir olarak tercih edebilir. Örneğin, bir uygulama kendi sensör füzyonunu gerçekleştirmeye çalışıyorsa, kalibrasyonların uygulanması sonuçları gerçekten bozabilir.

İvmeölçer kalibre edilmemiş

Temel fiziksel sensör: İvmeölçer

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) uyanmayan bir sensör döndürür

Kalibre edilmemiş bir ivme ölçer sensörü, bir sapma tahmini ile birlikte herhangi bir sapma düzeltmesi olmadan (fabrika sapma ve sıcaklık telafisi kalibre edilmemiş ölçümlere uygulanır) cihazın üç sensör ekseni boyunca ivmesini bildirir. Tüm değerler SI birimlerindedir (m/s^2) ve sensors_event_t.uncalibrated_accelerometer alanlarında rapor edilir:

  • x_uncalib : X ekseni boyunca hızlanma (önyargı telafisi olmadan)
  • y_uncalib : Y ekseni boyunca hızlanma (önyargı telafisi olmadan)
  • z_uncalib : Z ekseni boyunca hızlanma (önyargı telafisi olmadan)
  • x_bias : X ekseni boyunca tahmini sapma
  • y_bias : Y ekseni boyunca tahmini sapma
  • z_bias : Z ekseni boyunca tahmini sapma

jiroskop kalibre edilmemiş

Temel fiziksel sensör: Jiroskop

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) uyanmayan bir sensör döndürür

Kalibre edilmemiş bir jiroskop, bir sapma tahminiyle birlikte, sensör eksenlerine sapma telafisi uygulamadan sensör eksenleri etrafındaki dönüş oranını bildirir. Tüm değerler radyan/saniye cinsindendir ve sensors_event_t.uncalibrated_gyro alanlarında rapor edilir:

  • x_uncalib : X ekseni etrafındaki açısal hız (sapma telafisi olmadan)
  • y_uncalib : Y ekseni etrafındaki açısal hız (sapma telafisi olmadan)
  • z_uncalib : Z ekseni etrafındaki açısal hız (sapma telafisi olmadan)
  • x_bias : X ekseni etrafında tahmini sapma
  • y_bias : Y ekseni etrafında tahmini sapma
  • z_bias : Z ekseni etrafında tahmini sapma

Kavramsal olarak, kalibre edilmemiş ölçüm, kalibre edilmiş ölçüm ve sapma tahmininin toplamıdır: _uncalibrated = _calibrated + _bias .

x_bias , y_bias ve z_bias değerlerinin, sapma tahmini değişir değişmez sıçraması beklenir ve bu değerlerin zamanın geri kalanında kararlı olmaları gerekir.

Kullanılan koordinat sistemiyle ilgili ayrıntılar için jiroskop sensörünün tanımına bakın.

Ölçümlere fabrika kalibrasyonu ve sıcaklık kompanzasyonu uygulanmalıdır. Ayrıca, x_bias , y_bias ve z_bias makul tahminlerin rapor edilebilmesi için jiroskop sapma tahmini uygulanmalıdır. Uygulama sapmayı tahmin edemiyorsa, bu sensör uygulanmamalıdır.

Bu sensör mevcutsa, ilgili Jiroskop sensörü de mevcut olmalıdır ve her iki sensör de aynı sensor_t.name ve sensor_t.vendor değerlerini paylaşmalıdır.

Kalibre edilmemiş manyetik alan

Temel fiziksel sensör: Manyetometre

Raporlama modu: Sürekli

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) uyanmayan bir sensör döndürür

Kalibre edilmemiş bir manyetik alan sensörü, ortam manyetik alanını sert demir kalibrasyon tahmini ile birlikte raporlar. Tüm değerler mikro-Tesla (uT) cinsindendir ve sensors_event_t.uncalibrated_magnetic alanlarında rapor edilir:

  • x_uncalib : X ekseni boyunca manyetik alan (sert demir telafisi olmadan)
  • y_uncalib : Y ekseni boyunca manyetik alan (sert demir kompanzasyonu olmadan)
  • z_uncalib : Z ekseni boyunca manyetik alan (sert demir telafisi olmadan)
  • x_bias : X ekseni boyunca tahmini sert demir sapması
  • y_bias : Y ekseni boyunca tahmini sert demir sapması
  • z_bias : Z ekseni boyunca tahmini sert demir sapması

Kavramsal olarak, kalibre edilmemiş ölçüm, kalibre edilmiş ölçüm ve sapma tahmininin toplamıdır: _uncalibrated = _calibrated + _bias .

Kalibre edilmemiş manyetometre, daha yüksek seviyeli algoritmaların kötü sert demir tahminini ele almasına izin verir. x_bias , y_bias ve z_bias değerlerinin, sert demirin tahmini değişir değişmez sıçraması beklenir ve zamanın geri kalanında kararlı olmaları gerekir.

Ölçümlere yumuşak demir kalibrasyonu ve sıcaklık kompanzasyonu uygulanmalıdır. Ayrıca, makul tahminlerin x_bias , y_bias ve z_bias içinde rapor edilebilmesi için sert demir tahmini uygulanmalıdır. Uygulama önyargıyı tahmin edemiyorsa, bu sensör uygulanmamalıdır.

Bu sensör mevcutsa, ilgili manyetik alan sensörü mevcut olmalıdır ve her iki sensör de aynı sensor_t.name ve sensor_t.vendor değerlerini paylaşmalıdır.

Menteşe açısı

Raporlama modu: Değişiklik sırasında

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) bir uyandırma sensörü döndürür

Bir menteşe açısı sensörü, cihazın iki entegre parçası arasındaki açıyı derece cinsinden ölçer. Bu sensör tipi tarafından ölçülen bir menteşe hareketinin, örneğin bir ekranı açarak veya ortaya çıkararak, kullanıcının cihazla etkileşim kurma yollarını değiştirmesi beklenir.

Etkileşimli kompozit sensörler

Bazı sensörler çoğunlukla kullanıcı ile etkileşimleri algılamak için kullanılır. 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] .

Limited axes IMU sensors

Available from Android 13, limited axes IMU sensors are sensors that support use cases where not all three axes (x, y, z) are available. Standard IMU types in Android (such as SENSOR_TYPE_ACCELEROMETER and SENSOR_TYPE_GYROSCOPE ) assume that all three axes are supported. However, not all form factors and devices support 3-axis accelerometers and 3-axis gyroscopes.

Accelerometer limited axes

Underlying physical sensors: Accelerometer

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) returns a non-wake-up sensor

An accelerometer limited axes sensor is equivalent to TYPE_ACCELEROMETER but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the acceleration value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the acceleration values for unused axes to 0 , instead of having undefined values.

Gyroscope limited axes

Underlying physical sensors: Gyroscope

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) returns a non-wake-up sensor

A gyroscope limited axes sensor is equivalent to TYPE_GYROSCOPE but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the angular speed value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the angular speed values for unused axes to 0 .

Accelerometer limited axes uncalibrated

Underlying physical sensors: Accelerometer

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor

An accelerometer limited axes uncalibrated sensor is equivalent to TYPE_ACCELEROMETER_UNCALIBRATED but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the acceleration and bias values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the acceleration and bias values for unused axes to 0 .

Gyroscope limited axes uncalibrated

Underlying physical sensors: Gyroscope

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor

A gyroscope limited axes uncalibrated sensor is equivalent to TYPE_GYROSCOPE_UNCALIBRATED but supports cases where one or two axes aren't supported.

The last three sensor event values reported by the sensor represent whether the angular speed and drift values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.

Device manufacturers must set the angular speed and drift values for unused axes to 0 .

Composite limited axes IMU

Underlying physical sensors: Any combination of 3-axis accelerometer, 3-axis gyroscope, 3-axis accelerometer uncalibrated, and 3-axis gyroscope uncalibrated sensors.

Reporting-mode: Continuous

A composite limited axes IMU sensor is equivalent to a limited axes IMU sensor but instead of being supported at the HAL, it converts the 3-axis sensor data into the equivalent limited axes variants. These composite sensors are only enabled for automotive devices.

The following table shows an example conversion from a standard 3-axis accelerometer to a composite limited axes accelerometer.

SensorEvent Values for SENSOR_TYPE_ACCELEROMETER Example SENSOR_TYPE_ACCELEROMETER SensorEvent Composite SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent
values[0]

-0.065

-0.065

values[1]

0.078

0.078

values[2]

9.808

9.808

values[3]

N/A

1.0

values[4]

N/A

1.0

values[5]

N/A

1.0

Automotive sensors

Sensors to support automotive use cases.

Heading

Underlying physical sensors: Any combination of GPS, magnetometer, accelerometer, and gyroscope.

Reporting-mode: Continuous

getDefaultSensor(SENSOR_TYPE_HEADING) returns a non-wake-up sensor

Available from Android 13, a heading sensor measures the direction in which the device is pointing relative to true north in degrees. The heading sensor includes two SensorEvent values. One for the measured device heading and one for the accuracy of the provided heading value.

Heading values reported by this sensor must be between 0.0 (inclusive) and 360.0 (exclusive), with 0 indicating north, 90 east, 180 south, and 270 west.

Accuracy for this sensor is defined at 68 percent confidence. In the case where the underlying distribution is Gaussian normal, the accuracy is one standard deviation. For example, if the heading sensor returns a heading value of 60 degrees and an accuracy value of 10 degrees, there's a 68 percent probability of the true heading being between 50 degrees and 70 degrees.