MCPcopy Create free account
hub / github.com/UniversalRobots/Universal_Robots_ROS_Driver

github.com/UniversalRobots/Universal_Robots_ROS_Driver @v2.4.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.4.1 ↗ · + Follow
128 symbols 203 edges 21 files 17 documented · 13% updated 19d agov2.4.1 · 2025-05-20★ 88211 open issues

Browse by type

Functions 113 Types & classes 15
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Build badge

Universal_Robots_ROS_Driver

Universal Robots have become a dominant supplier of lightweight, robotic manipulators for industry, as well as for scientific research and education. The Robot Operating System (ROS) has developed from a community-centered movement to a mature framework and quasi standard, providing a rich set of powerful tools for robot engineers and researchers, working in many different domains.

Universal Robot e-Series family

With the release of UR’s new e-Series, the demand for a ROS driver that supports the new manipulators and the newest ROS releases and paradigms like ROS-control has increased further. The goal of this driver is to provide a stable and sustainable interface between UR robots and ROS that strongly benefit all parties.

It is the core value of Universal Robots, to empower people to achieve any goal within automation. The success criteria of this driver release is to follow this vision, by providing the ROS community with an easy to use, stable and powerful driver, that empowers the community to reach their goals in research and automation without struggling with unimportant technical challenges, instability or lacking features.

Acknowledgment

This driver is forked from the ur_modern_driver.

Developed in collaboration between:

Universal Robots A/S   and   FZI Research Center for Information Technology.

rosin_logo

Supported by ROSIN - ROS-Industrial Quality-Assured Robot Software Components.
More information: rosin-project.eu

eu_flag

This project has received funding from the European Union’s Horizon 2020
research and innovation programme under grant agreement no. 732287.

How to report an issue

Before creating an issue, please have a look at the Troubleshooting section of this document.

To create an issue on the Issue Board please use the default template.

How to get help

If you need help using this driver, please see the ROS-category in the UR+ Developer Forum.

Features

  • Works for all CB3 (with software version >= 3.14.3) and e-Series (software >= 5.9.4) robots and uses the RTDE interface for communication, whenever possible.
  • Factory calibration of the robot inside ROS to reach Cartesian targets precisely.
  • Realtime-enabled communication structure to robustly cope with the 2ms cycle time of the e-Series. To use this, compile and run it on a kernel with the PREEMPT_RT patch enabled. (See the Real-time setup guide on how to achieve this)
  • Transparent integration of the teach-pendant. Using the URCaps system, a program is running on the robot that handles control commands sent from ROS side. With this, the robot can be paused, stopped and resumed without restarting the ROS driver. This will in the future also enable the usage of ROS-components as part of a more complex UR-program on the teach pendant. ROS-control of the robot can be quit using a service call to continue program execution on the TP.
  • Use the robot's speed-scaling. When speed scaling is active due to safety constraints or the speed slider is used, this gets correctly handled on the ROS side, as well slowing down trajectory execution accordingly.

Note: Other ros-controllers based on a position interface can be used with this driver, but may behave wrong if the speed slider isn't set to 100% or if speed scaling slows down the robot. Also, the pausing function can only be used if the default scaled trajectory controller is used. * ROS-Service-based replacement of most every-day TP-interactions offer using UR robots without interacting with the teach pendant at all, if desired. The robot can be started, stopped and even recovery from safety events can be done using ROS service- and action calls. See the driver's dashboard services and the robot_state_helper node for details. * Use on-the-robot interpolation for both Cartesian and joint-based trajectories. This is extremely helpful if your application can not meet the real-time requirements of the driver. Special types of passthrough controllers forward the trajectories directly to the robot, which then takes care of interpolation between the waypoints to achieve best performance.

Please see the external feature list for a listing of all features supported by this driver.

Contents

This repository contains the new ur_robot_driver and a couple of helper packages, such as:

  • ur_calibration: Package around extracting and converting a robot's factory calibration information to make it usable by the robot_description.
  • ur_dashboard_msgs: Message definitions used for interacting with the dashboard node.
  • ur_robot_driver: The actual driver package.

Requirements

This driver requires a system setup with ROS. It is recommended to use Ubuntu 20.04 with ROS noetic.

To make sure that robot control isn't affected by system latencies, it is highly recommended to use a real-time kernel with the system. See the real-time setup guide on information how to set this up.

Install from binary packages

  1. Install ROS. This package only supports ROS noetic. If you want to use a UR robot arm with ROS 2, please see the ROS 2 driver.
  2. Install the driver using
sudo apt install ros-${ROS_DISTRO}-ur-robot-driver ros-${ROS_DISTRO}-ur-calibration

Building from source

Before building from source make sure that you actually need to do that. We recommend you install the driver from its binary packages unless you want to join development and submit changes.

Note: The driver consists of a C++ library that abstracts the robot's interfaces and a ROS driver on top of that. As the library can be built without ROS support, it is not a catkin package and therefore requires a different treatment when being built inside the workspace. See The alternative build method below if you'd like to build the library from source.

# source global ros
$ source /opt/ros/<your_ros_version>/setup.bash

# create a catkin workspace
$ mkdir -p catkin_ws/src && cd catkin_ws

# clone the driver
$ git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver

# Install vcstool
$ sudo apt update -qq
$ sudo apt install python3-vcstool

# clone the direct dependencies. As the latest version might require the latest upstream version,
# we'll build things from source. Note: This does not include the client library. If there are API
# changes there, you might have to use the all-source build as explained below.
$ vcs import --input src/Universal_Robots_ROS_Driver/.noetic.rosinstall src

