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 bingkai tertentu yang statis relatif terhadap perangkat.
Sumbu perangkat seluler
Sensor API hanya relatif terhadap orientasi alami layar (sumbu tidak tertukar saat orientasi layar perangkat berubah.
Sumbu otomotif
Dalam implementasi Android Automotive, sumbu ditentukan sehubungan dengan rangka bodi kendaraan. Asal dari kerangka referensi kendaraan adalah pusat dari poros belakang. Rangka referensi kendaraan diorientasikan sedemikian rupa sehingga:
- Sumbu X menunjuk ke kanan dan berada pada bidang horizontal, tegak lurus terhadap bidang simetri kendaraan.
- Sumbu Y mengarah ke depan dan berada pada bidang horizontal.
Kerangka referensi kendaraan adalah sistem koordinat tangan kanan. Oleh karena itu, sumbu Z mengarah ke atas.
Sumbu Z dari kerangka acuan sejajar dengan gravitasi, yang berarti bahwa sumbu X dan sumbu Y keduanya horizontal. Akibatnya, sumbu Y mungkin tidak selalu melalui sumbu depan.
Sensor dasar
Jenis sensor dasar dinamai berdasarkan sensor fisik yang diwakilinya. Sensor ini menyampaikan data dari sensor fisik tunggal (berlawanan dengan 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 disamakan 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 dasarnya dalam kasus penggunaan berikut:
- Chip giroskop yang dinilai memiliki rentang bias 1 derajat/detik.
- Setelah kalibrasi pabrik, kompensasi suhu dan kompensasi bias diterapkan, bias sebenarnya dari sensor Android akan berkurang, mungkin ke titik di mana bias dijamin di bawah 0,01 deg/dtk.
- Dalam situasi ini, kami mengatakan bahwa sensor Android memiliki bias di bawah 0,01 derajat/dtk, meskipun lembar data sensor yang mendasarinya mengatakan 1 derajat/dtk.
- Barometer dengan konsumsi daya 100 uW.
- Karena data yang dihasilkan perlu diangkut dari chip ke SoC, biaya daya sebenarnya untuk mengumpulkan data dari sensor Android barometer mungkin jauh lebih tinggi, misalnya 1000 uW.
- Dalam situasi ini, kami mengatakan bahwa sensor Android memiliki konsumsi daya 1000 uW, meskipun konsumsi daya yang diukur pada kabel chip barometer adalah 100uW.
- Magnetometer yang mengonsumsi 100uW saat dikalibrasi, tetapi mengonsumsi lebih banyak saat dikalibrasi.
- Rutin kalibrasinya mungkin memerlukan pengaktifan giroskop, menggunakan 5000 uW, dan menjalankan beberapa algoritme, dengan biaya 900 uW lagi.
- Dalam situasi ini, kami mengatakan bahwa konsumsi daya maksimum dari 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 akselerasi perangkat di sepanjang tiga sumbu sensor. Percepatan yang diukur mencakup percepatan fisik (perubahan kecepatan) dan gravitasi. Pengukuran dilaporkan dalam 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 adalah contoh:
- Norma (x, y, z) harus mendekati 0 saat jatuh bebas.
- Ketika perangkat diletakkan rata di atas meja dan didorong ke kiri ke kanan, nilai percepatan x positif.
- Ketika perangkat diletakkan rata di atas meja, nilai percepatan sepanjang z adalah +9,81 alo, yang sesuai dengan percepatan perangkat (0 m/s^2) dikurangi gaya gravitasi (-9,81 m/s^2).
- Ketika perangkat diletakkan rata di atas meja dan didorong ke langit, nilai percepatan 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, untuk menghindari lonjakan nilai selama streaming.
Akselerometer juga melaporkan seberapa akurat pembacaan yang diharapkan melalui sensors_event_t.acceleration.status
. Lihat SensorManager
SENSOR_STATUS_*
untuk informasi lebih lanjut tentang kemungkinan nilai untuk bidang ini.
Suhu sekitar
Mode pelaporan: Saat 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
Sebuah sensor medan magnet (juga dikenal sebagai magnetometer) melaporkan medan magnet sekitar, yang diukur sepanjang tiga sumbu sensor.
Pengukuran dilaporkan dalam bidang x, y, dan z dari 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 SensorManager
SENSOR_STATUS_*
untuk informasi lebih lanjut tentang kemungkinan nilai untuk bidang ini.
Pembacaan dikalibrasi menggunakan:
- Kompensasi suhu
- Kalibrasi besi lunak pabrik (atau online)
- Kalibrasi besi keras online
Giroskop
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
mengembalikan sensor non-bangun
Sebuah sensor giroskop melaporkan tingkat rotasi perangkat di sekitar tiga sumbu sensor.
Rotasi positif dalam arah 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 tampak berputar berlawanan arah jarum jam. Perhatikan bahwa ini adalah definisi matematika standar dari rotasi positif dan tidak sesuai dengan definisi roll di ruang angkasa.
Pengukuran dilaporkan dalam bidang 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 pembacaan yang diharapkan melalui sensors_event_t.gyro.status
. Lihat SensorManager
SENSOR_STATUS_*
untuk informasi lebih lanjut tentang kemungkinan nilai untuk bidang ini.
Giroskop tidak dapat ditiru berdasarkan magnetometer dan akselerometer, karena hal ini akan menyebabkan konsistensi dan daya tanggap lokal berkurang. Itu harus didasarkan pada chip giroskop biasa.
Detak Jantung
Mode pelaporan: Saat berubah
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
mengembalikan 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 di sensors_event_t.heart_rate.bpm
dan status sensor dilaporkan di sensors_event_t.heart_rate.status
. Lihat SensorManager
SENSOR_STATUS_*
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: Saat berubah
getDefaultSensor(SENSOR_TYPE_LIGHT)
mengembalikan sensor non-bangun
Sebuah sensor cahaya melaporkan iluminasi saat ini dalam satuan SI lux.
Pengukuran ini dilaporkan dalam sensors_event_t.light
.
Kedekatan
Mode pelaporan: Saat 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 saat mendeteksi perubahan jarak. Setelah Android 4.4, kami menyarankan untuk mengimplementasikan versi bangun dari sensor ini terlebih dahulu, karena ini adalah yang 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 status "jauh" dan nilai kurang dari sensor_t.maxRange
dalam status "dekat".
Tekanan
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_PRESSURE)
mengembalikan sensor non-bangun
Sebuah sensor tekanan (juga dikenal sebagai barometer) melaporkan tekanan atmosfer dalam hectopascal (hPa).
Pembacaan 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 tergantung cuaca) harus digunakan sebagai referensi.
Kelembaban relatif
Mode pelaporan: Saat berubah
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
mengembalikan sensor non-bangun
Sebuah sensor kelembaban relatif mengukur kelembaban udara ambien relatif 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, tetapi dapat juga didasarkan pada sensor lain, jika konsumsi daya dan akurasi dapat diterima.
- Vektor rotasi permainan , berdasarkan akselerometer dan giroskop.
- Giroskop tidak terkalibrasi , yang mirip dengan sensor dasar giroskop, tetapi dengan kalibrasi bias dilaporkan secara terpisah alih-alih dikoreksi dalam pengukuran.
Seperti sensor dasar, karakteristik sensor komposit berasal dari karakteristik data akhir mereka. 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. Sebagai contoh lain, penyimpangan vektor rotasi permainan sangat bergantung pada kualitas algoritme kalibrasi seperti pada karakteristik sensor fisik.
Tabel berikut mencantumkan jenis sensor komposit yang tersedia. Setiap sensor komposit bergantung pada data dari satu atau beberapa sensor fisik. Hindari memilih sensor fisik dasar lainnya untuk memperkirakan hasil karena memberikan pengalaman pengguna yang buruk.
Jenis sensor | Kategori | Sensor fisik yang mendasari | Mode pelaporan |
---|---|---|---|
Sikap | Akselerometer, giroskop, TIDAK HARUS MENGGUNAKAN magnetometer | Kontinu | |
Sikap | Akselerometer, magnetometer, TIDAK HARUS MENGGUNAKAN giroskop | Kontinu | |
Gerakan sekilas | Interaksi | Tidak terdefinisi | Satu tembakan |
Sikap | Akselerometer, giroskop | Kontinu | |
Tidak terkalibrasi | Giroskop | Kontinu | |
Aktivitas | Akselerometer, giroskop (jika ada), atau magnetometer (jika giroskop tidak ada) | Kontinu | |
Tidak terkalibrasi | magnetometer | Kontinu | |
Orientasi (tidak digunakan lagi) | Sikap | Akselerometer, magnetometer, giroskop (jika ada) | Kontinu |
Interaksi | Tidak terdefinisi | Satu tembakan | |
Sikap | Akselerometer, magnetometer, giroskop | Kontinu | |
Aktivitas | Accelerometer (atau lainnya selama daya sangat rendah) | Satu tembakan | |
Aktivitas | Akselerometer | Dalam perubahan | |
Aktivitas | Akselerometer | Spesial | |
Aktivitas | Akselerometer | Spesial | |
Interaksi | Tidak terdefinisi | Satu tembakan |
= Sensor daya rendah
Sensor komposit aktivitas
Percepatan 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 akselerasi linier melaporkan akselerasi linier perangkat dalam bingkai sensor, tidak termasuk gravitasi.
Keluarannya secara konseptual: keluaran akselerometer dikurangi keluaran sensor gravitasi . Ini 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 signifikan
Sensor fisik yang mendasari: Accelerometer (atau lainnya selama daya rendah)
Mode pelaporan: Satu tembakan
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 dapat menyebabkan perubahan di lokasi pengguna.
Contoh gerakan signifikan tersebut adalah:
- Berjalan kaki atau bersepeda
- Duduk di mobil yang bergerak, pelatih, atau kereta api
Contoh situasi yang tidak memicu gerakan signifikan:
- Telepon di saku dan orang tidak bergerak
- Telepon ada di atas meja dan meja sedikit bergetar karena lalu lintas atau mesin cuci terdekat
Pada tingkat tinggi, detektor gerakan signifikan digunakan untuk mengurangi konsumsi daya penentuan lokasi. Ketika algoritme pelokalan mendeteksi bahwa perangkat statis, mereka dapat beralih ke mode daya rendah, di mana mereka mengandalkan gerakan signifikan untuk membangunkan perangkat saat pengguna mengubah lokasi.
Sensor ini harus berdaya rendah. Itu membuat tradeoff untuk konsumsi daya yang dapat menghasilkan sejumlah kecil negatif palsu. Ini dilakukan karena beberapa alasan:
- Tujuan dari sensor ini adalah untuk menghemat daya.
- Memicu suatu peristiwa saat pengguna tidak bergerak (positif palsu) membutuhkan biaya yang mahal dalam hal 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 itu tidak dapat diterima.
Setiap peristiwa sensor melaporkan 1
dalam sensors_event_t.data[0]
.
Detektor langkah
Sensor fisik yang mendasari: Accelerometer (+ 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 dari event sensors_event_t.timestamp
sesuai dengan saat kaki menyentuh tanah, 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. Mereka tidak boleh terpicu saat pengguna bersepeda, mengemudi, atau 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 pendeteksi langkah diaktifkan dan akselerometer tidak, hanya langkah yang harus memicu interupsi (tidak setiap pembacaan akselerometer).
sampling_period_ns
tidak berdampak pada pendeteksi langkah.
Setiap peristiwa sensor melaporkan 1
dalam sensors_event_t.data[0]
.
Penghitung langkah
Sensor fisik yang mendasari: Accelerometer (+ mungkin yang lain selama daya rendah)
Mode pelaporan: Saat 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 direset ke nol hanya pada reboot sistem.
Stempel waktu acara diatur ke waktu saat langkah terakhir untuk acara itu diambil.
Lihat jenis sensor Detektor langkah untuk mengetahui waktu langkah.
Dibandingkan dengan pendeteksi langkah, penghitung langkah dapat memiliki latensi yang lebih tinggi (hingga 10 detik). Berkat latensi ini, sensor ini memiliki akurasi tinggi; jumlah langkah setelah satu hari penuh pengukuran harus berada dalam 10% dari jumlah langkah yang sebenarnya. Detektor langkah dan penghitung langkah mendeteksi saat pengguna berjalan, berlari, dan menaiki tangga. Mereka tidak boleh terpicu saat pengguna bersepeda, mengemudi, atau di kendaraan lain.
Perangkat keras harus memastikan jumlah langkah internal tidak pernah meluap. Ukuran minimum penghitung internal perangkat keras harus 16 bit. Dalam kasus overflow yang akan segera terjadi (paling banyak setiap ~2^16 langkah), SoC dapat dibangunkan sehingga pengemudi dapat melakukan pemeliharaan counter.
Sebagaimana dinyatakan dalam Interaksi , saat sensor ini beroperasi, sensor ini tidak akan 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 "meniru" sensor ini di HAL.
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 harus memicu interupsi (bukan data akselerometer).
Detektor kemiringan
Sensor fisik yang mendasari: Accelerometer (+ 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 akselerometer selama 2 detik terakhir. - Pemicu saat
angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees
Akselerasi besar tanpa perubahan orientasi ponsel seharusnya tidak memicu peristiwa kemiringan. Misalnya, tikungan tajam atau akselerasi kuat saat mengemudikan mobil seharusnya tidak memicu peristiwa miring, meskipun sudut akselerasi rata-rata mungkin berbeda 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 tunda. Jangan meniru sensor ini di HAL. Setiap peristiwa sensor melaporkan 1
dalam 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, gyroscope, dan magnetometer. Sistem koordinat Timur-Utara-Up didefinisikan sebagai basis ortonormal langsung di mana:
- 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 telepon dengan sudut teta 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 unit dari empat 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)
Di mana:
- Bidang x, y, dan z dari
rot_axis
adalah koordinat Timur-Utara-Atas dari vektor satuan panjang yang mewakili sumbu rotasi -
theta
adalah sudut rotasi
Quaternion adalah quaternion unit: Itu harus norma 1
. Kegagalan untuk memastikan ini akan menyebabkan perilaku klien yang tidak menentu.
Selain itu, sensor ini melaporkan perkiraan akurasi heading:
sensors_event_t.data[4] = estimated_accuracy
(dalam radian)
Kesalahan judul harus kurang dari 95% estimated_accuracy
. 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 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 game mirip dengan sensor vektor rotasi tetapi tidak menggunakan medan geomagnetik. Oleh karena itu sumbu Y tidak menunjuk ke utara melainkan ke beberapa referensi lain. Referensi itu dibiarkan melayang dengan urutan besarnya yang sama seperti giroskop 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 heading: sensors_event_t.data[4]
dicadangkan dan harus disetel ke 0
.
Dalam kasus yang 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. Itu tidak dapat menggunakan magnetometer sebagai input, 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 besaran gravitasi dalam koordinat perangkat.
Komponen vektor gravitasi dilaporkan dalam m/s^2 di bidang x, y, dan z 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 akselerometer dan magnetometer sebagai masukan.
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
Sebuah vektor rotasi geomagnetik mirip dengan sensor vektor rotasi tetapi menggunakan magnetometer dan tidak ada giroskop.
Sensor ini harus didasarkan pada magnetometer. Itu tidak dapat diimplementasikan menggunakan giroskop, dan input giroskop tidak dapat digunakan oleh sensor ini.
Lihat sensor vektor Rotasi untuk detail tentang cara menyetel sensors_event_t.data[0-4]
.
Sama seperti untuk sensor vektor rotasi, kesalahan heading harus kurang dari akurasi yang diperkirakan ( sensors_event_t.data[4]
) 95% dari waktu.
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. Ini telah digantikan oleh sensor vektor rotasi, yang 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 saat 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, untuk alasan historis sudut gulungan positif searah jarum jam. (Secara matematis, itu harus positif dalam arah berlawanan arah jarum jam):
Definisi ini berbeda dengan yaw, pitch, dan roll yang digunakan dalam penerbangan dimana sumbu X berada di sepanjang sisi panjang pesawat (tail to nose).
Sensor orientasi juga melaporkan seberapa akurat pembacaan yang diharapkan melalui sensors_event_t.orientation.status
. Lihat SensorManager
SENSOR_STATUS_*
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 menyertakan beberapa bias tetapi juga mengandung lebih sedikit "lompatan" dari koreksi yang diterapkan melalui kalibrasi. Beberapa aplikasi mungkin lebih menyukai hasil yang tidak dikalibrasi ini karena lebih halus 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
Mode pelaporan: Berkelanjutan
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
mengembalikan 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 pada pengukuran yang tidak dikalibrasi), bersama dengan perkiraan bias. Semua nilai dalam satuan SI (m/s^2) dan dilaporkan di bidang sensors_event_t.uncalibrated_accelerometer
:
-
x_uncalib
: percepatan (tanpa kompensasi bias) sepanjang sumbu X -
y_uncalib
: percepatan (tanpa kompensasi bias) sepanjang sumbu Y -
z_uncalib
: percepatan (tanpa kompensasi bias) sepanjang sumbu Z -
x_bias
: perkiraan bias sepanjang sumbu X -
y_bias
: estimasi 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 padanya, bersama dengan perkiraan bias. Semua nilai dalam radian/detik dan dilaporkan dalam bidang 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
: 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
diharapkan melompat segera setelah perkiraan bias berubah, dan mereka harus stabil sepanjang waktu.
Lihat definisi sensor giroskop untuk detail tentang sistem koordinat yang digunakan.
Kalibrasi pabrik dan kompensasi suhu harus diterapkan pada pengukuran. Selain itu, estimasi drift giroskop harus diterapkan sehingga estimasi yang masuk akal dapat dilaporkan dalam x_bias
, y_bias
dan z_bias
. Jika implementasi tidak dapat memperkirakan drift, maka 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 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 dalam micro-Tesla (uT) dan dilaporkan di bidang 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
: 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 untuk menangani estimasi besi keras yang buruk. Nilai x_bias
, y_bias
dan z_bias
diharapkan melompat segera setelah perkiraan hard-iron berubah, dan mereka harus 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 implementasi tidak dapat memperkirakan bias, maka sensor ini tidak boleh diimplementasikan.
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
Mode pelaporan: Saat 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 dapat berinteraksi dengan perangkat, misalnya, dengan membuka atau membuka tampilan.
Sensor komposit interaksi
Beberapa sensor sebagian besar digunakan untuk mendeteksi interaksi dengan pengguna. We don't define how those sensors must be implemented, but they must be low power and it's the responsibility of the device manufacturer to verify their quality in terms of user experience.
Wake up gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
returns a wake-up sensor
A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7.
Each sensor event reports 1
in sensors_event_t.data[0]
.
Pick up gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
returns a wake-up sensor
A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).
Each sensor event reports 1
in sensors_event_t.data[0]
.
Glance gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
returns a wake-up sensor
A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1
in sensors_event_t.data[0]
.