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