Bagian ini menjelaskan sumbu sensor, sensor dasar, dan sensor komposit (aktivitas, sikap, tidak terkalibrasi, dan interaksi).
Sumbu sensor
Nilai peristiwa sensor dari banyak sensor dinyatakan dalam bingkai tertentu yang bersifat statis relatif terhadap perangkat.
Sumbu perangkat seluler
Sensor API hanya bersifat relatif terhadap orientasi alami layar (sumbu tidak tertukar saat orientasi layar perangkat berubah.
![Sistem koordinat API sensor untuk perangkat seluler](https://developer.android.google.cn/images/axis_device.png?authuser=3&hl=id)
Gambar 1. Sistem koordinat (relatif terhadap perangkat seluler) yang digunakan oleh Sensor API
Sumbu otomotif
Dalam implementasi Android Automotive, sumbu ditentukan berdasarkan rangka bodi kendaraan. Asal usul kerangka acuan kendaraan adalah bagian tengah poros belakang. Kerangka acuan kendaraan diorientasikan sedemikian rupa sehingga:
- Sumbu X menunjuk ke kanan dan berada pada bidang mendatar, tegak lurus terhadap bidang simetri kendaraan.
- Sumbu Y mengarah ke depan dan berada pada bidang horizontal.
![Sistem koordinat API sensor untuk perangkat otomotif](https://source.android.google.cn/static/docs/core/interaction/sensors/images/axis_auto.png?authuser=3&hl=id)
Gambar 2. Sistem koordinat (relatif terhadap perangkat otomotif) yang digunakan oleh Sensor API
Kerangka acuan kendaraan adalah sistem koordinat tangan kanan. Oleh karena itu, sumbu Z mengarah ke atas.
Sumbu Z pada kerangka acuan sejajar dengan gravitasi, artinya sumbu X dan sumbu Y keduanya horizontal. Akibatnya, sumbu Y tidak selalu melewati poros depan.
Sensor dasar
Jenis sensor dasar diberi nama berdasarkan sensor fisik yang diwakilinya. Sensor ini menyampaikan data dari satu sensor fisik (berbeda dengan 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 dan berbeda dengan sensor fisik yang mendasarinya. Data dari sensor dasar bukanlah keluaran mentah dari sensor fisik karena koreksi (seperti kompensasi bias dan kompensasi suhu) diterapkan.
Misalnya, karakteristik sensor dasar mungkin berbeda dari karakteristik sensor fisik yang mendasarinya dalam kasus penggunaan berikut:
- Sebuah chip giroskop dinilai memiliki rentang bias 1 derajat/detik.
- Setelah kalibrasi pabrik, kompensasi suhu dan kompensasi bias diterapkan, bias sebenarnya dari sensor Android akan berkurang, mungkin sampai pada titik di mana bias dijamin berada di bawah 0,01 derajat/detik.
- Dalam situasi ini, kami mengatakan bahwa sensor Android memiliki bias di bawah 0,01 derajat/detik, meskipun lembar data sensor yang mendasarinya menyatakan 1 derajat/detik.
- Barometer dengan konsumsi daya 100 uW.
- Karena data yang dihasilkan perlu dipindahkan dari chip ke SoC, biaya daya sebenarnya untuk mengumpulkan data dari sensor barometer Android mungkin jauh lebih tinggi, misalnya 1000 uW.
- Dalam situasi ini, kita katakan bahwa sensor Android mempunyai konsumsi daya sebesar 1000 uW, padahal konsumsi daya yang diukur pada ujung chip barometer adalah 100uW.
- Magnetometer yang mengkonsumsi 100uW saat dikalibrasi, tetapi mengkonsumsi lebih banyak saat kalibrasi.
- Rutinitas kalibrasinya mungkin memerlukan pengaktifan giroskop, mengonsumsi 5000 uW, dan menjalankan beberapa algoritme, dengan biaya 900 uW lagi.
- Dalam situasi ini, kami mengatakan konsumsi daya maksimum sensor Android (magnetometer) adalah 6000 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)
mengembalikan sensor non-bangun
Sensor akselerometer melaporkan percepatan perangkat di sepanjang tiga sumbu sensor. Percepatan yang diukur mencakup percepatan fisik (perubahan kecepatan) dan gravitasi. Pengukuran dilaporkan di bidang x, y, dan z dari sensor_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 jatuh bebas.
- Jika alat diletakkan rata di atas meja dan didorong pada sisi kirinya ke kanan, nilai percepatan x bernilai positif.
- Ketika alat diletakkan rata di atas meja, nilai percepatan sepanjang z adalah +9,81 alo, yang setara dengan percepatan alat (0 m/s^2) dikurangi gaya gravitasi (-9,81 m/s^2).
- Ketika perangkat diletakkan rata di atas meja dan didorong ke arah langit, nilai percepatannya lebih besar dari +9,81, yang setara 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, untuk menghindari lonjakan nilai selama streaming.
Akselerometer juga melaporkan seberapa akurat pembacaan yang diharapkan melalui sensors_event_t.acceleration.status
. Lihat konstanta SENSOR_STATUS_*
SensorManager
untuk informasi lebih lanjut tentang kemungkinan nilai untuk bidang ini.
Suhu lingkungan
Mode pelaporan: Sedang berubah
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)
mengembalikan sensor non-bangun
Sensor ini memberikan suhu sekitar (ruangan) dalam derajat Celcius.
Sensor medan magnet
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)
mengembalikan sensor non-bangun
SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD
Sensor medan magnet (juga dikenal sebagai magnetometer) melaporkan medan magnet sekitar, yang diukur sepanjang tiga sumbu sensor.
Pengukuran dilaporkan di bidang x, y, dan z di sensors_event_t.magnetic
dan semua nilai dalam mikro-Tesla (uT).
Magnetometer juga melaporkan seberapa akurat pembacaan yang diharapkan melalui sensors_event_t.magnetic.status
. Lihat konstanta SENSOR_STATUS_*
SensorManager
untuk informasi lebih lanjut tentang kemungkinan nilai untuk bidang ini.
Pembacaan dikalibrasi menggunakan:
- Kompensasi suhu
- Kalibrasi besi lunak dari pabrik (atau online).
- Kalibrasi besi keras online
Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
mengembalikan sensor non-bangun
Sensor giroskop melaporkan laju rotasi perangkat di sekitar tiga sumbu sensor.
Rotasi positif berlawanan arah jarum jam (aturan tangan kanan). Artinya, seorang pengamat yang melihat dari beberapa lokasi positif pada sumbu x, y, atau z pada perangkat yang diposisikan di titik asal akan melaporkan rotasi positif jika perangkat tersebut tampak berputar berlawanan arah jarum jam. Perhatikan bahwa ini adalah definisi matematis standar dari rotasi positif dan tidak sesuai dengan definisi roll dirgantara.
Pengukuran dilaporkan dalam bidang x, y, dan z pada 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 pembacaan yang diharapkan melalui sensors_event_t.gyro.status
. Lihat konstanta SENSOR_STATUS_*
SensorManager
untuk informasi lebih lanjut tentang kemungkinan nilai untuk bidang ini.
Giroskop tidak dapat ditiru berdasarkan magnetometer dan akselerometer, karena hal ini akan menyebabkan berkurangnya konsistensi dan daya tanggap lokal. Itu harus didasarkan pada chip giroskop biasa.
Detak jantung
Mode pelaporan: Sedang berubah
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
mengembalikan sensor non-bangun
Sensor detak jantung melaporkan detak jantung orang yang menyentuh perangkat saat ini.
Denyut jantung saat ini dalam detak 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 lebih lanjut tentang kemungkinan nilai untuk bidang ini. Khususnya, pada aktivasi pertama, kecuali perangkat diketahui tidak berada di badan, bidang status peristiwa pertama harus disetel ke SENSOR_STATUS_UNRELIABLE
. Karena sensor ini sedang berubah, peristiwa dihasilkan ketika dan hanya ketika heart_rate.bpm
atau heart_rate.status
telah berubah sejak peristiwa terakhir. Peristiwa dihasilkan tidak lebih cepat dari setiap sampling_period
.
sensor_t.requiredPermission
selalu SENSOR_PERMISSION_BODY_SENSORS
.
Lampu
Mode pelaporan: Sedang berubah
getDefaultSensor(SENSOR_TYPE_LIGHT)
mengembalikan sensor non-bangun
Sensor cahaya melaporkan penerangan saat ini dalam satuan SI lux.
Pengukuran dilaporkan di sensors_event_t.light
.
Kedekatan
Mode pelaporan: Sedang berubah
Biasanya didefinisikan sebagai sensor bangun
getDefaultSensor(SENSOR_TYPE_PROXIMITY)
mengembalikan sensor bangun
Sensor jarak melaporkan jarak dari sensor ke permukaan terdekat yang terlihat.
Hingga Android 4.4, sensor jarak selalu menjadi sensor bangun, membangunkan SoC ketika mendeteksi perubahan jarak. Setelah Android 4.4, kami menyarankan untuk menerapkan versi bangun dari sensor ini terlebih dahulu, karena sensor ini digunakan untuk menghidupkan dan mematikan layar saat melakukan panggilan telepon.
Pengukuran dilaporkan dalam sentimeter di sensors_event_t.distance
. Perhatikan bahwa beberapa sensor jarak hanya mendukung pengukuran biner "dekat" atau "jauh". Dalam hal ini, sensor melaporkan nilai sensor_t.maxRange
dalam keadaan "jauh" dan nilai yang kurang dari sensor_t.maxRange
dalam keadaan "dekat".
Tekanan
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_PRESSURE)
mengembalikan sensor non-bangun
Sensor tekanan (juga dikenal sebagai barometer) melaporkan tekanan atmosfer dalam 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 tergantung cuaca) harus digunakan sebagai acuan.
Kelembaban relatif
Mode pelaporan: Sedang berubah
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
mengembalikan sensor non-bangun
Sensor kelembaban relatif mengukur kelembaban relatif udara sekitar dan mengembalikan 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:
- Detektor langkah dan gerakan signifikan , yang biasanya didasarkan pada akselerometer, namun dapat juga didasarkan pada sensor lain, jika konsumsi daya dan keakuratannya dapat diterima.
- Vektor rotasi permainan , berdasarkan akselerometer dan giroskop.
- Giroskop yang tidak dikalibrasi , yang mirip dengan sensor dasar giroskop, tetapi kalibrasi bias dilaporkan secara terpisah dan bukan dikoreksi dalam pengukuran.
Seperti halnya sensor dasar, karakteristik sensor komposit berasal dari karakteristik data akhirnya. Misalnya, konsumsi daya dari vektor rotasi permainan mungkin sama dengan jumlah konsumsi daya dari chip akselerometer, chip giroskop, chip yang memproses data, dan bus yang mengangkut data. Contoh lainnya, penyimpangan vektor rotasi permainan sangat bergantung pada kualitas algoritma kalibrasi dan juga 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 lain yang mendasarinya untuk memperkirakan hasil karena memberikan pengalaman pengguna yang buruk.
Jenis sensor | Kategori | Sensor fisik yang mendasari | Modus pelaporan |
---|---|---|---|
Sikap | Akselerometer, giroskop, TIDAK BOLEH MENGGUNAKAN magnetometer | Kontinu | |
Sikap | Akselerometer, magnetometer, TIDAK BOLEH MENGGUNAKAN giroskop | Kontinu | |
Gerakan sekilas ![]() | Interaksi | Belum diartikan | Satu tembakan |
Sikap | Akselerometer, giroskop | Kontinu | |
Tidak dikalibrasi | Giroskop | Kontinu | |
Aktivitas | Akselerometer, giroskop (jika ada), atau magnetometer (jika gyro tidak ada) | Kontinu | |
Tidak dikalibrasi | magnetometer | Kontinu | |
Orientasi (tidak digunakan lagi) | Sikap | Akselerometer, magnetometer, giroskop (jika ada) | Kontinu |
Interaksi | Belum diartikan | Satu tembakan | |
Sikap | Akselerometer, magnetometer, giroskop | Kontinu | |
Aktivitas | Akselerometer (atau lainnya asalkan dayanya sangat rendah) | Satu tembakan | |
Aktivitas | Akselerometer | Dalam perubahan | |
Aktivitas | Akselerometer | Spesial | |
Aktivitas | Akselerometer | Spesial | |
Interaksi | Belum diartikan | Satu tembakan |
= Sensor daya rendah
Sensor komposit aktivitas
Akselerasi linier
Sensor fisik yang mendasari: Akselerometer dan (jika ada) giroskop (atau magnetometer jika giroskop tidak ada)
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
mengembalikan sensor non-bangun
Sensor percepatan linier melaporkan percepatan linier perangkat dalam bingkai sensor, tidak termasuk gravitasi.
Keluarannya secara konseptual: keluaran akselerometer dikurangi keluaran sensor gravitasi . Dilaporkan dalam m/s^2 di bidang x, y, dan z dari sensors_event_t.acceleration
.
Pembacaan pada semua sumbu harus mendekati 0 saat perangkat tidak bergerak.
Jika perangkat memiliki giroskop, sensor percepatan linier harus menggunakan giroskop dan akselerometer sebagai masukan.
Jika perangkat tidak memiliki giroskop, sensor percepatan linier harus menggunakan akselerometer dan magnetometer sebagai masukan.
Gerakan yang signifikan
Sensor fisik yang mendasari: Akselerometer (atau lainnya selama daya rendah)
Mode pelaporan: Satu kali pengambilan gambar
Daya rendah
Terapkan hanya versi bangun dari sensor ini.
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)
mengembalikan sensor bangun
Detektor gerakan signifikan terpicu saat mendeteksi gerakan signifikan : gerakan yang mungkin menyebabkan perubahan lokasi pengguna.
Contoh gerakan penting tersebut adalah:
- Berjalan kaki atau bersepeda
- Duduk di dalam mobil, kereta, atau kereta yang bergerak
Contoh situasi yang tidak memicu pergerakan signifikan:
- Telepon di saku dan orang tidak bergerak
- Telepon ada 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 dalam penentuan lokasi. Saat algoritme pelokalan mendeteksi bahwa perangkat dalam keadaan statis, algoritme tersebut dapat beralih ke mode daya rendah, yang mengandalkan gerakan signifikan untuk membangunkan perangkat saat pengguna berpindah lokasi.
Sensor ini harus berdaya rendah. Hal ini mengorbankan konsumsi daya yang mungkin menghasilkan sejumlah kecil negatif palsu. Hal ini dilakukan karena beberapa alasan:
- Tujuan dari sensor ini adalah untuk menghemat daya.
- Memicu kejadian ketika pengguna tidak bergerak (positif palsu) membutuhkan banyak daya, jadi hal ini harus dihindari.
- Tidak memicu suatu peristiwa ketika pengguna sedang 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: Spesial (satu peristiwa per langkah yang diambil)
Daya rendah
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
mengembalikan sensor non-bangun
Detektor langkah menghasilkan peristiwa setiap kali pengguna mengambil langkah.
Stempel waktu peristiwa sensors_event_t.timestamp
berhubungan dengan saat kaki menyentuh tanah, sehingga menghasilkan variasi akselerasi yang tinggi.
Dibandingkan dengan penghitung langkah, detektor langkah harus memiliki latensi lebih rendah (kurang dari dua detik). Baik pendeteksi langkah maupun penghitung langkah mendeteksi saat pengguna sedang berjalan, berlari, dan menaiki tangga. Mereka tidak boleh terpicu saat pengguna sedang bersepeda, mengemudi, atau berada di kendaraan lain.
Sensor ini harus berdaya rendah. Artinya, jika deteksi langkah tidak dapat dilakukan di perangkat keras, sensor ini tidak boleh ditentukan. Khususnya, ketika detektor langkah diaktifkan dan akselerometer tidak, hanya langkah yang akan memicu interupsi (tidak 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 mendasari: Akselerometer (+ mungkin yang lain selama daya rendah)
Mode pelaporan: Sedang berubah
Daya rendah
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
mengembalikan sensor non-bangun
Penghitung langkah melaporkan jumlah langkah yang diambil oleh pengguna sejak reboot terakhir saat diaktifkan.
Pengukuran dilaporkan sebagai uint64_t
di sensors_event_t.step_counter
dan disetel ulang ke nol hanya saat sistem di-boot ulang.
Stempel waktu acara diatur ke waktu ketika langkah terakhir untuk acara tersebut diambil.
Lihat jenis sensor pendeteksi langkah untuk mengetahui waktu suatu langkah.
Dibandingkan dengan pendeteksi langkah, penghitung langkah dapat memiliki latensi lebih tinggi (hingga 10 detik). Berkat latensi ini, sensor ini memiliki akurasi yang tinggi; jumlah langkah setelah pengukuran sehari penuh harus berada dalam 10% dari jumlah langkah sebenarnya. Baik pendeteksi langkah maupun penghitung langkah mendeteksi saat pengguna sedang berjalan, berlari, dan menaiki tangga. Mereka tidak boleh terpicu saat pengguna sedang bersepeda, mengemudi, atau berada di kendaraan lain.
Perangkat keras harus memastikan jumlah langkah internal tidak pernah melebihi. Ukuran minimum penghitung internal perangkat keras harus 16 bit. Jika terjadi overflow (paling banyak setiap ~2^16 langkah), SoC dapat diaktifkan sehingga pengemudi dapat melakukan pemeliharaan counter.
Sebagaimana 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, "meniru" sensor ini di HAL tidak dapat diterima.
Sensor ini harus berdaya rendah. Artinya, jika deteksi langkah tidak dapat dilakukan di perangkat keras, sensor ini tidak boleh ditentukan. Khususnya, ketika penghitung langkah diaktifkan dan akselerometer tidak, hanya langkah yang akan memicu interupsi (bukan data akselerometer).
Detektor kemiringan
Sensor fisik yang mendasari: Akselerometer (+ mungkin yang lain selama daya rendah)
Mode pelaporan: Spesial
Daya rendah
Terapkan hanya versi bangun dari sensor ini.
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)
mengembalikan sensor bangun
Detektor kemiringan menghasilkan peristiwa setiap kali peristiwa kemiringan terdeteksi.
Peristiwa kemiringan ditentukan oleh arah gravitasi rata-rata jendela 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 accelerometer selama 2 detik terakhir. - Dipicu ketika
angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees
Akselerasi besar tanpa perubahan orientasi ponsel seharusnya tidak memicu kejadian miring. Misalnya, tikungan tajam atau akselerasi yang kuat saat mengendarai mobil tidak boleh memicu kejadian miring, meskipun sudut akselerasi rata-rata mungkin berbeda lebih dari 35 derajat. Biasanya, sensor ini diimplementasikan hanya dengan bantuan accelerometer. 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 meniru sensor ini di HAL. Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Sensor komposit sikap
Vektor rotasi
Sensor fisik yang mendasari: Akselerometer, magnetometer, dan giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)
mengembalikan sensor non-bangun
Sensor vektor rotasi melaporkan orientasi perangkat relatif terhadap bingkai koordinat Timur-Utara-Atas. Biasanya diperoleh dengan integrasi pembacaan accelerometer, giroskop, dan magnetometer. Sistem koordinat Timur-Utara-Atas didefinisikan sebagai basis ortonormal langsung dimana:
- 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 telepon diwakili oleh rotasi yang diperlukan untuk menyelaraskan koordinat Timur-Utara-Atas dengan koordinat telepon. Artinya, menerapkan rotasi ke bingkai dunia (X,Y,Z) akan menyelaraskannya dengan koordinat telepon (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 dikodekan sebagai empat komponen x, y, z, w tanpa satuan dari angka empat satuan:
-
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)
Di mana:
- Bidang x, y, dan z pada
rot_axis
adalah koordinat Timur-Utara-Atas dari vektor satuan panjang yang mewakili sumbu rotasi -
theta
adalah sudut rotasi
Angka empat adalah satuan angka empat: Harus sesuai dengan norma 1
. Kegagalan untuk memastikan hal ini akan menyebabkan perilaku klien yang tidak menentu.
Selain itu, sensor ini melaporkan perkiraan akurasi arah:
sensors_event_t.data[4] = estimated_accuracy
(dalam radian)
Kesalahan judul harus kurang dari estimated_accuracy
95% sepanjang waktu. Sensor ini harus menggunakan giroskop sebagai input perubahan orientasi utama.
Sensor ini juga menggunakan input akselerometer dan magnetometer untuk mengimbangi penyimpangan giroskop, dan tidak dapat diimplementasikan hanya dengan menggunakan akselerometer dan magnetometer.
Vektor rotasi permainan
Sensor fisik yang mendasari: Akselerometer dan giroskop (tanpa magnetometer)
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)
mengembalikan sensor non-bangun
Sensor vektor rotasi permainan mirip dengan sensor vektor rotasi tetapi tidak menggunakan medan geomagnetik. Oleh karena itu sumbu Y tidak mengarah ke utara melainkan ke referensi lain. Referensi tersebut dibiarkan melayang dengan urutan besarnya yang sama dengan giroskop yang melayang di sekitar sumbu Z.
Lihat sensor vektor Rotasi untuk 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
.
Idealnya, 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. Ia tidak dapat menggunakan magnetometer sebagai masukan, selain itu secara tidak langsung melalui estimasi bias giroskop.
Gravitasi
Sensor fisik yang mendasari: Akselerometer dan (jika ada) giroskop (atau magnetometer jika giroskop tidak ada)
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GRAVITY)
mengembalikan sensor non-bangun
Sensor gravitasi melaporkan arah dan besarnya gravitasi dalam koordinat perangkat.
Komponen vektor gravitasi dilaporkan dalam m/s^2 di bidang x, y, dan z dari sensors_event_t.acceleration
.
Saat perangkat dalam keadaan diam, keluaran sensor gravitasi harus sama dengan keluaran akselerometer. Di Bumi, besarnya sekitar 9,8 m/s^2.
Jika perangkat memiliki giroskop, sensor gravitasi harus menggunakan giroskop dan akselerometer sebagai masukan.
Jika perangkat tidak memiliki giroskop, sensor gravitasi harus menggunakan accelerometer dan magnetometer sebagai input.
Vektor rotasi geomagnetik
Sensor fisik yang mendasari: Akselerometer dan magnetometer (tanpa giroskop)
Mode pelaporan: Berkelanjutan
Daya rendah
getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)
mengembalikan sensor non-bangun
Vektor rotasi geomagnetik mirip dengan sensor vektor rotasi tetapi menggunakan magnetometer dan tanpa giroskop.
Sensor ini harus didasarkan pada magnetometer. Ini tidak dapat diimplementasikan menggunakan giroskop, dan masukan giroskop tidak dapat digunakan oleh sensor ini.
Lihat sensor vektor Rotasi untuk detail tentang cara menyetel sensors_event_t.data[0-4]
.
Sama seperti sensor vektor rotasi, kesalahan arah harus kurang dari perkiraan akurasi ( sensors_event_t.data[4]
) sebanyak 95%.
Sensor ini harus berdaya rendah, sehingga harus diimplementasikan pada perangkat keras.
Orientasi (tidak digunakan lagi)
Sensor fisik yang mendasari: Akselerometer, magnetometer, dan (jika ada) giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
mengembalikan sensor non-bangun
Catatan: Ini adalah jenis sensor lama yang tidak digunakan lagi di Android SDK. Itu telah digantikan oleh sensor vektor rotasi, yang didefinisikan lebih jelas. Gunakan sensor vektor rotasi di atas sensor orientasi bila memungkinkan.
Sensor orientasi melaporkan sikap perangkat. Pengukuran dilaporkan dalam derajat di bidang x, y, dan z dari sensors_event_t.orientation
:
-
sensors_event_t.orientation.x
: azimuth, sudut antara arah utara magnet 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 ketika sumbu Z bergerak menuju sumbu Y. -
sensors_event_t.orientation.z
: roll, rotasi di sekitar sumbu Y (-90<=roll<=90
), dengan nilai positif ketika sumbu X bergerak menuju sumbu Z.
Harap dicatat, karena alasan historis, sudut gulungan adalah positif searah jarum jam. (Secara matematis, nilainya harus positif berlawanan arah jarum jam):
![Penggambaran orientasi relatif terhadap suatu perangkat](https://source.android.google.cn/static/docs/core/interaction/sensors/images/axis_positive_roll.png?authuser=3&hl=id)
Gambar 3. Orientasi relatif terhadap suatu perangkat
Definisi ini berbeda dengan yaw, pitch, dan roll yang digunakan dalam penerbangan dimana sumbu X berada di sepanjang sisi panjang pesawat (ekor hingga hidung).
Sensor orientasi juga melaporkan seberapa akurat pembacaan yang diharapkan melalui sensors_event_t.orientation.status
. Lihat konstanta SENSOR_STATUS_*
SensorManager
untuk informasi lebih lanjut tentang kemungkinan nilai untuk bidang ini.
Sensor yang tidak dikalibrasi
Sensor yang tidak dikalibrasi memberikan hasil yang lebih mentah dan mungkin mengandung beberapa bias namun juga mengandung lebih sedikit "lompatan" dari koreksi yang diterapkan melalui kalibrasi. Beberapa aplikasi mungkin lebih menyukai hasil yang tidak dikalibrasi ini karena lebih lancar dan lebih dapat diandalkan. Misalnya, jika suatu aplikasi mencoba melakukan fusi sensornya sendiri, penerapan kalibrasi justru dapat merusak hasil.
Akselerometer tidak dikalibrasi
Sensor fisik yang mendasari: Akselerometer
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
mengembalikan sensor non-bangun
Sensor akselerometer yang tidak dikalibrasi melaporkan percepatan perangkat di sepanjang tiga sumbu sensor tanpa koreksi bias apa pun (bias pabrik dan kompensasi suhu diterapkan pada pengukuran yang tidak dikalibrasi), bersama dengan perkiraan bias. Semua nilai dalam satuan SI (m/s^2) dan dilaporkan dalam bidang sensors_event_t.uncalibrated_accelerometer
:
-
x_uncalib
: akselerasi (tanpa kompensasi bias) sepanjang sumbu X -
y_uncalib
: akselerasi (tanpa kompensasi bias) sepanjang sumbu Y -
z_uncalib
: akselerasi (tanpa kompensasi bias) sepanjang sumbu Z -
x_bias
: perkiraan bias sepanjang sumbu X -
y_bias
: perkiraan bias sepanjang sumbu Y -
z_bias
: perkiraan bias sepanjang sumbu Z
Giroskop tidak dikalibrasi
Sensor fisik yang mendasari: Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
mengembalikan sensor non-bangun
Giroskop yang tidak dikalibrasi melaporkan laju rotasi di sekitar sumbu sensor tanpa menerapkan kompensasi bias, bersama dengan 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 X -
y_uncalib
: kecepatan sudut (tanpa kompensasi penyimpangan) di sekitar sumbu Y -
z_uncalib
: kecepatan sudut (tanpa kompensasi penyimpangan) di sekitar sumbu Z -
x_bias
: perkiraan penyimpangan di sekitar sumbu X -
y_bias
: perkiraan penyimpangan di sekitar sumbu Y -
z_bias
: perkiraan penyimpangan di sekitar sumbu Z
Secara konseptual, pengukuran yang tidak dikalibrasi adalah jumlah dari pengukuran yang dikalibrasi dan estimasi bias: _uncalibrated = _calibrated + _bias
.
Nilai x_bias
, y_bias
dan z_bias
diperkirakan akan melonjak segera setelah estimasi bias berubah, dan nilai tersebut akan stabil sepanjang 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 perkiraan yang masuk akal dapat dilaporkan dalam x_bias
, y_bias
dan z_bias
. Jika implementasinya tidak mampu memperkirakan drift, maka sensor ini tidak boleh diimplementasikan.
Jika sensor ini ada, maka sensor Giroskop yang sesuai juga harus ada dan kedua sensor harus berbagi nilai sensor_t.name
dan sensor_t.vendor
yang sama.
Medan magnet tidak dikalibrasi
Sensor fisik yang mendasari: Magnetometer
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
mengembalikan sensor non-bangun
Sensor medan magnet yang tidak dikalibrasi melaporkan medan magnet sekitar bersama dengan perkiraan kalibrasi besi keras. Semua nilai berada dalam mikro-Tesla (uT) dan dilaporkan di bidang sensors_event_t.uncalibrated_magnetic
:
-
x_uncalib
: medan magnet (tanpa kompensasi besi keras) sepanjang sumbu X -
y_uncalib
: medan magnet (tanpa kompensasi besi keras) sepanjang sumbu Y -
z_uncalib
: medan magnet (tanpa kompensasi besi keras) sepanjang sumbu Z -
x_bias
: perkiraan bias besi keras sepanjang sumbu X -
y_bias
: perkiraan bias besi keras sepanjang sumbu Y -
z_bias
: perkiraan bias besi keras sepanjang sumbu Z
Secara konseptual, pengukuran yang tidak dikalibrasi adalah jumlah dari pengukuran yang dikalibrasi dan estimasi bias: _uncalibrated = _calibrated + _bias
.
Magnetometer yang tidak dikalibrasi memungkinkan algoritme tingkat yang lebih tinggi menangani estimasi besi keras yang buruk. Nilai x_bias
, y_bias
, dan z_bias
diperkirakan akan melonjak segera setelah estimasi hard-iron berubah, dan nilai tersebut akan stabil sepanjang waktu.
Kalibrasi besi lunak dan kompensasi suhu harus diterapkan pada pengukuran. Selain itu, estimasi hard-iron harus diterapkan sehingga estimasi yang masuk akal dapat dilaporkan dalam x_bias
, y_bias
dan z_bias
. Jika implementasinya tidak mampu memperkirakan bias, maka sensor ini tidak boleh diimplementasikan.
Jika sensor ini ada, maka sensor medan magnet yang sesuai harus ada dan kedua sensor harus berbagi nilai sensor_t.name
dan sensor_t.vendor
yang sama.
Sudut engsel
Mode pelaporan: Sedang berubah
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
mengembalikan sensor bangun
Sensor sudut engsel mengukur sudut, dalam derajat, antara dua bagian integral perangkat. Pergerakan engsel yang diukur dengan jenis sensor ini diharapkan dapat mengubah cara pengguna berinteraksi dengan perangkat, misalnya dengan membuka atau memperlihatkan layar.
Sensor komposit interaksi
Beberapa sensor banyak digunakan untuk mendeteksi interaksi dengan pengguna. Kami tidak menjelaskan bagaimana sensor tersebut harus diterapkan, namun sensor tersebut harus berdaya rendah dan merupakan tanggung jawab produsen perangkat untuk memverifikasi kualitasnya dalam hal pengalaman pengguna.
Gerakan bangun
Sensor fisik yang mendasari: Tidak ditentukan (daya rendah apa pun)
Mode pelaporan: Satu kali pengambilan gambar
Daya rendah
Terapkan hanya versi bangun dari sensor ini.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
mengembalikan sensor bangun
Sensor gerakan bangun memungkinkan membangunkan perangkat berdasarkan gerakan spesifik perangkat. Saat sensor ini terpicu, perangkat berperilaku seolah-olah tombol daya ditekan, sehingga layar menyala. Perilaku ini (menyalakan layar saat sensor ini terpicu) mungkin dinonaktifkan oleh pengguna di pengaturan perangkat. Perubahan dalam pengaturan tidak memengaruhi perilaku sensor: hanya memengaruhi apakah kerangka kerja akan mengaktifkan layar saat dipicu. Isyarat sebenarnya yang akan dideteksi tidak ditentukan, dan dapat dipilih oleh produsen perangkat.
Sensor ini harus berdaya rendah, karena kemungkinan besar akan diaktifkan 24/7.
Setiap peristiwa sensor melaporkan 1
di sensors_event_t.data[0]
.
Angkat isyarat
Sensor fisik yang mendasari: Tidak ditentukan (daya rendah apa pun)
Mode pelaporan: Satu kali pengambilan gambar
Daya rendah
Terapkan hanya versi bangun dari sensor ini.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
mengembalikan sensor bangun
Sensor gerakan pick-up memicu ketika perangkat diambil terlepas dari mana pun itu sebelumnya (meja, saku, tas).
Setiap acara sensor melaporkan 1
di sensors_event_t.data[0]
.
Gerakan sekilas
Sensor fisik yang mendasari: tidak terdefinisi (kekuatan apa pun yang rendah)
Mode pelaporan: One-shot
Daya rendah
Menerapkan hanya versi bangun dari sensor ini.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
Mengembalikan sensor bangun
Sensor Gesture Plance memungkinkan secara singkat menyalakan layar untuk memungkinkan pengguna melirik konten di layar berdasarkan gerakan tertentu. Ketika sensor ini memicu, perangkat akan menyalakan layar sebentar untuk memungkinkan pengguna melirik pemberitahuan atau konten lain sementara perangkat tetap terkunci dalam keadaan non-interaktif (tertidur), maka layar akan mati lagi. Perilaku ini (secara singkat menyalakan layar ketika sensor ini memicu) mungkin dinonaktifkan oleh pengguna di pengaturan perangkat. Perubahan pengaturan tidak memengaruhi perilaku sensor: hanya apakah kerangka kerja menyalakan layar secara singkat saat memicu. Gerakan aktual yang akan dideteksi tidak ditentukan, dan dapat dipilih oleh produsen perangkat.
Sensor ini harus berupa daya rendah, karena kemungkinan diaktifkan 24/7. Setiap acara sensor melaporkan 1
di sensors_event_t.data[0]
.
Sensor IMU Sumbu Terbatas
Tersedia dari Android 13, Sensor IMU Axes Terbatas adalah sensor yang mendukung kasus penggunaan di mana tidak semua 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.
Accelerometer Axes Limited
Sensor fisik yang mendasari: accelerometer
Mode pelaporan: kontinu
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
Mengembalikan sensor non-bangun
Sensor sumbu terbatas Accelerometer setara dengan TYPE_ACCELEROMETER
tetapi mendukung kasus di mana 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. Nilai 1.0
menunjukkan bahwa sumbu didukung, dan nilai 0
menunjukkan itu tidak didukung. Produsen perangkat mengidentifikasi sumbu yang didukung pada waktu pembangunan dan nilai -nilai tidak berubah selama runtime.
Produsen perangkat harus mengatur nilai akselerasi untuk sumbu yang tidak digunakan menjadi 0
, alih -alih memiliki nilai yang tidak ditentukan.
Sumbu terbatas giroskop
Sensor fisik yang mendasari: giroskop
Mode pelaporan: kontinu
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
Mengembalikan sensor non-bangun
Sensor sumbu terbatas giroskop setara dengan TYPE_GYROSCOPE
tetapi mendukung kasus di mana satu atau dua sumbu tidak didukung.
Tiga nilai peristiwa sensor terakhir yang dilaporkan oleh sensor mewakili apakah nilai kecepatan sudut untuk sumbu x, y, dan z didukung. Nilai 1.0
menunjukkan bahwa sumbu didukung, dan nilai 0
menunjukkan itu tidak didukung. Produsen perangkat mengidentifikasi sumbu yang didukung pada waktu pembangunan dan nilai -nilai tidak berubah selama runtime.
Produsen perangkat harus mengatur nilai kecepatan sudut untuk sumbu yang tidak digunakan ke 0
.
Accelerometer Axes Limited tidak dikalibrasi
Sensor fisik yang mendasari: accelerometer
Mode pelaporan: kontinu
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
Mengembalikan sensor non-bangun
Sensor Accelerometer Limited Axes yang tidak dikalibrasi setara dengan TYPE_ACCELEROMETER_UNCALIBRATED
tetapi mendukung kasus di mana satu atau dua sumbu tidak didukung.
Tiga nilai peristiwa sensor terakhir yang dilaporkan oleh sensor mewakili apakah nilai akselerasi dan bias untuk sumbu x, y, dan z didukung. Nilai 1.0
menunjukkan bahwa sumbu didukung, dan nilai 0
menunjukkan itu tidak didukung. Produsen perangkat mengidentifikasi sumbu yang didukung pada waktu pembangunan dan nilai -nilai tidak berubah selama runtime.
Produsen perangkat harus mengatur nilai akselerasi dan bias untuk sumbu yang tidak digunakan menjadi 0
.
Sumbu terbatas giroskop tidak dikalibrasi
Sensor fisik yang mendasari: giroskop
Mode pelaporan: kontinu
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
Mengembalikan sensor non-bangun
Sensor sumbu terbatas giroskop yang tidak dikalibrasi setara dengan TYPE_GYROSCOPE_UNCALIBRATED
tetapi mendukung kasus di mana 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 itu tidak didukung. Produsen perangkat mengidentifikasi sumbu yang didukung pada waktu pembangunan dan nilai -nilai tidak berubah selama runtime.
Produsen perangkat harus mengatur kecepatan sudut dan nilai drift untuk sumbu yang tidak digunakan menjadi 0
.
Sumbu terbatas komposit IMU
Sensor fisik yang mendasari: Kombinasi setiap akselerometer 3-sumbu, giroskop 3-sumbu, akselerometer 3-sumbu yang tidak dikalibrasi, dan sensor giroskop 3-sumbu yang tidak dikalibrasi.
Mode pelaporan: kontinu
Sensor IMU sumbu terbatas komposit setara dengan sensor IMU sumbu terbatas tetapi alih-alih didukung pada HAL, ia mengubah data sensor 3-sumbu menjadi varian sumbu terbatas yang setara. Sensor gabungan ini hanya diaktifkan untuk perangkat otomotif.
Tabel berikut menunjukkan contoh konversi dari accelerometer 3-sumbu standar ke akselerometer sumbu terbatas komposit.
Nilai sensorevent untuk sensor_type_accelerometer | Contoh sensorEvent sensor_type_accelerometer | Sensor_type_accelerometer_Limited_axes SensorEvent |
---|---|---|
Nilai [0] | -0,065 | -0,065 |
nilai [1] | 0,078 | 0,078 |
nilai [2] | 9.808 | 9.808 |
nilai [3] | T/A | 1.0 |
nilai [4] | T/A | 1.0 |
nilai [5] | T/A | 1.0 |
Sensor otomotif
Sensor untuk mendukung kasus penggunaan otomotif.
Menuju
Sensor fisik yang mendasari: Kombinasi GPS, magnetometer, accelerometer, dan giroskop.
Mode pelaporan: kontinu
getDefaultSensor(SENSOR_TYPE_HEADING)
Mengembalikan sensor non-bangun
Tersedia dari Android 13, sensor heading mengukur arah di mana perangkat menunjuk relatif ke utara yang sebenarnya dalam derajat. Sensor heading mencakup dua nilai SensorEvent
. Satu untuk heading perangkat yang diukur dan satu untuk keakuratan nilai heading yang disediakan.
Nilai tajuk 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 didefinisikan pada kepercayaan 68 persen. Dalam kasus di mana distribusi yang mendasarinya adalah Gaussian normal, akurasinya adalah satu standar deviasi. Misalnya, jika sensor heading mengembalikan nilai heading 60 derajat dan nilai akurasi 10 derajat, ada probabilitas 68 persen dari judul sebenarnya antara 50 derajat dan 70 derajat.