Jenis sensor

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).

Sistem
koordinat API sensor untuk perangkat seluler

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

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:

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

Vektor rotasi game

Sikap

Akselerometer, giroskop, JANGAN GUNAKAN magnetometer

Berkelanjutan

Vektor rotasi geomagnetik Sensor daya
     rendah

Sikap

Akselerometer, magnetometer, JANGAN GUNAKAN giroskop

Berkelanjutan

Gestur sekilas Sensor daya rendah

Interaksi

Tidak ditetapkan

One-shot

Gravitasi

Sikap

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

Berkelanjutan

Giroskop tidak terkalibrasi

Belum dikalibrasi

Giroskop

Berkelanjutan

Akselerasi linear

Aktivitas

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

Berkelanjutan

Medan magnet tidak terkalibrasi

Belum dikalibrasi

Magnetometer

Berkelanjutan

Orientasi (tidak digunakan lagi)

Sikap

Akselerometer, magnetometer, giroskop (jika ada)

Berkelanjutan

Gestur mengangkat perangkat Sensor daya rendah

Interaksi

Tidak ditetapkan

One-shot

Vektor rotasi

Sikap

Akselerometer, magnetometer, giroskop (jika ada)

Berkelanjutan

Gerakan signifikan Sensor daya rendah

Aktivitas

Akselerometer (atau yang lain asalkan daya sangat rendah)

One-shot

Penghitung langkah Sensor daya rendah

Aktivitas

Akselerometer

Saat diubah

Detektor langkah Sensor daya rendah

Aktivitas

Akselerometer

Khusus

Detektor kemiringan Sensor daya rendah

Aktivitas

Akselerometer

Khusus

Gestur aktifkan Sensor daya rendah

Interaksi

Tidak ditetapkan

One-shot

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

Penggambaran orientasi
   relatif terhadap perangkat

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 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 sepanjang sumbu X
  • y_bias: estimasi bias di sepanjang sumbu Y
  • z_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 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 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 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: 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.