ROS初学:订阅以及对发布的补充

首先在~/demo01_ws/src/learning_communication/src中创立订阅者的cpp文件。

vim listener.cpp

----------------------------------

#include"ros/ros.h"

#include<sstream>

 #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);
      //cout<<111;
      //while(ros::ok()){
      //loop_rate.sleep();
      ros::spin();
      //}
      return 0;
  }

 

此时同样修改CMakeList.txt(与发布时同一个)

add_executable(listener src/listener.cpp)

target_link_libraries(listener
  ${catkin_LIBRARIES}
)

add_dependencies(listener ${PROJECT_NAME}_generate_messages_cpp ${catkin_EXPORTED_TARGETS})

之后先进行catkin_make进行编译;对发布和订阅前都要进行source ./devel/setup.bash,之后再进行rosrun learning_communication talker 和rosrun learning_communication listener,注意要先运行发布再运行订阅,同时注意,两者要同时运行

这样基本就能实现发布和订阅了

---------------------------------------------------

补充:因为订阅者在发布者处注册需要时间,所以可能一开始的数据无法接受到,此时我们可以在发布者的cpp文档中的while循环前加上ros::Duration(1).sleep(); 使订阅者有时间注册而不错过数据


版权声明:本文为Mr_rustylake原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。