RGB-D SLAM 姜翰青商汤科技研究院浙大 - 商汤三维视觉联合实验室
目录 RGB-D 传感器 RGB-D 相机跟踪 模型表示与重建 RKD-SLAM 产业化应用
RGB-D 传感器
RGB-D 传感器 Kinect Xtion ZED Tango 等等 Kinect Xtion 图片来自微软 华硕官网
RGB-D 传感器 按工作原理分类 : 双目方案 ZED Tango 结构光方案 TOF 方案 Kinect v1 Xtion Kinect v2 RealSense https://www.pcmag.com/news/356997/microsoft-is-ending-kinect-production
双目 立体匹配 https://my.oschina.net/abcijkxyz/blog/788647
结构光 主动投影已知图案的方法来实现快速鲁棒的匹配特征点 陈彦军, 左旺孟, 王宽全, 等. 结构光编码方法综述 [J]. 小型微型计算机系统, 2010 (9): 1856-1863.
TOF 测量发射与反射红外信号的相位延迟, 计算每个 sensor 像素到目标物体的距离 https://my.oschina.net/abcijkxyz/blog/788647
RGB-D 传感器 各方案的优劣 双目 : 成本最低, 但深度信息依赖纯软件算法得出, 算法复杂度高, 计算性能要求高, 受光照等影响 结构光 : 技术成熟, 深度图像分辨率可以做得比较高, 但容易受光照影响, 室外环境基本不能使用 TOF: 抗干扰性能好, 视角更宽, 深度图像分辨率较低, 不适合高精度场合 受环境影响小, 传感器芯片并不成熟, 成本很高
RGB-D 传感器 使用 RGB-D 传感器优点是不需要计算特征点和描述子, 就可以直接得到稠密或半稠密的深度图 框架也相对传统 SLAM 简单, 可分为前端 RGB-D 相机跟踪与后端模型重建
RGB-D SLAM 算法流程 RGB-D 传感器 RGBD 视频 RGB-D 相机跟踪 6DoF 位姿 稠密模型重建 后端模型维护 全局模型优化 稠密模型
RGB-D 相机跟踪
RGB-D 相机跟踪 特征点法 ICP RGB-D 对齐
RGB-D 相机跟踪 特征点法 包含了传统的 RGB 信息, 也可以使用特征点匹配求解相机位姿 一般场景都能提供丰富的特征点, 场景适应性较好, 能够利用特征点进行重定位 缺点是特征点计算法耗时 ; 特征点利用到的信息太少, 丢失了图像中的大部分信息和深度信息, 在弱纹理环境下特征少等
RGB-D 相机跟踪 直接法 包含了传统的 RGB 信息, 也可以使用直接法求解相机位姿 优点是不需要计算特征描述子, 可以得到稠密或半稠密的地图 ; 在特征缺失时也可正常使用 缺点灰度不变假设在实际环境中不一定成立, 要求像机运动速度不能太快, 不能自动曝光等
RGB-D 相机跟踪 迭代最邻近算法 (ICP) 该算法重复进行选择对应关系点对, 计算最优刚体变换, 然后应用变换, 再寻找对应关系点对, 计算新的最优变换, 直到满足正确配准的收敛精度要求 充分利用了深度图点云信息, 利用点云的几何结构特征, 不依靠 RGB 特征与光度
ICP(Iterative Closest Point) 目标 给定两组点云 P = {p 1, p 2,, p m }, Q = {q 1, q 2,, q n }, 求解两组点云之间的变换 T 使得下式得到最优解 : cost 是代价函数, 度量匹配的误差 http://pointclouds.org/documentation/tutorials/interactive_icp.php#interactive-icp
ICP 步骤 固定相对变换 T, 求解最优的对应关系 A, 这一步即所谓的数据关联 (data association) 固定匹配关系 A, 求解最优的相对变换 T:
ICP 取样 : 选择一个或两个网格上的部分点作为样本 匹配 : 建立样本点的数据关联关系 置权 : 给关联样本点对设置权重 过滤 : 对不符合条件的关联点对做删除 误差度量 : 给关联点对设置误差度量 最优化 : 最优化误差度量
ICP Variants 取样 Uniform Sampling Random Sampling Normal Space Sampling 选择样本点使得样本点法向散布最大
ICP Variants Data association Closet point K-D Tree Normal shooting https://en.wikipedia.org/wiki/k-d_tree
ICP Variants Data association Project project and walk x u d, vd, 1 = KMX s K 是相机内参数,X s 是待求匹配点的三维空间坐 标,x 是匹配点像素坐标,M 是两帧之间的位姿变 换, 在 ICP 算法中通过不断迭代求得 https://blog.csdn.net/fuxingyin/article/details/51425721
ICP Variants 权值设置 Constant weight Linear with distance Compatibility of normals Uncertainty 基于相机噪声的权值设置
ICP Variants 过滤准则 距离超过固定门限的关联点对删除 距离最大的 n% 关联点对删除 距离超过 2.5 倍标准差的关联点对删除
ICP Variants 误差度量 point-to-point point-to-plane Low K L. Linear least-squares optimization for point-to-plane icp surface registration[j]. Chapel Hill, University of North Carolina, 2004, 4: 1.
ICP 缺点 对位姿初值很敏感, 需要有较好的初值 只利用了深度信息, 没有利用 RGB 信息
ICP 算法举例 :KinectFusion Convert the depth image into Vertex map Normal map Pyramid ICP Projective data association Remove outliers by normal direction and distance Minimize point to plane distance
ICP 算法举例 :ElasticFusion Frame-to-model ICP based on surfels A time window divides the model into active/inactive part A surfel is active if it is most recent update time t Only active surfels are used to do camera pose estimation and depth map fusion
RGB-D 对齐 通过最小化逆深度误差和光度误差来求解两帧之间的相对相机姿态 几何误差 E z = x i ρ z 1 z X j Z j x j z X j 代表点 X j 在第 i 帧上的深度,Z j (x j ) 代表第 j 帧的深度图上点 X j 的投影位置 x j 对应的深度 ρ z 是相应的鲁棒化函数
RGB-D 对齐 相对于 ICP 算法,RGB-D 对齐不仅考虑到了深度信息的几何误差, 还考虑了光度误差 光度误差 E I = x i ρ I I i x i I j x j I i (x i ) 代表第 i 帧上 x i 对应的光度 ρ I 是相应的鲁棒化函数 总能量函数 arg min T E align = E z + α E I
RGB-D 对齐算法举例 :BundleFusion Correspondence Filtering Consistent Correspondence
RGB-D 对齐算法举例 :BundleFusion Sparse-to-Dense Optimization
RGB-D 对齐算法举例 :BundleFusion Sparse-to-Dense Optimization
RGB-D 对齐算法举例 :BundleFusion Sparse-to-Dense Optimization
模型表示与重建
模型表示与重建 渐进式在线重建 可以支持在线高效更新 网格表达不适合在线更新 两种常见模型表示 TSDF Surfel 一些代表性算法 KinectFusion Kintinuous InfiniTAM ElasticFusion BundleFusion
TSDF 带符号距离函数 (Signed Distance Function): sdf: R 3 R 对于点 p, sdf(p) 记录了把它映射到最近表面的距离 sdf(p) 为 0 的集合即为表面 截断带符号距离函数 (Truncated Signed Distance Function) 实际上, 对于三维重建而言, 我们仅仅需要找到 SDF 为 0 的点, 因此只有表面附近的点是有用的, 因此通常会对 SDF 进行截断, 不再存储离表面较远处点的 SDF
TSDF: rendering by raycasting 渲染一个像素 x 时 从相机中心投射一条射线, 寻找它和模型 的交点 这个交点的 TSDF 函数值为 0 一个简单的实现 : 采用固定步长 但是我们可以用 TSDF 来加速 : 渲染时间近似与图像的尺寸线性相关 http://flafla2.github.io/2016/10/01/raymarching.html
基于 TSDF 的 KinectFusion
http://ifp.unistuttgart.de/lehre/diplomarbeiten/korcz/index.html 基于 TSDF 的 KinectFusion Integration For each voxel Project the voxel to image space Compute the TSDF observation d(x) Update by weighted sum
基于 TSDF 的 KinectFusion - Limitations Only use depth image Robust to lighting Works on dark environment But not works on structureless scene High memory consumption Each voxel takes 8 byte A 2mx2mx2m scene, takes ~0.5GB at 5mm resolution (geometry only, double if add color)
TSDF 的改进 :Kintinuous
TSDF 的改进 :Kintinuous Whelan T, Kaess M, Fallon M, et al. Kintinuous: Spatially extended kinectfusion[j]. 2012.
TSDF 的改进 :InfiniTAM Voxel Hashing
基于 TSDF Re-integration 的 BundleFusion On-the-fly Scene Updates Surface integration [Curless and Levoy 96]
基于 TSDF Re-integration 的 BundleFusion On-the-fly Scene Updates Surface De-integration
基于 TSDF Re-integration 的 BundleFusion On-the-fly Scene Updates
基于 TSDF Re-integration 的 BundleFusion On-the-fly Scene Updates
基于 TSDF Re-integration 的 BundleFusion On-the-fly Scene Updates
Surfel Surfel: 表面的一个小的面元 几何属性 位置 法向 半径... 反射属性 颜色... model: 面元的集合 Pfister H, Zwicker M, Van Baar J, et al. Surfels: Surface elements as rendering primitives[c]//proceedings of the 27th annual conference on Computer graphics and interactive techniques. ACM Press/Addison-Wesley Publishing Co., 2000: 335-342.
Surfel: splat rendering 渲染一个 Surfel 是非常简单的 : 直接单独渲染一个 Surfel 是不行的, 因为面元之间可能有重叠! http://www.cs.rug.nl/~roe/courses/acg/gpurendering
http://www.cs.rug.nl/~roe/courses/acg/gpurendering Surfel: splat rendering (cont.) 使用高斯核卷积 取加权和
基于 Surfel 的 ElasticFusion
基于 Surfel 的 ElasticFusion Surfel based representation Support loop closure, online model adjustment Thomas Whelan, Stefan Leutenegger, R Salas-Moreno, Ben Glocker, Andrew Davison. Elasticfusion: Dense slam without a pose graph[c]. Robotics: Science and Systems, 2015.
基于 Surfel 的 ElasticFusion The model is an unordered list of Surfels Each surfel contains: Position p Normal n Radius r Color c Confidence (how often it s observed) Create timestamp t0, most recent update timestamp t
RKD-SLAM
RKD-SLAM 系统框架 非常快速鲁棒的基于 RGB-D 的跟踪方法 ( 单 CPU 下约 70-200 fps) 非常快速的增量集束调整算法 非常高效的基于关键帧的深度表达和融合方法 支持快速运动 回路闭合 重定位和长时间运行
Efficient Incremental BA 提出了一个非常高效的 Incremental Schur complement 计算方法 ; 采用 Preconditioned Conjugated Gradient 进行求解, 比 Factorization 的方法要快 ; 速度比 isam2 快一个数量级
Efficient Incremental BA 与 isam2 的对比 运行时间 Reprojection Error
Integration & De-integration 使用 de-integration 可以将模型复原到 integration 前 + -
Keyframe-based Fusion 对于新来的一帧 F i 如果是关键帧, 则 integrate 到 TSDF 如非关键帧, 则选出重合度最大的关键帧 F ki 进行 de-integrate 然后将该帧深度 fuse 到 F ki 上 然后将 fuse 后的关键帧 re-integrate 到 TSDF
Keyframe-based Fusion 当关键帧的姿态发生改变 (EIBA 优化后 ) 根据 EIBA 的优化结果, 对姿态改变的关键帧进行 reintegration. 维护一个关键帧更新队列 优先更新姿态改变最大的关键帧 ; 每个时刻只对固定数量的关键帧进行 re-integration, 没有更新的关键帧会在放在后面的时刻更新
Comparison of ATE RMSE on all of the sequences on TUM RGB-D Benchmark
Reconstruction Result
Comparations without/with Re-integration
鲁棒处理快速运动 https://arxiv.org/abs/1711.05166
在线的回路闭合和三维表面调整 https://arxiv.org/abs/1711.05166
推荐开源系统 Kintinuous https://github.com/mp3guy/kintinuous InfiniTAM https://github.com/victorprad/infinitam ElasticFusion https://github.com/mp3guy/elasticfusion BundleFusion https://github.com/niessner/bundlefusion
产业化落地
RGBD-SLAM 的产业应用 落地场景 商用级三维扫描重建 移动端三维扫描重建 移动端增强现实 难点和挑战 深度质量 平台算力 复杂场景 高反光 透明 运动物体
商用级三维扫描重建 针对物体的扫描 应用领域 考古研究数字化保护 高仿真玩具 医疗诊断
商用级三维扫描重建 针对环境的扫描 应用领域 三维场景展示漫游
移动端三维物体扫描重建 手机端在线扫描技术 AR 内容生成创作 手机平台实时扫描 快速三维重建 几何重建 纹理贴图
移动平台增强现实 SenseAR RGBD-SLAM SenseAR 实时稠密三维环境重建 虚实交互 物理碰撞 遮挡处理 复杂阴影投射
Thank you! Q & A