Intel RealSense D435i:简介、安装与使用(ROS、Python) | 您所在的位置:网站首页 › win7怎样调屏幕分辨率和帧率显示 › Intel RealSense D435i:简介、安装与使用(ROS、Python) |
1.简介
2.安装与配置
(1)添加Keys
(2)添加Repositories
(3)安装Libraries
(4)安装Dev和Debug工具
3.测试与使用
4.ROS接口安装
5.ROS接口使用
5.Python接口安装
6.Python接口使用
7.其它注意事项
(1)IMU信息的融合
(2)深度图对齐问题
(3)红外散斑问题
(4)红外发射器的开关
(5)D435i的不同分辨率
(6)D435i相机默认参数查看
(7)数据采集的常规流程
8.参考资料
实验室最近买了个Intel RealSense D435i相机让我来学习和采集数据,由于之前没有接触过相关内容,所以就简单学习了解了一下。这篇博客主要从使用角度对435i相机进行相关介绍,不涉及理论问题。插一句题外话,虽然Intel官网上RealSense相机看起来都很大的样子,但其实真正拿到手里会发现其实是非常小巧的,一个手就可以握住,如下图所示。
Intel RealSense D435i是英特尔公司推出的一款消费级深度相机,它的主要构成如下图所示。
对于它的一些技术上的参数,这里也简单列举一下: 深度技术:主动立体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)添加RepositoriesUbuntu 16.04: add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main" -uUbuntu 18.04: add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic 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左右,又因为是外网,因此可能会下载一段时间。
首先,连接D435i到电脑上,然后在终端中输入realsense-viewer启动数据可视化界面,如下图所示。
当然,上面是基础配置,买来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正常情况下就会出现如下的输出。
这里我们使用rqt_image_view订阅image_raw话题,显示如下图所示。
另外需要注意的是,前面提到D435i是支持双目的红外影像输出的,但是它默认是关闭这一选项的,也就是说它不会有双目红外影像的Topic。我们需要在对应的Launch文件中修改相关参数,就可以获得红外影像了。具体如下。 首先,我们打开Realsense-ROS节点的Launch文件夹,如下。
可以看到,相对于常规RGB影像,它多了很多“星星”一样的斑点,这些斑点就是发射出去的红外光,D435i正是通过这种主动红外光进行距离估计,有点类似于结构光。 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()如果能成功运行,输入如下结果:
前面的Topic List里也看到了,D435i可以输出陀螺仪和加速度计的信息,我们可以分开读取,也可以将/camera/gyro/sample和/camera/accel/sample两个Topic合并到一起,叫做/camera/imu,这样一个Topic里既有陀螺仪的数据也有加速度计的数据。具体方法也很简单,还是修改Launch文件里的配置选项。在rs_camera.launch文件中找到unite_imu_method这个参数,把它的值可以设置为copy或者linear_interpolation,这样再次启动rs_camera节点启动D435i就可以在Topic列表里看到/camera/imu这个Topic了。 (2)深度图对齐问题D435i可以输出原始的深度图(/camera/depth/image_rect_raw)以及和单目RGB影像对齐的深度图(/camera/aligned_depth_to_color/image_raw),这两个深度图是不一样的。在采集数据的时候尤其需要注意。比如在采集RGBD数据的时候需要的是对齐的深度,如果不小心采成了原始深度,那基本就是不能用的了。如何输出对齐的深度图,也非常简单,修改Launch文件里的配置选项。在rs_camera.launch文件中找到align_depth这个参数,把它的值可以设置为true即可。(设置这个选项之前,记得打开enable_depth,要不然是没有数据的)
另外需要注意的是,前面也提到过,D435i的深度测量是通过红外发射器实现的,因此如果想要准确的深度数据,千万不能遮挡红外发射器。 (3)红外散斑问题因为D435i会主动发射红外散斑,因此可以获得相对准确的深度信息。但这些红外散斑会显示在双目红外相机拍摄的图片中,对于较大或者较亮的场景,红外散斑不是很明显。但如果在较小或者较暗的场景,红外散斑会非常明显。这样带来的一个显著影响是会严重干扰视觉SLAM的特征点提取。由于散斑很亮、很明显,而且位置相对固定,很多时候会被认为是特征点,这样在帧间匹配的时候会让SLAM误认为机器人没有运动。导致采集的数据不能用。如下图所示。
上面提到关闭红外发射器,如何开关也十分简单。在启动rs_camera节点运行D435i以后,打开一个新的终端,输入rosrun rqt_reconfigure rqt_reconfigure启动Reconfigure节点,如下。
D435i的RGB、深度以及双目等影像都可以支持不同的分辨率和帧率。但是需要注意的一点是,这并不意味着可以任意指定分辨率和帧率,而是在几个支持的模式下选择。那么我们怎么知道D435i到底支持哪些分辨率和帧率呢?方法也很简单,我们可以直接在终端中输入realsense-viewer打开Realsense Viewer,在对应模块的设置里就可以查看了,如下图所示。
需要注意的是,上面的分辨率和帧率也并不是任意组合的,比如红外的640×480分辨率最高支持到90帧,如果设置成100或者300帧同样是会报错的。所以一个稳妥的方法就是,如果不清楚分辨率和帧率的组合,打开Realsense Viewer,先设置一下,如果可以成功运行,就说明是支持的,否则就换一个配置。 另外需要说明的是,D435i支持的最低帧率是6Hz,如果要求更低帧率,就需要后续进一步处理了。关于如何处理,可以参考我写的另一篇有关于ROS Bag处理的博客。另外,虽然说最低6Hz,但实际测试发现,如果降低到6Hz,RGB相机很容易出现果冻效应,因此如果不是特殊需求,并不建议把帧率设的太低。可以使用默认帧率,后续处理成低帧率。 (6)D435i相机默认参数查看D435i相机在出厂时有一个默认的内参。查看方式有非常简单,在运行D435i以后,我们可以在Topic列表中看到很多叫camera_info的Topic,这些Topic就是对应的相机内参等参数。如下,查看的是RGB相机的参数。
这里简单给出一些D435i数据采集的建议。首先,如果要采RGBD数据,那么一定要记得录对齐后的深度,而非原始输出深度。第二,如果采集场景是较暗或者较小的场景,那么可能会有很多红外斑点出现在双目红外影像中。如果想用双目影像做视觉SLAM,那么一定记得关闭红外发射器。 下面以一个利用D435i进行单目RGB、红外双目、IMU数据采集的过程为例,介绍一般流程与步骤。 首先明确要采集的数据类型、影像的大小、帧率、深度是否对齐等信息,这些都在rs_camera.launch文件的对应参数里设置。 然后,在终端中输入roslaunch realsense2_camera rs_camera.launch启动D435i。启动以后如果需要关闭红外发射器,按照上面提到的第三点进行操作即可。 然后,利用rqt_image_view进行可视化。可以打开多个rqt_image_view节点,分别查看RGB影像、左右红外影像等。 最后,打开终端,输入rosbag record /camera/color/image_raw /camera/infra1/image_rect_raw /camera/infra2/image_rect_raw /camera/imu,这样就开始录制了。录制完成后,按Ctrl+C保存退出即可。 以上就是本篇博客的主要内容了。之后随着学习和了解的深入,会进一步介绍RealSense D435i其它的内容,如标定、跑实际的SLAM、采集数据等等。 8.参考资料 [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/ |
CopyRight 2018-2019 实验室设备网 版权所有 |