Robots · Robot arms

FANUC CRX teleoperation: the ROS 2 streaming driver, motion control authority and remote exception handling

Many plants already run CRX cobots. FANUC's own ROS 2 driver now makes it possible to put a remote operator on one without replacing the controller, as long as you respect who has motion control at any moment.

FANUC CRX series (CRX-10iA and siblings), 6-axis industrial cobot series
AI-generated illustration of the FANUC CRX series (CRX-10iA and siblings). For product photos, see FANUC.
Axes
6
Payload (CRX-10iA)
10 kg
Reach (CRX-10iA)
1249 mm
Repeatability (CRX-10iA)
±0.05 mm
Mechanical weight (CRX-10iA)
39 kg
Protection
IP67 body and wrist
Mounting
Floor, angle or inverted
Controller (CRX-10iA page)
R-30iB Plus series

Updated

The FANUC CRX is a family of 6-axis collaborative robots. The CRX-10iA, the model most people mean, carries 10 kg over a 1249 mm reach with ±0.05 mm repeatability, weighs 39 kg and is rated IP67, per FANUC's product page. CRX arms are bought to run programs, not to collect datasets, so teleoperating one usually means something specific: a remote operator who resolves the exceptions that stop a cell, while FANUC's controller and its safety functions stay in charge. Until recently that took custom integration. FANUC's own ROS 2 driver changes that.

What you need on the controller

The FANUC ROS 2 driver is an Apache-2.0, ros2_control streaming driver, on Jazzy with a Humble branch. Its system requirements are specific, and they are the first thing to check against your installed base:

Controller

R-30iB Plus series (R-30iB Plus, Mate Plus, Mini Plus) or R-50iA series.

Software options

J519 Stream Motion and R912 Remote Motion, or the S636 External Control Package that includes both. The documentation notes that options J568 and J570 are not required, despite having "ROS 2" in their names.

Controller software version

V9.40P/81 or later on R-30iB Plus and Mate Plus, V9.40P/77 or later on Mini Plus, V10.10P/26 or later on R-50iA.

PC

Ubuntu 22.04 with Humble or 24.04 with Jazzy. A PREEMPT_RT kernel is optional depending on the application; for streaming teleoperation we treat it as required.

The supported models list covers the CRX-3iA, 5iA, 10iA, 10iA/L, 10iA/L Paint, 20iA/L and 30iA (CRX-25iA), each with its R-50iA equivalent name and a URDF, plus FANUC's LR Mate, M and R series industrial robots. Before a trial, collect the same five facts for every cell you want covered: robot model, controller model, controller software version, installed options (J519 and R912, or S636), and the cameras and network path available. Cells that miss an option or a software version need an upgrade conversation with FANUC or your integrator first, and it is better to find that out before the operators are trained.

Motion control authority: the core of a safe hand-over

The single most important page in FANUC's driver documentation for remote operation is the one on motion control authority. At any moment either the ROS driver or the robot controller has motion control, reported by a motion_possible flag. When it is true, ROS commands motion. When it is false, the controller does, though I/O and status access keep working.

ROS only gets control under strict conditions

Before the driver can regain motion control, the controller must be in AUTO mode, all alarms must be cleared, the teach pendant must be disabled, and all TP programs must be aborted.

Any alarm takes control back

When an alarm occurs on the controller, motion_possible becomes false. The remote operator does not decide this; the controller does.

Hand guiding needs care

The documentation says collaborative applications require an adequate risk assessment, and that Free Hand Teaching must be confirmed finished before control returns to ROS.

That maps cleanly onto exception handling. The production TP program runs. When it hits an exception it cannot handle, it ends at a known state; the cell signals for help; the driver takes motion control; the remote operator resolves the problem; motion control returns to the controller and the program restarts. Typical exceptions are a part that did not seat in a fixture, a regrasp after a missed pick, a box on a pallet that needs nudging, or a jammed fixture that needs a part cleared before anyone on site goes near it. Our warehouse and factory page covers this operating model.

Streaming, RMI and the controllers you can use

Scaled joint trajectory controller

The default motion path. Per FANUC's controller documentation, speed can be scaled from 0% (stopped) to 100% through a speed scaling topic, and trajectories that are not smooth or not feasible for the robot can turn jittery. The documentation warns that speed may exceed limits even with collaborative speed clamping active if the trajectory is infeasible.

Forward position controller

Listed for driver v2.0.0 with controller software V9.40P/84 or V10.10P/28. This is the streaming path a 3D mouse, VR controller or leader device would feed, through a local smoothing layer.

RMI controller

Commands motion with TP-style instructions (linear, joint, circular, spline) through the Remote Motion Interface, with an 8-instruction buffer, in FANUC's own coordinate conventions. FANUC describes RMI as TCP/IP messaging with JSON commands, with its motion planner handling blending and acceleration, and says most other options, including Collision Guard and DCS, are compatible with it. For supervisory teleoperation (operator picks a target, controller plans the move), RMI is often the better fit than raw streaming.

GPIO and force sensor

A GPIO controller exposes I/O, registers and robot status at the motion rate, and a force sensor broadcaster publishes wrench data where a sensor is fitted.

Two FANUC-specific traps: the general override must stay at 100 while the hardware interface is active, so speed is reduced through the speed scaling input rather than the pendant override; and on collaborative robots, calling the payload service ends Stream Motion and RMI. Set payloads before handing control to a remote operator, not during.

Smooth commands or vibration

