92 lines
2.9 KiB
Python
Executable File
92 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env -S ros2 launch
|
|
"""Launch default.sdf and the required ROS<->IGN bridges"""
|
|
|
|
from typing import List
|
|
|
|
from launch_ros.actions import Node
|
|
from launch_ros.substitutions import FindPackageShare
|
|
|
|
from launch import LaunchDescription
|
|
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
|
|
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
|
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
|
|
|
|
|
|
def generate_launch_description() -> LaunchDescription:
|
|
|
|
# Declare all launch arguments
|
|
declared_arguments = generate_declared_arguments()
|
|
|
|
# Get substitution for all arguments
|
|
world = LaunchConfiguration("world")
|
|
use_sim_time = LaunchConfiguration("use_sim_time")
|
|
ign_verbosity = LaunchConfiguration("ign_verbosity")
|
|
log_level = LaunchConfiguration("log_level")
|
|
|
|
# List of included launch descriptions
|
|
launch_descriptions = [
|
|
# Launch Ignition Gazebo
|
|
IncludeLaunchDescription(
|
|
PythonLaunchDescriptionSource(
|
|
PathJoinSubstitution(
|
|
[
|
|
FindPackageShare("ros_ign_gazebo"),
|
|
"launch",
|
|
"ign_gazebo.launch.py",
|
|
]
|
|
)
|
|
),
|
|
launch_arguments=[("ign_args", [world, " -r -v ", ign_verbosity])],
|
|
),
|
|
]
|
|
|
|
# List of nodes to be launched
|
|
nodes = [
|
|
# ros_ign_bridge (clock -> ROS 2)
|
|
Node(
|
|
package="ros_ign_bridge",
|
|
executable="parameter_bridge",
|
|
output="log",
|
|
arguments=[
|
|
"/clock@rosgraph_msgs/msg/Clock[ignition.msgs.Clock",
|
|
"--ros-args",
|
|
"--log-level",
|
|
log_level,
|
|
],
|
|
parameters=[{"use_sim_time": use_sim_time}],
|
|
),
|
|
]
|
|
|
|
return LaunchDescription(declared_arguments + launch_descriptions + nodes)
|
|
|
|
|
|
def generate_declared_arguments() -> List[DeclareLaunchArgument]:
|
|
"""
|
|
Generate list of all launch arguments that are declared for this launch script.
|
|
"""
|
|
|
|
return [
|
|
# World for Ignition Gazebo
|
|
DeclareLaunchArgument(
|
|
"world",
|
|
default_value="default.sdf",
|
|
description="Name or filepath of world to load.",
|
|
),
|
|
# Miscellaneous
|
|
DeclareLaunchArgument(
|
|
"use_sim_time",
|
|
default_value="true",
|
|
description="If true, use simulated clock.",
|
|
),
|
|
DeclareLaunchArgument(
|
|
"ign_verbosity",
|
|
default_value="2",
|
|
description="Verbosity level for Ignition Gazebo (0~4).",
|
|
),
|
|
DeclareLaunchArgument(
|
|
"log_level",
|
|
default_value="warn",
|
|
description="The level of logging that is applied to all ROS 2 nodes launched by this script.",
|
|
),
|
|
]
|