Hi Tully, >> how can I cleanly shutdown/unload a nodelet from within the nodelet >> code under diamondback? >> > There is not currently a way to do this cleanly, it's ticketed as an > enhancement at https://code.ros.org/trac/ros-pkg/ticket/4431 Ok, hopefully we'll have a good solution for this soonish... >> In the onInit() function of the nodelet I instantiate a class, which >> will immediately return from the constructor if a parameter file is >> not found and the nodelet should be shutdown/unloaded. >> >> What I did so far is to call ros::requestShutdown before returning >> from the constructor, is this the correct way of doing this? >> At least this seems to partially work, the nodelet destructor is >> called and the process finishes cleanly after a time. >> I'm wondering why it is taking so long for the process to finish >> cleanly after the nodelet destructor was already called? Does this get >> detected via some timeout of bind? >> >> The actual problem though is that after the nodelet is destroyed I >> can't seem to reach the nodelet manager anymore to load new nodelets. >> Even trying to shut it down normally via CTRL-C doesn't quite work, >> after a while I get an "escalating to SIGTERM" message. >> >> What's the correct way to do this? >> > > This is not a good way to take down a nodelet, because requestShutdown is > taking down the entire Node, aka all ROS in the process, including the > manager and any other nodelets. Ok, I was half expecting this. Thanks for clearing it up. > The best solution right now is to call the unloadNodelet service on the > manager. Since I don't know the name of the manager it is running in, I can't call the unloadNodelet service from within the nodelet itself, correct? Or is there some way around this? I have the same problem with a I2C driver nodelet, if I can't get the device I have to unload/shutdown the nodelet cleanly somehow. Felix