Nav2 Navigation Stack - kilted  kilted
ROS 2 Navigation Stack
inspection_demo_launch.py
1 # Copyright (c) 2021 Samsung Research America
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 
15 import os
16 from pathlib import Path
17 import tempfile
18 
19 from ament_index_python.packages import get_package_share_directory
20 from launch import LaunchDescription
21 from launch.actions import (AppendEnvironmentVariable, DeclareLaunchArgument, ExecuteProcess,
22  IncludeLaunchDescription, OpaqueFunction, RegisterEventHandler)
23 from launch.conditions import IfCondition
24 from launch.event_handlers import OnShutdown
25 from launch.launch_description_sources import PythonLaunchDescriptionSource
26 from launch.substitutions import Command, LaunchConfiguration, PythonExpression
27 from launch_ros.actions import Node
28 
29 
30 def generate_launch_description() -> LaunchDescription:
31  nav2_bringup_dir = get_package_share_directory('nav2_bringup')
32  sim_dir = get_package_share_directory('nav2_minimal_tb4_sim')
33  desc_dir = get_package_share_directory('nav2_minimal_tb4_description')
34 
35  robot_sdf = os.path.join(desc_dir, 'urdf', 'standard', 'turtlebot4.urdf.xacro')
36  world = os.path.join(sim_dir, 'worlds', 'depot.sdf')
37  map_yaml_file = os.path.join(nav2_bringup_dir, 'maps', 'depot.yaml')
38 
39  # Launch configuration variables
40  use_rviz = LaunchConfiguration('use_rviz')
41  headless = LaunchConfiguration('headless')
42 
43  # Declare the launch arguments
44  declare_use_rviz_cmd = DeclareLaunchArgument(
45  'use_rviz', default_value='True', description='Whether to start RVIZ'
46  )
47 
48  declare_simulator_cmd = DeclareLaunchArgument(
49  'headless', default_value='False', description='Whether to execute gzclient)'
50  )
51 
52  # start the simulation
53  world_sdf = tempfile.mktemp(prefix='nav2_', suffix='.sdf')
54  world_sdf_xacro = ExecuteProcess(
55  cmd=['xacro', '-o', world_sdf, ['headless:=', headless], world])
56  start_gazebo_server_cmd = IncludeLaunchDescription(
57  PythonLaunchDescriptionSource(
58  os.path.join(get_package_share_directory('ros_gz_sim'), 'launch',
59  'gz_sim.launch.py')),
60  launch_arguments={'gz_args': ['-r -s ', world_sdf]}.items())
61 
62  remove_temp_sdf_file = RegisterEventHandler(event_handler=OnShutdown(
63  on_shutdown=[
64  OpaqueFunction(function=lambda _: os.remove(world_sdf))
65  ]))
66 
67  set_env_vars_resources = AppendEnvironmentVariable(
68  'GZ_SIM_RESOURCE_PATH',
69  os.path.join(sim_dir, 'worlds'))
70  start_gazebo_client_cmd = IncludeLaunchDescription(
71  PythonLaunchDescriptionSource(
72  os.path.join(get_package_share_directory('ros_gz_sim'),
73  'launch',
74  'gz_sim.launch.py')
75  ),
76  condition=IfCondition(PythonExpression(
77  ['not ', headless])),
78  launch_arguments={'gz_args': ['-v4 -g ']}.items(),
79  )
80 
81  spawn_robot_cmd = IncludeLaunchDescription(
82  PythonLaunchDescriptionSource(
83  os.path.join(sim_dir, 'launch', 'spawn_tb4.launch.py')),
84  launch_arguments={'use_sim_time': 'True',
85  'robot_sdf': robot_sdf,
86  'x_pose': '-8.0',
87  'y_pose': '0.0',
88  'z_pose': '0.0',
89  'roll': '0.0',
90  'pitch': '0.0',
91  'yaw': '0.0'}.items())
92 
93  start_robot_state_publisher_cmd = Node(
94  package='robot_state_publisher',
95  executable='robot_state_publisher',
96  name='robot_state_publisher',
97  output='screen',
98  parameters=[
99  {'use_sim_time': True, 'robot_description': Command(['xacro', ' ', robot_sdf])}
100  ]
101  )
102 
103  # start the visualization
104  rviz_cmd = IncludeLaunchDescription(
105  PythonLaunchDescriptionSource(
106  os.path.join(nav2_bringup_dir, 'launch', 'rviz_launch.py')
107  ),
108  condition=IfCondition(use_rviz),
109  launch_arguments={'namespace': ''}.items(),
110  )
111 
112  # start navigation
113  bringup_cmd = IncludeLaunchDescription(
114  PythonLaunchDescriptionSource(
115  os.path.join(nav2_bringup_dir, 'launch', 'bringup_launch.py')
116  ),
117  launch_arguments={'map': map_yaml_file}.items(),
118  )
119 
120  # start the demo autonomy task
121  demo_cmd = Node(
122  package='nav2_simple_commander',
123  executable='demo_inspection',
124  emulate_tty=True,
125  output='screen',
126  )
127 
128  set_env_vars_resources2 = AppendEnvironmentVariable(
129  'GZ_SIM_RESOURCE_PATH',
130  str(Path(os.path.join(desc_dir)).parent.resolve()))
131 
132  ld = LaunchDescription()
133  ld.add_action(declare_use_rviz_cmd)
134  ld.add_action(declare_simulator_cmd)
135  ld.add_action(world_sdf_xacro)
136  ld.add_action(remove_temp_sdf_file)
137  ld.add_action(set_env_vars_resources)
138  ld.add_action(set_env_vars_resources2)
139  ld.add_action(start_gazebo_server_cmd)
140  ld.add_action(start_gazebo_client_cmd)
141  ld.add_action(spawn_robot_cmd)
142  ld.add_action(start_robot_state_publisher_cmd)
143  ld.add_action(rviz_cmd)
144  ld.add_action(bringup_cmd)
145  ld.add_action(demo_cmd)
146  return ld