<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算法常見的姿態融合算法

3D視覺工坊 ? 來源:3D視覺工坊 ? 2023-05-22 09:22 ? 次閱讀

eb0faa88-f82b-11ed-90ce-dac502259ad0.png

1 前言

Mahony算法常見的姿態融合算法,根據加速度計、陀螺儀、以及磁力計,融合計算機體四元數,計算速度快、精度較高。本文介紹六軸融合,即根據加速度計和陀螺儀數據,計算姿態。
我們需要計算的是機體的姿態。計算角度可以通過角速度積分,也可以通過加速度正交分解,但這兩種方法都存在缺陷。角速度的誤差會隨著積分不斷增大,而加速度存在高頻噪聲,因此希望融合兩種數據。

2 算法

2.1 重力對齊誤差

首先要指出的是,Mahony算法假設加速度計測量的加速度完全由重力提供,即物體本體運動產生的加速度可忽略不計。在這一假設下,我們假設當前時刻機體的姿態為,則將重力向量的表示轉到機體坐標系下,應該為:,這里表示四元數對應的旋轉矩陣:

進一步地,帶入,得到

我們計加速度計測量得到的加速度,如果此時沒有誤差,應該有,但實際兩個向量并不重合,存在一定的誤差 。

為表示出,可以利用向量的叉乘:。因為叉乘的定義為:,當歸一化為單位向量時,反應的就是角度。這里更準確的寫為,下一時刻{t+1}時的誤差為:

其中 為根據當前{t}時刻估計的角度四元數。再記這個誤差的積分量為:

誤差的積分量也參與了后續計算。

2.2 角速度融合

此時已經計算出加速度計觀測出的誤差了,記陀螺儀提供的角速度為,則把陀螺儀角速度的誤差加上上述的誤差,采用控制中常用的比例-積分控制器思想,

得到糾正的角速度。

討論:為什么用叉乘?

陀螺儀由于本身精度問題,測量的角速度存在誤差,在積分過程中這個誤差會一直累加,我們要做的就是去消除或是補償這個誤差,因為加速度計長期的測量值是準確的,所以可以用加速度計來進行修正。如何找到一個另一個角速度量綱的值來修正陀螺儀的角速度值呢?這里明明只有陀螺儀可以測量角速度!這時候前面提到的向量叉積得到的誤差向量就幫上大忙了,這個誤差向量不就是反映出了角度變化量嗎。算法巧妙的將加速度相關量轉化為角度相關量,因而可以用這個角度值乘一個系數來修正陀螺儀的角速度,因為在偏差角度很小的情況下,我們可以將陀螺儀角速度誤差和加速度計求得的角度差看做正比的關系,也就說明陀螺儀積分誤差和向量叉積存在正比關系。[2]

歡迎關注微信公眾號「3D視覺工坊」,加群/文章投稿/課程主講,請加微信:QYong2014,添加時請備注:加群/投稿/主講申請

方向主要包括:3D視覺領域各細分方向,比如相機標定|三維點云|三維重建|視覺/激光SLAM|感知|控制規劃|模型部署|3D目標檢測|TOF|多傳感器融合|AR|VR|編程基礎等。

2.3 計算下一時刻四元數

此時我們已經獲取了下一時刻糾正后的角速度 ,這時候需要計算下一時刻的角度。
我們知道[3]四元數對時間的導數與角速度的關系為 ,即有

此時,再采用歐拉積分[4],即可得到下一時刻姿態與當前時刻姿態的關系:

從而完成了下一時刻姿態的計算。

3 核心代碼解析

我們以Matlab代碼為例,結合上述內容進行介紹:

functionobj=UpdateIMU(obj,Gyroscope,Accelerometer)
q=obj.Quaternion;%當前時刻的四元數
%歸一化加速度計測量數據
if(norm(Accelerometer)==0),return;end%handleNaN
Accelerometer=Accelerometer/norm(Accelerometer);%normalisemagnitude

%計算重力在當前四元數位姿下的分量,即上述公式(2)
v=[2*(q(2)*q(4)-q(1)*q(3))
2*(q(1)*q(2)+q(3)*q(4))
q(1)^2-q(2)^2-q(3)^2+q(4)^2];

%計算重力分量與加速度計的測量誤差,上述公式(3)
e=cross(Accelerometer,v);
if(obj.Ki>0)
obj.eInt=obj.eInt+e*obj.SamplePeriod;%計算誤差的積分,公式(4)
else
obj.eInt=[000];
end

%角速度融合,公式(5)
Gyroscope=Gyroscope+obj.Kp*e+obj.Ki*obj.eInt;

%公式(6)
qDot=0.5*quaternProd(q,[0Gyroscope(1)Gyroscope(2)Gyroscope(3)]);

%歐拉積分計算下一時刻四元數,公式(7)
q=q+qDot*obj.SamplePeriod;
obj.Quaternion=q/norm(q);%結果歸一化
end

