返回

踏上ROS订阅之旅:探索消息接收的艺术

见解分享

序幕:ROS订阅者的重要性

在上一篇文章中,我们成功创建了第一个ROS发布者(Publisher),踏出了ROS之旅的第一步。然而,ROS的强大之处不仅在于消息发布,更在于其出色的消息处理和传递能力。要实现真正的机器人交互和数据共享,我们需要学习如何接收和处理来自其他节点的消息。这就是ROS订阅者的用武之地。

一、初识ROS订阅者

ROS订阅者是ROS节点的一种,专门用于接收来自其他节点发布的消息。它允许节点之间进行通信和数据共享,从而实现协同工作。订阅者通过订阅特定主题(Topic)来接收消息。主题是ROS中消息的发布和接收渠道,类似于电子邮件中的主题。

二、创建您的第一个ROS订阅者

  1. 准备工作:创建ROS工作空间

    首先,您需要创建一个ROS工作空间。工作空间是ROS项目的存储目录,用于存放源代码、编译文件和运行时数据。您可以通过以下命令创建工作空间:

    mkdir ~/catkin_ws
    cd ~/catkin_ws
    catkin_make
    
  2. 编写订阅者代码

    接下来,我们需要编写订阅者代码。创建一个名为subscriber.cpp的文件,并输入以下代码:

    #include <ros/ros.h>
    #include <std_msgs/String.h>
    
    void callback(const std_msgs::String::ConstPtr& msg) {
      ROS_INFO("Received message: [%s]", msg->data.c_str());
    }
    
    int main(int argc, char** argv) {
      ros::init(argc, argv, "subscriber");
      ros::NodeHandle nh;
    
      ros::Subscriber sub = nh.subscribe("chatter", 1000, callback);
    
      ros::spin();
    
      return 0;
    }
    

    这段代码创建了一个名为subscriber的ROS节点,并订阅主题chatter。当收到来自该主题的消息时,它将调用回调函数callback来处理消息。

  3. 编译并运行订阅者

    subscriber.cpp文件保存到您的工作空间中。然后,您可以通过以下命令编译并运行订阅者:

    cd ~/catkin_ws/src
    catkin_make
    rosrun subscriber subscriber
    

    此时,订阅者将开始运行,等待来自chatter主题的消息。

三、消息处理的艺术

当订阅者收到来自主题chatter的消息时,它将调用回调函数callback来处理消息。在回调函数中,您可以对收到的消息进行处理,例如打印消息内容、存储消息数据或将其转发给其他节点。

四、订阅者与发布者的协同工作

为了让订阅者能够接收到消息,您还需要创建一个发布者来发布消息到主题chatter。您可以通过在另一个终端窗口中运行以下命令来创建发布者:

rosrun publisher publisher

此时,发布者将开始以1秒的频率发布消息到主题chatter。订阅者将接收到这些消息,并调用回调函数callback来处理消息。

五、结语:订阅者的无限可能

ROS订阅者是ROS通信的基石,它使节点之间能够进行消息接收和处理,实现数据共享和协同工作。通过创建订阅者,您可以将您的ROS程序与其他节点连接起来,构建复杂而强大的机器人系统。