[代码学习] Real-time Depth Enhanced Monocular Odometry概述
《Real-time Depth Enhanced Monocular Odometry》是Ji Zhang等大牛于2014年发表在IROS的一篇论文。这篇论文将普通的单目相机和其他设备获取的深度信息相结合,设计了一个里程计。
论文的获取链接:论文链接
源代码的获取链接:demo_rgbd以及demo_lidar
这篇文章的大致思路是通过单目相机获取RGB图像,通过LiDAR或者是RGB-D相机获取深度信息。然后对RGB图像进行特征点的提取,然后对深度图进行处理,将相邻两帧图像能够匹配上的特征点所对应的深度值进行分类,分为传感器获取的,利用三角化、kd-tree恢复的,以及无法获得深度信息的,这三类。然后根据分类利用不同的公式,进行位姿的求解。接着最后是BA优化,这里的BA优化是每5帧选择一帧,也就是40帧挑选8帧出来进行优化。整体的系统框图如下图所示。
接着对这篇论文进行motion estimation时利用到的公式进行一些简单的推导如下:
上述这两个公式是论文中的公式(3)和公式(4),对应的情况是k-1帧的特征点的深度信息已知。表达了待求的第k帧的位姿R和T的关系。这里利用第k帧对应的深度值,带入到论文的公式(2)中即可得出。
这个公式是论文的公式(6),对应的情况是k-1帧的特征点的深度信息未知。表达了待求的第k帧的位姿R和T的关系。这个公式的推导这里仅作口头描述。对于论文中的公式(5),将对应的等式的左右两边同时乘以
,将
对应的等式的左右两边同时乘以
,将这两个新得到的等式的左右两边分别相减,提取公因式,可以得到
与
的比值关系式。同理对
对应的等式和
对应的等式进行操作,也得到一个
与
的比值关系式,这两个比值的关系式是相等的,于是交叉相乘化简就得到了论文中的公式(6)。
论文代码运行的注意事项:由于代码比较老,在ubuntu16.04上运行时会报很多问题,推荐在14.04上跑。并且需要适当修改CmakeLists.txt等。