最近看群裡部分小夥伴對於6050如何計算姿態比較感興趣,自己也想對這段時間的學習做個總結,這次來說說姿態計算的方法,其實還不懂其中數學原理,正好自己也當作學習。
一定要確認mpu6050的加速度計:ax, ay, az,陀螺儀:gx, gy, gz的資料沒有問題。比如一下幾種:
1.初始化後,靜止平放的時候,資料跳變非常頻繁,而且幅度比較大,例如:
ax:100 100 100 103 91 98 99 120 20000 100 100 102
其中20000這個數字經常出現,其他各種也是如此,有人說這個模組原始資料就是毛刺很多,做個濾波就可以了,我把初始化**調了乙個月也沒能將資料穩定下來,而且用上面的資料,融合算出來的姿態跳變也非常快。不穩定。
如果出現以上問題,可以考慮幾個方面:**問題,沒有正確初始化;iic驅動的問題(我的就是這個)。
加速度計,我的理解,這是檢查x,y,z軸受力的。所以原始資料經過轉化後,應該得到的是各個軸的受力情況,理想狀態下,平放靜止的時候,輸出應該是, x=0, y=0, z=重力,單位是g(就是重力加速度9.8那個)。就是說,加速度計檢查的是運動的狀態,轉化成各軸的受力,經過對各軸的向量進行三角函式的操作,也可以知道靜止狀態下的角度。如果運動起來,瞬時的計算角度誤差比較大。
陀螺儀,這是測算角速度的,單位:度/每秒。就是計算繞x,y,z軸的三個角速度。平放靜止狀態下,各軸理想都是0。但是當模組進行運動的時候,各軸就開始有速度體現了。
角速度能反映物體的圓周運動狀態,加速度能能反映物體的靜止和直線運動狀態,兩者互補就能識別很複雜的運動狀態,如四軸飛行器的姿態、人行走的步態、空中滑鼠的位移量。這就是等下要用的互補濾波演算法。
數學原理我不懂,這裡只做應用介紹。首先找乙份完整的mahony**,網上有蠻多的。這裡感謝各位前輩的奉獻。
void
mahony_update_9x
(float gx,
float gy,
float gz,
float ax,
float ay,
float az,
float mx,
float my,
float mz)
;//結合地磁計可以用這個
void
mahony_update_6x
(float gx,
float gy,
float gz,
float ax,
float ay,
float az)
;void
mahony_init
(float samplefrequency)
;void
mahony_computeangles
(void);
float
getroll
(void);
float
getpitch
(void);
float
getyaw
(void
);
用到的**就以上幾個。使用流程如下。
mpu.
readacceldata
(accelcount)
; accelcount[0]
-= accel_offset_x;
accelcount[1]
-= accel_offset_y;
accelcount[2]
+= accel_offset_z;
ax =
(float
)(accelcount[0]
)*ares;
//轉換ares= 1/16384
ay =
(float
)(accelcount[1]
)*ares;
az =
(float
)(accelcount[2]
)*ares;
mpu.
readgyrodata
(gyrocount)
; gyrocount[0]
-= gyro_offset_x;
gyrocount[1]
-= gyro_offset_y;
gyrocount[2]
-= gyro_offset_z;
gx =
(float
)(gyrocount[0]
)*gres ;
//轉換 gres = 2000.0 / 32768.0
gy =
(float
)(gyrocount[1]
)*gres ;
gz =
(float
)(gyrocount[2]
)*gres ;
mahony_update_6x
(gx, gy, gz, ax, ay, az)
;mahony_computeangles()
;getroll()
;//獲取翻滾角
以上便是解算的過程,至於原理等,還不清楚如何,計畫在接下來的計畫中,再細細體會。 mpu6050 z軸校準 MPU6050校準
前用匿名四軸的 稱植過來發現求出的 pitch 與roll 一直不斷的增加,不知道什麼原因,靜止放著也不行。看了不少四元數的資料,能看懂,但是結合資料融合又糊了。加上卡爾漫資料也就那樣,可 能是我處理得有問題。偶然翻帖看到了 dmp,於是打算移植過來看看。花了兩三的時間總算成功了。現在把一些移植過程...
MPU6050六軸感測器筆記
mpu6050六軸感測器 1 自帶數字運動處理 2 整合可程式控制 陀螺儀 3 整合可程式控制 加速度感測器 4 自帶數字溫度感測器 5 可輸出中斷 支援姿勢識別各種動作感應功能 6 自帶1024位元組fifo 有助於降低系統功耗 7 高達400khz 的iic通訊介面 8 超小封裝尺寸 4 4 0...
關於MPU6050姿態解算的理解與認識
謹以此紀念兩天以來的對電子羅盤的認識與學習 mpu6050常用作提供飛控執行時的姿態測量和計算,在在姿態結算中有幾個重要的概念,尤拉角 四元數等。尤拉角 用來表徵三維空間中運動物體繞著座標軸旋轉的情況。即物體的每時每秒的姿態可以由尤拉角表出。四元數 超複數,q q0,q1,q2,q3 q0位實數,q...