Troubleshooting & Known Issues¶
Issue: MoveIt Known Issues¶
⚠️ Warning: Missing gripper_finger_r2_joint / gripper_finger_l2_joint¶
[WARN] The complete state of the robot is not yet known. Missing gripper_finger_r2_joint
Cause: gripper_finger_r2_joint and gripper_finger_l2_joint are mimic joints (linked to r1/l1 via <mimic> in the URDF) and are not registered in ros2_control. The joint_state_broadcaster does not publish state for them, so MoveIt’s planning scene monitor raises this warning.
Impact: None — motion planning and execution for all controlled joints works correctly. This warning can be safely ignored.
⚠️ Hardware Control Handoff¶
When ros2 launch rby1_moveit_* demo.launch.py is launched with real hardware, the RBY1SystemHardware plugin calls /hardware_control state:=true to take exclusive control from the driver. During this period, direct action commands sent to the driver (e.g. robot_joint) will be rejected. Control is returned to the driver when MoveIt is shut down (Ctrl+C).
Issue: Control Commands Rejected After Trajectory Stream Interruptions¶
Symptom: If a stream-based trajectory control node (e.g., using persistent trajectory streams) is suddenly terminated or killed mid-operation, the driver’s stream state remains active. Until this stream mode is explicitly closed, the driver will reject all other incoming joint or Cartesian motion commands, resulting in errors.
Resolution: You must manually disable the streaming state by calling the
/stream_controlservice withstate: falsein a separate terminal. This terminates the lingering stream and restores normal control capabilities.ros2 service call /stream_control rby1_msgs/srv/StateOnOff "{state: false}"
Issue: Driver Shutdown on Startup due to Collision¶
Symptom: If you launch the driver while the robot is already in a collision state (especially common when launching in simulation where default/initial joint states overlap), the driver will detect the collision and immediately log a FATAL error and terminate for safety.
Resolution: Temporarily decrease the
collision_thresholdparameter indriver_parameters.yaml(e.g. to a very small value or0.0), launch the driver safely, command the robot joints to move to a safe, non-colliding pose, and then restorecollision_thresholdto its original value.
Issue: Client-Side Warnings Ignoring unexpected goal/result response¶
Symptom: When running sequential Python examples (e.g.,
13_stream_command), the terminal outputs warnings likeIgnoring unexpected goal response. There may be more than one action server for the action 'robot_joint'orIgnoring unexpected result response. This occurs because:Persistent streaming makes the action server return success immediately. If the client completes the goal before the Python client-side state machine processes the goal acceptance, a race condition occurs.
Standard blocking calls like
time.sleep()prevent the ROS 2 executor thread from spinning, causing DDS status updates to accumulate and get processed out of order during the next goal spin.
Resolution:
The C++ driver has been updated to introduce a 50ms delay (
std::this_thread::sleep_for(std::chrono::milliseconds(50))) before completing streaming commands to ensure the client-side state machine is ready.In your sequential Python nodes, avoid using standard
time.sleep(). Instead, implement a non-blocking spin-sleep function (e.g.,rclpy.spin_oncein a loop) to keep draining the DDS network queue: