• Stars
    star
    353
  • Rank 116,724 (Top 3 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created over 3 years ago
  • Updated 16 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Universal Robots ROS2 driver supporting CB3 and e-Series

Universal Robots ROS2 Driver

Universal Robots has become a dominant supplier of lightweight, robotic manipulators for industry, as well as for scientific research and education.

Universal Robot e-Series family

This is one of the very first ROS2 manipulator drivers. Some of the new features are enabled by ROS2 and include decreased latency, improved security, and more flexibility regarding middleware configuration. The package contains launch files to quickly get started using the driver as a standalone version or in combination with MoveIt2

This driver is developed on top of Universal_Robots_Client_Library and support some key cobot functionalities like; pause at emergency stop, safeguard stop, automatic speed scaling to avoid violate the safety setting and manually speed scaling from the teach pendant. In addition the externalControl URCap makes it possible to include ROS2 behaviors in the robot program.

The driver is compatible across the entire line of UR robots -- from 3 kg payload to 16 kg payload and includes both the CB3 and the E-series.

Check also presentations and videos about this driver.

Build Status

ROS2 Distro Foxy Galactic Humble Rolling
Branch foxy galactic humble main
Build Status Foxy Binary Build
Foxy Semi-Binary Build
Galactic Binary Build
Galactic Semi-Binary Build
Humble Binary Main
Humble Binary Testing
Humble Semi-Binary Main
Humble Semi-Binary Testing
Rolling Binary Main
Rolling Binary Testing
Rolling Semi-Binary Main
Rolling Semi-Binary Testing

NOTE: There are two build stages checking current and future compatibility of the driver.

  1. Binary builds - against released packages (main and testing) in ROS distributions. Shows that direct local build is possible and is the most relevant workflow for users.

    Uses repos file: src/Universal_Robots_ROS2_Driver/Universal_Robots_ROS2_Driver-not-released.<ros-distro>.repos

  2. Semi-binary builds - against released core ROS packages (main and testing), but the immediate dependencies are pulled from source. Shows that local build with dependencies is possible and if fails there we can expect that after the next package sync we will not be able to build.

    Uses repos file: src/Universal_Robots_ROS2_Driver/Universal_Robots_ROS2_Driver.repos

Each of these stages also performs integration tests using ursim. In order to execute these tests locally, they have to be enabled:

colcon build --packages-select ur_robot_driver --cmake-args -DUR_ROBOT_DRIVER_BUILD_INTEGRATION_TESTS=On

Packages in the Repository:

  • ur - Meta-package that provides a single point of installation for the released packages.
  • ur_calibration - tool for extracting calibration information from a real robot.
  • ur_controllers - implementations of controllers specific for UR robots.
  • ur_dashboard_msgs - package defining messages used by dashboard node.
  • ur_moveit_config - example MoveIt configuration for UR robots.
  • ur_robot_driver - driver / hardware interface for communication with UR robots.

Getting Started

For getting started, you'll basically need three steps:

  1. Install the driver (see below). You can either install this driver from binary packages or build it from source. We recommend a binary package installation unless you want to join development and submit changes.

  2. Start & Setup the robot. Once you've installed the driver, setup the robot

Please do this step carefully and extract the calibration as explained here. Otherwise the TCP's pose will not be correct inside the ROS ecosystem.

If no real robot is required, you can use a simulated robot that will behave almost exactly like the real robot.

  1. Start the driver. See the usage documentation for details.

Install from binary packages

  1. Install ROS2. This branch supports only ROS2 Rolling. For other ROS2 versions, please see the respective branches.
  2. Install the driver using
    sudo apt-get install ros-${ROS_DISTRO}-ur-robot-driver
    

Build from source

Before building from source please make sure that you actually need to do that. Building from source might require some special treatment, especially when it comes to dependency management. Dependencies might change from time to time. Upstream packages (such as the library) might change their features / API which require changes in this repo. Therefore, this repo's source builds might require upstream repositories to be present in a certain version as otherwise builds might fail. Starting from scratch following exactly the steps below should always work, but simply pulling and building might fail occasionally.

  1. Install ROS2. This branch supports only ROS2 Rolling. For other ROS2 versions, please see the respective branches.

    Once installed, please make sure to actually source ROS2 before proceeding.

  2. Make sure that colcon, its extensions and vcs are installed:

    sudo apt install python3-colcon-common-extensions python3-vcstool
    
  3. Create a new ROS2 workspace:

    export COLCON_WS=~/workspace/ros_ur_driver
    mkdir -p $COLCON_WS/src
    
  4. Clone relevant packages, install dependencies, compile, and source the workspace by using:

    cd $COLCON_WS
    git clone https://github.com/UniversalRobots/Universal_Robots_ROS2_Driver.git src/Universal_Robots_ROS2_Driver
    vcs import src --skip-existing --input src/Universal_Robots_ROS2_Driver/Universal_Robots_ROS2_Driver-not-released.${ROS_DISTRO}.repos
    rosdep update
    rosdep install --ignore-src --from-paths src -y
    colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
    source install/setup.bash
    
  5. When consecutive pulls leads to build errors, please make sure to update the upstream packages before filing an issue:

    cd $COLCON_WS
    vcs import src --skip-existing --input src/Universal_Robots_ROS2_Driver/Universal_Robots_ROS2_Driver-not-released.${ROS_DISTRO}.repos
    rosdep update
    rosdep install --ignore-src --from-paths src -y
    

MoveIt! support

MoveIt! support is built-in into this driver already. Watch MoveIt in action with the Universal Robots ROS2 driver:

Video: MoveIt2 Demo

The video shows free-space trajectory planning around a modeled collision scene object using the MoveIt2 MotionPlanning widget for Rviz2.

See the MoveIt! section of the Usage guide for details.

Expected Changes in the Near Future

  • Trajectory control currently only supports position commands. In the future, velocity control will be added.

Contributor Guidelines

Code is auto-formatted with clang-format 14 whenever a git commit is made. Please ensure these dependencies are installed:

pip3 install pre-commit
sudo apt install clang-format-14

Prepare the pre-commit formatting to run like this:

pre-commit install

More Repositories

1

Universal_Robots_ROS_Driver

Universal Robots ROS driver supporting CB3 and e-Series
C++
704
star
2

Universal_Robots_Client_Library

A C++ library for accessing the UR interfaces that facilitate the use of UR robotic manipulators by external applications.
C++
106
star
3

Universal_Robots_ROS2_Description

ROS2 URDF description for Universal Robots
Python
97
star
4

RTDE_Python_Client_Library

RTDE client library and examples
Python
70
star
5

Universal_Robots_ExternalControl_URCap

Example implementation of how to use ROS driver on-demand in a URCap.
Java
58
star
6

Universal_Robots_ROS2_Gazebo_Simulation

Python
49
star
7

Universal_Robots_ROS_controllers_cartesian

ROS control hardware interface definitions and controllers for Cartesian control of robot manipulators.
C++
44
star
8

Universal_Robots_Isaac_Driver

Driver enabling NVIDIA Isaac SDK operation of UR robots.
C++
32
star
9

Universal_Robots_ToolComm_Forwarder_URCap

Utility to forward the UR Tool Communication Interface (RS-485) to a remote PC.
Java
18
star
10

Universal_Robots_ROS_Tutorials

Tutorials around the Universal Robots ROS (1) ecosystem
Python
16
star
11

Universal_Robots_ROS_passthrough_controllers

ROS controllers to forward complete trajectories (joint-based and Cartesian) to the robot hardware and leave interpolation to the robot controller.
C++
13
star
12

Universal_Robots_ROS_as_a_Service_URCap

This URCap makes a universal robot part of a ROS system by making ROS calls available inside Polyscope through the rosbridge.
Java
12
star
13

Universal_Robots_ROS2_GZ_Simulation

Python
12
star
14

HelloWorldSwing

URCaps Hello World example using Swing UI
Java
8
star
15

SimpleGripper

Demonstrates how to create a gripper driver contribution for a basic gripper
Java
6
star
16

Universal_Robots_ROS_cartesian_control_msgs

Message definition for Cartesian trajectories.
CMake
6
star
17

Universal_Robots_ROS_scaled_controllers

Repository containing the scaling_interface and the scaled trajectory controller.
C++
6
star
18

MyDaemonSwing

URCap sample that mainly demonstrates the principle of DaemonContribution and DaemonService
Java
5
star
19

MyToolbarJog

Example of using the toolbar to incrementally jog the robot in Cartesian space by sending urscript over the primary client interface
Java
4
star
20

Universal_Robots_Client_Library-release

ROS release repository for the client library
3
star
21

URCap-Samples

2
star
22

CustomUserInput

Demonstrates how to use different types of user inputs for URCap Drivers.
Java
2
star
23

PickOrPlaceSwing

URCap sample that mainly demonstrates the principle of ProgramModel, TreeNode and ProgramNodeFactory
Java
2
star
24

CreateFeatureSwing

Demonstrates how to contribute a Feature to PolyScope as well as how to store a Feature in the data model
Java
2
star
25

MyDaemonHTML

URCap sample that mainly demonstrates the principle of DaemonContribution and DaemonService
Java
1
star
26

PickOrPlaceHTML

URCap sample that mainly demonstrates the principle of ProgramModel, TreeNode and ProgramNodeFactory
Java
1
star
27

EllipseHTML

URCap sample that mainly demonstrates the principle of RobotPositionCallback, WaypointNodeConfig and PoseFactory
Java
1
star
28

LocalizationHTML

URCap sample that mainly demonstrates the principle of SystemSettings, Localization and Unit
Java
1
star
29

MoveUntilDetectionSwing

URCap sample to demonstrate the usage of configuration builders for Direction and Until program nodes.
Java
1
star
30

MyToolbar

URCap sample that mainly demonstrates the principle of SwingToolbarService and SwingToolbarContribution
Java
1
star
31

URScript_Examples

This repository contains different examples for various URScript implementations.
Python
1
star
32

GripAndReleaseSwing

Demonstrates how to use gripper devices in a template program node
Java
1
star
33

ScriptFunctionSwing

URCap sample that mainly demonstrates the principle of Function and FunctionModel
Java
1
star
34

AdvancedGripper

Demonstrates how to create a gripper driver contribution for a more advanced gripper
Java
1
star
35

UserInput

URCap sample that mainly demonstrates the principle of KeyboardInput and InputValidationFactory
Java
1
star
36

Universal_Robots_ROS2_Tutorials

Tutorials around the Universal Robots ROS 2 ecosystem
Python
1
star
37

ToolIOControlSwing

Demonstrates how to request and configure Tool IO exclusively from URCap
Java
1
star