0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Mahony算法常見的姿態(tài)融合算法

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

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

1 前言

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

2 算法

2.1 重力對齊誤差

首先要指出的是,Mahony算法假設(shè)加速度計(jì)測量的加速度完全由重力提供,即物體本體運(yùn)動產(chǎn)生的加速度可忽略不計(jì)。在這一假設(shè)下,我們假設(shè)當(dāng)前時刻機(jī)體的姿態(tài)為,則將重力向量的表示轉(zhuǎn)到機(jī)體坐標(biāo)系下,應(yīng)該為:,這里表示四元數(shù)對應(yīng)的旋轉(zhuǎn)矩陣:

進(jìn)一步地,帶入,得到

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

為表示出,可以利用向量的叉乘:。因?yàn)椴娉说亩x為:,當(dāng)歸一化為單位向量時,反應(yīng)的就是角度。這里更準(zhǔn)確的寫為,下一時刻{t+1}時的誤差為:

其中 為根據(jù)當(dāng)前{t}時刻估計(jì)的角度四元數(shù)。再記這個誤差的積分量為:

誤差的積分量也參與了后續(xù)計(jì)算。

2.2 角速度融合

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

得到糾正的角速度。

討論:為什么用叉乘?

陀螺儀由于本身精度問題,測量的角速度存在誤差,在積分過程中這個誤差會一直累加,我們要做的就是去消除或是補(bǔ)償這個誤差,因?yàn)榧铀俣扔?jì)長期的測量值是準(zhǔn)確的,所以可以用加速度計(jì)來進(jìn)行修正。如何找到一個另一個角速度量綱的值來修正陀螺儀的角速度值呢?這里明明只有陀螺儀可以測量角速度!這時候前面提到的向量叉積得到的誤差向量就幫上大忙了,這個誤差向量不就是反映出了角度變化量嗎。算法巧妙的將加速度相關(guān)量轉(zhuǎn)化為角度相關(guān)量,因而可以用這個角度值乘一個系數(shù)來修正陀螺儀的角速度,因?yàn)樵谄罱嵌群苄〉那闆r下,我們可以將陀螺儀角速度誤差和加速度計(jì)求得的角度差看做正比的關(guān)系,也就說明陀螺儀積分誤差和向量叉積存在正比關(guān)系。[2]

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

方向主要包括:3D視覺領(lǐng)域各細(xì)分方向,比如相機(jī)標(biāo)定|三維點(diǎn)云|三維重建|視覺/激光SLAM|感知|控制規(guī)劃|模型部署|3D目標(biāo)檢測|TOF|多傳感器融合|AR|VR|編程基礎(chǔ)等。

2.3 計(jì)算下一時刻四元數(shù)

此時我們已經(jīng)獲取了下一時刻糾正后的角速度 ,這時候需要計(jì)算下一時刻的角度。
我們知道[3]四元數(shù)對時間的導(dǎo)數(shù)與角速度的關(guān)系為 ,即有

此時,再采用歐拉積分[4],即可得到下一時刻姿態(tài)與當(dāng)前時刻姿態(tài)的關(guān)系:

從而完成了下一時刻姿態(tài)的計(jì)算。

3 核心代碼解析

我們以Matlab代碼為例,結(jié)合上述內(nèi)容進(jìn)行介紹:

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

%計(jì)算重力在當(dāng)前四元數(shù)位姿下的分量,即上述公式(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];

%計(jì)算重力分量與加速度計(jì)的測量誤差,上述公式(3)
e=cross(Accelerometer,v);
if(obj.Ki>0)
obj.eInt=obj.eInt+e*obj.SamplePeriod;%計(jì)算誤差的積分,公式(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)]);

%歐拉積分計(jì)算下一時刻四元數(shù),公式(7)
q=q+qDot*obj.SamplePeriod;
obj.Quaternion=q/norm(q);%結(jié)果歸一化
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姿態(tài)解算庫:https://ahrs.readthedocs.io/en/latest/filters/mahony.html

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16367

    瀏覽量

    178108
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7035

    瀏覽量

    89045
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7494

    瀏覽量

    87976

