#include <ros/ros.h>
#include <std_msgs/String.h>
void callback(const std_msgs::String::ConstPtr &msg)
{
ROS_INFO("I heard: %s", msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "example_pub_sub");//初始化一个叫example_pub_sub的节点
ros::NodeHandle nh;//类似于婚介所,两个功能:收集别人的信息(发布),把一个人的信息发给另一个人(发布)
ros::Subscriber sub = nh.subscribe<std_msgs::String>("example_topic", 10, callback);//订阅了一个叫"example_topic"的话题
ros::Publisher pub = nh.advertise<std_msgs::String>("example_topic", 10);//发布了一个叫"example_topic"的话题
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "Hello World " << count;
msg.data = ss.str();
pub.publish(msg);
ROS_INFO("I sent: %s", msg.data.c_str());
ros::spinOnce();
loop_rate.sleep();
count++;
}
return 0;
}
-
以上代码中,我们创建了一个ROS节点,该节点同时包括一个发布者和一个订阅者。订阅者订阅了名为"example_topic"的话题,并在接收到消息时调用callback函数进行处理;发布者向同一话题发布消息,在while循环中不断发送消息并打印发送的消息内容以及收到的消息内容。
需要注意的是,在执行上述代码之前,你需要先创建一个ROS工作区,然后在工作区下创建一个C++程序包,并在程序包下创建一个节点文件夹,将上述代码保存在该节点文件夹中的.cpp源文件中。并且在工作区的根目录下执行catkin_make命令进行编译。
另外,类似于callback函数,ROS中的回调函数通常需要使用ROS消息数据类型的指针进行参数传递,以确保在回调函数中可以正确地读取消息内容。
欢迎各位大佬参观我的博客:[https://bainiu2.github.io/]