踏上ROS订阅之旅:探索消息接收的艺术
2023-11-24 00:43:19
序幕:ROS订阅者的重要性
在上一篇文章中,我们成功创建了第一个ROS发布者(Publisher),踏出了ROS之旅的第一步。然而,ROS的强大之处不仅在于消息发布,更在于其出色的消息处理和传递能力。要实现真正的机器人交互和数据共享,我们需要学习如何接收和处理来自其他节点的消息。这就是ROS订阅者的用武之地。
一、初识ROS订阅者
ROS订阅者是ROS节点的一种,专门用于接收来自其他节点发布的消息。它允许节点之间进行通信和数据共享,从而实现协同工作。订阅者通过订阅特定主题(Topic)来接收消息。主题是ROS中消息的发布和接收渠道,类似于电子邮件中的主题。
二、创建您的第一个ROS订阅者
-
准备工作:创建ROS工作空间
首先,您需要创建一个ROS工作空间。工作空间是ROS项目的存储目录,用于存放源代码、编译文件和运行时数据。您可以通过以下命令创建工作空间:
mkdir ~/catkin_ws cd ~/catkin_ws catkin_make
-
编写订阅者代码
接下来,我们需要编写订阅者代码。创建一个名为
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
来处理消息。 -
编译并运行订阅者
将
subscriber.cpp
文件保存到您的工作空间中。然后,您可以通过以下命令编译并运行订阅者:cd ~/catkin_ws/src catkin_make rosrun subscriber subscriber
此时,订阅者将开始运行,等待来自
chatter
主题的消息。
三、消息处理的艺术
当订阅者收到来自主题chatter
的消息时,它将调用回调函数callback
来处理消息。在回调函数中,您可以对收到的消息进行处理,例如打印消息内容、存储消息数据或将其转发给其他节点。
四、订阅者与发布者的协同工作
为了让订阅者能够接收到消息,您还需要创建一个发布者来发布消息到主题chatter
。您可以通过在另一个终端窗口中运行以下命令来创建发布者:
rosrun publisher publisher
此时,发布者将开始以1秒的频率发布消息到主题chatter
。订阅者将接收到这些消息,并调用回调函数callback
来处理消息。
五、结语:订阅者的无限可能
ROS订阅者是ROS通信的基石,它使节点之间能够进行消息接收和处理,实现数据共享和协同工作。通过创建订阅者,您可以将您的ROS程序与其他节点连接起来,构建复杂而强大的机器人系统。