ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

Universal Robots ROS driver is ready for beta feedback

Dear Community,

We have been working intensely over the last months to bring Cartesian ROS control to the Universal Robots series and beyond. We are happy to announce that beta testing is started now for all interested contributors.

You can access the beta release from the beta-testing branch on the GitHub Universal_Robots_ROS_Driver

To evaluate the beta and develop the driver further, we hope you will take a few minutes to provide feedback. We look forward to hearing that if you have tested the driver, how well you think it is working, and suggestions for improvement.

Please provide your feedback here. Thank you!

What is it about?

As opposed to joint-based control, Cartesian control is often more intuitive for programmers to specify how a tool (robot end-effector) should move in their application.
For instance, gluing, grinding, polishing and all sorts of other surface-related tasks benefit from a straight-forward task formulation with Cartesian coordinates.

It comes at a surprise that there hasn’t been native support of Cartesian control in ROS. Yet, the number of OEMs, whose drivers support Cartesian control interfaces is growing.

The following enhancements bring Cartesian interfaces to ROS-control and integrate them into the Universal Robots driver. Its goal is to unlock new use cases and serve as a reference implementation for other robots to follow.

ROS has several frameworks to implement program logic and workflow, using robot drivers as mere actuators. Nevertheless, industrial application programmers may prefer to keep the driver the main entrance point, and integrate external functionality instead. ROS as a service aims at meeting this requirement for Universal Robots and allows to embed features of ROS nodes directly into URCaps applications.

Major features at a glance

  • Add Cartesian functionality to ROS control. This brings new interfaces for
    controller design, such as a PoseCommandInterface, a TwistCommandInterface, and a new Cartesian trajectory definition. Example controllers include a TwistController and a CartesianTrajectoryController.

  • Enable Cartesian trajectory control in your applications. Specify your task comfortably with
    waypoints in task space. ROS-side interpolation and streaming of setpoints over the new interfaces is only one of several alternatives.

  • Use (conventional) ROS control for Cartesian trajectory execution. You don’t need to change anything in the driver’s HW-abstraction of your specific robot if that supports current ROS control.

  • Hand-over control to the robot by forwarding trajectories.
    Two new interfaces CartesianTrajectoryInterface and JointTrajectoryInterface let robots take care of driver-side interpolation to achieve best performance.

  • Speed-scale trajectory execution. All trajectory executions (both Cartesian and joint-based) can be speed-scaled within 0 to 100% at runtime. This gives you flexibility in setting-up new applications and during test runs. Changing this continuously even lets you reshape trajectory execution without re-teaching.

  • Use ROS-as-a-service from within URCaps programs.
    This allows you to call services, use actions and topics from within your URCaps. The main program will stay on the driver side while you can integrate features provided by ROS nodes into your industrial application. For instance, a computational intense AI application in the ROS framework could provide the poses of work pieces, which are then used by the main application in the driver.
    This component is not yet ready to be tested, but stay tune it will soon be ready for you review.

Robots Overview

In the spirit of ROS control, most implementation is robot-agnostic and shall support applications on a wide range of robots. The table below shows what features will be available with this enhancement.

Feature Universal Robots Robots with new interfaces Robots with current ROS control
Cartesian trajectory control
Cartesian trajectory forwarding
Joint trajectory forwarding
Speed-scale trajectories
ROS as a service

Cartesian Trajectory Control Overview

The action interface for Cartesian trajectories using established ROS message types. The new features currently enable three possible ways of execution: two execute these trajectories on robots that support the new interfaces and one uses current ROS control mechanisms. The table below highlights possible applications.

Hardware interface Primary application
PoseCommandInterface You want spline interpolation in ROS but the OEMs driver to take care of inverse kinematics (IK).
PositionJointInterface You want spline interpolation in ROS and implement your own IK solver. The provided example uses the established Weighted Levenberg-Marquardt solver form KDL.
CartesianTrajectoryInterface You want the robot to take care of both interpolation and IK for industrial scale performance.

How to contribute

Please provide your feedback through this survey. It is very valuable for us to know what has been tested and get your comments about the beta release as well as the driver as a whole.

Please report issues and bugs in the respective GitHub repositories. Mark them with beta-testing If it is only related to the beta version.

Thank you!



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


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

Please give us feedback to on what you have tested and how it worked out.

Happy testing!


Hi, this will be a great feature and I appreciate the huge amount of work that you are putting into this!

I’d like to ask 2 quick questions:

  1. When do you plan to release cartesian control on the master branch?
  2. Is it possible to use cartesian control with MoveIt?

Thank you for the answers!

Hi @ddudas
Thanks for your question
Our release plan depends on the feedback we get. So as more feedback we get on what have been test, the faster release. It is important for us that the driver is reliable and useful. Please help us by filling out the survey.

The Cartesian interface makes it possible to use the robot’s controller to perform the inverse kinematics. The development of this interface is done with the hope that the community will adapt it.
I do not know if it works with MoveIt, but I do not expect it this early.

1 Like
  1. Is it possible to use cartesian control with MoveIt?

Not directly, no. As @urrsk wrote, this provides an interface that can be used by others, for example MoveIt! To my knowledge, MoveIt! plans a Cartesian path and then creates a joint trajectory out of that for execution, as the common interface to robot drivers in ROS is the FollowJointTrajectory action.

Our intention is that the Cartesian interface gets picked up by the community and at some point also by MoveIt! which is why we tried to define it as general as possible. See our interface design document for details.

A current workaround would be to write a node that receives a planned Cartesian trajectory (I don’t know how to achieve that) and transform it into a FollowCartesianTrajectory action.

1 Like