传感器与卡尔曼滤波器融合

一、介绍

        自动驾驶汽车配备了多个传感器,如摄像头、雷达、激光雷达等。如下图所示,所有传感器都有一些优点和缺点。但是,如果您融合不同传感器的输出,那么它们在任何天气条件下都不会失效。

以下是有关它们在不同任务和天气条件下的表现的一些数据:

假设,我们要测量不同障碍物与给定汽车的距离(深度)。

  • 可以使用具有立体声设置的摄像机测量距离。(请查看我的文章更多信息 https://medium.com/@satya15july_11937/depth-estimation-from-stereo-images-using-deep-learning-314952b8eaf9)
  • 距离也可以使用激光雷达测量。

如图1所示,如果我们能够融合立体相机和激光雷达的输出,那么我们的系统可以在任何条件下可靠地预测距离/深度。假设这是我们的问题,我们希望融合两个传感器的输出并预测距离或深度。

有很多方法可以融合不同传感器的输出,但在这里我们将讨论如何将它们与卡尔曼滤波器融合。

1.1 什么是卡尔曼滤波

卡尔曼滤波器的基本思想是使用被测系统的模型,并在新的测量可用时更新模型。筛选器的工作原理是根据以前的状态估计值和系统模型对系统的当前状态进行预测,然后将此预测与新度量值相结合,以获得更新的状态估计值。

它基于贝叶斯定理,让我们简化卡尔曼滤波器:

  • 你什么时候预测某种状态,这意味着你指的是概率分布。
  • 概率分布具有均值和方差或协方差。
  • 这是一个迭代过程,并尝试预测每一步的状态,并根据传感器的测量数据更新/纠正状态。
  • 使用下面的公式,卡尔曼滤波器尝试预测和更新状态(X'/X)和不确定性(P'/P)。

1.2 卡尔曼滤波器的应用:

卡尔曼滤波器用于许多领域,例如

  • 机器人/汽车的本地化,
  • 跟踪对象(导弹、飞机、面部等)
  • 融合来自多个传感器的数据。
  • 经济学等

二、卡尔曼滤波器的类型

卡尔曼滤波器有以下类型:

  • 线性卡尔曼滤波器
  • 非线性卡尔曼滤波器。
    - 无迹卡尔曼滤波器(UKF)- 扩展卡尔曼滤波器(EKF)

2.1 线性卡尔曼滤波器:

卡尔曼滤波预测不确定性(即方差),这就是为什么它用概率分布来表示,在这种情况下是高斯分布。

卡尔曼滤波器使用以下公式进行预测

后验 = 先前 * 测量/归一化器

上述公式期望后验是高斯的,这只有在满足以下乘法和加法性质时才有可能。

  1. f(x+y) = f(x) + f(y)
  2. f(ax) = a f(x)

如果用于传感器的先验和测量的估计方法是线性的,则后验可以是高斯的。如果他们使用非线性方法,则不能使用线性卡尔曼滤波器。请检查下图。

2.2 非线性卡尔曼滤波器:

后验可以是非高斯的,如果在这种情况下使用的先验或似然(从传感器测量)方法 Non-Linear.In,则可以使用

  • 无迹卡尔曼滤波(UKF)
    - 利用西格玛点和变换方法对问题进行线性化处理
  • 扩展卡尔曼滤波器(EKF)
    - 使用雅可比和泰勒展开线性化问题。

以下是一些非线性示例:

用于测量雷达和飞机之间倾斜距离的非线性方法

用于先验估计的非线性方法

线性卡尔曼滤波器是跳转到UKF和EKF之前的基础。在本文中,让我们重点介绍线性卡尔曼滤波器。

三、线性卡尔曼滤波器详情:

线性滤波器可以通过以下步骤进行设计:

  1. 设计状态变量和协方差。
  2. 设计过程模型。
  3. 设计控制模型/功能。
  4. 预测步骤(带先验)。
  5. 更新步骤(通过传感器测量)

对于非线性滤波器,如无迹卡尔曼滤波器(UKF)和扩展卡尔曼滤波器(EKF),上述设计保持不变,但有一些例外,例如:

- UKF 使用西格玛点和无迹变换步骤,这是额外的。

- EKF 使用雅可比量对非线性问题进行线性化。

所以上图对于理解卡尔曼滤波非常重要,无论是线性的还是非线性的。

3.1. 设计状态变量和协方差:

3.2. 设计过程模型:

3.3.设计控制功能:(B和你)

在卡尔曼滤波器中,控制函数用于将控制输入的影响合并到状态预测方程中。控制输入是用于影响系统演进的已知信号,可用于提高状态估计的准确性。

控制函数通常由矩阵 B 表示,该矩阵将控制输入映射到状态向量的变化,而您映射到控制输入

例如,机器人根据其当前位置与所需位置发送转向和速度信号。因此,在这种情况下,需要定义控制输入 U 和控制函数 B。如果没有关于输入控件的信息,则将 B 和 U 设置为 0。

控制功能在系统可能受到已知控制输入影响的情况下特别有用,例如在机器人或飞机控制中。通过将控制函数合并到状态预测方程中,卡尔曼滤波器可以利用控制输入的已知影响来提高状态估计的精度。

3.4. 预测步骤:

在卡尔曼滤波中,预测步骤是递归过程的第一步,它使用先前的状态估计及其协方差来预测当前状态估计及其协方差。预测步骤由两个子步骤组成:

  • 状态预测(X')
  • 协方差预测(P')

3.5 . 更新步骤:

在预测步骤之后,卡尔曼滤波器使用预测状态估计及其协方差来执行测量更新步骤,该步骤将新测量合并到状态估计中并更新其协方差和状态。

四、使用卡尔曼滤波器进行目标检测/对象跟踪

卡尔曼滤波器在许多计算机视觉应用中用于对象跟踪。我在驾驶员监控系统(DMS)中使用它,以提高低功耗设备上的FPS。

4.1 设计用于对象跟踪的卡尔曼滤波器:

对象检测(即ROI预测)是一个线性问题,让我们讨论如何实现它。

我已经分享了我的实现@https://github.com/satya15july/linear_kalman_filter

4.2 Design 状态变量和协方差:

class KalmanTrack:def __init__(self, initial_state):self.kf = KalmanFilter(dim_x=8, dim_z=4)....self.kf.P[4:, 4:] *= 1000.  # initial velocity error covarianceself.kf.P *= 10.  # initial location error covariance self.kf.x[:4] = xxyy_to_xysr(initial_state)  # initialize KalmanFilter state

4.3  设计过程模型:

class KalmanTrack:def __init__(self, initial_state):....self.kf = KalmanFilter(dim_x=8, dim_z=4)# Transition matrixself.kf.F = np.array([[1, 0, 0, 0, 1, 0, 0, 0],[0, 1, 0, 0, 0, 1, 0, 0],[0, 0, 1, 0, 0, 0, 1, 0],[0, 0, 0, 1, 0, 0, 0, 1],[0, 0, 0, 0, 1, 0, 0, 0],[0, 0, 0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 0, 0, 0, 1]])self.kf.Q[-1, -1] *= 0.01  # process noiseself.kf.Q[4:, 4:] *= 0.01  # process noise 

4.4 .设计控制功能:

B 和 u 设置为 0,因为这在此给定方案中无效。

4. 预测步骤:


def predict(self):self.x = dot(self.F, self.x)                                    # x = Fxself.P = dot(self.F, dot(self.P, self.F.T)) + self.Q            # P = FPF' + Qself.x_prior = np.copy(self.x)self.P_prior = np.copy(self.P)

5. 更新步骤:

def update(self, z):if self.debug_flag:print("KalmanFilter::update, z: {}".format(z))# y = z - Hx (Residual between measurement and prediction)y = z - np.dot(self.H, self.x)PHT = dot(self.P, self.H.T)# S = HPH' + R (Project system uncertainty into measurement space)S = dot(self.H, PHT) + self.R# K = PH'S^-1  (map system uncertainty into Kalman gain)K = dot(PHT, inv(S))# x = x + Ky  (predict new x with residual scaled by the Kalman gain)self.x = self.x + dot(K, y)# P = (I-KH)PI_KH = self._I - dot(K, self.H)self.P = dot(I_KH, self.P)

请检查我分享的完整代码@https://github.com/satya15july/linear_kalman_filter

五、评估

在上面的视频中,您可以看到卡尔曼滤波器预测与对象检测器匹配。但在下面的视频中,卡尔曼滤波器预测最初与物体检测器不匹配,因为汽车的形状随帧到另一帧而变化。但是当形状停止波动时,预测会稳定下来。

预测的这种波动是否意味着我们不能使用卡尔曼滤波进行对象跟踪/目标检测?

让我们以驾驶员监控系统(DMS)中的人脸检测/跟踪用例为例,

  • 通常,驾驶员专注于道路,不会经常移动。
  • 因此,在这种情况下,我们可以在每个交替帧中使用卡尔曼滤波器进行人脸检测,并且我们可以使用一些智能,以便更多地将其用于人脸跟踪/人脸检测。
  • 如果您可以做到这一点,那么您的驾驶员监控系统性能可以大大提高。不是吗?

这是统计数据(我从我的实现中收集的)

六、结论

我认为如果您仔细阅读本文,您可以了解如何使用卡尔曼滤波器融合不同的传感器。我将在下一篇文章中分享代码并解释。

在这里,我概述了什么是卡尔曼滤波器以及如何使用线性卡尔曼滤波器进行对象跟踪。但这个世界充满了非线性问题。机器人定位(SLAM)、跟踪飞机/导弹等问题是非线性问题,无法通过线性卡尔曼滤波解决。它可以使用 UKF 或 EKF 来解决。

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

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

相关文章

Docker-Compose编排与部署(lnmp实例)

第四阶段 时 间:2023年8月3日 参加人:全班人员 内 容: Docker-Compose编排与部署 目录 一、Docker Compose (一)概述 (二)Compose适用于所有环境: (三&#xf…

前端页面--视觉差效果

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" href"https://un…

Spring中Bean的生命周期

Spring中Bean的生命周期可以分为5个阶段&#xff1a; 对象实例化。 属性赋值。 初始化&#xff0c;看Bean实现了哪些接口&#xff0c;执行相应的方法&#xff0c;去包装对象&#xff0c;使对象的功能增强。 将bean对象放入到容器中。 销毁Bean。

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 3

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

Linux文本处理工具和正则表达式

Linux文本处理工具和正则表达式 一.查看、截取和修改文本的工具 1.查看文本的工具 cat 最常用的文件查看命令&#xff1b;当不指明文件或者文件名为一杠’-时&#xff0c;读取标准输入。 cat [OPTION]... [FILE]... -A&#xff1a;显示所有控制符(tab键:^I;行结束符:$) -…

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板13

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

pygame贪吃蛇游戏

pygame贪吃蛇游戏 贪吃蛇游戏通过enter键启动&#xff0c;贪吃蛇通过WSAD进行上下左右移动&#xff0c;每次在游戏区域中随机生成一个食物&#xff0c;每次吃完食物后&#xff0c;蛇变长并且获得积分&#xff1b;按空格键暂停。 贪吃蛇 import random, sys, time, pygame from …

【小沐学前端】GitBook制作在线电子书、技术文档(gitbook + Markdown + node)

文章目录 1、简介1.1 工具简介1.2 使用费用 2、安装2.1 安装node2.2 安装gitbook 3、测试3.1 编辑文档3.2 编译工程3.3 预览工程 结语 1、简介 官网地址&#xff1a; https://www.gitbook.com/1.1 工具简介 什么是 GitBook&#xff1f; GitBook 是一个现代文档平台&#xff…

【雕爷学编程】Arduino动手做(190)---MAX4466声音模块2

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

安装zabbix5.0监控

官网安装手册&#xff1a; https://www.zabbix.com/cn/download 一、 安装zabbix a. 安装yum源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpmyum clean allb. 安装Zabbix server&#xff0c;web前端&#xff0c;agent y…

【【萌新的STM32 学习-6】】

萌新的STM32 学习-6 BSP 文件夹&#xff0c;用于存放正点原子提供的板级支持包驱动代码&#xff0c;如&#xff1a;LED、蜂鸣器、按键等。 本章我们暂时用不到该文件夹&#xff0c;不过可以先建好备用。 CMSIS 文件夹&#xff0c;用于存放 CMSIS 底层代码&#xff08;ARM 和 ST…

【Python】Pandas 简介,数据结构 Series、DataFrame 介绍,CSV 文件处理,JSON 文件处理

序号内容1【Python】Pandas 简介&#xff0c;数据结构 Series、DataFrame 介绍&#xff0c;CSV 文件处理&#xff0c;JSON 文件处理2【Python】Pandas 数据清洗操作&#xff0c;常用函数总结 文章目录 1. Pandas 简介2. Pandas 数据结构1. Series&#xff08;一维数据&#xff…

Pandas 的Merge函数详解

在日常工作中&#xff0c;我们可能会从多个数据集中获取数据&#xff0c;并且希望合并两个或多个不同的数据集。这时就可以使用Pandas包中的Merge函数。在本文中&#xff0c;我们将介绍用于合并数据的三个函数 merge、 merge_ordered、 merge_asofmerge merge函数是Pandas中…

算法练习--leetcode 数组

文章目录 爬楼梯问题裴波那契数列两数之和 [数组]合并两个有序数组移动零找到所有数组中消失的数字三数之和 爬楼梯问题 输入n阶楼梯&#xff0c;每次爬1或者2个台阶&#xff0c;有多少种方法可以爬到楼顶&#xff1f; 示例1&#xff1a;输入2&#xff0c; 输出2 一次爬2阶&a…

743. 网络延迟时间

有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 ui 是源节点&#xff0c;vi 是目标节点&#xff0c; wi 是一个信号从源节点传递到目标节点的时间。 现在&#xff0c;…

用 Gaussian Process 建模 state-action 空间相关性,加速 Multi-Fidelity RL

1 intro 利用相邻 state-action 的空间相关性来加速学习&#xff1a;通过 Gaussian Process&#xff08;GP&#xff09;作为函数逼近器。主要贡献&#xff1a;两个算法。 model-based MFRL 算法 GP-VI-MFRL&#xff0c;估计转换函数&#xff0c;然后使用 value iteration 计算…

rust基础

这是笔者学习rust的学习笔记&#xff08;如有谬误&#xff0c;请君轻喷&#xff09; 参考视频&#xff1a; https://www.bilibili.com/video/BV1hp4y1k7SV参考书籍&#xff1a;rust程序设计语言&#xff1a;https://rust.bootcss.com/title-page.htmlmarkdown地址&#xff1a;h…

金鸣识别将无表格线的图片转为excel的几个常用方案

我们知道&#xff0c;金鸣识别要将横竖线齐全的表格图片转为excel非常简单&#xff0c;但要是表格线不齐全甚至没有表格线的图片呢&#xff1f;这就没那么容易了&#xff0c;在识别这类图片时&#xff0c;我们一般会使用以下的一种或多种方法进行处理&#xff1a; 1. 基于布局…

【Unity 实用工具篇】✨| 学会使用 可编程瓦片Tile Map,快速搭建2D地图

前言【【Unity 实用工具篇】✨| 学会使用 可编程瓦片Tile Map,快速搭建2D地图一、导入 Tile Map Editor二、创建调色板 Tile Palette三、快速绘制地图四、TilePalette 调色板功能介绍五、TileMap 相关组件属性介绍GirdTilemapTilemap Renderer 瓦片地图渲染器Tile Assets 瓦片…