MPU6050姿態結算(採用硬體I2C實現資料融合演算法)
姿態角(Euler角)pitch yaw roll
飛行器的姿態角並不是指哪個角度,是三個角度的統稱。
它們是:俯仰、滾轉、偏航。你可以想象是飛機圍繞XYZ三個軸分別轉動形成的夾角。
地面座標系(earth-surface inertial reference frame)Sg--------OXgYgZg
<ignore_js_op>
①在地面上選一點Og
②使Xg軸在水平面內並指向某一方向
③Zg軸垂直於地面並指向地心(重力方向)
④Yg軸在水平面內垂直於Xg軸,其指向按右手定則確定
機體座標系(Aircraft-body coordinate frame)Sb-------OXYZ
<ignore_js_op>
①原點O取在飛機質心處,座標系與飛機固連
②x軸在飛機對稱平面內並平行於飛機的設計軸線指向機頭
③y軸垂直於飛機對稱平面指向機身右方
④z軸在飛機對稱平面內,與x軸垂直並指向機身下方
尤拉角/姿態角(Euler Angle)
<ignore_js_op>
<ignore_js_op>
機體座標系與地面座標系的關係是三個Euler角,反應了飛機相對地面的姿態。
俯仰角θ(pitch):機體座標系X軸與水平面的夾角。當X軸的正半軸位於過座標原點的水平面之上(抬頭)時,俯仰角為正,否則為負。
<ignore_js_op>
偏航角ψ(yaw):
機體座標系xb軸在水平面上投影與地面座標系xg軸(在水平面上,指向目標為正)之間的夾角,由xg軸逆時針轉至機體xb的投影線時,偏航角為正,即機頭右偏航為正,反之為負。
<ignore_js_op>
滾轉角Φ(roll):機體座標系zb軸與通過機體xb軸的鉛垂面間的夾角,機體向右滾為正,反之為負。
<ignore_js_op>
首先要明確,MPU6050 是一款姿態感測器,使用它就是為了得到待測物體(如四軸、平衡小車) x、y、z 軸的傾角(俯仰角 Pitch、滾轉角 Roll、偏航角 Yaw) 。我們通過 I2C 讀取到 MPU6050 的六個資料(三軸加速度 AD 值、三軸角速度 AD 值)經過姿態融合後就可以得到 Pitch、Roll、Yaw 角。
本帖主要介紹三種姿態融合演算法:四元數法 、一階互補演算法和卡爾曼濾波演算法。
一、四元數法
關於四元數的一些概念和計算就不寫上來了,我也不懂。我能告訴你的是:通過下面的演算法,可以把六個資料轉化成四元數(q0、q1、q2、q3),然後四元數轉化成尤拉角(P、R、Y 角)。
雖然 MPU6050 自帶的 DMP庫可以直接輸出四元數,減輕 STM32 的運算負擔, 這裡在此沒有使用,因為我是用 STM32 的硬體 I2C 讀取 MPU6050 資料的(http://bbs.elecfans.com/forum.ph ... 4&page=1#pid3625735),DMP庫需要對 I2C 函式進行修改,如 DMP 庫中的 I2C 寫:i2c_write(st.hw->addr, st.reg->pwr_mgmt_1, 1, &(data[0]));有4個輸入變數,而 STM32 硬體 I2C 的 I2C 寫為:void MPU6050_I2C_ByteWrite(u8 slaveAddr, u8 pBuffer, u8 writeAddr),只有 3 個輸入量(這之間的差異好像是由於 MPU6050 的 DMP 庫是針對 MSP430 微控制器寫的),所以必須進行修改,但是改韌體庫是一件很痛苦的事,你們應該都懂。當然,如果你用模擬 I2C 的話,是容易實現的,網上的 DMP 移植幾乎都是基於模擬 I2C 的。
相關文章
- 資料庫的未來-HTAP,軟體、硬體、雲生態的融合資料庫
- 資料採集與融合實踐作業三
- 採用常用實體命名機構資料
- 採用java連結timesten記憶體資料庫Java記憶體資料庫
- 資料採集與融合技術實踐作業一
- 【演算法資料結構Java實現】Java實現動態規劃(揹包問題)演算法資料結構Java動態規劃
- 綜合設計——多源異構資料採集與融合應用綜合實踐
- 資料結構與演算法 | 棧的實現及應用資料結構演算法
- 採用α-β演算法實現井字棋遊戲演算法遊戲
- 資料採集與融合技術實踐課作業2
- 2024資料採集與融合實踐作業一
- 資料結構與演算法--簡單棧實現及其應用資料結構演算法
- 【演算法資料結構Java實現】歐幾里得演算法演算法資料結構Java
- PLC實時資料採集如何實現?
- 資料採集與融合技術實驗課程作業一
- 資料採集與融合技術實驗課程作業二
- Facebook實時人體姿態估計:Dense Pose及其應用展望
- 資料結構和演算法-切片實現棧資料結構演算法
- 排名——採用結構體排序結構體排序
- 資料採集和融合技術作業1
- 資料採集與融合技術作業一
- 資料採集與融合技術作業2
- 資料採集和融合技術作業3
- 資料結構與演算法——常用高階資料結構及其Java實現資料結構演算法Java
- js實現資料結構及演算法之排序演算法JS資料結構演算法排序
- 融合資料庫生態:利用 EventBridge 構建 CDC 應用資料庫
- 演算法與資料結構-棧(Stack)-Java實現演算法資料結構Java
- 【資料結構】 各種排序演算法的實現資料結構排序演算法
- 【演算法資料結構Java實現】折半查詢演算法資料結構Java
- 【資料結構與演算法】位運算資料結構演算法
- 用go實現常見的資料結構Go資料結構
- 計算機硬體有兩種儲存資料的方式計算機
- PIGOSS BSM 如何實現伺服器硬體狀態監控?Go伺服器
- 資料採集與融合技術第一次實踐作業
- 資料採集與融合技術實踐第三次作業
- 資料採集與融合技術-第三次實踐作業
- 資料結構與演算法——字典序最小問題(用string類實現)資料結構演算法
- 資料結構與演算法之硬幣組合問題資料結構演算法