MOT学习 - 卡尔曼滤波

2023-11-03

参考资料:

  • https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/
  • 协方差矩阵:https://youzipi.blog.csdn.net/article/details/48788671
  • https://www.bilibili.com/video/BV1Mu411B7Jy?p=1

协方差矩阵:对称矩阵,协方差表示的是两个随机变量的关系。

协方差表示在多大程序上x和y会共同变化。简单来说就是如果两个随机变量的协方差>0,则两者是正相关的,结果为负值就说明负相关的。如果为0,说明两者是不相关的

协方差矩阵的特征向量:第一特征向量是数据方差最大的方向,第二特征向量是与第一特征向量垂直的方向上数据方差最大的方向,第三特征向量是与第一和第二特征向量垂直的方向上数据方差最大的方向,以此类推。较长的u是第一特征向量,较短的v是第二特征向量。

What is it?

使用场景:对于某个动态系统有不确定的信息,需要对系统接下来要做什么做出有根据的猜测。卡尔曼滤波器非常适合不断变化的系统。比如:处理传感器噪声。 换句话说,我们的传感器至少有些不可靠,我们最初估计的每个状态都可能导致一系列传感器读数。
鲁棒性:即使混乱的现实出现并干扰了您猜测的清晰运动,卡尔曼滤波器通常也能很好地找出实际发生的情况。它可以利用您可能不会想到利用的疯狂现象之间的相关性!
实时性:优点是内存占用少(除了以前的状态之外不需要保留任何历史记录),而且速度非常快,非常适合实时问题和嵌入式系统。

机器人例子

一个机器人,状态量表示为:xk→=(p ,v ) ,包含position和velocity,然后外部条件有:

  • 有 GPS sensor,但是精度只有10m;
  • know something about how the robot moves:机器人运动朝向,电机转动步数(可以推测出机器人运动的距离),但是仍然有很多不可控的因素,比如:风的影响,轮子可能打滑。

结果:轮子转动的量可能不能准确地代表机器人实际走了多远,预测也不会完美。
场景特点总结:

  • GPS 传感器告诉我们一些关于状态的信息,但只是间接的,并且带有一些不确定性或不准确性
  • 我们的预测告诉我们一些关于机器人如何移动的信息,但只是间接的,并且存在一些不确定性或不准确性。

卡尔曼滤波器要做的:利用所有可用的信息,得到一种比任何估计本身更好的答案。

卡尔曼滤波如何工作的
We don’t know what the actual position and velocity are; there are a whole range of possible combinations of position and velocity that might be true, but some of them are more likely than others:
在这里插入图片描述
卡尔曼滤波假设postion and velocity是随机,且都是高斯随机分布,每个变量有均值u和方差 σ2。
卡尔曼滤波的预测向量:Fk,该向量的作用是将k-1时刻状态分布移动到k时刻。
在这里插入图片描述


卡尔曼滤波所有公式
在这里插入图片描述
卡尔曼滤波简图
在这里插入图片描述

超参调整
需要调整的参数有四个:Q,R,P,初始值。
参考:

Q:代表的是系统估计的误差(方差),Q越大,表示系统的估计值越不可靠。
R:代表的是观测误差(方差),R越大,表示观测值越不可靠。
P:代表目前迭代值的误差(方差),P越大,也表示系统的估计值越不可靠。
初始值:系统估计初始值,P的初值决定了初始增益的大小,可以决定初始收敛速度。

Python样例

import matplotlib.pyplot as plt
import numpy as np

iters = 100

z = np.arange(1, iters + 1)  # observations. 观测值
noise = np.random.randn(iters)  # mean = 0, std = 0.1. 方差为1的高斯噪声
z = z + noise

x = np.ones(2)  # predicted states, position and velocity respectively. 状态(位移+速度), 初始为0, 0. 预测值速度越接近1越好
p = np.array(
    [[1, 0], [0, 1]],
)  # 状态协方差矩阵
f = np.array([[1, 1], [0, 1]])  # 状态转移矩阵

q = np.array(
    [[0.0001, 0], [0, 0.0001]],
)  # 预测噪声协方差矩阵

h = np.array([[1, 0]])  # 预测值 -> 观测值 的转换矩阵
r = np.array([1])  # 观测噪声方差 (观测值只有位移)

x_preds = []
for i in range(iters):
    # 更新预测 & 预测协方差
    x_ = np.matmul(f, x)
    p_ = np.matmul(np.matmul(f, p), f.T) + q
    # 得到卡尔曼系数
    k = np.matmul(p_, h.T) / (np.matmul(np.matmul(h, p_), h.T) + r)
    # 修正预测 & 更新预测协方差
    x = x_ + np.matmul(k, (np.array([z[i]]) - np.matmul(h, x_)))
    x_preds.append(x)
    p = (np.eye(2) - np.matmul(k, h)) * p_


x_preds = np.stack(x_preds)

plt.figure(figsize=(5, 5))
plt.grid(linestyle="-.", linewidth=1)

plt.plot(x_preds[:, 0], x_preds[:, 1], "red", linewidth=3)
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MOT学习 - 卡尔曼滤波 的相关文章

