Google开源SLAM软件cartographer中使用的UKF滤波器解析

  在Google开源SLAM软件cartographer中,相对《SLAM for dummies》使用了更为复杂、性能更好的Scan匹配与UKF算法,这里简单介绍下cartographer中使用的UKF算法。

  (一)滤波器参数设定

    constexpr static FloatType kAlpha = 1e-3;

    constexpr static FloatType kKappa = 0.;

     constexpr static FloatType kBeta = 2.;

    constexpr static FloatType kLambda = sqr(kAlpha) * (N + kKappa) - N;

     constexpr static FloatType kMeanWeight0 = kLambda / (N + kLambda);

    constexpr static FloatType kCovWeight0 = kLambda / (N + kLambda) + (1. - sqr(kAlpha) + kBeta);

    constexpr static FloatType kMeanWeightI = 1. / (2. * (N + kLambda));

    constexpr static FloatType kCovWeightI = kMeanWeightI;

  (二)关键成员变量

    GaussianDistribution<FloatType, N> belief_;

    const std::function<StateType(const StateType& state, const StateType& delta)>  add_delta_;

    const std::function<StateType(const StateType& origin, const StateType& target)>  compute_delta_;

  (三)核心函数处理流程

  1Predict函数

  该函数与UKF标准算法基本相同。利用预测函数g更新状态变量x及其协方差。具体到SLAM场景下,一般说来,预测函数是基于IMU传感器感知数据或者机器人的移动执行指令,来更新Lidar的位姿。

  (1)检查协方差是否为对称正定矩阵,如果不是,则退出,否则计算状态变量x的均值,协方差的平方根,这一步是计算复杂度最高的一步。

  (2)基于均值,协方差平方根构造2N+1个Sigma点集,N为状态变量x的维度:

  (3)对Sigma点集中每个点进行的均值执行非线性预测函数g的变换,计算其均值及协方差,并确认协方差为对称矩阵。预测函数仅计算Translation之和,不计算方向角之和,因此在从状态变量x估计Lidar位姿时需要在方向角上乘以IMU估计并维护的方向角。

  (4)协方差加上原始协方差,作为预测变量的协方差,均值作为预测变量的均值。

  以上步骤又称为UT变换。

  2Observe函数

  Observe函数总在Predict函数之后调用,利用观测函数h进一步修正状态变量x及其协方差,以及Kalman增益。具体到SLAM场景下,一般说来,观测函数指观测值即Lidar扫描扇区的值与Lidar位姿之间的函数关系。在cartographer中,由于观测值直接使用Scan-Submap匹配修订了Lidar位姿,因此不存在闭合形式的观测函数h。为了解决这个问题,cartographer采用了Scan-Submap匹配之后得到的Lidar位姿修订值与系统状态变量均值的矢量差作为预测函数h。因此,对应的观测过程与标准Kalman滤波有所差别。

  (1)检查协方差是否为对称正定矩阵,如果不是,则退出,否则获得预测变量的均值及协方差。计算协方差的平方根。

  (2)基于均值,协方差平方根构造2N+1个Sigma点集,N为状态变量x的维度:

  (3)对Sigma点集中每个点进行的均值执行非线性观测函数h的变换,得到,计算的均值作为观测变量的均值,及的协方差,并确认为对称矩阵。协方差加上协方差作为观测变量的协方差。在cartographer中,参见PoseTracker::AddPoseObservation函数,观测函数h表示为:,其中表示Scan-Submap匹配得到的位姿,减号表示矢量差(即包含translation差和方位角orientation差)。

  (4)计算预测变量与观测变量之间的协方差。

  (5)计算Kalman增益,基于Kalman增益更新经过观测过程后修正的系统状态变量x的均值及其协方差。

  (四)背后的核心算法

  见百度文库《UKF滤波算法》,网址为http://wenku.baidu.com/link?url=er-Uo_5unEZGIcyg14wzZydaB5cqaUE-yAQddxCC7rS_rBtBBtsFgtVkVETRWZTs30B3bYkffqGaOzquxRT-MKFd3yibcHMfhs0BKtjjOCy。

需要带有完整公式的PDF格式内容,请E-mail:[email protected]

时间: 2024-10-11 01:00:35

Google开源SLAM软件cartographer中使用的UKF滤波器解析的相关文章

Google&#39;s Open Source SLAM Library ---- Cartographer

