<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

理解Mahony濾波算法的實現過程

zhc135136 ? 來源:SmartHWFW ? 2023-11-13 10:55 ? 次閱讀

1. 說在前面的

之前調試基于QMI8658 6軸姿態解算的時候,我對Mahony濾波的認識還比較淺薄。初次的學習和代碼的移植讓我對四元數、歐拉角、旋轉余弦矩陣有了一定的接觸。然而,直到我將地磁傳感器加入到我的硬件,進行9軸姿態解算時,我深深地感受到對四元數與姿態陣之間關系的理解是非常重要的。在此之前,我檢索了網絡文章,并記錄了《MEMS_慣性傳感器09 - Mahony姿態解算算法詳解》、《MEMS_慣性傳感器14 - Mahony濾波算法的代碼分析》兩篇文章??赡軐τ诖罄?、資深工程師來說,這些文章的嚴謹性不夠,可能會誤導別人。但我必須承認,我仍然沒有扎實的數學計算研究背后更深層次的理論。即使如此,我依然希望通過自己的努力在慣性導航算法上學習得更深入一些。同時,我也想多記錄一些學到的知識,多記錄一些自己的理解和思考。希望這些記錄能幫助到一些初學者。如果我的文章有錯誤的引導,我非常希望大佬們能夠指正,因為這對我來說是最大的收獲,我非常樂意傾聽和學習。我愿意自我突圍,向著理想前進!

這次學習檢索時發現了一個博文內容硬核、有理有據的博主:路癡導航員[1]。她的博文 《AHRS互補濾波(Mahony)算法及開源代碼》對我幫助很大。

2.Mahony濾波算法的核心思想

Mahony濾波算法的核心思想是通過將角速度和角度的測量值與歷史估計值進行加權平均,從而得到更加準確的姿態估計結果。同時,濾波算法還利用加速度計的測量值來糾正姿態角度的漂移。該算法也存在一些缺點,例如對于快速旋轉和加速度變化較大的情況,其姿態估計結果可能會出現較大的誤差。

3. 易懂的理解 Mahony 濾波算法的過程

為了更好的理解,表達式先不用矩陣的思想,在算法的實現的過程中,需要將表達式轉換成矩陣形式。

① 根據陀螺儀的測量數據計算出角速度的增量,即:

Δθ = 0.5 * (gyro + bias) * Δt

其中,gyro表示陀螺儀的測量值,bias表示陀螺儀的零偏誤差,Δt表示時間間隔。

② 根據加速度計的測量數據計算出重力方向的估計值,即:

g_est = q * (0, 0, -1) * q^-1

其中,q表示四元數的姿態估計值。

③ 根據加速度計的測量數據和重力方向的估計值,計算出加速度計的誤差,即:

acc_err = acc_meas - g_est

其中,acc_meas表示加速度計的測量值。

④ 根據角速度的增量和加速度計的誤差,更新四元數的姿態估計值,即:

q = q * exp(Δθ - K * acc_err)

其中,K為控制增益。

4. 其他的一些思考

傳感器EVB板的測量數據以載體坐標系(b-框架)表示。歐拉角的直觀表示描述了地理坐標系中的角度,其中包括重力的影響。地理坐標系中的重力矢量為[0,0,1]g,磁傳感器將地球磁場中的強度表示為[cos(θ),0,sin(θ)]guess。因此,在算法中,加速度和磁數據被歸一化,確保它們的模是一定大小的。

四元數從地理坐標系(東北天)轉換到載體坐標系,就得到了旋轉矩陣Cnb。

60b59c4a-7fd9-11ee-939d-92fbcf53809c.png

Cnb的最后一列取負,即將其轉換為載體坐標系中的值。在理想情況下,如果沒有誤差,這個矢量應該與測量值相等。然而,由于這兩者總會存在差異,因此我們需要利用它們之間的差值來修正陀螺儀更新的不準確性。

