Jenis sensor

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.

Sistem
koordinat API sensor untuk perangkat seluler

Gambar 1. Sistem koordinat (relatif terhadap perangkat seluler) yang digunakan oleh Sensor API

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.
Sistem koordinat API sensor untuk
perangkat otomotif

Gambar 2. Sistem koordinat (sesuai dengan perangkat otomotif) yang digunakan oleh Sensor API

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:

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

Vektor rotasi game

Sikap

Akselerometer, giroskop, TIDAK BOLEH MENGGUNAKAN magnetometer

Berkelanjutan

Vektor rotasi geomagnetik Sensor
     daya rendah

Sikap

Akselerometer, magnetometer, TIDAK BOLEH MENGGUNAKAN giroskop

Berkelanjutan

Gestur Glance Sensor daya lemah

Interaksi

Tidak ditetapkan

One-shot

Gravitasi

Sikap

Akselerometer, giroskop

Berkelanjutan

Giroskop tidak dikalibrasi

Tidak dikalibrasi

Giroskop

Berkelanjutan

Akselerasi linear

Aktivitas

Akselerometer, giroskop (jika ada), atau magnetometer (jika giroskop tidak ada)

Berkelanjutan

Medan magnet tidak dikalibrasi

Tidak dikalibrasi

Magnetometer

Berkelanjutan

Orientasi (tidak digunakan lagi)

Sikap

Akselerometer, magnetometer, giroskop (jika ada)

Berkelanjutan

Gerakan mengambil Sensor daya rendah

Interaksi

Tidak ditetapkan

One-shot

Vektor rotasi

Sikap

Akselerometer, magnetometer, giroskop

Berkelanjutan

Gerakan yang signifikan Sensor daya rendah

Aktivitas

Akselerasi (atau yang lain selama daya sangat rendah)

One-shot

Penghitung langkah Sensor daya rendah

Aktivitas

Akselerometer

Saat berubah

Pendeteksi langkah Sensor daya rendah

Aktivitas

Akselerometer

Khusus

Detektor kemiringan Sensor daya rendah

Aktivitas

Akselerometer

Khusus

Gerakan bangun Sensor daya lemah

Interaksi

Tidak ditetapkan

One-shot

Sensor daya rendah = 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):

Penggambaran orientasi
   relatif terhadap perangkat

Gambar 3. Orientasi relatif terhadap perangkat

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 X
  • y_uncalib: akselerasi (tanpa kompensasi bias) di sepanjang sumbu Y
  • z_uncalib: akselerasi (tanpa kompensasi bias) di sepanjang sumbu Z
  • x_bias: estimasi bias di sepanjang sumbu X
  • y_bias: estimasi bias di sepanjang sumbu Y
  • z_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 X
  • y_uncalib: kecepatan sudut (tanpa kompensasi drift) di sekitar sumbu Y
  • z_uncalib: kecepatan sudut (tanpa kompensasi drift) di sekitar sumbu Z
  • x_bias: estimasi drift di sekitar sumbu X
  • y_bias: estimasi drift di sekitar sumbu Y
  • z_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 X
  • y_uncalib: medan magnet (tanpa kompensasi besi keras) di sepanjang sumbu Y
  • z_uncalib: medan magnet (tanpa kompensasi besi keras) di sepanjang sumbu Z
  • x_bias: estimasi bias besi keras di sepanjang sumbu X
  • y_bias: estimasi bias besi keras di sepanjang sumbu Y
  • z_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.