世界上应用最广泛的算法之一的卡尔曼滤波算法原理-从放弃到精通-无人机/机器人应用

2023-05-16

导读:随着传感技术、机器人、自动驾驶以及航空航天等技术的不断发展,对控制系统的精度及稳定性的要求也越来越高。卡尔曼滤波作为一种状态最优估计的方法,其应用也越来越普遍,如在无人机、机器人等领域均得到了广泛应用。


首先我们来了解一下卡尔曼!全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。 

卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)

卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。

数据滤波是去除噪声还原真实数据的一种数据处理技术,Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态。由于它便于计算机编程实现,并能够对现场采集的数据进行实时的更新和处理,Kalman滤波是目前应用最为广泛的滤波方法,在通信,导航,制导与控制等多领域得到了较好的应用。

 性质

①卡尔曼滤波是一个算法,它适用于线性、离散和有限维系统。每一个有外部变量的自回归移动平均系统(ARMAX)或可用有理传递函数表示的系统都可以转换成用状态空间表示的系统,从而能用卡尔曼滤波进行计算。

②任何一组观测数据都无助于消除x(t)的确定性。增益K(t)也同样地与观测数据无关。

③当观测数据和状态联合服从高斯分布时用卡尔曼递归公式计算得到的是高斯随机变量的条件均值和条件方差,从而卡尔曼滤波公式给出了计算状态的条件概率密度的更新过程线性最小方差估计,也就是最小方差估计。

形式

卡尔曼滤波已经有很多不同的实现,卡尔曼最初提出的形式一般称为简单卡尔曼滤波器。除此以外,还有施密特扩展滤波器、信息滤波器以及很多Bierman, Thornton 开发的平方根滤波器的变种。最常见的卡尔曼滤波器是锁相环,它在收音机、计算机和几乎任何视频或通讯设备中广泛存在。

应用

在雷达中,人们感兴趣的是跟踪目标,但目标的位置、速度、加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。

扩展卡尔曼滤波(EXTEND KALMAN FILTER, EKF)

扩展卡尔曼滤波器

是由kalman filter考虑时间非线性的动态系统,常应用于目标跟踪系统。

 状态估计

状态估计是卡尔曼滤波的重要组成部分。一般来说,根据观测数据对随机量进行定量推断就是估计问题,特别是对动态行为的状态估计,它能实现实时运行状态的估计和预测功能。比如对飞行器状态估计。状态估计对于了解和控制一个系统具有重要意义,所应用的方法属于统计学中的估计理论。最常用的是最小二乘估计,线性最小方差估计、最小方差估计、递推最小二乘估计等。其他如风险准则的贝叶斯估计、最大似然估计、随机逼近等方法也都有应用。

状态量

受噪声干扰的状态量是个随机量,不可能测得精确值,但可对它进行一系列观测,并依据一组观测值,按某种统计观点对它进行估计。使估计值尽可能准确地接近真实值,这就是最优估计。真实值与估计值之差称为估计误差。若估计值的数学期望与真实值相等,这种估计称为无偏估计。卡尔曼提出的递推最优估计理论,采用状态空间描述法,在算法采用递推形式,卡尔曼滤波能处理多维和非平稳的随机过程。 

假设我们要研究的对象是一个房间的温度。根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。假设你对你的经验不是100%的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。我们也把这些偏差看成是高斯白噪声。

卡尔曼滤波器的通俗举例

好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。
假如我们要估算k时刻的是实际温度值。首先你要根据k-1时刻的温度值,来预测k时刻的温度。因为你相信温度是恒定的,所以你会得到k时刻的温度预测值是跟k-1时刻一样的,假设是23度,同时该值的高斯噪声的偏差是5度(5是这样得到的:如果k-1时刻估算出的最优温度值的偏差是3,你对自己预测的不确定度是4度,他们平方相加再开方,就是5)。然后,你从温度计那里得到了k时刻的温度值,假设是25度,同时该值的偏差是4度。


由于我们用于估算k时刻的实际温度有两个温度值,分别是23度和25度。究竟实际温度是多少呢?相信自己还是相信温度计呢?究竟相信谁多一点,我们可以用他们的covariance来判断。因为Kg^2=5^2/(5^2+4^2),所以Kg=0.78,我们可以估算出k时刻的实际温度值是:23+0.78*(25-23)=24.56度。可以看出,因为温度计的covariance比较小(比较相信温度计),所以估算出的最优温度值偏向温度计的值。


