From e37b143d90bc5ab09dbc24e44270f4e3c5a6218f Mon Sep 17 00:00:00 2001 From: Caio Amaral Date: Mon, 29 Mar 2021 23:49:10 -0300 Subject: [PATCH] Fix #133 Signed-off-by: Caio Amaral Minor Fix --- ros_ign_gazebo/launch/ign_gazebo.launch.py | 45 ++++++++++++++++++---- ros_ign_gazebo/package.xml | 3 ++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/ros_ign_gazebo/launch/ign_gazebo.launch.py b/ros_ign_gazebo/launch/ign_gazebo.launch.py index c889a351..eca51219 100644 --- a/ros_ign_gazebo/launch/ign_gazebo.launch.py +++ b/ros_ign_gazebo/launch/ign_gazebo.launch.py @@ -14,28 +14,57 @@ """Launch Ignition Gazebo with command line arguments.""" -from os import environ +import os + +from ament_index_python.packages import get_package_share_directory +from catkin_pkg.package import parse_package from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument -from launch.actions import ExecuteProcess +from launch.actions import DeclareLaunchArgument, ExecuteProcess, OpaqueFunction +from launch.launch_context import LaunchContext from launch.substitutions import LaunchConfiguration def generate_launch_description(): env = {'IGN_GAZEBO_SYSTEM_PLUGIN_PATH': - ':'.join([environ.get('IGN_GAZEBO_SYSTEM_PLUGIN_PATH', default=''), - environ.get('LD_LIBRARY_PATH', default='')])} + ':'.join([os.environ.get('IGN_GAZEBO_SYSTEM_PLUGIN_PATH', default=''), + os.environ.get('LD_LIBRARY_PATH', default='')])} return LaunchDescription([ - DeclareLaunchArgument('ign_args', default_value='', - description='Arguments to be passed to Ignition Gazebo'), + DeclareLaunchArgument( + 'ign_args', default_value='', + description='Arguments to be passed to Ignition Gazebo'), ExecuteProcess( cmd=['ign gazebo', - LaunchConfiguration('ign_args'), + OpaqueFunction(__get_ign_args) ], output='screen', additional_env=env, shell=True ) ]) + + +def __get_ign_args(context: LaunchContext): + ign_args = LaunchConfiguration('ign_args').perform(context) + if '--force_version' not in ign_args: + ign_args += f' --force_version {IGN_GAZEBO_DEFAULT_VERSION}' + + return ign_args + + +def __get_ign_gazebo_default_version(): + manifest_path = os.path.join(*[get_package_share_directory('ros_ign_gazebo'), 'package.xml']) + + # this will fail if workspace was built with '--merge-install' + this_pkg = parse_package(manifest_path) + + this_pkg.evaluate_conditions(os.environ) + lookup_name = next(dep.name for dep in this_pkg.exec_depends + if dep.evaluated_condition + if 'ignition-gazebo' in dep.name) + + return lookup_name.replace('ignition-gazebo', '') + + +IGN_GAZEBO_DEFAULT_VERSION = __get_ign_gazebo_default_version() diff --git a/ros_ign_gazebo/package.xml b/ros_ign_gazebo/package.xml index b3ea5035..326563a8 100644 --- a/ros_ign_gazebo/package.xml +++ b/ros_ign_gazebo/package.xml @@ -25,6 +25,9 @@ ignition-gazebo3 ignition-gazebo3 + ament_index_python + python3-catkin-pkg-modules + ament_lint_auto ament_lint_common