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 simetrik araç düzlemine dik olan yatay bir düzlem üzerindedir.
- 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, düzeltmeler (önyargı telafisi ve sıcaklık telafisi gibi) uygulandığından fiziksel sensörün ham çıktısı değildir .
Örneğin, bir temel sensörün özellikleri, aşağıdaki kullanım durumlarında 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 rapor edilir.
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 sıçramalara 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 olarak 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ıkta kullanılan 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 lux birimlerinde bildirir.
Ölçüm, sensors_event_t.light
içinde rapor edilir.
yakınlık
Raporlama modu: Değişiklik sırasında
Genellikle bir 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 sensör olduğu için önce bu sensörün uyandırma sürümünü 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 sensor_t.maxRange
değerinden daha düşük bir değeri "yakın" durumda 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şir) 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.
Temel 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 hızlanma sensörü, yerçekimi hariç, sensör çerçevesindeki cihazın doğrusal hızlanmasını 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 ivme 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 dedektö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. Konum belirleme 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 (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 sayacıyla karşılaştırıldığında, adım algılayıcının gecikme süresi daha düşük olmalıdır (iki saniyeden az). 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 detektö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 etkisi yoktur.
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 içinde 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, kullanımda olabilecek ivmeölçer başta olmak üzere diğer sensörleri 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, yalnızca adımlar kesintileri 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 tetiklenir
Telefon yönlendirmesinde değişiklik olmayan 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. HAL'de bu sensörü 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 bir ortonormal taban 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önüne gitmek için telefonu bir eksen rot_axis
etrafında bir teta açısı kadar döndürmek olarak görülebilir. Döndürme, 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 girdi olarak kullanamaz, bunun yanı sıra 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ü giriş olarak ivmeölçer ve manyetometreyi 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, yön hatası zamanın %95'inde tahmin edilen doğruluktan ( sensors_event_t.data[4]
) daha 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
: dönme, Y ekseni etrafında dönme (-90<=roll<=90
), X ekseni Z eksenine doğru hareket ettiğinde pozitif değerler.
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, okumalarının ne kadar doğru olmasını beklediğini sensors_event_t.orientation.status
aracılığıyla 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 kompanzasyonu 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 kompanzasyonu 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 ile 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 telafisi 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 ile 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şenin 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. Bu sensörlerin nasıl uygulanması gerektiğini tanımlamıyoruz, ancak düşük güçlü olmalılar ve kullanıcı deneyimi açısından kalitelerini doğrulamak cihaz üreticisinin sorumluluğundadır.
Uyandırma hareketi
Temel fiziksel sensörler: Tanımsız (düşük güçteki herhangi bir şey)
Raporlama modu: Tek seferlik
Düşük güç
Bu sensörün yalnızca uyandırma sürümünü uygulayın.
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]
.