15 from pathlib
import Path
17 from ament_index_python.packages
import get_package_share_directory
19 from launch
import LaunchDescription
20 from launch.actions
import DeclareLaunchArgument
21 from launch.actions
import GroupAction
22 from launch_ros.actions
import ComposableNodeContainer
23 from launch_ros.actions
import Node
24 from launch_ros.descriptions.composable_node
import ComposableNode
25 from launch.utilities.type_utils
import get_typed_value
27 from launch_ros.actions
import SetParameter
31 get_node_with_arguments_declared_from_params_file,
36 example_dir_path = Path(get_package_share_directory(
'beluga_example'))
38 DeclareLaunchArgument(
39 name=
'localization_package',
40 default_value=
'beluga_amcl',
41 description=
'Package that provides the localization node to launch.',
42 choices=[
'beluga_amcl',
'nav2_amcl'],
44 DeclareLaunchArgument(
45 name=
'localization_node',
46 default_value=
'amcl_node',
47 description=
'Localization node to launch.',
49 DeclareLaunchArgument(
50 name=
'localization_plugin',
51 default_value=
'beluga_amcl::AmclNode',
52 description=
'Localization node plugin to use if composition is enabled. ',
54 DeclareLaunchArgument(
55 name=
'localization_prefix',
57 description=
'Set of commands/arguments to precede the node command (e.g. "timem --").',
59 DeclareLaunchArgument(
60 name=
'localization_params_file',
61 default_value=str(example_dir_path /
'params' /
'default.ros2.yaml'),
62 description=
'Parameters file to be used to run the localization node.',
64 DeclareLaunchArgument(
65 name=
'localization_map',
66 default_value=str(example_dir_path /
'maps' /
'turtlebot3_world.yaml'),
67 description=
'Map YAML file to be used by the localization node.',
69 DeclareLaunchArgument(
70 name=
'use_composition',
71 default_value=
'False',
72 description=
'Whether to use composed node bringup.',
74 DeclareLaunchArgument(
76 default_value=
'False',
77 description=
'Whether to use simulation clock.',
88 localization_params_file,
93 use_composition = get_typed_value(use_composition, bool)
94 use_sim_time = get_typed_value(use_sim_time, bool)
96 load_nodes = GroupAction(
99 package=localization_package,
100 executable=localization_node,
104 arguments=[
'--ros-args',
'--log-level',
'info'],
105 prefix=localization_prefix,
106 params_file=localization_params_file,
109 package=
'nav2_map_server',
110 executable=
'map_server',
114 arguments=[
'--ros-args',
'--log-level',
'info'],
116 {
'yaml_filename': localization_map},
120 package=
'nav2_lifecycle_manager',
121 executable=
'lifecycle_manager',
123 name=
'lifecycle_manager_localization',
125 arguments=[
'--ros-args',
'--log-level',
'info'],
126 sigterm_timeout=
'20',
127 sigkill_timeout=
'20',
130 {
'node_names': [
'map_server',
'amcl']},
136 load_composable_nodes = GroupAction(
138 ComposableNodeContainer(
139 package=
'rclcpp_components',
140 executable=
'component_container',
142 name=
'amcl_component_container',
143 composable_node_descriptions=[
145 package=localization_package,
146 plugin=localization_plugin,
148 parameters=[localization_params_file],
151 package=
'nav2_map_server',
152 plugin=
'nav2_map_server::MapServer',
155 {
'yaml_filename': localization_map},
159 package=
'nav2_lifecycle_manager',
160 plugin=
'nav2_lifecycle_manager::LifecycleManager',
161 name=
'lifecycle_manager_localization',
164 {
'node_names': [
'map_server',
'amcl']},
172 return LaunchDescription(
174 SetParameter(
'use_sim_time', use_sim_time),
175 load_composable_nodes
if use_composition
else load_nodes,