写一个ros订阅消息的代码
时间: 2024-10-03 12:01:01 浏览: 34
ros2 rolling完整代码
在ROS(Robot Operating System)中,订阅者(Subscriber)是用来接收其他节点发布的消息的组件。下面是一个基本的例子,展示如何编写一个C++节点订阅一个名为"chatter"的标准字符串话题(topic):
```cpp
#include <ros/ros.h>
#include <std_msgs/String.h> // 包含我们需要的消息类型
class ChatterSubscriber
{
public:
ChatterSubscriber()
{
// 初始化ROS节点
node_ = ros::NodeHandle("~");
// 创建一个主题订阅者
sub_ = node_.subscribe("chatter", 1000, &ChatterSubscriber::callback, this);
ROS_INFO_STREAM("Subscribed to chatter topic.");
}
private:
void callback(const std_msgs::String::ConstPtr& msg)
{
// 当接收到新消息时,该回调函数会被调用
ROS_INFO_STREAM("Received message: '" << msg->data << "'");
}
ros::NodeHandle node_;
ros::Subscriber sub_; // 订阅者对象
};
int main(int argc, char** argv)
{
ros::init(argc, argv, "subscriber_node");
ChatterSubscriber chatterSubscriber;
ros::spin(); // 进入事件循环,持续监听消息
return 0;
}
```
在这个例子中:
- `~` 表示当前节点的名称。
- `sub_ = node_.subscribe("chatter", 1000, &ChatterSubscriber::callback, this)` 是创建订阅者的部分,其中 `"chatter"` 是要订阅的主题名,`1000` 表示队列长度,`callback` 是当有消息到来时要执行的函数,`this` 指向订阅者实例。
- `callback` 函数会在接收到`std_msgs::String`类型的消息时被调用,并打印出消息内容。
运行此程序后,你需要在另一个节点上发布一些字符串到这个主题,才能看到订阅者接收到的消息。
阅读全文