【发布时间】:2014-06-07 06:23:50
【问题描述】:
我是 ROS 的新手,并试图了解这个强大的工具。我对spin 和rate.sleep 函数感到困惑。谁能帮助我了解这两个功能之间的区别以及何时使用每个功能?
【问题讨论】:
标签: ros
我是 ROS 的新手,并试图了解这个强大的工具。我对spin 和rate.sleep 函数感到困惑。谁能帮助我了解这两个功能之间的区别以及何时使用每个功能?
【问题讨论】:
标签: ros
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();
}
您使用哪一个只是为了方便。
【讨论】:
ros::spinOnce()处理事件并立即返回,..." i> (2) "...ros::spin() 阻塞,直到 ROS 调用关闭..." 特别是,您所说的 "是什么意思?关闭”? 您的意思是杀死所有节点并最终杀死 ROS 主机吗?我仍然很困惑。提前非常感谢您!