fanucpy_ros2: A ROS 2 interface tested with an older FANUC R-30iA Mate controller
Hello ROS community,
I would like to share fanucpy_ros2, an independent ROS 2 interface that I developed and tested with a FANUC M-10iA robot and an R-30iA Mate controller.
Motivation
While working with this robot, I wanted to integrate it into a ROS 2 Humble environment for monitoring, motion commands, visualization, and MoveIt 2 planning.
My available controller is an R-30iA Mate running software version V7.70P/56. This configuration falls outside the controller families and minimum software versions listed in the current official FANUC ROS 2 driver documentation.
This does not indicate a problem with the official driver; its documented requirements simply do not cover the older controller available in my setup.
I therefore investigated fanucpy, an existing Python library developed by Agajan Torayev and its contributors. It provides communication with a FANUC controller using controller-side programs and a TCP connection.
Using fanucpy as the underlying communication layer, I developed fanucpy_ros2 to expose selected robot and controller functionality through standard ROS 2 concepts.
This is a community-developed project. It is not an official FANUC driver and is not intended to replace the official FANUC ROS 2 driver.
Package overview
The current communication architecture is:
ROS 2 applications or MoveIt 2
|
Topics, services and actions
|
fanucpy_ros2 driver
|
fanucpy
|
Controller-side MAPPDK server
|
FANUC controller
A single ROS 2 driver node owns and manages the connection to the controller. It publishes robot state and provides controlled interfaces for supported controller operations and robot motion.
The repository currently contains eight ROS 2 packages covering the driver, custom interfaces, launch configuration, examples, trajectory execution, RViz visualization, controller utilities, and MoveIt 2 integration.
Main features
The current implementation provides:
- Joint-state publishing through
/joint_states - Cartesian state and ROS
PoseStampedpublishing - Driver connection and configuration status
- Numeric-register read and gated write services
- Digital-output read and gated write services
- Configurable digital gripper control
- Relative Cartesian movement through a ROS 2 action
- Allowlisted TP program execution
- A standard
FollowJointTrajectoryaction for MoveIt 2 integration - RViz visualization using live robot feedback
- MoveIt 2 configurations for mock and real-hardware modes
- Keyboard Cartesian teleoperation and controller utility examples
- Automatic reconnection following ordinary communication failures
- Validation of motion requests, joint limits, velocities, frames and trajectory waypoints
Controller writes, robot motion and TP program execution have independent enable parameters, and all are disabled by default.
The current release is version 0.8.0 and is distributed under the Apache License 2.0.
Tested environment
The package has been physically tested using the following configuration:
| Component | Tested configuration |
|---|---|
| Robot | FANUC M-10iA |
| Controller | FANUC R-30iA Mate |
| Controller software | V7.70P/56 |
| Controller options used | R632 KAREL and R648 User Socket Messaging |
| Operating system | Ubuntu 22.04 |
| ROS distribution | ROS 2 Humble |
| Python | System Python 3.10 |
| Communication | fanucpy with a controller-side MAPPDK server |
This table describes only my tested configuration. I have not established compatibility with other FANUC controller families, software versions, robot models or ROS 2 distributions.
MoveIt 2 integration
The repository includes a MoveIt 2 configuration for the FANUC M-10iA with both mock and real-hardware launch modes.
In real-hardware mode, MoveIt sends trajectories through the standard FollowJointTrajectory action provided by the driver. The current execution method uses validated point-to-point controller commands rather than a hard real-time streaming interface.
The included robot model is useful for planning and visualization, but users must verify the joint limits, coordinate frames, tooling, mounting and collision geometry against their own physical installation.
Scope and limitations
This package depends on the communication protocol and controller-side programs provided by fanucpy. It is a request-response TCP interface and does not provide hard real-time or high-bandwidth streaming control.
At present, hardware testing is limited to my specific M-10iA and R-30iA Mate configuration. The automated tests use simulated transports and configuration checks rather than a physical FANUC controller.
The software validation and enable gates are additional engineering precautions, not replacements for FANUC safety functions, physical safeguarding or a proper workcell risk assessment. Any physical testing should be performed at reduced speed by someone familiar with the controller, with the teach pendant and emergency stop accessible.
Repository and demonstration
- GitHub repository
- Hardware demonstration video
- Controller setup guide
- MoveIt 2 quick-start guide
- Original fanucpy project
- Official FANUC ROS 2 documentation
The README and documentation contain the complete installation, controller configuration, safety checks and usage instructions.
Feedback
I would appreciate feedback from ROS 2, MoveIt and ROS-Industrial users, especially regarding:
- The ROS 2 interface design
- The trajectory-execution approach
- Controller connection and recovery
- Safety-related configuration
- Experiences with other older FANUC controller configurations
Reports from other FANUC installations would be particularly helpful when accompanied by the robot model, controller family, controller software version, installed options and test scope.
Issues, documentation improvements and pull requests are welcome through the GitHub repository.