【姿態解算與濾波算法】

姿態解算

一、主線

姿態表示方式:矩陣表示,軸角表示,歐拉角表示,四元數表示。

慣性測量單元IMUInertial Measurement Unit:MPU6050芯片,包含陀螺儀和加速度計,分別測量三軸加速度和三軸角速度。注意,傳感器所測數據是原始數據,包含了噪聲,無法直接用于飛行器的姿態解算,因此需要對數據進行濾波。

濾波算法:非線性互補濾波算法,卡爾曼濾波算法,Mahony互補濾波算法。

二、知識點補充

加速度計和陀螺儀

加速度計:加速度計,可以測量加速度,包括外力加速度和重力加速度,因此,當被測物體在靜止或勻速運動(勻速直線運動)的時候,加速度計僅僅測量的是重力加速度,而重力加速度與 R 坐標系(絕對坐標系)是固連的,通過這種關系,可以得到加速度計所在平面與地面 的角度關系 也就是橫滾角和俯仰角。把加速度傳感器水平靜止放在桌子上,它的Z軸輸出的是1g的加速度。因為它Z軸方向被重力向下拉出了一個形變。可惜的是,加速度傳感器不會區分重力加速度與外力加速度。所以,當系統在三維空間做變速運動時,它的輸出就不正確了,或者說它的輸出不能表明物體的姿態和運動狀態。

陀螺儀:陀螺儀測量角速度。陀螺儀模型如圖所示,陀螺儀的每個通道檢測一個軸的旋轉。

1

圖2[引自網絡]?

上圖中,Rxz是R在XZ面上的投影,與Z軸的夾角為Axz。Ryz是R在ZY面上的投影,與Z軸的夾角為Ayz。陀螺儀就是測量上面定義角度的變化率,換句話說,它會輸出一個與上面這些角度變化率線性相關的值。

加速度計工作原理介紹(摘自網絡)

大多數加速度計可歸為兩類:數字和模擬。數字加速度計可通過I2C,SPI或USART方式獲取信息,而模擬加速度計的輸出是一個在預定范圍內的電壓值,你需要用ADC(模擬量轉數字量)模塊將其轉換為數字值。不管使用什么類型的ADC模塊,都會得到一個在一定范圍內的數值。例如一個10位ADC模塊的輸出值范圍在0-1023間。假設我們從10位ADC模塊得到了以下的三個軸的數據:

每個ADC模塊都有一個參考電壓,假設在我們的例子中,它是3.3V。要將一個10位的ADC值轉成電壓值,我們使用下列公式:

將3個軸的值代入上式,得到:

每個加速度計都有一個零加速度的電壓值,這個電壓值對應于加速度為0g。通過計算相對0g電壓的偏移量我們可以得到一個有符號的電壓值。比方說,0g電壓值VzeroG=1.65V,通過下面的方式可以得到相對0g電壓的偏移量:

現在我們得到了加速度計的電壓值,但它的單位還不是g(9.8m/s^2),最后的轉換,我們還需要引入加速度計的靈敏度,單位通常是mV/g。比如,加速度計的靈敏度Sensitivity = 478.5mV/g。靈敏度值可以在加速度計說明書中找到。要獲得最后的單位為g的加速度,我們使用下列公式計算:

綜上,可以把以上步驟用以下公式表達

