zoukankan      html  css  js  c++  java
  • ROS 中对 ros::spin() 和ros::spinOnce() 的认识

    ros::spin()

    这句话的意思是循环且监听反馈函数(callback)。循环就是指程序运行到这里,就会一直在这里循环了。监听反馈函数的意思是,如果这个节点有callback函数,那写一句ros::spin()在这里,就可以在有对应消息到来的时候,运行callback函数里面的内容。 
    就目前而言,以我愚见,我觉得写这句话适用于写在程序的末尾(因为写在这句话后面的代码不会被执行),适用于订阅节点,且订阅速度没有限制的情况。

    ros::spinOnce()

    这句话的意思是监听反馈函数(callback)。只能监听反馈,不能循环。所以当你需要监听一下的时候,就调用一下这个函数。 
    这个函数比较灵活,尤其是我想控制接收速度的时候。配合ros::ok()效果极佳。 
    例如

    ros::Rate loop_rate(10);
    while(ros::ok())
    {
        ros::spinOnce();
        loop_rate.sleep();
    }

    可以控制10Hz速度,运行callback函数,非常方便。 
    如果只有

    while(ros::ok())
    {
        ros::spinOnce();
    }

    这就等于ros::spin()。

    注意

    这两个函数只和接收回调函数(callback)有关,和发布并没有关系。如果想循环发布,只能循环写publish()。见参考文献[1]的发布节点示例。 
    我这次出问题就是和发布弄混了。我以为写了spin()可以循环发布的,后来发现并不是。

    转自:https://blog.csdn.net/yessharing/article/details/65520527

  • 相关阅读:
    POJ 1386 判断欧拉回路
    POJ 1416 DFS
    POJ 1654 乱搞题?
    POJ 1703 带权并查集
    POJ 1442 Treap模板
    TYVJ 1941 BZOJ3038 上帝造题的七分钟2 并查集+树状数组
    POJ 2492 A Bug's Life 带权并查集
    AHOI 2009 (BZOJ1798)维护序列 seq (线段树好题?)
    Binary Tree Traversal
    Weekly Contest 111-------->944. Delete Columns to Make Sorted
  • 原文地址:https://www.cnblogs.com/loved/p/8881740.html
Copyright © 2011-2022 走看看