在修正的過程中,我們認為加速度計測量的可信度較高,還需要使用地磁傳感來修正加速度傳感的Z軸。磁力計的模的長度是確定的,但是兩個分量的具體大小無法像重力加速度一樣確定。因此,我們使用上一次的四元數得到的Cbn(從載體到地理坐標系的旋轉矩陣)來計算測量的磁場強度。理論上,此刻的Cbn應該在東向上的分量是零[cos(θ),0,sin(θ)],而北向和地向會有分量。然而,由于此刻的Cbn尚未得到,我們使用的是上一次的Cbn,并加上一些測量誤差,導致東向上仍會有分量存在。為了處理這種情況,我們將xy平面的分量合成到一個方向上,使得y軸上的分量為0。這樣,處理后的地磁信息的地位就與重力加速度(0,0,-1)相似了。

根據余弦矩陣和歐拉角的定義,我們可以將地理坐標系的重力向量轉換到載體坐標系中。具體而言,將四元數轉換成方向余弦矩陣后,我們可以得到方向余弦矩陣的第三列的三個元素,即vx、vy和vz。這三個元素實際上表示了當前歐拉角(即四元數)在載體坐標系上換算得到的重力單位向量。

60cca3d6-7fd9-11ee-939d-92fbcf53809c.png

axayaz是載體坐標參照系上,加速度計測出來的重力向量。vxvyvz是陀螺積分后的姿態推算出的重力向量。它們之間的誤差向量exeyez是陀螺積分后的姿態和加計測出來的姿態之間的誤差。誤差向量可以用向量叉積來表示。叉積向量exeyez位于載體坐標系上,且其大小與陀螺積分誤差成正比,可用于糾正陀螺。由于陀螺是對機體直接積分,所以對陀螺的糾正量會直接體現在對載體坐標系的糾正。

60dae068-7fd9-11ee-939d-92fbcf53809c.png

矢量之間的叉乘公式為err = A × B = |A| × |B| × sin(β)。當兩個矢量重合時,誤差為零,表示沒有差異。當兩個矢量之間夾角為90°時,誤差達到最大值,表示差異最大。然而,在夾角為90°附近的區間內,誤差的變化是非線性的,這可能導致一些準確性問題。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2525

    文章

    48137

    瀏覽量

    740265
  • mems
    +關注

    關注

    128

    文章

    3738

    瀏覽量

    188774
  • 加速度計
    +關注

    關注

    6

    文章

    662

    瀏覽量

    45431
  • 慣性傳感器
    +關注

    關注

    2

    文章

    162

    瀏覽量

    27729
  • 濾波算法
    +關注

    關注

    2

    文章

    83

    瀏覽量

    13661

原文標題:MEMS_慣性傳感器17-調試 Mahony 濾波算法的思考

