|
发表于 2013-8-20 11:55:01
|
显示全部楼层
本帖最后由 john800422 于 2013-8-20 11:57 编辑
zksniper 发表于 2013-8-20 10:53
IMUupdate我试过了,Pitch和Roll都没问题,这个我在9楼给你回复了
对于加速度计和陀螺仪的校准,我用的 ...
1. 我观察过加速度计和陀螺仪的数据,用来进行姿态融合应该没问题
---> 如何觀察的? 陀螺儀的話, 靜止時應該在0或在0處上下震盪, 加速度計的加速度值在90度與-90度應該互為反號且為1g, 0度時應為0g
2. 我现在一直在想是不是电子罗盘的轴向定义不符合AHRSupdata的设定?不过对应于不同轴向和旋转顺序的公式我都反复检查过,也没发现错误,
计算出来的Yaw和Pitch,数据不对这个说法好像不太准确,准确来说应该是在正负之间来回的震荡,不知道什么原因
---> AHRSupdate的算法我並沒有仔細理解過, 原因是
- ex = (ay*vz - az*vy) + (my*wz - mz*wy);
- ey = (az*vx - ax*vz) + (mz*wx - mx*wz);
- ez = (ax*vy - ay*vx) + (mx*wy - my*wx);
复制代码 .
電子羅盤的誤差會影響姿態角
假設做在飛行器上, 飛過一顆磁鐵, 影響大的話可能就準備墬機了 (( 不一定為真
若要使用 AHRSupdate , 先把
- hx = 2*mx*(0.5 - q2q2 - q3q3) + 2*my*(q1q2 - q0q3) + 2*mz*(q1q3 + q0q2);
- hy = 2*mx*(q1q2 + q0q3) + 2*my*(0.5 - q1q1 - q3q3) + 2*mz*(q2q3 - q0q1);
- hz = 2*mx*(q1q3 - q0q2) + 2*my*(q2q3 + q0q1) + 2*mz*(0.5 - q1q1 - q2q2);
- bx = sqrt((hx*hx) + (hy*hy));
- bz = hz;
- wx = 2*bx*(0.5 - q2q2 - q3q3) + 2*bz*(q1q3 - q0q2);
- wy = 2*bx*(q1q2 - q0q3) + 2*bz*(q0q1 + q2q3);
- wz = 2*bx*(q0q2 + q1q3) + 2*bz*(0.5 - q1q1 - q2q2);
复制代码 .
原理搞清楚, 再繼續測試
3. 还有就是Ki、Kp和HalfT这三个参数了,这三个参数我也反复调过,影响是有的,但没有达到让Yaw和Pitch正确的地步。
---> HalfT是不應該調的, HalfT是取樣的週期, 若是算法有問題, 正確不了也是正常的 |
|