现在我们已经得到k时刻的最优温度值了,下一步就是要进入k+1时刻,进行新的最优估算。到现在为止,好像还没看到什么自回归的东西出现。对了,在进入k+1时刻之前,我们还要算出k时刻那个最优值(24.56度)的偏差。算法如下:((1-Kg)*5^2)^0.5=2.35。这里的5就是上面的k时刻你预测的那个23度温度值的偏差,得出的2.35就是进入k+1时刻以后k时刻估算出的最优温度值的偏差(对应于上面的3)。


就是这样,卡尔曼滤波器就不断的把covariance递归,从而估算出最优的温度值。他运行的很快,而且它只保留了上一时刻的covariance。上面的Kg,就是卡尔曼增益(Kalman Gain)。他可以随不同的时刻而改变他自己的值,是不是很神奇!


最后

需要卡尔曼滤波学习Z料及论文的可以加我小助理微信

 

小编整理了网上的各种人工智能学习资料,一共500G,有需要的可以加微

 ❶ 人工智能课程及项目(含有课件源码)能写进简历的企业级项目实战

❷人工智能优质必看书籍(“圣经”花书等)+人工智能论文合集

❸ 国内外知名大佬教程及配套zi料(女神李飞飞、吴恩达、李沐)

❹ 超详解人工智能学习路+系统学习zi料

❺优质人工智能资源网站整理 、人工智能行业报告

如果对大家有帮助的话记得点赞收藏呀~爱你们~ 

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

世界上应用最广泛的算法之一的卡尔曼滤波算法原理-从放弃到精通-无人机/机器人应用 的相关文章

  • windows下开启Qemu串口调试

    1 EDKII 包编译 如果要在 windows 下启用串口信息打印 xff0c 需要在 build 时加 D DEBUG ON SERIAL PORT 选项 需要注意的是 xff0c 在 target txt 中 TARGET 只能是 D
  • 关于深度学习主机的一些选配问题

    作为一个深度学习的初学者 xff0c 你可能会遇到这样的问题 xff1a 我该如何训练我自己或者别人的Model xff1f 我该如何配置一台合适的主机 xff1f 目前有哪几种训练模型的方式 xff1f 接下来 xff0c 我将会对此进行
  • FreeRTOS中两个同等级无阻塞打印任务,只有一个能正常打印

    环境 xff1a STM32CubeMX 43 MDK5 printf重定向用的是官方例子 ifdef GNUC With GCC small printf option LD Linker gt Libraries gt Small pr
  • putty 连接Debian linux 报错Connection refused

    ubuntu默认并没有安装ssh服务 xff0c 如果通过ssh链接ubuntu xff0c 需要自己手动安装ssh server 判断是否安装ssh服务 xff0c 可以通过如下命令进行 xff1a xjj 64 xjj desktop
  • python 使用playsound模块出现编码问题。

    Error 259 for command play sound zhou mp3 wait 驱动程序无法识别指定的命令参数 Error 263 for command close sound zhou mp3 指定的设备未打开 xff0c
  • C/C++ 编程推荐学习顺序和书籍

    自学或者学习C C 43 43 编程不知道怎么办 xff1f 那么恭喜你看到本文 xff0c 本文将会为你提供C C 43 43 编程的学习书籍顺序推荐 xff0c 希望对大家有帮助 xff01 C C 43 43 语言基础入门书籍 xff
  • Android Studio 控制台中文乱码,解决方案都在这里了,完美解决

    前言 Android Studio 如果不进行配置的话 xff0c 运行程序时控制台中文乱码问题会非常严重 xff0c 甚至影响我们对信息的获取和程序的跟踪 通过历年的开发经验 xff0c 在本文中我总结出四点用于解决控制台中文乱码问题的方
  • 【C/C++】中的__FILE__、__LINE__、#line、__func__关键字(预定义宏)

    c 43 43 11预先定义了一些标识符 xff0c 其实也就是宏 现在简单说几个 xff1a 1 FILE 用于指示本行语句所在源文件的文件名 xff0c 如下 xff08 test c xff09 xff1a include lt st
  • 视觉SLAM入门十四讲

    视觉SLAM入门十四讲 写在前面的话什么是视觉SLAM视觉SLAM中所使用的摄像头传感器单目摄像头双目摄像头深度摄像头 经典视觉SLAM框架 写在前面的话 考研期间迷上了SLAM xff0c 买来了高翔 张涛等著的 视觉SLAM十四讲 从理
  • px4源码编译指南

    px4源码编译指南 强烈推荐大家去看官网的英文文档 xff0c 国内的博客杂七杂八 xff0c 官网的中文也很久没有更新 xff0c 这几天自己踩了很多坑 xff0c 写个教程希望能帮助到大家 xff08 本文选用平台是pixhawk1 1
  • 敏捷开发:做一个合格的Scrum Master

    图片来源于网络 Scrum Master Beauty and Beast 在Scrum敏捷开发中有三种主要的角色 xff1a Product Owner xff08 产品负责人 xff0c 简称 34 PO 34 xff09 Scrum
  • 嵌入式软件:通过串口进行调试的一些思考和实践

    最近的工作还是改那坨代码 维护这摊东西也快要2年了 xff0c 好几次想重构它 xff0c 顺便整理一下 xff0c 不过我还是缺乏那种毅力 在这段时间里我还加了一些功能模块 xff0c 估计如果以后有新人接手这摊东西 xff0c 会抱怨这
  • 串口调试助手没有显示

    用cubeMX生成工程之后 xff0c 笔者写了下面两句话 xff08 向串口发送一个字符串 xff09 xff1a 但是 xff0c 打开调试工具怎么也接受不到数据 xff0c 魔术棒里面的 芯片型号 xff0c 调试 xff08 J L
  • vscode使用gitee

    vscode使用gitee 首先选择文件夹右键用vscode打开 然后打开vscode的终端 xff1a 在终端输入命令 xff1a xff08 每行命令输入完成之后记得敲回车 xff09 xff1a git init然后敲回车就有 xff
  • 深度揭秘阿里(蚂蚁金服)技术面试流程!附前期准备,学习方向

    上半年公司的项目很闲 xff0c 很多人觉得没意思陆续走了 xff0c 我考虑到自己的发展 xff0c 从6月底开始面 xff0c 面到7月底 xff0c 三十家公司 我从不打没准备的仗 xff0c 我是一个喜欢总结经验的人 xff0c 每
  • Git 中submodule的使用,终于有人说明白了

    背景 面对比较复杂的项目 xff0c 我们有可能会将代码根据功能拆解成不同的子模块 主项目对子模块有依赖关系 xff0c 却又并不关心子模块的内部开发流程细节 这种情况下 xff0c 通常不会把所有源码都放在同一个 Git 仓库中 有一种比
  • git 工具GitEye使用

    二 xff1a 签入 右键commit 可以选择需要签入的 xff0c 要加入注释才能签入 一 xff1a 比较
  • ROS笔记十(基于Python、Kinetic):rviz基础——快速配置并渲染点云和摄像机图像数据

    前言 xff1a rviz xff08 ROS visualization xff09 xff1a 用于机器人 传感器和算法的通用3D可视化系统 rviz能够绘制多种类型的数据流 特别是三维的数据 在ROS中所有类型的数据都被关联到一个参考
  • java面试必看书单

    编程之法 https legacy gitbook com book wizardforcel the art of programming by july details 白话经典算法之七大排序 链接 xff1a https pan ba
  • Java基础 - Integer和int的区别

    一 int和Integer的区别 两者的区别主要体现在以下几个方面 xff1a 1 数据类型不同 xff1a int 是基础数据类型 xff0c 而 Integer 是包装数据类型 xff1b 2 默认值不同 xff1a int 的默认值是