原文標(biāo)題:IMU姿態(tài)濾波算法——Mahony算法:原理與代碼

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

收藏 人收藏

    評論

    相關(guān)推薦

    導(dǎo)航及無人機(jī)姿態(tài)檢測融合算法很難?用sensor fusion來搞定!

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

    傳感器數(shù)據(jù)融合算法python代碼

    傳感器數(shù)據(jù)融合算法是一種將多個傳感器收集到的數(shù)據(jù)合并到一個一致和準(zhǔn)確的表示中的技術(shù)。這種算法的目的是提高數(shù)據(jù)精確性和可靠性,從而增強(qiáng)對環(huán)境或目標(biāo)的理解和控制。在本文中,我們將詳細(xì)討論傳感器數(shù)據(jù)融合算法
    的頭像 發(fā)表于 12-15 10:28 ?1457次閱讀

    Spring Boot和飛騰派融合構(gòu)建的農(nóng)業(yè)物聯(lián)網(wǎng)系統(tǒng)-改進(jìn)自適應(yīng)加權(quán)融合算法

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

    姿態(tài)融合算法是什么

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

    常用的無線傳感器網(wǎng)絡(luò)數(shù)據(jù)融合算法有什么優(yōu)缺點(diǎn)?

    本文介紹了幾類常用的無線傳感器網(wǎng)絡(luò)數(shù)據(jù)融合算法,并比較了其優(yōu)缺點(diǎn)。
    發(fā)表于 06-03 06:41

    一種實(shí)用的數(shù)據(jù)融合算法

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

    多傳感器異步航跡融合算法與仿真

    針對分布式多傳感器數(shù)據(jù)融合系統(tǒng),提出了一種多傳感器異步航跡融合算法。由于不同傳感器的采樣時間各不相同,融合算法首先利用最小二乘法將局部航跡統(tǒng)一到融合中心的
    發(fā)表于 08-07 09:47 ?12次下載

    基于COM的數(shù)據(jù)融合算法測試平臺開發(fā)

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

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

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

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

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

    ST姿態(tài)檢測融合算法技術(shù)介紹

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

    如何使用FPGA實(shí)現(xiàn)動態(tài)可重構(gòu)的圖像融合算法

    一種基于FPGA動態(tài)可重構(gòu)的圖像融合算法。該方法對小波分解后的圖像低頻子帶采用平均融合算子處理,在高頻子帶的融合中依據(jù)小波系數(shù)樹狀結(jié)構(gòu)特點(diǎn),提出了一種新的自適應(yīng)融合方法,最后經(jīng)過小波逆
    發(fā)表于 02-02 17:12 ?8次下載
    如何使用FPGA實(shí)現(xiàn)動態(tài)可重構(gòu)的圖像<b class='flag-5'>融合算法</b>

    何為多傳感器融合算法?常用的融合算法包括哪些

    因?yàn)槎鄠鞲衅鞯氖褂脮a(chǎn)生大量需要處理的數(shù)據(jù),因此通常通過融合算法來對數(shù)據(jù)進(jìn)行優(yōu)化。不同傳感器采集到的信息可能相互之間可能會不同甚至是有矛盾,使用融合算法可以幫我們弄懂如何保證系統(tǒng)能夠準(zhǔn)確處理這些數(shù)據(jù),使系統(tǒng)最終做出及時、正確的決策,這非常重要。
    的頭像 發(fā)表于 03-30 16:29 ?2.2w次閱讀
    何為多傳感器<b class='flag-5'>融合算法</b>?常用的<b class='flag-5'>融合算法</b>包括哪些

    IMU姿態(tài)濾波算法——Mahony算法:原理與代碼

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

    Mahony濾波算法參數(shù)自動調(diào)節(jié)方法介紹

    Mahony濾波算法參數(shù)自動調(diào)節(jié)方法是一種用于姿態(tài)估計(jì)的濾波算法。
    的頭像 發(fā)表于 12-06 09:45 ?1143次閱讀