自动驾驶中的传感器融合算法:卡尔曼滤波器和扩展卡尔曼滤波器

自动驾驶中的传感器融合算法:卡尔曼滤波器和扩展卡尔曼滤波器

image

附赠自动驾驶学习资料和量产经验:链接

介绍:

追踪静止和移动的目标是自动驾驶技术领域最为需要的核心技术之一。来源于多种传感器的信号,包括摄像头,雷达,以及激光雷达(基于脉冲激光的测距设备)等传感器组合的组合体来估计位置,速度,轨迹以及目标的种类,例如其他车辆和行人。详情请见:++Link++(原文中的链接是无效的因此我将原作者的文章连接替换了)

你可能会问——为什么我们需要这么多的传感器?

这是因为每种传感器提供了追踪物体所需要的不同精度和类型的信息,尤其是在不同天气条件下。比如,以激光雷达为基础的传感器能很好地解决位置的问题,但是在糟糕的天气条件下其精度和性能都会有很大程度的下降。另一方面,雷达的空间解决方案也相对便宜很多,与此同时,在恶劣的天气条件下也能提供更准确的数据。

同样的,不像激光雷达传感器,雷达可以提供目标的速度和方位。雷达数据也是计算密集型的,因为一束激光发射非常多包含每个独立的激光点的范围的数据,它使得你必须理解你的算法。

组合来自不同传感器信息的技术称之为传感器融合技术。之所以较早的讨论这个,是因为应用在传感器融合之上的算法必须处理短暂的,充满杂讯的输入,生成可靠的运动状态估计的概率。

该文章展示了在位置的追踪和估计中最通用的算法,卡尔曼滤波器的变种——‘扩展卡尔曼滤波器’。在进一步的文章中,我们会兼顾到其他技术比如无损卡尔曼滤波器和粒子滤波器。

image

1.使用激光雷达数据的基础卡尔曼滤波器:

卡尔曼滤波器的历史已经超过半个世纪,但是对于输入数据的噪声信息和状态估计的平滑来说仍然是最有效的传感器融合算法之一.它假定位置参数是符合高斯分布的,即完全可以被均值和协方差参数化:X∼N(μ, σ²)

当传感器的信息流开始的时候,卡尔曼滤波器使用一系列的状态信息来预测和衡量更新步骤去更新被追踪目标的信心值(概率).预测和更细心的步骤如下图所示:

image

状态预测:

我们会使用一个简化的线性状态空间模型(++Model Link++)去阐述滤波器的工作方式. 一个系统在t时刻的线性状态可以从t-1时刻根据以下等式被估计:

image

衡量更新:

卡尔曼滤波器的下一部分则是去使用实测参数z去更新预测状态’x’,通过缩放因子(通常称之为卡尔曼增益)成比例的计算估计值和测量值之间的误差.

image

你可以在以下链接中找到衡量更新等式的求导:++Derivation Link++

举个例子

理论部分结束!让我们尝试用一些代码去表示一些卡尔曼滤波器的基础过程。

对此,我们模拟一个目标,它的状态被四维向量x=[px py vx vy]所描述。

在这个例子中测量传感器是返回位置数据但是没有速度信息的激光传感器。为了观测到速度信息我们需要使用雷达传感器数据。在接下来的章节中,当我们讨论扩展卡尔曼滤波的时候我们将会涉及到这些。

让我们以一些假设开始:

image

伪代码:

基础版本的卡尔曼滤波器代码步骤列在了下面。你可以找到一个基础的例子:++code link++

"""prediction step"""
def predict(x, P):x = (F * x) + u P = F * P * F.transpose() #Acceleration noise Q is assumed to be zeroreturn x, P"""measurement update step"""
def update(x, P,z):# measurement updateZ = matrix([z])y = Z.transpose() - (H * x)S = H * P * H.transpose() + RK = P * H.transpose() * S.inverse()x = x + (K * y)P = (I - (K * H)) * Preturn x, P

最后的迭代步骤通过测量和应用预测以及滤波器的更新步骤如下所示:

plot_position_variance(x,P,edgecolor='r')  #plot initial position and covariance in red   
for z in measurements:x,P = predict(x, P)x,P = update(x, P,z)plot_position_variance(x,P,edgecolor='b') #plot updates in blueprint(x)print(P)

