陀螺儀計算姿態待完善

2021-10-03 00:15:09 字數 2110 閱讀 7794

測試感測器:mpu9250,九軸感測器,其中有三個軸就是陀螺儀的三個方向角速度。

陀螺儀在每個取樣點獲得:取樣時刻(單位微妙),xyz三個方向的角速度(單位弧度/秒),記為:wx, wy, wz。陀螺儀靜止時,wx, wy, wz也是有讀數的,這就是陀螺儀的零漂。

實驗一:將陀螺儀繞x軸旋轉時,只有wx有讀數;將陀螺儀繞y軸旋轉時,只有wy有讀數;將陀螺儀繞z軸旋轉時,只有wz有讀數;

實驗二:將陀螺儀繞xy面上的軸旋轉,wz讀數為零,即與旋轉軸垂直的軸上的角速度為零。

因為陀螺儀取樣率很高(1000hz),通過瞬時讀數計算姿態,可以看做:先繞x軸旋轉,再繞y軸旋轉,再繞z軸旋轉。

下面這段**實現了乙個簡單的陀螺儀姿態演算法,開機並靜置幾十秒後,拿著陀螺儀旋轉,十幾分鐘內姿態是正確的,之後由於積分累積,誤差就越來越大了。

// 引數說明:

// samplets : 取樣時刻,單位:微秒

// wx, wy, wz :陀螺儀取樣,單位:弧度/秒

void gyroexperiment(uint64_t samplets, float wx, float wy, float wz)

// 採用啟動後5秒-35秒的採用平均值作為陀螺儀零漂

// 在此期間,應保持陀螺儀靜止

static float s_wx = 0, s_wy = 0, s_wz = 0; // 陀螺儀零漂

static uint64_t s_elapsed = 0;

if(s_elapsed < 35000000)

s_elapsed += (samplets - s_lasttime);

s_lasttime = samplets;

}// 初始姿態,採用三個軸向量表示

static float xx=1,xy=0,xz=0; // x軸

static float yx=0,yy=1,yz=0; // y軸

static float zx=0,zy=0,zz=1; // z軸

// 根據陀螺儀讀數計算三個軸的旋轉量

float interval = (samplets - s_lasttime) / 1e6;

float rx = (wx - s_wx) * interval;

float ry = (wy - s_wy) * interval;

float rz = (wz - s_wz) * interval;

// 分別構造繞三個軸旋轉的四元數

float cos,sin;

cos = cosf(rx/2); sin = sinf(rx/2); quaternion qx(cos, xx * sin, xy * sin, xz * sin);

cos = cosf(ry/2); sin = sinf(ry/2); quaternion qy(cos, yx * sin, yy * sin, yz * sin);

cos = cosf(rz/2); sin = sinf(rz/2); quaternion qz(cos, zx * sin, zy * sin, zz * sin);

// 依次旋轉三個軸向量

quaternion q = qx*qz*qy; q.normalize(); quaternion qi = q.inverse();

quaternion qx(0, xx, xy, xz); qx = q*qx*qi; qx.normalize(); xx = qx.q2; xy = qx.q3; xz = qx.q4; // 旋轉x軸;

quaternion qy(0, yx, yy, yz); qy = q*qy*qi; qy.normalize(); yx = qy.q2; yy = qy.q3; yz = qy.q4; // 旋轉y軸;

quaternion qz(0, zx, zy, zz); qz = q*qz*qi; qz.normalize(); zx = qz.q2; zy = qz.q3; zz = qz.q4; // 旋轉z軸;

// 每1秒輸出一次姿態資料

s_lasttime = samplets;

if(samplets - s_lastlog > 1000000)

}

MEMS陀螺儀姿態演算法入門

測試感測器 mpu9250,九軸感測器,其中有三個軸就是陀螺儀的三個方向角速度。陀螺儀在每個取樣點獲得 取樣時刻 單位微妙 xyz三個方向的角速度 單位弧度 秒 記為 wx,wy,wz。陀螺儀靜止時,wx,wy,wz也是有讀數的,這就是陀螺儀的零漂。實驗一 將陀螺儀繞x軸旋轉時,只有wx有讀數 將陀...

陀螺儀的學習

從陀螺儀得到x y z三個角速度後就需要通過積分來得到角度,事實上,經過簡單的積分是得不到正確的角度的,更得不到尤拉角,在這裡說一下通過的runge kunta更新四元數,從而對角速度積分得到角度的過程。四元數能到快速的發展,得益於飛行器控制與導航的發展,要求更合理的描述剛體空間的運動,以便於計算機...

陀螺儀工作原理

陀螺儀是用來測量平衡和轉速的工具,在載體高速轉動的時候,陀螺儀始終要通過自我調節,使得轉子保持原有的平衡,這一點是如何做到的?帶著這個問題,我們來看一下這個古老而又神秘的裝置的工作原理。我把三個gimbal環用不同的顏色做了標記,底部三個軸向,rgb分別對應xyz。假設現在這個陀螺儀被放在一艘船上,...