ros消息的发布与订阅

消息的发布,写一个cpp文件

消息的订阅,写一个cpp文件


#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg)//这是一个回调函数,当接收到 chatter 话题的时候就会被调用
	//消息是以 boost shared_ptr 指针的形式传输,这就意味着你可以存储它而又不需要复制数据。
{
  ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv)
{
  
  ros::init(argc, argv, "listener"); //初始化一个名为listener的节点
  ros::NodeHandle n;  
  ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);//告诉 master 我们要订阅 chatter 话题上的消息。当有消息发布到这个话题时,ROS 就会调用 chatterCallback() 函数
  //第二个参数1000是队列大小,以防我们处理消息的速度不够快,当缓存达到 1000 条消息后,再有新的消息到来就将开始丢弃先前接收的消息。
  //NodeHandle::subscribe() 返回 ros::Subscriber 对象,你必须让它处于活动状态直到你不再想订阅该消息。当这个对象销毁时,它将自动退订 chatter 话题的消息。
  ros::spin();//ros::spin() 进入自循环,可以尽可能快的调用消息回调函数。如果没有消息到达,它不会占用很多 CPU,所以不用担心。一旦 ros::ok() 返回 false,ros::spin() 就会立刻跳出自循环。
  //这有可能是 ros::shutdown() 被调用,或者是用户按下了 Ctrl-C,使得 master 告诉节点要终止运行。也有可能是节点被人为关闭的。
  return 0;
}

总结一下:

  • 初始化ROS系统
  • 订阅 chatter 话题

  • 进入自循环,等待消息的到达
  • 当消息到达,调用 chatterCallback() 函数

猜你喜欢

转载自blog.csdn.net/weixin_38145317/article/details/81541186