# install dependencies
$ rosdep update
$ rosdep install --from-paths src --ignore-src -y

# build the workspace
$ catkin_make

# activate the workspace (ie: source it)
$ source devel/setup.bash

Alternative: All-source build

If you would like to also build the library from source, clone the library into your workspace, as well and build it using either catkin_make_isolated or catkin build.

$ source /opt/ros/<your_ros_version>/setup.bash
$ mkdir -p catkin_ws/src && cd catkin_ws
$ git clone https://github.com/UniversalRobots/Universal_Robots_Client_Library.git src/Universal_Robots_Client_Library
$ sudo apt update -qq
$ sudo apt install python3-vcstool
$ vcs import --input src/Universal_Robots_ROS_Driver/.noetic.rosinstall src
$ git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver
$ rosdep update
$ rosdep install --from-paths src --ignore-src -y
$ catkin_make_isolated
$ source devel_isolated/setup.bash

Setting up a UR robot for ur_robot_driver

Prepare the robot

For using the ur_robot_driver with a real robot you need to install the externalcontrol-x.x.x.urcap which can be found here.

For installing the necessary URCap and creating a program, please see the individual tutorials on how to setup a CB3 robot or how to setup an e-Series robot.

To setup the tool communication on an e-Series robot, please consider the tool communication setup guide.

Prepare the ROS PC

For using the driver make sure it is installed (either by the debian package or built from source inside a catkin workspace).

Extract calibration information

Each UR robot is calibrated inside the factory giving exact forward and inverse kinematics. To also make use of this in ROS, you first have to extract the calibration information from the robot.

Though this step is not necessary to control the robot using this driver, it is highly recommended to do so, as otherwise endeffector positions might be off in the magnitude of centimeters.

For this, there exists a helper script:

$ roslaunch ur_calibration calibration_correction.launch \
  robot_ip:=<robot_ip> target_filename:="${HOME}/my_robot_calibration.yaml"

For the parameter robot_ip insert the IP address on which the ROS pc can reach the robot. As target_filename provide an absolute path where the result will be saved to.

We recommend keeping calibrations for all robots in your organization in a common package. See the package's documentation for details.

Quick start

Once the driver is built and the externalcontrol URCap is installed on the robot, you are good to go ahead starting the driver. (Note: We do recommend, though, to extract your robot's calibration first.)

To actually start the robot driver use one of the existing launch files

$ roslaunch ur_robot_driver <robot_type>_bringup.launch robot_ip:=192.168.56.101

where is one of ur3, ur5, ur10, ur3e, ur5e, ur7e, ur10e, ur12e, ur16e, ur15, ur20, ur30. Note that in this example we load the calibration parameters for the robot "ur10_example".

If you calibrated your robot before, pass that calibration to the launch file:

$ roslaunch ur_robot_driver <robot_type>_bringup.launch robot_ip:=192.168.56.101 \
  kinematics_config:=$(rospack find ur_calibration)/etc/ur10_example_calibration.yaml

If the parameters in that file don't match the ones reported from the robot, the driver will output an error during startup, but will remain usable.

For more information on the launch file's parameters see its own documentation.

Once the robot driver is started, load the previously generated program on the robot panel that will start the External Control program node and execute it. From that moment on the robot is fully functional. You can make use of the Pause function or even Stop (:stop_button:) the program. Simply press the Play button (:arrow_forward:) again and the ROS driver will reconnect.

Inside the ROS terminal running the driver you should see the output Robot ready to receive control commands.

To control the robot using ROS, use the action server on

/scaled_pos_joint_traj_controller/follow_joint_trajectory

Use this with any client interface such as MoveIt! or simply the rqt_joint_trajectory_controller gui:

rosrun rqt_joint_trajectory_controller rqt_joint_trajectory_controller

You may need to install rqt_joint_trajectory_controller by running:

sudo apt install ros-<ROS-DISTRO>-rqt-joint-trajectory-controller

where ROS-DISTRO will be replaced with your version of ROS.

For a more elaborate tutorial on how to get started, please see the usage example.

Replacing the robot description

In a real-world scenario you will want to replace the robot description with a description containing the whole scene where the robot is acting in. For this, all the bringup launchfiles offer the argument robot_description_file that should point to a launchfile loading the robot description.

While the load_urXXX.launch files from the ur_description package contain

Core symbols most depended-on inside this repo

Shape

Method 100
Class 14
Function 13
Enum 1

Languages

C++91%
Python9%

Modules by API surface

ur_robot_driver/src/hardware_interface.cpp34 symbols
ur_robot_driver/test/integration_test.py11 symbols
ur_robot_driver/src/robot_state_helper.cpp9 symbols
ur_calibration/src/calibration_correction.cpp9 symbols
ur_calibration/test/calibration_test.cpp8 symbols
ur_calibration/src/calibration.cpp8 symbols
ur_calibration/include/ur_calibration/calibration.h8 symbols
ur_robot_driver/src/dashboard_client_ros.cpp7 symbols
ur_robot_driver/src/urcl_log_handler.cpp5 symbols
ur_robot_driver/include/ur_robot_driver/dashboard_client_ros.h4 symbols
ur_robot_driver/src/hardware_interface_node.cpp3 symbols
ur_robot_driver/src/controller_stopper.cpp3 symbols

For agents

$ claude mcp add Universal_Robots_ROS_Driver \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page