A while back, Universal Robots A/S and FZI Foschungszentrum Informatik started a beta test for new features for the Open Source Universal Robots ROS driver. Please see the beta announcement for details on that.
We are happy to announce that those features have just been merged into the master branch of the driver while many features have been released standalone to also be used in conjunction with
ros_control drivers and applications.
The Driver can be found at:
New ROS-Control features
ros_control extensions making ROS manipulator drivers in general and the Universal Robots ROS driver in special more capable:
For executing Cartesian trajectories we created a message definition structure for executing Cartesian trajectories similar to the
joint_trajectory_controller. Based upon this trajectory definition we created a new set of Cartesian controllers trying to mimic the
joint_trajectory_controller. For this, we created a
ros_controlhardware interface for Cartesian robot commands and states and a Cartesian trajectory controller using this and the trajectory definition from above.
For robots that don’t offer a Cartesian hardware interface we’ve created a controller using an IK solver and a joint-based hardware interface, so robot drivers not offering a Cartesian hardware interface (yet) can be used in conjunction with the new Cartesian trajectory controller. The IK method used for calculating the joint commands is exchangeable by using pluginlib.
With the Cartesian interfaces created, we also added a
TwistController, that can be used to command a
geometry_msgs/Twistfor the robot’s tcp velocity which is useful e.g. in visual servoing or teleoperation applications.
Generalized speed scaling interface: scaled_controllers
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. While this is integrated into the Universal Robots ROS driver, this feature can be leveraged for other ROS-Control-based drivers, as well.
Trajectory interpolation on robot controller: pass_through_controllers
In certain situations it is beneficial to leave trajectory execution to the robot vendor controller. The vendor controller usually knows best about optimal acceleration ramps, waypoint blending and physical restrictions regarding a requested motion. Also, in terms of real-time requirements any streaming controller raises the need for a certain level of real-time requirements on the ROS system, the driver implementation and the communication between the ROS machine and the actual robot. Leaving trajectory execution to the robot controller and only sending the complete trajectory removes the requirement of a real-time control PC or even a fast network connection.
In this driver, the trajectory will be executed using the
movejinstructions with blends in between the trajectory waypoints.
We’ve created a set of controllers to perform this task, so that switching between these different control paradigms is possible using standard ROS-control mechanisms such as the
controller_manager. These controllers basically forward a complete trajectory (joint-based and Cartesian interfaces do exist) to the robot controller, reading feedback and the final goal status from the robot controller directly.
The following additional repositories/metapackages have been developed inside this project:
scaled_controllers– Scaling interface to achieve speed-scaling
cartesian_control_msgs– Message definition for Cartesian
definitions and controllers for Cartesian control of robot
pass_through_controllers– A set of controllers to forward
complete trajectories (joint-based and Cartesian) to the robot
hardware and leave interpolation to the robot controller
All packages of the repositories mentioned above are released for ROS melodic and noetic.
We hope that this contribution will not only improve your experience with Universal Robots manipulators inside a ROS environment, but also improve
ros_control as a whole.
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 program under grant agreement no. 732287.