From d999fa69075a678cfe5338e09e05ed1b377d0ddb Mon Sep 17 00:00:00 2001 From: Yannick Goumaz <61198661+ygoumaz@users.noreply.github.com> Date: Fri, 17 Feb 2023 10:24:59 +0100 Subject: [PATCH] Sync master with develop (#630) * Enforce clang format (#599) * Apply clangformat * Add test sources * Test pep8 * Fix workflow * Fix workflow * Fix script * pep8 fixes * Cpp fixes * Remove ament pep257 & flake8 * Update urdf2webots submodule * Revert "Update urdf2webots submodule" This reverts commit fa45543bd5d0e94de462342e9b192262baa6aab5. * Revert "Remove ament pep257 & flake8" This reverts commit 92df8a316d916d1e260b482c87dfcc3bebd35839. * Revert "Cpp fixes" This reverts commit c3a497cff51c6dd7e4f7da791e2515e9f6b578b2. * Revert "pep8 fixes" This reverts commit 141b0c85aaa55f942734cd616a8b636d5a7dd963. * Revert "Revert "pep8 fixes"" This reverts commit ad007a456bc8739f48b14dc2220f1716f909d74d. * Test * Revert "Test" This reverts commit 25934ef9d581bdecebc3eb4635d2c5cb571b01a3. * Revert "Revert "Cpp fixes"" This reverts commit 8462d81851bf866b3b742a4313e4c4e52b9deeb5. * Revert "Revert "Remove ament pep257 & flake8"" This reverts commit c689352da0ba037b7ab794434c7428259628a862. * Revert "Revert "Update urdf2webots submodule"" This reverts commit e2ed2b3efb03de99594277bc0c4c58782112697f. * Order fixes * Skip submodule tests * Finalize * Sync submodule (#602) Co-authored-by: ad-daniel * Sync submodule (#606) Co-authored-by: ad-daniel * Sync submodule (#609) Co-authored-by: ad-daniel * Sync submodule (#613) Co-authored-by: ad-daniel * Fix macOS local assets with relative URLs (#612) * Add macOS copy * remove host * Update changelogs * Optional Ros2 Supervisor (#616) * webots launcher creates supervisor if needed * Update launch files * minor fix * Update changelogs * Fix URDF spawner on macOS and WSL (#610) * add wsl and macos urdfpath edit * Better path manipulation in supervisor * fix package names in yalm and xacro * Fix resources copy and prefix * Fix directory split * Update wsl * fix wsl * Update changelogs * cleanup * fix sources * Update webots_ros2_driver/webots_ros2_driver/ros2_supervisor.py Co-authored-by: ad-daniel <44834743+ad-daniel@users.noreply.github.com> * Update ros2_supervisor.py * clear trailing whitespace * Update changelog --------- Co-authored-by: ad-daniel <44834743+ad-daniel@users.noreply.github.com> * update changelogs and version (#620) * Sync submodule (#623) Co-authored-by: ad-daniel * adding possibility to select stream type (#625) * adding possibility to select stream type * Update webots_ros2_driver/webots_ros2_driver/webots_launcher.py Co-authored-by: Olivier Michel --------- Co-authored-by: Sebastian Ohl Co-authored-by: Olivier Michel * Fix tests (#633) * fix pep8 * fix pep8 --------- Co-authored-by: ad-daniel <44834743+ad-daniel@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: ad-daniel Co-authored-by: Sebastian Ohl <45941992+sebastianohl@users.noreply.github.com> Co-authored-by: Sebastian Ohl Co-authored-by: Olivier Michel --- webots_ros2/CHANGELOG.rst | 5 +- webots_ros2/package.xml | 2 +- webots_ros2/setup.py | 2 +- webots_ros2_control/package.xml | 2 +- webots_ros2_driver/CHANGELOG.rst | 8 +- webots_ros2_driver/package.xml | 2 +- .../webots_ros2_driver/ros2_supervisor.py | 78 +++++++++++++++++-- .../webots_ros2_driver/urdf_spawner.py | 28 ++----- .../webots_ros2_driver/webots_launcher.py | 32 +++++--- webots_ros2_epuck/CHANGELOG.rst | 4 + webots_ros2_epuck/launch/robot_launch.py | 11 ++- webots_ros2_epuck/package.xml | 2 +- webots_ros2_epuck/setup.py | 2 +- webots_ros2_importer/package.xml | 2 +- webots_ros2_importer/setup.py | 2 +- webots_ros2_mavic/CHANGELOG.rst | 4 + webots_ros2_mavic/launch/robot_launch.py | 11 ++- webots_ros2_mavic/package.xml | 2 +- webots_ros2_mavic/setup.py | 2 +- webots_ros2_msgs/package.xml | 2 +- webots_ros2_tesla/CHANGELOG.rst | 4 + webots_ros2_tesla/launch/robot_launch.py | 11 ++- webots_ros2_tesla/package.xml | 2 +- webots_ros2_tesla/setup.py | 2 +- webots_ros2_tests/package.xml | 2 +- webots_ros2_tests/setup.py | 2 +- webots_ros2_tests/test/test_system_driver.py | 13 +--- webots_ros2_tiago/CHANGELOG.rst | 4 + webots_ros2_tiago/launch/robot_launch.py | 11 ++- webots_ros2_tiago/package.xml | 2 +- webots_ros2_tiago/setup.py | 2 +- webots_ros2_turtlebot/CHANGELOG.rst | 4 + webots_ros2_turtlebot/launch/robot_launch.py | 11 ++- webots_ros2_turtlebot/package.xml | 2 +- webots_ros2_turtlebot/setup.py | 2 +- webots_ros2_universal_robot/CHANGELOG.rst | 5 ++ .../launch/multirobot_launch.py | 12 ++- .../launch/robot_launch/robot_world_launch.py | 10 +-- webots_ros2_universal_robot/package.xml | 2 +- .../config/ur5e/visual_parameters.yaml | 28 +++---- ...robotiq-3f-gripper_articulated_macro.xacro | 4 +- ...-3f-gripper_finger_articulated_macro.xacro | 16 ++-- webots_ros2_universal_robot/setup.py | 2 +- 43 files changed, 219 insertions(+), 137 deletions(-) mode change 100755 => 100644 webots_ros2_driver/webots_ros2_driver/ros2_supervisor.py diff --git a/webots_ros2/CHANGELOG.rst b/webots_ros2/CHANGELOG.rst index 59dfee7a9..11ddcb690 100644 --- a/webots_ros2/CHANGELOG.rst +++ b/webots_ros2/CHANGELOG.rst @@ -2,9 +2,12 @@ Changelog for package webots_ros2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -2023.0.2 (2023-XX-XX) +2023.0.2 (2023-02-07) ------------------ * Drop support for Galactic. +* Fixed the spawn of URDF robots in WSL and macOS when using full path. +* Fixed relative assets in macOS. +* Ros2Supervisor is now optional. 2023.0.1 (2023-01-05) ------------------ diff --git a/webots_ros2/package.xml b/webots_ros2/package.xml index d46ee8a86..d85c6dafd 100644 --- a/webots_ros2/package.xml +++ b/webots_ros2/package.xml @@ -2,7 +2,7 @@ webots_ros2 - 2023.0.1 + 2023.0.2 Interface between Webots and ROS2 Cyberbotics diff --git a/webots_ros2/setup.py b/webots_ros2/setup.py index 4a9ac3315..c2c9faef8 100644 --- a/webots_ros2/setup.py +++ b/webots_ros2/setup.py @@ -6,7 +6,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=[package_name], data_files=[ ('share/' + package_name, ['package.xml']), diff --git a/webots_ros2_control/package.xml b/webots_ros2_control/package.xml index 092031d3e..3a0763df0 100644 --- a/webots_ros2_control/package.xml +++ b/webots_ros2_control/package.xml @@ -2,7 +2,7 @@ webots_ros2_control - 2023.0.1 + 2023.0.2 ros2_control plugin for Webots Cyberbotics http://wiki.ros.org/webots_ros2 diff --git a/webots_ros2_driver/CHANGELOG.rst b/webots_ros2_driver/CHANGELOG.rst index 3e24b53b3..34e65bb61 100644 --- a/webots_ros2_driver/CHANGELOG.rst +++ b/webots_ros2_driver/CHANGELOG.rst @@ -2,9 +2,15 @@ Changelog for package webots_ros2_driver ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2023.0.2 (2023-02-07) +------------------ +* Fixed the spawn of URDF robots in WSL and macOS when using full path. +* Fixed relative assets in macOS. +* Added Ros2Supervisor creation. + 2023.0.1 (2023-01-05) ------------------ -* Fix relative assets in WSL. +* Fixed relative assets in WSL. 2023.0.0 (2022-11-30) ------------------ diff --git a/webots_ros2_driver/package.xml b/webots_ros2_driver/package.xml index b8b5d7279..788dc245d 100644 --- a/webots_ros2_driver/package.xml +++ b/webots_ros2_driver/package.xml @@ -1,7 +1,7 @@ webots_ros2_driver - 2023.0.1 + 2023.0.2 Implementation of the Webots - ROS 2 interface Cyberbotics Apache License 2.0 diff --git a/webots_ros2_driver/webots_ros2_driver/ros2_supervisor.py b/webots_ros2_driver/webots_ros2_driver/ros2_supervisor.py old mode 100755 new mode 100644 index 94be9397c..f0cf94a9b --- a/webots_ros2_driver/webots_ros2_driver/ros2_supervisor.py +++ b/webots_ros2_driver/webots_ros2_driver/ros2_supervisor.py @@ -19,8 +19,10 @@ import os -import sys import re +import shutil +import subprocess +import sys import rclpy import vehicle @@ -32,6 +34,7 @@ from rclpy.qos import qos_profile_services_default from rosgraph_msgs.msg import Clock from std_msgs.msg import String +from webots_ros2_driver.utils import is_wsl, has_shared_folder, container_shared_folder, host_shared_folder sys.path.insert(1, os.path.join(os.path.dirname(webots_ros2_importer.__file__), 'urdf2webots')) from urdf2webots.importer import convertUrdfFile, convertUrdfContent # noqa from webots_ros2_msgs.srv import SpawnUrdfRobot, SpawnNodeFromString # noqa @@ -87,13 +90,78 @@ def __spawn_urdf_robot_callback(self, request, response): box_collision = robot.box_collision if robot.box_collision else False init_pos = robot.init_pos if robot.init_pos else None - # Choose the conversion according to the input + # Choose the conversion according to the input and platform if robot.urdf_path: - robot_string = convertUrdfFile(input=robot.urdf_path, robotName=robot_name, normal=normal, - boxCollision=box_collision, initTranslation=robot_translation, - initRotation=robot_rotation, initPos=init_pos) + if has_shared_folder() or is_wsl(): + # Check that the file exists and is an URDF + if not os.path.isfile(robot.urdf_path): + sys.exit('Input file "%s" does not exist.' % robot.urdf_path) + if not robot.urdf_path.endswith('.urdf'): + sys.exit('"%s" is not a URDF file.' % robot.urdf_path) + + # Read the content of the URDF + with open(robot.urdf_path, 'r') as file: + urdfContent = file.read() + if urdfContent is None: + sys.exit('Could not read the URDF file.') + + # Get the package name and parent resource directory from URDF path + split_path = robot.urdf_path.split(os.path.sep) + for i, folder in (list(enumerate(split_path))): + if folder == "share": + package_dir = os.path.sep.join(split_path[:i + 2]) + resource_dir = os.path.sep.join(split_path[:i + 3]) + break + # On macOS, the resources are copied to shared_folder/package_name/resource_folder + # The path prefix is updated to the path of the shared folder + if has_shared_folder(): + shared_package_dir = os.path.join(container_shared_folder(), os.path.basename(package_dir)) + shared_resource_dir = os.path.join(shared_package_dir, os.path.basename(resource_dir)) + if (not os.path.isdir(shared_package_dir)): + os.mkdir(shared_package_dir) + if (not os.path.isdir(shared_resource_dir)): + shutil.copytree(resource_dir, shared_resource_dir) + relative_path_prefix = os.path.join(host_shared_folder(), os.path.basename(package_dir), + os.path.basename(resource_dir)) + # In WSL, the prefix must be converted to WSL path to work in Webots running on native Windows + if is_wsl(): + relative_path_prefix = resource_dir + command = ['wslpath', '-w', relative_path_prefix] + relative_path_prefix = subprocess.check_output(command).strip().decode('utf-8').replace('\\', '/') + + robot_string = convertUrdfContent(input=urdfContent, robotName=robot_name, normal=normal, + boxCollision=box_collision, initTranslation=robot_translation, + initRotation=robot_rotation, initPos=init_pos, + relativePathPrefix=relative_path_prefix) + else: + robot_string = convertUrdfFile(input=robot.urdf_path, robotName=robot_name, normal=normal, + boxCollision=box_collision, initTranslation=robot_translation, + initRotation=robot_rotation, initPos=init_pos) + elif robot.robot_description: relative_path_prefix = robot.relative_path_prefix if robot.relative_path_prefix else None + # In WSL, the prefix must be converted to WSL path to work in Webots running on native Windows + if is_wsl() and relative_path_prefix: + command = ['wslpath', '-w', relative_path_prefix] + relative_path_prefix = subprocess.check_output(command).strip().decode('utf-8').replace('\\', '/') + if has_shared_folder() and relative_path_prefix: + # Get the package name and parent resource directory from URDF path + split_path = relative_path_prefix.split(os.path.sep) + for i, folder in (list(enumerate(split_path))): + if folder == "share": + package_dir = os.path.sep.join(split_path[:i + 2]) + resource_dir = os.path.sep.join(split_path[:i + 3]) + break + # On macOS, the resources are copied to shared_folder/package_name/resource_folder + # The path prefix is updated to the path of the shared folder + shared_package_dir = os.path.join(container_shared_folder(), os.path.basename(package_dir)) + shared_resource_dir = os.path.join(shared_package_dir, os.path.basename(resource_dir)) + if (not os.path.isdir(shared_package_dir)): + os.mkdir(shared_package_dir) + if (not os.path.isdir(shared_resource_dir)): + shutil.copytree(resource_dir, shared_resource_dir) + relative_path_prefix = os.path.join(host_shared_folder(), os.path.basename(package_dir), + os.path.basename(resource_dir)) robot_string = convertUrdfContent(input=robot.robot_description, robotName=robot_name, normal=normal, boxCollision=box_collision, initTranslation=robot_translation, initRotation=robot_rotation, initPos=init_pos, diff --git a/webots_ros2_driver/webots_ros2_driver/urdf_spawner.py b/webots_ros2_driver/webots_ros2_driver/urdf_spawner.py index 7e42f0dcc..d28b2d81c 100644 --- a/webots_ros2_driver/webots_ros2_driver/urdf_spawner.py +++ b/webots_ros2_driver/webots_ros2_driver/urdf_spawner.py @@ -16,12 +16,7 @@ """This process simply sends urdf information to the Spawner through a service.""" -import os -import shutil -import subprocess - from launch.actions import ExecuteProcess -from webots_ros2_driver.utils import is_wsl, has_shared_folder, container_shared_folder, host_shared_folder def get_webots_driver_node(event, driver_node): @@ -35,15 +30,6 @@ def get_webots_driver_node(event, driver_node): class URDFSpawner(ExecuteProcess): def __init__(self, output='log', name=None, urdf_path=None, robot_description=None, relative_path_prefix=None, translation='0 0 0', rotation='0 0 1 0', normal=False, box_collision=False, init_pos=None, **kwargs): - if is_wsl() and relative_path_prefix: - command = ['wslpath', '-w', relative_path_prefix] - relative_path_prefix = subprocess.check_output(command).strip().decode('utf-8').replace('\\', '/') - if has_shared_folder() and relative_path_prefix and not os.path.isdir( - os.path.join(container_shared_folder(), os.path.basename(relative_path_prefix))): - shutil.copytree(relative_path_prefix, os.path.join(container_shared_folder(), - os.path.basename(relative_path_prefix))) - relative_path_prefix = os.path.join(host_shared_folder(), os.path.basename(relative_path_prefix)) - message = '{robot: {' if name: @@ -70,14 +56,12 @@ def __init__(self, output='log', name=None, urdf_path=None, robot_description=No message += '} }' - command = [ - 'ros2', - 'service', - 'call', - '/spawn_urdf_robot', - 'webots_ros2_msgs/srv/SpawnUrdfRobot', - message - ] + command = ['ros2', + 'service', + 'call', + '/spawn_urdf_robot', + 'webots_ros2_msgs/srv/SpawnUrdfRobot', + message] super().__init__( output=output, diff --git a/webots_ros2_driver/webots_ros2_driver/webots_launcher.py b/webots_ros2_driver/webots_ros2_driver/webots_launcher.py index e77a72a9c..2e1de7002 100644 --- a/webots_ros2_driver/webots_ros2_driver/webots_launcher.py +++ b/webots_ros2_driver/webots_ros2_driver/webots_launcher.py @@ -52,7 +52,7 @@ def perform(self, context): class WebotsLauncher(ExecuteProcess): - def __init__(self, output='screen', world=None, gui=True, mode='realtime', stream=False, **kwargs): + def __init__(self, output='screen', world=None, gui=True, mode='realtime', stream=False, ros2_supervisor=False, **kwargs): if sys.platform == 'win32': print('WARNING: Native webots_ros2 compatibility with Windows is deprecated and will be removed soon. Please use a ' 'WSL (Windows Subsystem for Linux) environment instead.', file=sys.stderr) @@ -60,6 +60,9 @@ def __init__(self, output='screen', world=None, gui=True, mode='realtime', strea 'information.', file=sys.stderr) self.__is_wsl = is_wsl() self.__has_shared_folder = has_shared_folder() + self.__is_supervisor = ros2_supervisor + if self.__is_supervisor: + self._supervisor = Ros2SupervisorLauncher() # Find Webots executable if not self.__has_shared_folder: @@ -89,7 +92,11 @@ def __init__(self, output='screen', world=None, gui=True, mode='realtime', strea stdout = _ConditionalSubstitution(condition=gui, false_value='--stdout') stderr = _ConditionalSubstitution(condition=gui, false_value='--stderr') minimize = _ConditionalSubstitution(condition=gui, false_value='--minimize') - stream_argument = _ConditionalSubstitution(condition=stream, true_value='--stream') + if isinstance(stream, bool): + stream_argument = _ConditionalSubstitution(condition=stream, true_value='--stream') + else: + stream_argument = "--stream=" + stream + xvfb_run_prefix = [] if 'WEBOTS_OFFSCREEN' in os.environ: @@ -161,6 +168,10 @@ def execute(self, context: LaunchContext): continue new_url_path = os.path.split(world_path)[0] + '/' + url_path + if self.__has_shared_folder: + # Copy asset to shared folder + shutil.copy(new_url_path, os.path.join(container_shared_folder(), os.path.basename(new_url_path))) + new_url_path = './' + os.path.basename(new_url_path) if self.__is_wsl: command = ['wslpath', '-w', new_url_path] new_url_path = subprocess.check_output(command).strip().decode('utf-8').replace('\\', '/') @@ -172,14 +183,15 @@ def execute(self, context: LaunchContext): file.write(content) # Add the Ros2Supervisor - indent = ' ' - world_file = open(self.__world_copy.name, 'a') - world_file.write('Robot {\n') - world_file.write(indent + 'name "Ros2Supervisor"\n') - world_file.write(indent + 'controller ""\n') - world_file.write(indent + 'supervisor TRUE\n') - world_file.write('}\n') - world_file.close() + if self.__is_supervisor: + indent = ' ' + world_file = open(self.__world_copy.name, 'a') + world_file.write('Robot {\n') + world_file.write(indent + 'name "Ros2Supervisor"\n') + world_file.write(indent + 'controller ""\n') + world_file.write(indent + 'supervisor TRUE\n') + world_file.write('}\n') + world_file.close() # Copy world file to shared folder if self.__has_shared_folder: diff --git a/webots_ros2_epuck/CHANGELOG.rst b/webots_ros2_epuck/CHANGELOG.rst index d626749d2..668befdd1 100644 --- a/webots_ros2_epuck/CHANGELOG.rst +++ b/webots_ros2_epuck/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package webots_ros2_epuck ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2023.0.2 (2023-02-07) +------------------ +* Updated supervisor launch. + 2023.0.1 (2023-01-05) ------------------ * Fixed broken controller connection in Rats life example. diff --git a/webots_ros2_epuck/launch/robot_launch.py b/webots_ros2_epuck/launch/robot_launch.py index bf82345f0..69a33e7a9 100644 --- a/webots_ros2_epuck/launch/robot_launch.py +++ b/webots_ros2_epuck/launch/robot_launch.py @@ -25,7 +25,7 @@ from launch_ros.actions import Node from launch import LaunchDescription from ament_index_python.packages import get_package_share_directory -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher +from webots_ros2_driver.webots_launcher import WebotsLauncher from webots_ros2_driver.utils import controller_url_prefix @@ -119,16 +119,15 @@ def generate_launch_description(): world = LaunchConfiguration('world') webots = WebotsLauncher( - world=PathJoinSubstitution([package_dir, 'worlds', world]) + world=PathJoinSubstitution([package_dir, 'worlds', world]), + ros2_supervisor=True ) - ros2_supervisor = Ros2SupervisorLauncher() - # The following line is important! # This event handler respawns the ROS 2 nodes on simulation reset (supervisor process ends). reset_handler = launch.actions.RegisterEventHandler( event_handler=launch.event_handlers.OnProcessExit( - target_action=ros2_supervisor, + target_action=webots._supervisor, on_exit=get_ros2_nodes, ) ) @@ -140,7 +139,7 @@ def generate_launch_description(): description='Choose one of the world files from `/webots_ros2_epuck/world` directory' ), webots, - ros2_supervisor, + webots._supervisor, # This action will kill all nodes once the Webots simulation has exited launch.actions.RegisterEventHandler( diff --git a/webots_ros2_epuck/package.xml b/webots_ros2_epuck/package.xml index 22373c73c..a74bd0fa3 100644 --- a/webots_ros2_epuck/package.xml +++ b/webots_ros2_epuck/package.xml @@ -2,7 +2,7 @@ webots_ros2_epuck - 2023.0.1 + 2023.0.2 E-puck2 driver for Webots simulated robot Cyberbotics diff --git a/webots_ros2_epuck/setup.py b/webots_ros2_epuck/setup.py index 24978f6c6..31619b8a0 100644 --- a/webots_ros2_epuck/setup.py +++ b/webots_ros2_epuck/setup.py @@ -43,7 +43,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=[package_name], data_files=data_files, install_requires=['setuptools', 'launch'], diff --git a/webots_ros2_importer/package.xml b/webots_ros2_importer/package.xml index fa97b7117..e0d15edfd 100644 --- a/webots_ros2_importer/package.xml +++ b/webots_ros2_importer/package.xml @@ -2,7 +2,7 @@ webots_ros2_importer - 2023.0.1 + 2023.0.2 This package allows to convert URDF and XACRO files into Webots PROTO files. Cyberbotics diff --git a/webots_ros2_importer/setup.py b/webots_ros2_importer/setup.py index 334126d67..2cf817a7c 100644 --- a/webots_ros2_importer/setup.py +++ b/webots_ros2_importer/setup.py @@ -10,7 +10,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=[package_name, package_name + '.urdf2webots.urdf2webots'], data_files=data_files, install_requires=[ diff --git a/webots_ros2_mavic/CHANGELOG.rst b/webots_ros2_mavic/CHANGELOG.rst index 920a7e0a0..fdfc6e1d0 100644 --- a/webots_ros2_mavic/CHANGELOG.rst +++ b/webots_ros2_mavic/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package webots_ros2_mavic ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2023.0.2 (2023-02-07) +------------------ +* Updated supervisor launch. + 2022.1.3 (2022-11-02) ------------------ * Added macOS support. diff --git a/webots_ros2_mavic/launch/robot_launch.py b/webots_ros2_mavic/launch/robot_launch.py index e875f277d..8f346d7ff 100644 --- a/webots_ros2_mavic/launch/robot_launch.py +++ b/webots_ros2_mavic/launch/robot_launch.py @@ -25,7 +25,7 @@ from launch_ros.actions import Node from launch import LaunchDescription from ament_index_python.packages import get_package_share_directory -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher +from webots_ros2_driver.webots_launcher import WebotsLauncher from webots_ros2_driver.utils import controller_url_prefix @@ -53,16 +53,15 @@ def generate_launch_description(): world = LaunchConfiguration('world') webots = WebotsLauncher( - world=PathJoinSubstitution([package_dir, 'worlds', world]) + world=PathJoinSubstitution([package_dir, 'worlds', world]), + ros2_supervisor=True ) - ros2_supervisor = Ros2SupervisorLauncher() - # The following line is important! # This event handler respawns the ROS 2 nodes on simulation reset (supervisor process ends). reset_handler = launch.actions.RegisterEventHandler( event_handler=launch.event_handlers.OnProcessExit( - target_action=ros2_supervisor, + target_action=webots._supervisor, on_exit=get_ros2_nodes, ) ) @@ -74,7 +73,7 @@ def generate_launch_description(): description='Choose one of the world files from `/webots_ros2_mavic/worlds` directory' ), webots, - ros2_supervisor, + webots._supervisor, # This action will kill all nodes once the Webots simulation has exited launch.actions.RegisterEventHandler( diff --git a/webots_ros2_mavic/package.xml b/webots_ros2_mavic/package.xml index 2a3840306..8787ec0ff 100644 --- a/webots_ros2_mavic/package.xml +++ b/webots_ros2_mavic/package.xml @@ -2,7 +2,7 @@ webots_ros2_mavic - 2023.0.1 + 2023.0.2 Mavic 2 Pro robot ROS2 interface for Webots. Cyberbotics diff --git a/webots_ros2_mavic/setup.py b/webots_ros2_mavic/setup.py index 4bfbbaf6e..f6155d388 100644 --- a/webots_ros2_mavic/setup.py +++ b/webots_ros2_mavic/setup.py @@ -18,7 +18,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=[package_name], data_files=data_files, install_requires=['setuptools', 'launch'], diff --git a/webots_ros2_msgs/package.xml b/webots_ros2_msgs/package.xml index c0824ed01..00c98fa3c 100644 --- a/webots_ros2_msgs/package.xml +++ b/webots_ros2_msgs/package.xml @@ -2,7 +2,7 @@ webots_ros2_msgs - 2023.0.1 + 2023.0.2 Services and Messages of the webots_ros2 packages. Cyberbotics diff --git a/webots_ros2_tesla/CHANGELOG.rst b/webots_ros2_tesla/CHANGELOG.rst index f4c025541..3ab41133e 100644 --- a/webots_ros2_tesla/CHANGELOG.rst +++ b/webots_ros2_tesla/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package webots_ros2_tesla ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2023.0.2 (2023-02-07) +------------------ +* Updated supervisor launch. + 2022.1.3 (2022-11-02) ------------------ * Added macOS support. diff --git a/webots_ros2_tesla/launch/robot_launch.py b/webots_ros2_tesla/launch/robot_launch.py index abf23ef73..bc1d24c15 100644 --- a/webots_ros2_tesla/launch/robot_launch.py +++ b/webots_ros2_tesla/launch/robot_launch.py @@ -25,7 +25,7 @@ from launch import LaunchDescription from ament_index_python.packages import get_package_share_directory from launch_ros.actions import Node -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher +from webots_ros2_driver.webots_launcher import WebotsLauncher from webots_ros2_driver.utils import controller_url_prefix @@ -59,16 +59,15 @@ def generate_launch_description(): world = LaunchConfiguration('world') webots = WebotsLauncher( - world=PathJoinSubstitution([package_dir, 'worlds', world]) + world=PathJoinSubstitution([package_dir, 'worlds', world]), + ros2_supervisor=True ) - ros2_supervisor = Ros2SupervisorLauncher() - # The following line is important! # This event handler respawns the ROS 2 nodes on simulation reset (supervisor process ends). reset_handler = launch.actions.RegisterEventHandler( event_handler=launch.event_handlers.OnProcessExit( - target_action=ros2_supervisor, + target_action=webots._supervisor, on_exit=get_ros2_nodes, ) ) @@ -80,7 +79,7 @@ def generate_launch_description(): description='Choose one of the world files from `/webots_ros2_tesla/worlds` directory' ), webots, - ros2_supervisor, + webots._supervisor, # This action will kill all nodes once the Webots simulation has exited launch.actions.RegisterEventHandler( diff --git a/webots_ros2_tesla/package.xml b/webots_ros2_tesla/package.xml index 3026fc88a..8e2f12977 100644 --- a/webots_ros2_tesla/package.xml +++ b/webots_ros2_tesla/package.xml @@ -2,7 +2,7 @@ webots_ros2_tesla - 2023.0.1 + 2023.0.2 Tesla ROS2 interface for Webots. Cyberbotics diff --git a/webots_ros2_tesla/setup.py b/webots_ros2_tesla/setup.py index 33a48a51c..cc6e14898 100644 --- a/webots_ros2_tesla/setup.py +++ b/webots_ros2_tesla/setup.py @@ -18,7 +18,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=[package_name], data_files=data_files, install_requires=['setuptools', 'launch'], diff --git a/webots_ros2_tests/package.xml b/webots_ros2_tests/package.xml index 87eae083c..763d5f393 100644 --- a/webots_ros2_tests/package.xml +++ b/webots_ros2_tests/package.xml @@ -2,7 +2,7 @@ webots_ros2_tests - 2023.0.1 + 2023.0.2 System tests for `webots_ros2` packages. Cyberbotics diff --git a/webots_ros2_tests/setup.py b/webots_ros2_tests/setup.py index 34932c92f..685e52d59 100644 --- a/webots_ros2_tests/setup.py +++ b/webots_ros2_tests/setup.py @@ -11,7 +11,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=[package_name], data_files=data_files, install_requires=['setuptools', 'launch'], diff --git a/webots_ros2_tests/test/test_system_driver.py b/webots_ros2_tests/test/test_system_driver.py index 8d25a7e56..c5855d459 100644 --- a/webots_ros2_tests/test/test_system_driver.py +++ b/webots_ros2_tests/test/test_system_driver.py @@ -49,15 +49,8 @@ def generate_test_description(): webots = WebotsLauncher( world=os.path.join(package_dir, 'worlds', 'driver_test.wbt'), gui=False, - mode='fast' - ) - - ros2_supervisor = Node( - package='webots_ros2_driver', - executable='ros2_supervisor.py', - output='screen', - additional_env={'WEBOTS_CONTROLLER_URL': controller_url_prefix() + 'Ros2Supervisor'}, - respawn=True, + mode='fast', + ros2_supervisor=True ) webots_driver = Node( @@ -70,7 +63,7 @@ def generate_test_description(): return LaunchDescription([ webots, - ros2_supervisor, + webots._supervisor, webots_driver, launch_testing.actions.ReadyToTest(), launch.actions.RegisterEventHandler( diff --git a/webots_ros2_tiago/CHANGELOG.rst b/webots_ros2_tiago/CHANGELOG.rst index 6f23f315d..1dba4e436 100644 --- a/webots_ros2_tiago/CHANGELOG.rst +++ b/webots_ros2_tiago/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package webots_ros2_tiago ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2023.0.2 (2023-02-07) +------------------ +* Updated supervisor launch. + 2022.1.3 (2022-11-02) ------------------ * Added macOS support. diff --git a/webots_ros2_tiago/launch/robot_launch.py b/webots_ros2_tiago/launch/robot_launch.py index 81e2ca16a..5910fb603 100644 --- a/webots_ros2_tiago/launch/robot_launch.py +++ b/webots_ros2_tiago/launch/robot_launch.py @@ -27,7 +27,7 @@ from ament_index_python.packages import get_package_share_directory, get_packages_with_prefixes from launch.launch_description_sources import PythonLaunchDescriptionSource from launch.actions import IncludeLaunchDescription -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher +from webots_ros2_driver.webots_launcher import WebotsLauncher from webots_ros2_driver.utils import controller_url_prefix @@ -144,16 +144,15 @@ def generate_launch_description(): webots = WebotsLauncher( world=PathJoinSubstitution([package_dir, 'worlds', world]), - mode=mode + mode=mode, + ros2_supervisor=True ) - ros2_supervisor = Ros2SupervisorLauncher() - # The following line is important! # This event handler respawns the ROS 2 nodes on simulation reset (supervisor process ends). reset_handler = launch.actions.RegisterEventHandler( event_handler=launch.event_handlers.OnProcessExit( - target_action=ros2_supervisor, + target_action=webots._supervisor, on_exit=get_ros2_nodes, ) ) @@ -170,7 +169,7 @@ def generate_launch_description(): description='Webots startup mode' ), webots, - ros2_supervisor, + webots._supervisor, # This action will kill all nodes once the Webots simulation has exited launch.actions.RegisterEventHandler( diff --git a/webots_ros2_tiago/package.xml b/webots_ros2_tiago/package.xml index a30a8eead..4cdf04a51 100644 --- a/webots_ros2_tiago/package.xml +++ b/webots_ros2_tiago/package.xml @@ -2,7 +2,7 @@ webots_ros2_tiago - 2023.0.1 + 2023.0.2 TIAGo robots ROS2 interface for Webots. Cyberbotics diff --git a/webots_ros2_tiago/setup.py b/webots_ros2_tiago/setup.py index d86b8c0cb..683b30d9b 100644 --- a/webots_ros2_tiago/setup.py +++ b/webots_ros2_tiago/setup.py @@ -17,7 +17,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=[], data_files=data_files, install_requires=['setuptools', 'launch'], diff --git a/webots_ros2_turtlebot/CHANGELOG.rst b/webots_ros2_turtlebot/CHANGELOG.rst index 02eb1be29..f6c5ac0e2 100644 --- a/webots_ros2_turtlebot/CHANGELOG.rst +++ b/webots_ros2_turtlebot/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package webots_ros2_turtlebot ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2023.0.2 (2023-02-07) +------------------ +* Updated supervisor launch. + 2022.1.3 (2022-11-02) ------------------ * Added macOS support. diff --git a/webots_ros2_turtlebot/launch/robot_launch.py b/webots_ros2_turtlebot/launch/robot_launch.py index c5846a477..79b3bbf46 100644 --- a/webots_ros2_turtlebot/launch/robot_launch.py +++ b/webots_ros2_turtlebot/launch/robot_launch.py @@ -25,7 +25,7 @@ from launch_ros.actions import Node import launch from ament_index_python.packages import get_package_share_directory -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher +from webots_ros2_driver.webots_launcher import WebotsLauncher from webots_ros2_driver.utils import controller_url_prefix @@ -105,16 +105,15 @@ def generate_launch_description(): world = LaunchConfiguration('world') webots = WebotsLauncher( - world=PathJoinSubstitution([package_dir, 'worlds', world]) + world=PathJoinSubstitution([package_dir, 'worlds', world]), + ros2_supervisor=True ) - ros2_supervisor = Ros2SupervisorLauncher() - # The following line is important! # This event handler respawns the ROS 2 nodes on simulation reset (supervisor process ends). reset_handler = launch.actions.RegisterEventHandler( event_handler=launch.event_handlers.OnProcessExit( - target_action=ros2_supervisor, + target_action=webots._supervisor, on_exit=get_ros2_nodes, ) ) @@ -126,7 +125,7 @@ def generate_launch_description(): description='Choose one of the world files from `/webots_ros2_turtlebot/world` directory' ), webots, - ros2_supervisor, + webots._supervisor, # This action will kill all nodes once the Webots simulation has exited launch.actions.RegisterEventHandler( diff --git a/webots_ros2_turtlebot/package.xml b/webots_ros2_turtlebot/package.xml index 28a7c6cc0..c32c2422f 100644 --- a/webots_ros2_turtlebot/package.xml +++ b/webots_ros2_turtlebot/package.xml @@ -2,7 +2,7 @@ webots_ros2_turtlebot - 2023.0.1 + 2023.0.2 TurtleBot3 Burger robot ROS2 interface for Webots. Cyberbotics diff --git a/webots_ros2_turtlebot/setup.py b/webots_ros2_turtlebot/setup.py index c5157ef70..9b76e431a 100644 --- a/webots_ros2_turtlebot/setup.py +++ b/webots_ros2_turtlebot/setup.py @@ -22,7 +22,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=[package_name], data_files=data_files, install_requires=['setuptools', 'launch'], diff --git a/webots_ros2_universal_robot/CHANGELOG.rst b/webots_ros2_universal_robot/CHANGELOG.rst index e88a84db2..c82e11b1e 100644 --- a/webots_ros2_universal_robot/CHANGELOG.rst +++ b/webots_ros2_universal_robot/CHANGELOG.rst @@ -2,6 +2,11 @@ Changelog for package webots_ros2_universal_robot ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2023.0.2 (2023-02-07) +------------------ +* Fixed URDF relative URLs to assets. +* Updated supervisor launch. + 2022.1.3 (2022-11-02) ------------------ * Added macOS support. diff --git a/webots_ros2_universal_robot/launch/multirobot_launch.py b/webots_ros2_universal_robot/launch/multirobot_launch.py index c682e43ab..c9a770af1 100644 --- a/webots_ros2_universal_robot/launch/multirobot_launch.py +++ b/webots_ros2_universal_robot/launch/multirobot_launch.py @@ -27,7 +27,7 @@ from launch.substitutions.path_join_substitution import PathJoinSubstitution from launch_ros.actions import Node from webots_ros2_driver.urdf_spawner import URDFSpawner, get_webots_driver_node -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher +from webots_ros2_driver.webots_launcher import WebotsLauncher from webots_ros2_driver.utils import controller_url_prefix @@ -164,17 +164,15 @@ def generate_launch_description(): # Starts Webots webots = WebotsLauncher( - world=PathJoinSubstitution([package_dir, 'worlds', world]) + world=PathJoinSubstitution([package_dir, 'worlds', world]), + ros2_supervisor=True ) - # Starts the Ros2Supervisor node, with by default respawn=True - ros2_supervisor = Ros2SupervisorLauncher() - # The following line is important! # This event handler respawns the ROS 2 nodes on simulation reset (supervisor process ends). reset_handler = launch.actions.RegisterEventHandler( event_handler=launch.event_handlers.OnProcessExit( - target_action=ros2_supervisor, + target_action=webots._supervisor, on_exit=get_ros2_nodes, ) ) @@ -186,7 +184,7 @@ def generate_launch_description(): description='Choose one of the world files from `/webots_ros2_universal_robot/worlds` directory' ), webots, - ros2_supervisor, + webots._supervisor, # This action will kill all nodes once the Webots simulation has exited launch.actions.RegisterEventHandler( diff --git a/webots_ros2_universal_robot/launch/robot_launch/robot_world_launch.py b/webots_ros2_universal_robot/launch/robot_launch/robot_world_launch.py index 28ce5dcc0..e91e59f33 100644 --- a/webots_ros2_universal_robot/launch/robot_launch/robot_world_launch.py +++ b/webots_ros2_universal_robot/launch/robot_launch/robot_world_launch.py @@ -22,7 +22,7 @@ from launch.actions import DeclareLaunchArgument from launch.substitutions import LaunchConfiguration from launch.substitutions.path_join_substitution import PathJoinSubstitution -from webots_ros2_driver.webots_launcher import WebotsLauncher, Ros2SupervisorLauncher +from webots_ros2_driver.webots_launcher import WebotsLauncher PACKAGE_NAME = 'webots_ros2_universal_robot' @@ -34,12 +34,10 @@ def generate_launch_description(): # Starts Webots webots = WebotsLauncher( - world=PathJoinSubstitution([package_dir, 'worlds', world]) + world=PathJoinSubstitution([package_dir, 'worlds', world]), + ros2_supervisor=True ) - # Starts the Ros2Supervisor node, with by default respawn=True - ros2_supervisor = Ros2SupervisorLauncher() - return LaunchDescription([ DeclareLaunchArgument( 'world', @@ -47,7 +45,7 @@ def generate_launch_description(): description='Choose one of the world files from `/webots_ros2_universal_robot/worlds` directory' ), webots, - ros2_supervisor, + webots._supervisor, # This action will kill all nodes once the Webots simulation has exited launch.actions.RegisterEventHandler( event_handler=launch.event_handlers.OnProcessExit( diff --git a/webots_ros2_universal_robot/package.xml b/webots_ros2_universal_robot/package.xml index c64a866a7..9dd942882 100644 --- a/webots_ros2_universal_robot/package.xml +++ b/webots_ros2_universal_robot/package.xml @@ -2,7 +2,7 @@ webots_ros2_universal_robot - 2023.0.1 + 2023.0.2 Universal Robot ROS2 interface for Webots. Cyberbotics diff --git a/webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/config/ur5e/visual_parameters.yaml b/webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/config/ur5e/visual_parameters.yaml index 5649bb441..b64c80faf 100644 --- a/webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/config/ur5e/visual_parameters.yaml +++ b/webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/config/ur5e/visual_parameters.yaml @@ -1,67 +1,67 @@ mesh_files: base: visual: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/base.dae" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/base.dae" material: name: "LightGrey" color: "0.7 0.7 0.7 1.0" collision: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/base.stl" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/base.stl" shoulder: visual: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/shoulder.dae" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/shoulder.dae" material: name: "LightGrey" color: "0.7 0.7 0.7 1.0" collision: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/shoulder.stl" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/shoulder.stl" upper_arm: visual: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/upperarm.dae" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/upperarm.dae" material: name: "LightGrey" color: "0.7 0.7 0.7 1.0" collision: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/upperarm.stl" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/upperarm.stl" mesh_files: forearm: visual: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/forearm.dae" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/forearm.dae" material: name: "LightGrey" color: "0.7 0.7 0.7 1.0" collision: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/forearm.stl" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/forearm.stl" wrist_1: visual: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/wrist1.dae" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/wrist1.dae" material: name: "LightGrey" color: "0.7 0.7 0.7 1.0" collision: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/wrist1.stl" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/wrist1.stl" visual_offset: -0.127 wrist_2: visual: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/wrist2.dae" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/wrist2.dae" material: name: "LightGrey" color: "0.7 0.7 0.7 1.0" collision: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/wrist2.stl" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/wrist2.stl" visual_offset: -0.0997 wrist_3: visual: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/wrist3.dae" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/visual/wrist3.dae" material: name: "LightGrey" color: "0.7 0.7 0.7 1.0" collision: - mesh: "package://resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/wrist3.stl" + mesh: "package://webots_ros2_universal_robot/resource/Universal_Robots_ROS2_Driver/ur_description/meshes/ur5e/collision/wrist3.stl" visual_offset: -0.0989 diff --git a/webots_ros2_universal_robot/resource/robotiq/robotiq_3f_gripper_visualization/cfg/robotiq-3f-gripper_articulated_macro.xacro b/webots_ros2_universal_robot/resource/robotiq/robotiq_3f_gripper_visualization/cfg/robotiq-3f-gripper_articulated_macro.xacro index 7e76f7c32..1f549aae2 100644 --- a/webots_ros2_universal_robot/resource/robotiq/robotiq_3f_gripper_visualization/cfg/robotiq-3f-gripper_articulated_macro.xacro +++ b/webots_ros2_universal_robot/resource/robotiq/robotiq_3f_gripper_visualization/cfg/robotiq-3f-gripper_articulated_macro.xacro @@ -16,7 +16,7 @@ there are multiple hands then a prefix followed by an "_" is needed. - + @@ -24,7 +24,7 @@ there are multiple hands then a prefix followed by an "_" is needed. - + diff --git a/webots_ros2_universal_robot/resource/robotiq/robotiq_3f_gripper_visualization/cfg/robotiq-3f-gripper_finger_articulated_macro.xacro b/webots_ros2_universal_robot/resource/robotiq/robotiq_3f_gripper_visualization/cfg/robotiq-3f-gripper_finger_articulated_macro.xacro index cdfa651ef..56e28a390 100644 --- a/webots_ros2_universal_robot/resource/robotiq/robotiq_3f_gripper_visualization/cfg/robotiq-3f-gripper_finger_articulated_macro.xacro +++ b/webots_ros2_universal_robot/resource/robotiq/robotiq_3f_gripper_visualization/cfg/robotiq-3f-gripper_finger_articulated_macro.xacro @@ -13,7 +13,7 @@ finger(i.e. finger_1, etc...). - + @@ -22,7 +22,7 @@ finger(i.e. finger_1, etc...). - + @@ -38,14 +38,14 @@ finger(i.e. finger_1, etc...). - + - + @@ -64,14 +64,14 @@ finger(i.e. finger_1, etc...). - + - + @@ -85,14 +85,14 @@ finger(i.e. finger_1, etc...). - + - + diff --git a/webots_ros2_universal_robot/setup.py b/webots_ros2_universal_robot/setup.py index d74aa7278..84baa6d8f 100644 --- a/webots_ros2_universal_robot/setup.py +++ b/webots_ros2_universal_robot/setup.py @@ -30,7 +30,7 @@ setup( name=package_name, - version='2023.0.1', + version='2023.0.2', packages=['webots_ros2_universal_robot'], data_files=data_files, install_requires=['setuptools', 'launch'],