OpenEdv-开源电子网

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

原子四轴 V1.2 姿态估算程序疑问

[复制链接]

13

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2018-7-8
在线时间
57 小时
发表于 2018-8-11 19:24:01 | 显示全部楼层 |阅读模式
5金钱
        estimator.accZ = accZRemovalDead;
        estimator.accZ -= 0.02f * errorZ * weight * weight * dt;        /*补偿加速度*/               


        /*位置和速度估测*/
        estimator.positonZ += estimator.velocityZ * dt + estimator.accZ * dt * dt / 2.0f;
        estimator.velocityZ += estimator.accZ * dt;

        /*高度误差*/
        errorZ = fusedHeight - estimator.positonZ;

以上是原子四轴V1.2版本中的程序,errorZ 为实际高度-估算高度,如果errorZ>0,则说明估算高度偏小,由估算高度的计算公式可知:estimator.positonZ += estimator.velocityZ * dt + estimator.accZ * dt * dt / 2.0f;是估算加速度偏小造成的,所以补偿加速度应该让估算的加速度值变大一点,而补偿加速度的公式为estimator.accZ -= 0.02f * errorZ * weight * weight * dt;这样计算不是会让估算加速度的值更小吗?是我哪里理解错了呢?请教各位大佬

最佳答案

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

estimator.accZ -= 0.02f * errorZ * weight * weight * dt; /*补偿加速度*/ 我说的是这个公式 我觉得应该把“-”变成“+” 昨天试了一下,把-换成+或者把这句屏蔽掉小四轴都能正常定高,后来仔细看了高度估算这部分的程序,发现estimator.accZ 这个数据是直接从mpu6500加速度计里面读取Z轴加速度后经过低通滤波处理后赋值给estimator.accZ,和上一次的补偿没关系,也就是说每次加速度补偿并没有累加到下一次,而这 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2018-7-8
在线时间
57 小时
 楼主| 发表于 2018-8-11 19:24:02 | 显示全部楼层
lycreturn 发表于 2018-8-13 15:19
更简单的验证办法,你觉得符号有问题,你改一下,然后把代码刷到MiniFly上,你看还能不能正常定高

estimator.accZ -= 0.02f * errorZ * weight * weight * dt;        /*补偿加速度*/  
我说的是这个公式  我觉得应该把“-”变成“+”
昨天试了一下,把-换成+或者把这句屏蔽掉小四轴都能正常定高,后来仔细看了高度估算这部分的程序,发现estimator.accZ 这个数据是直接从mpu6500加速度计里面读取Z轴加速度后经过低通滤波处理后赋值给estimator.accZ,和上一次的补偿没关系,也就是说每次加速度补偿并没有累加到下一次,而这个加速度补偿的参数为0.02*weight*weight*dt,这个值是非常小的,几乎不起作用,所以这里换成+或者-或者把这句去掉影响都不大,不过从逻辑上,我个人认为换成“+”应该更准确一点。
回复

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2018-8-11 20:48:30 | 显示全部楼层
帮顶!
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5703
金钱
5703
注册时间
2013-11-22
在线时间
1198 小时
发表于 2018-8-13 15:17:47 | 显示全部楼层
注意  estimator.positonZ += estimator.velocityZ * dt + estimator.accZ * dt * dt / 2.0f;     是 estimator.positonZ +=,是一个增量, 而不是 estimator.positonZ =简单赋值
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5703
金钱
5703
注册时间
2013-11-22
在线时间
1198 小时
发表于 2018-8-13 15:19:04 | 显示全部楼层
更简单的验证办法,你觉得符号有问题,你改一下,然后把代码刷到MiniFly上,你看还能不能正常定高
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 04:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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