Professional Documents
Culture Documents
还 天 读的习惯吗?
愿意与我成为书友吗?
国 当下 行书
各图书 量 行 书
量工具书
我 受益终生的书
……
量电 版、纸质版书 及音频课程
还有贴心的“ 习 ”服务哦!
微 :shuyou099
内容简介
本书 介 了视觉SLAM(同时 位与 图构建)所需的 本知
识与核心 ,既包 理论 础, 三 空 的刚 运动、非
性优化,又包 计 机视觉的 现, 视图几 、 环检
等。此 ,我 还 了 量的 代码 读 习研究,从 更
这些 。
本书可以 为 SLAM感兴趣的研究人员的 材料,也可以
为SLAM相关的高校本科生 研究生课程 材 用。
未 许可,不得以 方式 制 袭本书之 分 。
版权所有, 权必究。
图书在版编目(CIP)数据
视觉SLAM十 讲:从理论 /高 等著.—北京:电 工业出
版社,2017.3
ISBN 978-7-121-31104-8
I. ① 视 … II. ① 高 … III. ① 人 工 智 -视觉 -研究
IV.①TP18
中国版本图书馆CIP 核字(2017)第053910号
: 柳
责 :白
印 刷:北京 蜂印刷厂
装 订:北京 蜂印刷厂
出版发行:电 工业出版社
北京市 区万 173 :100036
开 本:720×1000 1/16 印张:25 字 :560千字
版 次:2017年3月第1版
印 次:2017年3月第1次印刷
价:75.00
凡所购买电 工业出版社图书有 问题,请向购买书店调 。
书店售 ,请与本社发行 , 及 购 电 话 : ( 010 )
88254888,88258888。
质量 诉请发 件至zlts@phei.com.cn,盗版 权举报请发 件
至dbqq@phei.com.cn。
本书咨询 方式:(010)51260888-819faq@phei.com.cn。
阅读须知
本书图片
为 方 ,书中介 图片相关 时直 用了 应的 彩名
称, 应 纸面上即 。此 , 分图片可 需要 观 ,纸面
上无 呈现应有 果。为此,书中图片 博 视 方 站 下
。
读者服务
松 册成为博 视 社区用 (www.broadview.com.cn),您
即可享受以下服务。
•下载资源: 本书所 的示 代码及资 件 可 下 资
下 。
•提交勘误: 您 书中 的修 意见可 交勘误 交,
被 , 获赠博 视 社区积分( 您购买电 书时,积分可用
来 相应 额)。
•与作者交流 : 页面下方读 评论 留下您的疑问 观 ,
与 和其 读 一同 习交 。
页面 口:http://www.broadview.com.cn/31104
目 录
介
读须知
第1讲 预 知识
1.1 本书讲什么
1.2 用本书
1.2.1 组织方式
1.2.2 代码
1.2.3 面向的读
1.3 风格约
1.4 致谢和 明
第2讲 识SLAM
2.1 引 : 萝卜的
2.2 典视觉SLAM框架
2.2.1 视觉里程计
2.2.2 后端优化
2.2.3 环检
2.2.4 建图
2.3 SLAM问题的 表
2.4 : 程 础
2.4.1 安装Linux操
2.4.2 Hello SLAM
2.4.3 用cmake
2.4.4 用库
2.4.5 用IDE
第3讲 三 空 刚 运动
3.1 旋转矩阵
3.1.1 和向量,坐标
3.1.2 坐标 的 变
3.1.3 变 矩阵与齐次坐标
3.2 :Eigen
3.3 旋转向量和 角
3.3.1 旋转向量
3.3.2 角
3.4
3.4.1 的 义
3.4.2 的运
3.4.3 用 表示旋转
3.4.4 旋转矩阵的转
3.5 *相 、 、 影变
3.6 :Eigen几
3.7 可视化 示
第4讲 李 与李代
4.1 李 与李代 础
4.1.1
4.1.2 李代 的引出
4.1.3 李代 的 义
4.1.4 李代 so(3)
4.1.5 李代 se(3)
4.2 与 映
4.2.1 SO(3)上的 映
4.2.2 SE(3)上的 映
4.3 李代 导与 动
4.3.1 BCH公式与近 形式
4.3.2 SO(3)李代 上的 导
4.3.3 李代 导
4.3.4 动 (左乘)
4.3.5 SE(3)上的李代 导
4.4 :Sophus
4.5 *相 变 与李代
4.6
第5讲 相机与图
5.1 相机
5.1.1 相机
5.1.2 畸变
5.1.3 双目相机
5.1.4 RGB-D相机
5.2 图
5.3 :图 的存取与访问
5.3.1 安装OpenCV
5.3.2 操 OpenCV图
5.4 : 云
第6讲 非 性优化
6.1 态估计问题
6.1.1 最 后验与最
6.1.2 最 二乘的引出
6.2 非 性最 二乘
6.2.1 一阶和二阶梯度
6.2.2 高斯 顿
6.2.3 列 伯格—马夸 方
6.2.4
6.3 :Ceres
6.3.1 Ceres 介
6.3.2 安装Ceres
6.3.3 用Ceres 合曲
6.4 :g2o
6.4.1 图优化理论 介
6.4.2 g2o的 译与安装
6.4.3 用g2o 合曲
6.5
第7讲 视觉里程计1
7.1 征
7.1.1 征
7.1.2 ORB 征
7.1.3 征匹
7.2 : 征 取和匹
7.3 2D-2D: 极几
7.3.1 极约束
7.3.2 本质矩阵
7.3.3 单应矩阵
7.5 三角 量
7.6 :三角 量
7.6.1 三角 量代码
7.6.2 讨论
7.7 3D-2D:PnP
7.7.1 直 性变
7.7.2 P3P
7.7.3 Bundle Adjustment
7.8 : 解PnP
7.8.1 用EPnP 解位
7.8.2 用BA优化
7.9 3D-3D:ICP
7.9.1 SVD方
7.9.2 非 性优化方
7.10 : 解ICP
7.10.1 SVD方
7.10.2 非 性优化方
7.11
第8讲 视觉里程计2
8.1 直 的引出
8.2 光 (OpticalFlow)
8.3 :LK光
8.3.1 用TUM公开 集
8.3.2 用LK光
8.4 直 (DirectMethod)
8.4.1 直 的推导
8.4.2 直 的讨论
8.5 :RGB-D的直
8.5.1 稀疏直
8.5.2 义直 的
8.5.3 用直 估计相机运动
8.5.4 半稠 直
8.5.5 直 的讨论
8.5.6 直 优 总
第9讲 :设计前端
9.1 建VO框架
9.1.1 确 程序框架
9.1.2 确 本 构
9.1.3 Camera
9.1.4 Frame
9.1.5 MapPoint
9.1.6 Map
9.1.7 Con fi g
9.2.1 两两帧的视觉里程计
9.2.2 讨论
9.3 进:优化PnP的 果
9.4 进: 图
9.5
第10讲 后端1
10.1
10.1.1 态估计的 率解
10.1.2 性 和KF
10.1.3 非 性 和EKF
10.1.4 EKF的讨论
10.2 BA与图优化
10.2.1 影 和BA代价
10.2.2 BA的 解
10.2.3 稀疏性和 化
10.2.4 鲁棒核
10.2.5
10.3 :g2o
10.3.1 BA 集
10.3.2 g2o 解BA
10.3.3 解
10.4 :Ceres
10.4.1 Ceres 解BA
10.4.2 解
10.5
第11讲 后端2
11.1 位 图(PoseGraph)
11.1.1 Pose Graph的意义
11.1.2 Pose Graph的优化
11.2 :位 图优化
11.2.1 g2o原生位 图
11.2.3
11.3 * 图优化 步
11.3.1 贝叶斯
11.3.2 图
11.3.3 量 性
11.4 * :gtsam
11.4.1 安装gtsam 4.0
11.4.2 位 图优化
第12讲 环检
12.1 环检
12.1.1 环检 的意义
12.1.2 方
12.1.3 确率和召 率
12.2 词袋
12.3 字典
12.3.1 字典的 构
12.3.2 :创建字典
12.4 相 度计
12.4.1 理论 分
12.4.2 :相 度的计
12.5 验分析与评
12.5.1 加字典规
12.5.2 相 性评分的 理
12.5.3 关 帧的 理
12.5.4 检 之后的验证
12.5.5 与机器 习的关
第13讲 建图
13.1
13.2 单目稠 重建
13.2.1 立 视觉
13.2.2 极 与 匹
13.2.3 高斯分布的 度 器
13.3 :单目稠 重建
13.4 验分析与讨论
13.4.1 梯度的问题
13.4.2 度
13.4.3 图 的变
13.4.4 并行化: 率的问题
13.4.5 其 的 进
13.5 RGB-D稠 建图
13.5.1 : 云 图
13.5.2 八叉树 图
13.5.3 :八叉树 图
13.6 *TSDF 图和Fusion 列
13.7
第14讲 SLAM:现 与未来
14.1 当前的开 方案
14.1.1 MonoSLAM
14.1.2 PTAM
14.1.3 ORB-SLAM
14.1.4 LSD-SLAM
14.1.5 SVO
14.1.6 RTAB-MAP
14.1.7 其
14.2 未来的SLAM话题
14.2.1 视觉+惯性导 SLAM
14.2.2 语义SLAM
14.2.3 SLAM的未来
附录A 高斯分布的
附录B ROS
参 献
第1讲 预备知识
1.1 本书讲什么
这是一本介 视觉SLAM的书,也很可 是第一本以视觉SLAM为主题
的中 书。
么,SLAM是什么?
SLAM 是 Simultaneous Localization and Mapping 的 ,中 译
同时定位与地图构建
“ ”[1] 。 是 传感器 的主 ,没
有环境先验信息 的情 下,于 运动过程中 环境建立 的 ,同时估计
运动
己的 [2]
。 果这里的 感器主要为相机, 称为“视觉
SLAM”。
本书的主题 是视觉SLAM。这里我 刻意 许 个 义 一句话
中,是希望读 有一个 明确的 念。首先,SLAM的目的是解 “
位”与“ 图构建”这两个问题。也 是说,一 要估计 感器 的
位 ,一 要建立周 环 的 。 么怎么解 呢?这需要用 感
器的 息。 感器 以一 形式观 的世界,不过不同 感器观
的方式是不同的。 之所以要 一本书的 去讨论这个问题,是 为
很难—— 是我 希望 、 实时地 没有先验知识
的情 下进行
SLAM。当用相机 为 感器时,我 要 的 是根 一张张连 运动的
图 ( 形成了一 视频),从中推断相机的运动,以及周 环 的
情 。
这 乎是个很直观的问题。我 己走进陌生的环 时不 是这么
的吗?
计 机视觉(ComputerVision)创立之 ,人 想象着有朝一
日计 机 和人一样, 过眼睛去观 世界,理解周 的 , 未
知的领 ——这是一个 又 的梦想,吸引了无 的科研人员日
[3]
为之 。我 曾 以为这件事情并不 难, 进展却远不 预
想的 么顺 。我 眼中的 草树木、虫鱼鸟兽, 计 机中却是 样
的不同: 只是一个个由 字 列 成的矩阵(Matrix)。让计 机
理解图 的 , 让我 己理解这些 字一样 难。我 既不了
解 己 理解图 ,也不知 计 机该 理解、 这个世界。于
是我 惑了很久,直 几十年后的今天,才发现了一 成功的
象 : 过 人 工 智 ( Arti fi cial Intelligence ) 和 机 器 习
(Machine Learning)技术,计 机 出 、人 、
音、 字——尽 所用的方式( 率 建 )与我 是 此不同。另
一方面, SLAM发展了 近30年之后,我 的相机才 开 认识
的位 ,发觉 己 运动——虽 方式还是和我 人 有巨 的
差异。不过,至 研究 已 成功 建出种种 时SLAM ,有的
快速 位 ,有的甚至 进行 时的三 重建。
这件事情确 很 难, 我 已 有了很 的进展。更令人兴 的
是,近年来随着科技的发展, 现出了一 与SLAM相关的应用 。
许 方,我 希望知 的位 : 的扫 机和移动机器人需
要 位,野 的 动驾驶 需要 位,空中的无人机需要 位,虚
现 和 强现 的设 也需要 位。SLAM是 样重要。 有 ,扫 机
无 房 主 移动,只 盲目 荡; 用机器人 无
令 确 某个房 ;虚 现 也 远 座椅之上——所有这些
新 的事 无 出现 现 生 中, 么令人 憾。
今天的研究 和应用开发人员,逐 意识 了SLAM技术的重要性。
国际上,SLAM已 有近三十年的研究历史,也一直是机器人和计 机
视觉的研究 。21世 以来,以视觉 感器为中心的 视觉
SLAM 技术
, 理论和 上 历了明显的转变与突破,正逐步从 验 研究迈
向市 应用。同时,我 又 憾 发现,至 国 ,与SLAM相关的论
、书 仍 非常匮乏,让许 SLAM技术感兴趣的 无从一窥
径。虽 SLAM的理论框架 本趋于稳 , 其 程 现仍 为 杂,
有着 高的技术 。刚步 SLAM领 的研究 ,不得不 很 的时
, 习 量的知识,往往要走过许 弯 才得以 近SLAM技术的核
心。
本书 面 介 了以视觉 感器为主 的视觉SLAM技术,我
希望 ( 分 ) 补这方面资料的空白。我 会详细 介 SLAM的
理论 景、 架构,以及各个 的主 。同时, 极其重视实践
:本书介 的 所有
重要 , 给出可以运行的 际代码,以 加
读 的理解。之所以这么 ,主要是 虑 SLAM毕竟是一项和
相关的技术。再 亮的 理论, 果不 转化为可以运行的代码,
仍是可望 不可即的空中 , 有 际意义。我 相 , 出真
知, 出真 。只有 际 过各种 之后, 才 真正 认识
SLAM,真正 喜欢上科研。
1986年 出以来[4] ,SLAM一直是机器人领 的 问题。关于
的 献 以千计,想要 SLAM发展史上的所有 及变种 一个 的
说明,是十分 难 且 有必要的。本书中会介 SLAM所 涉的 景知
识, 影几 、计 机视觉、 态估计理论、李 李代 等,并
这些 景知识之上,给出SLAM这棵 树的主干, 略去一 分形
、纹理 杂的枝叶。我 认为这种 是有 的。 果读
主干的 髓, 么 会有 力去 些 的、细 的、 杂
的前 知识。所以,我 的目的是,让SLAM的 过 读本书快速
成 为 这个领 的研究 。另一方面,即 已 是
SLAM领 的研究人员,本书也可 有一些 还觉得陌生的 方,可以让
产生新的见解。
目前,与SLAM相关的书 主要有《 率机器人》( Probabilistic
robotics) [5] 、 《 计 机 视 觉 中 的 视 图 几 》 ( Multiple View
Geometry in Computer Vision ) 、 《 机 器 人 中 的 态 估 计 》
[3]
1.2 如何使用本书
1.2.1 组织方式
本书名为“视觉SLAM十 讲”。顾名思义,我 会 校里讲课
样,以“讲” 为本书的 本单 。 一讲 应一个 的主题,
其中会穿 “理论 分”和“ 分”两种 。 常是理论 分
前, 分 后。 理论 分中,我 介 理解算法所必需的
知识,并且 时 以叙 的方式, 不是 科书 样用“
义— 理—推论”的方式, 为我 觉得这样的方式 读起来更 易一
些,尽 有时 显得不 么严谨。 分主要是 程 现,讨论程序
里各 分的含义及 验 果。看 标题中带有“ ”两个字的章 ,
应该(兴致勃勃 ) 开电 ,和我 一起愉快 代码了。
得一 的是,我 只会 与解 问题相关的 知识 书里,
并尽量 显。虽 我 是工科生, 也要承认,某些 只要 验
上 用, 必要非得 上 。只要我 知 这些 工
,并且 告诉了我 什么情 下可 不工 , 么我 表
示 意, 不 究 些看 际 杂 的证明(当 有
己的价 )。由于SLAM 涉 了太 景,为了 止 本书变成
科书,我 一些细 上的推导和证明留 习题和补 读材
料,方 感兴趣的读 进一步 读参 献,更 相关细 。
一讲正 之后,我 设计了一些习题。其中,带*号的习题是具有
一 难度的。我 强 建议读 习题 练习一 ,这 这些知
识很有帮助[3] 。
书 主要分为两个 分。
1.第一 分为 数学基础 ,我 会以 显易懂的方式, 与视觉
SLAM相关的
知识,包 :
•第1讲是前言,介 这本书的 本 息,习题 分主要包 一些
题。
•第2讲为SLAM ,介 一个SLAM 由哪些 组成,各
的具 工 是什么。 分介 程环 的 建过程以及IDE的
用。
•第3讲介 三 空 运动, 触 旋转矩阵、 、 角
的相关知识,并且 Eigen当中 用 。
•第4讲为李 和李代 。即 现 不懂李代 为 ,也 有关
。 李代 的 义和 用方式, 后 过Sophus操 。
•第5讲介 相机 以及图 计 机中的表 。 用
OpenCV来调取相机的 参 。
•第6讲介 非 性优化,包 态估计理论 础、最 二乘问题、
梯度下降方 。 会 成一个 用Ceres和g2o进行曲 合的 验。
这些 是我 要用 的所有 知识了,当 ,其中还隐含了 以
前 过的高等 和 性代 。我 证 看起来 不会很难。当
, 想进一步 ,我 会 一些参 资料 读, 些
材料可 会比正 里讲的知识难一些。
2.第二 分为SLAM 技术 。我 会 用第一 分所介 的理论,讲
视觉SLAM中各个 的工 原理。
•第7讲为 征 的视觉里程计。该讲 比 ,包 征 的
取与匹 、 极几 约束的计 、PnP和ICP等。 中, 用这
些方 去估计两个图 之 的运动。
•第8讲为直 的视觉里程计。 习光 和直 的原理,
后 用g2o 现一个 单的RGB-D直 。
•第9讲为视觉里程计的 章, 建一个视觉里程计框架,
合运用先前 过的知识, 现 的 本功 。这个过程中, 会碰 一
些问题, 优化的必要性、关 帧的 等。
•第10讲为后端优化,主要为 Bundle Adjustment的 讨论,包
本的BA,以及 用稀疏性加速 解过程。 用Ceres和g2o分
书 一个BA程序。
•第11讲主要讲后端优化中的位 图。位 图是表 关 帧之 约束
的一种更 的形式。 用g2o和gtsam 一个位 球进行优化。
•第12讲为 环检 ,主要介 以词袋方 为主的 环检 。
用dbow3书 字典训练程序和 环检 程序。
•第13讲为 图构建。我 会讨论 用单目进行稠 度图的估
计(以及这是 么不可靠), 后讨论RGB-D的稠 图构建过程。 会
书 极 与 匹 的程序, 后 RGB-D中 云 图和八叉树
图的构建问题。
•第14讲主要介 当前的开 SLAM项目以及未来的发展方向。相
读了前面的知识之后, 会更 易理解 的原理, 现 己的新想
。
最后, 果 看不懂上面 说什么, 么恭喜 !这本书很
合 !加 !
1.2.2 代码
本书所有 代码 github上:
https://github.com/gaoxiang12/slambook
强 建议读 下 以 随时查看。代码是 章 分的,比
,第7讲的 会 ch7 件夹中。此 , 于书中用 的一些
库,会以压 包的形式 3rdparty 件夹下。 于 OpenCV 种
中 库,我 会 第一次出现时介 其安装方 。 果 代码有
疑问,请单击GitHub上的Issues , 交问题。 果确 是代码
出现问题,我 会及时进行修 ;即 是 的理解有 差,我 也会尽
可 。 果 不习惯 用Git, 么单击右 包含download字样的
代码下 至本 即可。
1.2.3 面向的读者
本书面向 SLAM感兴趣的 生和研究人员。 读本书需要一 的
础,我 设 具 以下知识:
• 高等数学、线性代数、概率论 。这些是 分读 应该 本
科阶 触过的 本 知识。 应当明白矩阵和向量是什么,
微分和积分是什么意思。 于SLAM中用 的专业知识,我 会额 加以
介 。
•C++语言基础。由于我 用C++ 为 码语言,所以建议读 至
悉这 语言的语 。比 , 应该知 是什么, 用C++标
库, 板 用,等等。我 会 过 用技巧, 有些 方
确 无 。此 ,我 还 用了一些C++11标 的 ,不过,我
会 用 的 方加以解 。
基础
•Linux 。我 的开发环 是Linux 非Windows,并且只
不会
Linux下的 程序, 再 我们认为,
Windows下的开发方 介 。
掌握 是一个 研究人员所必需的,请初学者暂时不要问为什
Linux SLAM
么,把本书的知识学好之后相信你会和我们有同样的想法。 各种程序
库 Linux下的 非常 , 也会 此过程中 会 Linux的
。 果读 此前从未 用过Linux, 么最 找一本Linux的 材稍加
习( 本知识即可,一 是相关图书的前面几章 )。我
不要 读 具 高超的Linux操 技 , 希望读 至 知 “ 开终
端,进 代码目录”是 操 的。本讲的习题里有一些Linux知识
题, 果 楚 题的 案, 么 读本书代码不会有 问题。
SLAM感兴趣 不具 上 知识的读 ,可 读本书时会感
难。 果 不了解C++的 本知识,可以读一 C++Primer Plus
之
的图书 ; 果 相关的 知识,也可以先 读一些相关
材补 知识,不过我 认为, 本科 平的朋友,读懂本
书所需的 景 是具 了。代码方面, 最 时 亲
一 ,再调 里面的参 ,看看 果会发生怎样的 变。这会 习很
有帮助。
本书可 为SLAM相关课程的 材,亦可 为课 材料 用。
1.3 风格约定
本书既有 理论介 ,也有 程 现, 此,为方 读, 不
同 用了不同 版方式加以区分。
1. 公式单 列出,重要的公式还 右 标了序号, :
3.当代码 量 有的 分与之前列出的重 ,不 合 列
书中时,我 会 仅给出重要片段 ,并以“片 ”二字 明。 此,我
强 建议读 GitHub上下 所有 代码, 成练习,以更 本
书知识。
4.由于 版原 ,书中展示的代码可 与GitHub中的代码有稍许不
同,请以GitHub上的代码为 。
5.我 用 的 个库, 第一次出现的时 会有比 详细的说明,
后 的 用中则不再赘 。所以,建议读 章 顺序 读本书
。
6. 一讲的开 会列出本讲的 要, 末尾会有 和练习
题。引用的参 献 书末尾列出。
7.以星号开 的章 是 读 分,读 可以根 兴趣 读。 过
不会 理解后 章 产生影响。
8. 中重要的 以 黑体 标出,相 已 习惯了。
9.我 设计的 验 是 示性质的。看懂了 不代表 已
悉 个库的 用。所以我 建议 课 一 时 , 本书 常用
的几个库进行 习。
10.本书的习题和 读 可 需要 己 额 材料,所以 需
要 会 用 引擎。
1.4 致谢和声明
本书 的 过程中,我 得 了许 人的帮助,包 不
于:
•中科院的贺一 博 为第5讲的相机 分 了材料。
•颜 睿 了第7讲的公式推导材料。
•华中科 的刘 博 为本书第6讲和第10讲 了材料。
•众 的 师、同 为本书 了修 意见: 、谢晓 、
欣、李帅杰、刘 强、袁梦、孙志明、 昊升、王京、朱晏 、丁
东、 帝楷、衡昱帆、高扬、李 朋、吴博、 雪 、张 、 帆、卢
、杨楠,等等。 此向 表示感谢。
此 ,感谢我的导师张 一直以来 我的 和帮助。感谢电
工业出版社 柳 的 。 有 的帮助,本书不可 以现
的面貌来 读 面前。本书的成书与出版是所有人 同努力的 晶,尽
我 列 列表中, 是 的出版离不开 的工 。
本书 过程中参 了 量 献和论 。其中 分 理论知识
是前人研究的成果,并非我的原创。一 分 验设计亦来 各开 代
码的 示程序,不过 分是我 己 的。此 ,也有一些图片
公开发表的期 会议论 , 中 已 明。未 说明的图 , 为原
创, 来 ,恕不一一列举。 有问题,请与我 ,我 会
第一时 加以修正。
本书涉及知识 众 , 所难 。 有疑问,欢 过电
件与我 。
我的 是:gaoxiang12@mails.tsinghua.edu.cn。
感谢我的 人刘丽莲 期的理解和 。这本书是献给 的。
习题(基本知识自测题)
1.有 性方程 Ax =b , 已知 A,b ,需要 解 x ,该 解?这
A 和b 有哪些要 ? 示:从A 的 度和秩角度来分析。
2.高斯分布是什么? 的一 形式是什么样 ? 的高 形式是什
么样 ?
3. 知 C++中的 类 吗? 知 STL吗? 用过 吗?
4. 以前怎样书 C++程序?( 可以说只 Visual C++6.0下
过C++工程,只要 有 C++和C语言的 验 行。)
5. 知 C++11标 吗?其中哪些新 性 听说过 用过?有 有其
的标 ?
6. 知 Linux吗? 有 有至 用过一种(不 安卓),比
Ubuntu?
7.Linux的目录 构是什么样的? 知 哪些 本命令,比 ls,cat
等?
8. Ubuntu中安装软件(不 开软件中心的情 下)?这些软
件被安装 什么 方? 果只知 的软件名称(比 想要装一个名
称中含有eigen的库),应该 安装 ?
9.* 一个 时 习一下Vim, 为 迟早会用 。 可以 终端中
vimtutor 读一 所有 。我 不需要 非常 练 操 ,只
要 习本书的过程中 用 代码即可。 不要在它的插件上浪
费时间,不要想着把 Vim IDE 用成 ,我们只用它做文本编辑的工作。
[1] 果 有听说过 , 么应该感 兴 ,这说明 会从本书中 获很 知
识。
[2] 会 常 中发现一些神 的东西。
我 来分 看一看各种相机用来 SLAM时有什么 。
单目相机
只 用一个 进 行 SLAM 的 称 为 单 目 SLAM ( Monocular
SLAM)。这种 感器 构 单,成本 低,所以单目SLAM非常受
研究 关 。 见过单目相机的 : 片。是的, 为一张
片, 有什么 呢?
片本质上是 时的 景(Scene) 相机的成 平面上留下的一
个投影 它以二维的形式反映了三维的世界。
。 显 ,这个过程丢 了
景的一个 度,也 是所谓的 度( 离)。 单目相机中,我
无 过单张图片来计 景中 与我 之 的 距离
(远近)。之后
我 会看 ,这个 离 是SLAM中非常关 的 息。由于我 人 见过
量的图 ,形成了一种天生的直觉, 分 景 有一个直观的 距
离感(空间感) , 可以帮助我 断图 中 的远近关 。比
说,我 认出图 中的 ,并且知 其 致的 ;比 ,近
的 会 住远 的 , 太 、月亮等天 一 很远的 方;
再 , 受光 后会留下影 ,等等。这些 息 可以帮助我 断
的远近, 也存 一些情 会 这种 离感 ,这时我 无
断 的远近及其真 了。图2-4所示 是这样一个 。 这张
图 中,我 无 仅 过 来 断后面 些 人是真 的人,还是
。除非我 转 视角,观 景的三 构。 言之, 单张图
里, 无 确 一个 的真 。 可 是一个很 很远的
,也可 是一个很近 很 的 。由于近 远 的原 , 可
图 中变成同样 的样 。
我 讨论了几种常见的相机,相 过以上的说明, 已
有了直观的了解。现 ,想象相机 景中运动的过程,我 得 一
列连 变化的图 [4] 。视觉SLAM的目标,是 过这样的一些图 ,进
行 位和 图构建。这件事情并 有我 想象的 么 单。 不是某种
,只要我 , 可以往 不断 出 位和 图 息了。
SLAM需要一个 善的 框架, 过研究 期的努力工 ,现有
这个框架已 了。
2.2 经典视觉SLAM框架
下面来看 典的视觉SLAM框架, 图2-7所示,了解一下视觉SLAM究
竟由哪几个 组成。
个视觉SLAM 程包 以下步骤。
1. 感器 息读取。 视觉SLAM中主要为相机图 息的读取和预
理。 果是 机器人中,还可 有码盘、惯性 感器等 息的读取和
同步。
2. 视觉里程计 (Visual Odometry,VO)。视觉里程计的 务是估
相 图 相机的运动,以及 图的样 。VO又称为前端(Front
End)。
3. 后端优化
(Optimization)。后端 受不同时刻视觉里程计 量
的相机位 ,以及 环检 的 息, 进行优化,得 一致的
和 图。由于 VO之后,又称为后端(Back End)。
4.回环检测 (Loop Closing)。 环检 断机器人是否 过先
前的位 。 果检 环, 会 息 给后端进行 理。
5.建图 (Mapping)。 根 估计的 ,建立与 务要 应的
图。
典的视觉SLAM框架是过去十几年的研究成果。这个框架本 及其
所包含的 已 本 ,并且已 许 视觉程序库和机器人程序
库中 。 靠这些 ,我 构建一个视觉SLAM , 之 正
如果把工作环境限定
常的工 环 里 时 位与建图。 此,我 说,
在静态、刚体,光照变化不明显、没有人为干扰的场景 , 么,这个
SLAM 是相当成 的了[9] 。
读 可 还 有理解上面几个 的 念,下面 来详细介 各个
具 的 务。 是, 确理解其工 原理需要一些 知识,我
本书的第二 分进行。这里读 只需 各 有一个直观的、
性的理解即可。
2.2.1 视觉里程计
视觉里程计关心的是 相邻图像
之 的相机运动,最 单的情 当
是两张图 之 的运动关 。 ,当看 图2-8时,我 会 反应
出右图应该是左图向左旋转一 角度的 果( 视频情 下感觉会更加
)。我 不 思 一下: 己是怎么知 “向左旋转”这件事情的
呢?人 早已习惯于用眼睛 世界,估计 己的位 , 又往往难以
用理性的语言 我 的直觉。看 图2-8时,我 会 认为,这个
景中离我 近的是吧台,远 是 和黑板。当相机向左转动时,吧
台离我 近的 分出现 视野中, 右 远 的柜 则移出了视野。
过这些 息,我 断相机应该是向左旋转了。
图2-8 相机 的图片与人眼反应的运动方向。
2.2.2 后端优化
笼 说,后端优化主要 噪声
理SLAM过程中 的问题。虽 我
很希望所有的 是 确的, 现 中,再 确的 感器也带有一
的 。 的 感器 量误差 ,昂贵的可 会 一些,有的
感器还会受磁 、 度的影响。所以,除了解 “ 从图 估计出相
机运动”之 ,我 还要关心这个估计带有 的 ,这些 是
从上一时刻 下一时刻的, 我 又 当前的估计有 的
。后端优化要 虑的问题, 是 从这些带有 的 中估计
个 的 态,以及这个 态估计的不确 性有 ——这称为最 后
验 率估计(Maximum-a-Posteriori,MAP)。这里的 态既包 机器人
的 ,也包含 图。
相 ,视觉里程计 分有时被称为“前端”。 SLAM框架中,前
端给后端 待优化的 ,以及这些 的 。 后端负责
的优化过程, 往往面 的只有 ,不必关心这些 底来 什么
感器。在视觉 中,前端和计算机视觉研究领域更为相关,比如
SLAM
图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。
从历史意义上来说,现 我 称为后端优化的 分,很 一 时
直 被称为“SLAM研究”。早期的SLAM问题是一个 态估计问题——正
是后端优化要解 的东西。 最早 出SLAM的一 列论 中,当时的人
称 为“空 态不确 性的估计”(Spatial Uncertainty)[4,11] 。
虽 有一些晦 , 也确 反映出了SLAM问题的本质: 对运动主体自身
和周围环境空间不确定性的估计 。为了解 SLAM问题,我 需要 态估
计理论, 位和建图的不确 性表 出来, 后 用 器 非 性
优化,估计 态的 和不确 性(方差)。 态估计与非 性优化的
具 第6讲、第10讲和第11讲介 。让我 暂时 过 的原理说
明, 往下介 。
2.2.3 回环检测
环检 ,又称闭环检 (Loop Closure Detection),主要解
位 估计 随时间漂移的问题。怎么解 呢? 设 际情 下机器人 过
一 时 的运动后 了原 , 是由于 移, 的位 估计 却 有
原 。怎么办呢?我 想, 果有某种 ,让机器人知 “
了原 ”这件事, “原 ”识 出来,我 再 位 估计
“ ”过去, 可以消除 移了。这 是所谓的 环检 。
环检 与“ 位”和“建图”二 有 切的关 。事 上,我
认为, 图存 的主要意义是让机器人知晓 己 过的 方。为了
现 环检 ,我 需要让机器人具有 识别到过的场景
的 力。 的 现
有很 。 前面说的 样,我 可以 机器人下方设 一个标
志 ( 一张二 码图片)。 只要看 了这个标志, 知 己
了原 。 是,该标志 质上是一种环 中的 感器, 应用环
了 制(万一不 贴二 码怎么办?)。我 更希望机器人 用 带
的 感器——也 是图 本 ,来 成这一 务。 ,可以 断 图像
间的相似性 来 成 环检 。这一 和人是相 的。当我 看 两张相
的图片时, 易 认 来 同一个 方。 果 环检 成功,可以
显著 积误差。所以,视觉 环检 质上是一种计 图
相 性的 。由于图 的 息非常丰 , 得正确检 环的难度降
低了不 。
检 环之后,我 会 “A与B是同一个 ”这样的 息告诉
后端优化 。 后,后端根 这些新的 息, 和 图调 符
合 环检 果的样 。这样, 果我 有 分 且正确的 环检 ,
可以消除 积误差,得 一致的 和 图。
2.2.4 建图
建图(Mapping)是 构建 图的过程。 图(见图2-10)是 环
的 , 这个 并不是 的,需要视SLAM的应用 。
图2-10 形形 的 图[12] 。
于 用扫 机器人来说,这种主要 低矮平面里运动的机器人,
只需要一个二 的 图,标记哪里可以 过,哪里存 障碍 ,
一 导 了。 于一个相机, 有6 由度的运动,我 至
需要一张三 的 图。有些时 ,我 想要一个 亮的重建 果,不仅
是一组空 ,还需要带纹理的三角面片。另一些时 ,我 又不关心
图的样 ,只需要知 “A B 可 过, B C 不行”这样的
事情。甚至,有时不需要 图, 图可以由其 人 , ,行
驶的 往往可以得 已绘制 的当 图。
于 图,我 有太 的想 和需 。 此,相比于前面 的视
觉里程计、 环检 和后端优化,建图并 有一个 的形式和 。
一组空 的集合也可以称为 图,一个 亮的3D 亦是 图,一个
标记着 市、村庄、 、 的图片还是 图。 图的形式随SLAM的
应用 合 。 上讲,可以分为 与 度量地图 拓扑地图
两种。
度量地图( Metric Map)
度量 图强调 确 表示 图中 的位 关 , 常用稀疏
(Sparse)与稠 (Dense) 其分 。稀疏 图进行了一 程度的
象,并不需要表 所有的 。 ,我 一 分具有代表意义的
东西,称之为 标(Landmark), 么一张稀疏 图 是由 标组成的
图, 不是 标的 分 可以忽略 。相 ,稠 图着重于建
所有看 的东西。 于 位来说,稀疏 标 图 足 了。 用于导
时,则往往需要稠 的 图(否则 上两个 标之 的 怎么办?)。
稠 图 常 某种分 率,由许 个 组成。 于二 度量 图
是 许 个 格 ( Grid ) , 于三 度量 图则是许 方
(Voxel)。一 ,一个 含有占 、空 、未知三种 态,以表
该格 是否有 。当查询某个空 位 时, 图 给出该位 是否
可以 过的 息。这样的 图可以用于各种导 , A*、D*[6] 等,
为机器人研究 所重视。 是我 也看 ,这种 图需要存 一个格
的 态,会 费 量的存 空 , 且 情 下 图的许 细
分是无用的。另一方面, 规 度量 图有时会出现一致性问题。很
的一 转向误差,可 会导致两 屋 的 出现重叠, 图 。
拓扑地图( Topological Map)
相比于度量 图的 确性, 图则更强调 图 之 的关
。 图是一个图(Graph),由 和 组成,只 虑 的连
性, A、B 是连 的, 不 虑 从A B 。 松了
图 确位 的需要,去 了 图的细 问题,是一种更为 的表
方式。 , 图不 表 具有 杂 构的 图。 图进
行分割形成 与 ,又 用 图进行导 与 径规 ,仍是
有待研究的问题。
2.3 SLAM问题的数学表述
过前面的介 ,读 应该 SLAM中各个 的组成和主要功 有
了直观的了解。 仅仅靠直观印象并不 帮助我 出可以运行的程
序。我 要 上升 理性层次,也 是用 语言来 SLAM过程。
我 会用 一些变量和公式, 请读 心,我 会尽量让 足
楚。
设 萝卜正 带着某种 感器 未知环 里运动,怎么用 语
言 这件事呢?首先,由于相机 常是 某些时刻 集 的,所以
我 也只关心这些时刻的位 和 图。这 一 连 时 的运动变成
了离 时刻 =1t ,···,K
当中发生的事情。 这些时刻,用 表示 x
萝卜 的位 。于是各时刻的位 记为 1 K , 构成 x ,···,x
了 萝卜的 。 图方面,我 设 图是由许 个 路标
(Landmark)组成的, 个时刻, 感器会 量 一 分 标 ,得
的观 。不 设 标 一 有 个,用 1 N 表示 N y ,···,y
。 这样的设 中,“ 萝卜 带着 感器 环 中运动”,由
下两件事情 :
1.什么是运动 ?我 要 虑从k- 1时刻 k 时刻, 萝卜的位 x
是 变化的。
2.什么是观测 ? 设 萝卜 k 时刻于xk 了某一个 标yj
,我 要 虑这件事情是 用 语言来 的。
先来看运动。 常,机器人会 带一个 量 运动的 感器,比
说码盘 惯性 感器。这个 感器可以 量有关运动的读 , 不一
直 是位 之差,还可 是加速度、角速度等 息。 ,无论是
什么 感器,我 用一个 用的、 象的 :
虑视觉SLAM时, 感器是相机, 么观 方程 是“ 标
后,得 图 中的 ”的过程。这个过程 涉 相机 的 ,
第5讲中详细介 ,这里暂且略过。
可见, 不同的 感器,这两个方程有不同的参 化形式。 果
我 用性, 取成 用的 象形式, 么SLAM过程可总 为
两个 本方程:
这两个方程 了最 本的SLAM问题:当知 运动 量的读 , u
以及 感器的读 z 时, x
解 位问题(估计 )和建图问题(估
y
计 )?这时,我 SLAM问题建 成了一个 状态估计问题
:
过带有 的 量 ,估计 的、隐藏着的 态变量?
态估计问题的 解,与两个方程的具 形式,以及 服从哪种
分布有关。 运动和观 方程是否为 性, 是否服从高斯分布进
行分 ,分为 线性 非线性 高斯 非高斯
/ 和 / 。其中 性高斯
(Linear Gaussian,LG )是最 单的, 的无 的最优估计可以由
卡 曼 器(Kalman Filter,KF)给出。 杂的非 性非高斯
(Non-Linear Non-Gaussian,NLNG )中,我 会 用以 展卡
曼 器(Extended Kalman Filter,EKF)和非 性优化两 方 去
解。直至21世 早期,以EKF为主的 器方 SLAM中占 了主导
位。我 会 工 性化,并以预 —更新两 步骤进行
解(见第10讲)。最早的 时视觉SLAM 即是 于EKF[2] 开发的。随
后,为了 服EKF的 ( 性化误差和 高斯分布 设),人
开 用 器(Particle Filter)等其 器,乃至 用非
性 优 化 的 方 。 时 至 今 日 , 主 视 觉 SLAM 用 以 图 优 化 ( Graph
Optimization)为代表的优化技术进行 态估计[13] 。我 认为优化技术
已 明显优于 器技术,只要计 资 许, 常 向于 用优化
方 (见第10讲和第11讲)。
相 读 已 SLAM的 有了 致的了解, 我 仍需
一些问题。首先,要说明机器人 位置 x 是什么
。我 方才说 是 位置
有些 的。也许读 理解, 平面中运动的 萝卜可以用两个坐
标加一个转角的形式 位 参 化。 ,虽 我的 画风格有些二次
, 萝卜 更 时 是一个三 空 里的机器人。我 知 三 空
的运动由3个 构成,所以 萝卜的运动要由3个 上的平移,以及 着3
个 的旋转来 ,一 有6个 由度。 是否意味着随 用一个R6 中的
向量 了呢?我 发现事情并 有 么 单。 6 由度的 位
姿 [8]
, 表 , 优化 , 需要一 幅来介 ,这 是第3
讲和第4讲的主要 。随后,我 要说明 视觉SLAM中, 观测方程
参 化。 句话说,空 中的 标 是 影 一张 片上的。这
需要解 相机的成 ,我 第5讲介 。最后,当知 了这些
息, 怎么求解上述方程 ?这需要非 性优化的知识,是第6讲的 。
这些 组成了本书 知识的 分。 进行 之后,我
细讨论视觉里程计、后端优化等更详细的知识了。可以看 ,
本讲介 的 构成了本书的一个 要。 果读 还 有很 理解上
面的 念,不 过 再 读一 。下面 要开 介 程序啦!
2.4 实践:编程基础
2.4.1 安装Linux操作系统
终于开 令人兴 的 环 啦! 是否 了呢?为了 成本
书的 环 ,我 需要 一台电 。 可以 用笔记本 台式机,
当 最 是 个人的电 , 为我 需要 上面安装操 进行
验。
我 的程序 以Linux上的C++程序为主。 验过程中,我 会
用 量程序库。 分程序库只 Linux 了 的 ,
Windows上的 则相 (相当)麻 。 此,我 不得不 已 具
关于Linux的 本知识了(参见上一讲的练习题),包 用 本的命
令,了解软件 安装。这样我 才无须讲解这些 。当 , 不必
了解 Linux下开发C++程序,这正是下面会详细讲解的。
我 先来 建本书所需的 验环 。 为一本面向 的书,我
用Ubuntu 为开发环 。 Linux的各 发行版中,Ubuntu及其衍生
版本一直享有 用 友 的 誉。Ubuntu是一个开 操 , 的
和软件可以 方 站(http://cn.ubuntu.com) 费下 ,并且
了详细的安装方式说明。同时, 华、中科 等国 各 高校也
了Ubuntu软件 , 软件的安装十分 。 于 ,建议 用和
我 一样的环 :Ubuntu 14.04。 果 想试试其 口味, 么Ubuntu
16.04、Ubuntu Kylin、Debian 7/8和Linux Mint 17/18也是不 的
。我 证书中所有代码 Ubuntu 14.04下 过了 的 试,
果 其 发行版,则无 确 是否会 问题。 可 需要 费
一些时 解 问题(不过 也可以 当 己的机会)。
来说,Ubuntu 各种库的 为 善,软件也非常丰 。尽 我
不 制 具 用哪种Linux发行版,不过 讲解中, 我们会以 Ubuntu
为例
14.04 ,且主要 用Ubuntu下的命令( apt-get), 不谈 其
Linux下怎么操 了。一 情 下,程序 Linux 移植不会非常
琐。 果 想 Windows OS X下 用本书中的程序,则需要有一 的
移植 验。
现 ,请 己的PC上安装 Ubuntu 14.04。关于Ubuntu的安
装,可以 上 量 程,只要 即可,此 略过。最 单的方
式是 用虚 机(见图2-11), 需要占用 量 存(我 的 验是4GB
以上)和CPU才 畅; 也可以安装双 ,这样会快一些, 需
要一个空白的U盘来 为启动盘。另 ,虚 机软件 硬件的 往
往不 , 果希望 用 际的 感器(双目、Kinect等),则建议
用双 来安装Linux。
关于安装的 示:
•安装操 时请不要 “安装中下 更新”,并且断开 连
,这样可以 高安装速度。至于更新可以 安装 毕后再装。
果 有SSD硬盘,这个过程 用时15分 。
•安装 成后,请务必 软件 设 离 近的服务器上,以获得
更快的下 速度。 我 用 华的软件 常 以10MB/s的速度安
装软件[9] 。
现 , 设 已 成功安装 Ubuntu,无论是 用虚 机还是双
的方式。 果 还不 悉Ubuntu,可以试试 的各种软件, 验一下
的界面和交互方式[10] 。不过我必须 提醒
, 是新 朋友:不要
Ubuntu的用 界面上 费太 时 !Linux有许 可 费时 的
方, 可 会找 某些 众的软件、一些 戏,甚至会为找一张 纸
费不 时 。 是请记住, 是用Linux来工 的。 是 本书中,
是用Linux来 习SLAM的,所以要尽量 时 习SLAM上。
了,我 一个目录, 本书中SLAM程序的代码。 ,可
以 代码 目录(/home)的“slambook”下。以后我 这个目
录称为“ 代码根目录 ”。同时,可以另 一个目录, 本书的Git
代码 制下来,方 验时随时 。本书的代码是 章 分的。
比 ,本讲的代码 slambook/ch2下,下一讲则 slambook/ch3下。
所以,现 请读 进 slambook/ch2下( 应该会新建 件夹并进 该
件夹了吧)。
2.4.2 Hello SLAM
我 从最 本的程序开 。与许 计 机 书 一样,我 来书
一个HelloSLAM程序。不过 这件事之前,我 先来 程序是什么。
Linux中,程序是一个具有 行权 的 件。 可以是一个 本,
也可以是一个二进制 件,不过我 不 的后 名(不 Windows
样需要 成.exe 件)。我 常用的cd、ls等命令, 是位于/bin目
录下的可 行 件。 于其 方的可 行程序,只要 有可 行权
, 么当我 终端中 程序名时, 会运行。 C++ 程时,我
下面这样用 译器 一个 本 件 译成可 行程序。
这是一个非常 单的程序。 应该 不费力 看懂 ,所以这里
不 加解 —— 果 际情 不是这样,请 先补习一下C++的 本知
识。这个程序只是 一个字符串 出 屏幕上 已。 可以用 本
器gedit( Vim, 果 上一讲 习了Vim) 这些代码,并 存
上面列出的 径下。现 ,我 用 译器g++(g++是一个C++ 译器)
译成一个可 行 件。 :
果顺 ,这条命令应该 有 出。 果机器上出现“command
not found”的 误 息,说明 可 还 有安装g++,请用 下命令进
行安装:
为我 并 有修 代码,所以得 的 果和之前是一样的。请
读 想想这种 和之前直 用g++ 译的区 。这次我 用cmake–
make的 ,cmake过程 理了工程 件之 的关 , make过程 际调
用了g++来 译程序。虽 这个过程中 了调用cmake和make的步骤,
我 项目的 译 理工 ,从 一串g++命令,变成了 护 干个比
直观的CMakeLists.txt 件,这 明显降低 护 个工程的难度。比
, 果 想 新 一 个 可 行 件 , 只 需 CMakeLists.txt 中 加 一
行“add_executable”命令即可, 后 的步骤是不变的。cmake会帮我
解 代码的 赖关 , 无须 一 串g++命令。
现 这个过程中唯一让我 不 的是,cmake生成的中 件还留
我 的代码 件当中。当想要发布代码时,我 并不希望 这些中
件一同发布出去。这时我 还需要 一个个 除,十分不 。一种
更 的 是让这些中 件 一个中 目录中, 译成功后,
这个中 目录 除即可。所以,更常见的 译cmake工程的 下:
我 新建了一个中 件夹“build”, 后进 build 件夹,
过cmake..命令 上一层 件夹,也 是代码所 的 件夹进行 译。这
样,cmake产生的中 件 会生成 build 件夹中,与 代码分开。
当发布 代码时,只要 build 件夹 即可。请读 行 这种方
式 ch2中的代码进行 译, 后调用生成的可 行程序(请记得 上一
步产生的中 件 )。
2.4.4 使用库
一个C++工程中,并不是所有代码 会 译成可 行 件。只有带
有main 的 件才会生成可 行程序。 另一些代码,我 只想
包成一个东西, 其 程序调用。这个东西叫 。 库
一个库往往是许 、程序的集合,我 会 之后的练习中 触
许 库。 ,OpenCV库 了许 计 机视觉相关的 , Eigen
库 了矩阵代 的计 。 此,我 要 习 用cmake生成库,并且
用库中的 。现 书 下libHelloSLAM.cpp 件。
slambook/ch2/libHelloSLAM.cpp
此时得 的 件 是libhello_shared.so了。
库 件是一个压 包,里面有 译 的二进制 。不过, 果仅
有.a .so库 件, 么我 并不知 里面的 底是什么,调用的形
式又是什么样。为了让 人( 己) 用这个库,我 需要 一
个头文件 ,说明这些库里 有些什么。 此, 于库的 用 , 只要拿
到了头文件和库文件,就可以调用这个库了 。下面 libhello的
件。
slambook/ch2/libHelloSLAM.h
这样,根 这个 件和我 刚才 译得 的库 件, 可以 用
printHello 了。下面 一个可 行程序来调用这个 单的 :
slambook/ch2/useHello.cpp
过这两行语句,useHello程序 顺 用hello_shared库中的
代码了。这个 示了 生成并调用一个库。请 意, 于 人
的库,我 也可用同样的方式 进行调用, 合 己的程序
中。
除了已 示的功 之 ,cmake还有许 语 和 项,这里不一一
列举。习题中包含了一些cmake的 读材料,感兴趣的读 可 行 读。
现 , 单 顾一下我 之前 了哪些事:
1.首先,程序代码由 件和 件组成。
2.带有main 的 件 译成可 行程序,其 的 译成库
件。
3. 果可 行程序想调用库 件中的 , 需要参 该库 的
件,以明白调用的格式。同时,要 可 行程序 库 件上。
这几个步骤应该是 单 楚的, 际操 中 可 会 上一些问
题。比 说, 果代码里引用了库的 , 忘了 程序 库上,
会发生什么呢?请试试 CMake-Lists.txt中的 分去 ,看看会发
生什么情 。 看懂cmake报告的 误消息吗?
2.4.5 使用IDE
最后,我 来谈谈 用集成开发环 ( Integrated
Development Environment,IDE)。前面的 程 可以用一个 单的
本 器来 成。 , 可 需要 各个 件 来 去,查询某
个 的 明和 现。当 件很 时,这仍 很 琐。IDE为开发
了 转、补 、断 调试等很 方 的功 ,所以,我 建议读
一个IDE进行开发。
Linux下的IDE有很 种。虽 与Windows下的Visual Studio还有一
些差 ,不过 C++开发的也有 几种, :Eclipse、QtCreator、
Code::Blocks、Clion,等等。同样,我 不强制读 用某种 的
IDE, 仅给出我 的建议。我 用的是Kdevelop(见图2-12)。 是
一个 费软件, Ubuntu的 中 了,这意味着 可以用apt-get来安
装 。Kdevelop的优 列举 下:
1. cmake工程。
2. C++ (包 11标 )。有高亮、 转、补 等功 。
动 版代码。
3. 方 看 各个 件和目录树。
4.有一 译、断 调试等功 。
5.无须 费。
图2-12 Kdevelop界面。
图2-14 调试界面。
[6] https://en.wikipedia.org/wiki/A*_search_algorithm
可以谈论向量 这组 下的
积可以 向量 的 影关 。 积则是这个样 :
3.1.2 坐标系间的欧氏变换
与向量 的旋转 ,同样可以 两个坐标 之 的旋转关 ,
再加上平移, 称为坐标 之 的 变换 关 。 机器人的运动过程中,
常见的 是设 一个惯性坐标 ( 叫世界坐标 ),可以认为
是 不动的, x ,y ,z
图3-2中的 W W W 义的坐标 。同时,相机
机器人则是一个移动坐标 , xC ,yC ,zC 义的坐标 。我 可
会问:相机视野中某个向量p , 的坐标为pc , 世界坐标 下看,
的坐标pw 。这两个坐标之 是 转 的呢?这时, 需要先得 该
机器人坐标 的坐标 ,再根 机器人位 转 世界坐标
中,这个转 关 由一个矩阵T 来 , 图3-2所示。
p
图3-2 坐标变 。 于同一个向量 , 世界坐标 下的坐标 pw和 相机坐
标 下的坐标 p c 是不同的。这个变 关 由坐标 的变 矩阵T 来 。
乘 么左 的 变成了单位矩阵,所以:
我 中 的矩阵 出来, 义成一个矩阵 。这个矩阵由两组 R
之 的 积组成,刻画了旋转前后同一个向量的坐标变 关 。只要旋
转是一样的, 么这个矩阵也是一样的。可以说,矩阵 了旋转本 R
。 此又称为 。 旋转矩阵
旋转矩阵有一些 的性质。事 上, 是一个行列式为1的正交矩
阵[1] 。反之,行列式为1的正交矩阵也是一个旋转矩阵。所以,可以
旋转矩阵的集合 义 下:
显 R T
刻画了一个相反的旋转。
变 中,除了旋转之 还有平移。 虑世界坐标 中的向量 a
, 过一次旋转(用 R
)和一次平移 后,得 了 ′ , 么 旋转 t a
和平移合 一起,有:
t
其中, 称为平移向量。相比于旋转,平移 分只需 这个平移量
加 旋转之后的坐标上,显得非常 。 过上式,我 用一个旋转矩
R
阵 和一个平移向量 了一个 t
空 的坐标变 关 。
3.1.3 变换矩阵与齐次坐标
式(3.8) 表 了 空 的旋转与平移,不过还存 一个
问题:这里的变 关 不是一个 性关 。 设我 进行了两次变 : R
1,t
1 和 2 R ,t 2 , 足:
是从a c 的变 为
3.2 实践:Eigen
本讲的 分有两 。第一 分中, 讲解 用Eigen来表示
矩阵、向量,随后引申至旋转矩阵与变 矩阵的计 。本 的代码
slambook/ch3/useEigen中。
Eigen[2] 是一个C++开 性代 库。 了快速的有关矩阵的
性代 运 ,还包 解方程等功 。许 上层的软件库也 用Eigen进行
矩阵运 ,包 g2o、Sophus等。 应本讲的理论 分,我 来 习一下
Eigen的 程。
的PC上可 还 有安装Eigen。请 以下命令进行安装:
重 一 , 为 Eigen 库 只 有 件,所以不需要再用
target_link_libraries语句 程序 库上。不过, 于其 分
库, 时 需要用 命令。这里的 并不见得是最 的, 为
其 人可 Eigen安装 了不同位 , 么 必须 动修 这里的
件目录。 之后的工 中,我 会 用 fi nd_package命令去 库,
不过 本讲中暂时 这个样 。 译 这个程序后,运行 ,可以看
各矩阵的 出 果。
由于 代码中给出了详细的 , 此 不一一解 行语句了。
本书中,我 仅给出几 重要 方的说明(后面的 分亦
这个风格)。
1.读 最 亲 一 上面的代码(不包 )。至 要 译
运行一 上面的程序。
2.Kdevelop可 不会 示C++成员运 ,这是 得不 善导致
的。请 着上面的 即可,不必理会 是否 示 误。
3.Eigen 的矩阵和MATLAB很相 ,几乎所有的 当 矩阵来
理。 是,为了 现更 的 率, Eigen中需要 矩阵的 和
。 于 译时期 知 的矩阵, 理起来会比动态变化 的
矩阵更快一些。 此, 旋转矩阵、变 矩阵这样的 , 可
译时期确 的 和 。
4.Eigen 的矩阵 现比 杂,这里不 介 ,我 希望
用 fl oat、double等 样 用Eigen的矩阵。这应该是符
合其设计 衷的。
5.Eigen矩阵不 动 升,这和C++的 建 有
差异。 C++程序中,我 可以 一个 fl oat 和double 相加、
相乘, 编译器会自动把数据类型转换为最合适的那种 。 Eigen中,
出于性 的 虑,必须 显式地 矩阵 进行转 。 果忘了这样
, Eigen 会 ( 不 太 友 ) 示 一 个 “YOU MIXED DIFFERENT
NUMERIC TYPES...”的 译 误。 可以 试找一下这条 息出现
误 示的哪个 分。 果 误 息太 最 存 一个 件里再找。
6.同理, 计 过程中也需要 证矩阵 的正确性,否则会出
现“YOU MIXED MATRICES OF DIFFERENT SIZES” 误。请不要 怨这种
误 示方式, 于C++ 板 程, 示出可以 读的 息已 是
很幸运的了。以后, 发现Eigen出 , 可以直 寻找 的 分,推
出了什么问题。
7. 我 的 程只介 了 本的矩阵运 。 可以 读
http://eigen.tuxfamily.org/dox-devel/modules.html 习 更 的
Eigen知识。这里只 示了最 单的 分, 看懂 示程序不等于 已
练操 Eigen。
最后一 代码中比 了 与 QR分解的运行 率, 可以看看
己机器上的时 差异,两种方 是否有明显的差异?
3.3 旋转向量和欧拉角
3.3.1 旋转向量
我 重新 理论 分。有了旋转矩阵来 旋转,有了变 矩阵
一个6 由度的三 刚 运动,是不是已 足 了呢?矩阵表示方式
至 有以下几个 :
1.SO(3)的旋转矩阵有9个量, 一次旋转只有3个 由度。 此这种
表 方式是 的。同理,变 矩阵用16个量表 了6 由度的变 。
么,是否有更 的表示呢?
2.旋转矩阵 带有约束: 必须是个正交矩阵,且行列式为1。变
矩阵也是 此。当想要估计 优化一个旋转矩阵/变 矩阵时,这些约
束会 得 解变得更 难。
此,我 希望有一种方式 旋转和平移。 ,用
一个三 向量表 旋转,用六 向量表 变 ,可行吗?事 上, 前
面介 积的 分,我 过 这件事。我 介 了 用
积表 两个向量的旋转关 。 于坐标 的旋转,我 知 , 意旋转
可以用 一个旋转轴和一个旋转角 来刻画。于是,我 可以 用一个向
量,其方向与旋转 一致, 度等于旋转角。这种向量称为 旋转向量
( 角,Axis-Angle)。这种表示 只需一个三 向量即可 旋
转。同样, 于变 矩阵,我 用一个旋转向量和一个平移向量即可
表 一次变 。这时的 正 是六 。
事 上,旋转向量 是下一讲 介 的李代 。所以本讲中读
只需知 旋转可以这样表示即可。剩下的问题是,旋转向量和旋转矩阵
之 是 转 的呢? 设有一个旋转 为 ,角度为 n θ
的旋转,显
, 应的旋转向量为 θn
。从旋转向量 旋转矩阵的转 过程由 罗
德里格斯公式 (Rodrigues’s Formula)表明,由于推导过程比
杂,这里不 ,只给出转 的 果[3] :
此:
此,转 n
是矩阵 R
征 1 应的 征向量。 解此方程,再归
一化, 得 了旋转 。读 也可以从“旋转 过旋转之后不变”的
几 角度看待这个方程。顺 一下,这里的两个转 公式 下一讲仍
出现, 会发现 正是SO(3)上李 与李代 的 应关 。
3.3.2 欧拉角
下面来说说 角。
无论是旋转矩阵、旋转向量, 虽 旋转, 我 人
是非常不直观的。当我 看 一个旋转矩阵 旋转向量时,很难想象出
这个旋转究竟是什么样的。当 变 时,我 也不知 是向哪个
方向 转动。 角则 了一种非常直观的方式来 旋转——
用了3 个分离的转角
, 一个旋转分解成3次 不同 的旋转。当 ,
由于分解方式有许 种,所以 角也存 着不同的 义方 。比
说,先 旋转,再 X ,最后 Y Z
, 得 了一个 的旋 XY Z
转。同理,可以 义 、 ZY Z ZY X
等旋转方式。 果讨论得更细一些,
还需要区分 次是 固定轴
旋转的,还是 旋转之后的轴
旋转的,这
也会给出不一样的 义方式。
许 空、 中听说过“俯 角”“ 角”这些词。
角当中比 常用的一种, 是用“ - 俯 - 转 ” ( yaw-pitch-
roll)3个角度来 一个旋转的。由于 等价于 的旋转, 此 ZY X
以 ZY X
为 。 设一个刚 的前方(朝向我 的方向)为 ,右 X
为Y ,上方为 Z
, 图3-3所示。 么, ZY X
转角相当于 意旋
转分解成以下3个 上的转角:
1. Z 旋转,得
的 角yaw;
2. 旋转之后 的Y 旋转,得 俯 角pitch;
3. 旋转之后 的X 旋转,得 转角roll。
3.4 四元数
3.4.1 四元数的定义
旋转矩阵用9个量 3 由度的旋转,具有 性; 角和旋转
向量是 的, 具有 异性。事 上,我 找不 不带奇异性的三维
向量描述方式 [19]
。这有 于用两个坐标表示 球表面( 度和
度), 必 存 异性( 度为 ±
90 ° 时 度无意义)。三 旋
转是一个三 形,想要无 异性 表 ,用3个量是不 的。
忆以前 习过的 。我 用 集C表示 平面上的向量,
的乘 则表示 平面上的旋转: ,乘上 i相当于 时 一
个 向量旋转90 ° 。 , 表 三 空 旋转时,也有一种 于
的代 : 四元数
(Quaternion)。 是Hamilton找 的一种
展的 。 既是紧凑的,也没有奇异性 。 果说 , 不 直
观,其运 稍 杂些。
一个 q 有一个 和三个虚 。本书 前面(也
有 方 后面), 下面这样:
这里, 称为 s 的 , v
称为 的虚 。 果一个
的虚 为0,称之为 实四元数 。反之, 的 为0,则称之为 虚四元
数 。
这和 非常相 。 虑 三 空 需要3个 , 也有3个虚
, 么,一个虚 不 应 一个空 呢?事 上我 是
这样 的。同理,我 知 一个 为1的 可以表示 平面上的 旋
转( 有 度的 ), 么,三 空 中的旋转是否 用单位
表 呢? 案也是 的。
我 用 单位四元数
表示三 空 中 意一个旋转,不过这种表
方式和 有着微 的不同。 中,乘以 意味着旋转90 ° 。这是 i
否意味着 中,乘 i
是 i
旋转90 ° ? 么, = 是否意 ij -k
味着,先 i
转90 ° ,再 j
转90 ° , 等于 转 90 ° ?读 可 k -
以找一 机比 一下—— 后 会发现情 并不是这样。正确的情形
应该是,乘以 i
应着旋转180 ° ,这样才 证 = 的性质。 ij -k i
2
-= 1,意味着 i
旋转360 ° 后得 一个相反的东西。这个东西要
旋转两周才会和 原先的样 相等。
这 乎有些玄 了, 的解 需要引 太 额 的东西,我 还
是 静一下 眼前。至 ,我 知 单位 表 三 空 的
旋转。这种表 方式和旋转矩阵、旋转向量有什么关 呢?我 不 先
来看旋转向量。 设某个旋转是 单位向量 =[ x y z ]T 进行了角 n n ,n ,n
度为 θ 的旋转, 么这个旋转的 形式为
3.4.2 四元数的运算
和 常 一样,可以进行一 列的运 。常见的有 则运
、 乘、 、 轭等。下面分 介 。
现有两个 qa ,qb , 的向量表示为[ sa ,va ], [sb ,vb ],
原 表示为
么,其运 可表示 下。
1.加 和
qa ,qb 的加 运 为
2.乘
乘 是 qa 的 一项与 qb 的 项相乘,最后相加,虚 要 式
(3.18)进行。 理可得:
3. 轭
的 轭是 虚 取成相反 :
轭与其本 相乘,会得 一个 ,其 为 的
平方:
4.
的 义为
5.
一个 的 为
此 义, 和 己的 的乘积为 1:
果 为单位 q ,其 和 轭 是同一个量。同时,乘积的
有和矩阵相 的性质:
6. 乘与 乘
和向量相 , 可以与 相乘:
乘是 两个 个位 上的 分 相乘:
3.4.3 用四元数表示旋转
我 可以用 表 一个 的旋转。 设一个空 三 p=
[x,y,z ∈ ] R3 ,以及一个由 角 n,θ 的旋转。三 p 过旋转
之后变为 p′ 。 果 用矩阵 , 么有 p′ =Rp 。 果用
旋转, 的关 又 来表 呢?
首先, 三 空 用一个虚 来 :
么,旋转后的 p′ 即可表示为这样的乘积:
3.4.4 四元数到旋转矩阵的转换
意单位 了一个旋转,该旋转亦可用旋转矩阵 旋转向
量 。从旋转向量 的转 方式已 式(3.20)中给出。
此,现 看来 转 为矩阵的最直观方 ,是先 转 q
为 角 θ n
和 , 后再根 德里格斯公式转 为矩阵。不过 样要计
一个arccos ,代价 。 际上这个计 是可以 过一 的技巧
过的。这里省略推导过程,直 给出 旋转矩阵的转 方式。
设 q =q +q i +q j +q k ,
0 1 2 3 应的旋转矩阵 为 R
3.5 *相似、仿射、射影变换
3D空 中的变 ,除了 变 之 ,还存 其 几种,只不过
变 是最 单的。 一 分和 量几 有关, 为 之后的讲解中
可 会 ,所以先 列出来。 变 了向量的 度和夹角,相
当于我 一个刚 原 不动 进行了移动 旋转,不 变 的样
。 其 几种变 则会 变 的 形。 有 的矩阵表示。
1.相 变
相 变 比 变 了一个 由度, 许 进行 匀 ,
其矩阵表示为
A
的左上角为可 矩阵 ,右上角为平移 ,左下角为 T
。由 t a
于 用了齐次坐标,当 v/
=0时,我 可以 个矩阵除以 得 一个右 v
下角为1的矩阵;否则得 右下角为0的矩阵。 此,2D的 影变 一
有8个 由度,3D则 有15个 由度。 影变 是现 讲过的变 中,形
式最为一 的。从真 世界 相机 片的变 可以看成一个 影变 。
读 可以想象一个原本方形的 板砖, 片当中是什么样 :首先,
不再是方形的。由于近 远 的关 , 甚至不是平行 形, 是
一个不规则的 形。
表3-1总 了目前讲 的几种变 的性质。 意 “不变性质”中,
从上 下是有包含关 的。 , 变 除了 积之 ,也具有
平行、相交等性质。
表3-1常见变 性质比
我 之后会说 ,从真 世界 相机 片的变 是一个 影变 。
果相机的 为无穷远, 么这个变 为 变 。不过, 详细讲
相机 之前,我 只要 有个 致的印象即可。
3.6 实践:Eigen几何模块
现 ,我 来 际 练一下前面讲 的各种旋转表 方式。我
Eigen中 用 、 角和旋转矩阵, 示 之 的变 方式。
我 还会给出一个可视化程序,帮助读 理解这几个变 的关 。
slambook/ch3/useGeometry/useGeometry.cpp
Eigen中 各种形式的表 方式总 下。请 意 种 有单
度和双 度两种 , 且和之前一样,不 由 译器 动转 。
下面以双 度为 , 可以 最后的d 成f,即得 单 度的
构。
•旋转矩阵(3× 3):Eigen::Matrix3d。
•旋转向量(3× 1):Eigen::AngleAxisd。
• 角(3× 1):Eigen::Vector3d。
• (4× 1):Eigen::Quaterniond。
• 变 矩阵(4× 4):Eigen::Isometry3d。
• 变 (4× 4):Eigen::A ffi ne3d。
• 影变 (4× 4):Eigen::Projective3d。
我 译此程序的问题交给读 。 这个程序中, 示了
用Eigen中的旋转矩阵、旋转向量(AngleAxis)、 角和
。我 用这几种旋转方式去旋转一个向量 ,发现 果是一样的(不 v
一样 真是见鬼了)。同时,也 示了 程序中转 这几种表 方
式 。 想 进 一 步 了 解 Eigen 的 几 的 读 可 以 参
( http://eigen.tuxfamily.org/dox/group__TutorialGeometry.html )
。
3.7 可视化演示
最 后 , 我 为 读 了 一 个 程 序 , 位 于
slambook/ch3/visualizeGeometry中。 以可视化的形式 示了各种表
方式的异同(见图3-4)。读 可以用鼠标操 一下,看看 是
变化的。
图3-4 旋转矩阵、 角、 的可视化程序。
原则上, T 和 T 可以用来表示相机的位 ,事 上 也只
T T
wc cw
更为直观的原 。 此, 可视化程序
里,我 显示了T 不是T
wc
wc cw 。
习题
1.验证旋转矩阵是正交矩阵。
2.*寻找 德里格斯公式的推导过程并加以理解。
3.验证 旋转某个 后, 果是一个虚 ( 为零),
所以仍 应 一个三 空 (式3.34)。
4.画表总 旋转矩阵、 角、 角、 的转 关 。
5. 设有一个 的Eigen矩阵,想 的左上角3 × 3的 取出来,
后赋 I
为 3 × 3 。请 程 现。
2
T
3] 。现 , 萝卜一号看 某个 的坐标 下坐标为p =[0. 5,
0, 0. 2] , 该向量
T
萝卜二号坐标 下的坐标。请 程 现。
[2] 方主页:http://eigen.tuxfamily.org/index.php?title=Main_Page。
[4] https://en.wikipedia.org/wiki/Gimbal_lock。
第4讲 李群与李代数
主要目标
1.理解李 与李代 的 念, ,
SO(3) SE(3)与 应李代 的表
示方式。
2.理解BCH近 的意义。
3. 会 李代 上的 动 。
4. 用Sophus 李代 进行运 。
上一讲,我 介 了三 世界中刚 运动的 方式,包 旋转矩
阵、旋转向量、 角、 等 干种方式。我 重 介 了旋转的
表示, 是 SLAM中,除了表示之 ,我 还要 进行估计和优
化。 为 SLAM中位 是未知的, 我 需要解 什么样的相机位姿最
符合当前观测数据 这样的问题。一种典 的方式是 构建成一个优化
问题, 解最优的R,t , 得误差最 化。
前所言,旋转矩阵 是带有约束的(正交且行列式为1)。
为优化变量时,会引 额 的约束, 优化变得 难。 过李 —李
代 的转 关 ,我 希望 位 估计变成无约束的优化问题, 化
解方式。 虑 读 可 还 有李 李代 的 本知识,我 从最
本的知识开 讲起。
4.1 李群与李代数基础
上一讲,我 介 了旋转矩阵和变 矩阵的 义。当时,我 说三
旋转矩阵构成了 特殊正交群 SO(3), 变 矩阵构成了 特殊欧氏群
SE(3):
我 知 ,乘 应着旋转 变 的 合,两个旋转矩阵相乘表示
了两次旋转。 于这种只有一个运 的集合,我 称之为 。 群
4.1.1 群
(Group)是 一种集合 加上一种运算 的代 构。我 集合记
A,运 记 ,· 么 可以记 G =(A,· )。 要 这个运 足
以下几个条件:
1. 闭性:∀a ,a ∈A,a ·a ∈A .
1 2 1 2
2. 合律: ∀ a ,a ,a ∈A, (a ·a )·a =a · (a
·a
1 2 3 1 2 3 1 2
3 ).
4. :∀a∈A,∃a- ∈A,s.t.a·a- =a .
1 1
0
4.1.2 李代数的引出
虑 意旋转矩阵 R ,我 知 足:
R
现 ,我 说, 是某个相机的旋转, 会随时 连 变化,即
为时 的 R t
: ( )。由于 仍是旋转矩阵,有
等式两 时 导,得 :
理得:
R t R t
可以看出˙ ( ) ( )T 是一个 矩阵。 忆一下,我 反对称
式(3.3)介 叉积时,引 了 ∧ 符号, 一个向量变成了反 称矩
阵。同理, 于 意反 称矩阵,我 亦 找 一个与之 应的向量。
这个运 用符号 ∨ 表示:
于是,由于˙ R (t )R (t ) 是一个反
T
称矩阵,我 可以找 一个
三 向量ϕ (t )∈ R 与之 应。于是有:
3
4.1.3 李代数的定义
个李 有与之 应的李代 。李代 了李 的 性质。
用的李代 的 义 下:
李代 由一个集合V,一个 F和一个二 运 [ ]组成。 , 果
足以下几条性质,则称(V F , , , [ ])为一个李代 ,记 g。
1. 闭性∀X,Y∈ V, [X,Y ]∈ V.
2.双 性∀X,Y,Z∈ V,a,b∈ F, 有:
4.1.4 李代数so(3)
之前 的ϕ ,事 上是一种李代 。SO(3) 应的李代 是 义
R3 上的向量,我 记 ϕ 。根 前面的推导, 个ϕ 可以生成一个反
称矩阵:
此 义下,两个向量ϕ 1 ,ϕ 2 的李 号为
4.1.5 李代数se(3)
于SE(3), 也有 应的李代 se(3)。为 省 幅,这里 不介
引出se(3)了。与so(3)相 ,se(3)位于R6 空 中:
我 个se(3) 记 ξ
, 是一个六 向量。前三 为平移
( 含义与变 矩阵中的平移不同,分析见后),记 ;后三 为旋 ρ
转,记 ϕ , 质上是so(3) [3]
。同时,我 展了 ∧ 符号的含
义。 se(3)中,同样 用 ∧ 符号, 一个六 向量转 成 矩阵,
这里不再表示反 称:
4.2 指数与对数映射
4.2.1 SO(3)上的指数映射
现 来 虑第二个问题:exp(ϕ∧ )是 计 的? 是一个矩阵的
, 李 和李代 中,称为 映 (Exponential Map)。同样,
我 会先讨论so(3)的 映 ,再讨论se(3)的情形。
意矩阵的 映 可以 成一个 勒展开, 是只有 的情
下才会有 果,其 果仍是一个矩阵。
同样 , so(3)中 意 ϕ ,我 亦可 此方式 义 的 映
:
以及
读 可以 行验证上 性质。 了 理 a∧ 高阶项的方 。
用这两个性质,我 可以 映 成:
最后得 一个 曾相识的式 :
想前一讲 , 和 德里格斯公式,即式(3.14) 出一 。
这表明,so(3) 际上 是由所谓的 旋转向量 组成的空 , 映
即 德里格斯公式。 过 ,我 so(3)中 意一个向量 应 了一
个位于SO(3)中的旋转矩阵。反之, 果 义 映 ,也 SO(3)中
的 应 so(3)中:
4.2.2 SE(3)上的指数映射
下面介 se(3)上的 映 。为了 省 幅,我 不再 so(3)
样详细推导 映 。se(3)上的 映 形式 下:
J
由于 可以由ϕ 得 ,所以这里的 ρ
亦可由此 性方程解得。现
,我 已 弄 了李 、李代 的 义与相互的转 关 ,总 图
4-1所示。 果读 有哪里不明白,可以 去几页看看公式推导。
, , ,
图4-1 SO(3) SE(3) so(3) se(3)的 应关 。
4.3 李代数求导与扰动模型
4.3.1 BCH公式与近似形式
用李代 的一 动机是进行优化, 优化过程中导 是非常必
要的 息(我 会 第6讲详细介 )。下面来 虑一个问题。虽 我
已 楚了SO(3)和SE(3)上的李 与李代 关 , 是,当 SO(3)中
成两个矩阵乘 时,李代 中so(3)上发生了什么 变呢?反过来说,当
so(3)上 两个李代 的加 时,SO(3)上是否 应着两个矩阵的乘积?
果成立,相当于:
果ϕ 1 ,ϕ 2 为标量, 显 该式成立; 此 我 计 的是 矩阵
的 , 非标量的 。 言之,我 研究下式是否成立:
很 憾,该式 矩阵时并不成立。
两个李代 映 乘积的 形式,由Baker-Campbell-Hausdor
ff公式(BCH公式) [4] 给出。由于其 形式 杂,我 只给出其展
开式的前几项:
的 为
右乘雅可比仅需要 变量取负号即可:
4.3.2 SO(3)李代数上的求导
下面来讨论一个带有李代 的 , 关于该李代 导的问
题。该问题有很强的 际 景。 SLAM中,我 要估计一个相机的位
和 态,该位 是由SO(3)上的旋转矩阵 SE(3)上的变 矩阵 的。
不 设某个时刻 萝卜的位 为 。 观 T
了一个世界坐标位于 的 p
,产生了一个观 z
。 么,由坐标变 关 知:
,由于观 w
的存 , 往往不可 z 确 足 z =Tp 的
关 。所以,我 常会计 理想的观 与 际 的误差:
N
设一 有 个这样的 标 和观 ,于是 有 N 个上式。 么,
萝卜的位 估计,相当于是寻找一个最优的 T , 得 误差最
化:
4.3.3 李代数求导
首先, 虑SO(3)上的情 。 设我 一个空 进行了旋转, p
得 了 Rp
。现 ,要计 旋转之后 的坐标相 于旋转的导 ,我 不
严谨 记为[5] :
导 的 义,有:
4.3.4 扰动模型(左乘)
另一种 导方式,是 R
进行一次 动∆ 。这个 动可以乘 左 R
也可以乘 右 ,最后 果会有一 微 的差异,我 以左 动为
。设左 动∆ R应的李代 为 。 后, φ
导,即: φ
该式的 导比上面更为 单:
可见,相比于直 李代 导,省去了一个雅可比 Jl 的计 。这
得 动 更为 用。请读 务必理解这里的 导运 ,这 位 估
计当中具有重要的意义。
4.3.5 SE(3)上的李代数求导
最后,我 给出SE(3)上的 动 , 直 李代 上的 导 不再
介 了。 设某空 p 过一次变 ( 应李代 为 T
),得 ξ Tp
[6]
T
。现 ,给 左乘一个 动∆ =exp( T δξ
∧ ),我 设 动项的李代
δξ δρ,δ
为 =[ ϕ ]T , 么:
我 最后的 果 义成一个 符 ⊙ [7]
, 一个齐次坐标的空
变 ×
成一个4 6的矩阵。
至此,我 已 介 了李 李代 上的微分运 。之后的章 中,
我 应用这些知识去解 际问题。关于李 李代 的某些重要
性质,我 为习题留给读 。
4.4 实践:Sophus
我 已 介 了李代 的 知识,现 是 过 练巩 一下
所 知识的机会了。我 来讨论 程序中操 李代 。 第3讲中,
我 看 Eigen 了几 , 有 李代 的 。一个 的
李代 库是Strasdat 护的Sophus库[8] 。Sophus库 本章主要讨论的
,
SO(3)和SE(3),此 还含有二 运动SO(2) SE(2)以及相 变 Sim(3)
的 。 是直 Eigen 础上开发的,我 不需要安装额 的 赖
库。读 可以直 从GitHub上获取Sophus[9] , , 本书的代码目录
slambook/3rdparty下也 了Sophus 代码。由于历史原 ,Sophus早
期版本只 了双 度的李 /李代 。后 版本 成了 板 。
板 的Sophus中可以 用不同 度的李 /李代 , 同时 加了 用难
度。本书 用 非模板类 的Sophus库。 果读 用GitHub上的
Sophus,请确 用的是 非模板类 的版本。 可以 以下命令获得非
板 的Sophus:
4.5 *相似变换群与李代数
最后,我 要 一下 单目视觉中 用的相 变 Sim(3),以及
应的李代 sim(3)。 果 只 双目SLAM RGB-D SLAM感兴趣,可以
过本 。
我 已 介 过单目的 度不确 性。 果 单目SLAM中 用SE(3)
表示位 , 么由于 度不确 性与 度 移, 个SLAM过程中的 度
会发生变化,这 SE(3)中未 现出来。 此, 单目情 下我 一
会显式 度 表 出来。用 语言来说, 于位于空 的 p
, 相机坐标 下要 过一个 , 非 相似变换
变 :
相 变 中,我 s
度 表 了出来。 同时 用 的3个坐 p
标之上, p
进行了一次 。与SO(3)、SE(3)相 ,相 变 亦 矩
阵乘 构成 ,称为相 变 Sim(3):
其中Js 形式为
过 映 ,我 找 李代 与李 的关 。 于李代
ζ , 与李 的 应关 为
旋转 分和SO(3)是一致的。平移 分, se(3)中需要乘一个雅可
J
比 , 相 变 的雅可比更 杂一些。 于 度 ,可以看 李
s
中的 即为李代 中 的 。σ
Sim(3)的BCH近 与SE(3)是 的。我 可以讨论一个 过相 p
变 Sp S
后,相 于 的导 。同样 ,存 微分 和 动 两种
方式, 动 为 单。我 省略推导过程,直 给出 动 的
果。设给予 Sp
左 一个 动exp( ∧ ),并 ζ
于 动的导 。 Sp
为 Sp
是4 的齐次坐标, ζ
是7 向量,该导 应该是4 7的雅可 ×
比。为了方 起见,记 Sp
的前3 组成向量 , 么: q
关于Sim(3),我 介 这里。更详细的关于Sim(3)的资料,建
议读 参见 献[21]。
4.6 小结
本 讲 引 了 李 SO(3) 和 SE(3) , 以 及 应 的 李 代 so(3) 和
se(3)。我 介 了位 上面的表 和转 , 后 过BCH的 性
近 ,我 可以 位 进行 导和 动了。这给之后讲解位 的优化
下了理论 础, 为我 需要 常 某一个位 的估计 进行调 ,
应的误差 。只有 弄 楚 位 进行调 和更新之后,
我 才 下一步的 。
可 本讲的 比 理论化,毕竟 不 计 机视觉 样 常有
看的图片可以展示。相比于讲解李 李代 的 科书,由于我
只关心 用的 ,所以讲的 非常 ,速度相 快了一些。请读
务必理解本章 , 是解 后 许 问题的 础, 是位 估计
分。
习题
1.验证SO(3)、SE(3)和Sim(3)关于乘 成 。
6.证明:
其中:
7. 左 动的推导,推导SO(3)和SE(3) 右 动下的导 。
8. cmake的 fi nd_package 令是 运 的。 有哪些可 的
参 ?为了让cmake找 某个库,需要哪些先 条件?
[1] 谐音“ 咬 ”。
[4] 参见https://en.wikipedia.org/wiki/Baker-Campbell-Hausdorff_formula。
p
[6] 请 意为了 乘 成立, 必须 用齐次坐标。
[7] 我会读 “咚”, 一个石 井里的 音。
[9] https://github.com/strasdat/Sophus。
第5讲 相机与图像
主要目标
1.理解 相机的 、 参与径向畸变参 。
2.理解一个空 是 影 相机成 平面的。
3. OpenCV的图 存 与表 方式。
4. 会 本的 标 方 。
前面两讲中,我 介 了“机器人 表示 位 ”的问题,
分 解 了 SLAM 典 中变量的含义和运动方程 分。本讲 讨
论“机器人 观 世界”,也 是观 方程 分。 以相机为
主的视觉SLAM中,观 主要是 的过程。 相机成像
我 现 生 中 看 量的 片。 计 机中,一张 片由很
个 组成, 个 记录了 彩 亮度的 息。三 世界中的一个
反 发出的光 ,穿过相机光心后, 影 相机的成 平面上。
相机的感光器件 光 后,产生 量 , 得 了 ,形成了我
见 的 片。这个过程 否用 原理来 呢?本讲 首先讨论相
机 ,说明 影关 具 ,相机的 参是什么。同时, 单
介 双目成 与RGB-D相机的原理。 后,介 二 片 的 本操
。最后,根 参 的含义, 示一个 云 的 验。
5.1 相机模型
相机 三 世界中的坐标 (单位为 )映 二 图 平面(单
位为 )的过程 用一个几 进行 。这个 有很 种,
其中最 单的称为 针孔模型。 是很常用 且有 的 ,
了一束光 过 之后, 面 影成 的关 。 本书中我
用一个 单的 相机 来 这种映 关 进行建 。同时,由于
相机 上的透 的存 , 得光 影 成 平面的过程中会产生 畸
变 。 此,我 用 和畸变两个 来 个 影过程。
本 先给出相机的 ,再 透 的畸变 进行讲解。这
两个 的三 影 相机 成 平面,构成相机的内
参数 。
5.1.1 针孔相机模型
中 理课 上,我 可 见过一个蜡 影 验: 一个暗
的前方 着一 的蜡 ,蜡 的光透过暗 上的一个 影
暗 的后方平面上,并 这个平面上形成一个 立的蜡 图 。 这个
过程中, 三 世界中的蜡 影 一个二 成 平面。
同理,我 可以用这个 单的 来解 相机的成 过程, 图5-1所
示。
图5-1 相机
其中负号表示成的 是 立的。为了 化 ,我 可以 成 平
面 称 相机前方,和三 空 一起 机坐标 的同一 ,
图5-2的中图所示。这样 可以 公式中的负号去 , 式 更加 :
理得:
读 可 要问,为什么我 可以看 随意 成 平面 前方
呢?这只是我 理真 世界与相机 影的 ,并且, 相
机 出的图 并不是 ——相机 的软件会帮 转这张图 ,所
以 看 的一 是正着的 ,也 是 称的成 平面上的 。所以,尽
从 理原理来说, 成 应该是 , 由于我 图 了预
理,所以理解成 称平面上的 并不会带来什么坏 。于是, 不引
起 义的情 下,我 也不加 制 称后一种情 为 。
式(5.3) 了 P
和 的 之 的空 关 。不过, 相机中,
我 最终获得的是一个个的 ,这需要 成 平面上 进行 样和
量化。为了 感器 感受 的光 转 成图 的过程,我 设
理成 平面上 着一个 平面 。我 平面得 了o-u-v
P
′ 的 像素坐标 u,v
:[ ]T 。
我 的习惯 Z 左 :
该式中,我 中 的量组成的矩阵称为相机的 内参数矩阵
K
(CameraIntrinsics) 。 常认为,相机的 参 出厂之后是
的,不会 用过程中发生变化。有的相机生产厂商会告诉 相机的
参, 有时需要 己确 相机的 参,也 是所谓的 。 于标 标定
业已成 ,且 上 找 量的标 ,这里 不介 了。
有 参, 也有相 的 参。 虑 式(5.6)中我 用的是
P 相机坐标 下的坐标。由于相机 运动,所以 的相机坐标应该是 P
P
的世界坐标(记为 w ),根 相机的当前位 变 相机坐标 下的
果。相机的位 由 的旋转矩阵 R 和平移向量t 来 。 么有:
Pc 可以看成一个二 的齐次坐标,称为归一化坐标 。 位于
这时
相机前方z =1 的平面上。该平面称为 归一化平面 。由于 Pc 过 参
之后 得 了 坐标,所以我 可以 坐标[u,v ] 看成 归一化
T
平面上的 进行量化 量的 果。
至此, 相机的成 我 讲 楚了。
5.1.2 畸变
为了获得 的成 果,我 相机的前方加了透 。透 的加
成 过程中光 的 会产生新的影响:一是透 的形 光
的影响,二是 机械组装过程中,透 和成 平面不可 平
行,这也会 得光 穿过透 影 成 面时的位 发生变化。
由透
形 引起的畸变称为 。 径向畸变
中,一条直
影 平面上还是一条直 。可是, 际 的 片中, 机的
透 往往 得真 环 中的一条直 图片中变成了曲 [2] 。越靠近图
的 ,这种现象越明显。由于 际加工制 的透 往往是中心 称
的,这 得不规则的畸变 常径向 称。 主要分为两 : 桶形畸
变 枕形畸变
和 , 图5-3所示。
图5-3 径向畸变的两种 。
桶形畸变是由于图 率随着与光 之 的 离 加 ,
枕形畸变则恰 相反。 这两种畸变中,穿过图 中心和光 有交 的
直 还 形 不变。
除了透 的形 会引 径向畸变 , 相机的组装过程中由于不
透 和成 面严格平行也会引 切向畸变 , 图5-4所示。
图5-4 切向畸变来 示意图。
为更 理解径向畸变和切向畸变,我 用更严格的 形式 两
进行 。我 知 ,平面上的 意一 p
可以用笛卡 坐标表示为
x,y
[ ]T ,也可以 成极坐标的形式[ r,θ
]T ,其中 表示 与 r p
坐标 原 之 的 离, θ 表示与 平 的夹角。径向畸变可看成坐标
着 度方向发生了变化 δr
,也 是其 离原 的 度发生了变
化。切向畸变可以看成坐标 着切 方向发生了变化,也 是 平夹
角发生了变化δθ 。
于 径向畸变
,无论是桶形畸变还是枕形畸变,由于 是随着
与中心之 的 离 加 加, 此可以用一个 项式 来 畸变
前后的坐标变化:这 畸变可以用与 中心的 离有关的二次及高次
项式 进行 正。其中[ x,y
]T 是未 正的 的坐标,[ corrected x ,y
corrected ]T 是 正后的 的坐标。 意, 是归一化平面 上的 ,
不是 平面上的 。
此 , 合 式 (5.11) 和 式 (5.12) , 于 相 机 坐 标 中 的 一 P
(X,Y,Z ),我 过5个畸变 找 这个 平面上的正确位
:
1. 三 空 影 归一化图 平面。设 的归一化坐标为[ x,y
]T 。
2. 归一化平面上的 进行径向畸变和切向畸变 正。
3. 正后的 过 参 矩阵 影 平面,得 该 图
上的正确位 。
上面的 正畸变的过程中,我 用了5个畸变项。 际应用中,
可以 正 ,比 只 k ,p ,p
1 1 2 这3项等。
图5-5 可 存 的位 。
量 离( 度)的方式有很 种, 人眼 可以根 左右
眼看 的景 差异( 称视差)来 断 与我 之 的 离。双目相
机的原理亦是 此: 过同步 集左右相机的图 ,计 图 视差,
来估计 一个 的 度。下面 单讲讲双目相机的成 原理( 图5-6
所示)。
双目相机一 由左眼相机和右眼相机两个 平 的相机组成。当
也可以 成上下两个目[4] ,不过我 见 的主 双目 是 成左右形
式的。 左右双目相机中,我 可以 两个相机 看 相机。
是 平 的,意味着两个相机的光 中心 位于 x
上。两 之 的
离称为双目相机的 基线 (Baseline,记b),是双目相机的重要参
。
图5-6 双目相机的成 。O L ,O R 为左右光 中心,方框为成 平面, 为 f
。 u L 和u R 为成 平面的坐标。请 意, 图中坐标 义, u R 应该是负
,所以图中标出的 离为 -u R 。
现 , 虑一个空 P, 左眼相机和右眼相机各成一 ,记
PL ,PR。由于相机 的存 ,这两个成 位 是不同的。理想情
下,由于左右相机只 x 上有位移, 此 P 的 也只 x ( 应图
的u )上有差异。记 的左 坐标为uL ,右 坐标为uR 。 么,其
几 关 图5-6右 所示。根 △PPL PR 和△POL OR 的相 关 ,有:
稍加 理,得:
d
这里, 为左右图的 坐标之差,称为 (Disparity)。根 视差
视差,我 可以估计一个 与相机之 的 离。视差与 离成反比:
视差越 , 离越近[5] 。同时,由于视差最 为一个 ,于是双目的
度存 一个理论上的最 ,由 确 。我 看 ,当 fb 越 时,
双目 的最 离 会越远;反之, 双目器件则只 量很近
的 离。
虽 由视差计 度的公式很 , 视差 d本 的计 却比
难。我 需要确切 知 左眼图 某个 出现 右眼图 的哪一个位
(即 应关 ),这件事亦属于“人 觉得 易 计 机觉得
难”的 务。当我 想计 个 的 度时,其计 量与 度 成
为问题, 且只有 图 纹理变化丰 的 方才 计 视差。由于计
量的原 ,双目 度估计仍需要 用GPU FPGA来计 。这 第13讲中
。
5.1.4 RGB-D相机模型
相比于双目相机 过视差计 度的方式,RGB-D相机的 更
为“主动”一些, 主动 量 个 的 度。目前的RGB-D相机
原理可分为两 (见图5-7):
1. 过 红外结构光 (Structured Light)来 量 离的。
有Kinect 1代、Project Tango 1代、Intel RealSense等。
2. 过 飞行时间法 (Time-of- fl ight,ToF)原理 量 离
的。 有Kinect 2代和一些现有的ToF 感器等。
图5-7 RGB-D相机原理示意图
5.2 图像
相机加上 , 三 世界中的 息转 成了一张由 组成的
片,随后存 计 机中, 为后 理的 来 。 中,图
可以用一个矩阵来 ; 计 机中, 占 一 连 的磁盘
存空 ,可以用二 组来表示。这样一来,程序 不必区 理
的是一个 矩阵,还是有 际意义的图 了。
本 ,我 介 计 机图 理的一些 本操 。 , 过
OpenCV中图 的 理,理解计 机中 理图 的常见步骤,为后
章 下 础。
计算机中图像的表示
我 从最 单的图 —— 度图说起。 一张 度图中, 个
位 (x,y ) 应一个 度 I ,所以,一张 度为 w 、高度为 h 的 图
, 上可以记为一个矩阵:
,计 机并不 表 个 空 ,所以我 只 某个
图 进行量化。 ,常见的 度图中,用0~255的 (即一个
unsigned char,1个字 )来表 图 的 度 。 么,一张 度为
640 、高度为480 分 率的 度图 可以表示为
为什么这里的二 ×
组是480 640呢? 为 程序中,图 以二
组形式存 。 的第一个下标是 组的行, 第二个下标则是列。
图 中, 组的行 应图 的高度, 列 应图 的 度。
下面 这幅图 的 。图 是由 组成的。当访问某一
个 时,需要 明 所 的坐标, 图5-8所示。
图5-8 图 坐标示意图。
应着 度 ( I x,y
)的读 。请 意这里的 和 的顺序。虽 x y
我 不厌其 讨论坐标 的问题, 是 这种下标顺序的 误,仍
会是新 调试过程中 常碰 的,且具有一 隐蔽性的 误之一。
果 程序时不慎调 了 的坐标, 译器无x,y 息,
所 看 的只是程序运行中的一个越界 误 已。
一个 的 度可以用8位 记录,也 是一个0~255的 。当我
要记录的 息更 时,一个字 恐怕 不 了。 , RGB-D相机的
度图中,记录了各个 与相机之 的 离。这个 离 常是以
为单位, RGB-D相机的量程 常 十几 左右,超过了255。这时,人
会 用16位 (C++中的unsigned short)来记录 度图的 息,也
是位于0~65536的 。 成 的话,最 可以表示65 ,足 RGB-D
相机 用了。
彩图 的表示则需要 (channel)的 念。 计 机中,我
用 、 和蓝 这三种颜 的组合来表 意一种 彩。于是 于
一个 , 要记录其R、G、B三个 , 一个 称为一个
。 ,最常见的彩 图 有三个 , 个 由8位 表示。
这种规 下,一个 占 24位空 。
的 量、顺序 是可以 由 义的。 OpenCV的彩 图 中,
的默认顺序是B、G、R。也 是说,当我 得 一个24位的 时,
前8位表示蓝 ,中 8位为 ,最后8位为 。同理,亦可 用
R、G、B的顺序表示一个彩 图。 果还想表 图 的透明度, 用
R、G、B、A 个 。
5.3 实践:图像的存取与访问
下面 过一个 示程序来理解, OpenCV中图 是 存取, 我
又是 访问其中的 的。
5.3.1 安装OpenCV
OpenCV[6] 了 量的开 图 ,是计 机视觉中 用极广的
图 理 库。本书也 用OpenCV 本的图 理。 用之前,
建议读 从 代码安装 。 Ubuntu下,有 从源代码安装 只安装库文 和
件 两种方式可以 :
1.从 代码安装,是 从OpenCV 站下 所有的OpenCV 代码,并
机器上 译安装,以 用。 是可以 的版本比 丰 , 且
看 代码,不过需要 费一些 译时 。
2.只安装库 件,是 过Ubuntu来安装由Ubuntu社区人员已
译 的库 件,这样 无须重新 译一 。
由于我 用 新版本的OpenCV,所以必须从 代码来安装 。一
来,可以调 一些 译 项,匹 程环 ( ,需不需要GPU加速
等);再 , 代码安装可以 用一些额 的功 。OpenCV目前 护了
两个主要版本,分为OpenCV 2.4 列和OpenCV 3 列。本书 用OpenCV
3 列。
由于OpenCV工程比 , 不 本书的3rdparty下了。请读 从
http://opencv.org/downloads.html下 , OpenCV for Linux版本
即可。 会获得一个 opencv-3.1.0.zip这样的压 包。 解压
意目录下,我 发现OpenCV亦是一个cmake工程。
译之前,先来安装OpenCV的 赖项:
5.3.2 操作OpenCV图像
下来 过一个 程 悉一下OpenCV 图 的操 。
slambook/ch5/imageBasics.cpp
该 程中,我 示了 下几个操 :图 读取、显示、
历、 制、赋 等。 分的 解已 代码里面。 译该程序时,
需要 CMakeLists.txt中 加OpenCV的 件, 后 程序 库
件上。同时,由于 用了C++11标 ( nullptr和chrono),还需要设
一下 译器:
5.4 实践:拼接点云
最后,我 来练习一下相机 参的 用方 。本 程序 了5张
RGB-D图 ,并且知 个图 的 参和 参。根 RGB-D图 和相机
参,我 可以计 一个 相机坐标 下的位 。同时,根 相
机位 ,又 计 这些 世界坐标 下的位 。 果 所有 的
空 坐标 出来,相当于构建一张 于 图的东西。现 我 来
练习一下。
我 了5 图 ,位于slambook/ch5/joinMap中。 color/下有
1.png 5.png 5张RGB图, depth/下有5张 应的 度图。同时,
T
pose.txt 件给出了5张图 的相机位 (以 wc 形式)。位 记录的形
式是平移向量加旋转 :
其中 qw 是 的 。 ,第一 图的 参为:
现 分的程序:
slambook/ch5/joinMap/joinMap.cpp
一 说明:
1.14~37行,读取彩 和 度图 及位 息,并 位 从
与平移向量转 为变 矩阵。 意程序里 用了boost::format进行字
符串的格式化。
2.65~78行:计 位于( u,v )、
度为 的 d 相机坐标 下的
位 ,并根 参 变 世界坐标。我 知 p
,相机坐标 c
坐标( u,v,d )的关 为
[1] 图 坐标 ,见本讲第2 。
[3] 意 可 Z
于1,说明该 位于归一化平面后面, 可 不会 相机平面上成
, 当中要检查一次。
[6] 方主页:http://opencv.org。
[7] :http://pointclouds.org/。
这些 的影响下,我 希望 过带 的 z 和u 推断位 x
和 y
图 (以及 的 率分布),这构成了一个 态估计问题。由于
SLAM过程中,这些 是随时 逐 来的,所以 历史上很 一
时 ,研究 用 器, 其是 展卡 曼 器(EKF) 解
。卡 曼 器关心当前时刻的 态估计 k , x
之前的 态则不
虑;相 ,近年来普 用的非 性优化方 , 用所有时刻 集
的 进行 态估计,被认为优于 的 器[13] , 成为当前视觉
SLAM的主 方 。 此,本书重 介 以非 性优化为主的优化方 ,
卡 曼 器则留 第10讲再进行讨论。本讲 介 非 性优化的
本知识, 后 第10讲、第11讲中 进行更 的分析。
首先,从 率 角度来看一下我 正 讨论什么问题。 非 性优
化中, 所有待估计的变量 一个“ 态变量”中:
x u z
于 ,这里 和 也是 所有 的 称。 ,当 有
量运动的 感器, 只有一张张的图 时,即只 虑观 方程带来的
时,相当于估计 ( P x|z )的条件 率分布。 果忽略图 时 上的
, 看 一 彼此 有关 的图片,该问题也称为Structure
from Motion(SfM),即 从许 图 中重建三 空 构[22] 。 这
种情 下,SLAM可以看 图 具有时 先后顺序,需要 时 解一个SfM
问题。为了估计 态变量的条件分布, 用贝叶斯 则,有:
6.1.2 最小二乘的引出
么 最 估计呢?我 说, 高斯分布的 设下,最
有 单的形式。 顾观 , 于某一次观 :
是一个高斯分布。为了计 最 化的 xk ,yj ,我 往往
用 最小化负对数 的方式来 一个高斯分布的最 。
高斯分布 负 下有 的 形式。 虑 意高 高斯分布 x~
N (µ, Σ), 的 率 度 展开形式为
其取负 ,则变为
原分布 最 化相当于 负 最 化。 最 化上式的 x
x
时,第一项与 无关,可以略去。于是,只要最 化右 的二次 项,
得 了 态的最 估计。代 SLAM的观 ,相当于 :
我 发现,该式等价于最 化 项(即误差)的平方(Σ 意
义下)。 此, 于所有的运动和 意的观 ,我 义 与估计
之 的误差:
6.2 非线性最小二乘
我 先来 虑一个 单的最 二乘问题:
这里 变量 x∈
R f
n , 是 意非 性 ,我 设 有 m : f (x
)∈ R m 。下面讨论 解这样一个优化问题。
果 是个 f 形式上很 单的 , 么问题也许可以用解析形
式来 。令目标 的导 为零, 后 解 x 的最优 , 和 二
的极 一样:
解此方程, 得 了导 为零 的极 。 可 是极 、极
鞍 的 ,只要逐个比 的 即可。 是,这个方程是
否 易 解呢?这取 于 导 的形式。 SLAM中,我 用李代 f
来表示机器人的旋转和位移。尽 我 李代 一讲讨论了 的导 形
式, 这不代表我 顺 解上式这样一个 杂的非 性方程。
于不方 直 解的最 二乘问题,我 可以用 迭代 的方式,从
一个 出发,不断 更新当前的优化变量, 目标 下降。具
步骤可列 下:
1.给 某个 x 0 。
极 。
3. ∆ xk 足 ,则 止。
这让 解导 为零的问题变成了一个不断寻找梯度并下降的过
程。直 某个时刻 量非常 ,无 再 下降。此时 ,目
标 了一个极 ,我 也 成了寻找极 的过程。 这个过程
中,我 只要找 代 的梯度方向即可, 无须寻找 导 为零
的情 。
下来的问题是, 量∆ xk 确 ? 际上,研究 已 费
了 量 力 量的 解方式。我 介 两 办 ,用不同的
来寻找这个 量。目前这两种方 视觉SLAM的优化问题上被广
用, 优化库 可以 用 。
6.2.1 一阶和二阶梯度法
解 量最直观的方式是 目标 x 附近进行 勒展开:
J ‖f x ‖
这里 是 x
( ) 2 关于 的导 (雅可比矩阵), 则是二 H
阶导 ( 〔Hessian〕矩阵)。我 可以 留 勒展开的一阶
二阶项, 应的 解方 则为一阶梯度 二阶梯度 。 果 留一阶梯
度, 么 量的解 为
右 x
等式关于∆ 的导 并令 为零, 得 了 量的解:
6.2.2 高斯牛顿法
高斯 顿 是最优化 中最 单的方 之一。 的思想是 f (x
)进行一阶的 勒展开(请 意不是目标 f x
( )2 ):
J x f x x
这里 ( )为 ( )关于 的导 , 际上是一个 矩阵,也是 m×n
一个雅可比矩阵。根 前面的框架,当前的目标是寻找下降矢量∆ , x
得‖f x x ‖
( +∆ ) 2 最 。为了 ∆ ,我 需要解一个 性的最x
二乘问题:
这个方程与之前有什么不一样呢?根 极 条件, 上 目标
∆x 导,并令导 为零。由于这里 虑的是∆ 的导 ( 不是 x x
),我 最后 得 一个 性的方程。为此,先展开目标 的平方
项:
x
上式关于∆ 的导 ,并令其为零:
可以得 下方程组:
这里 左 记 H 是有意义的。 比 顿 可见,高斯 顿 用 T J
J 为 顿 中二阶Hessian矩阵的近 ,从 省略了计 的过程。 H 求
解增量方程是整个优化问题的核心所在 。 果我 顺 解出该方
程, 么高斯 顿 的 步骤可以 成:
1.给 x 0 。
2. 于第 k次 代, 出当前的雅可比矩阵 J (xk )和误差f (xk )。
3. 解 量方程: H ∆xk =g 。
4. xk 足
∆ ,则 止。否则,令 xk +1 xk +∆xk ,
= 第2步。
6.2.3 列文伯格—马夸尔特方法
由于高斯 顿 中 用的近 二阶 勒展开只 展开 附近有
的近 果,所以我 很 想 应该给∆ 加一个 赖区 x
(Trust Region),不 让 太 得近 不 确。非 性优化中有
一 列这 方 ,这 方 也被称为 信赖区域方法
( Trust Region
Method)。 赖区 里 ,我 认为近 是有 的;出了这个区 ,
近 可 会出问题。
么 确 这个 赖区 的 呢?一个比 的方 是根 我
的近 际 之 的差异来确 : 果差异 ,我 让
尽可 ; 果差异 ,我 这个近 。 此, 虑 用
来
断 勒近 是否 。 ρ
的分 是 际 下降的 ,分 是
近 下降的 。 果 ρ 近于1,则近 是 的。 果 太 ,说 ρ
明 际 的 远 于近 的 ,则认为近 比 差,需要 近
。反之, 果 比 ρ ,则说明 际下降的比预计的更 ,我
可以 近 。
于是,我 构建一个 版的非 性优化框架,该框架会比高斯
顿 有更 的 果:
1.给 x 0 ,以及 优化半径 µ。
2. 于第 k次 代, 解:
这里 µ 是 赖区 的半径,D 后 说明。
3.计 ρ 。
4. 则µ =2µ 。
5. 则µ =0. 5µ 。
6. 果ρ 于某 ,则认为近 可行。令xk +1 =xk +∆xk 。
7. 断 是否 。 不 则 第2步,否则 束。
这里近 的 和 是 验 ,可以替 成 的
。 式(6.24)中,我 量 于一个半径为 的球中,认为只 µ
这个球 才是有 的。带上 之后,这个球可以看成一个椭球。 列 D
伯格 出的优化方 中, 取成单位阵 ,相当于直 D ∆ 约束 一 I x
个球中。随后,马夸 出 取成非负 D
角阵—— 际中 常用 T J
J的 角 平方根, 得 梯度 的 度上约束 更 一些。
不论 , 列 伯格—马夸 优化中,我 需要解式(6.24)
样一个 问题来获得梯度。这个 问题是带不等式约束的优化问题,
我 用 格朗日乘 转化为一个无约束优化问题:
这里 λ
为 格朗日乘 。 于高斯 顿 中的 , 展开
后,我 发现该问题的核心仍是计 量的 性方程:
我 看 ,当参 比 λ H
时, 占主要 位,这说明二次近
该 是比 的,列 伯格—马夸 方 更 近于高斯 顿
。另一方面,当 比 λ 时, λI
占 主要 位,列 伯格—马夸
方 更 近于一阶梯度下降 (即最速下降),这说明附近的二次近
不 。列 伯格—马夸 方 的 解方式,可 一 程度上
性方程组的 矩阵的非 异和病态问题, 更稳 、更 确的
x
量∆ 。
际中,还存 许 其 的方式来 解 的 量, Dog-Leg
等方 。我 这里所介 的,只是最常见 且最 本的方式,也是视
觉SLAM中用得最 的方式。总 言之,非 性优化问题的框架,分为
Line Search和Trust Region两 。Line Search先 方向, 后
该 方 向 寻 找 步 , 以 最 速 下 降 和 高 斯 顿 为 代 表 。 Trust
Region则先 区 ,再 虑找该区 的最优 。此 方 以列
伯格—马夸 方 为代表。 际问题中,我 常 高斯 顿
列 伯格—马夸 方 为梯度下降 略。
6.2.4 小结
由于不希望这本书变成一本让人觉得 疼的 科书,所以这里
只 列了最常见的两种非 性优化方案——高斯 顿 和列 伯格—马
夸 方 。我 开了许 性质上的讨论。 果读 优化感兴
趣,可以进一步 读专 介 优化的书 (这是一个很 的课
题), [23]。以高斯 顿 和列 伯格—马夸 方 为代表的优
化方 , 很 开 的优化库中 已 现并 给用 ,我 会 下
进行 验。最优化是 理许 际问题的 本 工具,不光 视觉
SLAM中起着核心 用, 于 度 习等其 领 , 也是 解问题
的核心方 之一。我 希望读 根 力,去了解更 的最优
化 。
也许 发现了,无论是高斯 顿 还是列 伯格—马夸 方 ,
最优化计 时, 需要 变量的 。 也许会问 ,这个
否随意设 ?当 不是。 际上非 性优化的所有 代 解方
案, 需要用 来 一个 的 。由于目标 太 杂,导致
解空 上的变化难以琢磨, 问题 不同的 往往会导致不
同的计 果。这种情 是非 性优化的 病: 易陷
极 。 此,无论是哪 科 问题,我 应该有科
, 视觉SLAM问题中,我 会用ICP、PnP之 的 优化
。总之,一个 的 最优化问题非常重要!
也许读 还会 上面 的最优化产生疑问: 解 性 量方
程组呢?我 只讲 了 量方程是一个 性方程, 是直 矩阵
进行 岂不是要进行 量的计 ?当 不是。 视觉SLAM 里,
常 x
∆ 的 度 几百 上千, 果 是要 规 的视觉三
重建, 会 常发现这个 度可以 易 几十万甚至更高的级 。要
么 个矩阵进行 是 理器无 负 的, 此存 着许
性方程组的 解方 。 不同的领 有不同的 解方式,
几乎 有一种方式是直 矩阵的 ,我 会 用矩阵分解的方
来解 性方程, QR、Cholesky等分解方 。这些方 常 矩阵论
等 科书中可以找 ,我 不 加介 。
幸运的是,视觉SLAM里这个矩阵往往有 的稀疏形式,这为 时
解优化问题 了可 性。我 第10讲中详细介 的原理。
用稀疏形式的消 、分解,最后再进行 解 量,会让 解的 率
高。 很 开 的优化库上, 度为一万 的变量 一 的PC上 可
以 几秒甚至更短的时 被 解出来,其原 也是用了更加高级的
工具。视觉SLAM 现 时 现,也 亏了 矩阵是稀疏
的, 果矩阵是稠 的,恐怕优化这 视觉SLAM 不会被 界广
了[24,25,26] 。
6.3 实践:Ceres
我 前面说了很 理论,现 来 一下前面 的优化 。
本讲的 分中,我 主要向 介 两个C++的优化库:来 谷 的
Ceres库[27] 以及 于图优化的g2o库 [28] 。由于g2o的 用还需要介 一
图优化的相关知识,所以我 先来介 Ceres, 后介 一些图优化理
论,最后来讲g2o。由于优化 之后的“视觉里程计”和“后端”中
会出现,所以请读 务必 优化 的意义,理解程序的 。
6.3.1 Ceres简介
Ceres库面向 用的最 二乘问题的 解, 为用 ,我 需要 的
是 义优化问题, 后设 一些 项, 进Ceres 解即可。Ceres
解的最 二乘问题最一 的形式 下(带 界的核 最 二乘):
6.3.2 安装Ceres
为 了 用 Ceres , 首 先 需 要 进 行 译 安 装 ! 建 议 去 GitHub 上 下
Ceres:https://github.com/ceres-solver/ceres-solver。本书资 的
3rdparty下也附带了Ceres库。
与之前碰 的库一样,Ceres是一个cmake工程。先来安装 的 赖
项, Ubuntu中可以用apt-get安装,主要是谷 己 用的一些日志和
试工具:
6.3.3 使用Ceres拟合曲线
我 的 示 验包 用Ceres和 下来的g2o进行曲 合。 设
有一条 足以下方程的曲 :
其中 a,b,c
为曲 的参 , 为高斯 。我 w
意 了这样一
个非 性 ,以 问题不至于太 单。现 , 设我 有 个关于 N x,y
的观 ,想根 这些 出曲 的参 。 么,可以 解下
面的最 二乘问题以估计曲 参 :
请 意, 这个问题中,待估计的变量是 a,b,c , x
不是 。我
一个程序,先根 生成 x,y
的真 , 后 真 中 加高斯分布
的 。随后, 用Ceres从带 的 合参 。
slambook/ch6/ceres_curve_ fi tting/main.cpp
程序中需要说明的 方 已加 。可以看 ,我 用OpenCV的
生成器生成了100个带高斯 的 ,随后 用Ceres进行 合。
Ceres的用 下:
1. 义Cost Function 。方 是书 一个 ,并 中 义带
板参 的()运 符,这样该 成为了一个 (Functor,C++术
语)。这种 义方式 得Ceres可以 调用 一样, 该 的某个 象
(比 a)调用a<double>()方 ——这 象具有 样的行为。
2.调用AddResidualBlock 误差项 加 目标 中。由于优化需
要梯度,我 有 干种 :(1) 用Ceres的 动 导(Auto Di
ff);(2) 用 导(Numeric Di ff);(3) 行推导解析的导
形式, 给Ceres。其中 动 导 码上是最方 的,于是我
用 动 导。
3. 动 导需要 误差项和优化变量的 度。这里的误差是标
量, 度为1;优化的是 a,b,c
三个量, 度为3。于是, 动 导
的 板参 中设 变量 度为1、3。
4.设 问题后,调用solve 进行 解。 可以 options里
(非常详细的)优化 项。 ,可以 用Line Search还是
Trust Region、 代次 、步 ,等等。读 可以查看Options的 义,
看看有哪些优化方 可 ,当 默认的 已 可用于很广 的问题
了。
最后,我 来看看 验 果。调用build/curve_ fi tting查看优化
果:
从Ceres给出的优化过程可以看 , 误差 约从18248下降 了
50.9,并且梯度也是越来越 。 代22次后 ,最后的估计
为
我 设 的真 为
相差不 。
为了更直观 显示 ,可以 画出来, 图6-1所示。其中显示
了带 的 、真 和估计 ,可以看 估计 和真
非常 近,几乎重合。我 同时记录了Ceres的运行时 , 这样一个
100个 的优化问题,计 时 约1.3ms(虚 机上)。
希望读 过这个 单的 Ceres的 用方 有一个 致了解。
的优 是 了 动 导工具, 得不必去计 很麻 的雅可比矩
阵。Ceres的 动 导是 过 板 现的, 译时期 可以 成 动
导工 ,不过仍 是 导 。本书 分时 仍 会介 雅可比矩
阵的计 , 为 样 理解问题更有帮助, 且 优化中更 出现问
题。此 ,Ceres的优化过程 也很丰 , 其 合很广 的最 二乘
优化问题,包 SLAM中的各种问题。
6.4 实践:g2o
本讲的第2个 分 介 另一个(主要 SLAM领 )广为 用的
优化库:g2o(General Graphic Optimization,G2 O)。 是一个 于
图优化 的库。图优化是一种 非 性优化与图论 合起来的理论, 此
用 之前,我 一 幅介 一下图优化理论。
6.4.1 图优化理论简介
我 已 介 了非 性最 二乘的 解方式。 是由很 个误差
项之和组成的。 ,仅有一组优化变量和许 个误差项,我 并不
楚 之 的 关联 x
。比 ,某个优化变量 j 存 于 个误差项中呢?
我 证 的优化是有意义的吗?进一步,我 希望 直观 看
该优化问题长什么样 。于是, 涉 了图优化。
图优化,是 优化问题表现成图( Graph) 的一种方式。这里的图
是图论意义上的图。一个图由 干个顶点( Vertex) ,以及连 着这
些顶 的边( Edge) 组成。进 ,用顶点 表示优化变量 ,用边 表示
误差项 。于是, 意一个上 形式的非 性最 二乘问题,我 可以
构建与之 应的一个图 。
图6-2是一个 单的图优化 。我 用三角形表示相机位 ,
用 形表示 标 , 构成了图优化的顶 ;同时, 表示相机的
运动 ,虚 表示观 , 构成了图优化的 。此时,虽
个问题的 形式仍是式(6.12) 样, 现 我 可以直观 看 问题
的结构 了。 果希望,也可以 去掉孤立顶点 优先优化边数较多
(或按图论的术语,度数较大)的顶点 这样的 进。 是最 本的图优
化是用图 来表 一个非 性最 二乘的优化问题。 我 可以 用
图 的某些性质 更 的优化。
图6-2 图优化的 。
6.4.2 g2o的编译与安装
用一个库之前,我 需要 进行 译和安装。读 应该已
验过很 次这种过程了, 本 同 异。关于g2o,读 可以从
GitHub下 :https://github.com/RainerKuemmerle/g2o, 从本书
的第三方代码库中获得。
解压代码包后, 会看 g2o库的所有 码, 也是一个cmake工
程。我 先来安装 的 赖项( 分 赖项与Ceres重合):
6.4.3 使用g2o拟合曲线
为了 用g2o,首先要 曲 合问题 象成图优化。这个过程中,
只要记住 节点为优化变量,边为误差项 即可。曲 合的图优化问题可
以画成图6-3的形式。
6.5 小结
本 介 了SLAM中 常碰 的一种非 性优化问题:由许 个误差
项平方和组成的最 二乘问题。我 介 了 的 义和 解,并且讨论
了两种主要的梯度下降方式:高斯 顿 和列 伯格—马夸 方 。
分中,分 用了Ceres和g2o两种优化库 解同一个曲 合
问题,发现 给出了相 的 果。
由于还 有详细谈Bundle Adjustment,所以 分 了曲
合这样一个 单 有代表性的 ,以 示一 的非 性最 二乘 解
方式。 , 果用g2o来 合曲 ,必须先 问题转 为图优化,
义新的顶 和 ,这种 是有一些 的——g2o的主要目的并不
此。相比之下,Ceres 义误差项 曲 合问题则 了很 , 为
本 即是一个优化库。 , SLAM中更 的问题是,一个带有许 个
相机位 和许 个空 的优化问题 解。 ,当相机位 以
李代 表示时,误差项关于相机位 的导 计 , 是一件 得详
细讨论的事。我 后 发现,g2o 了 量的顶 和 的
,非常 于相机位 估计问题。 Ceres中,我 不得不 己 现
一个Cost Function,有一些不 。
分的两个程序中,我 有去计 曲 关于三个参
的导 , 是 用了优化库的 导,这 得理论和代码 会 一
些。Ceres库 了 于 板 的 动 导和运行时的 导, g2o
只 了运行时 导这一种方式。 是, 于 问题, 果
推导出雅可比矩阵的解析形式并告诉优化库, 可以 导中
的诸 问题。
最后,希望读 应Ceres和g2o这些 量 用 板 程的方
式。也许一开 会看上去比 吓人( 是Ceres设 Problem和g2o
化 分的代码), 是 悉之后, 会觉得这样的方式是 的, 且
易 展。我 SLAM后端一讲中 讨论稀疏性、核 、位 图
(Pose Graph)等问题。
习题
1.证明 性方程 Ax =b 当 矩阵 A超 时,最 二乘解为 x =(A T
A)- A b。
1 T
[1] 核 的详细讨论见第10讲。
[3] ,
http://www.numerical.rl.ac.uk/people/nimg/course/lectures/raphael/lectures/l
ec7slides.pdf。
第7讲 视觉里程计1
主要目标
1.理解图 征 的意义,并 单幅图 中 取出 征 及 幅
图 中匹 征 的方 。
2.理解 极几 的原理, 用 极几 的约束,恢 出图 之 的
机的三 运动。
3.理解PNP问题,以及 用已知三 构与图 的 应关 解
机的三 运动。
4.理解ICP问题,以及 用 云的匹 关 解 机的三 运动。
5.理解 过三角化获得二 图 上 应 的三 构。
本书前面介 了运动方程和观 方程的具 形式,并讲解了以非
性优化为主的 解方 。从本讲开 ,我 束 础知识的 步
正题: 第2讲的 ,分 介 视觉里程计、优化后端、 环检 和
图构建4个 。本讲和下一讲主要介 为视觉里程计的主要理论,
后 第9讲中进行一次 。本讲关 于 征 方式的视觉里程计
。我 介 什么是 征 、 取和匹 征 ,以及 根
的 征 估计相机运动。
7.1 特征点法
顾第2讲的 ,我 说过视觉SLAM主要分为视觉前端和优化后
端。前端也称为视觉里程计(VO)。 根 相 图 的 息估计出 略
的相机运动,给后端 的 。VO的 现方 , 是否需要
取 征,分为 征 的前端及不 征的直 前端。 于 征
的前端, 久以来(直 现 )被认为是视觉里程计的主 方 。 运
行稳 , 光 、动态 不 感,是目前比 成 的解 方案。 本
讲中,我 从 征 , 习 取、匹 图 征 , 后
估计两帧之 的相机运动和 景 构,从 现一个 本的两帧 视觉
里程计。
7.1.1 特征点
VO的主要问题是 根 图 来估计相机运动。 ,图 本 是
一个由亮度和 彩组成的矩阵, 果直 从矩阵层面 虑运动估计,
会非常 难。所以,我 习惯于 用这样一种 :首先,从图 中
取比 有代表性 点 的 。这些 相机视角发生 量变化后会 不
变,所以我 会 各个图 中找 相同的 。 后, 这些 的 础
上,讨论相机位 估计问题,以及这些 的 位问题。 典SLAM
中, 称为路标。 视 觉 SLAM 中 , 标 则 是 图 征
(Feature)。
根 百科的 义,图 征是一组与计 务相关的 息,计
务取 于具 的应用[29] 。 言之, 特征是图像信息的另一种数
字表达形式 。一组 的 征 于 务上的最终表现至关重要,所
以 年来研究 费了 量的 力 征进行研究。 字图 计
机中以 度 矩阵的方式存 ,所以最 单的,单个图 也是一
种“ 征”。 是, 视觉里程计中,我 希望 特征点在相机运动之后
保持稳定 , 度 受光 、形变、 材质的影响严重, 不同图
变化非常 ,不 稳 。理想的情 是,当 景和相机视角发生 量
变时,还 从图 中 断哪些 方是同一个 , 此仅 度 是不
的,我 需要 图 取 征 。
征 是图 里一些 特别的地方
。以图7-1为 。我 可以 图
中的角 、 和区 当成图 中有代表性的 方。不过,我 更
易 确 出,某两幅图 中出现了同一个角 ;同一个 则稍微
难一些, 为 着该 前进,图 是相 的;同一个区 则是最
难的。我 发现,图 中的角 、 相比于 区 言更加“
”, 不同图 之 的 识度更强。所以,一种直观的 取 征的方
式 是 不同图 认角 ,确 的 应关 。 这种 中,
角 是所谓的 征。
, 应用中,单 的角 不 足我 的很 需
。 ,从远 看上去是角 的 方,当相机走近之后,可 不显
示为角 了。 ,当旋转相机时,角 的 观会发生变化,我 也
不 易 认出 是同一个角 。为此,计 机视觉领 的研究
年的研究中设计了许 更加稳 的 图 征, 著名的SIFT[30] 、
SURF[31] 、ORB[32] ,等等。相比于朴 的角 ,这些人工设计的 征
有 下的性质:
1.可重 性(Repeatability):相同的“区 ”可以 不同的图
中找 。
2.可区 性(Distinctiveness):不同的“区 ”有不同的表 。
3.高 率(E ffi ciency):同一图 中, 征 的 量应远 于
的 量。
4.本 性(Locality): 征仅与一 片图 区 相关。
图7-1 可以 为图 征的 分:角 、 、区
征 由 关键点
(Key-point)和 描述子
(Descriptor)两 分组
成。比 ,当谈论SIFT 征时,是 “ 取SIFT关 ,并计 SIFT
”两件事情。关 是 该 征 图 里的位 ,有些 征 还
具有朝向、 等 息。 常是一个向量, 某种人为设计的
方式, 了该关 周 的 息。 是 “ 外观相似的特
征应该有相似的描述子 ”的原则设计的。 此,只要两个 征 的
向量空 上的 离相近, 可以认为 是同样的 征 。
历史上,研究 出过许 图 征。 有些很 确, 相机
的运动和光 变化下仍具有相 的表 , 相应 需要 的计 量。
其 中 , SIFT ( 度不变 征变 , Scale-Invariant Feature
Transform)当属最为 典的一种。 分 虑了 图 变 过程中出现
的光 、 度、旋转等变化, 随之 来的是极 的计 量。由于 个
SLAM过程中图 征的 取与匹 仅仅是诸 环 中的一个, 目前
(2016年)为止,普 PC的CPU还无 时 计 SIFT 征,进行 位与
建图。所以 SLAM中我 甚 用这种“ ”的图 征。
另一些 征,则 虑 当降低 度和 性,以 升计 的速度。
, FAST 关 属于计 快的一种 征 ( 意这里“关
”的表 ,说明 有 ) 。 ORB ( Oriented FAST and
Rotated BRIEF) 征则是目前看来非常具有代表性的 时图 征。
[33]
进了FAST检 不具有方向性的问题,并 用速度极快的二进制
BRIEF[34] , 个图 征 取的环 加速。根 论
中所 试, 同一幅图 中同时 取约1000个 征 的情 下,ORB约
要 费15.3ms,SURF约 费217.3ms,SIFT约 费5228.7ms。由此可以看
出,ORB 了 征 具有旋转、 度不变性的同时,速度方面 升明
显, 于 时性要 很高的SLAM来说是一个很 的 。
分 征 取 具有 的并行性,可以 过GPU等设 来加速计
。 过GPU加速后的SIFT, 可以 足 时计 要 。 是,引 GPU
带来 个SLAM成本的 升。由此带来的性 升是否足以 去 出的
计 成本,需要 的设计人员 细 量。 目前的SLAM方案中,ORB是
质量与性 之 的 中, 此,我 以ORB为代表介 取 征的
个过程。
7.1.2 ORB特征
ORB 征 亦 由 关键点 描述子
和 两 分组成。 的关 称
为“Oriented FAST”,是一种 进的FAST角 ,关于什么是FAST角 我
下 介 。 的 称为BRIEF(Binary Robust Independent
Elementary Feature)。 此, 取ORB 征分为 下两个步骤:
1.FAST角 取:找出图 中的“角 ”。相 于原版的FAST,ORB
中计 了 征 的主方向,为后 的BRIEF 加了旋转不变 性。
2.BRIEF : 前一步 取出 征 的周 图 区 进行 。
下面分 介 FAST和BRIEF。
FAST 关键点
FAST是一种角 ,主要检 度变化明显的 方,以速度
快著称。 的思想是: 果一个 与 的 差 (过亮 过
暗), 么 更可 是角 。相比于其 角 检 ,FAST只需比
亮度的 ,十分快 。 的检 过程 下(见图7-2):
1. 图 中 取 p, 设 的亮度为 Ip 。
2.设 一个 T (比 , Ip 的20%)。
3.以 p 为中心, 取半径为3的 上的16个 。
4. 取的 上有连 的 N个 的亮度 于 Ip +T 于 Ip -T ,
么 p 可以被认为是 征 (N
常取12,即为FAST-12。其 常用
N
的 取 为9和11, 分 被称为FAST-9和FAST-11)。
5.循环以上 步, 一个 行相同的操 。
FAST-12 中,为了更高 ,可以 加一项预 试操 ,以快速
除 不是角 的 。具 操 为, 于 个 ,直 检
上的第1,5,9,13个 的亮度。只有当这4个 中有3个同时
I T
于 p + 于 p I -T
时,当前 才有可 是一个角 ,否则应该直
除。这样的预 试操 加速了角 检 。此 ,原 的FAST角
常出现“扎 ”的现象。所以 第一 检 之后,还需要用非极
制(Non-maximal suppression), 一 区 仅 留响应极
的角 , 角 集中的问题。
图7-2 FAST 征 [33] 。
2. 过矩可以找 图 的质心:
3.连 图 的几 中心 O 与质心C ,得 一个方向向量 于是
征 的方向可以 义为
7.1.3 特征匹配
征匹 ( 图7-4所示)是视觉SLAM中极为关 的一步,
说, 征匹 解 了SLAM中的 关 问题(dataassociation),即确
当前看 的 标与之前看 的 标之 的 应关 。 过 图 与图
图 与 图之 的 进行 确匹 ,我 可以为后 的 态
估计、优化等操 量负 。 ,由于图 征的 性,误
匹 的情 广 存 , 且 期以来一直 有得 有 解 ,目前已
成为视觉SLAM中制约性 升的一 瓶颈。 分原 是 景中 常存
量的重 纹理, 得 征 非常相 。 这种情 下,仅 用
征解 误匹 是非常 难的。
图7-4 两帧图 的 征匹 。
这两个集合 的 应关 呢?最 单的 征匹 方 是
)
Brute-Force Matcher 。即 一个 征 与所有的 量
的 离, 后 序,取最近的一个 为匹 。 离表示了两
个 征之 的 相似程度 ,不过 际运用中还可以取不同的 离度量
。 于 的 , 用 离进行度量即可。 于二进
制的 (比 BRIEF这样的),我 往往 用 明 离(Hamming
distance) 为度量——两个二进制串之 的 明 离, 的是其 不同
位数的个数 。
,当 征 量很 时,暴力匹 的运 量 变得很 ,
是当想要匹 某个帧和一张 图的时 。这不符合我 SLAM中的
时性需 。此时 快速近似最近邻( FLANN 更加 合于匹 ) 量
极 的情 。由于这些匹 理论已 成 , 且 现上也已集成
OpenCV,所以这里 不再 的技术细 了。感兴趣的读 可以参
读 献[36]。
7.2 实践:特征提取和匹配
图7-5 验 用的两帧图 。
图7-6 征 取与匹 果。
7.3 2D-2D:对极几何
7.3.1 对极约束
现 , 设我 从两张图 中得 了一 的 征 , 图7-7
所示。 果有 干 这样的匹 , 可以 过这些二 图 的 应
关 ,恢 出 两帧之 机的运动。这里“ 干 ”具 是
呢?我 会 下 介 。下面先来看看两个图 当中的匹 有什么几
关 。
图7-7 极几 约束。
以图7-7为 ,我 I ,I 之 的运动,设第一
希望 取两帧图
帧 第二帧的运动为R,t 。两个相机中心分 为O ,O 。现 , 虑I
1 2
中有一个 征 p , I 中 应着 征 p 。我 知 两 是
1 2
确 是同一个空间点在
1 1 2 2
过 征匹 得 的。 果匹 正确,说明
两个成像平面上的投影 。这里需要一些术语来 之 的几 关
。首先,连 和连 三 空 中会相交于 P 。这时
O ,O ,P 三 个 可 以 确 一 个 平 面 , 称 为 极平面( Epipolar
plane) 。O O 连 与 平面I ,I 的交 分 为 e ,e 。 e
1 2
Epipolar line) 。
1 2 1 2
直观讲,从第一帧的角度看, 是某个像素可能出现的空间
位置 —— 为该 上的所有 会 影 同一个 。同时, 果
不知 P 的位 , 么当我 第二幅图 上看时,连 也 是
第二幅图 中的极 ) 是P 可 出现的 影的位 ,也 是
第二个相机中的 影。现 ,由于我 过 征 匹 确 了p 的
推断P 的空 位 ,以及相机的运动。要
2
位 ,所以 读 的
是,这完全多亏了正确的特征匹配 。 果 有 征匹 ,我 确
p 底 极 的哪个位 了。 时, 必须 极 上 以获得正确
2
的匹 ,这 第13讲中 。
现 ,我 从代 角度来看一下这里出现的几 关 。 第一帧的
坐标 下,设 的空 位 为 P
根 第5讲介 的 相机 ,我 知 两个 p ,p1 2 的
位 为
K
这里 为相机 参矩阵, 为两个坐标 的相机运动( R,t 果我
愿意,也可以 成李代 形式)。 果 用齐次坐标,也可以 上式
成 乘以非零常 下成立的(up to a scale)等式[2] :
现 ,取:
这里的 x ,x
1 2 是两个 的归一化平面上的坐标。代 上式,
得:
后,两 同时左乘
7.3.2 本质矩阵
根 义,本质矩阵 = ∧ E t R 。 是一个3× 3的矩阵, 有9个未
知 。 么,是不是 意一个3 × 3的矩阵 可以被当成本质矩阵呢?从
E的构造方式上看,有以下 得 意的 方:
•本质矩阵是由 极约束 义的。由于 极约束是 等式为零 的约
束,所以 E
乘以 意非零常 后, 对极约束依然满足 。我 这件事
情称为 E
不同 度下是等价的。
•根 = ∧ E t R
,可以证明[3] ,本质矩阵 E的 异 必 σ,σ,
是[
0]T 的形式。这称为 。 本质矩阵的内在性质
•另一方面,由于平移和旋转各有3个 由度, t∧ R 有6个 由
度。 由于 度等价性, 际上有5个 由度。 E
E 具有5个 由度的事 ,表明我 最 可以用5 来 解E 。
是,E 的 性质是一种非 性性质, 解 性方程时会带来麻 ,
此,也可以只 虑 的尺度等价性 , 用8 来估计 E ——这 是
典的 八点法( Eight-point-algorithm ) 。八 只 用了 E [38,39]
虑一 匹 , 的归一化坐标为 x 1 =[u ,v , 1] ,x
1 1
T
2 =
[u ,v , 1]
2 2
T
。根 极约束,有:
我 矩阵 E 展开, 成向量的形式:
其中 表示 Z
旋转90 ° 得 的旋转矩阵。同时,由于 和 -E
E等价,所以 t
意一个 取负号,也会得 同样的 果。 此,从 E
分解 t,R
时,一 存 4 可 的解。 个
图7-8形象 展示了分解本质矩阵得 的4个解。我 已知空
相机(蓝 )上的 影( ),想要 解相机的运动。
不变的情 下,可以画出4种可 的情 。不过幸运的是,只有第一
种解中 P
两个相机中 具有正的 度。 此,只要 意一 代 4种
解中,检 该 两个相机下的 度, 可以确 哪个解是正确的了。
果 用 的 E
性质, 么 只有5个 由度。所以最 可以 过
5 来 解相机运动[40,41] 。 这种 形式 杂,从工程 现角度
虑,由于平时 常会有几十 乃至上百 的匹 ,从8 至5 意
义并不明显。为 单,我 这里 只介 本的八 。
剩下的问题还有一个:根 性方程解出的 ,可 不 足 的 E E
性质—— 的 异 不一 为 0的形式。这时, σ,σ,
SVD时我
会刻意 Σ矩阵调 成上面的样 。 常的 是, 八 得的 E
进行SVD分解后,会得 异 矩阵Σ=diag( 1 3 ),不 σ ,σ ,σ
σ σ σ
2
设 1 ≥ 2 ≥ 3 。取:
7.3.3 单应矩阵
除了 本矩阵和本质矩阵,还有单应矩阵(Homography) , H
了两个平面之 的映 关 。 景中的 征 落 同一平面上
(比 、 面等),则可以 过单应性来进行运动估计。这种情
无人机 带的俯视相机 扫 机 带的顶视相机中比 常见。由于之前
有 过单应, 此这里稍微介 一下。
单应矩阵 常 于 同平面上的一些 两张图 之 的变
关 。 虑 图 I 和I 有一 匹 的 征 1 和 2 。这些 p p
P 上,设这个平面
1 2
征 落 平面 足方程:
稍加 理,得:
后, 顾本 开 的式(7.1),得:
于是,我 得 了一个直 图 坐标 p 和p 之 的变 ,
H ,于是:
1 2
中 这 分记为
理得:
7.4 实践:对极约束求解相机运动
下面,我 来练习一下 过本质矩阵 解相机运动。上一
分的程序 了 征匹 , 这次我 用匹 的 征 来计
E,F H
和 ,进 分解 得 E R,t
。 个程序 用OpenCV 的 进
行 解。我 上一 的 征 取 装成 ,以 后面 用。本 只
展示位 估计 分的代码。
slambook/ch7/pose_estimation_2d2d.cpp(片 )
该 了从 征 解相机运动的 分, 后,我 主
中调用 , 得 相机的运动:
slambook/ch7/pose_estimation_2d2d.cpp(片 )
我 中 E,F 和H 的
出了 , 后验证了 极约束是否成
t R E
立,以及 ∧ 和 非零 乘下等价的事 。现 ,调用此程序即可看
出 果:
程序的 出 果可以看出, 极约束的 足 度约 10 - 3 量
级。根 前面的讨论,分解得 的 R,t
一 有4种可 性。不过,OpenCV
会替我 用三角化检 角 的 度是否为正,从 出正确的解。
需要 意的 方是,我 要弄 程序 解出来的 R,t 是什么意义。
程的 义,我 的 极约束是从
讨论
从 E F
示程序中可以看 , 出的 和 之 相差了相机 参矩阵。
虽 上并不直观, 可以验证 的 关 。从 和 E,F H
H
可以分解出运动,不过 需要 设 征 位于平面上。 于本 验的
,这个 设是不 的,所以我 这里主要用 来分解运动。 E
E
得一 的是,由于 本 具有 度等价性, 分解得 的 也 t,R
有一个 度等价性。 R∈
SO(3) 具有约束,所以我 认为 具有一 t
个 尺度。 言之, 分解过程中, t
乘以 意非零常 ,分解 是成
立的。 此,我 常 进行 t 归一化
,让 的 度等于1。
尺度不确定性
t 度的归一化,直 导致了单目视觉的尺度不确定性( Scale
Ambiguity) 。 ,程序中 出的 t 第一 约为0.822。这个0.822究
竟是 0.822 还是0.822厘 ,我 是 确 的。 为 t 乘以 意
比 常 后, 极约束 是成立的。 言之, 单目SLAM中,
和 图同时 意 ,我 得 的图 是一样的。这 第2讲中
已 向读 介 过了。
单目视觉中,我 两张图 的 归一化相当于t 。虽 固定了尺度
我 不知 的 际 度是 , 我 以这时的 为单位1,计 相 t
机运动和 征 的3D位 。这被称为单目SLAM的 。 化之初始化
后, 可以用3D-2D来计 相机运动了。 化之后的 和 图的单
位, 是 化时 的 度。 此,单目SLAM有一步不可 的 初始
化。 化的两张图 必须有一 程度的平移, 后的 和 图
以此步的平移为单位。
除了 t
进行归一化之 ,另一种方 是令 化时所有的 征
平 度为1,也可以 一个 度。相比于令 t 度为1的 ,
征 度归一化可以控制 景的规 , 计 上更稳 些。
不过这并 有理论上的差 。
初始化的纯旋转问题
从 E 分解 R,t 的过程中, 果相机发生的是 旋转,导致 t 为
零, 么,得 的E 也 为零,这 导致我 无从 解R 。不过,此时
我 可以 靠H 取旋转, 仅有旋转时,我 无 用三角 量估计
征 的空 位 (这 下 ),于是,另一个 论是,单目初始
化不能只有纯旋转,必须要有一定程度的平移 。 果 有平移,单目
无 化。 当中, 果 化时平移太 ,会 得位 解
与三角化 果不稳 ,从 导致 败。相 , 果 相机左右移动
不是原 旋转, 易让单目SLAM 化。 ,有 验的SLAM研究人
员, 单目SLAM情 下 常 让相机进行左右平移以顺 进行
化。
多于 8对点的情况
当给 的 于8 时(比 , 程找 了79 匹 ),我 可以
计 一个最 二乘解。 忆式(7.12)中 性化后的 极约束,我 左
的 矩阵记为 : A
于八 , 的 A ×
为8 9。 果给 的匹 于8,该方程
构成一个超 方程,即不一 存 得上式成立。e 此,可以 过最
化一个二次 来 :
于是 E
出了 最 二乘意义下的 矩阵。不过,当可 存 误匹
的情 时,我 会更 向于 用 随机采样一致性(
Random Sample
,
Concensus RANSAC)来 , 不是最 二乘。RANSAC是一种 用的
, 用于很 带 误 的情 ,可以 理带有 误匹 的 。
7.5 三角测量
之前两 我 用 极几 约束估计了相机运动,也讨论了这种方
的 性。 得 运动之后,下一步我 需要用相机的运动估计 征
的空 位 。 单目SLAM中,仅 过单张图 无 获得 的 度
息,我 需要 过三角测量( Triangulation 的方 来 )(或三角化)
估计 图 的 度, 图7-9所示。
图7-9 三角化获得 图 度
三角 量是 , 过 两 观 同一个 的夹角,从 确 该 的
离。三角 量最早由高斯 出并应用于 量 中, 天 、 理
的 量中 有应用。 ,我 可以 过不同 观 的星星的角
度,估计 离我 的 离。 SLAM中,我 主要用三角化来估计
的 离。
和上一 , 虑图 I
I ,以左图为参 ,右图的变 矩
和
阵为T 。相机光心为O 和O 。 I 中有 征 p , 应 I 中有
1 2
征 p 。理论上直 O p 与O p 景中会相交于一 P ,
1 2 1 1 2
2 1 1 2 2
该 即两个 征 所 应的 图 三 景中的位 。 由于
的影响,这两条直 往往无 相交。 此,可以 过最二 乘 解。
极几 中的 义,设 x ,x1 2 为两个 征 的归一化坐标,
么 足:
7.6 实践:三角测量
7.6.1 三角测量代码
下面,我 示 根 之前 用 极几 解的相机位 , 过
三角化 出上一 征 的空 位 。我 调 用 OpenCV 的
triangulation 进行三角化。
slambook/ch7/triangulation.cpp(片断)
同时, main 中 加三角 量 分,并验证重 影关 :
我 印了 个空 两个相机坐标 下的 影坐标与 坐标
P
——相当于 的 影位 与看 的 征 位 。由于误差的存 ,
会有一些微 的差异。以下是某一 征 的 息:
可以看 ,误差的量级 约 后第3位。可以看 ,三角化
征 的 离 约为15。 由于 度不确 性,我 并不知 这里的15究
竟是 。
7.6.2 讨论
关于三角 量,还有一个必须 意的 方。
三角 量是由 平移
得 的,有平移才会有 极几 中的三角形,才
谈得上三角 量。 此, 旋转是无 用三角 量的, 为 极约束
远 足。 平移存 的情 下,我 还要关心三角 量的不确
性,这会引出一个 三角测量的矛盾
。
图7-10所示,当平移很 时, 上的不确 性 导致 的
度不确 性。也 是说, 果 征 运动一个 , 得视 角变 δx
化了一个角度 δθ
, 么 量 度 有 δd
的变化。从几 关 可
以看 ,当t 时, δd
明显变 ,这说明平移 时, 同样的
相机分 率下,三角化 量 更 确。 该过程的 量分析可以 用正
弦 理得 ,不过这里先 虑 性分析。
此,要 高三角化的 度,其一是 高 征 的 取 度,也
是 高图 分 率—— 这会导致图 变 , 加计 成本。另一方式
是 平移量 。 是,这会导致图 的 外观
发生明显的变化,比
原先被 住的 面显示出来,又比 反 光发生变化,等等。 观变
化会 得 征 取与匹 变得 难。总 言之,再 平移,会导致匹
; 平移太 ,则三角化 度不 ——这 是三角化的矛盾。
图7-10 三角 量的矛盾。
7.7 3D-2D:PnP
PnP(Perspective-n-Point)是 解3D 2D 运动的方 。
了当知 n 个3D空 及其 影位 时, 估计相机的位 。前面
说 ,2D-2D的 极几 方 需要8个 8个以上的 (以八 为
),且存 着 化、 旋转和 度的问题。 , 果两张图 中
其中一张 征 的3D位 已知, 么最 只需3个 (需要至 一个额
验证 果) 可以估计相机运动。 征 的3D位 可以由三角化
RGB-D相机的 度图确 。 此, 双目 RGB-D的视觉里程计中,我
可以直 用PnP估计相机运动。 单目视觉里程计中,必须先进行
化, 后才 用PnP。3D-2D方 不需要 用 极约束,又可以
很 的匹 中获得 的运动估计,是最重要的一种 态估计方 。
PnP问题有很 种 解方 , ,用3 估计位 的P3P[45] 、直
性变 (DLT)、EPnP(E ffi cientPnP) [46] 、UPnP[47] ,等等。
此 ,还 用 非线性优化 的方式,构建最 二乘问题并 代 解,也
是万 式的Bundle Adjustment。我 先来看DLT, 后再讲解Bundle
Adjustment。
7.7.1 直接线性变换
虑某个空 P, 的齐次坐标为 P =(X,Y,Z, 1)
T
。 图 I 1
中, 影 征 x
u ,v , 1) (以 归一化平 面齐次 坐标 表
=( T
,我
义 广矩阵[R|t ]为一个3× 4的矩阵,包含了旋转与平移 息 。我 [4]
其展开形式列 下:
于是有:
和
t
请 意, 是待 的变量,可以看 , 个 征 了两个关于 t
的 性约束。 设一 有 个 征 ,则可以列出 下 N 性方程组:
t
由于 一 有12 , 此,最 过6 匹 即可 现矩阵 的 T
性 解,这种方 称为直 性 变 ( Direct Linear Transform ,
DLT)。当匹 于6 时,也可以 用SVD等方 超 方程 最 二
乘解。
DLT 解中,我 直 矩阵看成了12个未知 ,忽略了 T 之
的 。 为旋转矩阵 R∈
SO(3),用DLT 出的解不一 足该约
束, 是一个一 矩阵。平移向量比 办, 属于向量空 。 于旋
R
转矩阵 ,我 必须 DLT估计的 左 3 3的矩阵 ,寻找一个最 T ×
的旋转矩阵 进行近 。这可以由QR分解 成[3,48] ,相当于 果
从矩阵空 重新 影 SE(3) 形上,转 成旋转和平移两 分。
需要解 的是,我 这里的 x 用了归一化平面坐标,去 了 参
K 参K
1
7.7.2 P3P
下面讲的P3P是另一种解PnP的方 。 仅 用3 匹 , 要
, 此这里也 单介 一下(这 分推导 了 献[49])。
P3P需要 用给 的3个 的几 关 。 的 为3 3D-2D匹
。记3D 为 ,2D 为 A,B,C
,其中 字 代表的 为 应 a,b,c
字 代表的 相机成 平面上的 影, 图7-11所示。此 ,P3P
还需要 用一 验证 ,以从可 的解中 出正确的 一个( 于
极几 情形)。记验证 D-d
为 ,相机光心为 。请 意,我 知 O
的是A,B,C 世界坐标系中的坐标 , 不是 。 在相机坐标系中的坐标
一旦3D 相机坐标 下的坐标 出,我 得 了3D-3D的 应
, PnP问题转 为了ICP问题。
首先,显 三角形之 存 应关 :
图7-11 P3P问题示意图。
于其 两个三角形亦有 性质,于是有:
以上三式 除以 OC 2
,并且记 x =OA /OC,y =OB /OC ,得:
记 v =AB /OC ,uv =BC /OC ,wv =AC /OC
2 2 2 2 2 2
,有:
意这些方程中的已知量和未知量。由于我 知 2D 的图 位
,3个 弦角cos〈a,b〉, 〈b,c〉, 〈a,c〉
cos cos 是已知的。同
u BC AB ,w AC AB
时, = 2
/ 2 A,B,C
= 2 / 2 可以 过 世界坐标 下的坐
标 出,变 相机坐标 下之后,这个比 并不 变。该式中的 x,y
是未知的,随着相机移动会发生变化。 此,该方程组是关于 的一 x,y
个二 二次方程( 项式方程)。解析 解该方程组是一个 杂的过
程,需要用吴消 。这里不展开 该方程解 的介 ,感兴趣的读
请参 献[45]。 E
于分解 的情 ,该方程最 可 得 4个解,
我 可以用验证 来计 最可 的解,得 相机坐标 下的3D A,B,C
坐标。 后,根 3D-3D的 ,计 相机的运动 。这 分 7.9 R,t
介 。
从P3P的原理可以看出,为了 解PnP,我 用了三角形相 性
质, 解 影 a,b,c
相机坐标 下的3D坐标,最后 问题转 成一
个3D 3D的位 估计问题。 后 看 ,带有匹 息的3D-3D位
解非常 易,所以这种思 是非常有 的。其 的一些方 ,
EPnP,亦 用了这种思 。 ,P3P也存 着一些问题:
1.P3P只 用3个 的 息。当给 的 于3组时,难以 用更
的 息。
2. 果3D 2D 受 影响, 存 误匹 ,则 。
所以后 人 还 出了许 的方 , EPnP、UPnP等。 用
更 的 息, 且用 代的方式 相机位 进行优化,以尽可 消除
的影响。不过,相 于P3P来说,原理会更加 杂一些,所以我 建
议读 读原 的论 , 过 来理解PnP过程。 SLAM当中, 常
的 是先 用P3P/EPnP等方 估计相机位 , 后构建最 二乘优化
问题 估计 进行调 (Bundle Adjustment)。 下来我 从非 性优
化角度来看一下PnP问题。
7.7.3 Bundle Adjustment
除了 用 性方 之 ,我 还可以 PnP问题构建成一个 义于李
代 上的非 性最 二乘问题。这 用 本书第4讲和第5讲的知识。前
面说的 性方 ,往往是 先求相机位姿,再求空间点位置
, 非 性优
化则是 看成优化变量, 一起优化。这是一种非常 用的
解方式,我 可以用 PnP ICP给出的 果进行优化。 PnP中,这个
Bundle Adjustment问题,是一个最 化 重投影误差(
Reprojection
error) 的问题。我 本 给出此问题 两个视图下的 本形式,
后 第10讲讨论 规 的BA问题。
虑 n 个三 空 P 及其 影 p ,我 希望计 相机的位 R,t
, 的李代 ξ 。 设某空
表示为 坐标为 Pi =[Xi ,Yi ,Zi ]
T
,其
影的 坐标为ui =[ui ,vi ] 。根
T
第5讲的 , 位 与空
位 的关 下:
J
这里的 的形式是 得讨论的,甚至可以说是关 所 。我
可以 用 导 , 果 推导出解析形式,则我 会优先 虑解
析导 。现 ,当 为 e
坐标误差(2 ), 为相机位 (6 ) x
时,J ×
是一个2 6的矩阵。我 来推导 的形式。 J
忆李代 的 ,我 介 了 用 动 来 李代 的导
。首先,记变 相机坐标 下的空 坐标为 P′ ,并且 其前3
取出来:
么,相机 影 相 于 P′ 为
展开:
这两项相乘, 得 了2 × 6的雅可比矩阵:
这个雅可比矩阵 了重 影误差关于相机位 李代 的一阶变化
关 。我 留了前面的负号,这是 为误差是由 义 观测值减预测值
的。 当 也可反过来, 义成“预 观 ”的形式。 种情
下,只要去 前面的负号即可。此 , 果se(3)的 义方式是旋转
前,平移 后,只要 这个矩阵的前3列与后3列 调即可。
另一方面,除了优化位 ,我 还希望优化 征 的空 位 。
此,需要讨论 关于空 e 的导 P 。所幸这个导 矩阵相 来说 易
一些。仍 用 式 则,有:
第一项 前面已推导,关于第二项, 义
我 发现 P′ P 导后 只剩下R 。于是:
7.8 实践:求解PnP
7.8.1 使用EPnP求解位姿
下面,我 过 验理解一下PnP的过程。首先,我 用OpenCV
的EPnP 解PnP问题, 后 过g2o 果进行优化。由于PnP需要 用3D
,为了 化带来的麻 ,我 用了RGB-D相机中的 度图
(1_depth.png) 为 征 的3D位 。首先来看OpenCV 的PnP
:
slambook/ch7/pose_estimation_3d2d.cpp(片 )
7.8.2 使用BA优化
下面 示 进行BundleAdjustment。我 用前一步的估计
为 。优化可以 用前面讲的Ceres g2o库 现,这里 用g2o
为 。
g2o的 本知识 第6讲中已 介 过了。 用g2o之前,我 要
问题建 成一个最 二乘的图优化问题, 图7-13所示。
图7-13 PnP的Bundle Adjustment的图优化表示。
这个图优化中, 和 的 下:
1. 节点 :第二个相机的位 ξ∈ se(3),所有 征 的空 位
P∈ R 。 3
7.9 3D-3D:ICP
最后,我 来介 3D-3D的位 估计问题。 设我 有一组 的
3D (比 我 两幅RGB-D图 进行了匹 ):
现 ,想要找一个 变 R,t , 得:
7.9.1 SVD方法
首先来看以SVD为代表的代 方 。根 前面 的ICP问题,我
先 义第 i
的误差项:
3.根 第2步的 R计 t:
此, 际上优化目标 变为
7.10 实践:求解ICP
7.10.1 SVD方法
下面 示一下 用SVD及非 性优化来 解ICP。本 我 用
两幅RGB-D图 , 过 征匹 获取两组3D ,最后用ICP计 的位
变 。由于OpenCV目前还 有计 两组带匹 的ICP的方 , 且
的原理也并不 杂,所以我 己来 现一个ICP。
slambook/ch7/pose_estimation_3d3d.cpp(片 )
ICP的 现方式和前 讲 的是一致的。我 调用Eigen进行SVD,
后计 R,t 矩阵。我 出了匹 后的 果,不过请 意,由于前面的
推导是 pi =Rp′ i +t 进行的,这里的 R,t 是第二帧 第一帧的变
,与前面PnP 分是相反的。所以 出 果中,我 同时 印了 变
:
读 可以比 一下ICP与PnP、 极几 的运动估计 果之 的差
异。可以认为, 这个过程中我 用了越来越 的 息( 有 度—
有一个图的 度—有两个图的 度), 此, 度 确的情 下,得
的估计也 越来越 确。 是,由于Kinect的 度图存 , 且
有可 存 丢 的情 , 得我 不得不丢弃一些 有 度 的
征 。这可 导致ICP的估计不 确,并且, 果 征 丢弃得太
,可 引起由于 征 太 ,无 进行运动估计的情 。
7.10.2 非线性优化方法
下面 虑用非 性优化来计 ICP。我 用李代 来表 相机
位 。与SVD思 不同的 方 于, 优化中我 不仅 虑相机的位 ,
同时会优化3D 的空 位 。 我 来说,RGB-D相机 次可以观
标 的三 位 ,从 产生一个3D观 。不过,由于g2o/sba中 有
3D 3D的 , 我 又想 用g2o/sba中李代 现的位 ,所
以最 的方式是 义一种这样的 ,并向g2o 解析 导方式。
slambook/ch7/pose_estimation_3d3d.cpp
这 是 一 个 一 , 于 前 面 的
g2o::EdgeSE3ProjectXYZ,不过观 量从2 变成了3 , 有相机
,并且只关 一个 。请读 意这里雅可比矩阵的书 ,
必须与我 前面的推导一致。雅可比矩阵给出了关于相机位 的导 ,
是一个3× 6的矩阵。
调用g2o进行优化的代码是相 的,我 设 图优化的 和 即
可。这 分代码请读 查看 件,这里不再列出。现 ,来看看优化
的 果:
需要 版
扫下面二 码
加微 :shuyou099
领取
附录B ROS入门
ROS是机器人研究领 一个广为 讨的主题。为了 本书 读
太高,我 有 正 和 程中 。 近年来,ROS正逐步
各 高校的 生中 得 推广, 为人 所 知和 受,所以这
里也介 一下ROS,希望 读 有所帮助。
B.1ROS是什么
ROS(Robot Operating System)是Willow Garage公司于2007年
发布的一个开 机器人操 , 为软件开发人员开发机器人应用
程序 了许 优秀的工具和库。同时,还有优秀的开发 不断 为
贡献代码。本质上,ROS并不是一个真正意义上的操 , 更
是 于操 之上的一个软件包。 了众 际机器人中可
的 :导 、 、 径规 ,等等。
ROS的版本代号是 字 顺序来 的,并随着Ubuntu 发布
更新。 常一个ROS版本会 两 三个Ubuntu 版本。ROS从Box
Turtle开 , 止 本书 时(2016年),已 更新 了Kinetic
Kame(见图B-1)。同时,ROS也已 彻底重构,推出了 时性更强的
2.0版本。
ROS 很 操 , 最 善的是Ubuntu及其衍生版本
(Kubuntu、Linux Mint、Ubuntu GNOME等), 其 Linux发布版
本、Windows等的 也有,不过 有 么 善。 此,推荐读 用
Ubuntu操 来进行开发和研究。
ROS 目前被广 用的面向 象的 程语言C++,以及 本语
言Python。 可以 己喜欢的语言进行开发。
图B-1 ROS各版本命名方式
B.2ROS的特点
ROS的设计 衷, 是 机器人开发 计 机开发一样,屏蔽
底层硬件及其 口的不一致性,最终 得软件可以 用。
软件 用也正是软件工程优 性最集中的 现之一,ROS 以
一消息格式来 得 只需要关 层面的设计, 底层硬件的
根本目的是 各种各样的消息, 图 、 等。各个硬件厂商
的 一 ROS所规 的 一消息格式下,即可让用 方
用各种开 的机器人相关 。
第 14 讲 中 的 常 见 的 开 SLAM 方 案 中 , ORB-SLAM 、 ORB-
SLAM2 、 LSDSLAM 、 SVO 、 DVO 、 RTAB-MAP 、 RGBD-SLAM-V2 、 Hector
SLAM、Gmapping、ROVIO等 有ROS版本的开 代码, 可以很方
ROS中运行、调试和修 。
调试SLAM程序时, 的来 常有3种: 感器、 集,以
及bag 件。 有相应的 感器, 常 需要 用虚 的 来
跑 SLAM 程序 。其 中 , 最 方 的方式当属 用ROS下的bag 件发 布
topic, 后SLAM程序 可以监视topic发出的 , 用真 的
感器 集 一样。后面我 会 单介 一下 用bag 件来
真 的 感器 。
B.3如何快速上手ROS
ROS有 善的 。 , 的介 机器上安装 应
版 本的 ROS: http://wiki.ros.org/ROS/Installation; 后, 读
ROS 带的 程序即可。 会 习 ROS的 本 念、主题的发布和
订 ,以及用Python和C++控制 。 果 觉得麻 ,也可以 用
ROS 制 的 Ubuntu :
http://www.aicrobo.com/ubuntu_for_ros.html。
除了 本知识之 , 还可以 一些ROS的常用工具, :
1.rqt。rqt是ROS下的一个软件框架, 以 件的方式 了各种
各样方 用的GUI(用 图形界面)。rqt的功 非常强 ,可以
时 查看ROS中 动的消息。
2.rosbag。rosbag是ROS 的一个非常 用的录制及 topic
的工具。当 想 际跑一下SLAM程序, 囿于 有 际的
感器时,可以 虑 用公开 的bag 件来进行图 的
,这种方式与 用一个真 的 感器 感觉上并无不同。rosbag的
用方式请参 ROS的 页面。此 ,许 公开 集也会 bag
格式的 件。
3.rviz。rviz是ROS 的可视化 , 可以 过 时 查看
ROS中的图 、 云、 图、规 的 径,等等,从 更方 调试程
序。
我 相 ,机器人的硬件层面和软件层面一 会向着 一架构
的方向前行, ROS正是软件架构层面标 化一个重要的里程碑。其
中,ROS 1.x 之前被 量用于 验 的研究, 公司产品demo的研
发阶 , ROS2则解 了ROS 时性的问题,未来很有可 被直 用于
际产品的研发,为推进工业级机器人和服务机器人的应用 出重要
的贡献。
本附录 性 介 了有关ROS的历史、优 ,以及 用ROS
中的一些可视化工具来 助SLAM程序开发等。我 希望读
习ROS,并 用ROS开发 己的SLAM程序。
参考文献
[1]L.Haomin,Z.Guofeng,andB.Hujun,“Asurveyofmonocularsimu
ltaneouslocalizationandmapping,” Journal of Computer-Aided
Design and Compute Graphics ,vol.28,no.6,pp.855–868,2016.in
Chinese.
[2]A.Davison,I.Reid,N.Molton,and
O.Stasse,“Monoslam:Real-time single camera IEEE
SLAM,”
Transactions on Pattern Analysis and Machine Intelligence
,vol.29,no.6,pp.1052–1067,2007.
[3]R.Hartley and A.Zisserman, Multiple View Geometry in
Computer Vision .Cambridge university press,2003.
[4]R.C.Smith and P.Cheeseman,“On the representation and
estimation of spatial uncertainty,” International Journal of
Robotics Research ,vol.5,no.4,pp.56–68,1986.
[5]S.Thrun,W.Burgard,and D.Fox,Probabilistic robotics
.MIT Press,2005.
[6]T.Barfoot,“State estimation for robotics:A matrix lie
group approach,”2016.
[7]A.Pretto,E.Menegatti,andE.Pagello,“Omnidirectionalden
selarge-scalemappingandnavigation based on meaningful
triangulation,” 2011 IEEE International Conference on
Robotics and Automation(ICRA 2011) ,pp.3289–96,2011.
[8]B.RueckauerandT.Delbruck,“Evaluationofevent-
basedalgorithmsforoptical fl owwithgroundtruth from inertial
measurement sensor,” Frontiers in neuroscience,vol.10,2016.
[9]C.Cesar,L.Carlone,H.C.,Y.Latif,D.Scaramuzza,J.Neira,I.
D.Reid,andL.JohnJ.,“Past,present,and future of simultaneous
localization and mapping:Towards the robust-perception
age,” arXiv preprint arXiv:1606.05830 ,2016.
[10]P.Newman and K.Ho,“Slam-loop closing with visually
salient features,”in proceedings of the 2005 IEEE
International Conference on Robotics and Automation
,pp.635–
642,IEEE,2005.
[11]R.Smith,M.Self,and P.Cheeseman,“Estimating uncertain
spatial relationships in robotics,”in Autonomous robot
vehicles ,pp.167–193,Springer,1990.
[12]P.Beeson,J.Modayil,andB.Kuipers,“Factoringthemapping
problem:Mobilerobotmap-building in the hybrid spatial
semantic hierarchy,” International Journal of Robotics
Research ,vol.29,no.4,pp.428–459,2010.
[13]H.Strasdat,J.M.Montiel,and A.J.Davison,“Visual
slam:Why fi lter?,” Image and Vision Computing
,vol.30,no.2,pp.65–77,2012.
[14]M.Liang,H.Min,and R.Luo,“Graph-based slam:A
survey,” ROBOT
,vol.35,no.4,pp.500–512,2013.in Chinese.
[15]J.Fuentes-Pacheco,J.Ruiz-Ascencio,and J.M.Rendón-
Mancha,“Visual simultaneous localization and mapping:a
survey,” Arti fi cial Intelligence Review,vol.43,no.1,pp.55
–81,2015.
[16]J.Boal,Á.Sánchez-Miralles,and Á.Arranz,“Topological
simultaneous localization and mapping:a survey,” Robotica
,vol.32,pp.803–821,2014.
[17]S.Y.Chen,“Kalman fi lter for robot vision:A
survey,” IEEE Transactions on Industrial Electronics
,vol.59,no.11,pp.4409–4420,2012.
[18]Z.Chen,J.Samarabandu,andR.Rodrigo,“Recentadvancesins
imultaneouslocalizationandmapbuilding using computer
vision,” Advanced Robotics ,vol.21,no.3-4,pp.233–265,2007.
[19]J.Stuelpnagel,“On the parametrization of the three-
dimensional rotation group,” SIAM Review
,vol.6,no.4,pp.422–
430,1964.
[20]V.S.Varadarajan, Lie groups,Lie algebras,and their
representations ,vol.102.Springer Science&Business
Media,2013.
[21]H.Strasdat, Localaccuracyandglobalconsistencyfore ffi
cientvisualslam .PhDthesis,Citeseer,2012.
[22]S.Agarwal,N.Snavely,I.Simon,S.M.Seitz,and
R.Szeliski,“Building rome in a day,”in2009 IEEE 12th
international conference on computer vision ,pp.72–
79,IEEE,2009.
[23]J.Nocedal and S.Wright, Numerical Optimization
.Springer Science&Business Media,2006.
[24]M.I.Lourakis and A.A.Argyros,“Sba:A software package
for generic sparse bundle adjustment,” ACM Transactions on
Mathematical Software(TOMS) ,vol.36,no.1,p.2,2009.
[25]G.Sibley,“Relativebundleadjustment,” DepartmentofEng
ineeringScience,OxfordUniversity,Tech.Rep
,vol.2307,no.09,2009.
[26]B.Triggs,P.F.McLauchlan,R.I.Hartley,and
A.W.Fitzgibbon,“Bundle adjustment:a modern synthesis,”in
Vision algorithms:theory and practice
,pp.298–
372,Springer,2000.
[27]S.Agarwal,K.Mierle,and Others,“Ceres
solver.”http://ceres-solver.org.
[28]R.Kummerle,G.Grisetti,H.Strasdat,K.Konolige,and
W.Burgard,“G2o:a general framework for graph
optimization,”in IEEE International Conference on Robotics
and Automation(ICRA) ,pp.3607–3613,IEEE,2011.
[29]Wikipedia,“Feature(computervision).”"https://en.wik
ipedia.org/wiki/Feature_(computer_vision)",2016.
[Online;accessed 09-July-2016].
[30]D.G.Lowe,“Distinctive image features from scale-
invariant keypoints,” International Journal of Computer
Vision ,vol.60,no.2,pp.91–110,2004.
[31]H.Bay,T.Tuytelaars,and L.Van Gool,“Surf:Speeded up
robust features,”in Computer Vision–ECCV 2006,pp.404–
417,Springer,2006.
[32]E.Rublee,V.Rabaud,K.Konolige,and G.Bradski,“Orb:an e
ffi cient alternative to siftor surf,”in 2011 IEEE
International Conference on Computer Vision(ICCV) ,pp.2564–
2571,IEEE,2011.
[33]E.Rosten and T.Drummond,“Machine learning for high-
speed corner detection,”in European conference on computer
vision ,pp.430–443,Springer,2006.
[34]M.Calonder,V.Lepetit,C.Strecha,and
P.Fua,“Brief:Binary robust independent elementary
features,”in European conference on computer vision ,pp.778
–792,Springer,2010.
[35]P.L.Rosin,“Measuringcornerproperties,” ComputerVisio
nandImageUnderstanding,vol.73,no.2,pp.291–307,1999.
[36]M.Muja and D.G.Lowe,“Fast approximate nearest
neighbors with automatic algorithm con fi guration.,”in
VISAPP(1) ,pp.331–340,2009.
[37]J.Sturm,N.Engelhard,F.Endres,W.Burgard,and
D.Cremers,“A benchmark for the evaluation of rgb-d SLAM
systems,”in 2012 IEEE/RSJ International Conference on
Intelligent Robots and Systems(IROS) ,pp.573–580,IEEE,2012.
[38]R.I.Hartley,“In defense of the eight-point
algorithm,” IEEE Transactions on pattern analysis and machine
intelligence ,vol.19,no.6,pp.580–593,1997.
[39]H.C.Longuet-Higgins,“A computer algorithm for
reconstructing a scene from two projections,” Readings in
Computer Vision:Issues,Problems,Principles,and Paradigms,MA
Fischler and O.Firschein,eds ,pp.61–62,1987.
[40]H.Li and R.Hartley,“Five-point motion estimation
made easy,”in 18th International Conference on Pattern
Recognition(ICPR’06),vol.1,pp.630–633,IEEE,2006.
[41]D.Nistér,“An e ffi cient solution to the fi ve-point
relative pose problem,” IEEE Transactions on Pattern Analysis
and Machine Intelligence,vol.26,no.6,pp.756–770,2004.
[42]O.D.Faugeras and F.Lustman,“Motion and structure
from motion in a piecewise planar
environment,” InternationalJournal ofPattern
RecognitionandArti fi cial Intelligence ,vol.2,no.03,pp.485–
508,1988.
[43]Z.Zhang and A.R.Hanson,“3d reconstruction based on
homography mapping,” ARPA Image Understanding Workshop
,pp.1007–1012,1996.
[44]E.Malis and Deeper understanding of the
M.Vargas,
homography decomposition for vision-based control .PhD
thesis,INRIA,2007.
[45]X.-S.Gao,X.-R.Hou,J.Tang,and H.-F.Cheng,“Complete
solution classi fi cation for the perspective-three-point
problem,” IEEE Transactions on Pattern Analysis and Machine
Intelligence ,vol.25,pp.930–943,Aug 2003.
[46]V.Lepetit,F.Moreno-Noguer,and P.Fua,“Epnp:An
accurate o(n)solution to the pnp problem,” International
Journal of Computer Vision ,vol.81,no.2,pp.155–166,2008.
[47]A.Penate-Sanchez,J.Andrade-Cetto,and F.Moreno-
Noguer,“Exhaustive linearization for robust camera pose and
focal length estimation,” IEEE Transactions on Pattern
Analysis and Machine Intelligence ,vol.35,no.10,pp.2387–
2400,2013.
[48]L.Chen,C.W.Armstrong,and D.D.Raftopoulos,“An
investigation on the accuracy of threedimensional space
reconstruction using the direct linear transformation
technique,” Journal of Biomechanics ,vol.27,no.4,pp.493–
500,1994.
[49]iplimage,“P3p(blog).”"http://iplimage.com/blog/p3p-
perspective-point-overview/",2016.
[50]K.S.Arun,T.S.Huang,and S.D.Blostein,“Least-squares
fi tting of two 3-d point sets,” Pattern Analysis and Machine
Intelligence,IEEE Transactions on,no.5,pp.698–700,1987.
[51]F.Pomerleau,F.Colas,and R.Siegwart,“A review of
point cloud registration algorithms for mobile
robotics,” Foundations and Trends in Robotics(FnTROB)
,vol.4,no.1,pp.1–104,2015.
[52]O.D.Faugeras and M.Hebert,“The
representation,recognition,and locating of 3-d objects,” The
International Journal of Robotics Research ,vol.5,no.3,pp.27
–52,1986.
[53]B.K.Horn,“Closed-form solution of absolute
orientation using unit quaternions,” JOSA A
,vol.4,no.4,pp.629–642,1987.
[54]G.C.Sharp,S.W.Lee,andD.K.Wehe,“Icpregistrationusingi
nvariantfeatures,” IEEETransactions on Pattern Analysis and
Machine Intelligence ,vol.24,no.1,pp.90–102,2002.
[55]G.Silveira,E.Malis,and P.Rives,“An e ffi cient
direct approach to visual slam,” IEEE Transactions on
Robotics ,vol.24,no.5,pp.969–979,2008.
[56]C.Forster,M.Pizzoli,and D.Scaramuzza,“Svo:Fast semi-
direct monocular visual Robotics and
odometry,”in
Automation(ICRA),2014 IEEE International Conference on
(rs,ed.),pp.15–22,IEEE,2014.
[57]J.Engel,T.Schöps,and D.Cremers,“Lsd-slam:Large-scale
direct monocular slam,”in Computer Vision–ECCV 2014
,pp.834
–849,Springer,2014.
[58]J.Engel,V.Koltun,and D.Cremers,“Direct sparse
odometry,” arXiv preprint arXiv:1607.02565,2016.
[59]J.Engel,J.Sturm,and D.Cremers,“Semi-dense visual
Proceedings of the IEEE
odometry for a monocular camera,”in
International Conference on Computer Vision ,pp.1449–
1456,2013.
[60]V.Usenko,J.Engel,J.Stueckler,and D.Cremers,“Direct
visual-inertial odometry with stereo IEEE
cameras,”in
International Conference on Robotics and Automation(ICRA)
,May 2016.
[61]Wikipedia,“Randomsampleconsensus.”"https://en.wikip
edia.org/wiki/Random_sample_consensus",2016.[Online;accessed
09-July-2016].
[62]V.Sujan and S.Dubowsky,“E ffi cient information-
based visual robotic mapping in unstructured
environments,” International Journal of Robotics Research
,vol.24,no.4,pp.275–293,2005.
[63]F.Janabi-Shari fi and M.Marey,“A kalman- fi lter-
based method for pose estimation in visual servoing,” IEEE
Transactions on Robotics ,vol.26,no.5,pp.939–947,2010.
[64]S.Li and P.Ni,“Square-root unscented kalman fi lter
based simultaneous localization and mapping,”in Information
and Automation(ICIA),2010 IEEE International Conference on
,pp.2384–2388,IEEE,2010.
[65]R.Sim,P.Elinas,and J.Little,“A study of the rao-
blackwellised particle fi lter for e ffi cient and accurate
vision-based slam,” International Journal of Computer Vision
,vol.74,no.3,pp.303–318,2007.
[66]J.S.Lee,S.Y.Nam,and W.K.Chung,“Robust rbpf-slam for
indoor mobile robots using sonar sensors in non-static
environments,” Advanced Robotics ,vol.25,no.9-10,pp.1227–
1248,2011.
[67]A.Gil,O.Reinoso,M.Ballesta,and M.Julia,“Multi-robot
visual slam using a rao-blackwellized particle fi
lter,” Robotics and Autonomous Systems ,vol.58,no.1,pp.68–
80,2010.
[68]G.Sibley,L.Matthies,and G.Sukhatme,“Sliding window
fi lter with application to planetary landing,” Journal of
Field Robotics ,vol.27,no.5,pp.587–608,2010.
[69]L.M.Paz,J.D.Tardós,and J.Neira,“Divide and
conquer:Ekf slam in o(n),” IEEE Transactions on Robotics
,vol.24,no.5,pp.1107–1120,2008.
[70]O.G.Grasa,J.Civera,and J.Montiel,“Ekf monocular slam
with relocalization for laparoscopic sequences,”in Robotics
and Automation(ICRA),2011 IEEE International Conference on
,pp.4816–4821,IEEE,2011.
[71]E.Süli and D.F.Mayers, An Introduction to Numerical
Analysis .Cambridge university press,2003.
[72]L.Polok,V.Ila,M.Solony,P.Smrz,and
P.Zemcik,“Incremental block cholesky factorization for
nonlinear least squares in robotics.,”in Robotics:Science
and Systems ,2013.
[73]R.Mur-Artal,J.Montiel,and J.D.Tardos,“Orb-slam:a
versatile and accurate monocular slam system,” arXiv preprint
arXiv:1502.00956 ,2015.
[74]S.Leutenegger,S.Lynen,M.Bosse,R.Siegwart,and
P.Furgale,“Keyframe-based visual–inertial odometry using
nonlinear optimization,” The International Journal of
Robotics Research ,vol.34,no.3,pp.314–334,2015.
[75]“Bundle adjustment in the
large.”http://grail.cs.washington.edu/projects/bal/.
[76]J.Sherman and W.J.Morrison,“Adjustment of an inverse
matrix corresponding to a change in one element of a given
matrix,” The Annals of Mathematical Statistics
,vol.21,no.1,pp.124–127,1950.
[77]H.Strasdat,A.J.Davison,J.M.M.Montiel,and
K.Konolige,“Double window optimisation for constant time
visual SLAM,” 2011 IEEE International Conference On Computer
Vision(ICCV) ,pp.2352–2359,2011.
[78]G.Dubbelman and B.Browning,“Cop-slam:Closed-form
online pose-chain optimization for visual
slam,” Robotics,IEEE Transactions on ,vol.31,pp.1194–
1213,Oct 2015.
[79]D.Lee and H.Myung,“Solution to the slam problem in
low dynamic environments using a pose graph and an rgb-d
sensor,” Sensors ,vol.14,no.7,pp.12467–12496,2014.
[80]Y.Latif,C.Cadena,and J.Neira,“Robust loop closing
over time for pose graph slam,” The International Journal of
Robotics Research ,vol.32,no.14,pp.1611–1626,2013.
[81]G.Klein and D.Murray,“Parallel tracking and mapping
for small ar workspaces,”in Mixed and Augmented
Reality,2007.ISMAR 2007.6th IEEE and ACM International
Symposium on ,pp.225–234,IEEE,2007.
[82]D.Koller and N.Friedman,Probabilistic graphical
models:principles and techniques .MIT press,2009.
[83]M.Kaess,A.Ranganathan,and
F.Dellaert,“isam:Incremental smoothing and mapping,” IEEE
Transactions on Robotics ,vol.24,no.6,pp.1365–1378,2008.
[84]M.Kaess,H.Johannsson,R.Roberts,V.Ila,J.J.Leonard,and
F.Dellaert,“isam2:Incremental smoothing and mapping using
the bayes tree,” The International Journal of Robotics
Research ,p.0278364911430419,2011.
[85]D.M.Rosen,M.Kaess,and J.J.Leonard,“Rise:An
incremental trust-region method for robust onlinesparseleast-
squaresestimation,” IEEETransactionsonRobotics
,vol.30,no.5,pp.1091–1108,2014.
[86]J.Sola,“Course on
slam.”https://github.com/joansola/slamtb/raw/graph/courseSLA
M.pdf,2016.
[87]F.Dellaert,“Factor graphs and gtsam:A hands-on
introduction,”2012.
[88]F.Endres,J.Hess,J.Sturm,D.Cremers,andW.Burgard,“3-
dmappingwithanrgb-dcamera,” IEEE Transactions on Robotics
,vol.30,no.1,pp.177–187,2014.
[89]D.Hahnel,W.Burgard,D.Fox,and S.Thrun,“An e ffi cient
fastslam algorithm for generating maps of large-scale cyclic
environments from raw laser range measurements,”in
Intelligent Robots and Systems,2003.
(IROS2003).Proceedings.2003IEEE/RSJInternationalConferenceon
,vol.1,pp.206–211,IEEE,2003.
[90]I.Ulrich and I.Nourbakhsh,“Appearance-based place
recognition for topological localization,”in Robotics and
Automation,2000.Proceedings.ICRA’00.IEEE International
Conference on ,vol.2,pp.1023–1029,Ieee,2000.
[91]X.Gao and T.Zhang,“Robust rgb-d simultaneous
localization and mapping using planar point
features,” Robotics and Autonomous Systems ,vol.72,pp.1–
14,2015.
[92]S.Lloyd,“Leastsquaresquantizationinpcm,” IEEEtransac
tionsoninformationtheory,vol.28,no.2,pp.129–137,1982.
[93]D.Arthur and S.Vassilvitskii,“K-means++:The
advantages of careful seeding,”in Proceedings of the
eighteenth annual ACM-SIAM symposium on Discrete algorithms
,pp.1027–1035,Society for Industrial and Applied
Mathematics,2007.
[94]M.Cummins and P.Newman,“Fab-map:Probabilistic
localization and mapping in the space of appearance,” The
International Journal of Robotics Research
,vol.27,no.6,pp.647–665,2008.
[95]M.Cummins and P.Newman,“Accelerating fab-MAP with
concentration inequalities,” IEEE Transactions On Robotics
,vol.26,no.6,pp.1042–1050,2010.
[96]M.CumminsandP.Newman,“Appearance-
onlyslamatlargescalewithfab-map2.0,” International Journal of
Robotics Research ,vol.30,no.9,pp.1100–1123,2011.
[97]C.ChowandC.Liu,“Approximatingdiscreteprobabilitydist
ributionswithdependencetrees,” IEEE transactions on
Information Theory ,vol.14,no.3,pp.462–467,1968.
[98]D.Galvez-Lopez and J.D.Tardos,“Bags of binary words
for fast place recognition in image sequences,” IEEE
Transactions On Robotics,vol.28,no.5,pp.1188–1197,2012.
[99]J.L.Bentley,“Multidimensionalbinarysearchtreesusedfo
rassociativesearching,” Communications of the ACM
,vol.18,no.9,pp.509–517,1975.
[100]J.SivicandA.Zisserman,“Videogoogle:Atextretrievalap
proachtoobjectmatchinginvideos,”in Computer
Vision,2003.Proceedings.Ninth IEEE International Conference
on ,pp.1470–1477,IEEE,2003.
[101]S.Robertson,“Understandinginversedocumentfrequency:
ontheoreticalargumentsforidf,” Journal of documentation
,vol.60,no.5,pp.503–520,2004.
[102]D.Nister and H.Stewenius,“Scalable recognition with
2006 IEEE Computer Society Conference
a vocabulary tree,”in
on Computer Vision and Pattern Recognition(CVPR’06)
,vol.2,pp.2161–2168,IEEE,2006.
[103]C.Cadena,D.Galvez-Lopez,J.D.Tardos,and
J.Neira,“Robust place recognition with stereo
sequences,” IEEE Transactions on Robotics ,vol.28,no.4,pp.871
–885,2012.
[104]X.Gao and T.Zhang,“Loop closure detection for
visual slam systems using deep neural networks,”in Control
Conference(CCC),2015 34th Chinese,pp.5851–5856,IEEE,2015.
[105]X.GaoandT.Zhang,“Unsupervisedlearningtodetectloopsu
singdeepneuralnetworksforvisual slam system,” Autonomous
Robots ,pp.1–18,2015.
[106]B.Williams,M.Cummins,J.Neira,P.Newman,I.Reid,andJ.Ta
rdós,“Acomparisonofloopclosing techniques in monocular
slam,” Robotics and Autonomous Systems,vol.57,no.12,pp.1188
–1197,2009.
[107]M.LabbéandF.Michaud,“Onlinegloballoopclosuredetecti
onforlarge-scalemulti-
sessiongraphbasedslam,”in 2014IEEE/RSJInternationalConference
onIntelligentRobotsandSystems ,pp.2661–2666,IEEE,2014.
[108]R.F.Salas-
Moreno,R.A.Newcombe,H.Strasdat,P.H.J.Kelly,and
A.J.Davison,“Slam++:Simultaneous localisation and mapping at
the level of objects,” 2013 IEEE Conference on Computer
Vision and Pattern Recognition(CVPR) ,pp.1352–9,2013.
[109]M.Pizzoli,C.Forster,andD.Scaramuzza,“Remode:Probabi
listic,monoculardensereconstruction in real time,”in 2014
IEEE International Conference on Robotics and
Automation(ICRA) ,pp.2609–2616,IEEE,2014.
[110]“Correlation based similarity measure-
summary.”https://siddhantahuja.wordpress.com/tag/stereo-
matching/.
[111]H.HirschmullerandD.Scharstein,“Evaluationofcostfunc
tionsforstereomatching,”in 2007IEEE Conference on Computer
Vision and Pattern Recognition ,pp.1–8,IEEE,2007.
[112]G.VogiatzisandC.Hernández,“Video-based,real-
timemulti-viewstereo,” ImageandVisionComputing
,vol.29,no.7,pp.434–441,2011.
[113]A.Handa,R.A.Newcombe,A.Angeli,and
A.J.Davison,“Real-time camera tracking:When is high frame-
rate best?,”in European Conference on Computer Vision
,pp.222–235,Springer,2012.
[114]J.Montiel,J.Civera,andA.J.Davison,“Uni fi
edinversedepthparametrizationformonocularslam,” analysis
,vol.9,p.1,2006.
[115]J.Civera,A.J.Davison,and J.M.Montiel,“Inverse depth
parametrization for monocular slam,” IEEE transactions on
robotics ,vol.24,no.5,pp.932–945,2008.
[116]M.Kazhdan,M.Bolitho,and H.Hoppe,“Poisson surface
reconstruction,”in Proceedings of the fourth Eurographics
symposium on Geometry processing ,vol.7,2006.
[117]J.Stuckler and S.Behnke,“Multi-resolution surfel
Journal
maps for e ffi cient dense 3d modeling and tracking,”
of Visual Communication and Image Representation
,vol.25,no.1,pp.137–147,2014.
[118]A.Hornung,K.M.Wurm,M.Bennewitz,C.Stachniss,and
W.Burgard,“Octomap:An e ffi cient
probabilistic3dmappingframeworkbasedonoctrees,” AutonomousRob
ots ,vol.34,no.3,pp.189–206,2013.
[119]M.Burri,H.Oleynikova,M.W.Achtelik,and
R.Siegwart,“Real-time visual-inertial mapping,re-
localization and planning onboard mavs in unknown
environments,”in Intelligent Robots and Systems(IROS),2015
IEEE/RSJ International Conference on ,pp.1872–
1878,IEEE,2015.
[120]R.A.Newcombe,A.J.Davison,S.Izadi,P.Kohli,O.Hilliges,
J.Shotton,D.Molyneaux,S.Hodges,D.Kim,and
A.Fitzgibbon,“Kinectfusion:Real-time dense surface mapping
and tracking,”in 2011 10th IEEE international symposium on
Mixed and augmented reality(ISMAR) ,pp.127–136,IEEE,2011.
[121]R.A.Newcombe,D.Fox,and
S.M.Seitz,“Dynamicfusion:Reconstruction and tracking of
nonrigid scenes in real-time,”in Proceedings of the IEEE
conference on computer vision and pattern recognition ,pp.343
–352,2015.
[122]T.Whelan,S.Leutenegger,R.F.Salas-
Moreno,B.Glocker,and A.J.Davison,“Elasticfusion:Dense slam
without a pose graph,” Proc.Robotics:Science and
Systems,Rome,Italy ,2015.
[123]M.Dou,S.Khamis,Y.Degtyarev,P.Davidson,S.R.Fanello,A.
Kowdle,S.O.Escolano,C.Rhemann,D.Kim,J.Taylor, et al.
,“Fusion4d:real-time performance capture of challenging
scenes,” ACM Transactions on Graphics(TOG)
,vol.35,no.4,p.114,2016.
[124]M.Innmann,M.Zollhöfer,M.Nießner,C.Theobalt,and
M.Stamminger,“Volumedeform:Realtime volumetric non-rigid
reconstruction,” arXiv preprint arXiv:1603.08161
,2016.
[125]A.J.Davison,“Real-
C
timesimultaneouslocalisationandmappingwithasinglecamera,”in
omputer Vision,2003.Proceedings.Ninth IEEE International
Conference on ,pp.1403–1410,IEEE,2003.
[126]C.Kerl,J.Sturm,andD.Cremers,“Robustodometryestimati
onforrgb-dcameras,”in Roboticsand Automation(ICRA),2013 IEEE
International Conference on ,pp.3748–3754,IEEE,2013.
[127]C.Kerl,J.Sturm,and D.Cremers,“Dense visual slam for
rgb-d cameras,”in 2013 IEEE/RSJ International Conference on
Intelligent Robots and Systems ,pp.2100–2106,IEEE,2013.
[128]J.Gui,D.Gu,S.Wang,and H.Hu,“A review of visual
inertial odometry from fi ltering and optimisation
perspectives,” Advanced Robotics
,vol.29,pp.1289–1301,Oct 18
2015.
[129]A.Martinelli,“Closed-formsolutionofvisual-
inertialstructurefrommotion,” InternationalJournal of
Computer Vision ,vol.106,no.2,pp.138–152,2014.
[130]M.Bloesch,S.Omari,M.Hutter,and R.Siegwart,“Robust
visual inertial odometry using a direct ekf-based
approach,”in Intelligent Robots and Systems(IROS),2015
IEEE/RSJ International Conference on ,pp.298–304,IEEE,2015.
[131]M.Li and A.I.Mourikis,“High-precision,consistent
ekf-based visual-inertial odometry,” International Journal of
Robotics Research ,vol.32,pp.690–711,MAY 2013.
[132]G.Huang,M.Kaess,andJ.J.Leonard,“Towardsconsistentvi
2014IEEE International Conference
sual-inertialnavigation,”in
on Robotics and Automation(icra) ,IEEE International
Conference on RoboticsandAutomationICRA,pp.4926–
4933,2014.IEEEInternationalConferenceonRobotics and
Automation(ICRA),Hong Kong,PEOPLES R CHINA,MAY 31-JUN
07,2014.
[133]C.Forster,L.Carlone,F.Dellaert,andD.Scaramuzza,“Imu
preintegrationonmanifoldfore ffi cient visual-inertial
maximum-a-posteriori estimation,”in Robotics:Science and
Systems XI ,no.EPFLCONF-214687,2015.
[134]M.Tkocz and K.Janschek,“Towards consistent state
and covariance initialization for monocular slam fi
lters,” Journal of Intelligent&Robotic Systems
,vol.80,pp.475
–489,DEC 2015.
[135]A.NüchterandJ.Hertzberg,“Towardssemanticmapsformobi
lerobots,” RoboticsandAutonomous Systems
,vol.56,no.11,pp.915
–926,2008.
[136]J.Civera,D.Gálvez-López,L.Riazuelo,J.D.Tardós,and
J.Montiel,“Towards semantic slam using a monocular
camera,”in Intelligent Robots and Systems(IROS),2011
IEEE/RSJ International Conference on ,pp.1277–
1284,IEEE,2011.
[137]H.S.Koppula,A.Anand,T.Joachims,and
A.Saxena,“Semantic labeling of 3d point clouds for indoor
scenes,”in Advances in Neural Information Processing Systems
,pp.244–252,2011.
[138]A.Anand,H.S.Koppula,T.Joachims,and
A.Saxena,“Contextually guided semantic labeling and search
for three-dimensional point clouds,” The International
Journal of Robotics Research ,p.0278364912461538,2012.
[139]N.Fioraio and L.Di Stefano,“Joint
detection,tracking and mapping by semantic bundle
adjustment,” 2013 IEEE Conference on Computer Vision and
Pattern Recognition(CVPR) ,pp.1538–45,2013.
[140]R.F.Salas-Moreno,B.Glocken,P.H.Kelly,and
A.J.Davison,“Dense planar slam,”in Mixed and Augmented
Reality(ISMAR),2014 IEEE International Symposium on ,pp.157–
164,IEEE,2014.
[141]J.Stückler,N.Biresev,and S.Behnke,“Semantic mapping
using object-class segmentation of rgb-d images,”in 2012
IEEE/RSJ International Conference on Intelligent Robots and
Systems ,pp.3005–3010,IEEE,2012.
[142]I.Kostavelis and A.Gasteratos,“Learning spatially
semantic representations for cognitive robot
navigation,” Robotics and Autonomous Systems
,vol.61,no.12,pp.1460–1475,2013.
[143]C.Couprie,C.Farabet,L.Najman,and Y.LeCun,“Indoor
semantic segmentation using depth information,” arXiv
preprint arXiv:1301.3572 ,2013.
[144]J.Deng,W.Dong,R.Socher,L.-J.Li,K.Li,and L.Fei-
Fei,“Imagenet:A large-scale hierarchical image database,”in
CVPR09 ,2009.
[145]A.Krizhevsky,I.Sutskever,and G.E.Hinton,“Imagenet
classi fi cation with deep convolutional neural networks,”in
Advances in neural information processing systems ,pp.1097–
1105,2012.
[146]K.He,X.Zhang,S.Ren,and J.Sun,“Deep residual
learning for image recognition,” arXiv preprint
arXiv:1512.03385 ,2015.
[147]S.Ren,K.He,R.Girshick,andJ.Sun,“Fasterr-
cnn:Towardsreal-timeobjectdetectionwithregion proposal
networks,”in Advances in neural information processing
systems ,pp.91–99,2015.
[148]J.Long,E.Shelhamer,and T.Darrell,“Fully
convolutional networks for semantic segmentation,” arXiv
preprint arXiv:1411.4038 ,2014.
[149]S.Zheng,S.Jayasumana,B.Romera-
Paredes,V.Vineet,Z.Su,D.Du,C.Huang,and P.Torr,“Conditional
random fi elds as recurrent neural networks,”in
International Conference on Computer Vision(ICCV) ,2015.
[150]S.Gupta,P.Arbeláez,R.Girshick,and J.Malik,“Indoor
scene understanding with rgb-d images:Bottom-up
segmentation,object detection and semantic
segmentation,” International Journal of Computer Vision,pp.1
–17,2014.
[151]K.Konda and R.Memisevic,“Learning visual odometry
with a convolutional network,”in International Conference on
Computer Vision Theory and Applications
,2015.
[152]A.Kendall,M.Grimes,and R.Cipolla,“Posenet:A
convolutional network for real-time 6-dof camera
relocalization,”in Proceedings of the IEEE International
Conference on Computer Vision ,pp.2938–2946,2015.
[153]Y.Hou,H.Zhang,and S.Zhou,“Convolutional neural
network-based image representation for visual loop closure
detection,” arXiv preprint arXiv:1504.05241
,2015.
[154]S.Y.An,J.G.Kang,L.K.Lee,and S.Y.Oh,“Line segment-
based indoor mapping with salient line feature
extraction,” Advanced Robotics ,vol.26,no.5-6,pp.437–
460,2012.
[155]H.Zhou,D.Zou,L.Pei,R.Ying,P.Liu,andW.Yu,“Structslam
:Visualslamwithbuildingstructure lines,” Vehicular
Technology,IEEE Transactions on ,vol.64,pp.1364–1375,April
2015.
[156]D.Benedettelli,A.Garulli,and
A.Giannitrapani,“Cooperative slam using m-space
representation of linear features,” Robotics and Autonomous
Systems ,vol.60,no.10,pp.1267–1278,2012.
[157]J.P.Saarinen,H.Andreasson,T.Stoyanov,and
A.J.Lilienthal,“3d normal distributions transform occupancy
maps:An e ffi cient representation for mapping in dynamic
environments,” The International Journal of Robotics Research
,vol.32,no.14,pp.1627–1644,2013.
[158]W.Maddern,M.Milford,and G.Wyeth,“Cat-
slam:probabilistic localisation and mapping using a
continuousappearance-
basedtrajectory,” InternationalJournalofRoboticsResearch
,vol.31,no.4SI,pp.429–451,2012.
[159]H.Wang,Z.-G.Hou,L.Cheng,and M.Tan,“Online mapping
with a mobile robot in dynamic and
unknownenvironments,” InternationalJournalofModelling,Identi
fi cationandControl ,vol.4,no.4,pp.415–423,2008.
[160]D.Zou and P.Tan,“Coslam:Collaborative visual SLAM
IEEE Transactions On Pattern
in dynamic environments,”
Analysis And Machine Intelligence ,vol.35,no.2,pp.354–
366,2013.
[161]T.A.Vidal-
Calleja,C.Berger,J.Sola,andS.Lacroix,“Largescalemultiplerobo
tvisualmappingwith heterogeneous landmarks in semi-structured
terrain,” Robotics and Autonomous Systems ,vol.59,no.9,pp.654
–674,2011.