Bagian ini menjelaskan sumbu sensor, sensor dasar, dan sensor gabungan (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).

Gambar 1. Sistem koordinat (relatif terhadap perangkat seluler) yang digunakan oleh Sensor API
Kapak otomotif
Dalam penerapan Android Automotive, sumbu ditentukan sehubungan dengan frame bodi kendaraan. Asal kerangka referensi kendaraan adalah pusat gandar belakang. Kerangka acuan kendaraan diarahkan sehingga:
- Sumbu X mengarah ke kanan dan berada pada bidang horizontal, tegak lurus terhadap bidang simetri kendaraan.
- Sumbu Y mengarah ke depan dan berada pada bidang horizontal.

Gambar 2. Sistem koordinat (relatif terhadap perangkat otomotif) yang digunakan oleh Sensor API
Kerangka referensi kendaraan adalah sistem koordinat tangan kanan. Oleh karena itu, sumbu Z menunjuk ke atas.
Sumbu Z frame referensi sejajar dengan gravitasi, yang berarti sumbu X dan sumbu Y keduanya horizontal. Akibatnya, sumbu Y mungkin tidak selalu melewati as roda depan.
Sensor dasar
Jenis sensor dasar diberi nama sesuai dengan sensor fisik yang diwakilinya. Sensor ini mengirimkan data dari satu sensor fisik (tidak seperti sensor gabungan 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 dengan dan tidak boleh disamakan 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/dtk.
- Setelah kalibrasi pabrik, kompensasi suhu dan kompensasi bias diterapkan, bias sebenarnya dari sensor Android akan berkurang, mungkin hingga titik di mana bias dijamin berada di bawah 0,01 deg/detik.
- Dalam situasi ini, kita mengatakan bahwa sensor Android memiliki bias di bawah 0,01 deg/dtk, meskipun lembar data sensor yang mendasarinya mengatakan 1 deg/dtk.
- Barometer dengan konsumsi daya 100 uW.
- Karena data yang dihasilkan perlu ditransfer dari chip ke SoC, biaya daya sebenarnya untuk mengumpulkan data dari sensor barometer Android mungkin jauh lebih tinggi, misalnya 1.000 uW.
- Dalam situasi ini, kita mengatakan bahwa sensor Android memiliki konsumsi daya sebesar 1000 uW, meskipun konsumsi daya yang diukur pada pin chip barometer adalah 100 uW.
- Magnetometer yang menggunakan daya 100 uW saat dikalibrasi, tetapi menggunakan lebih banyak daya saat
dikalibrasi.
- Rutinitas kalibrasinya mungkin memerlukan aktivasi giroskop, mengonsumsi 5.000 uW, dan menjalankan beberapa algoritma, yang memerlukan biaya 900 uW lagi.
- 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-wake-up
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 akselerasi 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 diletakkan mendatar di atas meja dan didorong di sisi kirinya ke kanan, nilai percepatan x akan positif.
- Saat perangkat diletakkan mendatar di atas meja, nilai akselerasi 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 diletakkan mendatar di atas meja dan didorong ke arah langit, nilai percepatannya lebih besar dari +9,81, yang sesuai dengan percepatan perangkat (+A m/s^2) dikurangi gaya gravitasi (-9,81 m/s^2).
Pembacaan dikalibrasi menggunakan:
- Kompensasi suhu
- Kalibrasi bias online
- Kalibrasi timbangan online
Kalibrasi bias dan skala hanya boleh diperbarui saat sensor dinonaktifkan, sehingga tidak menyebabkan lonjakan nilai selama streaming.
Akselerometer juga melaporkan seberapa akurat pembacaannya
melalui sensors_event_t.acceleration.status
. Lihat konstanta
SensorManager
’s
SENSOR_STATUS_*
untuk mengetahui informasi selengkapnya tentang kemungkinan
nilai untuk kolom ini.
Suhu ruangan
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)
menampilkan sensor non-wake-up
Sensor ini memberikan suhu sekitar (ruangan) dalam derajat Celsius.
Sensor medan magnet
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)
menampilkan sensor non-wake-up
SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD
Sensor medan magnet (juga dikenal sebagai magnetometer) melaporkan medan magnet sekitar, yang diukur di sepanjang tiga sumbu sensor.
Pengukuran dilaporkan dalam kolom x, y, dan z dari
sensors_event_t.magnetic
dan semua nilai dalam mikro-Tesla (uT).
Magnetometer juga melaporkan seberapa akurat pembacaannya
melalui sensors_event_t.magnetic.status
. Lihat konstanta
SensorManager
’s
SENSOR_STATUS_*
untuk mengetahui informasi selengkapnya tentang kemungkinan
nilai untuk kolom ini.
Pembacaan dikalibrasi menggunakan:
- Kompensasi suhu
- Kalibrasi besi lunak pabrik (atau online)
- Kalibrasi besi keras online
Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
menampilkan sensor non-wake-up
Sensor giroskop melaporkan tingkat 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 ke perangkat yang diposisikan di titik asal akan melaporkan rotasi positif jika perangkat tampak berputar berlawanan arah jarum jam. Perhatikan bahwa ini adalah definisi matematika standar rotasi positif dan tidak sesuai dengan definisi roll dalam bidang kedirgantaraan.
Pengukuran dilaporkan di kolom x, y, dan z dari
sensors_event_t.gyro
dan semua nilai dalam radian per detik (rad/s).
Pembacaan dikalibrasi menggunakan:
- Kompensasi suhu
- Kompensasi skala pabrik (atau online)
- Kalibrasi bias online (untuk menghilangkan penyimpangan)
Giroskop juga melaporkan seberapa akurat pembacaannya melalui
sensors_event_t.gyro.status
. Lihat konstanta
SensorManager
’s
SENSOR_STATUS_*
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. Fitur ini harus didasarkan pada chip giroskop biasa.
Detak jantung
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
menampilkan sensor non-wake-up
Sensor detak jantung melaporkan detak jantung saat ini dari orang yang menyentuh perangkat.
Detak jantung saat ini dalam detak per menit (BPM) dilaporkan di
sensors_event_t.heart_rate.bpm
dan status sensor dilaporkan di
sensors_event_t.heart_rate.status
. Lihat konstanta
SensorManager
’s
SENSOR_STATUS_*
untuk mengetahui informasi selengkapnya tentang kemungkinan
nilai untuk kolom ini. Secara khusus, saat aktivasi pertama, kecuali jika perangkat diketahui tidak berada di tubuh, kolom status peristiwa pertama harus ditetapkan ke SENSOR_STATUS_UNRELIABLE
. Karena sensor ini bersifat on-change,
peristiwa dibuat saat dan hanya saat heart_rate.bpm
atau
heart_rate.status
telah berubah sejak peristiwa terakhir. Peristiwa
dibuat tidak lebih cepat dari setiap sampling_period
.
Framework akan otomatis mengganti sensor_t.requiredPermission
dengan
izin yang sesuai untuk mempertahankan kompatibilitas. Framework menggunakan izin
SENSOR_PERMISSION_READ_HEART_RATE
untuk
Android 16 dan yang lebih tinggi, serta izin
SENSOR_PERMISSION_BODY_SENSORS
untuk Android 15 dan yang lebih rendah.
Ringan
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_LIGHT)
menampilkan sensor non-wake-up
Sensor cahaya melaporkan iluminasi saat ini dalam satuan lux SI.
Pengukuran dilaporkan dalam sensors_event_t.light
.
Kedekatan
Reporting-mode: On-change
Biasanya ditentukan sebagai sensor bangun
getDefaultSensor(SENSOR_TYPE_PROXIMITY)
menampilkan sensor aktivasi
Sensor kedekatan melaporkan jarak dari sensor ke permukaan terdekat yang terlihat.
Hingga Android 4.4, sensor kedekatan selalu menjadi sensor aktif, yang mengaktifkan SoC saat mendeteksi perubahan kedekatan. Setelah Android 4.4, sebaiknya terapkan versi aktif sensor ini terlebih dahulu, karena sensor ini 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
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_PRESSURE)
menampilkan sensor non-wake-up
Sensor tekanan (juga dikenal sebagai barometer) melaporkan tekanan atmosfer dalam satuan hektopascal (hPa).
Pembacaan dikalibrasi menggunakan
- Kompensasi suhu
- Kalibrasi bias pabrik
- Kalibrasi skala pabrik
Barometer sering digunakan untuk memperkirakan perubahan ketinggian. Untuk memperkirakan ketinggian absolut, tekanan permukaan laut (berubah bergantung pada cuaca) harus digunakan sebagai referensi.
Kelembapan relatif
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
menampilkan sensor non-wake-up
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. (Setiap sensor yang bukan sensor dasar disebut sensor gabungan.) Contoh sensor gabungan meliputi:
- Detektor 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 gabungan 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 mentranspor data. Sebagai contoh lain, penyimpangan vektor rotasi game bergantung pada kualitas algoritma kalibrasi dan karakteristik sensor fisik.
Tabel berikut mencantumkan jenis sensor komposit yang tersedia. Setiap sensor gabungan mengandalkan data dari satu atau beberapa sensor fisik. Hindari memilih sensor fisik pokok lainnya untuk memperkirakan hasil karena hal itu memberikan pengalaman pengguna yang buruk.
Jenis sensor | Kategori | Sensor fisik yang mendasarinya | Mode pelaporan |
---|---|---|---|
Sikap |
Akselerometer, giroskop, JANGAN GUNAKAN magnetometer |
Berkelanjutan |
|
Sikap |
Akselerometer, magnetometer, JANGAN GUNAKAN giroskop |
Berkelanjutan |
|
Gestur sekilas ![]() |
Interaksi |
Tidak ditetapkan |
One-shot |
Sikap |
Akselerometer, giroskop (jika ada), atau magnetometer (jika giroskop tidak ada) |
Berkelanjutan |
|
Belum dikalibrasi |
Giroskop |
Berkelanjutan |
|
Aktivitas |
Akselerometer, giroskop (jika ada), atau magnetometer (jika giroskop tidak ada) |
Berkelanjutan |
|
Belum dikalibrasi |
Magnetometer |
Berkelanjutan |
|
Orientasi (tidak digunakan lagi) |
Sikap |
Akselerometer, magnetometer, giroskop (jika ada) |
Berkelanjutan |
Interaksi |
Tidak ditetapkan |
One-shot |
|
Sikap |
Akselerometer, magnetometer, giroskop (jika ada) |
Berkelanjutan |
|
Aktivitas |
Akselerometer (atau yang lain asalkan daya sangat rendah) |
One-shot |
|
Aktivitas |
Akselerometer |
Saat diubah |
|
Aktivitas |
Akselerometer |
Khusus |
|
Aktivitas |
Akselerometer |
Khusus |
|
Interaksi |
Tidak ditetapkan |
One-shot |
= Sensor daya rendah
Sensor komposit aktivitas
Akselerasi linier
Sensor fisik pokok: Akselerometer dan (jika ada) giroskop (atau magnetometer jika giroskop tidak ada)
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
menampilkan sensor non-wake-up
Sensor akselerasi linear melaporkan akselerasi linear perangkat dalam frame sensor, tidak termasuk gravitasi.
Outputnya secara konseptual adalah: output akselerometer dikurangi output sensor gravitasi. Percepatan dilaporkan dalam m/s^2 di kolom x, y, dan z
pada sensors_event_t.acceleration
.
Pembacaan 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 signifikan
Sensor fisik yang mendasarinya: Akselerometer (atau yang lain asalkan berdaya rendah)
Reporting-mode: One-shot
Daya rendah
Terapkan hanya versi aktif sensor ini.
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)
menampilkan sensor aktivasi
Detektor gerakan signifikan dipicu saat mendeteksi gerakan signifikan: gerakan yang dapat menyebabkan perubahan lokasi pengguna.
Contoh gerakan signifikan tersebut adalah:
- Berjalan kaki atau bersepeda
- Duduk di dalam mobil, bus, atau kereta yang sedang bergerak
Contoh situasi yang tidak memicu gerakan signifikan:
- Ponsel di dalam saku dan orang tidak bergerak
- Ponsel berada di atas meja dan meja sedikit bergetar karena lalu lintas di dekatnya atau mesin cuci
Pada tingkat tinggi, detektor gerakan 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 berpindah lokasi.
Sensor ini harus berdaya rendah. Hal ini membuat kompromi untuk konsumsi daya yang dapat menghasilkan 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 memakan banyak daya, jadi 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 mendasarinya: Akselerometer (+ mungkin yang lain selama daya rendah)
Reporting-mode: Special (satu peristiwa per langkah yang dilakukan)
Daya rendah
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
menampilkan sensor non-wake-up
Detektor langkah menghasilkan peristiwa setiap kali pengguna melakukan langkah.
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 dalam kendaraan lain.
Sensor ini harus berdaya rendah. Artinya, jika deteksi langkah tidak dapat dilakukan di hardware, sensor ini tidak boleh ditentukan. Khususnya, saat detektor langkah diaktifkan dan akselerometer tidak, hanya langkah yang akan memicu interupsi (bukan setiap pembacaan akselerometer).
sampling_period_ns
tidak berdampak pada pendeteksi langkah.
Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Penghitung langkah
Sensor fisik yang mendasarinya: Akselerometer (+ mungkin yang lain selama daya rendah)
Reporting-mode: On-change
Daya rendah
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
menampilkan sensor non-wake-up
Penghitung langkah melaporkan jumlah langkah yang dilakukan 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 ditetapkan ke waktu saat langkah terakhir untuk peristiwa tersebut dilakukan.
Lihat jenis sensor Detektor langkah untuk makna waktu langkah.
Dibandingkan dengan detektor langkah, penghitung langkah dapat memiliki latensi yang lebih tinggi (hingga 10 detik). Berkat latensi ini, sensor ini memiliki akurasi yang tinggi; jumlah langkah setelah pengukuran selama sehari penuh harus berada dalam 10% dari jumlah langkah sebenarnya. Detektor langkah dan penghitung langkah mendeteksi saat pengguna berjalan, berlari, dan menaiki tangga. Pemberitahuan 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 sensor ini beroperasi, sensor ini tidak boleh mengganggu sensor lain, khususnya, akselerometer, yang mungkin sedang digunakan.
Jika perangkat tertentu tidak dapat mendukung mode operasi ini, maka jenis sensor ini tidak boleh dilaporkan oleh HAL. Artinya, tidak dapat diterima untuk "mengemulasi" sensor ini di HAL.
Sensor ini harus berdaya rendah. Artinya, jika deteksi langkah tidak dapat dilakukan di hardware, sensor ini tidak boleh ditentukan. Khususnya, saat penghitung langkah diaktifkan dan akselerometer tidak, hanya langkah yang akan memicu interupsi (bukan data akselerometer).
Detektor kemiringan
Sensor fisik yang mendasarinya: Akselerometer (+ mungkin yang lain selama daya rendah)
Mode pelaporan: Khusus
Daya rendah
Terapkan hanya versi aktif sensor ini.
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)
menampilkan sensor aktivasi
Detektor kemiringan menghasilkan peristiwa setiap kali peristiwa kemiringan terdeteksi.
Peristiwa kemiringan ditentukan oleh arah perubahan gravitasi rata-rata jendela 2 detik sebesar minimal 35 derajat sejak aktivasi atau peristiwa terakhir yang dihasilkan oleh sensor. Berikut algoritmanya:
reference_estimated_gravity
= rata-rata pengukuran akselerometer selama satu detik pertama setelah aktivasi atau estimasi 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 boleh memicu
peristiwa kemiringan. Misalnya, belokan tajam atau akselerasi kuat saat mengemudikan
mobil tidak akan 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 tidak meningkatkan konsumsi daya secara signifikan. Ini adalah
sensor berdaya rendah yang memungkinkan SoC masuk ke mode penangguhan. Jangan
mengemulasi sensor ini di HAL. Setiap peristiwa sensor melaporkan 1
di
sensors_event_t.data[0]
.
Sensor gabungan sikap
Vektor rotasi
Sensor fisik yang mendasarinya: Akselerometer, magnetometer, dan giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)
menampilkan
sensor non-wake-up
Sensor vektor rotasi melaporkan orientasi perangkat relatif terhadap frame koordinat Timur-Utara-Atas. Biasanya diperoleh dengan mengintegrasikan pembacaan akselerometer, giroskop, dan magnetometer. Sistem koordinat East-North-Up ditentukan sebagai basis ortonormal langsung dengan:
- X mengarah ke timur dan bersinggungan dengan tanah.
- Y mengarah ke utara dan bersinggungan dengan tanah.
- Z mengarah ke langit dan tegak lurus dengan tanah.
Orientasi ponsel diwakili oleh rotasi yang diperlukan untuk menyelaraskan koordinat East-North-Up 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 dengan sudut theta di sekitar
sumbu rot_axis
untuk beralih dari orientasi perangkat referensi (sejajar Timur-Utara-Atas)
ke
orientasi perangkat saat ini. Rotasi dienkode sebagai empat komponen x, y, z, w tanpa unit dari quaternion 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 unit yang merepresentasikan sumbu rotasi theta
adalah sudut rotasi
Kuaternion adalah kuaternion unit: Kuaternion harus memiliki norma 1
.
Jika hal ini tidak dipastikan, perilaku klien akan tidak menentu.
Selain itu, sensor ini melaporkan perkiraan akurasi arah:
sensors_event_t.data[4] = estimated_accuracy
(dalam radian)
Error heading 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 mengompensasi penyimpangan giroskop, dan tidak dapat diterapkan hanya menggunakan akselerometer dan magnetometer.
Vektor rotasi game
Sensor fisik yang mendasarinya: Akselerometer dan giroskop (tanpa magnetometer)
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)
menampilkan sensor non-wake-up
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 referensi lain. Referensi tersebut diizinkan untuk bergeser dengan urutan besaran yang sama dengan pergeseran giroskop di sekitar sumbu Z.
Lihat sensor Vektor rotasi untuk mengetahui detail tentang
cara menyetel sensors_event_t.data[0-3]
. Sensor ini tidak melaporkan perkiraan akurasi arah: sensors_event_t.data[4]
dicadangkan dan harus disetel ke 0
.
Dalam kasus ideal, ponsel yang diputar dan kembali ke orientasi dunia nyata yang sama harus melaporkan vektor rotasi game yang sama.
Sensor ini harus didasarkan pada giroskop dan akselerometer. Tidak dapat menggunakan magnetometer sebagai input, selain secara tidak langsung, melalui estimasi bias giroskop.
Gravitasi
Sensor fisik pokok: Akselerometer dan (jika ada) giroskop (atau magnetometer jika giroskop tidak ada)
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GRAVITY)
menampilkan sensor non-wake-up
Sensor gravitasi melaporkan arah dan besarnya gravitasi dalam koordinat perangkat.
Komponen vektor gravitasi dilaporkan dalam m/s^2 di kolom x, y, dan z
dari sensors_event_t.acceleration
.
Saat perangkat dalam keadaan diam, output sensor gravitasi harus sama dengan output akselerometer. Di Bumi, besarnya 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: Berkelanjutan
Daya rendah
getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)
menampilkan sensor non-wake-up
Vektor rotasi geomagnetik mirip dengan sensor vektor rotasi, tetapi menggunakan magnetometer dan tanpa 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 Vektor rotasi untuk mengetahui detail tentang
cara menyetel sensors_event_t.data[0-4]
.
Sama seperti untuk sensor vektor rotasi, error heading harus kurang dari
estimasi akurasi (sensors_event_t.data[4]
) 95% dari waktu.
Sensor ini harus berdaya rendah, sehingga harus diimplementasikan di hardware.
Orientasi (tidak digunakan lagi)
Sensor fisik yang mendasarinya: Akselerometer, magnetometer, dan (jika ada) giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
menampilkan sensor non-wake-up
Catatan: Ini adalah jenis sensor lama yang sudah tidak digunakan lagi di Android SDK. Sensor ini telah digantikan oleh sensor vektor rotasi, yang ditentukan dengan lebih jelas. Gunakan sensor vektor rotasi daripada sensor orientasi jika memungkinkan.
Sensor orientasi melaporkan sikap perangkat. Pengukuran
dilaporkan dalam derajat di kolom x, y, dan z dari
sensors_event_t.orientation
:
sensors_event_t.orientation.x
: azimut, 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
: kemiringan, 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 putar bernilai positif dalam arah searah jarum jam. (Secara matematis, harus positif dalam arah berlawanan arah jarum jam):

