开个帖子,讨论卡尔曼滤波算法,关于加速度传感器和陀螺仪的融合 有参考程序
首先列出我对卡尔曼滤波用于两个传感器融合的一点见解:卡尔曼滤波 实现性最优解的一种求解算法,他必须有根据建模的预测值和传感器数据采集的测量值 才能够进行相应的滤波算法
卡尔曼滤波要点:建立系统模型,确定滤波量 确定预测量 确定测量量 进行五个方程计算滤波
在陀螺仪和加速度传感器滤波的融合中,我们得首先建立起模型(融合只适用于重力情况下,若加速度传感器因为有其他力引入会造成队伍,故只用来进行水平姿态的测量)模型我找了篇论文这里详细的介绍了模型,点击此处下载 ourdev_711905ORLKPP.pdf(文件大小:497K) (原文件名:数据融合论文.pdf)
这里我重点说一下论文里的模型的特点,首先模型是一个2维模型,故在写程序的时候需要先把卡尔曼滤波的五个方程用线性代数的方法解算出来,这样才能够进行相应的卡尔曼滤波程序的编写。贴上程序的文档 (一定注意这是2维的卡尔曼滤波,根据论文中的五个方程进行相应的线性代数化简才能够看懂程序),一定注意程序是在用线性代数解算后的方程,如果不明白可以自己推到以下,我有在纸上的推导过程,有空拍照上传,这里现就不上传了。 这里的我们的预测量就是用陀螺仪测量的数据,而测量量就是加速度传感器测量的数据。点击此处下载 ourdev_711906BBHNLD.txt(文件大小:1K) (原文件名:新建文本文档.txt)
而之后就是进行五个方程的递归运算,即预测的更新,而输入量参照论文则是带有偏差的陀螺仪测量的角速度,和加速度测量的角度。 我以前考虑过用偏差作为滤波量,不知道可以不可。 前辈 貌似没人跟帖啊 !!
你这个代码现在基本上大家都在用 貌似懂的人真不多 我用的时候它的角度值总漂移 很是苦恼啊 不知你遇到没 等上电脑我再好好看看…学习学习~ 那个pdf好东西,谢谢 第一篇pdf裡面的model是錯的....Orz 顶一下楼主的文件不错想看看你的推导过程? 回复【5楼】g921002
-----------------------------------------------------------------------
哪里错的?? 回复【7楼】zfelight
哪里错的??
-----------------------------------------------------------------------
φ <-- 傾角
b <-- gyro offset
Wa,Wg <-- White noise
狀態方程展開 dφ = -b + Wgyro + Wg --> dφ = (Wgyro-b)+ Wg = Wrate + Wg
db = 0 <-- gyro offset跟時間無關 <-- MEMS gyro 可以這樣假設。
這樣的狀態方程可以降到一階。
觀測方程
φacc = φ + Wa <--- 無視外力項。假設Wa是白噪訊就是錯誤的。然後觀測方程一樣降到一階。
上面的狀態方程跟觀測方程直接降到一階,然後Kalman退化到最小二乘....那用Kalman幹嘛?
裡面提到一句"在该系统中,采用加速度计估计出陀螺仪常值偏差b",後面完全沒提到b怎樣用加速規標定出來。
db = 0 --> b = 任意常數。<--標定個鬼啊!!
總結:垃圾paper 额。。。。楼主?8楼?谁对谁错?求续集。。。。 不知前辈知不知道加速度在有一定倾角(即拿在手上上下左右动)的时候怎么样判断运动轨迹
析上有一个陀螺仪和一个加速度 不错,是个好资料 我觉得用加速度计修正陀螺仪,最困难的就是剔除有害加速度,得到真实的重力分量,这不单需要滤波,还要根据上一时刻的姿态、运动速度通过力学计算进行剔除 ratar 发表于 2012-3-30 21:00 static/image/common/back.gif
我觉得用加速度计修正陀螺仪,最困难的就是剔除有害加速度,得到真实的重力分量,这不单需要滤波,还要根据 ...
引入动态模型是个好思路,不过这个建模有难度。和飞行器的各项参数有密切关系。 学习四轴算法 学习{:smile:} 学习 收藏了,呵呵 看看, 非常好,正在学习啊 学习中,谢谢了{:smile:} 谢谢了,像我这样的新手有需要 貌似用的人不少,但能推导出来的人凤毛麟角。希望楼主发扬一下,能把推导过程写上来拯救一下苍生。 学习学习~ 学习一下! 电脑上时再看看 好帖帮顶{:mad:}{:mad:}{:mad:} 帮顶!正好学习。 这个程序大家都在用啊。。 三个轴的加速度和角速度可以通过一个卡尔曼吗? 那篇论文我看了,但是有个疑问,先关参数是怎么确定的啊?纠结中 怎么没有大师来讲解呢!! 拍个视频 讲解 一下 9楼说的是不是对的? 小伙子,可以加你QQ交流下卡尔曼滤波吗 zhaoqingtao008 发表于 2014-6-25 20:50
小伙子,可以加你QQ交流下卡尔曼滤波吗
哈哈,楼主开了讨论帖不久就失踪啦!
不要等了。
卡尔曼滤波器的状态变换矩阵取四元数作为状态变量,测量矩阵去加速度计和磁罗盘为测量变量。这样就可以构建模型,剩余几个矩阵得考打点,可以参考论文《基于ARM与低成本MEMS器件的AHRS设计》。 楼主能说明下,程序里的 pdot , p 数组还有PCt_0, PCt_1, K_0, K_1, t_0, t_1 这些变量在卡尔曼的公式里各代表什么下。 g921002 发表于 2012-2-10 23:18
回复【7楼】zfelight
哪里错的??
----------------------------------------------------------------- ...
那个不是降阶了,是离散化了,所以没有了微分 数据融合的基础原理已经熟悉到不能再熟悉。用kalman却一直无法把方程列出来。
卡尔曼的基本原理是测量噪声协方差R大的话,评估值的权重就更高一些。反之,测量值的权重更高。
但是在数据融合里,我们知道在非匀速运动状态下,accel的值是不可靠的,此时gyro的权重应该更高,反之,accel的值是可靠的,应该及时修正gyro的bias,
以备系统再次做非匀速运动时进行姿态解算。
常规的kalman是一个输入源(测量),一个先验评估值,解算出一个最佳估计值。
而数据融合的情况是,多个输入源(传感器值)的情况,阅读众多的文献资料,却一直没能找到多输入源的情况的滤波。经常都是一笔带过。
wiki上就一句话,翻译过来就是:
数据融合的结果取决是数据来源的质量,如果A数据源的质量好,那么融合结果中A的权重就越大,反之B的权重就越大。真心说了跟没说一样。
本坛流传的balance filter中的互补公式也是站不住脚,这里的系数应该是动态变化的。
angle = (0.98)*(angle + gyro*dt) + (0.02)*(x_acc)
假设物体静止平放方在水平面上,(0.02)*(x_acc)的结果为常数,而gyro因为drift却一直是累加的,也就是最终的angle必然变化,这公式怎么能用?
总而言之,列不出基础方程,不知道怎么用得上kalman filter。
太糟心了。 说好的参考程序呢
页:
[1]