it-swarm-id.com

Akurasi accelerometer Android (Navigasi inersia)

Saya melihat ke dalam menerapkan Sistem Navigasi Inersia untuk ponsel Android, yang saya sadari sulit mengingat akurasi accelerometer, dan fluktuasi bacaan yang konstan.

Untuk mulai dengan, saya mengatur telepon pada permukaan yang datar dan mencicipi 1000 pembacaan accelerometer di arah X dan Y (sejajar dengan meja, jadi tidak ada gravitasi yang bekerja ke arah ini). Saya kemudian rata-rata membaca ini dan menggunakan nilai ini untuk mengkalibrasi ponsel (mengurangi nilai ini dari setiap pembacaan berikutnya).

Saya kemudian menguji sistem dengan kembali menempatkannya di atas meja dan mencicipi 5000 bacaan accelerometer di arah X dan Y. Saya harapkan, mengingat kalibrasi, bahwa percepatan ini harus menambahkan hingga 0 (kira-kira) di setiap arah. Namun, ini tidak terjadi, dan total percepatan lebih dari 5000 iterasi tidak mendekati 0 (rata-rata sekitar 10 pada setiap sumbu).

Saya menyadari tanpa melihat kode saya ini mungkin sulit untuk dijawab tetapi dalam pengertian yang lebih umum ...

Apakah ini hanya contoh betapa tidak akuratnya pembacaan accelerometer pada ponsel (HTC Desire S), atau apakah lebih mungkin saya membuat beberapa kesalahan dalam pengkodean?

98
woodstock365

Anda mendapatkan posisi dengan mengintegrasikan percepatan linier dua kali tetapi kesalahannya mengerikan. Tidak ada gunanya dalam praktek.

Inilah penjelasan mengapa (Google Tech Talk) at 23:20 . Saya sangat merekomendasikan video ini.

Bukan noise accelerometer yang menyebabkan masalah tetapi gyro white noise , lihat subbab 6.2.3 Perbanyakan Kesalahan. (Ngomong-ngomong, kamu akan membutuhkan giroskop juga.)

Adapun pemosisian dalam ruangan, saya menemukan ini berguna: 

Pelokalan dan Pelacakan Indoor Berbasis RSSI Menggunakan Sigma-Point Kalman Smoothers

Pelacakan Pejalan Kaki dengan Sensor Inersia yang Dipasang pada Sepatu

Meningkatkan Kinerja Pedometer Menggunakan Single Accelerometer

Saya tidak tahu bagaimana metode ini akan tampil dalam aplikasi kehidupan nyata atau bagaimana mengubahnya menjadi aplikasi Android yang bagus.

Pertanyaan serupa adalah ini .

PEMBARUAN:

Rupanya ada versi yang lebih baru dari Oliver J. Woodman di atas, "Pengantar navigasi inersia", tesis PhD-nya:

Pelokalan Pejalan Kaki untuk Lingkungan Dalam Ruangan

120
Ali

Saya hanya berpikir keras, dan saya belum bermain dengan Android accelerometer API, jadi bersabarlah.

Pertama-tama, secara tradisional, untuk mendapatkan navigasi dari accelerometer Anda membutuhkan accelerometer 6-axis. Anda memerlukan akselerasi dalam X, Y, dan Z, tetapi juga rotasi Xr, Yr, dan Zr. Tanpa data rotasi, Anda tidak memiliki cukup data untuk membuat vektor kecuali Anda menganggap perangkat tidak pernah mengubah sikapnya, yang akan sangat membatasi. Toh tidak ada yang membaca TOS.

Oh, dan Anda tahu bahwa INS melayang dengan rotasi bumi, bukan? Jadi ada itu juga. Satu jam kemudian dan Anda secara misterius mendaki lereng 15 ° ke luar angkasa. Itu dengan asumsi Anda memiliki INS yang mampu mempertahankan lokasi selama itu, yang belum dapat dilakukan telepon.

Cara yang lebih baik untuk menggunakan akselerometer - bahkan dengan akselerometer 3 sumbu - untuk navigasi adalah dengan mengikat ke GPS untuk mengkalibrasi INS jika memungkinkan. Ketika GPS gagal, INS memuji dengan baik. GPS tiba-tiba dapat menembak Anda sejauh 3 blok karena Anda terlalu dekat dengan pohon. INS tidak bagus, tapi setidaknya ia tahu Anda tidak terkena meteor.

