15from ament_index_python
import get_package_share_directory
17from launch.actions
import Shutdown
18from launch
import LaunchDescription
19from launch_ros.actions
import Node
20from launch.actions
import IncludeLaunchDescription
21from launch.launch_description_sources
import PythonLaunchDescriptionSource
22from launch.substitutions
import ThisLaunchFileDir
23from launch.substitutions
import EnvironmentVariable
24from launch.actions
import GroupAction
25from launch.conditions
import IfCondition
26from launch_ros.actions
import PushRosNamespace
27from carma_ros2_utils.launch.get_log_level
import GetLogLevel
28from launch.substitutions
import LaunchConfiguration, PythonExpression
29from launch.actions
import DeclareLaunchArgument
30from launch.actions
import OpaqueFunction
32from tracetools_launch.action
import Trace
34from datetime
import datetime
38from launch
import LaunchDescription, LaunchContext
43 Opaque Function for generating a
'Trace' ROS 2 launch action, which
is dependent on the
44 'ROS_LOG_DIR' EnvironmentVariable
and the
'is_ros2_tracing_enabled' LaunchConfiguration.
46 NOTE: This Opaque Function
is required
in order to evaluate the
'ROS_LOG_DIR' environment
49 log_directory_string = launch.substitutions.EnvironmentVariable('ROS_LOG_DIR').perform(context)
52 condition=IfCondition(LaunchConfiguration(
'is_ros2_tracing_enabled')),
55 base_path = log_directory_string,
56 session_name=
'my-tracing-session-' +
str(datetime.now().strftime(
'%Y-%m-%d_%H%M%S')),
70 system_controller_param_file = os.path.join(
71 get_package_share_directory('system_controller'),
'config/config.yaml')
74 env_log_levels = EnvironmentVariable(
'CARMA_ROS_LOGGING_CONFIG', default_value=
'{ "default_level" : "WARN" }')
77 vehicle_calibration_dir = LaunchConfiguration(
'vehicle_calibration_dir')
78 declare_vehicle_calibration_dir_arg = DeclareLaunchArgument(
79 name =
'vehicle_calibration_dir',
80 default_value =
"/opt/carma/vehicle/calibration",
81 description =
"Path to folder containing vehicle calibration directories"
84 vehicle_config_dir = LaunchConfiguration(
'vehicle_config_dir')
85 declare_vehicle_config_dir_arg = DeclareLaunchArgument(
86 name =
'vehicle_config_dir',
87 default_value =
"/opt/carma/vehicle/config",
88 description =
"Path to vehicle configuration directory populated by carma-config"
91 vehicle_characteristics_param_file = LaunchConfiguration(
'vehicle_characteristics_param_file')
92 declare_vehicle_characteristics_param_file_arg = DeclareLaunchArgument(
93 name =
'vehicle_characteristics_param_file',
94 default_value = [vehicle_calibration_dir,
"/identifiers/UniqueVehicleParams.yaml"],
95 description =
"Path to file containing unique vehicle characteristics"
99 vehicle_config_param_file = LaunchConfiguration(
'vehicle_config_param_file')
100 declare_vehicle_config_param_file_arg = DeclareLaunchArgument(
101 name =
'vehicle_config_param_file',
102 default_value = [vehicle_config_dir,
"/VehicleConfigParams.yaml"],
103 description =
"Path to file contain vehicle configuration parameters"
108 global_params_override_file = LaunchConfiguration(
'global_params_override_file')
109 declare_global_params_override_file_arg = DeclareLaunchArgument(
110 name =
'global_params_override_file',
111 default_value = [vehicle_config_dir,
"/GlobalParamsOverride.yaml"],
112 description =
"Path to global file containing the parameters overwrite"
115 use_sim_time = LaunchConfiguration(
'use_sim_time')
116 declare_use_sim_time_arg = DeclareLaunchArgument(
117 name =
'use_sim_time',
118 default_value =
'False',
119 description =
"True of simulation mode is on"
122 use_real_time_spat_in_sim = LaunchConfiguration(
'use_real_time_spat_in_sim')
123 declare_use_real_time_spat_in_sim_arg = DeclareLaunchArgument(
124 name =
'use_real_time_spat_in_sim',
125 default_value =
'False',
126 description =
"True if SPaT is being published based on wall clock"
130 route_file_folder = LaunchConfiguration(
'route_file_folder')
131 declare_route_file_folder = DeclareLaunchArgument(
132 name =
'route_file_folder',
133 default_value=
'/opt/carma/routes/',
134 description =
'Path of folder containing routes to load'
138 enable_guidance_plugin_validator = LaunchConfiguration(
'enable_guidance_plugin_validator')
139 declare_enable_guidance_plugin_validator = DeclareLaunchArgument(
140 name =
'enable_guidance_plugin_validator',
141 default_value=
'false',
142 description=
'Flag indicating whether the Guidance Plugin Validator node will actively validate guidance strategic, tactical, and control plugins'
146 strategic_plugins_to_validate = LaunchConfiguration(
'strategic_plugins_to_validate')
147 declare_strategic_plugins_to_validate = DeclareLaunchArgument(
148 name =
'strategic_plugins_to_validate',
149 default_value =
'[]',
150 description =
'List of String: Guidance Strategic Plugins that will be validated by the Guidance Plugin Validator Node if enabled'
154 tactical_plugins_to_validate = LaunchConfiguration(
'tactical_plugins_to_validate')
155 declare_tactical_plugins_to_validate = DeclareLaunchArgument(
156 name =
'tactical_plugins_to_validate',
158 description=
'List of String: Guidance Tactical Plugins that will be validated by the Guidance Plugin Validator Node if enabled'
162 control_plugins_to_validate = LaunchConfiguration(
'control_plugins_to_validate')
163 declare_control_plugins_to_validate = DeclareLaunchArgument(
164 name =
'control_plugins_to_validate',
166 description=
'List of String: Guidance Control Plugins that will be validated by the Guidance Plugin Validator Node if enabled'
170 enable_opening_tunnels = LaunchConfiguration(
'enable_opening_tunnels')
171 declare_enable_opening_tunnels = DeclareLaunchArgument(
172 name =
'enable_opening_tunnels',
173 default_value=
'False',
174 description=
'Flag to enable opening http tunnesl to CARMA Cloud'
178 port = LaunchConfiguration(
'port')
179 declare_port = DeclareLaunchArgument(
181 default_value=
"9090",
182 description=
'The default port for rosbridge is 909'
186 load_type = LaunchConfiguration(
'load_type')
187 declare_load_type= DeclareLaunchArgument(name =
'load_type', default_value =
"noupdate")
189 single_pcd_path = LaunchConfiguration(
'single_pcd_path')
190 declare_single_pcd_path = DeclareLaunchArgument(name=
'single_pcd_path', default_value=
"['/opt/carma/maps/pcd_map.pcd']")
192 area = LaunchConfiguration(
'area')
193 declare_area = DeclareLaunchArgument(name=
'area', default_value=
"1x1")
195 arealist_path = LaunchConfiguration(
'arealist_path')
196 declare_arealist_path = DeclareLaunchArgument(name=
'arealist_path', default_value=
"/opt/carma/maps/arealist.txt")
198 vector_map_file = LaunchConfiguration(
'vector_map_file')
199 declare_vector_map_file = DeclareLaunchArgument(name=
'vector_map_file', default_value=
'/opt/carma/maps/vector_map.osm')
201 is_ros2_tracing_enabled = LaunchConfiguration(
'is_ros2_tracing_enabled')
202 declare_is_ros2_tracing_enabled = DeclareLaunchArgument(
203 name=
'is_ros2_tracing_enabled',
204 default_value =
'False',
205 description =
'True if user wants ROS 2 Tracing logs to be generated from CARMA Platform.')
209 is_cp_mot_enabled = LaunchConfiguration(
'is_cp_mot_enabled')
210 declare_is_cp_mot_enabled = DeclareLaunchArgument(
211 name=
'is_cp_mot_enabled',
212 default_value =
'False',
213 description =
'True if user wants Cooperative Perception capability using Multiple Object Tracking to be enabled'
218 is_autoware_lidar_obj_detection_enabled = LaunchConfiguration(
'is_autoware_lidar_obj_detection_enabled')
219 declare_is_autoware_lidar_obj_detection_enabled = DeclareLaunchArgument(
220 name=
'is_autoware_lidar_obj_detection_enabled',
221 default_value =
'False',
222 description =
'True if user wants Autoware Lidar Object Detection to be enabled'
226 ros2_rosbag_launch = GroupAction(
228 IncludeLaunchDescription(
229 PythonLaunchDescriptionSource([ThisLaunchFileDir(),
'/ros2_rosbag.launch.py']),
231 'vehicle_config_dir' : vehicle_config_dir,
232 'vehicle_config_param_file' : vehicle_config_param_file
240 transform_group = GroupAction(
242 PushRosNamespace(EnvironmentVariable(
'CARMA_TF_NS', default_value=
'/')),
243 IncludeLaunchDescription(
244 PythonLaunchDescriptionSource([ThisLaunchFileDir(),
'/transforms.launch.py']),
246 'vehicle_config_param_file' : vehicle_config_param_file,
247 'use_sim_time' : use_sim_time
253 environment_group = GroupAction(
255 PushRosNamespace(EnvironmentVariable(
'CARMA_ENV_NS', default_value=
'environment')),
256 IncludeLaunchDescription(
257 PythonLaunchDescriptionSource([ThisLaunchFileDir(),
'/environment.launch.py']),
259 'subsystem_controller_param_file' : [vehicle_config_dir,
'/SubsystemControllerParams.yaml'],
260 'global_params_override_file' : global_params_override_file,
261 'vehicle_config_param_file' : vehicle_config_param_file,
262 'vehicle_calibration_dir': vehicle_calibration_dir,
263 'vehicle_characteristics_param_file' : vehicle_characteristics_param_file,
264 'vector_map_file' : vector_map_file,
265 'use_sim_time' : use_sim_time,
266 'is_cp_mot_enabled' : is_cp_mot_enabled,
267 'is_autoware_lidar_obj_detection_enabled' : is_autoware_lidar_obj_detection_enabled
273 localization_group = GroupAction(
275 PushRosNamespace(EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
'localization')),
276 IncludeLaunchDescription(
277 PythonLaunchDescriptionSource([ThisLaunchFileDir(),
'/localization.launch.py']),
279 'vehicle_config_param_file' : vehicle_config_param_file,
280 'global_params_override_file' : global_params_override_file,
281 'subsystem_controller_param_file' : [vehicle_config_dir,
'/SubsystemControllerParams.yaml'],
282 'load_type' : load_type,
283 'single_pcd_path' : single_pcd_path,
285 'arealist_path' : arealist_path,
286 'vector_map_file' : vector_map_file,
287 'vehicle_calibration_dir': vehicle_calibration_dir,
288 'use_sim_time' : use_sim_time
294 v2x_group = GroupAction(
296 PushRosNamespace(EnvironmentVariable(
'CARMA_MSG_NS', default_value=
'message')),
297 IncludeLaunchDescription(
298 PythonLaunchDescriptionSource([ThisLaunchFileDir(),
'/message.launch.py']),
300 'vehicle_characteristics_param_file' : vehicle_characteristics_param_file,
301 'global_params_override_file' : global_params_override_file,
302 'vehicle_config_param_file' : vehicle_config_param_file,
303 'enable_opening_tunnels' : enable_opening_tunnels,
304 'subsystem_controller_param_file' : [vehicle_config_dir,
'/SubsystemControllerParams.yaml'],
305 'use_sim_time' : use_sim_time
311 guidance_group = GroupAction(
313 PushRosNamespace(EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
'guidance')),
315 IncludeLaunchDescription(
316 PythonLaunchDescriptionSource([ThisLaunchFileDir(),
'/guidance.launch.py']),
318 'route_file_folder' : route_file_folder,
319 'global_params_override_file' : global_params_override_file,
320 'vehicle_characteristics_param_file' : vehicle_characteristics_param_file,
321 'vehicle_config_param_file' : vehicle_config_param_file,
322 'enable_guidance_plugin_validator' : enable_guidance_plugin_validator,
323 'strategic_plugins_to_validate' : strategic_plugins_to_validate,
324 'tactical_plugins_to_validate' : tactical_plugins_to_validate,
325 'control_plugins_to_validate' : control_plugins_to_validate,
326 'subsystem_controller_param_file' : [vehicle_config_dir,
'/SubsystemControllerParams.yaml'],
327 'use_sim_time' : use_sim_time,
328 'use_real_time_spat_in_sim' : use_real_time_spat_in_sim
334 drivers_group = GroupAction(
336 PushRosNamespace(EnvironmentVariable(
'CARMA_INTR_NS', default_value=
'hardware_interface')),
337 IncludeLaunchDescription(
338 PythonLaunchDescriptionSource([ThisLaunchFileDir(),
'/drivers.launch.py']),
340 'subsystem_controller_param_file' : [vehicle_config_dir,
'/SubsystemControllerParams.yaml'],
341 'vehicle_config_param_file' : vehicle_config_param_file,
342 'global_params_override_file' : global_params_override_file,
343 'use_sim_time' : use_sim_time
349 system_controller = Node(
350 package=
'system_controller',
351 name=
'system_controller',
352 executable=
'system_controller',
354 system_controller_param_file,
355 {
"use_sim_time" : use_sim_time},
356 global_params_override_file],
357 on_exit = Shutdown(),
358 arguments=[
'--ros-args',
'--log-level', GetLogLevel(
'system_controller', env_log_levels)]
361 ui_group = GroupAction(
363 PushRosNamespace(EnvironmentVariable(
'CARMA_UI_NS', default_value=
'ui')),
365 IncludeLaunchDescription(
366 PythonLaunchDescriptionSource([ThisLaunchFileDir(),
'/ui.launch.py']),
374 return LaunchDescription([
375 declare_vehicle_calibration_dir_arg,
376 declare_vehicle_config_dir_arg,
377 declare_vehicle_characteristics_param_file_arg,
378 declare_vehicle_config_param_file_arg,
379 declare_use_sim_time_arg,
380 declare_use_real_time_spat_in_sim_arg,
381 declare_route_file_folder,
382 declare_enable_guidance_plugin_validator,
383 declare_strategic_plugins_to_validate,
384 declare_tactical_plugins_to_validate,
385 declare_control_plugins_to_validate,
386 declare_enable_opening_tunnels,
389 declare_single_pcd_path,
391 declare_arealist_path,
392 declare_vector_map_file,
393 declare_is_ros2_tracing_enabled,
394 declare_is_cp_mot_enabled,
395 declare_is_autoware_lidar_obj_detection_enabled,
396 declare_global_params_override_file_arg,
398 OpaqueFunction(function=create_ros2_tracing_action),
def create_ros2_tracing_action(context, *args, **kwargs)
def generate_launch_description()