OpenEdv-开源电子网

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

关于MPU6050得出加速度角速度后输出四元数的值

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-1-18
在线时间
0 小时
发表于 2016-1-18 14:19:44 | 显示全部楼层 |阅读模式
1金钱
用的是如下算法:

float q0 = 1, q1 = 0, q2 = 0, q3 = 0;   
float exInt = 0, eyInt = 0, ezInt = 0;
void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az)
{
  float norm;
  float vx, vy, vz;
  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;

if(ax*ay*az==0)
   return;
  
  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 ;

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;
}
1.当设定Kp 1.5f,Ki 0.01f,halfT 0.004f 的时候;
输出的四元数会在一段范围内波动,在范围之间由慢到快,再到慢地跳动;
2.当设定Kp 50f 时;
输出的四元数会比较稳定,看上去正常,把MPU6050转动的时候,他需要一个时间去变化到某个值。
我想请教各路大神,Kp Ki的意义是啥呢?Kp的值设定这么大,肯定有问题,那为啥小值得时候不能良好的输出呢?求解答啊!
5.2.rar (57.6 KB, 下载次数: 737)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-1-18 20:13:45 | 显示全部楼层
回复

使用道具 举报

1

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-1-18
在线时间
7 小时
发表于 2016-1-18 21:50:05 | 显示全部楼层
楼主大人 ,能解释下算法么?
回复

使用道具 举报

1

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-1-18
在线时间
7 小时
发表于 2016-1-18 21:56:48 | 显示全部楼层
你的“MPU6050转动的时候,他需要一个时间去变化到某个值”可能是你的程序在单片机上跑不起来,你用的是什么板子
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-1-18 22:20:25 | 显示全部楼层
帮顶
回复

使用道具 举报

3

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2013-8-9
在线时间
64 小时
发表于 2016-2-2 10:23:23 | 显示全部楼层
顶一个
坚持自己的目标,就一定能够实现!
回复

使用道具 举报

18

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
435
金钱
435
注册时间
2014-8-16
在线时间
56 小时
发表于 2016-8-27 15:39:49 | 显示全部楼层
楼主问题解决了吗
回复

使用道具 举报

1

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2016-8-28
在线时间
15 小时
发表于 2016-8-28 21:49:21 | 显示全部楼层
原函数代码,不知道对你有没有帮助。

AHRS姿态计算代码.pdf

15.84 KB, 下载次数: 579

11

回复

使用道具 举报

chufeifan 该用户已被删除
发表于 2017-3-22 15:23:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

37

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2016-6-10
在线时间
191 小时
发表于 2017-4-3 16:27:42 | 显示全部楼层
我前段时间用的也是这个算法,滞后太严重。各种找资料,搞了一个星期没弄好,我现在用DMP的了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 21:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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