[翻译][学习卡尔曼与贝叶斯滤波器][前言]

[翻译][学习卡尔曼与贝叶斯滤波器——基于Python实践][前言]

开源飞控交流:562983648
项目链接:Github
:这是一个互动式教程,博客只能显示静态页面。需要得到完整功能请下载项目并按照指导运行

这是一本卡尔曼滤波器和贝叶斯滤波器入门教材。这本书使用Jupyter Notebook编写,因此你可以在浏览器中阅读这本书,还可以运行和修改书中的代码并实时查看结果。还有比这更好的学习方法吗/p>

卡尔曼与贝叶斯滤波器

所有传感器都有噪声。这个世界充满了各种我们想要测量和跟踪的数据与事件,但我们并不能依靠传感器来得到完美准确的信息。我车上的GPS显示高度,每次我经过同一个位置,它 告的高度略有不同。如果我使用厨房秤称同一个物体的重量两次,会得到不同的读数。

在简单的情况下,解决方案是显而易见的,如果测量仪器给出的读数只是稍有不同,我可以多读几次然后取其平均值,或者我可以使用更高精度的测量仪器。但是,但传感器噪声很大,或者在某些环境下采集数据比较困难时,我们该怎么做呢们可能想尝试跟踪一架低空飞行器的飞行轨迹,也可能想给无人机设计一个自动驾驶仪,亦或者想确保农场的拖拉机能够毫无遗漏地播种整个田地。我的工作与计算机视觉有关,需要跟踪图像中的运动物体,而计算机视觉算法会产生充满噪声且不太可靠的结果。

这本书教你如何解决这些滤波问题。我使用了许多不同的算法,但它们均基于贝叶斯概率。简单地说,贝叶斯概率根据过去的信息来判断未来可能发生的事。

如果我让你说出我车子现在的方向,你可能会一脸懵逼。你最多只能提供一个介于1到360°之间的数字,那么只有1/360的机会是正确的。现在假设我告诉你,2秒前我车子的航向是243°,而2秒内车子的方向变化不太可能会很大,因此你便能得出一个更精确的预测。你用过去的信息更准确地推断出当前或未来的信息。

这个世界也是充满噪声的。上面的预测有助于你做出更好的估计,但它也会受到噪声的影响。我可能会为了一条狗而突然刹车,或者绕着一个坑洞转弯。路上的强风和结冰是影响我汽车行驶路径的外部因素。在控制相关文献中,我们称这些为噪声,尽管你可能不会这么认为。

关于贝叶斯概率还不止这些,但可能你已经了解其主要概念了。知识是不确定的,我们根据现象的强度来改变我们的置信度。卡尔曼与贝叶斯滤波器将我们对系统如何运行的嘈杂且有限的认知和同样嘈杂且有限的传感器测量结合起来,以得到对系统状态的最优估计。我们的原则是永远不要丢弃信息。

假设我们正在追踪一个物体,传感器告诉我们它突然改变方向了。是真的改变了,还只是传感器数据有噪声得看情况而定,如果这时一架喷气式战斗机,我们会非常倾向于相信它的确发生了一个瞬时机动,而如果这是一辆直线轨道上的货运列车,那我们会降低数据的可信度,同时我们会进一步根据传感器的精度来修正它的置信度。也就是说,置信度取决于我们对正在跟踪的系统的认知程度以及传感器特性。

卡尔曼滤波器最初是由Rudolf Emil Kálmán发明的,用数学上的最优方法来解决这类问题。它最初用于阿波罗登月任务,从那时起,它就被广泛用于各种领域。飞机、潜艇和巡航导弹上都使用了卡尔曼滤波器。它们被华尔街用于跟踪金融市场,还被用于机器人、物联 传感器和实验室仪器中。化工厂用它来控制和监测化学反应,医学成像中用于去除心脏信 中的噪声。在涉及传感器和时间序列数据的应用中,通常都会运用到卡尔曼滤波器或者相似方法。

写这本书的动机

我是一名软件工程师,在航空航天领域工作了近20年,所以我经常会在卡尔曼滤波器上碰壁,但却从未实现过一个,毕竟它们是出了名的困难。这个理论很优美,但是如果你在信 处理、控制理论、概率和统计以及制导和控制理论等方面还没有比较好的训练的话,学习起来就很困难。随着我开始使用计算机视觉来解决跟踪问题,自己来实现卡尔曼滤波器的需求也变得迫切了。

这个领域并不缺少优秀的教科书,如Grewal和Andrew的《Kalman Filtering》。但是,如果不了解一些必要的背景知识,那坐下来直接阅读这些书籍只会让你感到沮丧和厌烦。一般来说,前几章会概述需要数年学习的大学数学课程内容,轻描淡写地让你参考有关微积分的教科书,并在几个简短的段落中展示需要整个学期来学习的结论。它们是高年级本科或研究生课程的教科书,也是研究人员和专业人士的宝贵参考资料,但对于更一般的读者来说,确实学习起来会很困难。引入的数学符 没有注释,不同的文档中可能会使用不同的单词和变量名来表示同一个概念,并且这些书中几乎没有实例或解决一些实际问题。我经常发现自己能看懂每一个单词并了解那些数学定义,却完全不能理解这些单词和数学公式试图描述的真实世界现象是什么,我会反复思考:“但这些是什么意思呢。以下是曾经让我困惑的典型例子:
x ^ k = Φ k x ^ k ? 1 + G k u k ? 1 + K k [ z k ? H Φ k x ^ k ? 1 ? H G k u k ? 1 ] P k ∣ k = ( I ? K k H k ) cov ( x k ? x ^ k ∣ k ? 1 ) ( I ? K k H k ) T + K k cov ( v k ) K k T hat{x}_{k} = Phi_{k}hat{x}_{k-1} + G_k u_{k-1} + K_k [z_k – H Phi_{k} hat{x}_{k-1} – H G_k u_{k-1}] \ mathbf{P}_{kmid k} = (I – mathbf{K}_k mathbf{H}_{k})textrm{cov}(mathbf{x}_k – hat{mathbf{x}}_{kmid k-1})(I – mathbf{K}_k mathbf{H}_{k})^{text{T}} + mathbf{K}_ktextrm{cov}(mathbf{v}_k )mathbf{K}_k^{text{T}} x^k?=Φk?x^k?1?+Gk?uk?1?+Kk?[zk??HΦk?x^k?1??HGk?uk?1?]Pkk?=(I?Kk?Hk?)cov(xk??x^kk?1?)(I?Kk?Hk?)T+Kk?cov(vk?)KkT?

