贝叶斯++

开源贝叶斯过滤类

迈克尔·史蒂文斯


贝叶斯滤波

使用过滤类的贝叶斯过滤概述

邮箱:@michael-stevens.de

文档由Doxygen生成

过滤器等级制度
预测模型观察模型

课程文件贝叶斯列表++

项目总结下载

SourceForge徽标 GIT存储库
Bayes++使用促进
同行评审可移植C++源库

贝叶斯滤波是一种用于数据融合的概率技术。该技术将系统的简明数学公式与该系统的观测结果相结合。概率用于表示系统的状态,似然函数用于表示它们之间的关系。在这种形式下,可以应用贝叶斯推理并进一步推导相关概率。请参见维基百科有关的信息概率理论,贝叶斯定理,贝叶斯主义者推断.

对于离散的系统贝叶斯公式结果产生了自然迭代的数据融合解决方案。对于动态系统有一类解,离散的过滤器将系统的观测输出与系统的动态模型相结合。估计器计算每次观测的系统状态估计系统的。卡尔曼滤波等线性估计量是常用的。

Bayes++是C++类的开源库。这些类表示并实现各种各样的数值离散系统贝叶斯滤波算法。班级提供经过测试且一致的数值方法和类层次结构明确表示各种过滤算法和系统模型类型。

简单示例

这是一个非常简单的例子;对于那些从未使用过之前的贝叶斯过滤类。如果你想看看它有多简单就是使用Bayes++然后查看来源.

该示例显示了如何创建两个类。第一个是预测模型,第二个是观测模型。在这个例子中它们表示只有一个状态变量的简单线性问题和恒定的模型噪声。过滤器融合预测结果和观察。

请参阅贝叶斯主义者筛选类有关所用类的描述和贝叶斯++提供的所有三个示例。

编译示例

弗斯特下载和提取物贝叶斯++以及促进库。促进用于提供编译器独立性和通用构建系统。两个增压集管使用库:uBLAS公司对于线性代数,以及随机的,随机的用于PV和QuadCalib示例。可以放置Boost标头相对于Bayes++的任何位置,但如果你遵循这一点,就很容易了结构:

…源目录
贝叶斯++
贝叶斯过滤器
光伏
四重校准
简单
测试
助推_1_55_0
促进

使用Boost Build系统版本2是编译示例。使用b2型(Boost jam)程序将在中构建Bayes++一步到位。您的Boost的下载副本解释了如何获取和安装最新版本Boost Build系统的版本。一切工作都要执行b2型以及安装Boost的位置。
要构建Bayes++和GCC示例,只需执行以下操作:(BayesC++应该是当前目录)

b2工具集=gcc链接=静态cxxflags=-Wno-used-local-typedefs-sBOOST_ROOT=“../boost_1_55_0”

Visual C++的OR执行:

b2工具集=msvc链接=静态-sBOOST_ROOT=“../boost_1_55_0”

通过创建一个build_build.jam(内部_内部_堵塞)中的文件源目录(或以上)或通过将其设置为环境变量。

编译示例和库的位置

这三个示例的可执行文件将放在名为的目录层次结构目标.用于调试的静态库和发布的版本贝叶斯过滤器库被放置在目标/贝叶斯过滤器. The目标目录及其子目录自动创建。

Visual C++解决方案

对于Visual C++2008等,您也可以使用贝叶斯++.sln解决方案和活动配置uBLAS调试.编译器选项必须设置为促进可以找到包含文件。那就是,这个包含路径必须包含Boost的基本目录。这个案子是当地的促进目录。在VC7.1中,您应该这样做通过选择工具/选项/项目/VC++目录选项。

Visual C++7.0需要使用Boost版本1_32_0。Visual C++7.1(或更高版本)需要Boost版本1_33_0(或更晚版本)。

许可

所有Bayes++源代码文件均受许可证的版权保护此处给出的条件。版权声明是麻省理工学院的许可证。这并不限制您可能希望的任何商业用途使用我们的源代码。只要你尊重版权和许可条件、迈克尔·史蒂文斯和澳大利亚中心Field Robotics很乐意为您提供任何您想要的方式。

贝叶斯++贝叶斯过滤库

版权所有(c)200320042005200620120122014 Michael Stevens,版权所有(c)2002迈克尔·史蒂文斯和澳大利亚野外机器人中心

特此免费向任何人授予许可获取此软件和相关文档文件的副本(“软件”),在没有限制,包括但不限于使用、复制、,修改、合并、发布、分发、再授权和/或销售软件,并允许向其提供软件的人员为此,应遵守以下条件:

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

