【问题标题】:Difference between spin and rate.sleep in ROSROS中spin和rate.sleep的区别
【发布时间】:2014-06-07 06:23:50
【问题描述】:

我是 ROS 的新手,并试图了解这个强大的工具。我对spinrate.sleep 函数感到困惑。谁能帮助我了解这两个功能之间的区别以及何时使用每个功能?

【问题讨论】:

    标签: ros


    【解决方案1】:

    ros::spin()ros::spinOnce() 负责处理通信事件,例如到达的消息。如果您要订阅消息、服务或操作,则必须调用 spin 来处理事件。

    ros::spinOnce() 处理事件并立即返回时,ros::spin() 会阻塞,直到 ROS 调用关闭。因此,ros::spinOnce() 在需要时为您提供更多控制权。更多关于这个问题的信息:Callbacks and Spinning

    另一方面,rate.sleep() 只是一个线程休眠,其持续时间由频率定义。这是一个例子

    ros::Rate rate(24.);
    while(ros::ok())
    {
        rate.sleep();
    }
    

    此循环每秒将执行 24 次或更少,这取决于您在循环内执行的操作。 ros::Rate 对象跟踪自上次执行 rate.sleep() 以来的时间,并在正确的时间内休眠以达到 24 Hz 标记。请参阅ros::Rate::sleep() API。

    时域中的等价方式是ros::Duration::sleep()

    ros::Duration duration(1./24.);
    while(ros::ok())
    {
        duration.sleep();
    }
    

    您使用哪一个只是为了方便。

    【讨论】:

    • 能否请您详细说明这两句话:(1) "...ros::spinOnce()处理事件并立即返回,..." i> (2) "...ros::spin() 阻塞,直到 ROS 调用关闭..." 特别是,您所说的 "是什么意思?关闭”? 您的意思是杀死所有节点并最终杀死 ROS 主机吗?我仍然很困惑。提前非常感谢您!
    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多