17 from ament_index_python.packages
import get_package_share_directory
18 from launch
import LaunchDescription
19 from launch.actions
import DeclareLaunchArgument, GroupAction, SetEnvironmentVariable
20 from launch.conditions
import IfCondition
21 from launch.substitutions
import LaunchConfiguration, PythonExpression
22 from launch_ros.actions
import LoadComposableNodes, Node, PushROSNamespace, SetParameter
23 from launch_ros.descriptions
import ComposableNode, ParameterFile
27 def generate_launch_description() -> LaunchDescription:
29 bringup_dir = get_package_share_directory(
'nav2_bringup')
31 namespace = LaunchConfiguration(
'namespace')
32 use_sim_time = LaunchConfigAsBool(
'use_sim_time')
33 autostart = LaunchConfigAsBool(
'autostart')
34 graph_filepath = LaunchConfiguration(
'graph')
35 params_file = LaunchConfiguration(
'params_file')
36 use_composition = LaunchConfigAsBool(
'use_composition')
37 use_intra_process_comms = LaunchConfigAsBool(
'use_intra_process_comms')
38 container_name = LaunchConfiguration(
'container_name')
39 container_name_full = (namespace,
'/', container_name)
40 use_respawn = LaunchConfigAsBool(
'use_respawn')
41 log_level = LaunchConfiguration(
'log_level')
42 use_keepout_zones = LaunchConfigAsBool(
'use_keepout_zones')
43 use_speed_zones = LaunchConfigAsBool(
'use_speed_zones')
60 remappings = [(
'/tf',
'tf'), (
'/tf_static',
'tf_static')]
63 param_substitutions = {
'autostart': autostart}
65 yaml_substitutions = {
66 'KEEPOUT_ZONE_ENABLED': use_keepout_zones,
67 'SPEED_ZONE_ENABLED': use_speed_zones,
78 configured_params = ParameterFile(
80 source_file=params_file,
82 param_rewrites=param_substitutions,
83 value_rewrites=yaml_substitutions,
89 stdout_linebuf_envvar = SetEnvironmentVariable(
90 'RCUTILS_LOGGING_BUFFERED_STREAM',
'1'
93 declare_namespace_cmd = DeclareLaunchArgument(
94 'namespace', default_value=
'', description=
'Top-level namespace'
97 declare_use_sim_time_cmd = DeclareLaunchArgument(
99 default_value=
'false',
100 description=
'Use simulation (Gazebo) clock if true',
103 declare_params_file_cmd = DeclareLaunchArgument(
105 default_value=os.path.join(bringup_dir,
'params',
'nav2_params.yaml'),
106 description=
'Full path to the ROS2 parameters file to use for all launched nodes',
109 declare_graph_file_cmd = DeclareLaunchArgument(
111 default_value=
'', description=
'Path to the graph file to load'
114 declare_autostart_cmd = DeclareLaunchArgument(
116 default_value=
'true',
117 description=
'Automatically startup the nav2 stack',
120 declare_use_composition_cmd = DeclareLaunchArgument(
122 default_value=
'False',
123 description=
'Use composed bringup if True',
126 declare_use_intra_process_comms_cmd = DeclareLaunchArgument(
127 'use_intra_process_comms',
128 default_value=
'False',
129 description=
'Whether to use intra process communication',
132 declare_container_name_cmd = DeclareLaunchArgument(
134 default_value=
'nav2_container',
135 description=
'the name of container that nodes will load in if use composition',
138 declare_use_respawn_cmd = DeclareLaunchArgument(
140 default_value=
'False',
141 description=
'Whether to respawn if a node crashes. Applied when composition is disabled.',
144 declare_log_level_cmd = DeclareLaunchArgument(
145 'log_level', default_value=
'info', description=
'log level'
148 declare_use_keepout_zones_cmd = DeclareLaunchArgument(
149 'use_keepout_zones', default_value=
'True',
150 description=
'Whether to enable keepout zones or not'
153 declare_use_speed_zones_cmd = DeclareLaunchArgument(
154 'use_speed_zones', default_value=
'True',
155 description=
'Whether to enable speed zones or not'
158 load_nodes = GroupAction(
159 condition=IfCondition(PythonExpression([
'not ', use_composition])),
161 SetParameter(
'use_sim_time', use_sim_time),
162 PushROSNamespace(namespace=namespace),
164 package=
'nav2_controller',
165 executable=
'controller_server',
169 parameters=[configured_params],
170 arguments=[
'--ros-args',
'--log-level', log_level],
171 remappings=remappings + [(
'cmd_vel',
'cmd_vel_nav')],
174 package=
'nav2_smoother',
175 executable=
'smoother_server',
176 name=
'smoother_server',
180 parameters=[configured_params],
181 arguments=[
'--ros-args',
'--log-level', log_level],
182 remappings=remappings,
185 package=
'nav2_planner',
186 executable=
'planner_server',
187 name=
'planner_server',
191 parameters=[configured_params],
192 arguments=[
'--ros-args',
'--log-level', log_level],
193 remappings=remappings,
196 package=
'nav2_route',
197 executable=
'route_server',
202 parameters=[configured_params, {
'graph_filepath': graph_filepath}],
203 arguments=[
'--ros-args',
'--log-level', log_level],
204 remappings=remappings),
206 package=
'nav2_behaviors',
207 executable=
'behavior_server',
208 name=
'behavior_server',
212 parameters=[configured_params],
213 arguments=[
'--ros-args',
'--log-level', log_level],
214 remappings=remappings + [(
'cmd_vel',
'cmd_vel_nav')],
217 package=
'nav2_bt_navigator',
218 executable=
'bt_navigator',
223 parameters=[configured_params],
224 arguments=[
'--ros-args',
'--log-level', log_level],
225 remappings=remappings,
228 package=
'nav2_waypoint_follower',
229 executable=
'waypoint_follower',
230 name=
'waypoint_follower',
234 parameters=[configured_params],
235 arguments=[
'--ros-args',
'--log-level', log_level],
236 remappings=remappings,
239 package=
'nav2_velocity_smoother',
240 executable=
'velocity_smoother',
241 name=
'velocity_smoother',
245 parameters=[configured_params],
246 arguments=[
'--ros-args',
'--log-level', log_level],
247 remappings=remappings
248 + [(
'cmd_vel',
'cmd_vel_nav')],
251 package=
'nav2_collision_monitor',
252 executable=
'collision_monitor',
253 name=
'collision_monitor',
257 parameters=[configured_params],
258 arguments=[
'--ros-args',
'--log-level', log_level],
259 remappings=remappings,
262 package=
'opennav_docking',
263 executable=
'opennav_docking',
264 name=
'docking_server',
268 parameters=[configured_params],
269 arguments=[
'--ros-args',
'--log-level', log_level],
270 remappings=remappings,
273 package=
'opennav_following',
274 executable=
'opennav_following',
275 name=
'following_server',
279 parameters=[configured_params],
280 arguments=[
'--ros-args',
'--log-level', log_level],
281 remappings=remappings,
284 package=
'nav2_lifecycle_manager',
285 executable=
'lifecycle_manager',
286 name=
'lifecycle_manager_navigation',
288 arguments=[
'--ros-args',
'--log-level', log_level],
291 {
'autostart': autostart}, {
'node_names': lifecycle_nodes}
297 load_composable_nodes = GroupAction(
298 condition=IfCondition(use_composition),
300 SetParameter(
'use_sim_time', use_sim_time),
301 PushROSNamespace(namespace=namespace),
303 target_container=container_name_full,
304 composable_node_descriptions=[
306 package=
'nav2_controller',
307 plugin=
'nav2_controller::ControllerServer',
308 name=
'controller_server',
309 parameters=[configured_params],
310 remappings=remappings + [(
'cmd_vel',
'cmd_vel_nav')],
311 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
314 package=
'nav2_smoother',
315 plugin=
'nav2_smoother::SmootherServer',
316 name=
'smoother_server',
317 parameters=[configured_params],
318 remappings=remappings,
319 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
322 package=
'nav2_planner',
323 plugin=
'nav2_planner::PlannerServer',
324 name=
'planner_server',
325 parameters=[configured_params],
326 remappings=remappings,
327 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
330 package=
'nav2_route',
331 plugin=
'nav2_route::RouteServer',
333 parameters=[configured_params, {
'graph_filepath': graph_filepath}],
334 remappings=remappings,
335 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
338 package=
'nav2_behaviors',
339 plugin=
'behavior_server::BehaviorServer',
340 name=
'behavior_server',
341 parameters=[configured_params],
342 remappings=remappings + [(
'cmd_vel',
'cmd_vel_nav')],
343 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
346 package=
'nav2_bt_navigator',
347 plugin=
'nav2_bt_navigator::BtNavigator',
349 parameters=[configured_params],
350 remappings=remappings,
351 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
354 package=
'nav2_waypoint_follower',
355 plugin=
'nav2_waypoint_follower::WaypointFollower',
356 name=
'waypoint_follower',
357 parameters=[configured_params],
358 remappings=remappings,
359 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
362 package=
'nav2_velocity_smoother',
363 plugin=
'nav2_velocity_smoother::VelocitySmoother',
364 name=
'velocity_smoother',
365 parameters=[configured_params],
366 remappings=remappings
367 + [(
'cmd_vel',
'cmd_vel_nav')],
368 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
371 package=
'nav2_collision_monitor',
372 plugin=
'nav2_collision_monitor::CollisionMonitor',
373 name=
'collision_monitor',
374 parameters=[configured_params],
375 remappings=remappings,
376 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
379 package=
'opennav_docking',
380 plugin=
'opennav_docking::DockingServer',
381 name=
'docking_server',
382 parameters=[configured_params],
383 remappings=remappings,
384 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
387 package=
'opennav_following',
388 plugin=
'opennav_following::FollowingServer',
389 name=
'following_server',
390 parameters=[configured_params],
391 remappings=remappings,
392 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
395 package=
'nav2_lifecycle_manager',
396 plugin=
'nav2_lifecycle_manager::LifecycleManager',
397 name=
'lifecycle_manager_navigation',
400 {
'autostart': autostart,
'node_names': lifecycle_nodes}
402 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
410 ld = LaunchDescription()
413 ld.add_action(stdout_linebuf_envvar)
416 ld.add_action(declare_namespace_cmd)
417 ld.add_action(declare_use_sim_time_cmd)
418 ld.add_action(declare_params_file_cmd)
419 ld.add_action(declare_autostart_cmd)
420 ld.add_action(declare_graph_file_cmd)
421 ld.add_action(declare_use_composition_cmd)
422 ld.add_action(declare_use_intra_process_comms_cmd)
423 ld.add_action(declare_container_name_cmd)
424 ld.add_action(declare_use_respawn_cmd)
425 ld.add_action(declare_log_level_cmd)
426 ld.add_action(declare_use_keepout_zones_cmd)
427 ld.add_action(declare_use_speed_zones_cmd)
429 ld.add_action(load_nodes)
430 ld.add_action(load_composable_nodes)