Sensör Fusion Algoritması

Başlatan esdevhk, 07 Kasım 2019, 22:58:36

esdevhk

İyi günler arkadaşlar,

Elimdeki IMU sensöründen oryantasyon açılarını elde etmekle uğraşıyorum. Sensörden ham datayı okuyup scale etmede bir sıkıntım yok. Başlarda "Complemantary Filter" kullandım fakat hem basit hem de başlangıç seviye bir algoritma olduğundan başka algoritmalar aramaya başladım. Sensör fusion çıktı karşıma ve "Madgwick Algoritması" ' nı araştırıyorum birkaç zamandır. Algoritmayı uyguladım ve "Quarternion" katsayilarını elde ettim bir sıkıntı yok. Daha sonrasında Quarternion to Euler Angles diye aratayım dedim bir şeyler de buldum uyguladım. Başlarda "Heh oldu lan" dediysem de sevincim kursağımda kaldı diyebilirim :) Çünkü ne göreyim sensöre +/- 90 derece pitch açısı yaptırdığımda roll açımda inanılmaz bir sapıtma oluyor. Bunu bir araştırayım dedim ve karşıma "Gimbal Lock" konusu çıktı ve anladığım kadarıyla bu sorun Euler Ekseninde kaçınılmaz bir şeymiş. Hatta Apollo13 zamanında bile bu sorunla karşılaşılmış.

Daha sonrasın 1984 yılında bir abimiz Quarternion Matematiği denen bir şey yapmış ve 3D uzaydan 4D uzaya geçerek işlemler yapmış ve eksen açılarını bulmuş. Günümüzde de havacılık ve robot sanayinde yoğun olarak kullanılmakta imiş. Çok uzattım affedin. Özetle bu sorunla karşılaşıp bir çözüm üreten veya farklı bir çözüm yolu bulan arkadaşlarımız varsa aramızda yardımlarınızı bekliyorum :)

Teşekkürler.

devrecii

Açı ile tanımlarsan bu dediğin olur, normal ile tanımlaman gerekir , bu çözülememiş bir olay,  matemetiksel bir olay değil gayet mantıksal bir durum hata filan yok

aşağıdaki resme bak bir uçak yukarı doğru gidiyor farzedelim +y ekseninde uçağın burnunu -y ekesenine çevirmek istiyoruz
uçağı yandan çevridik ne oldu kantlar A-B oldu ,  uçağı öne doğru eğerek çevirdiğimizi düşünelim ne oldu kanatlar tam tersi oldu ucak kendi ekseni etrafında döndü biz bunu istemiyoruz o zman ucağın kanatlarını normal ile tanımlaman gerekir buna da zaten matrix diyoruz. yani matixleri öğren.

Resime bakarsan neden olduğunu anlayacasın



devrecii

#2
Quaternionslar matrixlerin sıkıştırılmış ziplenmiş halidir, quaternionlar kendi başına hiçbir işe yaramaz ,bazı dönüşüm kolaylığı sağlıyorlar ama sonunda yine matrixe çevrlip kullanılırlar, matrixde 3 tane birbirine dik normal vardır 3 ekseni tanımlayan aradaki açı tam doksan derece olduğu için bazı hesaplamalar ile adamlar bunu 1/4 oranında küçültmüşler ziplemişlar.

Benim şöle bir çalışmam vardı burada uçağın konumu iki tane normalle hesaplanıyor bu normaller dotproduct ile ve arccos ile istediğim gibi açıyı bulabiliyordum ciroskopda kullanmıştım

Senin bahsettiğin error ciroskopta oluyordu bu eroor dedğil dediğim gibi böyle olması lazım zaten. Bu şekilde işine yaramıyormu , dedğim gibi sadece açıyla tanımlamada o hata olacak ya kabul edecen yada ek olarak bir normal ekleyeceksin verilere.


esdevhk

Alıntı yapılan: iboibo - 08 Kasım 2019, 03:30:07Quaternionslar matrixlerin sıkıştırılmış ziplenmiş halidir, quaternionlar kendi başına hiçbir işe yaramaz ,bazı dönüşüm kolaylığı sağlıyorlar ama sonunda yine matrixe çevrlip kullanılırlar, matrixde 3 tane birbirine dik normal vardır 3 ekseni tanımlayan aradaki açı tam doksan derece olduğu için bazı hesaplamalar ile adamlar bunu 1/4 oranında küçültmüşler ziplemişlar.

Benim şöle bir çalışmam vardı burada uçağın konumu iki tane normalle hesaplanıyor bu normaller dotproduct ile ve arccos ile istediğim gibi açıyı bulabiliyordum ciroskopda kullanmıştım

Senin bahsettiğin error ciroskopta oluyordu bu eroor dedğil dediğim gibi böyle olması lazım zaten. Bu şekilde işine yaramıyormu , dedğim gibi sadece açıyla tanımlamada o hata olacak ya kabul edecen yada ek olarak bir normal ekleyeceksin verilere.



Cevabınız için teşekkürler aslında "hata" demem yanlıs oldu haklısınız. Gimbal lock aslında olması gereken bir şey evet. Otopilot projemde kullanacağım aslında. Hava aracımın +/-90 derecelere ulaşması zor evet videodaki halide fena değil ama işte sormak istedim farklı çözümler var mı diye.