ROS 2 Communication Issues#

Isaac ROS Deploy runs the controller manager, the robot state publisher, and any command source as separate ROS 2 nodes that discover each other over DDS. When discovery goes wrong the stack still starts cleanly, so the symptom is a robot that ignores your commands or reacts to commands you did not send.

The Robot Reacts to Commands You Did Not Send#

By default every ROS 2 node on the same network joins the same DDS domain. If another person or another robot is running a policy on that network, their twist commands and parameter updates reach your controllers as well.

Symptom#

The robot moves without you publishing anything, or responds to a twist command at the same moment a colleague sends one. A terminal that was started without the export sees none of your controllers, so the policy appears never to activate.

Solution#

Set a unique ROS_DOMAIN_ID in every terminal before launching, including the terminal you use to publish twist commands and the one you use to set blend_ratio:

export ROS_DOMAIN_ID=<your_id>

Every terminal that participates must use the same value. A terminal that misses this export lands in the default domain instead.

Commands Have No Effect After Restarting the Stack#

Stopping the ros2 launch process does not always stop the ros2_control_node it started. A surviving controller manager keeps its controllers and its topic subscriptions alive, and the next launch then competes with it for the same topics and the same hardware.

Symptom#

The stack reports controllers as active and /joint_states keeps publishing at the expected rate, but the robot does not move and joint velocities read approximately zero. This looks very much like a policy that is simply not producing output.

Solution#

Check for a surviving controller manager before relaunching:

pgrep -af ros2_control_node

If anything is listed, terminate it, then relaunch:

pkill -f ros2_control_node

The same applies to the other nodes the launch file starts, such as robot_state_publisher and foxglove_bridge.

Messages Are Dropped Under Load#

Symptom#

Message delivery becomes unreliable when many nodes run at once. Topics arrive intermittently or discovery takes an unusually long time.

Solution#

Refer to the DDS tuning guide for the receive-buffer and discovery settings to adjust.