文章出處:【微信號:SmartHWFW,微信公眾號:SmartHWFW】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA實現滑動平均濾波算法和LZW壓縮算法

    采集數據中的量化噪聲,在進行數據壓縮前采用濾波的預處理技術。介紹LZW算法和滑動濾波算法的基本理論,詳細闡述用單片FPGA實現兩種
    發表于 04-24 09:05

    基于FPGA的中值濾波算法實現

    ` 本帖最后由 ninghechuan 于 2017-9-1 07:04 編輯 在這一篇開篇之前,我需要解決一個問題,上一篇我們實現了基于FPGA的均值濾波算法實現,最后的顯示效
    發表于 09-01 07:04

    姿態融合算法是什么

    作者:Joy Yang1.什么是姿態融合算法簡單來說,姿態融合算法就是融合多種運動傳感器數據(一般需要3軸加速度, 3軸陀螺儀或者3軸地磁感應傳感器),通過數字濾波算法容錯補償,
    發表于 07-19 06:47

    介紹幾種嵌入式常用濾波算法的matlab實現

    計算過程,可靠性高,不存在阻抗匹配問題。尤其是數字濾波可以對頻率很低的信號進行濾波,這是模擬濾波器做不到的。數字濾波使用軟件
    發表于 12-21 08:32

    采用軟件算法實現數字濾波

    單片機主要作用是控制外圍的器件,并實現一定的通信和數據處理。但在某些特定場合,不可避免地要用到數學運算,盡管單片機并不擅長實現算法和進行復雜的運算。下面主要是介紹如何用單片機實現數字
    發表于 01-18 07:00

    軟件算法實現數字濾波問題

    軟件算法實現數字濾波問題:解決方法:數字濾波算法優點:限幅濾波
    發表于 01-20 06:58

    基于分布式算法的FIR濾波器的設計與實現

    本文介紹了能高效實現固定常數乘法的分布式算法原理,給出了在FPGA 中用查找表實現FIR濾波器的算法設計,并以一個16 階低通
    發表于 09-02 10:10 ?10次下載

    QT+Opencv粒子濾波算法實現視頻目標跟蹤——(二)濾波算法分析及測試

    在前一個博客中已經對機器視覺及粒子濾波算法的相關原理進行了介紹,在基于410c平臺實現粒子濾波算法的前期,我們在上位機上應用QT和Openc
    發表于 02-21 09:53 ?3628次閱讀
    QT+Opencv粒子<b class='flag-5'>濾波</b><b class='flag-5'>算法</b><b class='flag-5'>實現</b>視頻目標跟蹤——(二)<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>分析及測試

    如何使用FPGA實現圖像的中值濾波算法

    圖像濾波是圖像預處理過程中葦要的組成部分,而基于FPGA的濾波算法相對軟件算法而言具有高度的并行性。能滿足實時圖像處理的要求.同時也具有靈活
    發表于 04-01 11:21 ?42次下載
    如何使用FPGA<b class='flag-5'>實現</b>圖像的中值<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>

    IMU姿態濾波算法——Mahony算法:原理與代碼

    首先要指出的是,Mahony算法假設加速度計測量的加速度完全由重力提供,即物體本體運動產生的加速度可忽略不計。在這一假設下,我們假設當前時刻機體的姿態為,則將重力向量的表示轉到機體坐標系下,應該為:,這里表示四元數對應的旋轉矩陣
    的頭像 發表于 05-22 09:18 ?2128次閱讀
    IMU姿態<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>——<b class='flag-5'>Mahony</b><b class='flag-5'>算法</b>:原理與代碼

    Mahony算法常見的姿態融合算法

    首先要指出的是,Mahony算法假設加速度計測量的加速度完全由重力提供,即物體本體運動產生的加速度可忽略不計。在這一假設下,我們假設當前時刻機體的姿態為,則將重力向量的表示轉到機體坐標系下,應該為:,這里表示四元數對應的旋轉矩陣:
    的頭像 發表于 05-22 09:22 ?1437次閱讀
    <b class='flag-5'>Mahony</b><b class='flag-5'>算法</b>常見的姿態融合<b class='flag-5'>算法</b>

    經典的濾波算法:Madgwick濾波算法

    Madgwick算法Mahony算法相比,最大的不同之處是如何對待加速度計估計的誤差。Mahony是利用叉乘,Madgwick是利用優化;
    的頭像 發表于 05-31 11:12 ?1643次閱讀
    經典的<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>:Madgwick<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>

    Mahony濾波器的原理和公式推導

    ? 1.?概述 在進行代碼分析之前,了解Mahony濾波器的原理和公式推導是必要的。Mahony濾波器是一種基于四元數的姿態估計濾波器,其主
    的頭像 發表于 06-17 11:18 ?1854次閱讀
    <b class='flag-5'>Mahony</b><b class='flag-5'>濾波</b>器的原理和公式推導

    Mahony濾波算法參數自動調節方法介紹

    Mahony濾波算法參數自動調節方法是一種用于姿態估計的濾波算法。
    的頭像 發表于 12-06 09:45 ?419次閱讀

    詳解從均值濾波到非局部均值濾波算法的原理及實現方式

    圖像降噪處理主要分為2D(空域)與3D降噪(時域/多幀),而2D降噪由于相關的實現 算法 豐富,效果各異,初學入門有著豐富的研究價值。理解2D降噪算法的流程,也對其他的增強
    的頭像 發表于 12-19 16:30 ?368次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>