4 完整代碼獲取

官方C++/Matlab/C#代碼:https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/
官方python代碼:https://github.com/xioTechnologies/Fusion/tree/main/Python
第三方python姿態解算庫:https://ahrs.readthedocs.io/en/latest/filters/mahony.html

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

    關注

    112

    文章

    15245

    瀏覽量

    171259
  • 數據
    +關注

    關注

    8

    文章

    6515

    瀏覽量

    87617
  • 計算機
    +關注

    關注

    19

    文章

    6653

    瀏覽量

    84589

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

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    導航及無人機姿態檢測融合算法很難?用sensor fusion來搞定!

    簡單來說,姿態融合算法就是融合多種運動傳感器數據(一般需要3軸加速度, 3軸陀螺儀或者3軸地磁感應傳感器),通過數字濾波算法容錯補償,實現當前姿態
    的頭像 發表于 09-05 09:47 ?2.5w次閱讀
    導航及無人機<b class='flag-5'>姿態</b>檢測<b class='flag-5'>融合算法</b>很難?用sensor fusion來搞定!

    Spring Boot和飛騰派融合構建的農業物聯網系統-改進自適應加權融合算法

    接上集: 上次實驗我們已經完成多傳感器融合算法的設計,本次實驗注意完成改進自適應加權融合算法設計。 一、背景 通過利用溫室控制系統來管理溫室內的各種設備并控制溫度、濕度,可以更好地探索和掌握環境因素
    發表于 01-06 12:18

    關于姿態融合算法的問題,算出的歐拉角為什么不對

    來來回回折騰了很久,一直沒搞定姿態融合算法,算出來的歐拉角怎么都不對。說明:我用的傳感器是mpu9150,定義的板子的坐標是:x軸指向北,y軸指向東,z軸指向地。陀螺儀、加速度計和磁力計的軸向經過
    發表于 05-22 14:24

    【TL6748 DSP申請】基于TMS320C6748的傳感器數據融合算法實現

    申請理由:之前有使用過TI的DSP處理器,現在正好有個項目,準備采用TI的C6000系列DSP用于傳感器數據融合算法的實現。希望能夠通過申請,謝謝。項目描述:由于工業機器人的重復定位精度和絕對定位
    發表于 09-10 11:13

    姿態融合算法是什么

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

    常用的無線傳感器網絡數據融合算法有什么優缺點?

    本文介紹了幾類常用的無線傳感器網絡數據融合算法,并比較了其優缺點。
    發表于 06-03 06:41

    卡爾曼濾波九軸融合算法stm32嘗試

    一、卡爾曼濾波九軸融合算法stm32嘗試1、Kalman濾波文件[.h已經封裝為結構體]Kalman.h2、I2C總線代碼[這里把MPU和HMC掛接到上面,通過改變SlaveAddress的值來
    發表于 02-10 07:18

    一種實用的數據融合算法

    摘要:文章分析了目前一些數據融合算法中對先驗信息要求苛刻,定義數據間支持度中門限預先設定對融合結果的不利影響,提出了一種實用的數據融合算法,該算法中定義了一種新
    發表于 01-18 23:20 ?16次下載

    多傳感器跟蹤型數據濾波融合算法

    在實際系統中,常用的數據融合方法是基于擴展的卡爾曼濾波算法融合算法,但是這種融合算法的跟蹤精度并不是很高. 通過對濾波跟蹤型數據融合的研究
    發表于 07-14 11:28 ?15次下載

    基于COM的數據融合算法測試平臺開發

    基于COM的數據融合算法測試平臺開發 建立了一個基于COM技術的數據融合算法測試平臺,把數據融合算法封裝到組件中,并定義了一種COM接口規范,為算法調用提供了一
    發表于 02-22 15:45 ?8次下載

    聚類算法及聚類融合算法研究

    聚類算法及聚類融合算法研究首先對 聚類算法 的特點進行了分析,然后對聚類融合算法進行了挖掘。最后得出聚類融合算法比聚類
    發表于 08-10 15:08 ?33次下載
    聚類<b class='flag-5'>算法</b>及聚類<b class='flag-5'>融合算法</b>研究

    基于DCT的遙感圖像融合算法_曹流

    基于DCT的遙感圖像融合算法_曹流
    發表于 03-19 19:07 ?1次下載

    ST姿態檢測融合算法技術介紹

      姿態融合算法就是融合多種運動傳感器數據(一般需要3軸加速度,3軸陀螺儀或者3軸地磁感應傳感器),通過數字濾波算法容錯補償,實現當前姿態
    發表于 09-18 18:33 ?11次下載
    ST<b class='flag-5'>姿態</b>檢測<b class='flag-5'>融合算法</b>技術介紹

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

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

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

    Mahony濾波算法參數自動調節方法是一種用于姿態估計的濾波算法。
    的頭像 發表于 12-06 09:45 ?419次閱讀
    亚洲欧美日韩精品久久_久久精品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>