前言:这几天在独立地研究对RGBD图像序列,建立其三维点云地图。这是我研究生期间,毕业论文中的一点小工作。由于我并没有借鉴像RTAB-MAP等SLAM方法,所以本文仅仅能够帮助学习和理解是三维建图的过程,对于实际的三维建图应用,意义并不大。
本文的方法非常的简单粗暴,思路是首先求取每一帧深度图像的位姿,其次,将每一帧深度图转换为点云,最后将点云转换到世界坐标系下。对于求取深度图的位姿,可以使用ORB-SLAM2算法得到(如果有小车机器人平台的话,也可以通过其里程计得到);对于深度图转点云,可以通过投影模型计算点云坐标;对于将点云转换到世界坐标系下,仅通过三维刚体变换得到。
深度图转点云
对于求RGBD图像序列的位姿,网上有很多资料和教程帮助初学者配置ORB-SLAM2,并跑通自己的数据集,这里不做介绍。对于将深度图像转换为点云,这里着重介绍一下。首先是相机的投影模型,深度图像和点云之间的转换如下式所示:
{ z = d x = u − c x f x ⋅ z y = v − c y f y ⋅ z \left\{ \begin{aligned} z & = & d \\ x & = & \frac {u-c_x}{f_x}\cdot z \\ y & = & \frac {v-c_y}{f_y}\cdot z \end{aligned} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