这个问题更可能是编码黑客,可能不依赖于ROS。我在回调函数中接收订阅者的数据。我试图在这个功能中执行耗时的任务。请参阅代码段 -
#include <ros/ros.h>
#include <std_msgs/String.h>
class TimeConsumingTask {
private:
bool still_processing;
void callback(const std_msgs::String::ConstPtr &msg);
public:
TimeConsumingTask();
};
void TimeConsumingTask::callback(const std_msgs::String::ConstPtr &msg) {
ROS_INFO("callback received");
if (still_processing)
return;
still_processing = true;
// perform time consuming task
ros::Duration(5).sleep();
still_processing = false;
}
}
TimeConsumingTask::TimeConsumingTask() {
still_processing = false;
ros::NodeHandle n;
ros::Subscriber sub =
n.subscribe("hello_word", 10, &TimeConsumingTask::callback, this);
ros::spin();
}
int main(int argc, char **argv) {
ros::init(argc, argv, "listener");
TimeConsumingTask task;
return 0;
}
如果前一个任务没有完成,我打算使用一个标志来跳过下一个呼叫。但是,它没有用!
虽然建议不要在回调函数内做任何耗时的任务。我没有问题,即使我跳过几个回调。 我想知道在ROS中回调函数内是否存在执行耗时任务的黑客攻击。
PS:我在Ubuntu 14.04 LTS 64位操作系统上使用ROS Indigo。请使用rostopic pub -r 10 hello_word std_msgs/String hello
发布示例消息。