64 """
65 Launch CARMA System.
66 """
67
68 system_controller_param_file = os.path.join(
69 get_package_share_directory('system_controller'), 'config/config.yaml')
70
71 env_log_levels = EnvironmentVariable('CARMA_ROS_LOGGING_CONFIG', default_value='{ "default_level" : "WARN" }')
72
73
74 vehicle_calibration_dir = LaunchConfiguration('vehicle_calibration_dir')
75 declare_vehicle_calibration_dir_arg = DeclareLaunchArgument(
76 name = 'vehicle_calibration_dir',
77 default_value = "/opt/carma/vehicle/calibration",
78 description = "Path to folder containing vehicle calibration directories"
79 )
80
81 vehicle_config_dir = LaunchConfiguration('vehicle_config_dir')
82 declare_vehicle_config_dir_arg = DeclareLaunchArgument(
83 name = 'vehicle_config_dir',
84 default_value = "/opt/carma/vehicle/config",
85 description = "Path to vehicle configuration directory populated by carma-config"
86 )
87
88 vehicle_characteristics_param_file = LaunchConfiguration('vehicle_characteristics_param_file')
89 declare_vehicle_characteristics_param_file_arg = DeclareLaunchArgument(
90 name = 'vehicle_characteristics_param_file',
91 default_value = [vehicle_calibration_dir, "/identifiers/UniqueVehicleParams.yaml"],
92 description = "Path to file containing unique vehicle characteristics"
93 )
94
95
96 vehicle_config_param_file = LaunchConfiguration('vehicle_config_param_file')
97 declare_vehicle_config_param_file_arg = DeclareLaunchArgument(
98 name = 'vehicle_config_param_file',
99 default_value = [vehicle_config_dir, "/VehicleConfigParams.yaml"],
100 description = "Path to file contain vehicle configuration parameters"
101 )
102
103
104
105 global_params_override_file = LaunchConfiguration('global_params_override_file')
106 declare_global_params_override_file_arg = DeclareLaunchArgument(
107 name = 'global_params_override_file',
108 default_value = [vehicle_config_dir, "/GlobalParamsOverride.yaml"],
109 description = "Path to global file containing the parameters overwrite"
110 )
111
112 use_sim_time = LaunchConfiguration('use_sim_time')
113 declare_use_sim_time_arg = DeclareLaunchArgument(
114 name = 'use_sim_time',
115 default_value = 'False',
116 description = "True of simulation mode is on"
117 )
118
119 use_real_time_spat_in_sim = LaunchConfiguration('use_real_time_spat_in_sim')
120 declare_use_real_time_spat_in_sim_arg = DeclareLaunchArgument(
121 name = 'use_real_time_spat_in_sim',
122 default_value = 'False',
123 description = "True if SPaT is being published based on wall clock"
124 )
125
126
127 route_file_folder = LaunchConfiguration('route_file_folder')
128 declare_route_file_folder = DeclareLaunchArgument(
129 name = 'route_file_folder',
130 default_value='/opt/carma/routes/',
131 description = 'Path of folder containing routes to load'
132 )
133
134
135 enable_guidance_plugin_validator = LaunchConfiguration('enable_guidance_plugin_validator')
136 declare_enable_guidance_plugin_validator = DeclareLaunchArgument(
137 name = 'enable_guidance_plugin_validator',
138 default_value='false',
139 description='Flag indicating whether the Guidance Plugin Validator node will actively validate guidance strategic, tactical, and control plugins'
140 )
141
142
143 strategic_plugins_to_validate = LaunchConfiguration('strategic_plugins_to_validate')
144 declare_strategic_plugins_to_validate = DeclareLaunchArgument(
145 name = 'strategic_plugins_to_validate',
146 default_value = '[]',
147 description = 'List of String: Guidance Strategic Plugins that will be validated by the Guidance Plugin Validator Node if enabled'
148 )
149
150
151 tactical_plugins_to_validate = LaunchConfiguration('tactical_plugins_to_validate')
152 declare_tactical_plugins_to_validate = DeclareLaunchArgument(
153 name = 'tactical_plugins_to_validate',
154 default_value='[]',
155 description='List of String: Guidance Tactical Plugins that will be validated by the Guidance Plugin Validator Node if enabled'
156 )
157
158
159 control_plugins_to_validate = LaunchConfiguration('control_plugins_to_validate')
160 declare_control_plugins_to_validate = DeclareLaunchArgument(
161 name = 'control_plugins_to_validate',
162 default_value= '[]',
163 description='List of String: Guidance Control Plugins that will be validated by the Guidance Plugin Validator Node if enabled'
164 )
165
166
167 enable_opening_tunnels = LaunchConfiguration('enable_opening_tunnels')
168 declare_enable_opening_tunnels = DeclareLaunchArgument(
169 name = 'enable_opening_tunnels',
170 default_value= 'False',
171 description='Flag to enable opening http tunnesl to CARMA Cloud'
172 )
173
174
175 port = LaunchConfiguration('port')
176 declare_port = DeclareLaunchArgument(
177 name = 'port',
178 default_value= "9090",
179 description='The default port for rosbridge is 909'
180 )
181
182
183 load_type = LaunchConfiguration('load_type')
184 declare_load_type= DeclareLaunchArgument(name = 'load_type', default_value = "noupdate")
185
186 single_pcd_path = LaunchConfiguration('single_pcd_path')
187 declare_single_pcd_path = DeclareLaunchArgument(name='single_pcd_path', default_value="['/opt/carma/maps/pcd_map.pcd']")
188
189 area = LaunchConfiguration('area')
190 declare_area = DeclareLaunchArgument(name='area', default_value="1x1")
191
192 arealist_path = LaunchConfiguration('arealist_path')
193 declare_arealist_path = DeclareLaunchArgument(name='arealist_path', default_value="/opt/carma/maps/arealist.txt")
194
195 vector_map_file = LaunchConfiguration('vector_map_file')
196 declare_vector_map_file = DeclareLaunchArgument(name='vector_map_file', default_value='/opt/carma/maps/vector_map.osm')
197
198 is_ros2_tracing_enabled = LaunchConfiguration('is_ros2_tracing_enabled')
199 declare_is_ros2_tracing_enabled = DeclareLaunchArgument(
200 name='is_ros2_tracing_enabled',
201 default_value = 'False',
202 description = 'True if user wants ROS 2 Tracing logs to be generated from CARMA Platform.')
203
204
205
206 is_cp_mot_enabled = LaunchConfiguration('is_cp_mot_enabled')
207 declare_is_cp_mot_enabled = DeclareLaunchArgument(
208 name='is_cp_mot_enabled',
209 default_value = 'False',
210 description = 'True if user wants Cooperative Perception capability using Multiple Object Tracking to be enabled'
211 )
212
213
214
215 is_autoware_lidar_obj_detection_enabled = LaunchConfiguration('is_autoware_lidar_obj_detection_enabled')
216 declare_is_autoware_lidar_obj_detection_enabled = DeclareLaunchArgument(
217 name='is_autoware_lidar_obj_detection_enabled',
218 default_value = 'False',
219 description = 'True if user wants Autoware Lidar Object Detection to be enabled'
220 )
221
222
223 ros2_rosbag_launch = GroupAction(
224 actions=[
225 IncludeLaunchDescription(
226 PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/ros2_rosbag.launch.py']),
227 launch_arguments = {
228 'vehicle_config_dir' : vehicle_config_dir,
229 'vehicle_config_param_file' : vehicle_config_param_file
230 }.items()
231 )
232 ]
233 )
234
235
236
237 transform_group = GroupAction(
238 actions=[
239 PushRosNamespace(EnvironmentVariable('CARMA_TF_NS', default_value='/')),
240 IncludeLaunchDescription(
241 PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/transforms.launch.py']),
242 launch_arguments = {
243 'vehicle_config_param_file' : vehicle_config_param_file,
244 'use_sim_time' : use_sim_time
245 }.items()
246 ),
247 ]
248 )
249
250 environment_group = GroupAction(
251 actions=[
252 PushRosNamespace(EnvironmentVariable('CARMA_ENV_NS', default_value='environment')),
253 IncludeLaunchDescription(
254 PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/environment.launch.py']),
255 launch_arguments = {
256 'subsystem_controller_param_file' : [vehicle_config_dir, '/SubsystemControllerParams.yaml'],
257 'global_params_override_file' : global_params_override_file,
258 'vehicle_config_param_file' : vehicle_config_param_file,
259 'vehicle_calibration_dir': vehicle_calibration_dir,
260 'vehicle_characteristics_param_file' : vehicle_characteristics_param_file,
261 'vector_map_file' : vector_map_file,
262 'use_sim_time' : use_sim_time,
263 'is_cp_mot_enabled' : is_cp_mot_enabled,
264 'is_autoware_lidar_obj_detection_enabled' : is_autoware_lidar_obj_detection_enabled
265 }.items()
266 ),
267 ]
268 )
269
270 localization_group = GroupAction(
271 actions=[
272 PushRosNamespace(EnvironmentVariable('CARMA_LOCZ_NS', default_value='localization')),
273 IncludeLaunchDescription(
274 PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/localization.launch.py']),
275 launch_arguments = {
276 'vehicle_config_param_file' : vehicle_config_param_file,
277 'global_params_override_file' : global_params_override_file,
278 'subsystem_controller_param_file' : [vehicle_config_dir, '/SubsystemControllerParams.yaml'],
279 'load_type' : load_type,
280 'single_pcd_path' : single_pcd_path,
281 'area' : area,
282 'arealist_path' : arealist_path,
283 'vector_map_file' : vector_map_file,
284 'vehicle_calibration_dir': vehicle_calibration_dir,
285 'use_sim_time' : use_sim_time
286 }.items()
287 )
288 ]
289 )
290
291 v2x_group = GroupAction(
292 actions=[
293 PushRosNamespace(EnvironmentVariable('CARMA_MSG_NS', default_value='message')),
294 IncludeLaunchDescription(
295 PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/message.launch.py']),
296 launch_arguments = {
297 'vehicle_characteristics_param_file' : vehicle_characteristics_param_file,
298 'global_params_override_file' : global_params_override_file,
299 'vehicle_config_param_file' : vehicle_config_param_file,
300 'enable_opening_tunnels' : enable_opening_tunnels,
301 'subsystem_controller_param_file' : [vehicle_config_dir, '/SubsystemControllerParams.yaml'],
302 'use_sim_time' : use_sim_time
303 }.items()
304 ),
305 ]
306 )
307
308 guidance_group = GroupAction(
309 actions=[
310 PushRosNamespace(EnvironmentVariable('CARMA_GUIDE_NS', default_value='guidance')),
311
312 IncludeLaunchDescription(
313 PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/guidance.launch.py']),
314 launch_arguments={
315 'route_file_folder' : route_file_folder,
316 'global_params_override_file' : global_params_override_file,
317 'vehicle_characteristics_param_file' : vehicle_characteristics_param_file,
318 'vehicle_config_param_file' : vehicle_config_param_file,
319 'enable_guidance_plugin_validator' : enable_guidance_plugin_validator,
320 'strategic_plugins_to_validate' : strategic_plugins_to_validate,
321 'tactical_plugins_to_validate' : tactical_plugins_to_validate,
322 'control_plugins_to_validate' : control_plugins_to_validate,
323 'subsystem_controller_param_file' : [vehicle_config_dir, '/SubsystemControllerParams.yaml'],
324 'use_sim_time' : use_sim_time,
325 'use_real_time_spat_in_sim' : use_real_time_spat_in_sim
326 }.items()
327 ),
328 ]
329 )
330
331 drivers_group = GroupAction(
332 actions=[
333 PushRosNamespace(EnvironmentVariable('CARMA_INTR_NS', default_value='hardware_interface')),
334 IncludeLaunchDescription(
335 PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/drivers.launch.py']),
336 launch_arguments = {
337 'subsystem_controller_param_file' : [vehicle_config_dir, '/SubsystemControllerParams.yaml'],
338 'vehicle_config_param_file' : vehicle_config_param_file,
339 'global_params_override_file' : global_params_override_file,
340 'use_sim_time' : use_sim_time
341 }.items()
342 ),
343 ]
344 )
345
346 system_controller = Node(
347 package='system_controller',
348 name='system_controller',
349 executable='system_controller',
350 parameters=[
351 system_controller_param_file,
352 {"use_sim_time" : use_sim_time},
353 global_params_override_file],
354 on_exit = Shutdown(),
355 arguments=['--ros-args', '--log-level', GetLogLevel('system_controller', env_log_levels)]
356 )
357
358 ui_group = GroupAction(
359 actions=[
360 PushRosNamespace(EnvironmentVariable('CARMA_UI_NS', default_value='ui')),
361
362 IncludeLaunchDescription(
363 PythonLaunchDescriptionSource([ThisLaunchFileDir(), '/ui.launch.py']),
364 launch_arguments={
365 'port' : port
366 }.items()
367 ),
368 ]
369 )
370
371 return LaunchDescription([
372 declare_vehicle_calibration_dir_arg,
373 declare_vehicle_config_dir_arg,
374 declare_vehicle_characteristics_param_file_arg,
375 declare_vehicle_config_param_file_arg,
376 declare_use_sim_time_arg,
377 declare_use_real_time_spat_in_sim_arg,
378 declare_route_file_folder,
379 declare_enable_guidance_plugin_validator,
380 declare_strategic_plugins_to_validate,
381 declare_tactical_plugins_to_validate,
382 declare_control_plugins_to_validate,
383 declare_enable_opening_tunnels,
384 declare_port,
385 declare_load_type,
386 declare_single_pcd_path,
387 declare_area,
388 declare_arealist_path,
389 declare_vector_map_file,
390 declare_is_ros2_tracing_enabled,
391 declare_is_cp_mot_enabled,
392 declare_is_autoware_lidar_obj_detection_enabled,
393 declare_global_params_override_file_arg,
394 ros2_rosbag_launch,
395 OpaqueFunction(function=create_ros2_tracing_action),
396 drivers_group,
397 transform_group,
398 environment_group,
399 localization_group,
400 v2x_group,
401 guidance_group,
402 ui_group,
403 system_controller
404 ])
def generate_launch_description()