极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: savagego

卡尔曼滤波学习笔记

[复制链接]
发表于 2014-3-28 16:51:35 | 显示全部楼层
savagego 发表于 2014-3-28 13:02
void calculate_xz()
{
xz=xz+t*gyro[1];

1.测量噪声的协方差是根据不同情况算的,我并没有计算是因为我用的卡尔曼假设过程和测量的噪音都是不随时间变化的,我在取样附近找了一个点收敛比较好就用了,当然如果需要可以取样拟合一下得到近似解。
2.最后要更新当前状态下X(K|K)的协方差,这样算法才能自回归算下去,这里的‘’1‘’是因为是单模型单测量,所以单位对角阵退化为1.
不知道我说的是否还有错误或者不清楚的地方,咱们继续讨论。
回复 支持 反对

使用道具 举报

发表于 2014-3-28 23:37:52 | 显示全部楼层
zhangzhe0617 发表于 2014-3-28 16:51
1.测量噪声的协方差是根据不同情况算的,我并没有计算是因为我用的卡尔曼假设过程和测量的噪音都是不随时 ...

@leicheng 这个我还真没注意到,受教了。这个过程噪音是最头疼的,我是还迷糊的,用一堆值试出来的,是个隐患
回复 支持 反对

使用道具 举报

发表于 2014-3-31 21:44:59 | 显示全部楼层
本帖最后由 leicheng 于 2014-3-31 22:06 编辑

savagego童鞋,俺认真看了下。
严格讲zhangzhe0617童鞋写的04句计算误差协方差有点省略:p_xz=p_xz+q_xz;公式省略了一阶和二阶小项,所以只剩下常数项了,你可以认为这里的q_xz=Q_angle *dt。
黑马的那种写法只省略了2阶小项:  P_00 += -(P_10 + P_01) * dt + Q_angle *dt;。
下面是没有省略任何项,完全按照定义推导得出的,可供你参考:
//Step 2 :先验估计  更新误差协方差矩阵 P
   P[0][0] += dt * (dt*P[1][1] - P[0][1] - P[1][0] + Q_angle);
   P[0][1] -= dt * P[1][1];
   P[1][0] -= dt * P[1][1];
   P[1][1] += Q_bias * dt;
回复 支持 反对

使用道具 举报

发表于 2014-4-1 20:26:49 | 显示全部楼层
本帖最后由 leicheng 于 2014-4-1 20:38 编辑

@savagego :差不多去年的这个时候,有一位叫作笨笨的童鞋写了篇文章:Arduino+MPU6050+Kalman filter。你去看看~
另外有篇文章有详细介绍:A practical approach to Kalman filter and how to implement it
回复 支持 反对

使用道具 举报

发表于 2014-4-6 21:22:07 | 显示全部楼层
本帖最后由 zenki 于 2014-4-6 21:25 编辑

针对LZ的程序,有两个问题:
1. q_xz也就是过程噪声,是怎么确定的?
2. r_xz也就是测量噪声,是怎么确定的?
q_xz如果太大,角度的估计值就会跟着利用重力计算的角度走,用q_xz=0.0025测试了下:

蓝线是用角速度积分计算的Roll角(绕X轴旋转的角度)
红*线是用重力加速度计算的角度
绿+线是用kalman数据融合后计算的角度,(都是静止的下面的)
untitled.jpg





如果让q_xz = 0;
那么就是下面的结果:
untitled2.jpg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-4-14 19:22:03 | 显示全部楼层
正在学习卡尔曼滤波。
回复 支持 反对

使用道具 举报

发表于 2014-7-15 22:54:19 | 显示全部楼层
mark           
回复 支持 反对

使用道具 举报

发表于 2014-8-1 22:44:22 | 显示全部楼层
想问以下 Axz 是代表什么?
回复 支持 反对

使用道具 举报

发表于 2015-3-14 19:38:31 | 显示全部楼层
savagego 发表于 2014-3-26 11:27
2,p_xz=p_xz+q_xz;
3, k_xz=p_xz/(p_xz+r_xz);
第二条是防止程序飞掉,因为第三条用到除法,如果除数为 ...

什么叫防止程序飞掉
回复 支持 反对

使用道具 举报

发表于 2015-3-16 10:29:34 | 显示全部楼层
woi314ow 发表于 2015-3-14 19:38
什么叫防止程序飞掉

应该是第二个状态方程,楼主这里理解有错误,他已经解释了
回复 支持 反对

使用道具 举报

发表于 2015-5-16 10:12:06 | 显示全部楼层
电子秤有卡尔曼逗我的吧!还是想想怎么在硬件上改进吧!
回复 支持 反对

使用道具 举报

发表于 2015-6-29 21:12:07 | 显示全部楼层
mark~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2015-7-23 22:44:42 | 显示全部楼层
楼主讲的真棒,看其他的卡尔曼讲解,都是贴上一段代码,然后翻译,完全不知道其算法的精妙和核心思想。你这样一讲瞬间就明白了,即使不看代码,也会大概知道了。真心谢谢!!!
回复 支持 反对

使用道具 举报

发表于 2015-8-20 15:03:43 | 显示全部楼层
阴霾の微笑 发表于 2014-8-1 22:44
想问以下 Axz 是代表什么?

我也看到这个Axz,就不知道了
回复 支持 反对

使用道具 举报

发表于 2015-8-20 18:10:47 | 显示全部楼层
还在学习中,借鉴下楼主的笔记
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 13:46 , Processed in 0.050255 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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