Yang bisa Anda lakukan adalah mencatat data accelerometer ponsel, dan banyak lagi. Seperti layaknya berminggu-minggu. Bandingkan dengan data GPS yang baik (maksud saya benar-benar bagus) dan gunakan datamining untuk membangun korelasi tren antara data accelerometer dan data GPS yang diketahui. (Tip Pro: Anda akan ingin memeriksa almanak GPS selama berhari-hari dengan geometri yang baik dan banyak satelit. Beberapa hari Anda mungkin hanya memiliki 4 satelit dan itu tidak cukup) Yang mungkin dapat Anda lakukan adalah menemukan bahwa ketika seseorang berjalan dengan ponsel mereka di saku mereka, data accelerometer mencatat pola yang sangat spesifik. Berdasarkan pada datamining, Anda membuat profil untuk perangkat itu, dengan pengguna itu, dan seperti apa kecepatan yang ditunjukkan pola itu ketika memiliki data GPS untuk menyertainya. Anda harus dapat mendeteksi belokan, menaiki tangga, duduk (kalibrasi hingga 0 kecepatan waktu!) Dan berbagai tugas lainnya. Bagaimana ponsel dipegang akan perlu diperlakukan sebagai input data yang terpisah sepenuhnya. Saya mencium jaringan saraf yang digunakan untuk melakukan data mining. Dengan kata lain, ada sesuatu yang buta terhadap makna input. Algoritma hanya akan mencari tren dalam pola, dan tidak benar-benar memperhatikan pengukuran INS yang sebenarnya. Yang akan diketahuinya hanyalah historically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now. Dan itu akan memindahkan potongan ke depan. Sangat penting bahwa itu benar-benar buta, karena hanya meletakkan telepon di saku Anda mungkin berorientasi pada salah satu dari 4 orientasi yang berbeda, dan 8 jika Anda mengganti saku. Dan ada banyak cara untuk memegang telepon Anda juga. Kami berbicara banyak data di sini.

Anda jelas masih memiliki banyak penyimpangan, tetapi saya pikir Anda akan lebih beruntung dengan cara ini karena perangkat akan tahu kapan Anda berhenti berjalan, dan penyimpangan posisi tidak akan mengabadikan. Ia tahu bahwa Anda diam berdasarkan data historis. Sistem INS tradisional tidak memiliki fitur ini. Penyimpangan ini berlanjut ke semua pengukuran dan senyawa di masa depan secara eksponensial. Keakuratan yang tidak sopan, atau memiliki navigasi sekunder untuk diperiksa secara berkala, sangat vital dengan INS tradisional.

Setiap perangkat, dan setiap orang harus memiliki profilnya sendiri. Banyak data dan banyak perhitungan. Semua orang berjalan dengan kecepatan yang berbeda, dengan langkah yang berbeda, dan meletakkan ponsel mereka di saku yang berbeda, dll. Tentunya untuk mengimplementasikan ini di dunia nyata akan membutuhkan angka-angka untuk ditangani di sisi server.

Jika Anda memang menggunakan GPS untuk baseline awal, bagian dari masalah ada GPS cenderung memiliki migrasi itu sendiri dari waktu ke waktu, tetapi mereka adalah kesalahan yang tidak terus-menerus terjadi. Duduk penerima di satu lokasi dan catat data. Jika tidak ada koreksi WAAS, Anda dapat dengan mudah mendapatkan perbaikan lokasi melayang ke arah acak 100 kaki di sekitar Anda. Dengan WAAS, mungkin turun hingga 6 kaki. Anda mungkin benar-benar beruntung dengan sistem sub-meter RTK pada ransel untuk setidaknya menurunkan algoritma ANN.

Anda masih akan memiliki penyimpangan sudut dengan INS menggunakan metode saya. Ini adalah sebuah masalah. Tetapi, jika Anda melangkah terlalu jauh untuk membangun JST untuk menuangkan data GPS dan INS selama beberapa minggu di antara n pengguna, dan benar-benar membuatnya bekerja hingga saat ini, Anda jelas tidak keberatan dengan data besar sejauh ini. Teruslah menyusuri jalan itu dan gunakan lebih banyak data untuk membantu menyelesaikan pergeseran sudut: Orang adalah makhluk kebiasaan. Kami cukup banyak melakukan hal yang sama seperti berjalan di trotoar, melewati pintu, menaiki tangga, dan tidak melakukan hal-hal gila seperti berjalan melintasi jalan bebas hambatan, menembus dinding, atau keluar balkon.Jadi misalkan Anda mengambil halaman dari Big Brother dan mulai menyimpan data di mana orang-orang pergi. Anda dapat mulai memetakan di mana orang diharapkan berjalan. Ini adalah taruhan yang cukup yakin bahwa jika pengguna mulai berjalan menaiki tangga, dia berada di tangga yang sama dengan orang yang berjalan sebelum dia naik. Setelah 1000 iterasi dan beberapa penyesuaian kuadrat-terkecil, database Anda cukup tahu di mana tangga-tangga itu dengan akurasi tinggi. Sekarang Anda dapat memperbaiki penyimpangan sudut dan lokasi saat orang tersebut mulai berjalan. Ketika dia menaiki tangga itu, atau menuruni lorong itu, atau berjalan di trotoar, penyimpangan apa pun dapat diperbaiki. Basis data Anda akan berisi sektor-sektor yang tertimbang oleh kemungkinan seseorang akan berjalan di sana, atau bahwa pengguna ini telah berjalan di sana di masa lalu. Database spasial dioptimalkan untuk ini menggunakan divide and conquer untuk hanya mengalokasikan sektor-sektor yang bermakna. Ini akan menjadi semacam proyek MIT di mana robot yang dilengkapi laser memulai dengan gambar hitam, dan mengecat labirin dalam memori dengan mengambil setiap belokan, menerangi di mana semua dinding berada.

