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 get_lifecycle_nodes(context):
43 def generate_launch_description() -> LaunchDescription:
45 bringup_dir = get_package_share_directory(
'nav2_bringup')
47 namespace = LaunchConfiguration(
'namespace')
48 use_sim_time = LaunchConfigAsBool(
'use_sim_time')
49 autostart = LaunchConfigAsBool(
'autostart')
50 graph_filepath = LaunchConfiguration(
'graph')
51 params_file = LaunchConfiguration(
'params_file')
52 use_composition = LaunchConfigAsBool(
'use_composition')
53 use_intra_process_comms = LaunchConfigAsBool(
'use_intra_process_comms')
54 container_name = LaunchConfiguration(
'container_name')
55 container_name_full = (namespace,
'/', container_name)
56 use_respawn = LaunchConfigAsBool(
'use_respawn')
57 log_level = LaunchConfiguration(
'log_level')
58 use_keepout_zones = LaunchConfigAsBool(
'use_keepout_zones')
59 use_speed_zones = LaunchConfigAsBool(
'use_speed_zones')
62 remappings = [(
'/tf',
'tf'), (
'/tf_static',
'tf_static')]
65 param_substitutions = {
'autostart': autostart}
67 yaml_substitutions = {
68 'KEEPOUT_ZONE_ENABLED': use_keepout_zones,
69 'SPEED_ZONE_ENABLED': use_speed_zones,
80 configured_params = ParameterFile(
82 source_file=params_file,
84 param_rewrites=param_substitutions,
85 value_rewrites=yaml_substitutions,
91 stdout_linebuf_envvar = SetEnvironmentVariable(
92 'RCUTILS_LOGGING_BUFFERED_STREAM',
'1'
95 declare_namespace_cmd = DeclareLaunchArgument(
96 'namespace', default_value=
'', description=
'Top-level namespace'
99 declare_use_sim_time_cmd = DeclareLaunchArgument(
101 default_value=
'false',
102 description=
'Use simulation (Gazebo) clock if true',
105 declare_params_file_cmd = DeclareLaunchArgument(
107 default_value=os.path.join(bringup_dir,
'params',
'nav2_params.yaml'),
108 description=
'Full path to the ROS2 parameters file to use for all launched nodes',
111 declare_graph_file_cmd = DeclareLaunchArgument(
113 default_value=
'', description=
'Path to the graph file to load'
116 declare_autostart_cmd = DeclareLaunchArgument(
118 default_value=
'true',
119 description=
'Automatically startup the nav2 stack',
122 declare_use_composition_cmd = DeclareLaunchArgument(
124 default_value=
'False',
125 description=
'Use composed bringup if True',
128 declare_use_intra_process_comms_cmd = DeclareLaunchArgument(
129 'use_intra_process_comms',
130 default_value=
'False',
131 description=
'Whether to use intra process communication',
134 declare_container_name_cmd = DeclareLaunchArgument(
136 default_value=
'nav2_container',
137 description=
'the name of container that nodes will load in if use composition',
140 declare_use_respawn_cmd = DeclareLaunchArgument(
142 default_value=
'False',
143 description=
'Whether to respawn if a node crashes. Applied when composition is disabled.',
146 declare_log_level_cmd = DeclareLaunchArgument(
147 'log_level', default_value=
'info', description=
'log level'
150 declare_use_keepout_zones_cmd = DeclareLaunchArgument(
151 'use_keepout_zones', default_value=
'True',
152 description=
'Whether to enable keepout zones or not'
155 declare_use_speed_zones_cmd = DeclareLaunchArgument(
156 'use_speed_zones', default_value=
'True',
157 description=
'Whether to enable speed zones or not'
160 load_nodes = GroupAction(
161 condition=IfCondition(PythonExpression([
'not ', use_composition])),
163 SetParameter(
'use_sim_time', use_sim_time),
164 PushROSNamespace(namespace=namespace),
166 package=
'nav2_controller',
167 executable=
'controller_server',
171 parameters=[configured_params],
172 arguments=[
'--ros-args',
'--log-level', log_level],
173 remappings=remappings + [(
'cmd_vel',
'cmd_vel_nav')],
176 package=
'nav2_smoother',
177 executable=
'smoother_server',
178 name=
'smoother_server',
182 parameters=[configured_params],
183 arguments=[
'--ros-args',
'--log-level', log_level],
184 remappings=remappings,
187 package=
'nav2_planner',
188 executable=
'planner_server',
189 name=
'planner_server',
193 parameters=[configured_params],
194 arguments=[
'--ros-args',
'--log-level', log_level],
195 remappings=remappings,
198 package=
'nav2_route',
199 executable=
'route_server',
204 parameters=[configured_params, {
'graph_filepath': graph_filepath}],
205 arguments=[
'--ros-args',
'--log-level', log_level],
206 remappings=remappings),
208 package=
'nav2_behaviors',
209 executable=
'behavior_server',
210 name=
'behavior_server',
214 parameters=[configured_params],
215 arguments=[
'--ros-args',
'--log-level', log_level],
216 remappings=remappings + [(
'cmd_vel',
'cmd_vel_nav')],
219 package=
'nav2_bt_navigator',
220 executable=
'bt_navigator',
225 parameters=[configured_params],
226 arguments=[
'--ros-args',
'--log-level', log_level],
227 remappings=remappings,
230 package=
'nav2_waypoint_follower',
231 executable=
'waypoint_follower',
232 name=
'waypoint_follower',
236 parameters=[configured_params],
237 arguments=[
'--ros-args',
'--log-level', log_level],
238 remappings=remappings,
241 package=
'nav2_velocity_smoother',
242 executable=
'velocity_smoother',
243 name=
'velocity_smoother',
247 parameters=[configured_params],
248 arguments=[
'--ros-args',
'--log-level', log_level],
249 remappings=remappings
250 + [(
'cmd_vel',
'cmd_vel_nav')],
253 package=
'nav2_collision_monitor',
254 executable=
'collision_monitor',
255 name=
'collision_monitor',
259 parameters=[configured_params],
260 arguments=[
'--ros-args',
'--log-level', log_level],
261 remappings=remappings,
264 package=
'opennav_docking',
265 executable=
'opennav_docking',
266 name=
'docking_server',
270 parameters=[configured_params],
271 arguments=[
'--ros-args',
'--log-level', log_level],
272 remappings=remappings,
275 package=
'opennav_following',
276 executable=
'opennav_following',
277 name=
'following_server',
281 parameters=[configured_params],
282 arguments=[
'--ros-args',
'--log-level', log_level],
283 remappings=remappings,
288 load_composable_nodes = GroupAction(
289 condition=IfCondition(use_composition),
291 SetParameter(
'use_sim_time', use_sim_time),
292 PushROSNamespace(namespace=namespace),
294 target_container=container_name_full,
295 composable_node_descriptions=[
297 package=
'nav2_controller',
298 plugin=
'nav2_controller::ControllerServer',
299 name=
'controller_server',
300 parameters=[configured_params],
301 remappings=remappings + [(
'cmd_vel',
'cmd_vel_nav')],
302 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
305 package=
'nav2_smoother',
306 plugin=
'nav2_smoother::SmootherServer',
307 name=
'smoother_server',
308 parameters=[configured_params],
309 remappings=remappings,
310 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
313 package=
'nav2_planner',
314 plugin=
'nav2_planner::PlannerServer',
315 name=
'planner_server',
316 parameters=[configured_params],
317 remappings=remappings,
318 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
321 package=
'nav2_route',
322 plugin=
'nav2_route::RouteServer',
324 parameters=[configured_params, {
'graph_filepath': graph_filepath}],
325 remappings=remappings,
326 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
329 package=
'nav2_behaviors',
330 plugin=
'behavior_server::BehaviorServer',
331 name=
'behavior_server',
332 parameters=[configured_params],
333 remappings=remappings + [(
'cmd_vel',
'cmd_vel_nav')],
334 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
337 package=
'nav2_bt_navigator',
338 plugin=
'nav2_bt_navigator::BtNavigator',
340 parameters=[configured_params],
341 remappings=remappings,
342 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
345 package=
'nav2_waypoint_follower',
346 plugin=
'nav2_waypoint_follower::WaypointFollower',
347 name=
'waypoint_follower',
348 parameters=[configured_params],
349 remappings=remappings,
350 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
353 package=
'nav2_velocity_smoother',
354 plugin=
'nav2_velocity_smoother::VelocitySmoother',
355 name=
'velocity_smoother',
356 parameters=[configured_params],
357 remappings=remappings
358 + [(
'cmd_vel',
'cmd_vel_nav')],
359 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
362 package=
'nav2_collision_monitor',
363 plugin=
'nav2_collision_monitor::CollisionMonitor',
364 name=
'collision_monitor',
365 parameters=[configured_params],
366 remappings=remappings,
367 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
370 package=
'opennav_docking',
371 plugin=
'opennav_docking::DockingServer',
372 name=
'docking_server',
373 parameters=[configured_params],
374 remappings=remappings,
375 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
378 package=
'opennav_following',
379 plugin=
'opennav_following::FollowingServer',
380 name=
'following_server',
381 parameters=[configured_params],
382 remappings=remappings,
383 extra_arguments=[{
'use_intra_process_comms': use_intra_process_comms}],
391 ld = LaunchDescription()
394 ld.add_action(stdout_linebuf_envvar)
397 ld.add_action(declare_namespace_cmd)
398 ld.add_action(declare_use_sim_time_cmd)
399 ld.add_action(declare_params_file_cmd)
400 ld.add_action(declare_autostart_cmd)
401 ld.add_action(declare_graph_file_cmd)
402 ld.add_action(declare_use_composition_cmd)
403 ld.add_action(declare_use_intra_process_comms_cmd)
404 ld.add_action(declare_container_name_cmd)
405 ld.add_action(declare_use_respawn_cmd)
406 ld.add_action(declare_log_level_cmd)
407 ld.add_action(declare_use_keepout_zones_cmd)
408 ld.add_action(declare_use_speed_zones_cmd)
410 ld.add_action(load_nodes)
411 ld.add_action(load_composable_nodes)