本帖最后由 草莓干 于 2020-12-24 15:44 编辑
在Roban 机器人中,搭载了Intel 公司在2018 年1 月推出的RealsenseD435 深度相机。为此我们安装了Intel Realsense SDK2. 0 作为D435 相机的驱动。包括img_publisher 实现了图像接收和发布的主要功能。先通过D435 接收相机数据,然后将深度图和RGB 图像对齐,之后使用cv::bridge 将图像转化为ROS 消息,同时生成当前相机坐标系下的点云数据。最终建立节点并发送消息到话题中去。
在主要功能实现之前,我们进行了函数、变量的初始化,相机的配置以及和ROS 相关的配置。
在进入main 函数之前,声明函数、初始化变量;定义常量;定义点云类型。
在realsense SDK2.0 中,通过管道获取相机的RGB 帧和深度帧。所以初始化时,我们配置了两个数据流一16 位单通道的深度数据流和8 位三通道的RGB 数据流,以及30Hz 的接收频率。
因为每个深度相机的深度像素单位可能不同,因此我们在这里获取它:
在此,我们需要申明一个能够实现深度图向其他图像对齐的rs2::align 类型的变量align, 在后续的代码中,我们将通过此变量实现深度帧的对齐。
在realsense2 中,有直接获取相机内参外参的接口:
由千需要实时持续获取相机数据,我们将主要功能代码写在的while 循环中。只有当节点关闭时跳出循环。
当有图像帧被接受时, wait_for_frames()函数返回图像帧到frameset 变量中,之后我们分别获取RGB 图像帧和深度图像帧。在判断过摄像头数据管道设置没有改变之后,利用align 将深度图像对齐到RGB 图像上面并且得到对齐之后的processed 变量。apply_filter(rs2 :: colorizerc)RVIZROSRGB - D
发布时, RGB 图像为8 位3 通道(CV_8UC3) ,名为rgb8,深度图像为16 位单通道(CV_l6UC1),名为16UC1 。
RGB 图和深度图示例
RGB 图和深度图示例
点云图像是基千函数rs2_deproject_pixel_to_point()生成的。其中运用了针孔相机成像的转换矩阵。在位置坐标赋值之后,又将相对应的颜色坐标赋值到对应的上,从而能够得到彩色的点云图。
点云图示例
点云图示例
到此为止,我们可以通过img_package 包来发布RGB 图、深度图以及点云图的消息了。此时的rqt_graph 界面下图所示。
|