Gambar 3. Orientasi relatif terhadap perangkat
Definisi ini berbeda dengan yaw, pitch, dan roll yang digunakan dalam penerbangan di mana sumbu X berada di sepanjang sisi panjang pesawat (ekor ke hidung).
Sensor orientasi juga melaporkan seberapa akurat pembacaannya melalui sensors_event_t.orientation.status
. Lihat konstanta
SensorManager
’s
SENSOR_STATUS_*
untuk mengetahui informasi selengkapnya tentang
nilai yang mungkin 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 "loncatan" dari koreksi yang diterapkan melalui kalibrasi. Beberapa aplikasi mungkin lebih memilih hasil yang tidak dikalibrasi ini karena lebih lancar dan lebih andal. Misalnya, jika aplikasi mencoba melakukan fusi sensornya sendiri, pengenalan kalibrasi justru dapat mendistorsi hasil.
Akselerometer tidak dikalibrasi
Sensor fisik yang mendasarinya: Akselerometer
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
menampilkan sensor non-wake-up
Sensor akselerometer yang tidak dikalibrasi melaporkan akselerasi perangkat di sepanjang tiga sumbu sensor tanpa koreksi bias apa pun (bias pabrik dan kompensasi suhu diterapkan pada pengukuran yang tidak dikalibrasi), beserta perkiraan bias.
Semua nilai dalam satuan SI (m/s^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 sepanjang sumbu Xy_bias
: estimasi bias di sepanjang sumbu Yz_bias
: estimasi bias di sepanjang sumbu Z
Giroskop yang tidak dikalibrasi
Sensor fisik yang mendasarinya: Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
menampilkan sensor non-wake-up
Giroskop yang tidak dikalibrasi melaporkan kecepatan rotasi di sekitar sumbu sensor tanpa menerapkan kompensasi bias padanya, beserta perkiraan bias. Semua
nilai dalam radian/detik dan dilaporkan di kolom
sensors_event_t.uncalibrated_gyro
:
x_uncalib
: kecepatan sudut (tanpa kompensasi penyimpangan) di sekitar sumbu Xy_uncalib
: kecepatan sudut (tanpa kompensasi penyimpangan) di sekitar sumbu Yz_uncalib
: kecepatan sudut (tanpa kompensasi penyimpangan) di sekitar sumbu Zx_bias
: perkiraan penyimpangan di sekitar sumbu Xy_bias
: perkiraan penyimpangan di sekitar sumbu Yz_bias
: perkiraan penyimpangan di sekitar sumbu Z
Secara konseptual, pengukuran yang tidak dikalibrasi adalah jumlah pengukuran yang dikalibrasi dan perkiraan bias: _uncalibrated = _calibrated + _bias
.
Nilai x_bias
,
y_bias
, dan z_bias
diperkirakan akan berubah
segera setelah perkiraan bias
berubah, dan nilai tersebut akan stabil selama sisa waktu.
Lihat definisi sensor giroskop untuk mengetahui detail 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 di x_bias
,
y_bias
, dan z_bias
. Jika
implementasi tidak dapat memperkirakan penyimpangan, sensor ini tidak boleh
diimplementasikan.
Jika sensor ini ada, maka 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: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
menampilkan sensor non-wake-up
Sensor medan magnet yang tidak dikalibrasi melaporkan medan magnet sekitar bersama dengan perkiraan kalibrasi besi keras. Semua nilai dalam mikro-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
: perkiraan bias besi keras di sepanjang sumbu Z
Secara konseptual, pengukuran yang tidak dikalibrasi adalah jumlah pengukuran yang dikalibrasi dan perkiraan 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 berubah segera setelah
perkiraan perubahan besi keras, dan akan stabil selama sisa
waktu.
Kalibrasi besi lunak dan kompensasi suhu harus diterapkan pada
pengukuran. Selain itu, estimasi besi keras harus diterapkan agar
estimasi yang wajar dapat dilaporkan di x_bias
,
y_bias
, dan
z_bias
. Jika implementasi tidak dapat memperkirakan bias,
maka sensor ini tidak boleh diterapkan.
Jika sensor ini ada, maka sensor medan magnet yang sesuai harus ada dan kedua sensor harus memiliki nilai sensor_t.name
dan sensor_t.vendor
yang sama.
Sudut engsel
Reporting-mode: On-change
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
menampilkan sensor aktivasi
Sensor sudut engsel mengukur sudut, dalam derajat, antara dua bagian integral perangkat. Pergerakan engsel yang diukur oleh jenis sensor ini diharapkan mengubah cara pengguna dapat berinteraksi dengan perangkat, misalnya, dengan membentangkan atau menampilkan layar.
Sensor gabungan interaksi
Beberapa sensor sebagian besar digunakan untuk mendeteksi interaksi dengan pengguna. Kami tidak menentukan cara sensor tersebut harus diimplementasikan, tetapi sensor tersebut harus berdaya rendah dan tanggung jawab produsen perangkat untuk memverifikasi kualitasnya dalam hal pengalaman pengguna.
Gestur aktif
Sensor fisik yang mendasarinya: Tidak ditentukan (apa pun yang berdaya rendah)
Reporting-mode: One-shot
Daya rendah
Terapkan hanya versi aktif sensor ini.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
menampilkan sensor aktivasi
Sensor gestur aktif memungkinkan perangkat diaktifkan berdasarkan gerakan khusus perangkat. Saat sensor ini dipicu, perangkat akan berperilaku seolah-olah tombol daya ditekan, sehingga layar menyala. Perilaku ini (mengaktifkan layar saat sensor ini dipicu) dapat 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 memiliki daya rendah, karena kemungkinan akan diaktifkan 24/7.
Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Mengambil gestur
Sensor fisik yang mendasarinya: Tidak ditentukan (apa pun yang berdaya rendah)
Reporting-mode: One-shot
Daya rendah
Terapkan hanya versi aktif sensor ini.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
menampilkan sensor aktivasi
Sensor gestur angkat dipicu saat perangkat diangkat terlepas dari tempatnya sebelumnya (meja, saku, tas).
Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Gestur sekilas
Sensor fisik yang mendasarinya: Tidak ditentukan (apa pun yang berdaya rendah)
Reporting-mode: One-shot
Daya rendah
Terapkan hanya versi aktif sensor ini.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
menampilkan sensor aktivasi
Sensor gestur sekilas memungkinkan layar diaktifkan sebentar agar pengguna dapat melihat konten di layar berdasarkan gerakan tertentu. Saat sensor ini dipicu, perangkat akan mengaktifkan layar sebentar untuk memungkinkan pengguna melihat sekilas notifikasi atau konten lain saat perangkat tetap terkunci dalam keadaan tidak interaktif (tidur), lalu layar akan dinonaktifkan 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 mengaktifkan layar sebentar saat dipicu. Gestur sebenarnya yang akan dideteksi tidak ditentukan, dan dapat dipilih oleh produsen perangkat.
Sensor ini harus memiliki 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 dari Android 13, sensor IMU sumbu terbatas
adalah sensor yang mendukung kasus penggunaan yang tidak semuanya tiga 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.
Akselerometer dengan sumbu terbatas
Sensor fisik yang mendasarinya: Akselerometer
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
menampilkan sensor non-wake-up
Sensor akselerometer dengan sumbu terbatas setara dengan
TYPE_ACCELEROMETER
tetapi mendukung kasus ketika satu atau dua sumbu
tidak didukung.
Tiga nilai peristiwa sensor terakhir yang dilaporkan oleh sensor menunjukkan apakah
nilai akselerasi 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 menyetel nilai akselerasi untuk sumbu yang tidak digunakan ke
0
, bukan memiliki nilai yang tidak ditentukan.
Sumbu terbatas giroskop
Sensor fisik yang mendasarinya: Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
menampilkan sensor non-wake-up
Sensor aksis terbatas giroskop setara dengan TYPE_GYROSCOPE
tetapi mendukung kasus ketika satu atau dua aksis 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 menyetel nilai kecepatan sudut untuk sumbu yang tidak digunakan ke
0
.
Akselerometer dengan sumbu terbatas tidak dikalibrasi
Sensor fisik yang mendasarinya: Akselerometer
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
menampilkan sensor non-wake-up
Sensor akselerometer dengan 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 menyetel nilai akselerasi dan bias untuk sumbu yang tidak digunakan
ke 0
.
Giroskop dengan sumbu terbatas yang tidak dikalibrasi
Sensor fisik yang mendasarinya: Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
menampilkan sensor non-wake-up
Sensor giroskop dengan sumbu terbatas 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 menunjukkan apakah
nilai kecepatan sudut dan penyimpangan 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 menyetel nilai kecepatan sudut dan penyimpangan untuk sumbu yang tidak digunakan ke 0
.
IMU sumbu terbatas komposit
Sensor fisik yang mendasarinya: Kombinasi apa pun dari sensor akselerometer 3 sumbu, giroskop 3 sumbu, akselerometer 3 sumbu yang tidak dikalibrasi, dan giroskop 3 sumbu yang tidak dikalibrasi.
Mode pelaporan: Berkelanjutan
Sensor IMU sumbu terbatas komposit setara dengan sensor IMU sumbu terbatas, tetapi alih-alih didukung di HAL, sensor ini mengonversi data sensor 3 sumbu menjadi varian sumbu terbatas yang setara. Sensor gabungan 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 |
values[1] | 0,078 |
0,078 |
values[2] | 9,808 |
9,808 |
values[3] | T/A |
1.0 |
values[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: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_HEADING)
menampilkan sensor non-wake-up
Tersedia mulai 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 arah 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, akurasinya adalah satu simpangan baku. Misalnya, jika sensor heading menampilkan nilai heading 60 derajat dan nilai akurasi 10 derajat, ada peluang 68 persen bahwa heading sebenarnya berada antara 50 derajat dan 70 derajat.