image

卡尔曼滤波器迭代:滤波器在迭代之后向真实值收敛

下方的图阐述了滤波器在每次迭代中状态向量的px,py维度和位置的协方差发生了哪些变化。红圈表示初始过程不确定性。随着预测和测量更新,我们开始有了较小的误差(半径),状态估计开始越来越精确。

如同你看到的,最终估计的状态向量x[11.99,2.05]非常接近最终的观测值,误差最小值也缩小到了0.05。

2.扩展卡尔曼滤波器——使用雷达数据

雷达数据带来了一些更困难的挑战。雷达返回数据值的是基于极坐标系,其由三个部分构成:

- ρ /Range(从原点到此的距离)
- ϕ / bearing ( ρ 和 x的夹角),
- ρ˙:接近率/距离变化率

由于没有H矩阵将状态向量映射到雷达的测量空间,我们需要一个函数h(x)来将状态空间银蛇到测量空间以测量更新步骤。这个方法是映射极坐标到笛卡尔坐标的方法的衍生方法,定义如下:

image

这个映射阐述了一个非线性函数,它将使得卡尔曼滤波器的过程和测量符合高斯分布的假设无效。扩展卡尔曼滤波器使用局部线性模型来逼近非线性模型,然后使用卡尔曼滤波应用到逼近值上。局部线性逼近是通过计算当前状态估计的一阶泰勒展开得出的。一阶的逼近也叫雅克比矩阵。我们不会在这里过多介绍雅克比矩阵的推到过程。相关内容在网络中可以找到优秀的介绍,但是如果你想要直接使用这些东西,你可以在以下的github引用中找到代码实例:++Github Link++

实现参考

你可以在github存储库中找到关于Kalman过滤器的c++编写代码:

代码示例:++code link++

image

总结

到此我们涉及到了一些目标追踪领域传感器融合的基本算法。在下一个阶段,将着眼于无损卡尔曼滤波,它将解决投影逼近值的问题。我们也会看看日益流行的基于蒙特卡洛数值积分的粒子滤波器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode输入花括号{}}会多一个解决方案

打开设置 搜索Closing Brackets 选择BeforeWhitespace 选完后重启下VSCode即可

ddres( ) 组站星双差方程和设计矩阵

1 ddres( )参数介绍 rtklib中进行的单频解算 双差观测值,单差的模糊度 单频点双差 DD (double-differenced) phase/code residuals ------------------------------ x 模糊度 P 方差-协方差阵 sat 共识卫星列表 ns 共识卫星数量 y…

模型优化和调整(2)

接模型优化和调整(1) 调整反向传播 梯度消失和梯度爆炸 梯度消失和梯度爆炸都和计算出来的“delta”有关。理想的delta应该是逐渐减小的。如果delta一直太小,则会导致下降太慢,甚至对于权重没有改变,此时形成了梯度…

深入C语言内存:数据在内存中的存储

一、数据类型 1. unsigned:无符号数类型 当一个数是无符号类型时,那么其最高位的1或0,和其它位一样,用来表示该数的大小。 2.signed:有符号数类型 当一个数是有符号类型时,最高数称为“符号位”。符号位为1…

绝地求生:第29赛季第1轮更新公告

正式服维护日期 ※ 下列时间可能会视维护情况而变化。 北京时间4月9日上午8:00 – 下午4:30 地图轮换 ※ 地图轮换将于北京时间每周三上午10点进行。 日期 正式服 – 普通比赛 可自主选择地图的地区 - 亚洲、东南亚 可自主选择地图的地区 – 韩国/日本、KAKAO 随机选择地…

【随笔】Git 基础篇 -- 分支与合并 git merge(九)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

重生奇迹MU玛雅宝石功能

玛雅宝石是重生奇迹mu游戏中的重要合成材料,玩家可以使用玛雅宝石合成属性果实、副本门票等道具。不过玛雅宝石的获取不易,所以使用起来一个都不能浪费。今天就给大家分享一些玛雅宝石使用效益最大化的经验。 获取与使用 在游戏中,玛雅宝石…

有人吐槽:低代码平台自带可视化报表,你定制化设计有啥市场?

