ROS中spin和rate.sleep的区别

时间:2014-04-22 18:03:34

标签: ros

我是ROS新手并试图了解这个强大的工具。我对spin和rate.sleep函数感到困惑。任何人都可以帮助我区分这两个功能以及何时使用哪个?谢谢。

1 个答案:

答案 0 :(得分:12)

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();
}

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