0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基础卡尔曼滤波

jt_rfid5 来源:新机器视觉 2023-05-08 10:11 次阅读

			

原理

卡尔曼滤波器是一种基础预测定位算法。原理非常简单易懂。核心过程可以用一个图说明:

e2cb75de-ed43-11ed-90ce-dac502259ad0.jpg

本质上就是这两个状态过程的迭代,来逐步的准确定位。 预测:当前状态环境下,对下一个时间段t的位置估计计算的值。 更新:更具传感器获取到比较准确的位置信息后来更新当前的预测问位置,也就是纠正预测的错误。 你可能要问为什么有传感器的数据了还要进行更新?因为在现实世界中传感器是存在很多噪声干扰的,所以也不能完全相信传感器数据。卡尔曼算法依赖于线性计算,高斯分布,我们以一维定位来介绍算法的实现。

e2df3f74-ed43-11ed-90ce-dac502259ad0.jpg

e2f9158e-ed43-11ed-90ce-dac502259ad0.png

接下来我们开更新,预测后我们获取到传感器数据,表示目前传感器发现小车的位置应该是在26这个位置,在这种情况下,我们肯定是觉得传感器的准确度比我之前的预测瞎猜要来的准确。 所以方差自然会比较小,最终我们觉得真是的小车位置应该是更靠近传感器数据的,而且方差会缩小,以至于,想想也很清楚,我猜了一个预测值,现在有个专家告诉了我相对比较靠谱的数据,那我对小车的位置的自信度肯定会上升啊。 最终小车的位置经过这个时间段t的更新就是下图红色的高斯图:

e30aeeda-ed43-11ed-90ce-dac502259ad0.jpg

就这样不停的移动更新,最终小车的位置就会越来越准确。

一维模型下的Kalman公式:

预测 e32564f4-ed43-11ed-90ce-dac502259ad0.jpg

更新e33d6978-ed43-11ed-90ce-dac502259ad0.jpg

e354c05a-ed43-11ed-90ce-dac502259ad0.jpg

参考代码:

#include 
#include 
#include 


using namespace std;


double new_mean, new_var;


tuple<double, double> measurement_update(double mean1, double var1, double mean2, double var2)
{
  new_mean = (var2 * mean1 + var1 * mean2) / (var1 + var2);
  new_var = 1 / (1 / var1 + 1 / var2);
  return make_tuple(new_mean, new_var);
}


tuple<double, double> state_prediction(double mean1, double var1, double mean2, double var2)
{
  new_mean = mean1 + mean2;
  new_var = var1 + var2;
  return make_tuple(new_mean, new_var);
}


int main()
{
  //Measurements and measurement variance
  double measurements[5] = { 5, 6, 7, 9, 10 };
  double measurement_sig = 4;
  
  //Motions and motion variance
  double motion[5] = { 1, 1, 2, 1, 1 };
  double motion_sig = 2;
  
  //Initial state
  double mu = 0;
  double sig = 1000;


  for (int i = 0; i < sizeof(measurements) / sizeof(measurements[0]); i++) {
    tie(mu, sig) = measurement_update(mu, sig, measurements[i], measurement_sig);
    printf("update: [%f, %f]
", mu, sig);
    tie(mu, sig) = state_prediction(mu, sig, motion[i], motion_sig);
    printf("predict: [%f, %f]
", mu, sig);
  }


  return 0;
}

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2548

    文章

    50656

    浏览量

    751812
  • 定位算法
    +关注

    关注

    0

    文章

    61

    浏览量

    14986
  • 卡尔曼滤波器

    关注

    0

    文章

    54

    浏览量

    12175
收藏 人收藏

    评论

    相关推荐

    卡尔滤波

    卡尔滤波的估计值能很好的逼近真实值,我的疑惑是,这和滤波有什么关系,请高手介绍下卡尔算法是如
    发表于 07-04 22:57

    卡尔滤波

    卡尔滤波的噪声协方差怎么配置啊?
    发表于 08-01 10:05

    卡尔滤波的原理及如何实现

    卡尔滤波的原理和实现
    发表于 06-01 17:28

    卡尔滤波有哪些应用

    卡尔滤波风力发电机中的风速估计,转速估计甚至扭矩估计都设计到卡尔滤波,如果只是单一传感变量的
    发表于 07-12 06:00

    卡尔滤波简介

    在这里我就不介绍卡尔的数学推算了,网上的数学推导一抓一大把,如果想了解推导过程的小伙伴可以去大佬的博客。如果你是想直接简单运用卡尔滤波
    发表于 02-28 14:24

    卡尔滤波的解释

    用温度控制的例子介绍卡尔滤波的原理,很通俗,同意理解
    发表于 01-15 15:44 6次下载

    卡尔滤波学习及应用

    卡尔滤波的学习与应用。
    发表于 04-13 15:15 7次下载

    卡尔滤波讲解

    卡尔滤波讲解,感兴趣的小伙伴们可以瞧一瞧。
    发表于 08-23 17:56 14次下载

    卡尔滤波算法

    卡尔滤波算法
    发表于 12-17 17:22 52次下载

    一文看懂mpu6050卡尔滤波程序

    本文开始阐述了卡尔滤波的概念,其次阐述了卡尔滤波的性质与
    发表于 03-09 08:57 7.4w次阅读
    一文看懂mpu6050<b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>程序

    卡尔滤波原理及应用

    卡尔滤波原理及应用-黄小平
    发表于 06-09 14:37 0次下载

    卡尔滤波的变种有哪些?2

    **卡尔滤波**自从1960被Kalman发明并应用到阿波罗登月计划之后一直经久不衰,直到现在也被机器人、自动驾驶、飞行控制等领域应用。基础卡尔
    发表于 02-13 10:04 494次阅读
    <b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>的变种有哪些?2

    浅析卡尔滤波

    在 飞行器姿态计算 中,卡尔滤波是最常用的姿态计算方法之一。今天就以目前的理解讲以下卡尔滤波
    的头像 发表于 06-14 10:44 1997次阅读

    什么是卡尔滤波?卡尔滤波的作用是什么

    一、什么是卡尔滤波? 你可以在任何含有不确定信息的动态系统中使用卡尔滤波,对系统下一步的走向
    的头像 发表于 08-08 09:39 6887次阅读
    什么是<b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>?<b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>的作用是什么

    卡尔滤波家族

    本文对于扩展卡尔滤波、无迹卡尔滤波仅仅做了一些简要介绍,不再想上次的文章那样做详细地推导了。
    的头像 发表于 01-14 14:29 855次阅读
    <b class='flag-5'>卡尔</b><b class='flag-5'>曼</b><b class='flag-5'>滤波</b>家族