如何将2个ROS主题合并为1个?

时间:2019-07-19 20:30:35

标签: python ros

我有2个主题由英特尔实感相机发布。一个主题是发布深度图像,另一个主题是发布彩色图像。每个彩色图像在标题中都有一个具有相同时间戳的对应深度图像。我想将颜色和深度主题合并为一个主题,该主题将发布深度和彩色图像对。是否存在基于时间戳的ROS函数?

这是我创建的订户:

self.image_sub = rospy.Subscriber("image", Image, mask_detect, queue_size=1, buff_size=2**24)
depth_image_sub = rospy.Subscriber("depth_image", Image,
aquire_depth_image, queue_size=1000)

我希望能够做这样的事情(伪代码):

color_depth = rospy.Subscriber(["image", "depth_image"], callback_function, mergePolicy="EXACTTIME")

在ROS中是否有标准的方法或简单的方法?

2 个答案:

答案 0 :(得分:0)

每个主题都有与之关联的唯一类型或ROS消息。要将这两个主题合并为一个主题,您将必须接受这两条消息,并根据它们创建新的消息。 就像您已经做的那样,这将有一个同时订阅这两者的回调,然后将其发布为所需的合并主题和消息类型。

我不能在评论中提出这个问题,但是为什么要合并两者?

最常见的原因,尤其是对于摄像机数据,是要确保在完全相同的时间获取的一组数据上触发了回调。标准方法是使用ROS message_filters

答案 1 :(得分:0)

如果要按时间融合图像,则必须编写自己的nodelet。但是我相信realsense相机已经以RGB点云的形式为您完成了此任务。

该消息默认为关闭。您可以通过设置在启动文件中将其打开:

  <arg name="enable_pointcloud"   default="true"/>
  <arg name="pointcloud_texture_stream" default="RS2_STREAM_COLOR"/>
  <arg name="pointcloud_texture_index"  default="0"/>

您关联的深度和RGB然后应作为一条消息发布:

depth/points

仅供参考,这是深度/点主题的数据类型: http://docs.ros.org/api/sensor_msgs/html/msg/PointCloud2.html