随机推荐

  • Lua + GraphicsMagick安装

    Lua 43 GraphicsMagick安装 图片的实时缩放功能是Nginx调用Lua脚本 xff0c Lua脚本在FastDFS中下载对应的图片保存到本地 xff0c 然后Lua调用GraphicsMagick实现图片的缩放功能 1 安
  • 零基础应该选择学习 C、C++、Java、python、web前端、C#、PHP、Linux选哪个编程语言好呢?

    众多的语言 xff0c 到底哪一门才是适合我呢 xff1f 小白 xff1a 大佬 xff0c 大佬 xff0c 编程语言也太多了 xff0c 到底我应该选择哪一种呢 xff1f 大佬 xff1a 首先呢 xff0c 我们先对常见的编程语言
  • 如何看英文技术文档

    https www jianshu com p af7d39cac6b8
  • 从工具的奴隶到工具的主人

    摘要 xff1a 我们每个人都是工具的奴隶 随着我们的学习 xff0c 我们不断的加深自己对工具的认识 xff0c 从而从它们里面解脱出来 现在我就来说一下我作为各种工具的奴隶 xff0c 以及逐渐摆脱它们的思想控制的历史吧 当我高中毕业进
  • 程序员,这四个学习建议值得收藏

    大家好 xff0c 我是本周的值班编辑 江南一点雨 xff0c 本周将由我为大家排版并送出技术干货 xff0c 大家可以在公众号后台回复 springboot xff0c 获取最新版 Spring Boot2 1 6 视频教程试看 在我看来
  • 底层原理解析

    目录 HashMap底层原理 xff1a ConcurrentHashMap 底层原理 HashMap底层原理 xff1a 1 HashMap概述 xff1a HashMap是一个散列桶 xff08 数组和链表 xff09 xff0c 它存
  • Java ServerSocket & Socket 实现 单组【客户端⇄服务端】双工通信(双向通信)

    Server java 服务器端开启服务 package com example socket service import lombok SneakyThrows import java net ServerSocket import j
  • docker搭建容器过程

    docker 环境创建 配置apt国内镜像源 备份源 span class token function cp span etc apt sources list etc apt sources list backup span class
  • FreeRTOS进程间通信-消息队列

    消息队列是进程间的一种通信机制 xff0c 实际项目运用很多 1 什么是消息队列 xff1f 2 消息队列API函数 3 在进程间通信使用消息队列 4 在中断中使用消息队列 1 1 消息队列是什么 xff1f 消息队列是realtime o
  • 三十岁了从零开始学python还有前途吗?很迷茫啊

    对于学习这件事 xff0c 我一直认为没有时间先后 xff0c 啥时候学习都不晚 xff0c 不管你现在年龄多大 xff0c 只要有心想学习 xff0c 一切都好说 首先 xff0c 你要学的python是属于技术类的知识 xff0c 对于
  • SpringBoot:使用Caffeine实现缓存

    在本博客中 xff0c 我们将探讨如何使用Spring的缓存框架向任何Spring Boot应用程序添加基本缓存支持 xff0c 如果没有正确实现 xff0c 还将探讨缓存的一些问题 最后但并非最不重要的一点是 xff0c 我们将看几个在真
  • 树莓派结合PIXHAWK飞控实现四轴双目视觉避障

    树莓派结合Pixhawk飞控实现四轴双目视觉避障 灰信网 xff08 软件开发博客聚合 xff09 无人机双目视觉避障的实现 本文将介绍如何使用树莓派结合PIX飞控实现无人机双目视觉避障的功能 主要硬件 我们以双目摄像头 43 树莓派 43
  • ::在c++中什么意思

    好多年没有用c 43 43 了 xff0c 今天在研究深度学习部署框架ncnn xff0c 看到这个突然想不起来了 xff0c 就查了一下资料 34 34 在C 43 43 中表示作用域 xff0c 和所属关系 34 34 是运算符中等级最
  • 基于Jetson Nano嵌入式平台的YOLOV3-tiny模型部署

    1 嵌入式平台简介 嵌入式是指可以嵌入设备或装置的特殊计算机系统 一般来说 xff0c 具有数字接口的设备都有嵌入式系统 xff0c 如手机 车载电脑 智能手表等 xff0c 而嵌入式人工智能则是使人工智能算法能够在终端设备上运行的技术概念
  • 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航 转载

    原文 xff1a 机器人操作系统ROS 深度相机 43 激光雷达实现vSLAM建图与导航 wx5d23599e462fa的技术博客 51CTO博客 这次将带大家学习如何使用深度相机实现机器人的视觉SLAM建图及导航 目录 一 概述 1 深度
  • 程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩

    先点赞后观看 养成好习惯 一 写在前面 xff1a 飞扬的小鸟 是一款曾经比较火热的小游戏 语言 Java工具 IntelliJ IDEA xff0c JDK 16 二效果图 xff1a 代码部分 代码如下仅供参考 可以直接拿去复制粘贴 p
  • 深入理解Java枚举类型(enum)

    版权申明 未经博主同意 xff0c 谢绝转载 xff01 xff08 请尊重原创 xff0c 博主保留追究权 xff09 http blog csdn net javazejian article details 71333103 出自 z
  • 秋招面试上岸经验分享

    学弟学妹们好 xff0c 我是18级14班的刘文豪 xff0c 很开心能在这里给大家分享一些我最近的面试经历 从21年6月28号第一场面试金山西山居 xff0c 到21年11月29号最后一场面试理想汽车 xff0c 大大小小的面试自己也经历
  • JT905实现(一):协议的简单讲解

    目录 背景 主线 协议 1 各方关系 2 协议简介 背景 最近在做905协议 xff0c 本想着靠着度娘扒拉下代码参考一下 xff0c 发现资源非常有限 xff0c 于是就只有自己动手实现了一番 xff0c 也踩了几个坑 本着开源共享的精神
  • 世界上应用最广泛的算法之一的卡尔曼滤波算法原理-从放弃到精通-无人机/机器人应用

    导读 xff1a 随着传感技术 机器人 自动驾驶以及航空航天等技术的不断发展 xff0c 对控制系统的精度及稳定性的要求也越来越高 卡尔曼滤波作为一种状态最优估计的方法 xff0c 其应用也越来越普遍 xff0c 如在无人机 机器人等领域均