Universal Robots
The Danish cobot maker whose arms are the default in labs and light industry. Closed controller with open real-time interfaces and a maintained BSD-3 ROS 2 driver.
| Organisation | Universal Robots A/S (Odense, Denmark; part of Teradyne) |
|---|---|
| Website | www.universal-robots.com/ |
| Licensing | Proprietary controller software (PolyScope 5 and PolyScope X); ROS 2 driver under BSD-3-Clause; Universal_Robots_Client_Library under Apache-2.0 |
| Pricing | Sold through sales and distributors; no public list price on the maker's site at the time of writing |
| Updated | 14 Nov 2026 |
Products and offerings #
| Name | Kind | Positioning |
|---|---|---|
| UR5e | cobot | 6-DoF cobot, 5 kg payload, 850 mm reach, ±0.03 mm repeatability |
| UR17g-1300 | cobot | 6-DoF cobot, 17.5 kg maximum payload, 1300 mm reach, ±0.05 mm repeatability |
| CB7 and PolyScope X | controller | Gen 7 control box and robot software, launched September 2026 |
| Universal_Robots_ROS2_Driver | library | Maker-maintained ros2_control driver for CB3, e-Series, UR Series and PolyScope X robots |
Who they are
This hub is for anyone buying, programming or integrating a UR arm, which in practice means most research labs and many small factories. Universal Robots was founded in 2005 in Odense, Denmark, by Esben Østergaard, Kasper Støy and Kristian Kassow, according to the 2015 acquisition announcement. Teradyne agreed to buy it that year for USD 285 million net of cash, plus up to USD 65 million in performance payments. Its arms are sold as cobots, meaning arms designed to work near people once a risk assessment allows it.
The range now comes in three families. The e-Series covers the lighter arms such as the UR5e, the UR Series covers higher payloads, and the g-Series arrived with the Gen 7 platform at IMTS on 14 September 2026, according to The Robot Report. The first g-Series arms are the UR10g-1750, UR17g-1300 and UR18g-950, where the suffix is the reach in millimetres.
Tooling and APIs
The UR5e (6-DoF cobot, 5 kg payload, 850 mm reach, ±0.03 mm repeatability per ISO 9283) has a 20.7 kg arm, according to the UR5e technical specifications. The UR17g-1300 (6-DoF cobot, 17.5 kg maximum payload, 1300 mm reach, ±0.05 mm repeatability) weighs 43.4 kg with cable and has a force-torque sensor in the tool flange, according to its October 2026 datasheet. Both documents list 500 Hz as the system update or control loop frequency. The robot reference lists the UR5e alongside other arms.
On the controller, you program in PolyScope (a teach-pendant GUI) or URScript, the robot’s own scripting language. Gen 7 introduces the CB7 controller and runs PolyScope X. External PCs talk to the controller through documented TCP interfaces, most importantly RTDE (Real-Time Data Exchange) for streaming state and setpoints. Plugins for the pendant are called URCaps.
The ROS 2 driver is maintained by Universal Robots at UniversalRobots/Universal_Robots_ROS2_Driver under BSD-3-Clause. It has branches for Humble, Jazzy, Kilted, Lyrical and Rolling, with binaries on the ROS build farm. It sits on the Apache-2.0 Universal_Robots_Client_Library and works with CB3, PolyScope 5 and PolyScope X robots from 3 kg to 30 kg payload, according to its README. It implements ros2_control, so MoveIt 2 and the standard trajectory controllers work directly. An external_control URCap lets a pendant program hand control to ROS and take it back.
Pricing is by quote. The maker’s site offers “Contact Sales” and shows no list price.
Pain points: every arm leaves the factory with its own kinematic calibration. The driver documentation warns that if you skip extracting it with ur_calibration, end-effector positions can be off by centimetres. Network setup (static IPs, the robot reaching back to the ROS PC) is the most common first-day failure.
Migration notes
- Kinematics. The default link lengths in ur_description are nominal, and the xacro itself warns that forward kinematics will not match the teach pendant without the robot’s own calibration file. Generate the URDF from the extracted calibration, not the defaults. See the DH and PoE cheat sheet for the conventions.
- Frames. The description defines
base_linkaligned with REP 103 (x forward) andbasealigned with the controller’s Base coordinates, rotated by π rad about z from each other. Poses copied from the pendant are inbase, so x and y change sign if you read them asbase_link. - Units. URScript poses are
p[x, y, z, rx, ry, rz]with position in metres and orientation as an axis-angle rotation vector in radians, according to UR support. They are not quaternions or Euler angles, so convert explicitly at the boundary. - Jazzy to Lyrical. The driver’s Lyrical migration notes say
scaled_joint_trajectory_controllerwas removed because speed scaling moved upstream intojoint_trajectory_controller. Action clients must switch fromscaled_joint_trajectory_controller/follow_joint_trajectorytojoint_trajectory_controller/follow_joint_trajectory. - Effort values. The latest driver reports joint torques from RTDE as effort by default. This needs PolyScope 5.23.0 or 10.11.0 or newer. On older software, or on CB3, set
use_currents_as_effortsto get motor currents as before.
Watch for
- Closed controller. Safety configuration, motion planning on the pendant and the real-time loop live in the controller. You stream setpoints to it. You do not replace it.
- Safety is a system property. A cobot is not safe by itself. The cell needs a risk assessment, and the safety and standards topic explains which standards apply.
- Software versions gate features. Driver features depend on the PolyScope version on the robot. Record it for each arm in a mixed fleet.
- Mesh terms. The ur_description README says the meshes for newer models (UR15, UR18, UR20, UR30, UR8 Long and the g-Series) fall under UR’s terms for Graphical Documentation rather than the repository licence. Check them before you ship the meshes in a product.
- Three families on sale. The g-Series arms use the new CB7 controller. Check which family a quote is for before you design around a feature.