Bagian ini menjelaskan sumbu sensor, sensor dasar, dan sensor komposit (aktivitas, sikap, tidak dikalibrasi, dan interaksi).
Sumbu sensor
Nilai peristiwa sensor dari banyak sensor dinyatakan dalam frame tertentu yang statis relatif terhadap perangkat.
Sumbu perangkat seluler
Sensor API hanya relatif terhadap orientasi alami layar (sumbu tidak ditukar saat orientasi layar perangkat berubah.
Otomotif: kapak
Dalam implementasi Android Automotive, sumbu ditentukan sehubungan dengan bingkai bodi kendaraan. Asal frame referensi kendaraan adalah bagian tengah gandar belakang. Frame referensi kendaraan diorientasikan sehingga:
- Sumbu X mengarah ke kanan dan berada pada bidang horizontal, tegak lurus dengan bidang simetri kendaraan.
- Sumbu y mengarah ke depan dan berada di bidang horizontal.
Rangka referensi kendaraan adalah sistem koordinat tangan kanan. Oleh karena itu, sumbu Z mengarah ke atas.
Sumbu Z dari frame referensi disejajarkan dengan gravitasi, yang berarti sumbu X dan sumbu Y bersifat horizontal. Akibatnya, sumbu Y mungkin tidak selalu melewati sumbu depan.
Sensor dasar
Jenis sensor dasar diberi nama berdasarkan sensor fisik yang diwakilinya. Sensor ini meneruskan data dari satu sensor fisik (bukan sensor komposit yang menghasilkan data dari sensor lain). Contoh jenis sensor dasar meliputi:
SENSOR_TYPE_ACCELEROMETER
SENSOR_TYPE_GYROSCOPE
SENSOR_TYPE_MAGNETOMETER
Namun, sensor dasar tidak sama dan tidak boleh tertukar dengan sensor fisik yang mendasarinya. Data dari sensor dasar bukan output mentah dari sensor fisik karena koreksi (seperti kompensasi bias dan kompensasi suhu) diterapkan.
Misalnya, karakteristik sensor dasar mungkin berbeda dengan karakteristik sensor fisik yang mendasarinya dalam kasus penggunaan berikut:
- Chip giroskop yang diberi rating memiliki rentang bias 1 deg/detik.
- Setelah kalibrasi pabrik, kompensasi suhu, dan kompensasi bias diterapkan, bias sebenarnya dari sensor Android akan dikurangi, mungkin hingga titik saat bias dijamin berada di bawah 0,01 deg/dtk.
- Dalam situasi ini, kita mengatakan bahwa sensor Android memiliki bias di bawah 0,01 deg/dtk, meskipun sheet data sensor yang mendasarinya menyatakan 1 deg/dtk.
- Barometer dengan konsumsi daya 100 uW.
- Karena data yang dihasilkan perlu ditranspor dari chip ke SoC, biaya daya sebenarnya untuk mengumpulkan data dari sensor Android barometer mungkin jauh lebih tinggi, misalnya 1.000 uW.
- Dalam situasi ini, kita mengatakan bahwa sensor Android memiliki konsumsi daya 1.000 uW, meskipun konsumsi daya yang diukur di kabel chip barometer adalah 100 uW.
- Magnetometer yang mengonsumsi 100 uW saat dikalibrasi, tetapi mengonsumsi lebih banyak daya saat
dikalibrasi.
- Rutinitas kalibrasi mungkin memerlukan pengaktifan giroskop, yang menghabiskan 5.000 uW, dan menjalankan beberapa algoritma, yang menghabiskan 900 uW lainnya.
- Dalam situasi ini, kita mengatakan bahwa konsumsi daya maksimum sensor Android (magnetometer) adalah 6.000 uW.
- Dalam hal ini, konsumsi daya rata-rata adalah ukuran yang lebih berguna, dan itulah yang dilaporkan dalam karakteristik statis sensor melalui HAL.
Akselerometer
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)
menampilkan sensor non-bangun
Sensor akselerometer melaporkan akselerasi perangkat di sepanjang tiga sumbu sensor. Akselerasi yang diukur mencakup akselerasi fisik (perubahan kecepatan) dan gravitasi. Pengukuran dilaporkan di kolom x, y, dan z dari sensors_event_t.acceleration.
Semua nilai dalam satuan SI (m/s^2) dan mengukur percepatan perangkat dikurangi gaya gravitasi di sepanjang tiga sumbu sensor.
Berikut ini contohnya:
- Norma (x, y, z) harus mendekati 0 saat dalam kondisi jatuh bebas.
- Saat perangkat tergeletak rata di atas meja dan didorong di sisi kirinya ke arah kanan, nilai akselerasi x adalah positif.
- Saat perangkat tergeletak rata di atas meja, nilai akselerasi di sepanjang z adalah +9,81 alo, yang sesuai dengan akselerasi perangkat (0 m/s^2) dikurangi gaya gravitasi (-9,81 m/s^2).
- Saat perangkat tergeletak di atas meja dan didorong ke arah langit, nilai akselerasi lebih besar dari +9,81, yang sesuai dengan akselerasi perangkat (+A m/s^2) dikurangi gaya gravitasi (-9,81 m/s^2).
Pengukuran dikalibrasi menggunakan:
- Kompensasi suhu
- Kalibrasi bias online
- Kalibrasi skala online
Kalibrasi bias dan skala hanya boleh diperbarui saat sensor dinonaktifkan, agar tidak menyebabkan lonjakan nilai selama streaming.
Akselerometer juga melaporkan seberapa akurat pembacaannya
melalui sensors_event_t.acceleration.status
. Lihat konstanta
SENSOR_STATUS_*
SensorManager
untuk mengetahui informasi selengkapnya tentang kemungkinan
nilai untuk kolom ini.
Suhu sekitar
Mode pelaporan: Saat berubah
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)
menampilkan sensor non-bangun
Sensor ini memberikan suhu sekitar (ruangan) dalam derajat Celcius.
Sensor medan magnet
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)
menampilkan sensor non-bangun
SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD
Sensor medan magnet (juga dikenal sebagai magnetometer) melaporkan medan magnet sekitar, seperti yang diukur di sepanjang tiga sumbu sensor.
Pengukuran dilaporkan di kolom x, y, dan z
sensors_event_t.magnetic
dan semua nilai dalam micro-Tesla (uT).
Magnetometer juga melaporkan seberapa akurat pembacaannya
melalui sensors_event_t.magnetic.status
. Lihat konstanta
SENSOR_STATUS_*
SensorManager
untuk mengetahui informasi selengkapnya tentang kemungkinan
nilai untuk kolom ini.
Pengukuran dikalibrasi menggunakan:
- Kompensasi suhu
- Kalibrasi besi lunak pabrik (atau online)
- Kalibrasi hard iron online
Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
menampilkan sensor tidak bangun tidur
Sensor giroskop melaporkan kecepatan rotasi perangkat di sekitar tiga sumbu sensor.
Rotasi positif dalam arah berlawanan arah jarum jam (aturan tangan kanan). Artinya, pengamat yang melihat dari beberapa lokasi positif pada sumbu x, y, atau z pada perangkat yang diposisikan pada titik asal akan melaporkan rotasi positif jika perangkat tampak berputar berlawanan arah jarum jam. Perhatikan bahwa ini adalah definisi matematika standar untuk rotasi positif dan tidak sesuai dengan definisi roll di bidang aeronautika.
Pengukuran dilaporkan di kolom x, y, dan z
sensors_event_t.gyro
dan semua nilai dalam radian per detik (rad/s).
Pengukuran dikalibrasi menggunakan:
- Kompensasi suhu
- Kompensasi skala pabrik (atau online)
- Kalibrasi bias online (untuk menghilangkan drift)
Giroskop juga melaporkan seberapa akurat pembacaannya melalui
sensors_event_t.gyro.status
. Lihat konstanta
SENSOR_STATUS_*
SensorManager
untuk mengetahui informasi selengkapnya tentang kemungkinan
nilai untuk kolom ini.
Giroskop tidak dapat diemulasi berdasarkan magnetometer dan akselerometer, karena hal ini akan menyebabkan konsistensi dan responsivitas lokalnya berkurang. Chip ini harus didasarkan pada chip giroskop biasa.
Detak jantung
Mode pelaporan: Saat berubah
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
menampilkan sensor non-bangun
Sensor detak jantung melaporkan detak jantung saat ini dari orang yang menyentuh perangkat.
Detak jantung saat ini dalam denyut per menit (BPM) dilaporkan dalam
sensors_event_t.heart_rate.bpm
dan status sensor
dilaporkan dalam
sensors_event_t.heart_rate.status
. Lihat konstanta
SENSOR_STATUS_*
SensorManager
untuk informasi selengkapnya tentang nilai yang memungkinkan untuk kolom ini. Secara
khusus, setelah aktivasi pertama, kecuali jika perangkat diketahui tidak berada di
tubuh, kolom status peristiwa pertama harus ditetapkan ke
SENSOR_STATUS_UNRELIABLE
. Karena sensor ini aktif saat terjadi perubahan, peristiwa akan dihasilkan jika dan hanya jika heart_rate.bpm
atau heart_rate.status
telah berubah sejak peristiwa terakhir. Peristiwa
dibuat tidak lebih cepat dari setiap sampling_period
.
sensor_t.requiredPermission
selalu
SENSOR_PERMISSION_BODY_SENSORS
.
Ringan
Mode pelaporan: Saat berubah
getDefaultSensor(SENSOR_TYPE_LIGHT)
menampilkan sensor non-bangun
Sensor cahaya melaporkan iluminasi saat ini dalam satuan SI lux.
Pengukuran dilaporkan di sensors_event_t.light
.
Kedekatan
Mode pelaporan: Saat berubah
Biasanya didefinisikan sebagai sensor bangunkan
getDefaultSensor(SENSOR_TYPE_PROXIMITY)
menampilkan sensor bangun
Sensor kedekatan melaporkan jarak dari sensor ke permukaan terdekat yang terlihat.
Hingga Android 4.4, sensor kedekatan selalu menjadi sensor bangun, yang mengaktifkan SoC saat mendeteksi perubahan kedekatan. Setelah Android 4.4, sebaiknya terapkan versi pengaktifan sensor ini terlebih dahulu, karena sensor ini yang digunakan untuk mengaktifkan dan menonaktifkan layar saat melakukan panggilan telepon.
Pengukuran dilaporkan dalam sentimeter di
sensors_event_t.distance
. Perhatikan
bahwa beberapa sensor kedekatan hanya mendukung pengukuran biner "dekat"
atau "jauh".
Dalam hal ini, sensor melaporkan nilai sensor_t.maxRange
dalam status "jauh"
dan nilai kurang dari sensor_t.maxRange
dalam
status "dekat".
Tekanan
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_PRESSURE)
menampilkan sensor non-bangun
Sensor tekanan (juga dikenal sebagai barometer) melaporkan tekanan atmosfer dalam hektopascal (hPa).
Pengukuran dikalibrasi menggunakan
- Kompensasi suhu
- Kalibrasi bias pabrik
- Kalibrasi skala pabrik
Barometer sering digunakan untuk memperkirakan perubahan ketinggian. Untuk memperkirakan elevasi absolut, tekanan permukaan laut (berubah bergantung pada cuaca) harus digunakan sebagai referensi.
Kelembapan relatif
Mode pelaporan: Saat berubah
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
menampilkan sensor non-bangun
Sensor kelembapan relatif mengukur kelembapan udara sekitar relatif dan menampilkan nilai dalam persen.
Jenis sensor komposit
Sensor komposit menghasilkan data dengan memproses dan/atau menggabungkan data dari satu atau beberapa sensor fisik. (Sensor apa pun yang bukan sensor dasar disebut sensor komposit.) Contoh sensor komposit meliputi:
- Pendeteksi langkah dan gerakan signifikan, yang biasanya didasarkan pada akselerometer, tetapi juga dapat didasarkan pada sensor lain, jika konsumsi daya dan akurasinya dapat diterima.
- Vektor rotasi game, berdasarkan akselerometer dan giroskop.
- Giroskop yang tidak dikalibrasi, yang mirip dengan sensor dasar giroskop, tetapi dengan kalibrasi bias yang dilaporkan secara terpisah, bukan dikoreksi dalam pengukuran.
Seperti sensor dasar, karakteristik sensor komposit berasal dari karakteristik data akhirnya. Misalnya, konsumsi daya vektor rotasi game mungkin sama dengan jumlah konsumsi daya chip akselerometer, chip giroskop, chip yang memproses data, dan bus yang mengangkut data. Sebagai contoh lain, penyimpangan vektor rotasi game sangat bergantung pada kualitas algoritme kalibrasi seperti pada karakteristik sensor fisik.
Tabel berikut mencantumkan jenis sensor komposit yang tersedia. Setiap sensor komposit bergantung pada data dari satu atau beberapa sensor fisik. Hindari memilih sensor fisik dasar lainnya untuk memperkirakan hasil karena memberikan pengalaman pengguna yang buruk.
Jenis sensor | Kategori | Sensor fisik yang mendasari | Mode pelaporan |
---|---|---|---|
Sikap |
Akselerometer, giroskop, TIDAK BOLEH MENGGUNAKAN magnetometer |
Berkelanjutan |
|
Sikap |
Akselerometer, magnetometer, TIDAK BOLEH MENGGUNAKAN giroskop |
Berkelanjutan |
|
Gestur Glance | Interaksi |
Tidak ditetapkan |
One-shot |
Sikap |
Akselerometer, giroskop |
Berkelanjutan |
|
Tidak dikalibrasi |
Giroskop |
Berkelanjutan |
|
Aktivitas |
Akselerometer, giroskop (jika ada), atau magnetometer (jika giroskop tidak ada) |
Berkelanjutan |
|
Tidak dikalibrasi |
Magnetometer |
Berkelanjutan |
|
Orientasi (tidak digunakan lagi) |
Sikap |
Akselerometer, magnetometer, giroskop (jika ada) |
Berkelanjutan |
Interaksi |
Tidak ditetapkan |
One-shot |
|
Sikap |
Akselerometer, magnetometer, giroskop |
Berkelanjutan |
|
Aktivitas |
Akselerasi (atau yang lain selama daya sangat rendah) |
One-shot |
|
Aktivitas |
Akselerometer |
Saat berubah |
|
Aktivitas |
Akselerometer |
Khusus |
|
Aktivitas |
Akselerometer |
Khusus |
|
Interaksi |
Tidak ditetapkan |
One-shot |
= Sensor daya rendah
Sensor gabungan aktivitas
Akselerasi linear
Sensor fisik yang mendasarinya: Akselerometer dan (jika ada) giroskop (atau magnetometer jika giroskop tidak ada)
Mode pelaporan: Kontinu
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
menampilkan sensor non-bangun
Sensor akselerasi linear melaporkan akselerasi linear perangkat dalam frame sensor, tidak termasuk gravitasi.
Secara konseptual, output-nya adalah: output akselerometer dikurangi output sensor gravitasi. Nilai ini dilaporkan dalam m/s^2 di kolom x, y, dan z
sensors_event_t.acceleration
.
Pengukuran pada semua sumbu harus mendekati 0 saat perangkat tidak bergerak.
Jika perangkat memiliki giroskop, sensor akselerasi linear harus menggunakan giroskop dan akselerometer sebagai input.
Jika perangkat tidak memiliki giroskop, sensor akselerasi linear harus menggunakan akselerometer dan magnetometer sebagai input.
Gerakan yang signifikan
Sensor fisik dasar: Akselerometer (atau lainnya selama daya rendah)
Reporting-mode: One-shot
Daya lemah
Hanya terapkan versi bangun dari sensor ini.
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)
menampilkan sensor bangun
Detektor gerakan signifikan dipicu saat mendeteksi gerakan signifikan: gerakan yang dapat menyebabkan perubahan lokasi pengguna.
Contoh gerakan signifikan tersebut adalah:
- Berjalan atau bersepeda
- Duduk di mobil, gerbong, atau kereta yang bergerak
Contoh situasi yang tidak memicu gerakan yang signifikan:
- Ponsel di saku dan orang tidak bergerak
- Ponsel berada di atas meja dan meja sedikit bergetar karena lalu lintas atau mesin cuci di sekitar
Pada tingkat tinggi, pendeteksi gerakan yang signifikan digunakan untuk mengurangi konsumsi daya penentuan lokasi. Saat algoritma pelokalan mendeteksi bahwa perangkat statis, algoritma tersebut dapat beralih ke mode daya rendah, yang mengandalkan gerakan signifikan untuk mengaktifkan perangkat saat pengguna mengubah lokasi.
Sensor ini harus menggunakan daya rendah. Hal ini membuat kompromi untuk konsumsi daya yang dapat menyebabkan sejumlah kecil negatif palsu. Hal ini dilakukan karena beberapa alasan:
- Tujuan sensor ini adalah untuk menghemat daya.
- Memicu peristiwa saat pengguna tidak bergerak (positif palsu) akan menghabiskan daya, sehingga harus dihindari.
- Tidak memicu peristiwa saat pengguna bergerak (negatif palsu) dapat diterima selama tidak dilakukan berulang kali. Jika pengguna telah berjalan selama 10 detik, tidak memicu peristiwa dalam 10 detik tersebut tidak dapat diterima.
Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Detektor langkah
Sensor fisik yang mendasari: Akselerometer (+ mungkin yang lain selama daya rendah)
Mode pelaporan: Khusus (satu peristiwa per langkah yang diambil)
Daya lemah
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
menampilkan sensor non-bangun
Detektor langkah menghasilkan peristiwa setiap kali langkah dilakukan oleh pengguna.
Stempel waktu peristiwa sensors_event_t.timestamp
sesuai
dengan saat kaki menyentuh tanah, sehingga menghasilkan variasi akselerasi yang tinggi.
Dibandingkan dengan penghitung langkah, detektor langkah harus memiliki latensi yang lebih rendah (kurang dari dua detik). Detektor langkah dan penghitung langkah mendeteksi saat pengguna berjalan, berlari, dan menaiki tangga. Fitur ini tidak boleh dipicu saat pengguna bersepeda, mengemudi, atau berada di kendaraan lain.
Sensor ini harus menggunakan daya rendah. Artinya, jika deteksi langkah tidak dapat dilakukan di hardware, sensor ini tidak boleh ditentukan. Secara khusus, saat detektor langkah diaktifkan dan akselerometer tidak diaktifkan, hanya langkah yang dapat memicu interupsi (tidak semua pembacaan akselerometer).
sampling_period_ns
tidak berpengaruh pada pendeteksi langkah.
Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Penghitung langkah
Sensor fisik yang mendasari: Akselerometer (+ mungkin yang lain selama daya rendah)
Mode pelaporan: Saat berubah
Daya rendah
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
menampilkan sensor non-bangun
Penghitung langkah melaporkan jumlah langkah yang dilakukan oleh pengguna sejak reboot terakhir saat diaktifkan.
Pengukuran dilaporkan sebagai uint64_t
di
sensors_event_t.step_counter
dan
direset ke nol hanya saat sistem dimulai ulang.
Stempel waktu peristiwa disetel ke waktu saat langkah terakhir untuk peristiwa tersebut diambil.
Lihat jenis sensor Pendeteksi langkah untuk mengetahui arti waktu langkah.
Dibandingkan dengan detektor langkah, penghitung langkah dapat memiliki latensi yang lebih tinggi (hingga 10 detik). Berkat latensi ini, sensor ini memiliki akurasi tinggi; jumlah langkah setelah pengukuran sehari penuh harus berada dalam 10% dari jumlah langkah sebenarnya. Detektor langkah dan penghitung langkah mendeteksi saat pengguna berjalan, berlari, dan menaiki tangga. Fitur ini tidak boleh dipicu saat pengguna bersepeda, mengemudi, atau berada di kendaraan lain.
Hardware harus memastikan jumlah langkah internal tidak pernah meluap. Ukuran minimum penghitung internal hardware adalah 16 bit. Jika terjadi overflow yang akan segera terjadi (paling banyak setiap ~2^16 langkah), SoC dapat diaktifkan sehingga driver dapat melakukan pemeliharaan penghitung.
Seperti yang dinyatakan dalam Interaksi, saat beroperasi, sensor ini tidak akan mengganggu sensor lain, terutama akselerometer, yang mungkin sedang digunakan.
Jika perangkat tertentu tidak dapat mendukung mode operasi ini, jenis sensor ini tidak boleh dilaporkan oleh HAL. Artinya, Anda tidak dapat "mengemulasi" sensor ini di HAL.
Sensor ini harus berdaya rendah. Artinya, jika deteksi langkah tidak dapat dilakukan di hardware, sensor ini tidak boleh ditentukan. Secara khusus, saat penghitung langkah diaktifkan dan akselerometer tidak diaktifkan, hanya langkah yang akan memicu interupsi (bukan data akselerometer).
Detektor kemiringan
Sensor fisik yang mendasari: Akselerometer (+ mungkin yang lain selama daya rendah)
Reporting-mode: Special
Daya rendah
Hanya terapkan versi bangun sensor ini.
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)
menampilkan sensor bangun
Pendeteksi kemiringan menghasilkan peristiwa setiap kali peristiwa kemiringan terdeteksi.
Peristiwa kemiringan ditentukan oleh arah gravitasi rata-rata periode 2 detik yang berubah setidaknya 35 derajat sejak aktivasi atau peristiwa terakhir yang dihasilkan oleh sensor. Berikut algoritmanya:
reference_estimated_gravity
= rata-rata pengukuran akselerometer selama detik pertama setelah aktivasi atau perkiraan gravitasi saat peristiwa kemiringan terakhir dihasilkan.current_estimated_gravity
= rata-rata pengukuran akselerometer selama 2 detik terakhir.- Dipicu saat
angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees
Akselerasi besar tanpa perubahan orientasi ponsel tidak akan memicu peristiwa kemiringan. Misalnya, belokan tajam atau akselerasi yang kuat saat mengemudi
mobil tidak boleh memicu peristiwa kemiringan, meskipun sudut akselerasi
rata-rata dapat bervariasi lebih dari 35 derajat.
Biasanya, sensor ini
diimplementasikan hanya dengan bantuan akselerometer. Sensor lain juga dapat digunakan jika konsumsi daya tidak meningkat secara signifikan. Ini adalah
sensor hemat daya yang akan memungkinkan SoC beralih ke mode penangguhan. Jangan mengemulasi sensor ini di HAL. Setiap peristiwa sensor melaporkan 1
di
sensors_event_t.data[0]
.
Sensor komposit sikap
Vektor rotasi
Sensor fisik yang mendasarinya: Akselerometer, magnetometer, dan giroskop
Mode pelaporan: Kontinu
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)
menampilkan
sensor non-bangun
Sensor vektor rotasi melaporkan orientasi perangkat relatif terhadap bingkai koordinat Timur-Utara-Atas. Pengukuran ini biasanya diperoleh dengan integrasi pembacaan akselerometer, giroskop, dan magnetometer. Sistem koordinat Timur-Utara-Atas ditentukan sebagai basis ortonormal langsung dengan:
- X menunjuk ke timur dan bersinggungan dengan tanah.
- Y menunjuk ke utara dan bersinggungan dengan tanah.
- Z menunjuk ke arah langit dan tegak lurus dengan tanah.
Orientasi ponsel diwakili oleh rotasi yang diperlukan untuk menyelaraskan koordinat Timur-Utara-Atas dengan koordinat ponsel. Artinya, menerapkan rotasi ke frame dunia (X,Y,Z) akan menyelaraskannya dengan koordinat ponsel (x,y,z).
Rotasi dapat dilihat sebagai memutar ponsel berdasarkan theta sudut di sekeliling
sumbu rot_axis
untuk beralih dari orientasi perangkat
referensi (sejajar Timur-Utara) ke
orientasi perangkat saat ini. Rotasi dienkode sebagai empat komponen x, y, z, w tanpa unit dari kuarterner unit:
sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
sensors_event_t.data[3] = cos(theta/2)
Dalam hal ini:
- Kolom x, y, dan z dari
rot_axis
adalah koordinat Timur-Utara-Atas dari vektor panjang satuan yang mewakili sumbu rotasi theta
adalah sudut rotasi
Kuarternion adalah kuarternion unit: Harus berupa norma 1
.
Jika hal ini tidak dilakukan,
perilaku klien akan menjadi tidak stabil.
Selain itu, sensor ini melaporkan perkiraan akurasi arah:
sensors_event_t.data[4] = estimated_accuracy
(dalam radian)
Error judul harus kurang dari estimated_accuracy
95% dari waktu. Sensor ini harus menggunakan giroskop sebagai input perubahan orientasi utama.
Sensor ini juga menggunakan input akselerometer dan magnetometer untuk mengatasi drift giroskop, dan tidak dapat diterapkan hanya menggunakan akselerometer dan magnetometer.
Vektor rotasi game
Sensor fisik yang mendasarinya: Akselerometer dan giroskop (tanpa magnetometer)
Mode pelaporan: Kontinu
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)
menampilkan sensor tidak bangun tidur
Sensor vektor rotasi game mirip dengan sensor vektor rotasi, tetapi tidak menggunakan medan geomagnetik. Oleh karena itu, sumbu Y tidak mengarah ke utara, tetapi ke beberapa referensi lainnya. Referensi tersebut diizinkan untuk menyimpang dengan urutan magnitudo yang sama dengan giroskop yang menyimpang di sekitar sumbu Z.
Lihat sensor Vektor rotasi untuk mengetahui detail tentang
cara menetapkan sensors_event_t.data[0-3]
. Sensor ini tidak
melaporkan estimasi akurasi arah:
sensors_event_t.data[4]
dicadangkan dan harus ditetapkan ke 0
.
Dalam kasus ideal, ponsel yang diputar dan dikembalikan ke orientasi dunia nyata yang sama harus melaporkan vektor rotasi game yang sama.
Sensor ini harus didasarkan pada giroskop dan akselerometer. Selain itu, sensor tidak dapat menggunakan magnetometer sebagai input, selain itu, secara tidak langsung, melalui perkiraan bias giroskop.
Gravitasi
Sensor fisik yang mendasarinya: Akselerometer dan (jika ada) giroskop (atau magnetometer jika giroskop tidak ada)
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GRAVITY)
menampilkan sensor non-bangun
Sensor gravitasi melaporkan arah dan magnitudo gravitasi dalam koordinat perangkat.
Komponen vektor gravitasi dilaporkan dalam m/s^2 di kolom x, y, dan z
sensors_event_t.acceleration
.
Saat perangkat dalam keadaan diam, output sensor gravitasi harus identik dengan akselerometer. Di Bumi, magnitudonya sekitar 9,8 m/s^2.
Jika perangkat memiliki giroskop, sensor gravitasi harus menggunakan giroskop dan akselerometer sebagai input.
Jika perangkat tidak memiliki giroskop, sensor gravitasi harus menggunakan akselerometer dan magnetometer sebagai input.
Vektor rotasi geomagnetik
Sensor fisik yang mendasarinya: Akselerometer dan magnetometer (tanpa giroskop)
Mode pelaporan: Kontinu
Daya rendah
getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)
menampilkan sensor non-bangun
Vektor rotasi geomagnetik mirip dengan sensor vektor rotasi, tetapi menggunakan magnetometer dan tidak menggunakan giroskop.
Sensor ini harus didasarkan pada magnetometer. Sensor ini tidak dapat diterapkan menggunakan giroskop, dan input giroskop tidak dapat digunakan oleh sensor ini.
Lihat sensor Rotation vector untuk mengetahui detail cara menetapkan sensors_event_t.data[0-4]
.
Sama seperti sensor vektor rotasi, error arah harus lebih kecil dari perkiraan akurasi (sensors_event_t.data[4]
) sebesar 95%.
Sensor ini harus menggunakan daya rendah, sehingga harus diimplementasikan dalam hardware.
Orientasi (tidak digunakan lagi)
Sensor fisik yang mendasarinya: Akselerometer, magnetometer, dan (jika ada) giroskop
Mode pelaporan: Kontinu
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
menampilkan sensor non-bangun
Catatan: Ini adalah jenis sensor lama yang tidak digunakan lagi di Android SDK. Sensor ini telah diganti dengan sensor vektor rotasi, yang ditentukan dengan lebih jelas. Gunakan sensor vektor rotasi pada sensor orientasi jika memungkinkan.
Sensor orientasi melaporkan sikap perangkat. Pengukuran
dilaporkan dalam derajat di kolom x, y, dan z
sensors_event_t.orientation
:
sensors_event_t.orientation.x
: azimuth, sudut antara arah utara magnetik dan sumbu Y, di sekitar sumbu Z (0<=azimuth<360
). 0=Utara, 90=Timur, 180=Selatan, 270=Barat.sensors_event_t.orientation.y
: pitch, rotasi di sekitar sumbu X (-180<=pitch<=180
), dengan nilai positif saat sumbu Z bergerak ke arah sumbu Y.sensors_event_t.orientation.z
: roll, rotasi di sekitar sumbu Y (-90<=roll<=90
), dengan nilai positif saat sumbu X bergerak ke arah sumbu Z.
Perhatikan, karena alasan historis, sudut roll positif dalam arah searah jarum jam. (Secara matematis, nilainya harus positif dalam arah berlawanan dengan arah jarum jam):
Definisi ini berbeda dengan yaw, pitch, dan roll yang digunakan dalam penerbangan dengan sumbu X berada di sepanjang sisi panjang pesawat (ekor ke hidung).
Sensor orientasi juga melaporkan seberapa akurat pembacaannya
diharapkan melalui sensors_event_t.orientation.status
. Lihat konstanta
SENSOR_STATUS_*
SensorManager
untuk informasi selengkapnya tentang
nilai yang memungkinkan untuk kolom ini.
Sensor yang tidak dikalibrasi
Sensor yang tidak dikalibrasi memberikan hasil yang lebih mentah dan mungkin menyertakan beberapa bias, tetapi juga berisi lebih sedikit "lompatan" dari koreksi yang diterapkan melalui kalibrasi. Beberapa aplikasi mungkin memilih hasil yang tidak dikalibrasi ini karena lebih lancar dan lebih andal. Misalnya, jika aplikasi mencoba melakukan fusi sensornya sendiri, memperkenalkan kalibrasi sebenarnya dapat mendistorsi hasil.
Akselerometer tidak dikalibrasi
Sensor fisik yang mendasari: Akselerometer
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
menampilkan sensor non-bangun
Sensor akselerometer yang tidak dikalibrasi melaporkan akselerasi perangkat
di sepanjang tiga sumbu sensor tanpa koreksi bias (bias pabrik
dan kompensasi suhu diterapkan ke pengukuran yang tidak dikalibrasi), bersama
dengan estimasi bias.
Semua nilai dalam satuan SI (m/d^2) dan dilaporkan di kolom
sensors_event_t.uncalibrated_accelerometer
:
x_uncalib
: akselerasi (tanpa kompensasi bias) di sepanjang sumbu Xy_uncalib
: akselerasi (tanpa kompensasi bias) di sepanjang sumbu Yz_uncalib
: akselerasi (tanpa kompensasi bias) di sepanjang sumbu Zx_bias
: estimasi bias di sepanjang sumbu Xy_bias
: estimasi bias di sepanjang sumbu Yz_bias
: estimasi bias di sepanjang sumbu Z
Giroskop tidak dikalibrasi
Sensor fisik yang mendasari: Giroskop
Mode pelaporan: Kontinu
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
menampilkan sensor non-bangun
Giroskop yang tidak dikalibrasi melaporkan kecepatan rotasi di sekitar sumbu sensor
tanpa menerapkan kompensasi bias ke sumbu tersebut, beserta estimasi bias. Semua
nilai dalam radian/detik dan dilaporkan di kolom
sensors_event_t.uncalibrated_gyro
:
x_uncalib
: kecepatan sudut (tanpa kompensasi drift) di sekitar sumbu Xy_uncalib
: kecepatan sudut (tanpa kompensasi drift) di sekitar sumbu Yz_uncalib
: kecepatan sudut (tanpa kompensasi drift) di sekitar sumbu Zx_bias
: estimasi drift di sekitar sumbu Xy_bias
: estimasi drift di sekitar sumbu Yz_bias
: estimasi drift di sekitar sumbu Z
Secara konseptual, pengukuran yang tidak dikalibrasi adalah jumlah pengukuran
yang dikalibrasi dan estimasi bias: _uncalibrated = _calibrated + _bias
.
Nilai x_bias
,
y_bias
, dan z_bias
diperkirakan akan melonjak begitu
estimasi bias
berubah, dan nilai tersebut akan stabil selama waktu lainnya.
Lihat definisi sensor giroskop untuk mengetahui detail tentang sistem koordinat yang digunakan.
Kalibrasi pabrik dan kompensasi suhu harus diterapkan pada
pengukuran. Selain itu, estimasi penyimpangan giroskop harus diterapkan sehingga estimasi yang wajar dapat dilaporkan dalam x_bias
, y_bias
, dan z_bias
. Jika
implementasi tidak dapat memperkirakan drift, sensor ini tidak boleh
diimplementasikan.
Jika sensor ini ada, sensor Giroskop yang sesuai juga harus
ada dan kedua sensor harus memiliki nilai sensor_t.name
dan
sensor_t.vendor
yang sama.
Medan magnet tidak dikalibrasi
Sensor fisik yang mendasarinya: Magnetometer
Mode pelaporan: Kontinu
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
menampilkan sensor tidak bangun tidur
Sensor medan magnet yang tidak dikalibrasi melaporkan medan magnet lingkungan
bersama dengan estimasi kalibrasi besi keras. Semua nilai dalam micro-Tesla
(uT) dan dilaporkan di kolom
sensors_event_t.uncalibrated_magnetic
:
x_uncalib
: medan magnet (tanpa kompensasi besi keras) di sepanjang sumbu Xy_uncalib
: medan magnet (tanpa kompensasi besi keras) di sepanjang sumbu Yz_uncalib
: medan magnet (tanpa kompensasi besi keras) di sepanjang sumbu Zx_bias
: estimasi bias besi keras di sepanjang sumbu Xy_bias
: estimasi bias besi keras di sepanjang sumbu Yz_bias
: estimasi bias besi keras di sepanjang sumbu Z
Secara konseptual, pengukuran yang tidak dikalibrasi adalah jumlah pengukuran
yang dikalibrasi dan estimasi bias: _uncalibrated = _calibrated + _bias
.
Magnetometer yang tidak dikalibrasi memungkinkan algoritma tingkat yang lebih tinggi menangani
estimasi besi keras yang buruk. Nilai
x_bias
, y_bias
, dan z_bias
diperkirakan akan melonjak segera setelah
estimasi hardware berubah, dan nilai tersebut akan stabil selama
waktu yang tersisa.
Kalibrasi besi lunak dan kompensasi suhu harus diterapkan pada
pengukuran. Selain itu, estimasi hard-iron harus diterapkan sehingga
estimasi yang wajar dapat dilaporkan di x_bias
,
y_bias
, dan
z_bias
. Jika implementasi tidak dapat memperkirakan bias,
sensor ini tidak boleh diterapkan.
Jika sensor ini ada, sensor medan magnet yang sesuai harus
ada dan kedua sensor harus memiliki nilai sensor_t.name
dan
sensor_t.vendor
yang sama.
Sudut engsel
Mode pelaporan: Saat berubah
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
menampilkan sensor bangun
Sensor sudut engsel mengukur sudut, dalam derajat, antara dua bagian integral perangkat. Gerakan engsel yang diukur oleh jenis sensor ini diharapkan akan mengubah cara pengguna berinteraksi dengan perangkat, misalnya, dengan membentangkan atau menampilkan layar.
Sensor komposit interaksi
Beberapa sensor sebagian besar digunakan untuk mendeteksi interaksi dengan pengguna. Kami tidak mendefinisikan cara penerapan sensor tersebut, tetapi sensor tersebut harus rendah daya dan merupakan tanggung jawab produsen perangkat untuk memverifikasi kualitasnya dalam hal pengalaman pengguna.
Gestur bangun
Sensor fisik yang mendasari: Tidak ditentukan (apa pun yang daya rendah)
Reporting-mode: One-shot
Daya rendah
Hanya terapkan versi bangun sensor ini.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
menampilkan sensor bangun
Sensor gestur bangun memungkinkan perangkat diaktifkan berdasarkan gerakan perangkat tertentu. Saat sensor ini dipicu, perangkat akan berperilaku seolah-olah tombol daya ditekan, sehingga layar menyala. Perilaku ini (mengaktifkan layar saat sensor ini terpicu) mungkin dinonaktifkan oleh pengguna di setelan perangkat. Perubahan setelan tidak memengaruhi perilaku sensor: hanya apakah framework mengaktifkan layar saat dipicu. Gestur sebenarnya yang akan dideteksi tidak ditentukan, dan dapat dipilih oleh produsen perangkat.
Sensor ini harus menggunakan daya rendah, karena kemungkinan akan diaktifkan 24/7.
Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Gestur mengambil
Sensor fisik yang mendasari: Tidak ditentukan (apa pun yang daya rendah)
Reporting-mode: One-shot
Daya rendah
Hanya terapkan versi bangun sensor ini.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
menampilkan sensor bangun
Sensor gestur pengambilan dipicu saat perangkat diambil, terlepas dari tempat sebelumnya (meja, saku, tas).
Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Gestur Glance
Sensor fisik yang mendasari: Tidak ditentukan (apa pun yang berdaya rendah)
Reporting-mode: One-shot
Daya rendah
Hanya terapkan versi bangun dari sensor ini.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
menampilkan sensor bangun
Sensor gestur sekilas memungkinkan layar diaktifkan sebentar agar pengguna dapat melihat sekilas konten di layar berdasarkan gerakan tertentu. Saat sensor ini dipicu, perangkat akan mengaktifkan layar untuk sesaat agar pengguna dapat melihat sekilas notifikasi atau konten lainnya saat perangkat tetap terkunci dalam status non-interaktif (sedang tidur), lalu layar akan mati lagi. Perilaku ini (mengaktifkan layar sebentar saat sensor ini dipicu) dapat dinonaktifkan oleh pengguna di setelan perangkat. Perubahan setelan tidak memengaruhi perilaku sensor: hanya apakah framework akan mengaktifkan layar secara singkat saat dipicu. Gestur sebenarnya yang akan dideteksi tidak ditentukan, dan dapat dipilih oleh produsen perangkat.
Sensor ini harus menggunakan daya rendah, karena kemungkinan akan diaktifkan 24/7.
Setiap peristiwa sensor melaporkan 1
di
sensors_event_t.data[0]
.
Sensor IMU sumbu terbatas
Tersedia mulai Android 13, sensor IMU sumbu terbatas
adalah sensor yang mendukung kasus penggunaan ketika tidak ketiga sumbu (x, y, z)
tersedia. Jenis IMU standar di Android (seperti
SENSOR_TYPE_ACCELEROMETER
dan
SENSOR_TYPE_GYROSCOPE
)
mengasumsikan bahwa ketiga sumbu didukung. Namun, tidak semua faktor bentuk dan
perangkat mendukung akselerometer 3 sumbu dan giroskop 3 sumbu.
Sumbu terbatas akselerometer
Sensor fisik yang mendasari: Akselerometer
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
menampilkan sensor non-bangun
Sensor sumbu terbatas akselerometer setara dengan
TYPE_ACCELEROMETER
, tetapi mendukung kasus saat satu atau dua sumbu
tidak didukung.
Tiga nilai peristiwa sensor terakhir yang dilaporkan oleh sensor mewakili apakah
nilai akselerasi untuk sumbu x, y, dan z didukung atau tidak. Nilai
1.0
menunjukkan bahwa sumbu didukung, dan nilai
0
menunjukkan bahwa sumbu tidak didukung. Produsen perangkat mengidentifikasi
sumbu yang didukung pada waktu build dan nilainya tidak berubah selama
runtime.
Produsen perangkat harus menetapkan nilai akselerasi untuk sumbu yang tidak digunakan ke
0
, bukan memiliki nilai yang tidak ditentukan.
Sumbu terbatas giroskop
Sensor fisik yang mendasari: Giroskop
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
menampilkan sensor non-bangun
Sensor sumbu terbatas giroskop setara dengan TYPE_GYROSCOPE
,
tetapi mendukung kasus saat satu atau dua sumbu tidak didukung.
Tiga nilai peristiwa sensor terakhir yang dilaporkan oleh sensor menunjukkan apakah
nilai kecepatan sudut untuk sumbu x, y, dan z didukung. Nilai
1.0
menunjukkan bahwa sumbu didukung, dan nilai
0
menunjukkan bahwa sumbu tidak didukung. Produsen perangkat mengidentifikasi
sumbu yang didukung pada waktu build dan nilainya tidak berubah selama
runtime.
Produsen perangkat harus menetapkan nilai kecepatan sudut untuk sumbu yang tidak digunakan ke
0
.
Sumbu terbatas akselerometer tidak dikalibrasi
Sensor fisik yang mendasari: Akselerometer
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
menampilkan sensor non-bangun
Sensor akselerometer sumbu terbatas yang tidak dikalibrasi setara dengan
TYPE_ACCELEROMETER_UNCALIBRATED
, tetapi mendukung kasus saat satu atau
dua sumbu tidak didukung.
Tiga nilai peristiwa sensor terakhir yang dilaporkan oleh sensor menunjukkan apakah
nilai akselerasi dan bias untuk sumbu x, y, dan z didukung. Nilai
1.0
menunjukkan bahwa sumbu didukung, dan nilai
0
menunjukkan bahwa sumbu tidak didukung. Produsen perangkat mengidentifikasi
sumbu yang didukung pada waktu build dan nilainya tidak berubah selama
runtime.
Produsen perangkat harus menetapkan nilai akselerasi dan bias untuk sumbu yang tidak digunakan
ke 0
.
Sumbu terbatas giroskop tidak dikalibrasi
Sensor fisik yang mendasari: Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
menampilkan sensor bukan bangun tidur
Sensor sumbu terbatas giroskop yang tidak dikalibrasi setara dengan
TYPE_GYROSCOPE_UNCALIBRATED
, tetapi mendukung kasus ketika satu atau dua
sumbu tidak didukung.
Tiga nilai peristiwa sensor terakhir yang dilaporkan oleh sensor mewakili apakah
kecepatan sudut dan nilai drift untuk sumbu x, y, dan z didukung. Nilai
1.0
menunjukkan bahwa sumbu didukung, dan nilai
0
menunjukkan bahwa sumbu tidak didukung. Produsen perangkat mengidentifikasi
sumbu yang didukung pada waktu build dan nilainya tidak berubah selama
runtime.
Produsen perangkat harus menetapkan nilai kecepatan sudut dan drift untuk sumbu
yang tidak digunakan ke 0
.
IMU sumbu terbatas komposit
Sensor fisik yang mendasari: Kombinasi apa pun dari akselerometer 3 sumbu, giroskop 3 sumbu, akselerometer 3 sumbu yang tidak dikalibrasi, dan giroskop 3 sumbu yang tidak dikalibrasi.
Reporting-mode: Continuous
Sensor IMU sumbu terbatas komposit setara dengan sensor IMU sumbu terbatas, tetapi tidak didukung di HAL, melainkan mengonversi data sensor 3 sumbu menjadi varian sumbu terbatas yang setara. Sensor komposit ini hanya diaktifkan untuk perangkat otomotif.
Tabel berikut menunjukkan contoh konversi dari akselerometer 3 sumbu standar ke akselerometer sumbu terbatas komposit.
Nilai SensorEvent untuk SENSOR_TYPE_ACCELEROMETER | Contoh SensorEvent SENSOR_TYPE_ACCELEROMETER | SensorEvent SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES komposit |
---|---|---|
values[0] | -0,065 |
-0,065 |
nilai[1] | 0,078 |
0,078 |
values[2] | 9,808 |
9,808 |
values[3] | T/A |
1.0 |
nilai[4] | T/A |
1.0 |
values[5] | T/A |
1.0 |
Sensor otomotif
Sensor untuk mendukung kasus penggunaan otomotif.
Judul
Sensor fisik yang mendasarinya: Kombinasi GPS, magnetometer, akselerometer, dan giroskop.
Mode pelaporan: Kontinu
getDefaultSensor(SENSOR_TYPE_HEADING)
menampilkan sensor non-bangun
Tersedia dari Android 13, sensor arah tujuan
mengukur arah yang ditunjuk perangkat relatif terhadap utara sejati
dalam derajat. Sensor arah mencakup dua nilai SensorEvent
.
Satu untuk heading perangkat yang diukur dan satu untuk akurasi nilai heading
yang diberikan.
Nilai heading yang dilaporkan oleh sensor ini harus antara
0.0
(inklusif) dan 360.0
(eksklusif), dengan
0
menunjukkan utara, 90
timur, 180
selatan,
dan 270
barat.
Akurasi untuk sensor ini ditentukan pada keyakinan 68 persen. Jika distribusi dasarnya adalah normal Gaussian, akurasi adalah satu simpangan baku. Misalnya, jika sensor arah menampilkan nilai arah 60 derajat dan nilai akurasi 10 derajat, ada kemungkinan sebesar 68 persen bahwa arah sebenarnya berada antara 50 derajat dan 70 derajat.