当前位置:   article > 正文

姿态解算知识点1——四元数互补滤波求解欧拉角_北东地 翻滚角公式

北东地 翻滚角公式

1.目标

  • 求四元数q0、q1、q2、q3;

  • 求解飞行器、机器人的欧拉角pitch、roll、yaw;

2.算法总框图

       

 

3.四元数数学模型及公式推导

 

上面的b系就是机体坐标系,R系可以认为是导航坐标系(即地理坐标系n)。

 

4. 四元数更新代码实现

  1. /******************************************************************************
  2. * Function Name : update_quaternion
  3. * Description    : 更新四元数,使用互补滤波
  4. * Input         : ax/ay/az: IMU加速度原始采样值, gx/gy/gz:IMU陀螺仪原始采样值
  5. * Output       : None
  6. * Return       : None
  7. ******************************************************************************/
  8. float q0 = 1.0f, q1 = 0.0f, q2 = 0.0f, q3 = 0.0f;//四元数
  9. static float exInt = 0, eyInt = 0, ezInt = 0;
  10. static void update_quaternion(float ax, float ay, float az, float gx, float gy, float gz)
  11. {
  12.   float norm;
  13.   float vx, vy, vz;
  14.   float ex, ey, ez;
  15.   float q0q0 = q0*q0;
  16.   float q0q1 = q0*q1;
  17.   float q0q2 = q0*q2;
  18.   float q1q1 = q1*q1;
  19.   float q1q3 = q1*q3;
  20.   float q2q2 = q2*q2;
  21.   float q2q3 = q2*q3;
  22.   float q3q3 = q3*q3;
  23.   if(ax*ay*az==0)
  24.       return;
  25.   // 第一步:对加速度数据进行归一化
  26.   norm = sqrt(ax*ax + ay*ay + az*az);
  27.   ax = ax / norm;
  28.   ay = ay / norm;
  29.   az = az / norm;
  30.   // 第二步:DCM矩阵旋转
  31.   vx = 2*(q1q3 - q0q2);
  32.   vy = 2*(q0q1 + q2q3);
  33.   vz = q0q0 - q1q1 - q2q2 + q3q3 ;
  34.   // 第三步:在机体坐标系下做向量叉积得到补偿数据
  35.   ex = ay*vz - az*vy ;
  36.   ey = az*vx - ax*vz ;
  37.   ez = ax*vy - ay*vx ;
  38.   // 第四步:对误差进行PI计算,补偿角速度
  39.   exInt = exInt + ex * Ki;
  40.   eyInt = eyInt + ey * Ki;
  41.   ezInt = ezInt + ez * Ki;
  42.   gx = gx + Kp*ex + exInt;
  43.   gy = gy + Kp*ey + eyInt;
  44.   gz = gz + Kp*ez + ezInt;
  45.   // 第五步:按照四元数微分公式进行四元数更新
  46.   q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
  47.   q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
  48.   q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
  49.   q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;
  50.   //规范化Pitch、Roll轴四元数
  51.   norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
  52.   q0 = q0/norm;
  53.   q1 = q1/norm;
  54.   q2 = q2/norm;
  55.   q3 = q3/norm;
  56. }

 

5.四元数转欧拉角

我们一般这样定义,pitch为俯仰角,roll为航向角,yaw为翻滚角。

地理坐标系定义遵循右手螺旋定则,描述如下:

            

显然地理坐标系一般有两种定义方式。

方式一:可以选择x轴朝右,y轴朝前,z轴垂直向上 俗称:东北天 --- 右前上,如下图:

                 

 

地理坐标系

载体坐标系

欧拉角

范围

方向

X

E

θ- Pitch

-90° ~ +90°

绕X轴旋转

Y

N

γ- Roll

-180° ~ +180°

绕Y轴旋转

Z

U

ψ- Yaw

-180° ~ +180°

绕Z轴旋转


pitch=asinf(2q0q1+2q2q3)57.3

roll=atan2f(2q1q3+2q0q2,2q1q12q2q2+1)57.3

yaw=atan2f(2q2q1+2q0q3,2q1q12q3q3+1)57.3

 

方式二:也可以选择x轴朝右,y轴朝前,z轴垂直向上 俗称:北东地 --- 前右下,如下图:

                    

 

地理坐标系

载体坐标系

欧拉角

范围

方向

X

N

θ- Roll

-180° ~ +180°

绕X轴旋转

Y

E

γ- Pitch

-90° ~ +90°

绕Y轴旋转

Z

D

ψ- Yaw

-180° ~ +180°

绕Z轴旋转

pitch=asinf(2q1q32q0q2)57.3

roll=atan2f(2q2q3+2q0q1,2q1q12q2q2+1)57.3

yaw=atan2f(2q1q2+2q0q3,2q2q22q3q3+1)57.3

 

本文算法选择的是x轴朝右,y轴朝前,z轴垂直向上,东北天 --- 右前上。

6.数据曲线

  • 机体在沿水平面运动时俯仰角曲线效果图

红色曲线-静态角度,有明显的正态分布白噪声;

绿色曲线-融合后的角度,基本不受噪声影响,比较稳定

 

  • 机体朝前向上抬起时俯仰角曲线效果图

红色曲线-静态角度,有明显的波动噪声;

绿色曲线-融合后的角度,基本不受噪声影响,而且跟随特性良好

 

7.源代码

FIR滤波源代码-C语言

欧拉角微分方程算法代码

8.参考文献

  • 惯性导航——秦永元
  • 惯性导航基本原理——刘保中

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/615815
推荐阅读
相关标签
  

闽ICP备14008679号