Overview

This package enables specific ROS nodes to communicate with Fanuc industrial robot controllers, using the protocol defined in the simple_message package. Only joint position streaming is supported (packet type: JOINT_TRAJ_PT), with the controller currently overriding commanded velocity with a constant one (see fanuc/issues/1). Trajectory downloading, velocity or force control are not yet supported. See the relevant sections of the Industrial Robot Driver Specification and the HardwareCompatibility page for more information.

On the robot controller side, two KAREL programs implement the joint state proxy and the trajectory relay, transmitting joint states and receiving joint position set points respectively. These programs should work on most Fanuc controller cabinets, provided they support a relatively recent version of Karel (system V7.20 and up). The driver is manipulator agnostic, and is expected to work with all Fanuc manipulators that can be controlled by R-30iA, R-30iB and R-30iB+ cabinets (no explicit support for collaborative features). Older controllers will require changes to the driver, but can be made to work. Please contact the maintainer if you are interested.

Experimental driver

The fanuc_driver_exp repository contains an experimental replacement for fanuc_driver that is currently being beta-tested.

It is backwards compatible and can be used as a drop-in replacement for the controller side of fanuc_driver (ie: the Karel and TP code).

See the fanuc_driver_exp repository readme for information on how to install it.

Requirements

In order to be able to run the KAREL programs in this package on the Fanuc controller, the following options need to be present (in addition to basic networking and TCP/IP support):

  • R632 - KAREL
  • R648 - User Socket Messaging

While not strictly necessary, the use of the Fanuc Roboguide environment is recommended, as it can be used for simulation as well as configuration of the actual controller hardware.

The KAREL option (R632) may not always be necessary. Contact the maintainer if you're interested in using this package on a controller without that option (see the Package Summary above for contact details).

Hardware compatibility

The current implementation has been tested on R-30iA, R-30iB and R-30iB+ controllers. Specific manipulators tested include the M-10iA (and ARC Mate 100iC), M-16iB/20, M-20iA/10L, M-430iA/2F, R-2000iA/165F and LR Mate 200iC/5L.

In addition, the driver has been used with simulated work cells (Roboguide v7, v8 and v9) running M-20iA, M-430iA/2P, M-900iA/600, LR Mate 200iC (all variants), LR Mate 200iD (with R-30iB), and an R-2000iB/175L.

For more information and comparisons with other ROS-Industrial drivers, see the HardwareCompatibility page.

Nodes

robot_state

Connects to the ROS_STATE Karel program on the controller and publishes joint states.

Action Feedback

feedback_states (control_msgs/FollowJointTrajectory)
  • Provide feedback of current vs. desired joint position (and velocity/acceleration).

Published Topics

joint_states (sensor_msgs/JointState)
  • Joint state for all joints of the connected robot.

Parameters

robot_ip_address (str, default: no default)
  • IP address of the controller to connect to. If this is not set the node will exit.
~port (integer, default: 11002)
  • TCP port the ROS_STATE Karel program is listening on.
robot_description (str, default: no default)
  • The urdf xml robot description.
J23_factor (integer, default: no default)
  • Compensation factor for joint 2-3 coupling (-1, 0 or 1).
use_bswap (boolean, default: no default)
  • If true, driver will byte-swap all incoming and outgoing data.
controller_joint_names ([str, str, str, ..])
  • (optional) A list containing all joints the driver should assume control over. If this parameter is not found, the driver will try to extract this from the robot_description parameter, but this will result in all joints in the urdf to be included. If the driver should only publish joint states for a subset of the joints in the urdf, the controller_joint_names parameter must be set.

motion_streaming_interface

Connects to the ROS_RELAY Karel program on the controller and streams trajectories.

Subscribed Topics

joint_states (sensor_msgs/JointState)
  • Joint state for all joints of the connected robot.
joint_path_command (trajectory_msgs/JointTrajectory)
  • Execute a pre-calculated joint trajectory on the robot.

Services

joint_path_command (industrial_msgs/CmdJointTrajectory)
  • Execute a new motion trajectory on the robot.
stop_motion (industrial_msgs/StopMotion)
  • Stop execution of the current motion at the earliest time possible.

Parameters

robot_ip_address (str, default: no default)
  • IP address of the controller to connect to. If this is not set the node will exit.
~port (integer, default: 11000)
  • TCP port the ROS_RELAY Karel program is listening on.
robot_description (str, default: no default)
  • The urdf xml robot description.
J23_factor (integer, default: none)
  • Compensation factor for joint 2-3 coupling (-1, 0 or 1).
use_bswap (boolean, default: no default)
  • If true, driver will byte-swap all incoming and outgoing data.
controller_joint_names ([str, str, str, ..])
  • (optional) A list containing all joints the driver should assume control over. If this parameter is not found, the driver will try to extract this from the robot_description parameter, but this will result in all joints in the urdf to be included. If the driver should only control a subset of the joints in the urdf, the controller_joint_names parameter must be set.

Tutorials

Use the links on the Tutorials page for access to the tutorials. These explain how to install and set up the KAREL programs on the controller, as well as how to use them in conjunction with the ROS nodes in this package.

Troubleshooting

See the Troubleshooting page for a listing of common errors and possible solutions.

Wiki: fanuc_driver/indigo (last edited 2018-05-23 10:09:33 by GvdHoorn)