Physical Fanuc CRX-30iA trajectory instantly aborts in ROS 2: "STMO is inactive" & MOTN-615
Hi everyone,
I'm trying to control a physical Fanuc CRX-30iA (R-30iB Mini Plus controller, Tablet Teach Pendant) using the official FANUC-CORPORATION/fanuc_driver package in ROS 2.
The hardware interface successfully connects to the robot (I get a solid green light on the arm indicating the servos are fully energized), but the split second I send a trajectory from MoveIt or publish a point, the execution aborts within 7ms.
(Note: This exact workspace setup works perfectly inside RoboGuide simulation. The failure only happens on the physical arm).
The Error Logs
In the ROS 2 terminal:
[ros2_control_node-1] Status seq skipped. Expected seq: 12158 Received seq: 12159
[ros2_control_node-1] Command lagging behind. Command seq: 12158 Status seq: 12159
[ros2_control_node-1] Sending extra command to catch up.
...
[ros2_control_node-1] [WARN] [joint_trajectory_controller]: Aborted: STMO is inactive (!motion_possible)
[move_group-8] [WARN] [follow_joint_trajectory_controller_handle]: Controller '/joint_trajectory_controller' failed with error INVALID_GOAL: Aborted: STMO is inactive (!motion_possible)
On the Tablet Teach Pendant:
The top bar says 10%, auto and tp key disabled.
During execution, it throws: MOTN-615 ST:Please disable brake control or hangs on waiting for communication completion.
My Network & Environment Setup
My workstation has multiple network cards and is physically connected to the robot network via a local interface (120.176.x.x), while I am sending commands from an IoT workstation (10.14.x.x).
I can ping the robot from the workstation and vice versa.
I have tried binding CycloneDDS explicitly to both the 10.x.x.x interface and the local 120.x.x.x network card, but the trajectory still drops instantly on execution.
What I've Checked So Far:
Joint Names: Fixed to match the physical controller's exact ['J1', 'J2', 'J3', 'J4', 'J5', 'J6'] layout.
UOP Settings: Enable UI Signals is set to FALSE.
ABSNM Variable: Tried toggling true and false. Fails either way on trajectory handoff.
Brake Logs: Eco Mode Brake Control is already FALSE. Servo off timers ($SV_OFF_TIME) are extended high so the servos aren't dropping asleep.
RMI Parameter Change: We also tried changing the RMI motion control mode parameter to 2 from 0
OS Level Real-Time tuning: Maxed out Linux socket receive/send buffers (rmem_max to 25MB), isolated CycloneDDS to unicast-only to stop packet fragmentation, and ran the launch file via root real-time priority (sudo -E chrt -f 99).
It looks like the Stream Motion (STMO) engine on the controller detects a sequence count lag/skip when MoveIt bursts the trajectory points, causing it to trigger a safety stop that clashes with the active stream.
Does anyone know how to loosen the packet synchronization window on modern CRX controllers, or how to get past this MOTN-615 brake control algorithm conflict?
Also I'm using this launch command: ros2 launch fanuc_moveit_config fanuc_moveit.launch.py
Thanks!