Saya sedang mengerjakan Magnetometer AK8975 yang menjadi bagian dari IMU. Yang sepertinya sangat rumit bagi saya. Chip ini memberikan vektor 3D sebagai output yang menggambarkan medan magnet bumi di setiap tempat di bumi atau di dekatnya.
Saya mencoba dua jenis algoritma perhitungan tajuk: Satu sederhana arctan(-y/x)
dan satu lagi kecenderungan (pitch) dan bank (roll) membatalkan matematika seperti disebutkan di bawah ini. Baik pada kecenderungan dan bank memberikan output yang salah.
Saya bisa mendapatkan heading yang benar di bumi (menggunakan sumber belajar terbuka sederhana yang tersedia) ketika diputar menjaga horizontal pada rencana tanah menggunakan salah satu dari dua algo.
Saya mencoba kalibrasi untuk kesalahan lunak dan keras. Saya bisa memplotnya dalam 3D dan menunjukkan sphere 3D yang sempurna. Masih tidak bekerja pada kecenderungan atau deklinasi.
Setiap pointer akan sangat membantu.
Kode dan implementasinya adalah sebagai berikut:
void Compass_Heading()
{
double MAG_X;
double MAG_Y;
double cos_roll;
double sin_roll;
double cos_pitch;
double sin_pitch;
cos_roll = cos(roll);
sin_roll = sin(roll);
cos_pitch = cos(pitch);
sin_pitch = sin(pitch);
//// Tilt compensated Magnetic filed X:
MAG_X = magnetom_x*cos_pitch + magnetom_y*sin_roll*sin_pitch + magnetom_z*cos_roll*sin_pitch;
//// Tilt compensated Magnetic filed Y:
MAG_Y = magnetom_y*cos_roll-magnetom_z*sin_roll;
//// Magnetic Heading
MAG_Heading = atan2(-MAG_Y, MAG_X) ;
}
Di mana magnetom_x
, #_y
dan #_z
merupakan komponen vektor 3D yang sebenarnya adalah nilai RAW dari Magnetometer. roll and pitch berasal dari output Kalman-filter misterius dari onboard accelerometer dan gyroscope. Ketiga sensor ini berada di ATAVRSBIN1 . Roll and pitch tidak apa-apa sampai tahap ini.
Sekarang perhitungan heading sederhana sesuai dengan journal_of_sensors_renaudin et al_2010c.pdf seharusnya MAG_Heading = atan2(-magnetom_y, magnetom_x) ;
dan dengan kompensasi seperti di atas.
Kode keseluruhan hanya dari OPEN AHRS .
Data dalam format Roll, Pitch dan Yaw. Saya memutar perangkat hanya dengan tangan saya. Tiga pertama telah terkonsentrasi hanya pada Roll, Pitch dan Yaw masing-masing. Sisa dua yang pertama diputar perangkat sekitar 45 derajat sepanjang X (Rolled) kemudian diputar bersama Z lokal Magnetometer. Kemudian sama telah diulang dengan sekitar 45 Derajat rotasi sepanjang Y (bernada) kemudian diputar bersama Z lokal Magnetometer.
Grafik diplot dalam kisaran -180 hingga 180 derajat.
Sudut dalam derajat dalam file Karakteristik YAW pada Roll.
Sudut dalam derajat dalam file Karakteristik YAW pada Pitch.
Sudut dalam derajat dalam file Karakteristik YAW pada Yaw itu sendiri.
Sudut dalam derajat dalam file Karakteristik YAW di Yaw dengan 45 derajat digulung.
Sudut dalam derajat dalam file Karakteristik YAW di Yaw dengan 45 derajat bernada.
Catatan: Untuk 2 gambar terakhir: Pertama disimpan di posisi rumah, itu sama untuk semua (lihat file txt). Kemudian Rolled 45 derajat kemudian menggunakan perangkat pesawat (dengan magnetometer) telah diputar sepanjang sumbu Z Magnetometer.
Demikian pula untuk gambar terakhir perangkat telah dinaikkan 45 derajat kemudian di sepanjang sumbu Z Magnetometer.
Saya harap ini akan membantu menyelesaikan masalah saya.
Perkembangan baru adalah sebagai berikut:
Saya mengerjakan beberapa di Pos. Saya mendapat hasil berikut. csv
sumber
Jawaban:
Saya suka grafik Anda. Mereka dengan jelas menunjukkan bahwa roll, pitch, dan yaw tampaknya berfungsi. Selamat! Itu sudah lebih banyak kemajuan daripada yang dicapai kebanyakan orang.
Saya menduga bahwa kode yang Anda tampilkan menghitung nilai MAG_Heading "salah", berbeda dari nilai MAG_Heading yang Anda harapkan.
Akan jauh lebih mudah bagi kami untuk membantu Anda jika Anda memberi kami: (Ini adalah bagian "jelaskan gejala" dari "Cara Mengajukan Pertanyaan dengan Cara Cerdas" )
Jadi saya berspekulasi bahwa mungkin Anda mengalami masalah yang sama yang saya buat untuk diri saya sendiri :-).
Tampaknya ada orang lain yang membahas kode yang sangat mirip di tempat lain: http://diydrones.com/forum/topics/heading-from-3d-magnetometer ; http://diydrones.ning.com/profiles/blogs/dcm-imu-theory-first-draft ; http://aeroquad.com/showthread.php?1138-REVOLUTION!!!-Baru-IMU !!! ; http://www.rcgroups.com/forums/showthread.php?t=1436742&page=6 ; http://aeroquad.com/showthread.php?691-Hold-your-heading-with-HMC5843-Magnetometer ; dll.
sumber
Catatan aplikasi untuk LSM303 memiliki panduan yang berguna untuk mengkalibrasi kompas dengan kompensasi miring yang berlaku untuk masalah Anda. Ini cukup rinci, kalau tidak saya akan menulis ulang perhitungan di sini. Perhatikan bahwa nilai akselerometer diperlukan untuk perhitungan pitch, roll, dan yaw penuh karena rotasi di sekitar sumbu garis medan magnet tidak menghasilkan perubahan nilai magnetometer. Begitu juga untuk gravitasi dengan accelerometer.
sumber