【Roban教程】SLAM-图像的接收和发布

本帖最后由 草莓干 于 2020-12-24 15:44 编辑

在Roban 机器人中,搭载了Intel 公司在2018 年1 月推出的RealsenseD435 深度相机。为此我们安装了Intel Realsense SDK2. 0 作为D435 相机的驱动。包括img_publisher 实现了图像接收和发布的主要功能。先通过D435 接收相机数据,然后将深度图和RGB 图像对齐,之后使用cv::bridge 将图像转化为ROS 消息,同时生成当前相机坐标系下的点云数据。最终建立节点并发送消息到话题中去。



一、初始化和配置

在主要功能实现之前,我们进行了函数、变量的初始化,相机的配置以及和ROS 相关的配置。



二、函数、参数的声明及初始化

在进入main 函数之前,声明函数、初始化变量;定义常量;定义点云类型。

1.png



三、相机管道配置以及深度图像向RGB 图像的对齐

在realsense SDK2.0 中,通过管道获取相机的RGB 帧和深度帧。所以初始化时,我们配置了两个数据流一16 位单通道的深度数据流和8 位三通道的RGB 数据流,以及30Hz 的接收频率。

  2.png

因为每个深度相机的深度像素单位可能不同,因此我们在这里获取它:

  3.png

在此,我们需要申明一个能够实现深度图向其他图像对齐的rs2::align 类型的变量align, 在后续的代码中,我们将通过此变量实现深度帧的对齐。

4.png



四、相机内参、外参的获取

在realsense2 中,有直接获取相机内参外参的接口:

5.png



五、ROS 相关的配置

6.png



六、主要功能实现

由千需要实时持续获取相机数据,我们将主要功能代码写在的while 循环中。只有当节点关闭时跳出循环。



七、帧的获取以及深度帧的对齐

当有图像帧被接受时, wait_for_frames()函数返回图像帧到frameset 变量中,之后我们分别获取RGB 图像帧和深度图像帧。在判断过摄像头数据管道设置没有改变之后,利用align 将深度图像对齐到RGB 图像上面并且得到对齐之后的processed 变量。apply_filter(rs2 :: colorizerc)RVIZROSRGB - D

7.png



八、RGB 、深度图像消息发布

发布时, RGB 图像为8 位3 通道(CV_8UC3) ,名为rgb8,深度图像为16 位单通道(CV_l6UC1),名为16UC1 。

8.png

RGB 图和深度图示例


9.png

RGB 图和深度图示例



九、点云图像发布

点云图像是基千函数rs2_deproject_pixel_to_point()生成的。其中运用了针孔相机成像的转换矩阵。在位置坐标赋值之后,又将相对应的颜色坐标赋值到对应的上,从而能够得到彩色的点云图。

10.png

点云图示例


11.png

点云图示例


到此为止,我们可以通过img_package 包来发布RGB 图、深度图以及点云图的消息了。此时的rqt_graph 界面下图所示。

12.png


回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册

  • 0 关注
  • 15 粉丝
  • 115 帖子