本软件按“原样”提供,不提供任何类型,明示或暗示,包括但不限于适销性保证、特定用途适用性保证以及非侵权。在任何情况下,作者或版权持有人均不得对任何索赔、损害或其他责任负责,无论是由合同、侵权行为或其他原因引起的诉讼与软件的连接或在软件。

SLAM:同步定位和映射

SLAM是Bayesian中最有趣的问题之一过滤。它的结构意味着它无法正确求解不使用随机方法。这是由于映射状态依赖于其他映射状态和本地化状态。这个依赖性也使问题变得复杂,因此是一种简单的方法例如,表示所有相关性不是很容易处理的州数。

Bayes++已经被用来实现各种简单的和更多的高级SLAM解决方案。特别是全面实施FastSLAM已实施。该技术在论文“FastSLAM:同时定位和映射问题”,M.Montemerlo,S.Thrun S,D。Koller,B.Wegbreit,AAAI全国会议记录人工智能2002。

FastSLAM的Bayes++实现和一个非常简单的Kalman(完全相关)SLAM实施作为最近的下载.

Scilab、Matlab、MuPAD

这些数学工具对于可视化特别有用筛选结果。然而,他们都相当慢,而且非常在编程中很容易产生实现非常差的过滤器语言。幸运的是,所有这些工具都提供了用外部程序扩展。提供了接口代码示例在Bayes++GIT存储库中用于Matlab。

便携性

Bayes++只使用ISO标准C++。源代码使用适度提高C++构造。它只能限制使用直接使用C++模板系统。然而,Boost库使用了(尤其是uBLAS)广泛使用模板技术。Boost还包括许多针对编译器缺陷的解决方法。因此,只要稍作改动,Bayes++就可以与任何现代Boost支持的C++编译器。

Bayes++使用以下内容进行测试:合同一般条件4.x、和VisualC++2008

GCC 3.x和GCC 4.x的更高版本也应轻松运行Bayes++。然而,GCC 3.3.0与uBLAS不兼容使用-O2优化生成错误代码。

VisualC++7.1通常需要要使用的/Zm选项,以便它可以编译复杂的头。

发布标准

此版本使用编译器和Boost版本进行验证使用以下测试列出。

  1. 生成系统:与Boost Build版本2兼容。
    成功完成默认生成库和示例。
    已成功完成的生成SLAM系统。

  2. 测试示例:simpleExample、PV、QuadCalib
    编译调试和发布版本(使用Boost Build版本2):-无错误并且没有警告。
    执行输出:-与预期相同参考结果。

  3. 数值测试:rtheta-距离角观测器。
    A类非线性距离角观测器测试。观察者以2移动维状态空间。运动预测使用线性加性噪声模型。这两种状态在模型和加性噪声。固定目标的距离和角度为观察。放置目标时,间断角为观察。
    状态和观测值都有额外的非观察到的(奇异)状态。模型尺寸、联轴器参数和模型类型可以根据附加测试而变化。所有方案对模型进行了5次迭代测试。SIR方案是用1000个样本进行测试。
    因为不同的数字实现结果在计划。因此,测试需要:
    回归测试:-与前一个方案相比,任何方案的输出都发生了变化释放。
    一致性测试:-的输出比较方案对知道会产生数值上类似的结果。

  4. SLAM测试:testFastSLAM
    一致性测试:-比较使用Kalman SLAM获得1000000个样本的FastSLAM结果。状态偏差和协方差预计约为1/1000。

常见问题解答

在Bayes++常见问题解答中回答了问题

翻译

这篇文章被翻译成塞尔维亚-克罗地亚语Jovana Milutinovich的语言极客教育.
A类罗马尼亚语翻译由提供科学博客

Bayes++2017.3-1的新增功能

使用进行测试增压1.63.0一般合同条款-5.4.

提升“random”更改的“normal_distribution”定义更改测试的随机输入。

“rtheta”示例需要带gcc的quadmath库。

Bayes++2014.5-1的新增功能

使用进行测试增压1.55.0一般合同条款第4.8条.

记录b2型要求链接=静态编译示例时的选项。

建议使用cxxflags=-Wno-unused-local-typedefs对于GCC工具集,避免使用GCC 4.8出现大量警告文本。

Bayes++2012.5-1的新增功能

将以前命名为“addative”的所有类重命名为“additive”。

使用进行测试增压1.49.0.

清除源中的注释。

Bayes++2010.8-1的新增功能

清理文档和构建文件,使构建变得容易。

Bayes++2003.8-5的新增功能

支持和要求提升1_33_0.

编译器支持

为其构建和测试Bayes++的编译器列表包括已更新。

Bayes++2003.8-4的新增功能

新文档和支持提升1_32_0.