类似这种评论,我见过的太多了。photoshop触手可及,设计高手又有几人呢? 工具毕竟就是工具,能不能用好,完全在于个体。 实不相瞒,我们接过N多可视化报表的美化业务,这就好比天猫有默认的店铺模…

JAVA面试八股文之Redis相关

Redis相关 Redis6.0为什么要用多线程?在Redis中存一个list集合怎么实现排序?Redis的5大基本类型的底层原理?缓存穿透?缓存击穿?缓存雪崩?redis做为缓存怎么保持和mysql数据进行同步?&#xff08…

Spring声明式事务(Spring学习笔记十三)

不推荐使用编程式事务 在Spring-dao.xml中配置声明式事务 <!--配置声明式事务 --><!--获得transactionManager然后把他丢给他的构造器 constructor-arg --><bean id"transactionManager" class"org.springframework.jdbc.datasource.Data…

ENSP 防火墙配置IPSecVPN点到多点

建议关闭物理机系统防火墙 应用场景 总部与分支机构通信&#xff1a;企业总部可以与遍布不同地理位置的分支机构建立安全的通信通道。远程用户访问&#xff1a;远程用户可以通过IPSec VPN隧道安全地访问公司内部网络资源&#xff0c;就像他们直接连接到公司网络一样。数据共享和…

【MySQL学习】MySQL的慢查询日志和错误日志

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

鸿蒙OS开发实战:【自动化测试框架】使用指南

概述 为支撑HarmonyOS操作系统的自动化测试活动开展&#xff0c;我们提供了支持JS/TS语言的单元及UI测试框架&#xff0c;支持开发者针对应用接口进行单元测试&#xff0c;并且可基于UI操作进行UI自动化脚本的编写。 本指南重点介绍自动化测试框架的主要功能&#xff0c;同时…

【Spring Security】2.实现最简单的身份验证

文章目录 一、找到官网的身份认证&#xff08;authentication&#xff09;示例代码二、实现最简单的身份验证1、创建Spring Boot项目2、创建IndexController3、创建index.html4、启动项目测试Controller 三、{/logout}的作用四、页面样式无法加载的问题 一、找到官网的身份认证…

二建考试搜题软件哪个好?分享8个可以搜答案的软件 #知识分享#笔记#学习方法

积极参加社团活动和实践项目&#xff0c;可以帮助大学生拓宽人脉圈和锻炼实际操作能力。 1.白鸽搜题 这是个微信公众号 多语言查询支持&#xff0c;满足国际用户需求。全球通用&#xff0c;无障碍搜题。 下方附上一些测试的试题及答案 1、等渗性脱水时&#xff0c;体液变化…

禅道任务如何删除

背景 利用禅道任务&#xff0c;来统计项目投入工时&#xff0c;但由于录入错误&#xff0c;导致工时写错&#xff0c;想修改但工时只会增加。 问题复现 先复现一下问题&#xff1a; 举例&#xff1a;2/6号工时之前由于操作失误&#xff0c;写成8小时&#xff0c;且任务状态为…

React - 你知道useffect函数内如何模拟生命周期吗

难度级别:中级及以上 提问概率:65% 很多前端开发人员习惯了Vue或者React的组件式开发,熟知组件的周期过程包含初始化、挂载完成、修改和卸载等阶段。但是当使用Hooks做业务开发的时候,看见一个个useEffect函数,却显得有些迷茫,因为在us…

DFS:深搜+回溯+剪枝解决排列、子集问题

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、全排列I . - 力扣&#xff08;LeetCode&#xff09; class Solution { public://全局变量vector<vector<int>> ret;vector<int> path;bool check[6];vector<vector<int>> perm…

Hololens2远程音视频通话与AR远程空间标注,基于OpenXR+MRTK3+WebRTC实现

Hololens2远程音视频通话与AR远程空间标注 使用Unity2021.3.21版本开发&#xff0c;基于OpenXRMRTK3.0WebRTC实现。 &#xff08;1&#xff09;通过视频获取视频帧的矩阵的方法可以参考&#xff1a;https://learn.microsoft.com/zh-cn/windows/mixed-reality/develop/advanced…

(学习日记)2024.04.09:UCOSIII第三十七节:事件函数接口

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…