当前位置: 首页 > news >正文

无人驾驶——2.定位之卡尔曼滤波

找遍全网,个人认为这篇讲的最好。

参考:https://blog.csdn.net/young_gy/article/details/78177291

http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies(详细计算实例)

卡尔曼滤波是一种在不确定状况下组合多源信息得到所需状态最优估计的一种方法。本文将简要介绍卡尔曼滤波的原理及推导。

什么是卡尔曼滤波

首先定义问题:对于某一系统,知道当前状态XtX_t,存在以下两个问题:

  1. 经过时间

后,下个状态

 

如何求出?

  1. 假定已求出

,在t+1t+1时刻收到传感器的非直接信息

,如何对状态

 

进行更正?

这两个问题正是卡尔曼滤波要解决的问题,形式化两个问题如下:

  1. 预测未来
  2. 修正当下

下面,将以机器人导航为例,从预测未来和修正当下两个角度介绍卡尔曼滤波器。

卡尔曼滤波的原理

问题场景如下:一个机器人,我们想知道它实时的状态

 

,同时也想做到预测未来和修正当下这两件事。

其状态xx表示为一维大小为2的向量,元素分别表示位置信息与速度信息:

 

可是状态xx不一定是精准的,其不确定性用协方差表示:

 

预测未来

只考虑自身状态

只考虑自身状态的情况下,根据物理公式,可得:

 

用矩阵表示如下:

 

在状态变化的过程中引入了新的不确定性,根据协方差的乘积公式可得:

 

考虑外部状态

外部状态,这里以加速度为例,引入变量

 

同时,环境仍然存在我们无法刻画的误差,以

表示,最终的预测公式如下:

 

从上述式子可见:

  1. 新的最优估计是之前最优估计之前最优估计}}的预测加上已知的外界影响已知的外界影响}}的修正。
  2. 新的不确定度是预测的不确定度加上环境的不确定度。

修正当下

我们已得到

,下面要通过观测到的测量值

 

进行更新。

因为

 

 

的数据尺度不一定相同,例如

包含了笛卡尔的坐标信息,使用radar得到的

 

则包含极坐标信息。所以首先应该把两者放在相同的尺度下去比较,尺度转换使用Hk\mathbf{H}_k将预测信息转化为测量信息的尺度。

 

这样一来,便得到测量尺度上的两个分布:

  1. 测量值的分布
  1. 预测值变换后的分布

下面一个问题就是如何用这个两个分布组成新的分布。

 

 

简单的一维情况如下:

 

总结

预测未来

 

 

修正当下

 

卡尔曼滤波需要内存少,计算速度快,适合实时性情况与嵌入式设备的需要。

转载于:https://www.cnblogs.com/yrm1160029237/p/10118692.html

相关文章:

  • 真相触目惊心!个人信息泄露报告 86.5%的人曾接到推销电话
  • [Vue CLI 3] Uglify 相关的应用和设计
  • Android Fragment碎片
  • docker 非root用户修改mount到容器的文件出现“Operation not permitted
  • Python入门
  • SSL虚拟主机
  • 【.Net】 C#访问修饰符
  • 年薪 40W Java 开发在阿里是什么水平?
  • 书籍购买
  • raise 与 raise ... from 的区别
  • iOS开发之APP内部切换语言
  • Thanos如何让Prometheus更易用?
  • Spring任务调度之Spring-Task
  • P5112 FZOUTSY
  • java B2B2C springmvc mybatis多租户电子商城系统- 路由定位器
  • ES6指北【2】—— 箭头函数
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【面试系列】之二:关于js原型
  • 【译】理解JavaScript:new 关键字
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android 架构优化~MVP 架构改造
  • co.js - 让异步代码同步化
  • java取消线程实例
  • Protobuf3语言指南
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python实现BT种子转化为磁力链接【实战】
  • Redis 中的布隆过滤器
  • SSH 免密登录
  • Web Storage相关
  • 初探 Vue 生命周期和钩子函数
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 扑朔迷离的属性和特性【彻底弄清】
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 算法-图和图算法
  • 学习ES6 变量的解构赋值
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 硬币翻转问题,区间操作
  • 通过调用文摘列表API获取文摘
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #、%和$符号在OGNL表达式中经常出现
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #Linux(帮助手册)
  • #宝哥教你#查看jquery绑定的事件函数
  • (2)nginx 安装、启停
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (第一天)包装对象、作用域、创建对象
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (十) 初识 Docker file
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)四层和七层负载均衡的区别
  • .NET Core 实现 Redis 批量查询指定格式的Key