Jadi jawaban saya yang lebih lama di bawah ini mengasumsikan bahwa papan akan mengalami akselerasi dan selama waktu ini Anda masih harus dapat mengukur nada, putar, dan menguap dalam waktu singkat. Jika papan akan diam untuk semua pengukuran maka jawaban Mahendra Gunawardena akan bekerja dengan baik untuk Anda. Jika ini masuk ke perangkat seperti segway atau pesawat model atau multirotor atau apa pun yang bergerak, Anda mungkin ingin terus membaca. Posting ini adalah tentang bagaimana menggunakan ketiga sensor melalui metode yang disebut sensor fusion. Sensor fusion memungkinkan Anda untuk mendapatkan kekuatan dari setiap sensor dan meminimalkan efek dari kelemahan masing-masing sensor.
Karakteristik dan latar belakang sensor
Pertama-tama pahami bahwa accelerometer mengukur semua gaya yang diterapkan padanya, bukan hanya gaya gravitasi. Jadi di dunia yang sempurna dengan akselerometer dalam posisi diam tanpa getaran apa pun, Anda dapat dengan sempurna menentukan jalan mana yang menggunakan beberapa trigonometri dasar seperti ditunjukkan oleh jawaban Mahendra Gunawardena. Namun karena accelerometer akan menangkap semua kekuatan, getaran apa pun akan menghasilkan kebisingan. Perlu juga dicatat bahwa jika papan berakselerasi Anda tidak bisa hanya menggunakan trigonometri sederhana karena gaya yang dilaporkan accelerometer tidak hanya gaya gravitasi bumi tetapi juga gaya yang menyebabkan Anda berakselerasi.
Sebuah magnetometer lebih mudah daripada accelerometer. Gerakan tidak akan menyebabkan masalah dengan itu tetapi hal-hal seperti besi dan magnet lainnya pada akhirnya akan mempengaruhi hasil Anda. Jika sumber-sumber yang menyebabkan gangguan ini konstan, maka tidak sulit untuk ditangani, tetapi jika sumber-sumber ini tidak konstan akan menghasilkan banyak kebisingan yang sulit untuk dihilangkan.
Dari ketiga sensor tersebut, giroskop bisa dibilang yang paling andal dan mereka biasanya sangat sangat baik dalam mengukur kecepatan rotasi. Itu tidak terpengaruh oleh hal-hal seperti sumber besi dan akselerasi pada dasarnya tidak berdampak pada kemampuan mereka untuk mengukur kecepatan rotasi. Mereka melakukan pekerjaan yang sangat baik untuk melaporkan kecepatan di mana perangkat berputar, namun karena Anda mencari sudut absolut Anda harus mengintegrasikan kecepatan untuk mendapatkan posisi. Melakukan ini akan menambah kesalahan pengukuran terakhir ke kesalahan pengukuran baru karena integrasi pada dasarnya adalah jumlah nilai pada suatu rentang, bahkan jika kesalahan untuk satu pengukuran hanya 0,01 derajat per detik, dalam 100 pengukuran, posisi Anda bisa dimatikan dengan 1 derajat, dengan 1000 pengukuran, Anda bisa mati dengan 10 derajat. Jika Anda melakukan ratusan pengukuran per detik, Anda dapat melihat ini menyebabkan masalah. Ini biasa disebut gyro drift.
Sensor fusi
Sekarang keindahan dari semua sensor ini bekerja bersama adalah bahwa Anda dapat menggunakan informasi dari accelerometer dan magnetometer untuk membatalkan penyimpangan gyro. Ini akhirnya memungkinkan Anda untuk memberi Anda keakuratan dan kecepatan gyro tanpa cacat fatal gyro drift.
Menggabungkan data dari ketiga sensor ini dapat dilakukan dalam lebih dari satu cara, saya akan berbicara tentang menggunakan filter komplementer karena jauh lebih sederhana maka filter kalman dan filter kalman akan menghabiskan lebih banyak sumber daya pada sistem tertanam. Sering kali filter komplementer cukup bagus, lebih mudah diimplementasikan (dengan asumsi Anda tidak menggunakan pustaka yang dibuat sebelumnya) dan memungkinkan Anda memproses data lebih cepat.
Sekarang ke proses. Langkah pertama yang perlu Anda lakukan adalah mengintegrasikan output giroskop untuk mengubah kecepatan sudut menjadi posisi sudut. Anda juga kemungkinan besar harus menerapkan filter low pass pada accelerometer dan magnetometer untuk menangani kebisingan di output. Filter FIR sederhana seperti yang ditunjukkan di bawah ini berfungsi di sini. Dengan beberapa trigonometri Anda dapat menemukan pitch and roll dengan accelerometer dan yaw dengan magnetometer.
filteredData = (1-weight)*filteredData + weight*newData
Berat hanya konstan yang dapat disesuaikan tergantung pada seberapa banyak kebisingan Anda harus berurusan dengan, semakin tinggi kebisingan semakin kecil nilai bobotnya. Sekarang menggabungkan data dari sensor dapat dilakukan dengan baris kode berikut.
fusedData = (1-weight)*gyroData + weight*accelMagData
Perlu dicatat bahwa data adalah vektor dari pitch, roll, dan yaw. Anda bisa menggunakan tiga variabel untuk melakukan ini juga, bukan array jika Anda mau. Untuk perhitungan ini, gyro memberikan posisi dalam derajat dalam pitch, roll, dan yaw, magnetometer memberikan sudut untuk yaw, sementara accelerometer menyediakan angka sendiri untuk pitch dan roll.
Jika Anda masih menginginkan informasi lebih lanjut, Anda dapat menggunakan "sensor fusion with filter komplementer" dari google, ada banyak artikel tentang ini.