OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5915|回复: 2

MiniFly微型四轴飞行器差值ex,ey,ez的计算

[复制链接]

7

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
487
金钱
487
注册时间
2017-12-25
在线时间
105 小时
发表于 2019-12-23 16:17:15 | 显示全部楼层 |阅读模式
30金钱

请问各位大神,MiniFly微型四轴飞行器里的差值ex,ey,ez为什么是这样计算
        /*加速计读取的方向与重力加速计方向的差值,用向量叉乘计算*/
        ex = (acc.y * rMat[2][2] - acc.z * rMat[2][1]);
        ey = (acc.z * rMat[2][0] - acc.x * rMat[2][2]);
        ez = (acc.x * rMat[2][1] - acc.y * rMat[2][0]);

源代码如下
  1. void imuUpdate(Axis3f acc, Axis3f gyro, state_t *state , float dt)        /*数据融合 互补滤波*/
  2. {
  3.         float normalise;
  4.         float ex, ey, ez;
  5.         float halfT = 0.5f * dt;
  6.         float accBuf[3] = {0.f};
  7.         Axis3f tempacc = acc;
  8.        
  9.         gyro.x = gyro.x * DEG2RAD;        /* 度转弧度 */
  10.         gyro.y = gyro.y * DEG2RAD;
  11.         gyro.z = gyro.z * DEG2RAD;

  12.         /* 加速度计输出有效时,利用加速度计补偿陀螺仪*/
  13.         if((acc.x != 0.0f) || (acc.y != 0.0f) || (acc.z != 0.0f))
  14.         {
  15.                 /*单位化加速计测量值*/
  16.                 normalise = invSqrt(acc.x * acc.x + acc.y * acc.y + acc.z * acc.z);
  17.                 acc.x *= normalise;
  18.                 acc.y *= normalise;
  19.                 acc.z *= normalise;

  20.                 /*加速计读取的方向与重力加速计方向的差值,用向量叉乘计算*/
  21.                 ex = (acc.y * rMat[2][2] - acc.z * rMat[2][1]);
  22.                 ey = (acc.z * rMat[2][0] - acc.x * rMat[2][2]);
  23.                 ez = (acc.x * rMat[2][1] - acc.y * rMat[2][0]);
  24.                
  25.                 /*误差累计,与积分常数相乘*/
  26.                 exInt += Ki * ex * dt;
  27.                 eyInt += Ki * ey * dt;
  28.                 ezInt += Ki * ez * dt;
  29.                
  30.                 /*用叉积误差来做PI修正陀螺零偏,即抵消陀螺读数中的偏移量*/
  31.                 gyro.x += Kp * ex + exInt;
  32.                 gyro.y += Kp * ey + eyInt;
  33.                 gyro.z += Kp * ez + ezInt;
  34.         }
  35.         /* 一阶近似算法,四元数运动学方程的离散化形式和积分 */
  36.         float q0Last = q0;
  37.         float q1Last = q1;
  38.         float q2Last = q2;
  39.         float q3Last = q3;
  40.         q0 += (-q1Last * gyro.x - q2Last * gyro.y - q3Last * gyro.z) * halfT;
  41.         q1 += ( q0Last * gyro.x + q2Last * gyro.z - q3Last * gyro.y) * halfT;
  42.         q2 += ( q0Last * gyro.y - q1Last * gyro.z + q3Last * gyro.x) * halfT;
  43.         q3 += ( q0Last * gyro.z + q1Last * gyro.y - q2Last * gyro.x) * halfT;
  44.        
  45.         /*单位化四元数*/
  46.         normalise = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);
  47.         q0 *= normalise;
  48.         q1 *= normalise;
  49.         q2 *= normalise;
  50.         q3 *= normalise;
  51.        
  52.         imuComputeRotationMatrix();        /*计算旋转矩阵*/
  53.        
  54.         /*计算roll pitch yaw 欧拉角*/
  55.         state->attitude.pitch = -asinf(rMat[2][0]) * RAD2DEG;
  56.         state->attitude.roll = atan2f(rMat[2][1], rMat[2][2]) * RAD2DEG;
  57.         state->attitude.yaw = atan2f(rMat[1][0], rMat[0][0]) * RAD2DEG;
  58.        
  59.         if (!isGravityCalibrated)        /*未校准*/
  60.         {               
  61. //                accBuf[0] = tempacc.x* rMat[0][0] + tempacc.y * rMat[0][1] + tempacc.z * rMat[0][2];        /*accx*/
  62. //                accBuf[1] = tempacc.x* rMat[1][0] + tempacc.y * rMat[1][1] + tempacc.z * rMat[1][2];        /*accy*/
  63.                 accBuf[2] = tempacc.x* rMat[2][0] + tempacc.y * rMat[2][1] + tempacc.z * rMat[2][2];        /*accz*/
  64.                 calBaseAcc(accBuf);                /*计算静态加速度*/                               
  65.         }
  66. }
复制代码


最佳答案

查看完整内容[请看2#楼]

请看这个https://blog.csdn.net/Leyvi_Hsing/article/details/54293690
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5703
金钱
5703
注册时间
2013-11-22
在线时间
1198 小时
发表于 2019-12-23 16:17:16 | 显示全部楼层
回复

使用道具 举报

7

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
487
金钱
487
注册时间
2017-12-25
在线时间
105 小时
 楼主| 发表于 2019-12-31 15:19:17 | 显示全部楼层
lycreturn 发表于 2019-12-31 10:29
请看这个https://blog.csdn.net/Leyvi_Hsing/article/details/54293690

太感谢了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表