ROS发布消息与接受消息的机制

在 ROS (Robot Operating System) 中,消息的发布和接收是通过一个基于主题的发布/订阅模型来实现的。这个模型允许节点之间的松耦合通信,即发布者(publisher)和订阅者(subscriber)不需要知道对方的存在。下面详细解释这一机制:

消息发布(Publishing)

  1. 定义发布者(Publisher)

    • 节点使用 ros::NodeHandle 对象创建一个发布者对象,并指定要发布的消息类型和主题。
    • 示例代码:ros::Publisher pub = nh.advertise<std_msgs::String>("topic_name", queue_size);
  2. 创建和发送消息

    • 节点创建特定类型的消息,并填充数据。
    • 使用发布者对象发布消息。消息被发送到指定的主题上。
    • 示例代码:std_msgs::String msg; msg.data = "hello"; pub.publish(msg);
  3. ROS主节点(Master)

    • 发布者告知ROS主节点它将发布到哪个主题。
    • ROS主节点维护主题和发布者之间的映射。

消息接收(Subscribing)

  1. 定义订阅者(Subscriber)

    • 节点使用 ros::NodeHandle 对象创建一个订阅者对象,指定要订阅的主题、队列大小以及收到消息时调用的回调函数。
    • 示例代码:ros::Subscriber sub = nh.subscribe("topic_name", queue_size, callbackFunction);
  2. 接收和处理消息

    • 当消息在订阅的主题上发布时,ROS调用定义的回调函数,并传入接收到的消息。
    • 订阅者在回调函数中处理消息。
    • 示例回调函数:void callbackFunction(const std_msgs::String::ConstPtr& msg) { /* 处理消息 */ }
  3. ROS主节点(Master)

    • 订阅者告知ROS主节点它希望从哪个主题接收消息。
    • ROS主节点负责通知发布者有新的订阅者。

通过这种机制,ROS能够在不同的节点之间有效地传递信息,从而实现复杂的机器人控制和数据处理流程。  例如下面代码:

 pubGlobalMap          = nh.advertise<sensor_msgs::PointCloud2>("liorf_localization/localization/global_map", 1);

创建了一个发布者(publisher)来发送 sensor_msgs::PointCloud2 类型的消息:

  1. pubGlobalMap:这是发布者对象的变量名。这个变量用于控制发布操作,比如发布消息或者关闭发布者。

  2. nh.advertise<sensor_msgs::PointCloud2>("liorf_localization/localization/global_map", 1);

    • nh:是一个 ros::NodeHandle 的实例,用于处理 ROS 节点的创建和通信。NodeHandle 是与 ROS 网络通信的主要接口。
    • advertise<sensor_msgs::PointCloud2>:这是一个模板函数,用于告诉 ROS 你想要发布什么类型的消息。消息类型是 sensor_msgs::PointCloud2,这是一个标准的 ROS 消息类型,用于表示三维点云。
    • "liorf_localization/localization/global_map":是发布的主题名。其他 ROS 节点可以订阅这个主题来接收消息。
    • 1:这是发布者的队列大小。队列大小决定了在消息被处理之前可以在缓冲区中积累的消息数量。在这个例子中,队列大小为 1 意味着如果新消息到达而旧消息尚未被订阅者处理,旧消息将被丢弃。

在 ROS 网络上创建一个用于发布 sensor_msgs::PointCloud2 消息的发布者,该发布者将消息发布到 "liorf_localization/localization/global_map" 主题,且队列大小为 1。

 

相关推荐

  1. ROS发布消息接受消息机制

    2024-01-05 14:10:03       39 阅读
  2. SpringAMPQ(高级消息队列协议)消息发送接收

    2024-01-05 14:10:03       15 阅读
  3. ros python 接收GPS RTK 串口消息再转发 ros 主题消息

    2024-01-05 14:10:03       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-05 14:10:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-05 14:10:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-05 14:10:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-05 14:10:03       18 阅读

热门阅读

  1. ROS订阅和发布的点云保存为.pcd文件

    2024-01-05 14:10:03       39 阅读
  2. C++类成员的访问控制

    2024-01-05 14:10:03       38 阅读
  3. Ubuntu22.04无法启动EasyConnect的问题

    2024-01-05 14:10:03       33 阅读
  4. 授权策略(authorize方法)

    2024-01-05 14:10:03       36 阅读
  5. ffmpeg 5.0版本调试 ffmpeg 5.01 static版本

    2024-01-05 14:10:03       28 阅读
  6. ceph之rados设计原理与实现第四章:存储的基石OSD

    2024-01-05 14:10:03       39 阅读
  7. 启动mongodb失败

    2024-01-05 14:10:03       35 阅读