基本信息
源码名称:视觉SLAM十四讲.pdf
源码大小:85.56M
文件格式:.pdf
开发语言:C/C++
更新时间:2020-11-24
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
视觉SLAM十四讲
视觉SLAM十四讲
目录 第 1 讲 前言 1 1.1 本书讲什么 . . . . . . . . . . 1 1.2 如何使用本书 . . . . . . . . . 3 1.2.1 组织方式 . . . . . . . 3 1.2.2 代码 . . . . . . . . . . 5 1.2.3 面向的读者 . . . . . . 6 1.3 风格约定 . . . . . . . . . . . 6 1.4 致谢和声明 . . . . . . . . . . 8 第 2 讲 初识 SLAM 10 2.1 引子:小萝卜的例子 . . . . . 12 2.2 经典视觉 SLAM 框架 . . . . 18 2.2.1 视觉里程计 . . . . . . 19 2.2.2 后端优化 . . . . . . . 21 2.2.3 回环检测 . . . . . . . 21 2.2.4 建图 . . . . . . . . . . 22 2.3 SLAM 问题的数学表述 . . . . 24 2.4 实践:编程基础 . . . . . . . . 27 2.4.1 安装 Linux 操作系统 . 27 2.4.2 Hello SLAM . . . . . . 29 2.4.3 使用 cmake . . . . . . 30 2.4.4 使用库 . . . . . . . . . 32 2.4.5 使用 IDE . . . . . . . 34 第 3 讲 三维空间刚体运动 39 3.1 旋转矩阵 . . . . . . . . . . . 41 3.1.1 点和向量,坐标系 . . 41 3.1.2 坐标系间的欧氏变换 . 42 3.1.3 变换矩阵与齐次坐标 . 45 3.2 实践:Eigen . . . . . . . . . . 46 3.3 旋转向量和欧拉角 . . . . . . 50 3.3.1 旋转向量 . . . . . . . 50 3.3.2 欧拉角 . . . . . . . . . 52 3.4 四元数 . . . . . . . . . . . . . 53 3.4.1 四元数的定义 . . . . . 53 3.4.2 四元数的运算 . . . . . 55 3.4.3 用四元数表示旋转 . . 57 3.4.4 四元数到旋转矩阵的 转换 . . . . . . . . . . 57 3.5 * 相似、仿射、射影变换 . . . 58 3.6 实践:Eigen 几何模块 . . . . 59 3.7 可视化演示 . . . . . . . . . . 62 第 4 讲 李群与李代数 64 4.1 李群李代数基础 . . . . . . . . 66 4.1.1 群 . . . . . . . . . . . 66 4.1.2 李代数的引出 . . . . . 67 4.1.3 李代数的定义 . . . . . 69 4.1.4 李代数 so(3) . . . . . 69 4.1.5 李代数 se(3) . . . . . 70 4.2 指数与对数映射 . . . . . . . . 71 4.2.1 SO(3) 上的指数映射 . 71 4.2.2 SE(3) 上的指数映射 . 73 4.3 李代数求导与扰动模型 . . . . 74 4.3.1 BCH 公式与近似形式 74 4.3.2 SO(3) 李代数上的求导 76 4.3.3 李代数求导 . . . . . . 77 4.3.4 扰动模型(左乘) . . 78 i ii 目录 4.3.5 SE(3) 上的李代数求导 79 4.4 实践:Sophus . . . . . . . . . 80 4.5 * 相似变换群与李代数 . . . . 82 4.6 小结 . . . . . . . . . . . . . . 84 第 5 讲 相机与图像 85 5.1 相机模型 . . . . . . . . . . . 87 5.1.1 针孔相机模型 . . . . . 87 5.1.2 畸变 . . . . . . . . . . 90 5.1.3 双目相机模型 . . . . . 93 5.1.4 RGB-D 相机模型 . . . 95 5.2 图像 . . . . . . . . . . . . . . 97 5.2.1 计算机中图像的表示 . 97 5.3 实践:图像的存取与访问 . . 99 5.3.1 安装 OpenCV . . . . . 99 5.3.2 操作 OpenCV 图像 . . 100 5.4 实践:拼接点云 . . . . . . . . 103 第 6 讲 非线性优化 108 6.1 状态估计问题 . . . . . . . . . 110 6.1.1 最大后验与最大似然 . 110 6.1.2 最小二乘的引出 . . . . 112 6.2 非线性最小二乘 . . . . . . . . 113 6.2.1 一阶和二阶梯度法 . . 114 6.2.2 Gauss-Newton . . . . 115 6.2.3 Levenberg-Marquadt . 117 6.2.4 小结 . . . . . . . . . . 119 6.3 实践:Ceres . . . . . . . . . . 120 6.3.1 Ceres 简介 . . . . . . 120 6.3.2 安装 Ceres . . . . . . 121 6.3.3 使用 Ceres 拟合曲线 . 121 6.4 实践:g2o . . . . . . . . . . . 125 6.4.1 图优化理论简介 . . . . 125 6.4.2 g2o 的编译与安装 . . 126 6.4.3 使用 g2o 拟合曲线 . . 127 6.5 小结 . . . . . . . . . . . . . . 131 第 7 讲 视觉里程计 1 133 7.1 特征点法 . . . . . . . . . . . 134 7.1.1 特征点 . . . . . . . . . 134 7.1.2 ORB 特征 . . . . . . . 136 7.1.3 特征匹配 . . . . . . . 139 7.2 实践:特征提取和匹配 . . . . 140 7.3 2D-2D: 对极几何 . . . . . . . 143 7.3.1 对极约束 . . . . . . . 143 7.3.2 本质矩阵 . . . . . . . 146 7.3.3 单应矩阵 . . . . . . . 148 7.4 实践:对极约束求解相机运动 151 7.4.1 讨论 . . . . . . . . . . 154 7.5 三角测量 . . . . . . . . . . . 155 7.6 实践:三角测量 . . . . . . . . 157 7.6.1 三角测量代码 . . . . . 157 7.6.2 讨论 . . . . . . . . . . 159 7.7 3D-2D: PnP . . . . . . . . . . 160 7.7.1 直接线性变换 . . . . . 160 7.7.2 P3P . . . . . . . . . . 162 7.7.3 Bundle Adjustment . . 164 7.8 实践:求解 PnP . . . . . . . 168 7.8.1 使用 EPnP 求解位姿 . 168 7.8.2 使用 BA 优化 . . . . . 169 7.9 3D-3D: ICP . . . . . . . . . . 175 7.9.1 SVD 方法 . . . . . . . 175 7.9.2 非线性优化方法 . . . . 177 7.10 实践:求解 ICP . . . . . . . 178 7.10.1 SVD 方法 . . . . . . . 178 7.10.2 非线性优化方法 . . . . 180 7.11 小结 . . . . . . . . . . . . . . 182 目录 iii 第 8 讲 视觉里程计 2 184 8.1 直接法的引出 . . . . . . . . . 185 8.2 光流(Optical Flow) . . . . 186 8.2.1 Lucas-Kanade 光流 . . 187 8.3 实践:LK 光流 . . . . . . . . 189 8.3.1 使用 TUM 公开数据集 189 8.3.2 使用 LK 光流 . . . . . 190 8.4 直接法(Direct Methods) . 193 8.4.1 直接法的推导 . . . . . 193 8.4.2 直接法的讨论 . . . . . 197 8.5 实践:RGB-D 的直接法 . . . 197 8.5.1 稀疏直接法 . . . . . . 197 8.5.2 定义直接法的边 . . . . 198 8.5.3 使用直接法估计相机 运动 . . . . . . . . . . 200 8.5.4 半稠密直接法 . . . . . 201 8.5.5 直接法的讨论 . . . . . 202 8.5.6 直接法优缺点总结 . . 205 第 9 讲 实践章:设计前端 207 9.1 搭建 VO 框架 . . . . . . . . . 208 9.1.1 确定程序框架 . . . . . 209 9.1.2 确定基本数据结构 . . 210 9.1.3 Camera 类 . . . . . . 212 9.1.4 Frame 类 . . . . . . . 214 9.1.5 MapPoint 类 . . . . . 215 9.1.6 Map 类 . . . . . . . . 216 9.1.7 Config 类 . . . . . . . 217 9.2 基本的 VO:特征提取和匹配 218 9.2.1 两两帧的视觉里程计 . 219 9.2.2 讨论 . . . . . . . . . . 226 9.3 改进:优化 PnP 的结果 . . . 227 9.3.1 讨论 . . . . . . . . . . 229 9.4 改进:局部地图 . . . . . . . . 229 9.5 小结 . . . . . . . . . . . . . . 235 第 10 讲 后端 1 237 10.1 概述 . . . . . . . . . . . . . . 238 10.1.1 状态估计的概率解释 . 238 10.1.2 线性系统和 KF . . . . 241 10.1.3 非线性系统和 EKF . . 244 10.1.4 EKF 的讨论 . . . . . . 245 10.2 BA 与图优化 . . . . . . . . . 246 10.2.1 投影模型和 BA 代价 函数 . . . . . . . . . . 247 10.2.2 BA 的求解 . . . . . . 248 10.2.3 稀疏性和边缘化 . . . . 250 10.2.4 鲁棒核函数 . . . . . . 257 10.2.5 小结 . . . . . . . . . . 258 10.3 实践:g2o . . . . . . . . . . . 259 10.3.1 BA 数据集 . . . . . . 259 10.3.2 g2o 求解 BA . . . . . 260 10.3.3 求解 . . . . . . . . . . 264 10.4 实践:Ceres . . . . . . . . . . 266 10.4.1 Ceres 求解 BA . . . . 266 10.4.2 求解 . . . . . . . . . . 268 10.5 小结 . . . . . . . . . . . . . . 270 第 11 讲 后端 2 272 11.1 位姿图(Pose Graph) . . . . 273 11.1.1 Pose Graph 的意义 . . 273 11.1.2 Pose Graph 的优化 . . 274 11.2 实践:位姿图优化 . . . . . . 276 11.2.1 g2o 原生位姿图 . . . . 276 11.2.2 李代数上的位姿图优化 280 11.2.3 小结 . . . . . . . . . . 285 11.3 * 因子图优化初步 . . . . . . . 286 11.3.1 贝叶斯网络 . . . . . . 286 11.3.2 因子图 . . . . . . . . . 287 iv 目录 11.3.3 增量特性 . . . . . . . 289 11.4 * 实践:gtsam . . . . . . . . 290 11.4.1 安装 gtsam 4.0 . . . . 290 11.4.2 位姿图优化 . . . . . . 291 第 12 讲 回环检测 298 12.1 回环检测概述 . . . . . . . . . 299 12.1.1 回环检测的意义 . . . . 299 12.1.2 方法 . . . . . . . . . . 300 12.1.3 准确率和召回率 . . . . 301 12.2 词袋模型 . . . . . . . . . . . 303 12.3 字典 . . . . . . . . . . . . . . 305 12.3.1 字典的结构 . . . . . . 305 12.3.2 实践:创建字典 . . . . 307 12.4 相似度计算 . . . . . . . . . . 309 12.4.1 理论部分 . . . . . . . 309 12.4.2 实践:相似度的计算 . 310 12.5 实验分析与评述 . . . . . . . . 314 12.5.1 增加字典规模 . . . . . 314 12.5.2 相似性评分的处理 . . 316 12.5.3 关键帧的处理 . . . . . 316 12.5.4 检测之后的验证 . . . . 316 12.5.5 与机器学习的关系 . . 317 第 13 讲 建图 319 13.1 概述 . . . . . . . . . . . . . . 320 13.2 单目稠密重建 . . . . . . . . . 322 13.2.1 立体视觉 . . . . . . . 322 13.2.2 极线搜索与块匹配 . . 323 13.2.3 高斯分布的深度滤波器 325 13.3 实践:单目稠密重建 . . . . . 328 13.3.1 实验结果 . . . . . . . 337 13.4 实验分析与讨论 . . . . . . . . 339 13.4.1 像素梯度的问题 . . . . 339 13.4.2 逆深度 . . . . . . . . . 341 13.4.3 图像间的变换 . . . . . 342 13.4.4 并行化:效率的问题 . 343 13.4.5 其他的改进 . . . . . . 343 13.5 RGB-D 稠密建图 . . . . . . . 344 13.5.1 实践:点云地图 . . . . 344 13.5.2 八叉树地图 . . . . . . 348 13.5.3 实践:八叉树地图 . . 351 13.6 *TSDF 地图和 Fusion 系列 . 353 13.7 小结 . . . . . . . . . . . . . . 356 第 14 讲 SLAM:现在与未来 358 14.1 当前的开源方案 . . . . . . . . 359 14.1.1 MonoSLAM . . . . . . 360 14.1.2 PTAM . . . . . . . . . 361 14.1.3 ORB-SLAM . . . . . . 362 14.1.4 LSD-SLAM . . . . . . 364 14.1.5 SVO . . . . . . . . . . 366 14.1.6 RTAB-MAP . . . . . . 367 14.1.7 其他 . . . . . . . . . . 368 14.2 未来的 SLAM 话题 . . . . . . 368 14.2.1 视觉 惯导 SLAM . 369 14.2.2 语义 SLAM . . . . . . 370 14.2.3 SLAM 的未来 . . . . . 372 附录 A 高斯分布的性质 373 A.1 高斯分布 . . . . . . . . . . . 373 A.2 高斯分布的运算 . . . . . . . . 373 A.2.1 线性运算 . . . . . . . 373 A.2.2 乘积 . . . . . . . . . . 374 A.2.3 复合运算 . . . . . . . 374 A.3 复合的例子 . . . . . . . . . . 374 附录 B ROS 入门 375 B.1 ROS 是什么 . . . . . . . . . . 375 B.2 ROS 的特点 . . . . . . . . . . 375 B.3 如何快速上手 ROS? . . . . 376