|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |
Launch files
Messages
Services
Plugins
Recent questions tagged ur_client_library at Robotics Stack Exchange
|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |
Launch files
Messages
Services
Plugins
Recent questions tagged ur_client_library at Robotics Stack Exchange
|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |
Launch files
Messages
Services
Plugins
Recent questions tagged ur_client_library at Robotics Stack Exchange
|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |
Launch files
Messages
Services
Plugins
Recent questions tagged ur_client_library at Robotics Stack Exchange
|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |
Launch files
Messages
Services
Plugins
Recent questions tagged ur_client_library at Robotics Stack Exchange
|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |
Launch files
Messages
Services
Plugins
Recent questions tagged ur_client_library at Robotics Stack Exchange
|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |
Launch files
Messages
Services
Plugins
Recent questions tagged ur_client_library at Robotics Stack Exchange
|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |
Launch files
Messages
Services
Plugins
Recent questions tagged ur_client_library at Robotics Stack Exchange
|
ur_client_library package from ur_client_library repour_client_library |
ROS Distro
|
Package Summary
| Version | 2.9.0 |
| License | Apache-2.0 |
| Build type | CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/UniversalRobots/Universal_Robots_Client_Library.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2026-03-31 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Rune Søe-Knudsen
- Universal Robots A/S
Authors
- Thomas Timm Andersen
- Simon Rasmussen
- Felix Exner
- Lea Steffen
- Tristan Schnell
Universal Robots Client Library
A C++ library for accessing Universal Robots interfaces. With this library C++-based drivers can be implemented in order to create external applications leveraging the versatility of Universal Robots robotic manipulators.
The library has no external dependencies besides the standard C++ libraries such as ROS, or boost to make it easy to integrate and maintain. It also serves as the foundation for the ROS and ROS 2 drivers.
Requirements
- Polyscope (The software running on the robot controller) version 3.14.3 (for CB3-Series), or 5.9.4 (for e-Series) or 10.7.0 (For PolyScope X) or higher. If you use an older Polyscope version it is suggested to update your robot. If for some reason (please tell us in the issues why) you cannot upgrade your robot, please see the version compatibility table for a compatible tag.
- The library requires an implementation of POSIX threads such as the
pthreadlibrary
Build instructions
License
The majority of this library is licensed under the Apache-2.0 licensed. However, certain parts are licensed under different licenses:
- The queue used inside the communication structures is originally written by Cameron Desrochers and is released under the BSD-2-Clause license.
- The semaphore implementation used inside the queue implementation is written by Jeff Preshing and licensed under the zlib license
While the main LICENSE file in this repository contains the Apache-2.0 license used for the
majority of the work, the respective libraries of third-party components reside together with the
code imported from those third parties.
Library contents
Currently, this library contains the following components:
- Basic primary interface: The primary interface isn’t fully implemented at the current state and provides only basic functionality. See A word on the primary / secondary interface for further information about the primary interface.
- RTDE interface: The RTDE interface is fully supported by this library. See RTDEClient for further information on how to use this library as an RTDE client.
- Dashboard interface: The Dashboard server can be accessed directly from C++ through helper functions using this library.
- Custom motion streaming: This library was initially developed as part of the Universal Robots ROS driver. Therefore, it also contains a mechanism to do data streaming through a custom socket, e.g. to perform motion command streaming.
Example driver
In the examples subfolder you will find a minimal example of a running driver. It starts an
instance of the UrDriver class and prints the RTDE values read from the controller. To run it make
sure to
- have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs)
- run it from the package’s main folder (the one where this README.md file is stored), as for simplicity reasons it doesn’t use any sophisticated method to locate the required files.
Architecture
See Architecture documentation
A word on the primary / secondary interface
Currently, this library doesn’t support the primary interface very well, as the Universal Robots
ROS driver was built mainly upon
the RTDE interface. The PrimaryClient for directly accessing the primary
interface doesn’t support all features of the primary interface.
The comm::URStream class can be used to open a connection to the primary / secondary interface
and send data to it. The producer/consumer pipeline structure
can also be used together with the primary / secondary interface. However, package parsing isn’t
implemented for most packages currently. See the primary_pipeline
example on details how to set this up. Note that when running this
example, most packages will just be printed as their raw byte streams in a hex notation, as they
aren’t implemented in the library, yet.
A word on Real-Time scheduling
As mentioned above, for a clean operation it is quite critical that arriving RTDE messages are read
before the next message arrives. Due to this, both, the RTDE receive thread and the thread calling
getDataPackage() should be scheduled with real-time priority. See this guide
File truncated at 100 lines see the full file
Changelog for package ur_client_library
2.9.0 (2026-03-27)
- [RTDEClient] stop producer on destruction (#472)
- Primary Client power on improvements (#473)
- Move TCPServer disconnection log events from Info to Debug (#471)
- Refactor tool communication into standalone socat initialization script (#470)
- Contributors: Felix Exner, JohnN193, Rune Søe-Knudsen, Sergi Romero
2.8.0 (2026-03-20)
- Improve cleanup of trajectory buffer (#466)
- Fix documentation of direct_torque example (#467)
- Direct torque friction scales support (#445)
- If no new commands are received, halt (#440)
- Add check to make sure that program name and save path is specified w… (#447) …hen downloading program.
- Update gtest to fix MacOS build warnings (#464)
- Fix windows compile warnings (#451) Fix windows compile warnings and from now all warnings are treated as errors.
- Fix setGravity comments to be correct directionality (#462)
- Robustify TCPServer implementation for thread safety and windows support (#458)
- Add implementation of creating ExampleRobotWrapper with recipe vectors (#456)
- Rename endian.h to portable_endian.h (#442)
- [primary] Print a warning on additional data in RobotState submessages (#460)
- Replace TEST with TEST_F to ensure teardown (#459)
- [start_ursim.sh] Do not remove trailing "e" for PolyScope X (#461)
- Add doxygen to new dashboard X calls (#455)
- Improve socket connection robustness in external_control.urscript (#453)
- Fix filesystem linking on GCC 8 and add RHEL CI workflow (#454)
- Fix flakyness in ReverseInterfaceTest.handle_program_state (#430)
- Added ScriptCommandInterface command setTcpOffset (#444)
- Refactor rtde parsing for RT and performance improvements (#419)
- Contributors: AdamPettinger, David Karlsböck, Felix Exner, Rune Søe-Knudsen, Sergi Romero, URJala, dependabot[bot]
2.7.0 (2026-02-18)
- Add more RobotAPI commands to PolyScope X Dashboard Client (#435)
- [RTDE client] Test reconnect (#433)
- [TCPServer] Close all filedescriptors on shutdown (#432)
- [primary interface] More robot messages (#429)
- Fix instruction executor idle (#424)
- [primary interface] Fix parsing of primary messages (#426)
- [primary interface] Add KeyMessage parsing (#428)
- Add test for VersionMessage (#427)
- Add two new RTDE fields
(#420)
Add fields
- target_gravity
- target_base_acceleration
- Allow updating robot gravity (#415)
- Do not disconnect dashboard_client on read timeout (#414)
- Added support for std::vector strings in UrDriver (#408)
- Contributors: AdamPettinger, Felix Exner, Pablo David Aranda Rodriguez, dependabot[bot]
2.6.1 (2025-12-01)
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| ur_calibration | |
| ur_robot_driver |