然而,当我终于理解卡尔曼滤波器后,才意识到这些基本概念是非常简单的。如果你熟悉一些简单的概率定理,并且对如何融合不确定事物有一定直觉,那便能理解卡尔曼滤波器的概念。卡尔曼滤波器以困难著称,但是抛弃很多专业术语后,我愈发清晰看到它本质和数学上的美丽,于是我爱上了它。

我写这本书便是为了满足所有上述需求。但如果你在设计军用雷达,这并不能成为你唯一的参考资料,你更需要的是去一所很棒的STEM学校攻读硕士或博士学位。这本书提供给那些需要滤波或平滑一些数据的爱好者,好奇者和正在工作的工程师。如果你是一个爱好者,这本书应该能提供你所需要的一切。如果你想深入专研卡尔曼滤波器,那你还需要学习更多,我意图介绍足够的概念和数学基础,让你更容易去学习教科书和论文。

这本书是交互式的,虽然你也可以把它当成静态内容直接在线阅读,但我强烈建议你按照预期来使用它。基于Jupyter Notebook,让我可以在书中任何地方组织文本、数学公式、Python代码和其输出。本书中每一个数据和图表都是由notebook中的Python生成的。想成倍修改某个参数值需要更改参数的值,然后按CTRL-ENTER,便会生成新的图表或者打印输出。

这本书有练习,但也都有答案。我信任你。如果你只是需要一个答案,那就直接阅读答案。而如果你想更深刻理解这些知识,那么在这之前先尝试去实现那些练习吧。因为这本书具有交互性,你可以直接在本书中输入并运行你的答案,而不必要迁移到其它不一样的环境,也不用在开始前导入大量内容。

这本书是免费的。我曾经花了数千美元去购买卡尔曼相关书籍,这对于那些手头拮据的学生来说几乎是不可能的事情。我从诸如Python之类的免费软件和Allen B. Downey [1]的那些免费书籍中获益颇多,是时候回 了。因此,这本书是免费的,它托管在Github的免费服务器上,并且只用到了免费和开源的软件如IPython和MathJax。

在线阅读

GitHub

这本书托管在Github上,你可以通过点击章节名字来阅读任何一章。Github只能静态呈现Jupyter Notebooks,你可以阅读所有内容,但无法运行和修改代码。

这个项目的GitHub链接如下

https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python

binder

binder提供notebooks在线交互服务,所以你可以直接在浏览器上修改和运行代码,而不必下载这本书或者安装Jupyter。使用下面的链接在binder上获取这本书:

http://mybinder.org/repo/rlabbe/Kalman-and-Bayesian-Filters-in-Python

nbviewer

nbviewer 站可以将任何一本Notebook转换为静态格式。我发现它比Github提供的转换器要更好一些,只是用起来有点不太方便。它可以直接接入Github,任何我在Github上的修改都可以被nbviewer所同步。

你可以使用下面的链接在nbviewer上获取这本书:

http://nbviewer.ipython.org/github/rlabbe/Kalman-and-Bayesian-Filters-in-Python/blob/master/table_of_contents.ipynb

PDF 版本

我会定期通过notebooks生成这本书的一个PDF版本,你可以通过这个链接访问:

https://drive.google.com/file/d/0By_SW19c1BfhSVFzNHc0SjduNzg/viewsp=sharing

下载和运行这本书

不管怎样,这本书设计成了交互式的,我也建议以这种形式来使用它。做成这样花费了一番功夫,但这是很值得的。如果你在电脑上安装了IPython和一些支持库,那可以把这本书clone下来,你将能够自己运行书中的所有代码。你可以执行实验,观察滤波器对于不同数据的表现,等等。我发现这种即时反馈不仅很重要而且会让人充满动力,你不用去怀疑“如果会怎样”,放手去试吧!

安装说明见安装附录,见此处。

安装软件后,你可以进入到安装目录并在终端中通过命令行运行juptyer notebook

jupyter notebook

它将会打开一个浏览器窗口,显示根目录的内容。这本书分成许多章,每个章节都命名为xx-name.ipynb,其中xx是章节 ,.ipynb是Notebook文件的扩展名。要阅读第二章,请单击第二章的链接,浏览器将会打开那个子目录。每个子目录中将会有一个或多个IPython Notebooks(所有notebooks都有.ipynb文件扩展名)。章节内容在notebook中,与章节名称同名。每章中还会有许多实现相关功能如生成显示动画的supporting notebooks,每个用户没必要去阅读这些,但如果你对于动画是如何制作的比较好奇,那就看一眼吧。

诚然,对于一本书来说这个界面过于繁琐。我正在跟随其它几个项目的脚步,这些

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月22日
下一篇 2022年9月22日

相关推荐