現在我們得到了慣性力矢量的三個分量,如果設備除了重力外不受任何外力影響,那我們就可以認為這個方向就是重力矢量的方向。(自此明白了文獻[1]中所說只使用加速度計獲得的角度是基于飛行器在勻速飛行或靜止的條件下得到的

圖2[引自網絡]

我們感興趣的角度是向量R和X,Y,Z軸之間的夾角,那就令這些角度為Axr,Ayr,Azr。觀察由R和Rx組成的直角三角形

圖2中,那么,角度即為

三、互補濾波算法

加速度計是極易受外部干擾的傳感器(如機械振動),但是測量值的誤差不隨時間的變化。陀螺儀輸出的角速度可以積分得到角度,動態性能好,受外部干擾小,但積分會造成誤差累積。可以看出,它們優缺點互補,結合起來才能有好的效果。

經典互補濾波算法(Classical Complementary Filter)

經典互補濾波算法基本原理是充分利用加速度計提供的低頻角度信號和陀螺儀提供的高頻角速度信號,對加速度計進行低通濾波,對陀螺儀進行高通濾波,分別濾出相應的干擾信號,為兩者的有效融合提供了很好的解決方案[2]。

圖3 經典互補濾波算法—頻域形式原理圖[2]

融合后姿態角估計值為

其中,\omega g為陀螺儀測量的角速度,\theta a為加速度計測量的角度值,Kp

為比例系數,為高通濾波器,

為低通濾波器。

圖4 經典互補濾波算法—時域形式原理圖[2]

進行反拉氏變換,可得時域微分形式為

????改進后的互補濾波算法(Explicit Complementary Filter)

經典互補濾波算法實現簡單,但是估算精度角度較低,文獻[3]提出了一種改進算法(ECF),在經典互補濾波算法的補償環節加入積分器,以消除陀螺儀漂移常值誤差,原理框圖如下圖。

圖5 改進后的互補濾波算法[2]

時域微分形式為

?

參考文獻

[1]?郭曉鴻,楊忠,陳喆,等. EKF和互補濾波器在飛行姿態確定中的應用[J]. 傳感器與微系統,2011,30(11):149-152.

[2] 傅忠云,朱海霞,孫金秋,等. 基于慣性傳感器 MPU6050 的濾波算法研究[J]. 壓電與聲光, 2015 (2015 年 05): 821-825,829.

[3] Mahony R, Hamel T, Pflimlin J M. Nonlinear complementary filters on the special orthogonal group[J]. IEEE Transactions on automatic control, 2008, 53(5): 1203-1218.

[4] Euston M, Coote P, Mahony R, et al. A complementary filter for attitude estimation of a fixed-wing UAV[C]//Intelligent Robots and Systems, 2008. IROS 2008. IEEE/RSJ International Conference on. IEEE, 2008: 340-345.

附程序:

void IMUupdate(float gx, float gy, float gz, float ax,float ay, float az)

{

????float norm;

????float vx, vy, vz;

????float ex, ey, ez;

????float q0q0 = q0*q0;

????float q0q1 = q0*q1;

????float q0q2 = q0*q2;

????float q1q1 = q1*q1;

????float q1q3 = q1*q3;

????float q2q2 = q2*q2;

????float q2q3 = q2*q3;

????float q3q3 = q3*q3;

????if(ax*ay*az==0)

????????return;

????// 第一步:對加速度數據進行歸一化

????norm = sqrt(ax*ax + ay*ay + az*az);

????ax = ax / norm;

????ay = ay / norm;

????az = az / norm;

????// 第二步:DCM矩陣旋轉

????vx = 2*(q1q3 - q0q2);

????vy = 2*(q0q1 + q2q3);

????vz = q0q0 - q1q1 - q2q2 + q3q3 ;

????// 第三步:在機體坐標系下做向量叉積得到補償數據

????ex = ay*vz - az*vy ;

????ey = az*vx - ax*vz ;

????ez = ax*vy - ay*vx ;

????// 第四步:對誤差進行PI計算,補償角速度

????exInt = exInt + ex * Ki;

????eyInt = eyInt + ey * Ki;

????ezInt = ezInt + ez * Ki;

????gx = gx + Kp*ex + exInt;

????gy = gy + Kp*ey + eyInt;

????gz = gz + Kp*ez + ezInt;

????// 第五步:按照四元數微分公式進行四元數更新

????q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;

????q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;

????q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;

????q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;

}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10392.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10392.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10392.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

winhex工具,將文件轉換為16進制數據放入代碼。

今天介紹winhex工具,可以將任何內容讀取讀取為16進制數據。下面看下效果。 下載鏈接: WinHex: Hex Editor & Disk Editor, Computer Forensics & Data Recovery Software 一、WinHex打開文件 我們要打開的文件: 打開后: 我…

服務器遠程桌面局域網連接不上的解決方法

在企業網絡環境中,服務器遠程桌面局域網連接不上是一個常見且棘手的問題。這種問題可能導致工作效率下降,甚至影響業務運營。因此,我們需要采取專業的方法來解決這一問題。 服務器遠程桌面局域網連接不上的解決方法: 1、確保服務器…

SQL注入-通達OA SQL注入漏洞【CVE-2023-4166】原理及檢測思路分析

1、漏洞描述 通達OA中發現一個漏洞,并被列為嚴重漏洞。該漏洞影響文件general/system/seal_manage/dianju/delete_log.php的未知代碼。對參數 DELETE_STR 的操作會導致 sql 注入。 2、影響范圍 通達OA版本11.10之前 3、復現環境 FOFA搜索:app"TDX…

解鎖網站SEO優勢,百度站長工具助您一臂之力(百度站長平臺還提供了哪些工具供seo人員使用?)

在當今數字化時代,網站已經成為企業宣傳、產品銷售、信息發布的主要渠道之一。有著再好的網站,如果在百度等搜索引擎中無法被用戶搜索到,那就等于白搭。因此,網站的SEO優化顯得尤為重要。而作為國內最大的搜索引擎,百度…

LoRa模塊學習

什么是LoRa調制 LoRa(Long Range,遠距離)是一種調制技術,與同類技術相比,提供更長的通信距離。調制是基于擴頻技術,線性調制擴頻(CSS)的一個變種,具有前向糾錯&#xff…

安裝SQL Server詳細教程_sql server安裝教程

一,SQL Server數據庫安裝 1.首先,下載安裝程序 (1)從網盤下載安裝exe 點擊此處直接下載 (2)從官網下載安裝exe文件 在官網選擇Developer進行下載 2.開始安裝 雙擊安裝程序,開始安裝 這里直…

python-pytorch seq2seq+attention筆記0.5.00

python-pytorch seq2seq+attention筆記0.5.00 1. LSTM模型的數據size2. 關于LSTM的輸入數據包含hn和cn時,hn和cn的size3. LSTM參數中默認batch_first4. Attention機制的三種算法5. 模型的編碼器6. 模型的解碼器7. 最終模型8. 數據的準備9. 遇到的問題10. 完整代碼1. LSTM模型的…

PHP數值數組講解,for循環及函數 遍歷數組獲取元素

源碼 <?phpheader("Content-Type:text/html;Charsetutf8");//創建數值數組$arr1 array();//簡化創建語法 $arr2 [];//通過索引為數組添加不同類型的元素$arr1[0] "zhangsan" ;//也可以亂序添加元素$arr1[2] 12 ;$arr1[1] true ; //true輸出為1 f…

搭建vue3組件庫(四): 樣式庫搭建

文章目錄 1. 樣式目錄文件架構2. SCSS 樣式變量2.1 設置顏色 SCSS 變量2.2 設置多種類型主題2.3 生成全局類型主題 SCSS 變量2.4 分組生成 SCSS 變量 1. 樣式目錄文件架構 packages/theme-chalk 目錄結構&#xff1a; ├── packages │ ├── theme-chalk │ │ ├─…

excel表格里,可以把百分號放在數字前面嗎?

在有些版本里是可以的&#xff0c;這樣做&#xff1a; 選中數據&#xff0c;鼠標右鍵&#xff0c;點擊設置單元格格式&#xff0c;切換到自定義&#xff0c;在右側欄輸入%0&#xff0c;點擊確定就可以了。 這樣設置的好處是&#xff0c;它仍舊是數值&#xff0c;并且數值大小沒…

說一下 hibernate 的緩存機制?

Hibernate 的緩存機制是為了提高應用程序的性能&#xff0c;通過減少對數據庫物理數據源的訪問頻次而設計的。Hibernate 的緩存主要可以分為兩個級別&#xff1a;一級緩存&#xff08;也稱為 Session 級別的緩存&#xff09;和二級緩存&#xff08;也稱為 SessionFactory 級別的…

Veeam - 數據保護和管理解決方案_Windows平臺部署備份還原VMware手冊

Veeam - - 數據保護和管理解決方案 Veeam Backup & Replication Console Veeam Data Platform Veeam Backup & Replication是一款強大的虛擬機備份、恢復和復制解決方案 安全備份、干凈恢復和數據彈性 — 即時交付 在混合云中隨時隨地管理、控制、備份和恢復您的所有數…

ARM時鐘樹結構(GD32)

時鐘樹的簡易框圖 初始化配置系統時鐘 配置系統初始化時鐘&#xff08;參考手冊&#xff09; 對應hal庫函數 使用72MHz的系統時鐘 do -----------while&#xff08;0&#xff09;的使用方法 系統時鐘 #include <stdint.h> #include "gd32f30x.h"int main(void)…

配置Docker對象與管理守護進程

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 本章節的快速目錄導航&#xff1a; 一、配置Docker對象 1.1、Docker對象的標記 1.2、格式化命令和日志的輸出 二、示例&#xff1a; 2.1、管理…

(delphi11最新學習資料) Object Pascal 學習筆記---第11章第2節 (接口的多態性)

11.2.4 接口的多態性 ? 在上一節中&#xff0c;我們看到了如何定義多個接口&#xff0c;并讓一個類實現其中的兩個接口。當然&#xff0c;這可以擴展到任何數量。您還可以創建接口的層次結構&#xff0c;因為一個接口可以繼承另一個接口&#xff1a; ITripleJumper interfa…

開源RAG框架匯總

前言 本文搜集了一些開源的基于LLM的RAG&#xff08;Retrieval-Augmented Generation&#xff09;框架&#xff0c;旨在吸納業界最新的RAG應用方法與思路。如有錯誤或者意見可以提出&#xff0c;同時也歡迎大家把自己常用而這里未列出的框架貢獻出來&#xff0c;感謝~ RAG應用…

【代碼隨想錄37期】Day04 兩兩交換鏈表中的節點、刪除鏈表的倒數第N個節點、鏈表相交、環形鏈表II

兩兩交換鏈表中的節點 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), ne…

光通信行業專業術語解析大全

近期公司內部開展了一期學習交流會&#xff0c;各位同事收獲頗多&#xff0c;特別是關于一些專業術語的簡稱&#xff0c;大家都覺得非常有意思&#xff01;小編馬不停蹄的整理出來分享給大家&#xff0c;希望可以給學習光通信知識的萌新們小小助力&#xff01; 以下是光通信行…

QRegExp

描述 QRegExp 類使用正則表達式提供模式匹配。 正則表達式或“正則表達式”是一種用于匹配文本中子字符串的模式。這在許多情況下都很有用&#xff0c;例如&#xff0c; 驗證 正則表達式可以測試子字符串是否滿足某些條件&#xff0c;例如是整數或不包含空格。搜索 正則表達式…

網關路由的方式有哪些

在微服務架構中&#xff0c;網關路由通常用于集中處理請求分發、認證、限流、熔斷等任務。以下是幾種常見的網關路由配置方式&#xff1a; Spring Cloud Gateway 1. **基于配置文件的路由**&#xff1a; - 在Spring Cloud Gateway中&#xff0c;可以通過YAML或JSON配置文件定…