现在使用最大似然(有偏)估计的定义计算样本协方差。这个估计很简单将样本数除以1/n,而不是1/(n-1)。请参见维基百科中的样本统计.

编译器支持

为其构建和测试Bayes++的编译器列表包括已更新。

贝叶斯++2003.8-3

更正了Boost Build(版本1)的文档和支持。

SLAM已从当前开发版本更新。

编译器支持

GCC 3.4要求两个属于类别名修复了uBLAS(Boost_1_31_0或更早版本)。

贝叶斯++2003.8-2

新的Boost支持

贝叶斯++通过这两种测试增压-1.30.2增压_1_31_0.

Jens Mauer一直在努力增强::随机被接受为未来C++标准库的一部分。为此目的它的界面发生了重大变化。新图书馆现在是Boost_1_31_0的一部分。贝叶斯++示例利用了boost::随机。所以事情进展顺利我添加了一个新的隐藏界面更改的“test/random.hpp”标头。

非常优秀的Boost Build系统版本2最近进步很大。Bayes++使用标准Boost构建构建系统。Bayes++拥有所有必要的“Jamfiles.v2”来使用Boost build系统进行构建。

方案扩展

UD_scheme观测函数具有其数值功能扩展。现在可以使用单数(零方差)协方差矩阵。

Unscented_scheme具有附加函数init_XX()和update_XX()以允许访问Uncented状态表示。

数字修复

中的错误SIR_卡尔曼方案协方差计算具有已修复。此错误也影响了Fast_kalman_SLAM公司实施。对于较小的尺寸,该错误非常严重。

贝叶斯++2003-5

“noalias”赋值

为了提高效率,必须避免创建临时矩阵和矢量副本。除非另有说明,否则uBLAS公司确定是否指定了相同的矩阵或向量变量在赋值操作的左侧和右侧。如果这样的变量看起来确实是一个别名.因为赋值涉及多个元素,即别名的存在要求赋值首先计算临时结果修改了别名变量。

uBLAS公司的默认行为是创建这样一个临时的。如果众所周知,赋值没有别名,这应该避免。以前,这样的优化赋值是用.assign()成员函数。提高代码的可读性我为赋值添加了一个新语法。其中没有别名赋值变量(左值)出现在右侧的表达式中作业的左侧使用:

noalias(左值)=表达式;

这种新语法是实验性的,但可能会成为未来的一部分uBLAS公司释放。目前,该实现引入了支持的编译器的开销很小。这包括GCC 3.2。

贝叶斯++2003-3

过滤器已命名_过滤器,方案已命名_方案

抽象过滤器和数字方案以前都有名称以结尾_过滤器为了简化命名进行了更改,以明确区分什么是两级层次结构。

过滤器位于层次结构的底部。方案总是源自一个或多个滤波器。过滤器表示抽象概念,例如状态表示和模型的统计信息接口。方案是过滤器的具体实现数字详细信息和界面已完成。

作为这一变化的一部分,国家代表性统计数据已完成虚拟基类。此更改旨在允许将多个方案组合在一起(使用多重继承)并分享他们的表现。如果您选择从scheme类派生。的构造函数派生类必须调用虚拟基类的构造函数直接。

添加协方差交集方案

最后CI公司算法已作为方案实现在Bayes++中。CI很有趣,因为它提供了一个较弱但更强大的然后融合传统的基于协方差的方法,如卡尔曼过滤器。它估计状态及其协方差的上限可以是。

实际上只有与CI相关的矩阵代数已包含。CI_filter方案提供了一个虚拟函数用户必须将实际优化算法定义为已使用。

增加了重采样基础设施的重要性

的灵活性SIR_过滤器已经非常改进。一个新班级重要性_采样器已添加。无论何时SIR_过滤器需要重新采样,以及Importance _resampler参数。因此,通过更改此参数,可以使用不同的重采样器。

提供了两种实现。这个标准_采样器这个系统_采样器参见参考出版物进一步讨论这些方法。

间隙矩阵

矩阵接口得到了进一步改进。这些改进需要boost_1_30_0的uBLAS。这个版本有使用uBLAS的实验支持张牙舞爪的矩阵和向量(稀疏、压缩、坐标)。

实验支持使所有Bayes++都使用选定的uBLAS存储类型。检查matSupSub.hpp软件对于需要宏的启用此功能。使用的算法是Bayes++正在升级到使用稀疏类型时性能更好。

不再支持mult_SPD产品。他们被替换了具有prod_ SPD接口。

版权

版权所有(c)2003、2004、2005 Michael Stevens。本文件是Bayes++库的一部分-有关版权,请参阅许可部分许可证详细信息。