当前位置:   article > 正文

ROS之消息发布和接收_c++ ros 接收消息时间

c++ ros 接收消息时间
ros::Subscriber subscriber_ = nh_.subscribe(topic_name, buff_size, &CloudSubscriber::msg_callback, this);

参数1: 话题名字

参数2:接收消息队列长度,即可以暂时存储多少个消息。因为如果pub消息很快,回调处理的时间比较长,导致sub的消息不能被及时处理,就会存在队列里。如果存的消息超过队列的长度,那么最早的消息就被扔掉。所以,设定一个很大的值就可以了。

参数3:回调函数。注意:一定要取函数的地址

参数4:如果回调函数是某个类成员函数,则参数4 就是 对象 的地址。如果回调函数是一个全局函数,则 参数4 为空。

ros::Publisher publisher_ = nh_.advertise<nav_msgs::Odometry>(topic_name, buff_size);

参数1:话题名字

参数2:发布消息的队列长度。发布消息给接收消息的话题需要通信时间,如果这个时间比较长,那么发布的消息就暂时存在队列中。总之,设定一个很大的值即可。

ros::spin();

subscriber调用回调函数是需要触发的。即 ros::spinOnce().

  1. ros::Rate rate(100);// 100 hz ; 为啥不能用ros::spin 因为我们还有除了回调函数之外的其他操作;
  2. while (ros::ok()) {
  3. ros::spinOnce();// 这句话必须写在循环内的任意位置都可以,只要运行这句话,就触发按钮,告诉subscriber 调用回调函数; 调用一次,可以处理接受队列中的几个消息?应该是一个消息。
  4. // 自己的一些其他操作
  5. rate.sleep();
  6. }

如果使用 ros::spin() , 一定要放在最后,因为 ros::spin() 相当于

  1. while (ros::ok()) {
  2. ros::spinOnce();
  3. }

什么时候选择 ros::spin() ? 当只有回调函数操作 而 没有其他循环操作时 。

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

闽ICP备14008679号