搜索
bottom↓
回复: 16

请教:姿态结算中,求得四元数后,如何使用卡尔曼滤波?

[复制链接]

出0入0汤圆

发表于 2012-8-26 11:54:51 | 显示全部楼层 |阅读模式
如题,

使用龙格库塔法更新四元数,接着要使用巴尔曼滤波器将它滤波。

但以前只接触过单变量的卡尔曼,这次是四个变量,

请知道的坛友指教下原理和公式~~~

这是更新四元数的后半部分程序:
  1. // integrate quaternion rate and normalise
  2.   q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
  3.   q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
  4.   q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
  5.   q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;  
  6.   
  7.   // normalise quaternion
  8.   norm = invSqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
  9.   q0 = q0 * norm;
  10.   q1 = q1 * norm;
  11.   q2 = q2 * norm;
  12.   q3 = q3 * norm;
复制代码
这是单变量的卡尔曼滤波器:
  1. float KalmanGain;//  卡尔曼增益
  2. float EstimateCovariance;//估计协方差
  3. float MeasureCovariance;//测量协方差
  4. float EstimateValue;//估计值
  5.   
  6. void KalmanFilterInit(void)
  7. {
  8.         EstimateValue = 0;
  9.         EstimateCovariance = 1;
  10.         MeasureCovariance = 2;
  11. }

  12. float KalmanFilter(float Measure)
  13. {
  14.         //计算卡尔曼增益
  15.         KalmanGain=EstimateCovariance*sqrt(1/(EstimateCovariance*EstimateCovariance+MeasureCovariance*MeasureCovariance));

  16.         //计算本次滤波估计值
  17.         EstimateValue=EstimateValue+KalmanGain * (Measure-EstimateValue);
  18.        
  19.         //更新估计协方差
  20.         EstimateCovariance=sqrt(1-KalmanGain) * EstimateCovariance;
  21.        
  22.         //更新测量方差
  23.         MeasureCovariance=sqrt(1-KalmanGain) * MeasureCovariance;
  24.        
  25.         //返回估计值
  26.         return EstimateValue;
  27. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2012-8-26 12:13:00 | 显示全部楼层
不是很清楚,不过单变量要都变成矩阵。

出0入0汤圆

发表于 2012-9-19 19:52:25 | 显示全部楼层
完整代码发下。

出0入0汤圆

发表于 2012-11-28 12:41:50 | 显示全部楼层
怎么就没有下文了

出0入0汤圆

发表于 2013-5-7 21:26:09 | 显示全部楼层
单变量的卡尔曼滤波器

出105入79汤圆

发表于 2013-5-10 02:38:38 | 显示全部楼层
我觉得要是单变量卡尔曼用起来的话,先把加速度做卡尔曼(我现在用的是20次滑动平均),在传入四元素里面融合,应该会有不少的提升。

出0入0汤圆

发表于 2013-5-10 10:05:49 来自手机 | 显示全部楼层
qwe2231695 发表于 2013-5-10 02:38
我觉得要是单变量卡尔曼用起来的话,先把加速度做卡尔曼(我现在用的是20次滑动平均),在传入四元素里面融 ...

不要把卡尔曼和普通滤波混淆了。你对加速度做的只是个平均滤波,那可算不上卡尔曼。

出105入79汤圆

发表于 2013-5-10 11:26:26 | 显示全部楼层
jmp2002911911 发表于 2013-5-10 10:05
不要把卡尔曼和普通滤波混淆了。你对加速度做的只是个平均滤波,那可算不上卡尔曼。 ...

是的,我说的是代替。单变量卡尔曼只能滤波不能融合。

出0入0汤圆

发表于 2013-9-1 21:02:51 | 显示全部楼层
楼主是怎么解决问题的  我呀做到四元数了 ,但是不知道下面该怎么滤波了。。

出0入0汤圆

发表于 2013-12-20 18:09:00 | 显示全部楼层
楼主 ,有个小问题想请教一下,程序中的协方差是怎么确定的啊

出0入0汤圆

发表于 2014-2-19 21:13:12 | 显示全部楼层
正在入门卡尔曼

出0入0汤圆

发表于 2014-2-19 23:33:11 | 显示全部楼层
期待大神回答,楼主有个问题,对四元数做卡尔曼滤波之后呢,然后还原成陀螺仪的角速度,然后积分或者融合求姿态,然后用PID控制?

出0入0汤圆

发表于 2014-10-30 10:05:32 | 显示全部楼层
学习中...

出0入0汤圆

发表于 2014-10-31 18:25:13 | 显示全部楼层
哦,学习下。

出0入0汤圆

发表于 2014-11-7 18:40:01 | 显示全部楼层
chushibinsaobao 发表于 2013-12-20 18:09
楼主 ,有个小问题想请教一下,程序中的协方差是怎么确定的啊


过去快一年了,不知道你的问题有没有解决? 最近想做四元数的卡尔曼滤波,但 系统过程的协方差Q  和 测量过程的协方差R 不知道如何确定,求指教!四元数是4X1的矩阵,不知道这协方差怎么弄!!!

出0入0汤圆

发表于 2014-12-8 21:49:40 | 显示全部楼层
我认为你要用欧拉角来理解四元数。这样子其实是一个空间的向量+转角两个变量。

出0入0汤圆

发表于 2015-5-16 23:37:00 | 显示全部楼层
onev 发表于 2014-11-7 18:40
过去快一年了,不知道你的问题有没有解决? 最近想做四元数的卡尔曼滤波,但 系统过程的协方差Q  和 测量 ...

想问一下您的问题解决了吗? 我现在也在弄四元数的卡尔曼,但不清楚应该怎么确定系统过程的协方差Q 和测量过程的协方差R ,能解答一下吗? 多谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-3 05:27

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

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