搜索
bottom↓
回复: 5

mpu6050用IMUUPDATE算法更新欧拉角输出变化太慢是什么原因呢

[复制链接]

出0入0汤圆

发表于 2015-4-5 11:52:56 | 显示全部楼层 |阅读模式
这个是代码   我要是把Kp调到25这样子变化速度才会正常
void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az)
{

#define Kp 2.0f  
   #define Ki 0.001f

  float norm=0.0f;
  float vx, vy, vz;// wx, wy, wz;
  float ex, ey, ez;

  float q0q0 = q0*q0;
  float q0q1 = q0*q1;
  float q0q2 = q0*q2;
  //float q0q3 = q0*q3;
  float q1q1 = q1*q1;
  //float q1q2 = q1*q2;
  float q1q3 = q1*q3;
  float q2q2 = q2*q2;
  float q2q3 = q2*q3;
  float q3q3 = q3*q3;

  norm = sqrt(ax*ax + ay*ay +az*az);      
  ax = ax /norm;
  ay = ay / norm;
  az = az / norm;
   
  vx = 2*(q1q3 - q0q2);                                                               
  vy = 2*(q0q1 + q2q3);
  vz = q0q0 - q1q1 - q2q2 + q3q3;


  // Error is sum of cross product between estimated direction and measured direction of field vectors
  ex = (ay*vz - az*vy);                                                                  
  ey = (az*vx - ax*vz);
  ez = (ax*vy - ay*vx);

  
  exInt = exInt + ex * Ki ;                                 
  eyInt = eyInt + ey * Ki ;
  ezInt = ezInt + ez * Ki ;


  gx = gx + Kp*ex + exInt;                                                                       
  gy = gy + Kp*ey + eyInt;
  gz = gz + Kp*ez + ezInt;                  

          
  q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;                                               
  q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
  q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
  q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;                                     
                                                                                  
  norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);               
  q0 = q0 / norm;
  q1 = q1 / norm;
  q2 = q2 / norm;
  q3 = q3 / norm;


  Q_ANGLE.Pitch  = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3;                                         // pitch
  Q_ANGLE.Roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3;         // roll
  Q_ANGLE.Yaw = -atan2(2 * q1 * q2 + 2 * q0 * q3, -2 * q2*q2 - 2 * q3 * q3 + 1)* 57.3; // yaw
}

出0入0汤圆

 楼主| 发表于 2015-4-5 11:54:22 | 显示全部楼层
如果KP是2的话 我把roll转到八九十度 ,串口打印出来的roll值先马上变到三十多,然后非常缓慢的加到八九十度

出0入0汤圆

发表于 2015-4-5 12:16:52 | 显示全部楼层
可能你是你和陀螺仪的量程设置的不对。

出0入0汤圆

 楼主| 发表于 2015-4-5 12:46:02 | 显示全部楼层
who与争锋 发表于 2015-4-5 12:16
可能你是你和陀螺仪的量程设置的不对。

         第一次发帖  多谢回复
        是要把采集到的加速度转换成m/s2单位吗   陀螺仪转换成弧度每秒吗
        下面是我的量程配置 跟转换的公式


      MPU_Write_Byte(MPU_GYRO_CFG_REG,0x18);   //2000
         MPU_Write_Byte(MPU_ACCEL_CFG_REG,0x11); //   +-8   5hz
   
       Get_MPU6050data();
        GyroFinal.X=(Gyrobuf.X-Gyrooffset.X)*0.061*0.0174;
        GyroFinal.Y=(Gyrobuf.Y-Gyrooffset.Y)*0.061*0.0174;
        GyroFinal.Z=(Gyrobuf.Z-Gyrooffset.Z)*0.061*0.0174;               
       
        AccFinal.X=(float)((Accbuf.X-Accoffset.X)*0.244)*0.0098;               
        AccFinal.Y=(float)((Accbuf.Y-Accoffset.Y)*0.244)*0.0098;               
        AccFinal.Z=(float)((Accbuf.Z-Accoffset.Z)*0.244)*0.0098;       
       上面的offset是静止的时候采集到的

出0入0汤圆

 楼主| 发表于 2015-4-5 12:49:11 | 显示全部楼层
who与争锋 发表于 2015-4-5 12:16
可能你是你和陀螺仪的量程设置的不对。

好像加速度的单位没有关系是吧  算法里面有把加速度单位化处理

出0入0汤圆

发表于 2015-10-25 14:07:53 | 显示全部楼层
Hadigan 发表于 2015-4-5 12:49
好像加速度的单位没有关系是吧  算法里面有把加速度单位化处理

楼主解决了吗?我kp要60才能正常,别人的都是很小的2啊0.8的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-11 02:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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