Odin Rqtclose ❲95% POPULAR❳

#!/bin/bash # odin – correct wrapper for rqt rqt_pid="" function cleanup if [[ -n "$rqt_pid" ]]; then kill -TERM "$rqt_pid" wait "$rqt_pid" echo "odin rqtclose: clean exit" fi

sudo strace -p <PID> -e trace=network If you see repeated poll or recvfrom calls without returning, the GUI is waiting for a dead ROS topic. Before closing rqt , run:

rqt --force-discover --close-with-master The --close-with-master flag ensures rqt exits if the ROS master dies, preventing hangs. Outdated python-qt-binding or ros-kinetic-rqt-gui (or Melodic/Noetic) can cause shutdown deadlocks. Update: odin rqtclose

def shutdown_plugin(self): rospy.loginfo("odin rqtclose: Starting shutdown sequence") # Disconnect callbacks self.pub.unregister() rospy.loginfo("odin rqtclose: Publishers unregistered") # Call parent super().shutdown_plugin() rospy.loginfo("odin rqtclose: Complete") If you see the first log but not the last, you’ve found a hang. Attach strace to the stuck rqt process (find PID via ps aux | grep rqt ):

rosnode list After rqtclose fails, run again. If the rqt node still appears, it’s still alive. Force-kill it: Update: def shutdown_plugin(self): rospy

rosnode kill /rqt_gui_py_node_xxxx Then improve your shutdown logic to call rosnode kill on itself (not recommended) or fix the plugin. Fix 1 – Correct the Odin Wrapper Replace any kill -9 with kill -TERM and add a wait loop:

This error is not a standard ROS output. Instead, it typically surfaces when a custom rqt plugin or a node named "Odin" (a common internal codename for autonomy stacks, custom executors, or specific robotic platforms) fails to close its ROS GUI components gracefully. The rqtclose signal indicates that the GUI was either forcibly terminated, lost a connection to the ROS master, or encountered a deadlock during shutdown. it’s still alive.

trap cleanup EXIT rosrun rqt_gui rqt_gui & rqt_pid=$! wait $rqt_pid Example of a safe shutdown in a Python rqt plugin: