From f28fd23a39c93d392ba4e5a18feb938fd4cc8eec Mon Sep 17 00:00:00 2001 From: Felix Exner Date: Fri, 4 Apr 2025 14:39:19 +0200 Subject: [PATCH 1/8] WIP: Improve landing page --- doc/ros2_controller_vs_driver.rst | 30 ++++++++++++++++++++++++++++++ index.rst | 15 ++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 doc/ros2_controller_vs_driver.rst diff --git a/doc/ros2_controller_vs_driver.rst b/doc/ros2_controller_vs_driver.rst new file mode 100644 index 0000000..fa149df --- /dev/null +++ b/doc/ros2_controller_vs_driver.rst @@ -0,0 +1,30 @@ +.. _ros2_controller_vs_driver: + +ROS 2 integration paths +======================= + +There are different paths to use a Universal Robots arm with ROS 2: + +1. Starting with PolyScope X v10.7.0 the robots have builtin ROS 2 support that allows some amount + of interaction with the robot without the need of any ROS 2 driver. In particular, the robot + publishes a lot of status information and offers services for example to control the robot's + I/O ports. See the `Topics and Services overview + `_ for more + information. + + .. note:: + + The builtin ROS 2 support will only be compatible with the ROS distribution running on the + robot. For example, PolyScope 10.7.0 is running ROS 2 Humble. It should not be used with + any other distribution. + +2. Starting with PolyScope X v10.7.0 there is basic URScript support for ROS 2. This allows + publishing to and subscribing from ROS 2 topics directly in URScript as well as calling ROS 2 + services and actions from URScript. See `Basic Usage in URScript + `_ + for details on that. +3. Using the :ref:`ur_robot_driver` which is a ROS 2 driver that offers full `ros2_control + `_ compatibility. This allows visualizing the robot's state in RViz and + control its motions through ROS 2. It works with CB3, e-Series (PolyScope 5) and PolyScope X robots. + + The ROS 2 driver uses the :ref:`ur_client_library` to communicate with the robot. diff --git a/index.rst b/index.rst index 2d60bd2..bf894d8 100644 --- a/index.rst +++ b/index.rst @@ -1,9 +1,18 @@ .. _documentation_home: -Welcome to the Universal Robots ROS 2 documentation! -==================================================== +Welcome to the Universal Robots ROS 2 driver documentation! +=========================================================== -This repositorycontains documentation and ROS 2 packages for Universal Robots. +This documentation covers the ROS 2 packages for Universal Robots robots and the standalone Universal Robots +Client Library. + +Here comes some introduction to the ROS 2 driver. With images + +.. note:: + There is also builtin ROS 2 support for PolyScope X robots, see the `PolyScope X ROS 2 documentation `_ and / or :ref:`ros2_controller_vs_driver` for details. + +Table of Contents +----------------- .. toctree:: :titlesonly: From db17c5a33f9f570a60e0622463e8a47ed41aa8b2 Mon Sep 17 00:00:00 2001 From: Felix Exner Date: Mon, 7 Apr 2025 16:42:47 +0200 Subject: [PATCH 2/8] First draft of landing page --- _static/images/ros2_driver.jpeg | Bin 0 -> 81346 bytes conf.py | 14 +++++++------- index.rst | 16 +++++++++++++--- 3 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 _static/images/ros2_driver.jpeg diff --git a/_static/images/ros2_driver.jpeg b/_static/images/ros2_driver.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..805206868245e87908a07d4539521e6adf5d45f8 GIT binary patch literal 81346 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 literal 0 HcmV?d00001 diff --git a/conf.py b/conf.py index 587cb69..40c3600 100644 --- a/conf.py +++ b/conf.py @@ -19,7 +19,7 @@ # -- Project information ----------------------------------------------------- -project = "Universal Robots ROS 2 Documentation" +project = "Universal Robots ROS 2 Driver Documentation" copyright = "2024, Universal Robots A/S" author = "Universal Robots A/S" @@ -141,8 +141,8 @@ latex_documents = [ ( master_doc, - "ur_documentation.tex", - "ur\\_documentation Documentation", + "ur_ros2_driver_documentation.tex", + "UR ROS 2 Driver Documentation", "Universal Robots A/S", "manual", ), @@ -153,7 +153,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). -man_pages = [(master_doc, "ur_documentation", "ur_documentation Documentation", [author], 1)] +man_pages = [(master_doc, "ur_ros2_driverdocumentation", "UR ROS 2 Driver Documentation", [author], 1)] # -- Options for Texinfo output ---------------------------------------------- @@ -164,7 +164,7 @@ texinfo_documents = [ ( master_doc, - "ur_documentation", + "ur_ros2_driver_documentation", "ur_documentation Documentation", author, "ur_documentation", @@ -203,7 +203,7 @@ html_context = { "display_github": True, "github_user": "UniversalRobots", - "github_repo": "Universal_Robots_ROS2_Documentation", + "github_repo": "Universal_Robots_ROS_Documentation", "github_version": repos_file_branch + "/", "conf_py_path": "/", "source_suffix": source_suffix, @@ -215,4 +215,4 @@ 'css/ur_theme.css', ] -github_url = "https://github.com/UniversalRobots/Universal_Robots_ROS2_Documentation" +github_url = "https://github.com/UniversalRobots/Universal_Robots_ROS_Documentation" diff --git a/index.rst b/index.rst index bf894d8..32b613f 100644 --- a/index.rst +++ b/index.rst @@ -3,10 +3,19 @@ Welcome to the Universal Robots ROS 2 driver documentation! =========================================================== -This documentation covers the ROS 2 packages for Universal Robots robots and the standalone Universal Robots -Client Library. -Here comes some introduction to the ROS 2 driver. With images +.. image:: _static/images/ros2_driver.jpeg + :alt: UR ROS 2 driver + :align: center + :width: 80% + + +This documentation covers everything around the ROS 2 driver packages for Universal Robots +manipulators and the standalone Universal Robots Client Library. + +With those packages it is possible to control a Universal Robots arm from an external application +either directly using a C++ API (see :ref:`ur_client_library`) or using ROS 2 (see :ref:`ur_robot_driver`). + .. note:: There is also builtin ROS 2 support for PolyScope X robots, see the `PolyScope X ROS 2 documentation `_ and / or :ref:`ros2_controller_vs_driver` for details. @@ -27,3 +36,4 @@ Table of Contents Tutorial examples doc/migration_notes.rst doc/build_status + doc/ros2_controller_vs_driver From 9097f92db7c54b157cc76d444333fa557ed83be5 Mon Sep 17 00:00:00 2001 From: Felix Exner Date: Tue, 8 Apr 2025 19:05:33 +0200 Subject: [PATCH 3/8] Restructure integration page --- doc/ros2_controller_vs_driver.rst | 45 ++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/doc/ros2_controller_vs_driver.rst b/doc/ros2_controller_vs_driver.rst index fa149df..2584107 100644 --- a/doc/ros2_controller_vs_driver.rst +++ b/doc/ros2_controller_vs_driver.rst @@ -3,7 +3,10 @@ ROS 2 integration paths ======================= -There are different paths to use a Universal Robots arm with ROS 2: +There are different paths to use a Universal Robots arm with ROS 2. + +ROS 2 on the robot +------------------ 1. Starting with PolyScope X v10.7.0 the robots have builtin ROS 2 support that allows some amount of interaction with the robot without the need of any ROS 2 driver. In particular, the robot @@ -12,19 +15,41 @@ There are different paths to use a Universal Robots arm with ROS 2: `_ for more information. - .. note:: - - The builtin ROS 2 support will only be compatible with the ROS distribution running on the - robot. For example, PolyScope 10.7.0 is running ROS 2 Humble. It should not be used with - any other distribution. 2. Starting with PolyScope X v10.7.0 there is basic URScript support for ROS 2. This allows publishing to and subscribing from ROS 2 topics directly in URScript as well as calling ROS 2 services and actions from URScript. See `Basic Usage in URScript `_ for details on that. -3. Using the :ref:`ur_robot_driver` which is a ROS 2 driver that offers full `ros2_control - `_ compatibility. This allows visualizing the robot's state in RViz and - control its motions through ROS 2. It works with CB3, e-Series (PolyScope 5) and PolyScope X robots. - The ROS 2 driver uses the :ref:`ur_client_library` to communicate with the robot. +.. note:: + + The builtin ROS 2 support will only be compatible with the ROS distribution running on the + robot. For example, PolyScope 10.7.0 is running ROS 2 Humble. It should not be used with + any other distribution. + +Control the robot from an external ROS 2 application +---------------------------------------------------- + +Using the :ref:`ur_robot_driver` which is a ROS 2 driver that offers full `ros2_control +`_ compatibility. This allows visualizing the robot's state in RViz and +control its motions through ROS 2. It works with CB3, e-Series (PolyScope 5) and PolyScope X robots. + +Use the ROS 2 driver to build your own application on the ROS framework leveraging available +drivers for other hardware components, sensor integration and ready-to-use software functionalities +such as collision-aware path-planning. + +The ROS 2 driver uses the :ref:`ur_client_library` to communicate with the robot. + +Build your own external application using the C++ library +--------------------------------------------------------- + +With the standalone C++ library ":ref:`ur_client_library`" you can control a UR robot from a remote +application. It offers a lot of the functionality that traditionally the robot's teach pendant +would be used for. This includes + +- Controlling the robot's power state +- Controlling the robot's motion +- Controlling the robot's I/O ports +- Access to low-level interfaces such as the Primary Interface, Dashboard Interface and the + Realtime Data Exchange (RTDE). From 35cfa94aed94c6756da570f3c085ddf88e10b572 Mon Sep 17 00:00:00 2001 From: Felix Exner Date: Tue, 8 Apr 2025 19:17:21 +0200 Subject: [PATCH 4/8] More text on landing page --- index.rst | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/index.rst b/index.rst index 32b613f..72a3c5f 100644 --- a/index.rst +++ b/index.rst @@ -6,16 +6,34 @@ Welcome to the Universal Robots ROS 2 driver documentation! .. image:: _static/images/ros2_driver.jpeg :alt: UR ROS 2 driver - :align: center - :width: 80% - + :align: right + :width: 600px -This documentation covers everything around the ROS 2 driver packages for Universal Robots -manipulators and the standalone Universal Robots Client Library. + +This documentation covers everything around the ROS (Robot Operating System) 2 driver packages for Universal Robots +manipulators and the standalone Universal Robots Client Library (C++). With those packages it is possible to control a Universal Robots arm from an external application either directly using a C++ API (see :ref:`ur_client_library`) or using ROS 2 (see :ref:`ur_robot_driver`). +This allows developing robot applications where one or more UR robots are a part of the complete +application. Some key use cases are: + +- **External Monitoring and Control**: It allows you to monitor and control UR robots from an + external application. This can be useful for tasks like external vision systems for part + detection or external user interfaces to control robot programs. + +- **Ease of Use**: The *ur_client_library* has minimal external dependencies, primarily relying on standard + C++ libraries, making it straightforward to integrate and maintain. + +- **Integration with ROS / ROS 2**: The *ur_client_library* serves as the foundation for the ROS 2 + driver, making it easier to integrate UR robots into ROS-based systems. ROS supports multiple + programming languages, primarily C++ and Python, making it easier to integrate with other + systems and tools. It also allows for communication between different nodes, enabling complex + robotic systems. The Universal Robots ROS packages offer everything from Visualization, over + simulation up to controlling a real robot bridging the great work of the ROS community with + Universal Robots manipulators. + .. note:: There is also builtin ROS 2 support for PolyScope X robots, see the `PolyScope X ROS 2 documentation `_ and / or :ref:`ros2_controller_vs_driver` for details. From 253c320c4949cd24a30cb357782de710ee7dfa6d Mon Sep 17 00:00:00 2001 From: Felix Exner Date: Tue, 8 Apr 2025 19:19:30 +0200 Subject: [PATCH 5/8] Add an image to the integration page --- doc/ros2_controller_vs_driver.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/ros2_controller_vs_driver.rst b/doc/ros2_controller_vs_driver.rst index 2584107..7faf20d 100644 --- a/doc/ros2_controller_vs_driver.rst +++ b/doc/ros2_controller_vs_driver.rst @@ -31,6 +31,11 @@ ROS 2 on the robot Control the robot from an external ROS 2 application ---------------------------------------------------- +.. image:: ur_tutorials/my_robot_cell/doc/view_workspace.png + :alt: Visualizing a robot workspace using ROS 2 + :align: right + :width: 600px + Using the :ref:`ur_robot_driver` which is a ROS 2 driver that offers full `ros2_control `_ compatibility. This allows visualizing the robot's state in RViz and control its motions through ROS 2. It works with CB3, e-Series (PolyScope 5) and PolyScope X robots. From f65a5173db6df77cdb8612adec87bea035eef14f Mon Sep 17 00:00:00 2001 From: Felix Exner Date: Wed, 16 Apr 2025 06:31:42 +0200 Subject: [PATCH 6/8] Add an image for PolyScopeX ROS 2 integration --- _static/images/ros2_urscript.png | Bin 0 -> 34695 bytes doc/ros2_controller_vs_driver.rst | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 _static/images/ros2_urscript.png diff --git a/_static/images/ros2_urscript.png b/_static/images/ros2_urscript.png new file mode 100644 index 0000000000000000000000000000000000000000..56c0a425fca1055f2f5ebe649a7cf3774774c741 GIT binary patch literal 34695 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%0A2_3rOi43sh(!fi;|?h^3l{#N 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 n5@6yH2#VMRgTe~DWM4fsrZEC literal 0 HcmV?d00001 diff --git a/doc/ros2_controller_vs_driver.rst b/doc/ros2_controller_vs_driver.rst index 7faf20d..038164e 100644 --- a/doc/ros2_controller_vs_driver.rst +++ b/doc/ros2_controller_vs_driver.rst @@ -8,6 +8,11 @@ There are different paths to use a Universal Robots arm with ROS 2. ROS 2 on the robot ------------------ +.. image:: /_static/images/ros2_urscript.png + :alt: URScript for a subscruber + :align: right + :width: 400px + 1. Starting with PolyScope X v10.7.0 the robots have builtin ROS 2 support that allows some amount of interaction with the robot without the need of any ROS 2 driver. In particular, the robot publishes a lot of status information and offers services for example to control the robot's @@ -34,7 +39,7 @@ Control the robot from an external ROS 2 application .. image:: ur_tutorials/my_robot_cell/doc/view_workspace.png :alt: Visualizing a robot workspace using ROS 2 :align: right - :width: 600px + :width: 400px Using the :ref:`ur_robot_driver` which is a ROS 2 driver that offers full `ros2_control `_ compatibility. This allows visualizing the robot's state in RViz and From f87662324c1dad16794fa45cef81552b647fcd26 Mon Sep 17 00:00:00 2001 From: Felix Exner Date: Thu, 17 Apr 2025 09:12:26 +0200 Subject: [PATCH 7/8] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rune Søe-Knudsen <41109954+urrsk@users.noreply.github.com> --- doc/ros2_controller_vs_driver.rst | 11 ++++------- index.rst | 6 +++--- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/doc/ros2_controller_vs_driver.rst b/doc/ros2_controller_vs_driver.rst index 038164e..2a8c29c 100644 --- a/doc/ros2_controller_vs_driver.rst +++ b/doc/ros2_controller_vs_driver.rst @@ -41,15 +41,12 @@ Control the robot from an external ROS 2 application :align: right :width: 400px -Using the :ref:`ur_robot_driver` which is a ROS 2 driver that offers full `ros2_control -`_ compatibility. This allows visualizing the robot's state in RViz and -control its motions through ROS 2. It works with CB3, e-Series (PolyScope 5) and PolyScope X robots. +To control your robot using ROS 2, you can utilize the :ref:`ur_robot_driver`, an Open-Source ROS 2 driver that is maintained by Universal Robots and offers full compatibility with `ros2_control +`_. This driver allows you to visualize the robot's state in RViz and control its motions through ROS 2. It supports CB3, e-Series, and PolyScope X robots. -Use the ROS 2 driver to build your own application on the ROS framework leveraging available -drivers for other hardware components, sensor integration and ready-to-use software functionalities -such as collision-aware path-planning. +By leveraging the ROS 2 driver, you can build your own application on the ROS framework. This includes integrating drivers for other hardware components, incorporating sensors, and utilizing ready-to-use software functionalities such as collision-aware path planning. -The ROS 2 driver uses the :ref:`ur_client_library` to communicate with the robot. +The ROS 2 driver communicates with the robot using the :ref:`ur_client_library`. Build your own external application using the C++ library --------------------------------------------------------- diff --git a/index.rst b/index.rst index 72a3c5f..7138d94 100644 --- a/index.rst +++ b/index.rst @@ -1,6 +1,6 @@ .. _documentation_home: -Welcome to the Universal Robots ROS 2 driver documentation! +Welcome to the Universal Robots ROS 2 driver documentation =========================================================== @@ -10,8 +10,8 @@ Welcome to the Universal Robots ROS 2 driver documentation! :width: 600px -This documentation covers everything around the ROS (Robot Operating System) 2 driver packages for Universal Robots -manipulators and the standalone Universal Robots Client Library (C++). +This documentation covers everything around the Open-Source ROS (Robot Operating System) 2 driver packages +for Universal Robots manipulators and the standalone Universal Robots Client Library (C++). With those packages it is possible to control a Universal Robots arm from an external application either directly using a C++ API (see :ref:`ur_client_library`) or using ROS 2 (see :ref:`ur_robot_driver`). From 965e6c76320265c14a662973f918c830ad92db36 Mon Sep 17 00:00:00 2001 From: Felix Exner Date: Thu, 17 Apr 2025 09:13:22 +0200 Subject: [PATCH 8/8] Fix formatting --- index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.rst b/index.rst index 7138d94..f7f550e 100644 --- a/index.rst +++ b/index.rst @@ -1,7 +1,7 @@ .. _documentation_home: Welcome to the Universal Robots ROS 2 driver documentation -=========================================================== +========================================================== .. image:: _static/images/ros2_driver.jpeg