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_plugin',
40 default_value=
'beluga_amcl::NdtAmclNode',
41 description=
'Localization node plugin to use if composition is enabled. ',
43 DeclareLaunchArgument(
44 name=
'localization_prefix',
46 description=
'Set of commands/arguments to precede the node command (e.g. "timem --").',
48 DeclareLaunchArgument(
49 name=
'localization_params_file',
50 default_value=str(example_dir_path /
'params' /
'default_ndt.ros2.yaml'),
51 description=
'Parameters file to be used to run the localization node.',
53 DeclareLaunchArgument(
54 name=
'localization_map',
55 default_value=str(example_dir_path /
'maps' /
'turtlebot3_world.yaml'),
56 description=
'Map YAML file to be used by the map server node.',
58 DeclareLaunchArgument(
59 name=
'localization_ndt_map',
60 default_value=str(example_dir_path /
'maps' /
'turtlebot3_world.hdf5'),
61 description=
'Map HDF5 file used by the localization node.',
63 DeclareLaunchArgument(
64 name=
'use_composition',
65 default_value=
'False',
66 description=
'Whether to use composed node bringup.',
68 DeclareLaunchArgument(
70 default_value=
'False',
71 description=
'Whether to use simulation clock.',
80 localization_params_file,
86 use_composition = get_typed_value(use_composition, bool)
87 use_sim_time = get_typed_value(use_sim_time, bool)
89 load_nodes = GroupAction(
92 package=
'beluga_amcl',
93 executable=
'ndt_amcl_node',
97 arguments=[
'--ros-args',
'--log-level',
'info'],
98 prefix=localization_prefix,
99 params_file=localization_params_file,
100 extra_params={
'map_path': localization_ndt_map},
105 package=
'nav2_map_server',
106 executable=
'map_server',
110 arguments=[
'--ros-args',
'--log-level',
'info'],
112 {
'yaml_filename': localization_map},
116 package=
'nav2_lifecycle_manager',
117 executable=
'lifecycle_manager',
119 name=
'lifecycle_manager_localization',
121 arguments=[
'--ros-args',
'--log-level',
'info'],
122 sigterm_timeout=
'20',
123 sigkill_timeout=
'20',
126 {
'node_names': [
'map_server',
'ndt_amcl']},
132 load_composable_nodes = GroupAction(
134 ComposableNodeContainer(
135 package=
'rclcpp_components',
136 executable=
'component_container',
138 name=
'amcl_component_container',
139 composable_node_descriptions=[
141 package=
'beluga_amcl',
142 plugin=localization_plugin,
144 parameters=[localization_params_file],
147 package=
'nav2_map_server',
148 plugin=
'nav2_map_server::MapServer',
151 {
'yaml_filename': localization_map},
155 package=
'nav2_lifecycle_manager',
156 plugin=
'nav2_lifecycle_manager::LifecycleManager',
157 name=
'lifecycle_manager_localization',
160 {
'node_names': [
'map_server',
'ndt_amcl']},
168 return LaunchDescription(
170 SetParameter(
'use_sim_time', use_sim_time),
171 load_composable_nodes
if use_composition
else load_nodes,