Intel RealSense D435i:简介、安装与使用(ROS、Python)

Sep 9,2020   3968 words   15 min

Tags: SLAM

实验室最近买了个Intel RealSense D435i相机让我来学习和采集数据,由于之前没有接触过相关内容,所以就简单学习了解了一下。这篇博客主要从使用角度对435i相机进行相关介绍,不涉及理论问题。插一句题外话,虽然Intel官网上RealSense相机看起来都很大的样子,但其实真正拿到手里会发现其实是非常小巧的,一个手就可以握住,如下图所示。

1.简介

Intel RealSense D435i是英特尔公司推出的一款消费级深度相机,它的主要构成如下图所示。 它主要包含一个RGB相机、两个红外相机以及一个红外接收器,此外还有一个IMU单元(这也就是D435i和D435的区别,i就表示imu)。简单来说它的深度成像原理是主动立体红外成像,不是传统意义上理解的双目RGB相机成像,这点需要注意一下。 另外就是它的输出是深度图和对应的RGB影像,虽然是双目红外相机,但是并不会输出两张红外影像(目前个人理解是这样,如果不对欢迎指正)。 有了深度图(3D点云)和对应的RGB影像,因此也就很容易获得RGB-D点云了。因此从输出的角度而言,D435i可以看做是一个RGB-D传感器相机。后续可以搭配ORB-SLAM中RGB-D的模式进行使用。当然,也可以只用单目RGB影像,以单目SLAM模式运行,或者单目结合IMU,以Mono-Initial模式运行。唯一不能运行的是双目RGB模式。当然我们可以获取双目的红外影像,以此作为输入,进行双目SLAM,结果也是类似的。因此可以看出,D435i是一个比较“全能”的传感器,从单目、单目+IMU、双目、RGB-D都可以使用。

对于它的一些技术上的参数,这里也简单列举一下:

  • 深度技术:主动立体IR
  • 图像传感器技术:3μm×3μm像素大小,全局快门
  • 深度视场(H×V):86°×57°(±3°)
  • 深度分辨率&帧率:1280×720,90FPS
  • RGB传感器技术:卷帘快门
  • RGB传感器分辨率&帧率:1920×1080,30FPS
  • RGB传感器FOV(H×V):69°×42°(±1°)
  • 最小深度距离(Min-Z):0.105m
  • 最大范围:约10m
  • 尺寸(长宽高):90mm × 25mm × 25mm

从上面的参数中,也可以看出来它的一些特点。比如深度图和RGB影像的大小是不同的,换句话说RGB影像中只有和深度图重叠的那部分才有深度信息,否则是没有的。同时帧率也不相同,如果需要使用RGB-D信息,那么时间同步也可能是个需要处理的问题。第二点是RGB传感器采用的是卷帘快门,因此在一些高速运动的场景下,可能会出现果冻效应。最后由于采用主动红外测距技术,而红外传感器本身发射的信号强度有限,最大10m左右,因此并不能适用于室外很大的场景。

2.安装与配置

在电脑端使用需要配合RealSense专门的驱动和SDK,这里以Ubuntu为例,介绍安装使用过程。

(1)添加Keys
apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C8B3A55A6F3EFCDE
(2)添加Repositories
add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main" -u
(3)安装Libraries
apt-get install librealsense2-dkms
apt-get install librealsense2-utils
(4)安装Dev和Debug工具
apt-get install librealsense2-dev
apt-get install librealsense2-dbg

需要注意的是librealsense2-dbg比较大,大约110MB左右,又因为是外网,因此可能会下载一段时间。

3.测试与使用

首先,连接D435i到电脑上,然后在终端中输入realsense-viewer启动数据可视化界面,如下图所示。 然后点击左侧的Stereo Module可以开启深度图显示,RGB Module可以显示RGB影像,Motion Module会显示IMU相关数据,如下图所示。 如果可以正常显示上图中的画面,那么就说明RealSense的基本配置就成功了,可以向电脑传输数据了。

4.ROS接口安装

当然,上面是基础配置,买来RealSense不可能只是用它自带的Viewer看看数据,而是拿它来跑SLAM的。RealSense本身也提供了很多Wrapper,方便编程调用数据。 编译ROS接口,那么首先你电脑上得要有ROS环境,如果没有,可以参考这篇博客,这里就不再赘述。

首先,我们需要从GitHub上下载源码,仓库地址是这里

git clone https://github.com/IntelRealSense/realsense-ros.git

其实这个仓库也是比较大的,大约30MB。国内网速可能也需要很久,或者中途断掉。这样的话直接下载zip压缩包也是可以的。 然后将clone下来的源码的文件夹放到Catkin Workspace的src文件夹中去,比如笔者的文件夹是~/root/catkin_ws/src

然后返回Catkin Workspace根目录,使用catkin_make命令进行编译即可。编译的过程中可能会遇到说缺少包的情况,这种情况下根据提示信息安装缺少的包即可,例如笔者安装的时候缺少的是ddynamic_reconfigure库。下载好以后,把代码放到Catkin工作空间的src文件夹下,catkin_make即可。

最后别忘了source ~/.bashrc更新一下。

5.ROS接口使用

其实Realsense的ROS接口可以理解为一个读取数据并发布topic的节点,我们在写自己的ROS程序的时候订阅这个节点发出的topic即可,因此使用起来并没有什么特殊的情况。 输入一下命令即可以启动RealSense的ROS节点。

roslaunch realsense2_camera rs_camera.launch

正常情况下就会出现如下的输出。 出现“RealSense Node Is Up!”就说明节点启动成功了,这个节点会发布以下一些Topic,我们可以利用rostopic list查看现有的Topic,或者利用RViz或者rqt_image_view等工具订阅这些Topic,就可以显示数据了。

/camera/color/camera_info
/camera/color/image_raw
/camera/depth/camera_info
/camera/depth/image_rect_raw
/camera/extrinsics/depth_to_color
/camera/extrinsics/depth_to_infra1
/camera/extrinsics/depth_to_infra2
/camera/infra1/camera_info
/camera/infra1/image_rect_raw
/camera/infra2/camera_info
/camera/infra2/image_rect_raw
/camera/gyro/imu_info
/camera/gyro/sample
/camera/accel/imu_info
/camera/accel/sample

这里我们使用rqt_image_view订阅image_raw话题,显示如下图所示。 可以看到通过这个Topic就订阅了RealSense发布的数据,可以进行后续处理了。

5.Python接口安装

Python的接口安装其实非常简单,pip一行命令即可。

pip install pyrealsense2

6.Python接口使用

下面内容取自PyRealSense2包的介绍页面。

import pyrealsense2 as rs
pipe = rs.pipeline()
profile = pipe.start()
try:
  for i in range(0, 100):
    frames = pipe.wait_for_frames()
    for f in frames:
      print(f.profile)
finally:
    pipe.stop()

如果能成功运行,输入如下结果: 就说明安装是成功的了。

以上就是本篇博客的主要内容了。之后随着学习和了解的深入,还会介绍RealSense D435i其它的内容,如标定、跑实际的SLAM、采集数据等等。

7.参考资料

  • [1]https://www.intelrealsense.com/zh-hans
  • [2]https://www.intelrealsense.com/zh-hans/depth-camera-d435i
  • [3]https://www.pianshen.com/article/2177388157
  • [4]https://github.com/IntelRealSense/realsense-ros
  • [5]https://blog.csdn.net/sinat_36502563/article/details/89174282
  • [6]https://pypi.org/project/pyrealsense2/

本文作者原创,未经许可不得转载,谢谢配合

返回顶部