ROS wiki上消息发布器和订阅器的代码解析(二)

    xiaoxiao2023-11-18  170

    #include"ros/ros.h" #include "std_msgs/String.h" void chatterCallback(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,"listener"); ros::NodeHandle n; ros::Subscriber sub=n.subscribe("chatter",1000,chatterCallback); ros::spin(); return 0; } subscribe()调用是告诉ROS,你希望接收关于给定主题的消息。这将调用对ROS Master 节点,该节点保存一个注册表,记录谁在发布和谁在订阅。消息被传递给一个回调函数,这里称为chatterCallback。subscribe()返回一个订阅者对象,您必须一直持有该对象,直到您想取消订阅。当订阅者对象的所有副本超出范围时,此回调将自动从此主题取消订阅。subscribe()函数的第二个参数是消息队列的大小。如果消息到达的速度比处理的速度快,那么在开始丢弃最旧的消息之前,将缓冲这些消息的数量。 ros::spin();

     ros::spin() 进入自循环,可以尽可能快的调用消息回调函数。如果没有消息到达,它不会占用很多 CPU,所以不用担心。一旦 ros::ok() 返回 false,ros::spin() 就会立刻跳出自循环。这有可能是 ros::shutdown() 被调用,或者是用户按下了 Ctrl-C,使得 master 告诉节点要终止运行。也有可能是节点被人为关闭的。

     

    最新回复(0)