基于深度相机 RealSense D435i 的 ORB SLAM 2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于深度相机 RealSense D435i 的 ORB SLAM 2相关的知识,希望对你有一定的参考价值。

参考技术A

相比于 上一篇文章 ,这里我们将官方给的 rosbag 数据包替换为来自深度相机的实时数据。之所以选择 Intel RealSense 这款深度相机,仅仅是因为它是最容易买到的。。。在京东上搜“深度相机”,符合要求的几乎都是这个系列的。具体到 D435i 这个型号,它可以提供深度和 RGB 图像,而且带有 IMU,未来如果我们继续做视觉+惯导的 SLAM 也够用了。

参考: https://www.intelrealsense.com/depth-camera-d435i/

Intel 官方给出了非常详细的介绍,尤其是 产品手册 ,几乎涵盖了用户需要(以及不需要)了解的全部信息。
这里把其中关于 D435i 的关键信息摘录出来,方便以后查阅。

Interl RealSence D4×× 系列,包括 D435i,都是采用经典的双目视觉的方式测量深度。尽管具有红外投射器,但并不是采用红外反射测距。它的作用仅仅是投射不可见的固定的红外纹理样式,提高在纹理不明显的环境中(例如白墙)的深度计算精度,辅助双目视觉测距。左右两个相机将图像数据送入内置的深度处理器,在其中基于双目测距的原理计算每个像素的深度值。

下图显示的是红外投射在白纸上的纹理模式:

双目测距相机的参数

红外投射器参数

RGB 相机参数

深度图像分辨率与支持的帧率

RGB图像分辨率与支持的帧率

IMU 参数

Intel RealSense SDK 2.0 是跨平台的开发套装,包含了基本的相机使用工具如 realsense-viewer,也为二次开发提供了丰富的接口,包括 ROS,python , Matlab, node.js, LabVIEW, OpenCV, PCL, .NET 等。

在 Linux 系统中,开发工具库有两种安装方式,一种是安装预编译的 debian 包,另一种是从源码编译。
如果 Linux 内核版本为 4.4, 4.8, 4.10, 4.13, 4.15, 4.18* 5.0* and 5.3*,并且没有用户自定义的模块,最好选择安装预编译的 debian 包,方便很多。

通过如下命令查看 ubuntu kernel 版本

显示结果为 5.0.0-23-generic ,满足上述版本要求。我们选择安装预编译的 debian 包。

Ubuntu 下的安装步骤可以参考 https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md
具体步骤摘录如下(针对 Ubuntu 18.04):

然后就可以运行 realsense-viewer 查看相机的深度和 RGB 图像,以及 IMU 中的测量,如下图所示:

另外还需要查看一下

确认包含 realsense 字样,例如 version: 1.1.2.realsense-1.3.14 。

再查看一下 dkms

返回结果中包含类似 librealsense2-dkms, 1.3.14, 5.0.0-23-generic, x86_64: installed 。

如果以上都没问题,说明 RealSense SDK 2.0 安装成功!
如果上述返回结果有误,则可能影响后续的运行。根据我们的经验,realsense-dkms 会选择 /lib/modules 中的第一个 kernel 安装,如果系统中存在多个 kernel,而当前运行的 kernel 不是 /lib/modules 中的第一个 kernel,就可能出问题。

Intel RealSense D4×× 系列相机从 Firmware version 5.12.02.100 开始加入了自标定功能,大大提高了相机标定的自动化程度,不再需要拿着标定板摆拍了。

详细操作可以查看 这里 。

简要流程:

在本文中,我们的最终目的是将相机的深度和 RGB 数据发布到 ros topic 上,然后通过 ORB SLAM 2 进行点云建图。
这里就需要用到 ROS 的 realsense 库 ros-$ROS_VER-realsense2-camera 。需要注意的是,这个 ROS 库并不依赖于 RealSense SDK 2.0,两者是完全独立的。因此,如果只是想在 ROS 中使用 realsense,并不需要先安装上边的 RealSense SDK 2.0。

安装步骤参考 https://github.com/IntelRealSense/realsense-ros 。
具体命令如下(前提:已安装 ROS melodic 版本):

包括两部分:

在启动相机之前,我们需要设置一下 realsense2_camera rospack 中的 rs_camera.launch 的文件。
对于 ros launch 中各个参数的介绍可以参考 这里 。

在 rs_camera.launch 文件中确保以下两个参数为 true :

前者是让不同传感器数据(depth, RGB, IMU)实现时间同步,即具有相同的 timestamp;
后者会增加若干 rostopic,其中我们比较关心的是 /camera/aligned_depth_to_color/image_raw ,这里的 depth 图像与 RGB 图像是对齐的,对比如下

然后就可以用如下命令启动相机了:

部分 ros topic 如下:

其中关键的是 /camera/color/image_raw 和 /camera/aligned_depth_to_color/image_raw 分别对应 RGB 图像和深度图像。基于这些数据,我们希望实现 ORB SLAM 2 + 点云建图的效果 。

相比于采用 rosbag 数据包的 ORB SLAM 2,这里有以下几点修改:

做完以上修改,就可以按照 前一篇文章 中的步骤编译和运行 ORB SLAM 2 了,此时深度和 RGB 数据不再是来自 rosbag ,而是来自相机。

命令总结如下:

最终保存的点云地图效果如下:

本文记录了基于深度相机 Intel RealSense D435i 实现 ORB SLAM 2 的过程,由于之前的文章( 1 , 2 )已经非常详细的记录了基于 rosbag 数据包的 ORB SLAM 2,本文的大部分内容是记录与深度相机相关的一些设置,方便自己以后查阅,也希望能帮到类似研究方向的其他读者。

以上是关于基于深度相机 RealSense D435i 的 ORB SLAM 2的主要内容,如果未能解决你的问题,请参考以下文章

无法在我的 realsense 相机 D435i 中获取 imu 流

Android+RealSense D435i数据录制 VINS离线运行

Android+RealSense D435i数据录制 VINS离线运行

REALSENSE D435i IMU数据的处理与使用

TX2在ROS下使用Realsense D435i跑rtabmap和octomap

英特尔® 实感™ SDK 2.0 上的英特尔实感 D435i 帧丢失