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

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

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

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

3D視覺(jué)工坊 ? 來(lái)源:計(jì)算機(jī)視覺(jué)工坊 ? 2023-05-22 09:18 ? 次閱讀
eb0faa88-f82b-11ed-90ce-dac502259ad0.png

1 前言

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

2 算法

2.1 重力對(duì)齊誤差

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

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

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

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

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

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

2.2 角速度融合

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

得到糾正的角速度。

討論:為什么用叉乘?

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

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

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

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

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

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

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

3 核心代碼解析

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

functionobj=UpdateIMU(obj,Gyroscope,Accelerometer)
q=obj.Quaternion;%當(dāng)前時(shí)刻的四元數(shù)
%歸一化加速度計(jì)測(cè)量數(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ì)的測(cè)量誤差,上述公式(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í)刻四元數(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)解算庫(kù):https://ahrs.readthedocs.io/en/latest/filters/mahony.html

審核編輯 :李倩


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

    關(guān)注

    23

    文章

    4552

    瀏覽量

    92023
  • 加速度計(jì)
    +關(guān)注

    關(guān)注

    6

    文章

    693

    瀏覽量

    45733
  • 濾波算法
    +關(guān)注

    關(guān)注

    2

    文章

    86

    瀏覽量

    13697
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    理解Mahony濾波算法的實(shí)現(xiàn)過(guò)程

    之前調(diào)試基于QMI8658 6軸姿態(tài)解算的時(shí)候,我對(duì)Mahony濾波的認(rèn)識(shí)還比較淺薄。初次的學(xué)習(xí)和代碼的移植讓我對(duì)四元數(shù)、歐拉角、旋轉(zhuǎn)余弦矩陣有了一定的接觸。然而,直到我將地磁傳感器加
    的頭像 發(fā)表于 11-13 10:55 ?1517次閱讀
    理解<b class='flag-5'>Mahony</b><b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的實(shí)現(xiàn)過(guò)程

    姿態(tài)解算(mahony算法):歐拉角的驗(yàn)證

    使用MPU9250傳感器,測(cè)量某一位置的九軸數(shù)據(jù),將數(shù)據(jù)存到數(shù)組里(大概6000個(gè)點(diǎn)),把數(shù)據(jù)放到MATLAB里的算法中計(jì)算,得出這個(gè)位置的歐拉角,但是始終偏航角有問(wèn)題,其他角是對(duì)的,請(qǐng)問(wèn)有沒(méi)有遇到類似問(wèn)題的?
    發(fā)表于 05-17 21:41

    無(wú)人機(jī)設(shè)計(jì)中姿態(tài)檢測(cè)算法姿態(tài)控制算法有什么區(qū)別 ?

    無(wú)人機(jī)設(shè)計(jì)中姿態(tài)檢測(cè)算法、姿態(tài)控制算法有什么區(qū)別 ?推薦課程:張飛四旋翼飛行器視頻套件,76小時(shí)吃透四軸算法http://t.elecfan
    發(fā)表于 07-14 12:12

    請(qǐng)問(wèn)IMU和AHRS算法用stm32如何實(shí)現(xiàn)?

    最近在一直研究四軸的一些東西,不過(guò)聽(tīng)到學(xué)長(zhǎng)說(shuō)四軸用IMU算法比較好,所以我想問(wèn)一下IMU 和AHRS算法用stm32如何實(shí)現(xiàn)呢?他們的區(qū)別是什么?哪個(gè)更好一些呢???求各位i解答!!
    發(fā)表于 04-19 06:36

    四軸基礎(chǔ)算法學(xué)習(xí)——IMU輸入濾波算法

    處理器讀取陀螺儀加速度計(jì)數(shù)據(jù)后首先需要對(duì)數(shù)據(jù)進(jìn)行濾波處理,此文分析比較幾種常用的濾波算法。IMUIMU使用MPU9250(即MPU650
    發(fā)表于 06-11 08:00

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

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

    PID算法代碼實(shí)現(xiàn)

    目錄一. 緒論二. 角度環(huán)串級(jí)PID原理1. PID基本算法2. 姿態(tài)角串級(jí)PID原理三. 如何用STM32實(shí)現(xiàn)角度-角速度的串級(jí)PID控制1. PID算法代碼實(shí)現(xiàn)2. 串級(jí)PID
    發(fā)表于 08-17 06:44

    姿態(tài)解算算法模塊理解

    了解或想開(kāi)發(fā)無(wú)人機(jī)的朋友肯定繞不過(guò)姿態(tài)解算這茬,花點(diǎn)時(shí)間去了解它們?cè)聿⒉浑y,這里提供兩個(gè)原理鏈接供大家參考:四元數(shù)表示旋轉(zhuǎn)的理解四旋翼姿態(tài)解算原理而在代碼實(shí)現(xiàn)方面,我這里寫好了姿態(tài)
    發(fā)表于 01-11 07:06

    四軸的姿態(tài)進(jìn)行采樣用通常是用什么濾波算法進(jìn)行濾波的?

    四軸的姿態(tài)進(jìn)行采樣用通常是用什么濾波算法進(jìn)行濾波
    發(fā)表于 10-09 06:42

    LINS算法的框架與代碼分析

    LINS是以濾波為主的IMU、激光雷達(dá)緊耦合的激光SLAM算法。該算法的主要?jiǎng)?chuàng)新點(diǎn)就是用以 IESKF(即迭代誤差卡爾曼)為框架,融合 IMU
    的頭像 發(fā)表于 10-09 14:57 ?2950次閱讀

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

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

    經(jīng)典的濾波算法:Madgwick濾波算法

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

    Mahony濾波器的原理和公式推導(dǎo)

    ? 1.?概述 在進(jìn)行代碼分析之前,了解Mahony濾波器的原理和公式推導(dǎo)是必要的。Mahony濾波器是一種基于四元數(shù)的
    的頭像 發(fā)表于 06-17 11:18 ?3247次閱讀
    <b class='flag-5'>Mahony</b><b class='flag-5'>濾波</b>器的原理和公式推導(dǎo)

    MPU6050使用互補(bǔ)濾波與卡爾曼濾波算法進(jìn)行姿態(tài)解算

    MPU6050使用互補(bǔ)濾波與卡爾曼濾波算法進(jìn)行姿態(tài)解算
    發(fā)表于 08-07 15:46 ?10次下載

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

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