随机推荐

  • 蓝桥杯python组算法模板与习题

    目录 一 一些简单的处理技巧和语法 1 小技巧 1 1 python中的快读 sys库 1 2 python程序测试时间 仅供参考实际比赛可能也没啥用 1 3 python中日期处理等问题小技巧 2 基础语法 2 1 首先就是标准格式化输入
  • Centos系统安装Tomcat(Tomcat7,Java8-jdk1.8)

    以前经常使用java8 也就是java jdk1 8 和tomcat7开发web系统 怀旧记录一下在centos7系统里安装部署tomcat7 同时部署多个tomcat7的方法 解决tomcat7在centos7系统启动很慢的问题 apac
  • OLED显示模块驱动原理及应用

    OLED显示模块驱动原理及应用 本文以中景园OLED显示模块为例 介绍模块的应用和OLED显示及驱动的基本原理 文中介绍了显示模块 SSD1306驱动芯片以及GT20L16S1Y字库芯片相关技术内容及原理 并加上了作者的理解和应用记录 一
  • 【计算机视觉

    文章目录 一 A Dataset of Multispectral Potato Plants Images 二 Active Terahertz 三 Apron Dataset 四 AquaTrash 五 BBBC041 P vivax
  • 电脑开机转圈圈不停-转圈后系统各窗口闪退-桌面黑屏解决探讨

    如题 如果在电脑出现开机黑屏 进入系统后仍系统闪退等问题后 那么可能是因为某些系统文件或网络相关的配置文件损坏或配置错误导致的 通过重置 Winsock 目录 可以恢复网络连接的正常运行 同时也可以修复与网络相关的系统问题 从而才能使电脑恢
  • (20200920)编程每日一题_C程序设计_计算整数段和

    1 描述 输出从整数A到整数B的所有整数以及这些数的和 来源 https pintia cn problem sets 14 problems 794 2 输入格式 输入在一行中给出2个整数A和B 其中 100 A B 100 其间以空格分
  • 改进排序算法:快速排序(对冒泡排序的改进)

    快速排序的基本思想 通过一趟排序将待排序记录分割成独立的两部分 其中一部分记录的关键字均比另一部分记录的关键字小 则可分别对这两部分记录继续进行排序 以达到整个序列有序的目的 Partition函数的作用 选取当中的一个关键字 将它放到一个
  • 150名打工人被AI判定效率低遭开除,“属实是人工智能,能治工人“

    人工智能 能治工人 惨还是打工人惨 谁能想到 最近又有俄罗斯一家游戏支付服务公司直接用AI算法开除了150名员工 判断依据就是通过后台数据看员工有没有 摸鱼 老板给这批 不幸 的打工人发的解雇邮件是这么写的 您收到这封电子邮件是因为我的大数
  • weex:使用list实现下拉刷新和上拉加载更多,书籍+视频+学习笔记+技能提升资源库

    this refreshing true setTimeout gt this lists 1 2 3 4 5 this refreshing false 2000 onpullingdown event modal toast messa
  • 密码学基础

    密码学基本概念 密码学 Cryptology 是结合数学 计算机科学 电子与通信等学科于一体的交叉学科 研究信息系统安全的科学 起源于保密通信技术 具体来讲 研究信息系统安全保密和认证的一门科学 密码编码学 通过变换消息 对信息编码 使其保
  • 微信小程序上线流程

    1 登陆小程序后台 登陆地址 https mp weixin qq com 2 将项目中测试appid换成正式appid 正式appid 小程序后台 gt 开发管理 gt 开发设置 测试appid 小程序开发工具 gt 右侧详情 gt 基本
  • 软件系统概要设计的三大要素

    概要设计是一个设计师根据用户交互过程和用户需求来形成交互框架和视觉框架的过程 其结果往往以反映交互控件布置 界面元素分组以及界面整体板式的页面框架图的形式来呈现 这是一个在用户研究和设计之间架起桥梁 使用户研究和设计无缝结合 将对用户目标与
  • Python反编译exe文件为py文件

    目的如标题 首先要安装python环境 1 下载pyinstxtractor py文件 地址 链接 https pan baidu com s 1PwQim8B8yau5 MWgKzTKeg pwd 2023 提取码 2023 2 将pyi
  • linux-三剑客(sed、awk、grep)

    三剑客sed awk grep 三剑客与正则表达式是什么关系呢 正则表达式 grep 文本过滤工具 sed 操作 过滤和转换文本内容的强大工具 组合多个表达式 引用 定界符 命令中字符 在sed中作为定界符使用 也可以使用任意的定界符 se
  • 小程序canvas上绘制图片真机不显示

    小程序在画布上绘制图片时真机不显示 分析 小程序的画布不能绘制网络图片 所以需要wx downloadFile 或者wx getImageInfo 方法把网络图片加载到本地再进行绘制 使用wx downloadFile获取到图片的临时路径
  • wireshark 抓取 https

    背景介绍 首先 https双向加密的 如果需要解密数据 除非知道 客户端 服务器 任何一方私钥 否则无法解密 常用手段 基于中间人攻击抓包 使用fiddler 或 charles 实现的是中间人代理 将客户端私钥改为 fiddler 或 c
  • Roslyn介绍

    介绍 一般来说 编译器是一个黑箱 源代码从一端进入 然后箱子中发生一些奇妙的变化 最后从另一端出来目标文件或程序集 编译器施展它们的魔法 它们必须对所处理的代码进行深入的理解 不过相关知识不是每个人都需要知道 除了实现编译器的大法师 因此在
  • 李宏毅机器学习:self-attention(自注意力机制)和transformer及其变形

    目录 self attention self attention的输入 文字处理领域 语音领域 图 自注意力机制的输出 输出序列长度与输入序列相同 输出序列长度为1 模型决定输出序列长度 Self attention 原理 self att
  • codeforces Epic Game 题解

    Simon and Antisimon play a game Initially each player receives one fixed positive integer that doesn t change throughout
  • MOT学习 - 卡尔曼滤波

    参考资料 https www bzarg com p how a kalman filter works in pictures 协方差矩阵 https youzipi blog csdn net article details 48788