当前位置:   article > 正文

ROSNOTE : ROS从callback中获取数据在回调函数以外使用_ros回调函数能否写在别的源文件中

ros回调函数能否写在别的源文件中

https://blog.csdn.net/xinwenfei/article/details/89384578

文中完整代码的git地址:

https://github.com/xinwf/useful/tree/master/ros/getDataOutOfCallbackWithClass/src

 

 

方法思路:借助类来实现

  1. #include <ros/ros.h>
  2. #include <std_msgs/String.h>
  3. #include <sstream>
  4. /**
  5. * This tutorial demonstrates subscribing to a topic using a class method as the callback.
  6. */
  7. // %Tag(CLASS_WITH_DECLARATION)%
  8. class Listener
  9. {
  10. public:
  11. std::string copy_data = "init init init";
  12. int count = 0;
  13. public:
  14. void callback(const std_msgs::String::ConstPtr& msg);
  15. void print_data2(){std::cout << "Copy data is :" << copy_data << "\n";}
  16. };
  17. // %EndTag(CLASS_WITH_DECLARATION)%
  18. void Listener::callback(const std_msgs::String::ConstPtr& msg)
  19. {
  20. ROS_INFO("I heard: [%s]", msg->data.c_str());
  21. std::stringstream ss;
  22. ss << msg->data.c_str();
  23. ss >> copy_data;
  24. std::cout <<"copy_data is: " << copy_data <<"\n";
  25. print_data2();
  26. ++count;
  27. }
  28. int main(int argc, char **argv)
  29. {
  30. ros::init(argc, argv, "listener_class");
  31. ros::NodeHandle n;
  32. // %Tag(SUBSCRIBER)%
  33. Listener listener;
  34. ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, &listener);
  35. ros::Rate loop_rate(10);
  36. // %EndTag(SUBSCRIBER)%
  37. while(ros::ok() and listener.count <=3){
  38. ros::spinOnce();
  39. loop_rate.sleep();
  40. }
  41. std::cout << "After spin: \n";
  42. listener.print_data2();
  43. return 0;
  44. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49937
推荐阅读
相关标签
  

闽ICP备14008679号