A driver issue on a CRX-25iA with an R-30iB Mini Plus reported vibration and overshoot at the end of MoveIt trajectories streamed through the scaled joint trajectory controller, while the same moves from a TP program were smooth. The maintainer's answer was that the controller smooths commands automatically but MoveIt may not respect the robot's practical acceleration and jerk limits, so trajectories need to be generated within them. The issue remained open when we checked. For teleoperation the lesson is the same as on other arms: never stream an operator's raw input. Filter it, limit velocity, acceleration and jerk on the PC next to the robot, and prefer RMI-style planned moves when the operator's link is slow.

Latency for remote exception handling

Under ~100 ms round trip

Streaming jog control feels responsive, and regrasps or placement into fixtures are straightforward at reduced speed.

~100 to 250 ms

Still workable for most exceptions, because recovery moves are slow. Point-to-point moves through RMI (pick a target, preview, execute) are more comfortable than continuous jogging.

Above ~250 ms

Supervisory control only: the operator selects a recovery action or target, and the controller plans and executes it.

Collaborative speed clamping reduces speed before the limit is reached, so the arm can move more slowly than commanded; leave it on for remote work unless your risk assessment says otherwise. Our latency guide covers budgets by task.

Safety with a remote operator

The controller decides

Contact detection, DCS limits, alarms and e-stops act on the controller. An alarm removes motion control from ROS immediately, as described above.

The pendant is a safety device

ROS can only take motion control with the teach pendant disabled. Agree with the integrator how a pendant enabled on site during a remote session is handled, so the person in the cell always has the last word.

Restarts follow the site procedure

Clearing alarms and returning to AUTO happen on the controller. Whether a remote operator may request that, or must wait for someone on site, is written down before go-live.

Locked outputs

Synchronized outputs configured in the GPIO controller cannot be rewritten by TP programs or fieldbus while the driver holds them. Agree which outputs the driver owns with the integrator.

Data from CRX cells

LeRobot has no FANUC driver, and no FANUC plugin appears on its third-party robots page. The same page lists two ROS 2 bridges, leros2 and lerobot_robot_ros2_zenoh, which sit naturally beside FANUC's ROS 2 driver. For most plants, the valuable data is the exception log itself: what went wrong, the camera views, joint states, force data where available, the operator's recovery and whether the program resumed. Recorded consistently, that log shows which exceptions to engineer out of the cell and which ones a learned policy could take over.

What a good CRX operator does

Checks the controller state before acting: mode, alarms, which TP program ended and where.
Moves slowly near fixtures and people, and lets contact detection be a backstop, not a tool.
Leaves the cell in the state the TP program expects before handing motion control back.
Never changes payload settings mid-session, since that ends streaming on a cobot.
Reports repeat exceptions and any jitter in motion; both usually point to a fixture, a trajectory or a PC problem.

CRX or UR?

Many lines run both. The UR10e is driven through UR's External Control URCap, while the CRX uses Stream Motion and RMI with an explicit motion-control flag. The operating model is the same, controller in charge and hand-over at defined points, but the mechanics differ, so operators need training on each.

How RoboPilots runs CRX exception handling

The cell stays as your integrator built it. We work with you and whoever owns the cell's safety to confirm controller software and options, define the exception points and hand-over logic, choose streaming or RMI for each exception type, and decide who may restart after an alarm. Then we train a dedicated group of operators on your unit and your procedures before they take a live exception.

One-week trial

A short run sets the baseline: exceptions resolved per shift, time to respond and time to resolve. If your latency or cell layout rules out part of the plan, you hear it that week.

Coverage

Shifts across time zones, including US Pacific hours, so nights and weekends have an operator. Your on-site staff handle anything that needs hands in the cell.

Data

Recoveries labeled by exception type and outcome, delivered as LeRobot, RLDS or HDF5, or as ROS 2 bags.

Interfaces, specs and sources

  • FANUC ROS 2 driver (Stream Motion)
  • Remote Motion Interface (RMI)
  • MoveIt 2
  • Tablet Teach Pendant
  • GPIO and register access
  • LeRobot via ROS 2 bridges

Specs are the maker's published figures, checked on . RoboPilots is not affiliated with FANUC; product names are trademarks of their owners.

Frequently asked questions

Does FANUC have an official ROS 2 driver for the CRX?
Yes. FANUC publishes fanuc_driver, an Apache-2.0 ros2_control streaming driver for Jazzy and Humble, with URDFs for the CRX-3iA through CRX-30iA. It needs J519 Stream Motion and R912 Remote Motion, or the S636 package that includes both.
Which FANUC controllers work with the ROS 2 driver?
The R-30iB Plus series (Plus, Mate Plus and Mini Plus) and the R-50iA series, at minimum software versions V9.40P/81, V9.40P/77 for Mini Plus, and V10.10P/26 for R-50iA.
What is the FANUC Remote Motion Interface?
RMI lets an external PC, PLC or vision system send TP-style motion instructions to the controller over TCP/IP with JSON messages, while FANUC's motion planner handles blending and acceleration. It suits supervisory remote control better than raw streaming.
Can a remote operator override the CRX safety system?
No. The ROS driver only gets motion control in AUTO mode with alarms cleared and the pendant disabled, and any alarm returns control to the controller. Safety functions stay on the controller.
What are the CRX-10iA specifications?
FANUC lists 6 axes, 10 kg payload, 1249 mm reach, ±0.05 mm repeatability, 39 kg mechanical weight and IP67 protection.