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.

Ş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.

Ş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 |
---|---|---|---|
Davranış | İvmeölçer, jiroskop, manyetometre KULLANILMAMALIDIR | Sürekli | |
Davranış | İvmeölçer, manyetometre, jiroskop KULLANMAMALIDIR | Sürekli | |
bakış hareketi ![]() | Etkileşim | Tanımsız | Tek atış |
Davranış | İvmeölçer, jiroskop | Sürekli | |
kalibre edilmemiş | Jiroskop | Sürekli | |
Aktivite | İvmeölçer, jiroskop (varsa) veya manyetometre (jiro yoksa) | Sürekli | |
kalibre edilmemiş | manyetometre | Sürekli | |
Yönlendirme (kullanımdan kaldırıldı) | Davranış | İvmeölçer, manyetometre, jiroskop (varsa) | Sürekli |
Etkileşim | Tanımsız | Tek atış | |
Davranış | İvmeölçer, manyetometre, jiroskop | Sürekli | |
Aktivite | İvmeölçer (veya çok düşük güç olduğu sürece başka bir şey) | Tek atış | |
Aktivite | ivmeölçer | değiştirildiğinde | |
Aktivite | ivmeölçer | Özel | |
Aktivite | ivmeölçer | Özel | |
Etkileşim | Tanımsız | Tek atış |
= 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):

Ş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.