What is Cartographer? Google announce the open source release of Cartographer, a real-time simultaneous localization and mapping (SLAM) library in 2D and 3D with ROS support, in October 2016. As Robotics Trends said, "Google wants to democratize the

欧盟即将在免费开源软件项目中推行“漏洞赏金”

日前,外媒juliareda记者Julia Reda刊文谈论了欧盟运行的免费和开源软件审计项目(Free and Open Source Software Audit project)--FOSSA.据其介绍,在一些免费软件项目中他们发现了安全漏洞,其中一个问题是这些漏洞则是在开源加密库OpenSSL中发现. 该类型软件之所以被称为库则是因为它为大量其他软件提供了标准功能.由于OpenSSL对于互联网流量的加密也非常重要,因此它对于保护用户个人通信或其在网上购物时的支付细节也息息相关. 这一问题

Google 开源技术protobuf

http://blog.csdn.net/hguisu/article/details/20721109#0-tsina-1-1601-397232819ff9a47a7b7e80a40613cfe1 1.  Protobuf简介 protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML 表示高效短小得多.虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行

开源服务器软件

Java缓存服务器 jmemcached http://www.oschina.net/p/jmemcached jmemcached 是一个Java版的 memcached 缓存服务器,基本上跟 memcached 是兼容的.jmemcached 是使用 Apache MINA 作为无堵塞的网络IO操作,但之后使用Netty作为网络异步实现机制. Web服务器 TornadoTornado web server 是使用Python编写出來的一个极轻量级.高可伸缩性和非阻塞IO的Web服务器软件

开源GIS软件 2

Android上的导航软件 AndNav AndNav 是一款 Android 手机上的 GPS导航软件(非开源).软件支持GPS定位信息,目的地查询,道路建议管理,导航提示等功能,十分强大的一款软件. 开源WebGIS项目 UMN MapServer MapServer,它是美国明尼苏达大学 (University of Minnesota, 简称 UMN)在二十世纪90 年代利用 C语言开发的开源 WebGIS项目. [MapServer简介] 它起源于 UMN和美国国家航空航天局的合作项目

[转] Google 开源 iOS 应用测试工具:EarlGrey

Google 开源 iOS 应用测试工具:EarlGrey oschina 发布于: 2016年02月18日 (3评) 分享到:  收藏 +53 3月19日,深圳源创会火热报名中,go>>>»   Google于今日宣布了开源的EarlGrey软件,以便开发者更轻松地构建和运行“面向iOS apps源码”的用户界面测试(是的,你没看错!)当前托管于GitHub上.遵从开源Apache授权的EarlGrey,由Objective-C编写而成.不过本次发布的重要性在于,Google也确实用的

开源server软件

Java缓存server jmemcached http://www.oschina.net/p/jmemcached jmemcached 是一个Java版的 memcached 缓存server,基本上跟 memcached 是兼容的.jmemcached 是使用 Apache MINA 作为无阻塞的网络IO操作,但之后使用Netty作为网络异步实现机制. Webserver TornadoTornado web server 是使用Python编写出來的一个极轻量级.高可伸缩性和非堵塞IO

推荐优秀的开源GIS软件

推荐优秀的开源GIS软件(以后会补充) 从GIS入门到现在,我已经接触不少优秀的GIS软件,这里列出我使用过优秀的开源GIS软件. 桌面GIS软件: Qgis(基于Qt使用C++开发的跨平台桌面软件,最新版本已经整合了网络分析等GIS常用功能) http://www.qgis.org/ Grass(桌面经典GIS软件,显示引擎使用cario) http://grass.fbk.eu/ 数据采集与表达: OpenStreetMap自发式地理信息采集和表达平台 http://www.openstre

2019开源BI软件排行榜

在这个“拖拖拽拽就能做报表”已经成为所有BI厂商共识的时代,有哪些开源BI软件居于排行榜单的前列呢?作为一个自诩对该行业了如执掌的资深数据从业人员,给各位分享分享2019年主流的开源BI软件排行榜. 1.FineBI 国内做的一流的BI工具,很炫酷,也比较实用.主打的是超大数据量性能和自助式分析2个特点,在功能方面跟Tableau很接近,适用于企业中的技术人员.业务人员和数据分析师,可以完全自主的进行探索式分析,软件在易用性和功能上做的都很不错.帆软自主搭建了实施团队和服务团队,在服务上的优势较