ROS中spin和rate.sleep的区别

Ste*_*127 6 ros

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

小智 14

ros::spin()并且ros::spinOnce()可以处理通信事件,例如到达消息.如果您要订阅消息,服务或操作,则必须调用spin来处理事件.

虽然ros :: spinOnce()处理事件并立即返回,但是ros :: spin()会阻塞,直到ros调用shutdown.因此,如果需要,ros :: spinOnce()可以为您提供更多控制.更多关于此事:回调和旋转.

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

ros::Rate rate(24.);
while(ros::ok())
{
    rate.sleep();
}
Run Code Online (Sandbox Code Playgroud)

这个循环将每秒执行24次或更少,取决于你在循环内做什么.一个ros::Rate对象跟踪自上次rate.sleep()执行以来的时间和睡眠时间达到24 Hz标记的正确时间.请参阅ros::Rate::sleep() API.

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

ros::Duration duration(1./24.);
while(ros::ok())
{
    duration.sleep();
}
Run Code Online (Sandbox Code Playgroud)

你使用哪一个只是为了方便.