waitForMessage in thread always time-out [closed]
I'm implementing a node that is managing multiple controllers for my robot so I want to have the following behavior:
- the controllerManager node publish on a "control/manager/tick" topic.
- On reception of this message: the controller1 and controller2 nodes calculate a commands and each publish back to a topic "control/controllerX/command" on which controllerManager is listening.
- After publishing the tick, controllerManager wait for receiving the commands from both controller1 AND controller2 to continue.
So I used the following implementation:
void controllerManager::someMethod(){
// some stuff
............
// create threads that will run until a message is published on some topic or time-out
std::vector(boost::thread) threads;
for(auto& ctrler : all_ctrlers){ // all_ctrlers contains an object for controller1 and controller2
std::string controllerTopic = ctrler.getTopic();
ros::Duration timeOut(1);
threads.push_back( boost::bind(
ros::topic::waitForMessage<MyMsg>,
controllerTopic,
timeOut));
}
// publish the tick to the controllers
tickPublisher.publish(tickMsg);
// On reception of this msg, the controllers node will publish a response
// wait for all controller to have published their command in response to the tick
for(auto& thread : threads){
thread.join()
}
// some more stuff
......
}
The issue I'm facing here is that ros::topic::waitForMessage always time-out. I did try:
- to use the different versions of waitForMessage functions with different types of NodeHandle,
- to replace this function by its implementation to dig a bit deeper,
but no matter what I try, this is always timing out.
Am I missing some important thing with ROS communication and threading?