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_;
(三)核心函数处理流程
1、Predict函数
该函数与UKF标准算法基本相同。利用预测函数g更新状态变量x及其协方差。具体到SLAM场景下,一般说来,预测函数是基于IMU传感器感知数据或者机器人的移动执行指令,来更新Lidar的位姿。
(1)检查协方差是否为对称正定矩阵,如果不是,则退出,否则计算状态变量x的均值,协方差的平方根,这一步是计算复杂度最高的一步。
(2)基于均值,协方差平方根构造2N+1个Sigma点集,N为状态变量x的维度:
(3)对Sigma点集中每个点执行非线性预测函数g的变换,计算其均值及协方差,并确认协方差为对称矩阵。预测函数仅计算Translation之和,不计算方向角之和,因此在从状态变量x估计Lidar位姿时需要在方向角上乘以IMU估计并维护的方向角。
(4)协方差加上原始协方差,作为预测变量的协方差,均值作为预测变量的均值。
以上步骤又称为UT变换。
2、Observe函数
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的变换,并计算变换后Sigma点集的均值作为观测变量的均值,及其协方差,并确认协方差为对称矩阵。协方差加上观测方程的高斯噪声协方差作为观测变量的协方差。在cartographer中,观测函数h的定义参见PoseTracker::AddPoseObservation函数。
(4)计算预测变量与观测变量之间的协方差。
(5)计算Kalman增益,基于Kalman增益更新经过观测过程后修正的系统状态变量x的均值及其协方差。
(四)背后的核心算法
见百度文库《UKF滤波算法》,网址为http://wenku.baidu.com/link?url=er-Uo_5unEZGIcyg14wzZydaB5cqaUE-yAQddxCC7rS_rBtBBtsFgtVkVETRWZTs30B3bYkffqGaOzquxRT-MKFd3yibcHMfhs0BKtjjOCy。
需要带有完整公式的PDF格式内容,请E-mail:huangkui@lbsense.com
Google开源SLAM软件cartographer中使用的UKF滤波器解析的更多相关文章
- GitHub 上优秀的开源SLAM repo (更新中)
GitHub 上优秀的开源SLAM repo (更新中) 欢迎 watch/star/fork 我们的 GitHub 仓库: Awesome-SLAM, 或者follow 项目的主页:Awesome- ...
- 开源SLAM
GitHub 上优秀的开源SLAM repo (更新中):https://www.jianshu.com/p/464ca0d0c254 当前的开源SLAM方案:https://www.cnblogs. ...
- Google 开源技术protobuf
http://blog.csdn.net/hguisu/article/details/20721109#0-tsina-1-1601-397232819ff9a47a7b7e80a40613cfe1 ...
- 人工智能系统Google开源的TensorFlow官方文档中文版
人工智能系统Google开源的TensorFlow官方文档中文版 2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,机器学习作为人工智能的一种类型,可以让软件根据大量的 ...
- MySQL全世界最流行的开源数据库软件
誉天全国首推全球市场占有率第二的数据库——MySQL培训课程,阿里巴巴.新浪等知名企业正在使用MySQL数据库系统,而这方面的人才需求也是供不应求,誉天作为国内2014年首批ORACLE官方授权MyS ...
- [转] Google 开源 iOS 应用测试工具:EarlGrey
Google 开源 iOS 应用测试工具:EarlGrey oschina 发布于: 2016年02月18日 (3评) 分享到: 收藏 +53 3月19日,深圳源创会火热报名中,go>&g ...
- 推荐优秀的开源GIS软件
推荐优秀的开源GIS软件(以后会补充) 从GIS入门到现在,我已经接触不少优秀的GIS软件,这里列出我使用过优秀的开源GIS软件. 桌面GIS软件: Qgis(基于Qt使用C++开发的跨平台桌面软件, ...
- puppet开源的软件自动化配置和部署工具——本质就是CS,服务端统一管理配置
1. 概述 puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署,如google利用p ...
- 开源GIS软件 2
Android上的导航软件 AndNav AndNav 是一款 Android 手机上的 GPS导航软件(非开源).软件支持GPS定位信息,目的地查询,道路建议管理,导航提示等功能,十分强大的一款软件 ...
随机推荐
- iOS中的__typeof与typeof
做SDK开发引入AFNetworking那么多的文件不太合适,所以这几天在精简AFNetworking,并共享中github上,https://github.com/yjh4866/Simplifie ...
- [CC]DgmOctree—执行Cell遍历和单元计算
DgmOctree类的executeFunctionForAllCellsAtLevel和executeFunctionForAllCellsStartingAtLevel方法通过回调函数octree ...
- javascript数据结构和算法
一.栈 javascript实现栈的数据结构(借助javascript数组原生的方法即可) //使用javascript来实现栈的数据结构 var Stack={ //不需要外界传参进行初始化,完全可 ...
- Angular动态编译Html
//取得scope,有时可以使用this var scope=angular.element(this).scope(); var el= $compile(html)(scope); //加入到Do ...
- Git(分布式版本控制系统)在Windows下的使用-将代码托管到开源中国(oschina)
一.Git是什么? Git --- The stupid content tracker, 傻瓜内容跟踪器.Git是目前世界上最先进的分布式版本控制系统. 二.SVN与Git的最主要的区别? ...
- windows远程控制ubuntu---基于ssh
要实现windows下连接ubuntu需要安装以下软件: 1. windows下安装winSCP 2. Ubuntu下安装OpenSSH Server 可以使用命令行安装openSSH Server: ...
- Liunx下的系统负荷
uptime命令回显中的load average所表示的意思和w命令相似,都是表示过去的1分钟.5分钟和15分钟内进程队列中的平均进程数量. 这里需要注意的是load aver ...
- eclipse中Maven创建WEB项目
刚刚学到Maven的时候总是容易忽视到一些创建Maven项目是的步骤, 这里记录笔者熟悉一种,直接创建Maven Project 下面开始吧--- 选择web-app,没得说,然后那些groupID ...
- XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network
XiangBai--[AAAI2017]TextBoxes:A Fast Text Detector with a Single Deep Neural Network 目录 作者和相关链接 方法概括 ...
- MVC3 数据验证用法之密码验证设计思路
描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近在公司用mvc做了一个修改密码 ...