Area lalu lintas tinggi akan mendapatkan bobot lebih tinggi, dan area di mana tidak ada yang pernah mendapatkan bobot 0. Area lalu lintas yang lebih tinggi memiliki resolusi yang lebih tinggi. Pada dasarnya Anda akan berakhir dengan peta di mana pun orang berada dan menggunakannya sebagai model prediksi.

Saya tidak akan terkejut jika Anda bisa menentukan kursi apa yang diambil seseorang di teater menggunakan metode ini. Diberikan cukup banyak pengguna yang pergi ke teater, dan resolusi yang cukup, Anda akan memiliki pemetaan data setiap baris teater, dan seberapa luas setiap baris. Semakin banyak orang mengunjungi lokasi, semakin tinggi kesetiaan Anda memprediksi orang itu berada.

Juga, saya sangat menyarankan Anda mendapatkan langganan (gratis) ke majalah GPS World jika Anda tertarik dengan penelitian terkini tentang hal-hal semacam ini. Setiap bulan saya bergaul dengan itu.

Also, I highly recommend you get a (free) subscription to GPS World magazine if you're interested in the current research into this sort of stuff. Every month I geek out with it.

17
RyanJMcGowan

Saya tidak yakin seberapa hebat offset Anda, karena Anda lupa menyertakan unit. ("Sekitar 10 pada setiap sumbu" tidak banyak bicara.: P) Karena itu, kemungkinan besar karena ketidakakuratan pada perangkat keras.

Accelerometer baik untuk hal-hal seperti menentukan orientasi ponsel relatif terhadap gravitasi, atau mendeteksi gerakan (mengguncang atau menabrak ponsel, dll.)

Namun, mencoba melakukan perhitungan mati menggunakan accelerometer akan membuat Anda mengalami banyak kesalahan gabungan. Accelerometer harus benar-benar akurat, dan ini bukan kasus penggunaan umum, jadi saya ragu produsen perangkat keras mengoptimalkannya.

8
Trevor Johns

Android accelerometer adalah digital, sampel percepatan menggunakan jumlah yang sama "ember", katakanlah ada 256 ember dan accelerometer mampu merasakan dari -2g hingga + 2g. Ini berarti bahwa output Anda akan dikuantisasi dalam hal "ember" ini dan akan melompati beberapa set nilai.

Untuk mengkalibrasi accelerometer Android, Anda perlu mengambil sampel lebih dari 1000 poin dan menemukan "mode" di sekitar mana accelerometer berfluktuasi. Kemudian temukan jumlah titik digital dengan seberapa banyak output berfluktuasi dan gunakan itu untuk penyaringan Anda.

Saya merekomendasikan pemfilteran Kalman setelah Anda mendapatkan mode dan +/- fluktuasi.

7
Alex Stone

Saya menyadari ini sudah cukup tua, tetapi masalah yang ada tidak dibahas dalam SETIAP jawaban yang diberikan.

Apa yang Anda lihat adalah akselerasi linier perangkat termasuk efek gravitasi. Jika Anda meletakkan ponsel di permukaan yang datar, sensor akan melaporkan percepatan akibat gravitasi yang kira-kira 9.80665 m/s2, sehingga memberikan 10 yang Anda lihat. Sensor-sensornya tidak akurat, tetapi itu tidak akurat! Lihat di sini untuk beberapa tautan dan informasi bermanfaat tentang sensor yang mungkin Anda cari.

5
Simon O'Hanlon

Anda membuat asumsi bahwa pembacaan accelerometer di arah X dan Y, yang dalam hal ini sepenuhnya kebisingan perangkat keras, akan membentuk distribusi normal di sekitar rata-rata Anda. Rupanya bukan itu masalahnya.

Satu hal yang dapat Anda coba adalah memplot nilai-nilai ini pada grafik dan melihat apakah ada pola yang muncul. Jika tidak, maka noise secara statistik acak dan tidak dapat dikalibrasi terhadap - setidaknya untuk perangkat keras ponsel Anda.

0
Hai Phan