在 ROS 中获取 RealSense 深度框架

Getting RealSense depth frame in ROS

我在 Gazebo 环境中有一架无人机,上面装有 RealSense d435 摄像头。我的计划是使用YOLO找到一个感兴趣的物体的中心,然后从深度图像中找到那个点的深度。我听说深度相机输出的图像中的深度值是用 RGB 值编码的。在网上进一步查找时,我发现有一个 pyrealsense2 库具有满足我需要的一切功能。

我在网上看到的实现需要您创建一个 pyrealsense.pipeline() 并从中获取您的框架。问题是这似乎只有在您将 RealSense 摄像头连接到您的计算机时才有效。由于我的存在于 Gazebo 环境中,我需要一种在 ROS 回调中获取和使用深度帧的方法。我该怎么做?任何指针将不胜感激

是的,您可以在 ROS 订阅者的帮助下执行此操作,如下所示(大部分代码取自 here):

import rospy
from sensor_msgs.msg import Image as msg_Image
from cv_bridge import CvBridge, CvBridgeError
import sys
import os

class ImageListener:
    def __init__(self, topic):
        self.topic = topic
        self.bridge = CvBridge()
        self.sub = rospy.Subscriber(topic, msg_Image, self.imageDepthCallback)

    def imageDepthCallback(self, data):
        try:
            cv_image = self.bridge.imgmsg_to_cv2(data, data.encoding)
            pix = (data.width/2, data.height/2)
            sys.stdout.write('%s: Depth at center(%d, %d): %f(mm)\r' % (self.topic, pix[0], pix[1], cv_image[pix[1], pix[0]]))
            sys.stdout.flush()
        except CvBridgeError as e:
            print(e)
            return


if __name__ == '__main__':
    rospy.init_node("depth_image_processor")
    topic = '/camera/depth/image_rect_raw'  # check the depth image topic in your Gazebo environmemt and replace this with your
    listener = ImageListener(topic)
    rospy.spin()

注意:要安装 CvBridge,您可以按照以下说明进行操作:

 sudo apt-get install ros-(ROS version name)-cv-bridge

 sudo apt-get install ros-(ROS version name)-vision-opencv

更多信息:http://wiki.ros.org/cv_bridge

补充上面的回答,注意depth/image_rect_raw这个话题。很可能你真的想要原始图像,你可以从 /camera/aligned_depth_to_color/image_raw.

获得

默认情况下该主题可能未激活,例如在 d435i 上您应该切换 align_depth:=true 选项:

roslaunch realsense2_camera rs_camera.launch align_depth:=true

有关详细信息,请参阅 https://github.com/IntelRealSense/realsense-ros#usage-instructions