我正在用c ++编写一个ros节点,需要在特定时间内延迟一个方法调用。 有什么好办法可以做到这一点,而不会为延迟锁定节点?
答案 0 :(得分:3)
使用C ++方法,而在ROS中存在两种方法。
第一个 - 更简单的实现方法 - 是使用Rate
类。 this tutorial的第2节阐明了如何使用它。但是你可以看到,这不是最好的选择。
注意:通常建议使用定时器而不是速率。
Timers
是在做其他事情时等待一段时间的正确方法。 This simple tutorial解释了如何使用它们。
ros::Timer ros::NodeHandle::createTimer(ros::Duration period, <callback>, bool oneshot = false);
如果您只想执行一次该方法,请将oneshot
bool变量设置为true。
答案 1 :(得分:1)
您有两种选择:
您有其他可以进展的线程或进程。简单地睡一下你的线程:
std::this_thread::sleep_for(std::chrono::milliseconds(150));
您还需要在同一个线程上执行其他任务。查看异步执行,例如Boost Asio