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.
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||✓||✓|
|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.
Supported by ROSIN - ROS-Industrial Quality-Assured Robot Software Components.
More information: rosin-project.eu
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 ROS@universal-robots.com on what you have tested and how it worked out.