我是 ROS 新手,正在尝试了解这个强大的工具。我很困惑spin
and rate.sleep
功能。谁能帮助我了解这两个功能之间的区别以及何时使用每个功能?
ros::spin()
and ros::spinOnce()
负责处理通信事件,例如到达的消息。如果您要订阅消息、服务或操作,您必须致电spin
来处理事件。
While ros::spinOnce()
处理事件并立即返回,ros::spin()
阻塞直到 ROS 调用关闭。所以,ros::spinOnce()
如果需要的话,可以给你更多的控制权。关于这个问题的更多信息在这里:回调和旋转 http://wiki.ros.org/roscpp/Overview/Callbacks%20and%20Spinning.
rate.sleep()
另一方面只是一个线程睡眠,其持续时间由频率定义。这是一个例子
ros::Rate rate(24.);
while(ros::ok())
{
rate.sleep();
}
该循环每秒执行 24 次或更少,具体取决于您在循环内执行的操作。 Aros::Rate
对象跟踪自上次以来的时间rate.sleep()
已执行并休眠正确的时间以达到 24 Hz 标记。看ros::Rate::sleep() http://docs.ros.org/diamondback/api/rostime/html/classros_1_1Rate.html#ae5664d27cda1b17a103347560259e945API.
时域中的等效方法是ros::Duration::sleep() http://docs.ros.org/diamondback/api/rostime/html/classros_1_1Duration.html#a39708cc9b2871f6b3715023ab9610043
ros::Duration duration(1./24.);
while(ros::ok())
{
duration.sleep();
}
您使用哪一个只是方便的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)