15from ament_index_python 
import get_package_share_directory
 
   16from launch.actions 
import Shutdown
 
   17from launch 
import LaunchDescription
 
   18from launch_ros.actions 
import Node
 
   19from launch_ros.actions 
import ComposableNodeContainer
 
   20from launch_ros.descriptions 
import ComposableNode
 
   21from launch.substitutions 
import EnvironmentVariable
 
   22from carma_ros2_utils.launch.get_log_level 
import GetLogLevel
 
   23from carma_ros2_utils.launch.get_current_namespace 
import GetCurrentNamespace
 
   24from launch.substitutions 
import LaunchConfiguration
 
   28from launch.actions 
import IncludeLaunchDescription
 
   29from launch.launch_description_sources 
import PythonLaunchDescriptionSource
 
   30from launch.actions 
import GroupAction
 
   31from launch_ros.actions 
import set_remap
 
   32from launch.actions 
import DeclareLaunchArgument
 
   38    route_file_folder = LaunchConfiguration(
'route_file_folder')
 
   39    vehicle_calibration_dir = LaunchConfiguration(
'vehicle_calibration_dir')
 
   40    vehicle_characteristics_param_file = LaunchConfiguration(
'vehicle_characteristics_param_file')
 
   41    enable_guidance_plugin_validator = LaunchConfiguration(
'enable_guidance_plugin_validator')
 
   42    strategic_plugins_to_validate = LaunchConfiguration(
'strategic_plugins_to_validate')
 
   43    tactical_plugins_to_validate = LaunchConfiguration(
'tactical_plugins_to_validate')
 
   44    control_plugins_to_validate = LaunchConfiguration(
'control_plugins_to_validate')
 
   46    vehicle_config_param_file = LaunchConfiguration(
'vehicle_config_param_file')
 
   48    vehicle_config_dir = LaunchConfiguration(
'vehicle_config_dir')
 
   49    declare_vehicle_config_dir_arg = DeclareLaunchArgument(
 
   50        name = 
'vehicle_config_dir',
 
   51        default_value = 
"/opt/carma/vehicle/config",
 
   52        description = 
"Path to vehicle configuration directory populated by carma-config" 
   57    global_params_override_file = LaunchConfiguration(
'global_params_override_file')
 
   58    declare_global_params_override_file_arg = DeclareLaunchArgument(
 
   59        name = 
'global_params_override_file',
 
   60        default_value = [vehicle_config_dir, 
"/GlobalParamsOverride.yaml"],
 
   61        description = 
"Path to global file containing the parameters overwrite" 
   64    inlanecruising_plugin_file_path = os.path.join(
 
   65        get_package_share_directory(
'inlanecruising_plugin'), 
'config/parameters.yaml')
 
   67    route_following_plugin_file_path = os.path.join(
 
   68        get_package_share_directory(
'route_following_plugin'), 
'config/parameters.yaml')
 
   70    stop_and_wait_plugin_param_file = os.path.join(
 
   71        get_package_share_directory(
'stop_and_wait_plugin'), 
'config/parameters.yaml')
 
   73    light_controlled_intersection_tactical_plugin_param_file = os.path.join(
 
   74        get_package_share_directory(
'light_controlled_intersection_tactical_plugin'), 
'config/parameters.yaml')
 
   76    cooperative_lanechange_param_file = os.path.join(
 
   77        get_package_share_directory(
'cooperative_lanechange'), 
'config/parameters.yaml')
 
   79    platooning_strategic_ihp_param_file = os.path.join(
 
   80        get_package_share_directory(
'platooning_strategic_ihp'), 
'config/parameters.yaml')
 
   82    sci_strategic_plugin_file_path = os.path.join(
 
   83        get_package_share_directory(
'sci_strategic_plugin'), 
'config/parameters.yaml')
 
   85    lci_strategic_plugin_file_path = os.path.join(
 
   86        get_package_share_directory(
'lci_strategic_plugin'), 
'config/parameters.yaml')
 
   88    stop_and_dwell_strategic_plugin_container_file_path = os.path.join(
 
   89        get_package_share_directory(
'stop_and_dwell_strategic_plugin'), 
'config/parameters.yaml')
 
   91    yield_plugin_file_path = os.path.join(
 
   92        get_package_share_directory(
'yield_plugin'), 
'config/parameters.yaml')
 
   94    platoon_tactical_ihp_param_file = os.path.join(
 
   95        get_package_share_directory(
'platooning_tactical_plugin'), 
'config/parameters.yaml')
 
   97    approaching_emergency_vehicle_plugin_param_file = os.path.join(
 
   98        get_package_share_directory(
'approaching_emergency_vehicle_plugin'), 
'config/parameters.yaml')
 
  100    stop_controlled_intersection_tactical_plugin_file_path = os.path.join(
 
  101        get_package_share_directory(
'stop_controlled_intersection_tactical_plugin'), 
'config/parameters.yaml')
 
  103    trajectory_follower_wrapper_param_file = os.path.join(
 
  104        get_package_share_directory(
'trajectory_follower_wrapper'), 
'config/parameters.yaml')
 
  106    env_log_levels = EnvironmentVariable(
'CARMA_ROS_LOGGING_CONFIG', default_value=
'{ "default_level" : "WARN" }')
 
  108    pure_pursuit_tuning_parameters = [vehicle_calibration_dir, 
"/pure_pursuit/calibration.yaml"]
 
  110    unique_vehicle_calibration_params = [vehicle_calibration_dir, 
"/identifiers/UniqueVehicleParams.yaml"]
 
  112    platooning_control_param_file = os.path.join(
 
  113        get_package_share_directory(
'platooning_control'), 
'config/parameters.yaml')
 
  115    carma_inlanecruising_plugin_container = ComposableNodeContainer(
 
  116        package=
'carma_ros2_utils',
 
  117        name=
'carma_lainlanecruising_plugin_container',
 
  118        executable=
'carma_component_container_mt',
 
  119        namespace=GetCurrentNamespace(),
 
  120        composable_node_descriptions=[
 
  122                package=
'inlanecruising_plugin',
 
  123                plugin=
'inlanecruising_plugin::InLaneCruisingPluginNode',
 
  124                name=
'inlanecruising_plugin',
 
  126                    {
'use_intra_process_comms': 
True},
 
  127                    {
'--log-level' : GetLogLevel(
'inlanecruising_plugin', env_log_levels) }
 
  130                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  131                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  132                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  133                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  134                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  135                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  138                    inlanecruising_plugin_file_path,
 
  139                    vehicle_config_param_file,
 
  140                    global_params_override_file
 
  146    carma_route_following_plugin_container = ComposableNodeContainer(
 
  147        package=
'carma_ros2_utils',
 
  148        name=
'carma_route_following_plugin_container',
 
  149        executable=
'carma_component_container_mt',
 
  150        namespace=GetCurrentNamespace(),
 
  151        composable_node_descriptions=[
 
  154                package=
'route_following_plugin',
 
  155                plugin=
'route_following_plugin::RouteFollowingPlugin',
 
  156                name=
'route_following_plugin',
 
  158                    {
'use_intra_process_comms': 
True},
 
  159                    {
'--log-level' : GetLogLevel(
'route_following_plugin', env_log_levels) }
 
  162                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  163                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  164                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  165                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  166                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  167                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  168                    (
"current_velocity", [ EnvironmentVariable(
'CARMA_INTR_NS', default_value=
''), 
"/vehicle/twist" ] ),
 
  169                    (
"maneuver_plan", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/final_maneuver_plan" ] ),
 
  172                    route_following_plugin_file_path,
 
  173                    vehicle_config_param_file,
 
  174                    global_params_override_file
 
  180    carma_approaching_emergency_vehicle_plugin_container = ComposableNodeContainer(
 
  181        package=
'carma_ros2_utils',
 
  182        name=
'carma_approaching_emergency_vehicle_plugin_container',
 
  183        executable=
'carma_component_container_mt',
 
  184        namespace=GetCurrentNamespace(),
 
  185        composable_node_descriptions=[
 
  188                package=
'approaching_emergency_vehicle_plugin',
 
  189                plugin=
'approaching_emergency_vehicle_plugin::ApproachingEmergencyVehiclePlugin',
 
  190                name=
'approaching_emergency_vehicle_plugin',
 
  192                    {
'use_intra_process_comms': 
True},
 
  193                    {
'--log-level' : GetLogLevel(
'approaching_emergency_vehicle_plugin', env_log_levels) }
 
  196                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  197                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  198                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  199                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  200                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  201                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  202                    (
"state", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/state" ] ),
 
  203                    (
"approaching_erv_status", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/approaching_erv_status" ] ),
 
  204                    (
"hazard_light_status", [ EnvironmentVariable(
'CARMA_INTR_NS', default_value=
''), 
"/hazard_light_status" ] ),
 
  205                    (
"current_velocity", [ EnvironmentVariable(
'CARMA_INTR_NS', default_value=
''), 
"/vehicle/twist" ] ),
 
  206                    (
"incoming_bsm", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_bsm" ] ),
 
  207                    (
"georeference", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/map_param_loader/georeference" ] ),
 
  208                    (
"route_state", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route_state" ] ),
 
  209                    (
"outgoing_emergency_vehicle_response", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/outgoing_emergency_vehicle_response" ] ),
 
  210                    (
"incoming_emergency_vehicle_ack", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_emergency_vehicle_ack" ])
 
  213                    approaching_emergency_vehicle_plugin_param_file,
 
  214                    vehicle_characteristics_param_file,
 
  215                    vehicle_config_param_file,
 
  216                    global_params_override_file
 
  222    carma_stop_and_wait_plugin_container = ComposableNodeContainer(
 
  223        package=
'carma_ros2_utils',
 
  224        name=
'carma_stop_and_wait_plugin_container',
 
  225        executable=
'carma_component_container_mt',
 
  226        namespace=GetCurrentNamespace(),
 
  227        composable_node_descriptions=[
 
  230                package=
'stop_and_wait_plugin',
 
  231                plugin=
'stop_and_wait_plugin::StopandWaitNode',
 
  232                name=
'stop_and_wait_plugin',
 
  234                    {
'use_intra_process_comms': 
True},
 
  235                    {
'--log-level' : GetLogLevel(
'stop_and_wait_plugin', env_log_levels) }
 
  238                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  239                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  240                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  241                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  242                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  243                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  246                    stop_and_wait_plugin_param_file,
 
  247                    vehicle_config_param_file,
 
  248                    global_params_override_file
 
  254    carma_sci_strategic_plugin_container = ComposableNodeContainer(
 
  255        package=
'carma_ros2_utils',
 
  256        name=
'carma_sci_strategic_plugin_container',
 
  257        executable=
'carma_component_container_mt',
 
  258        namespace=GetCurrentNamespace(),
 
  259        composable_node_descriptions=[
 
  261                package=
'sci_strategic_plugin',
 
  262                plugin=
'sci_strategic_plugin::SCIStrategicPlugin',
 
  263                name=
'sci_strategic_plugin',
 
  265                    {
'use_intra_process_comms': 
True},
 
  266                    {
'--log-level' : GetLogLevel(
'sci_strategic_plugin', env_log_levels) }
 
  269                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  270                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  271                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  272                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  273                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  274                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  275                    (
"maneuver_plan", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/final_maneuver_plan" ] ),
 
  276                    (
"outgoing_mobility_operation", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/outgoing_mobility_operation" ] ),
 
  277                    (
"incoming_mobility_operation", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_mobility_operation" ] ),
 
  278                    (
"bsm_outbound", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/bsm_outbound" ] ),
 
  279                    (
"current_pose", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/current_pose" ] ),
 
  282                    sci_strategic_plugin_file_path,
 
  283                    vehicle_config_param_file,
 
  284                    global_params_override_file
 
  290    carma_lci_strategic_plugin_container = ComposableNodeContainer(
 
  291        package=
'carma_ros2_utils',
 
  292        name=
'carma_lci_strategic_plugin_container',
 
  293        executable=
'carma_component_container_mt',
 
  294        namespace=GetCurrentNamespace(),
 
  295        composable_node_descriptions=[
 
  297                package=
'lci_strategic_plugin',
 
  298                plugin=
'lci_strategic_plugin::LCIStrategicPlugin',
 
  299                name=
'lci_strategic_plugin',
 
  301                    {
'use_intra_process_comms': 
True},
 
  302                    {
'--log-level' : GetLogLevel(
'lci_strategic_plugin', env_log_levels) }
 
  305                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  306                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  307                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  308                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  309                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  310                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  311                    (
"maneuver_plan", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/final_maneuver_plan" ] ),
 
  312                    (
"outgoing_mobility_operation", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/outgoing_mobility_operation" ] ),
 
  313                    (
"incoming_mobility_operation", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_mobility_operation" ] ),
 
  314                    (
"bsm_outbound", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/bsm_outbound" ] ),
 
  317                    lci_strategic_plugin_file_path,
 
  318                    vehicle_config_param_file,
 
  319                    unique_vehicle_calibration_params,
 
  320                    global_params_override_file
 
  326    carma_stop_controlled_intersection_tactical_plugin_container = ComposableNodeContainer(
 
  327        package=
'carma_ros2_utils',
 
  328        name=
'carma_stop_controlled_intersection_tactical_plugin_container',
 
  329        executable=
'carma_component_container_mt',
 
  330        namespace=GetCurrentNamespace(),
 
  331        composable_node_descriptions=[
 
  333                package=
'stop_controlled_intersection_tactical_plugin',
 
  334                plugin=
'stop_controlled_intersection_tactical_plugin::StopControlledIntersectionTacticalPlugin',
 
  335                name=
'stop_controlled_intersection_tactical_plugin',
 
  337                    {
'use_intra_process_comms': 
True},
 
  338                    {
'--log-level' : GetLogLevel(
'stop_controlled_intersection_tactical_plugin', env_log_levels) }
 
  341                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  342                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  343                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  344                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  345                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  346                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] )
 
  349                    stop_controlled_intersection_tactical_plugin_file_path,
 
  350                    vehicle_config_param_file,
 
  351                    global_params_override_file
 
  357    carma_cooperative_lanechange_plugins_container = ComposableNodeContainer(
 
  358        package=
'carma_ros2_utils',
 
  359        name=
'carma_cooperative_lanechange_plugins_container',
 
  360        executable=
'carma_component_container_mt',
 
  361        namespace=GetCurrentNamespace(),
 
  362        composable_node_descriptions=[
 
  364                package=
'cooperative_lanechange',
 
  365                plugin=
'cooperative_lanechange::CooperativeLaneChangePlugin',
 
  366                name=
'cooperative_lanechange',
 
  368                    {
'use_intra_process_comms': 
True},
 
  369                    {
'--log-level' : GetLogLevel(
'cooperative_lanechange', env_log_levels) }
 
  372                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  373                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  374                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  375                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  376                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  377                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  378                    (
"current_velocity", [ EnvironmentVariable(
'CARMA_INTR_NS', default_value=
''), 
"/vehicle/twist" ] ),
 
  379                    (
"cooperative_lane_change_status", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/cooperative_lane_change_status" ] ),
 
  380                    (
"bsm_outbound", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/bsm_outbound" ] ),
 
  381                    (
"outgoing_mobility_request", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/outgoing_mobility_request" ] ),
 
  382                    (
"incoming_mobility_response", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_mobility_response" ] ),
 
  383                    (
"georeference", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/map_param_loader/georeference" ] ),
 
  384                    (
"current_pose", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/current_pose" ] )
 
  387                    cooperative_lanechange_param_file,
 
  388                    vehicle_characteristics_param_file,
 
  389                    vehicle_config_param_file,
 
  390                    global_params_override_file
 
  396    carma_yield_plugin_container = ComposableNodeContainer(
 
  397        package=
'carma_ros2_utils',
 
  398        name=
'carma_yield_plugin_container',
 
  399        executable=
'carma_component_container_mt',
 
  400        namespace=GetCurrentNamespace(),
 
  401        composable_node_descriptions=[
 
  403                    package=
'yield_plugin',
 
  404                    plugin=
'yield_plugin::YieldPluginNode',
 
  407                    {
'use_intra_process_comms': 
True},
 
  408                    {
'--log-level' : GetLogLevel(
'yield_plugin', env_log_levels) }
 
  411                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  412                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  413                    (
"external_object_predictions", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/external_object_predictions" ] ),
 
  414                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  415                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  416                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  417                    (
"outgoing_mobility_response", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/outgoing_mobility_response" ] ),
 
  418                    (
"incoming_mobility_request", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_mobility_request" ] ),
 
  419                    (
"cooperative_lane_change_status", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/cooperative_lane_change_status" ] ),
 
  420                    (
"georeference", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/map_param_loader/georeference"]),
 
  421                    (
"bsm_outbound", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/bsm_outbound" ] ),
 
  424                    yield_plugin_file_path,
 
  425                    vehicle_config_param_file,
 
  426                    global_params_override_file
 
  432    carma_light_controlled_intersection_plugins_container = ComposableNodeContainer(
 
  433        package=
'carma_ros2_utils',
 
  434        name=
'carma_light_controlled_intersection_plugins_container',
 
  435        executable=
'carma_component_container_mt',
 
  436        namespace=GetCurrentNamespace(),
 
  437        composable_node_descriptions=[
 
  439                package=
'light_controlled_intersection_tactical_plugin',
 
  440                plugin=
'light_controlled_intersection_tactical_plugin::LightControlledIntersectionTransitPluginNode',
 
  441                name=
'light_controlled_intersection_tactical_plugin',
 
  443                    {
'use_intra_process_comms': 
True},
 
  444                    {
'--log-level' : GetLogLevel(
'light_controlled_intersection_tactical_plugin', env_log_levels) }
 
  447                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  448                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  449                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  450                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  451                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  452                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] )
 
  455                    vehicle_config_param_file,
 
  456                    vehicle_characteristics_param_file,
 
  457                    light_controlled_intersection_tactical_plugin_param_file,
 
  458                    global_params_override_file
 
  464    carma_pure_pursuit_wrapper_container = ComposableNodeContainer(
 
  465        package=
'carma_ros2_utils',
 
  466        name=
'carma_pure_pursuit_wrapper_container',
 
  467        executable=
'carma_component_container_mt',
 
  468        namespace=GetCurrentNamespace(),
 
  469        composable_node_descriptions=[
 
  471                    package=
'pure_pursuit_wrapper',
 
  472                    plugin=
'pure_pursuit_wrapper::PurePursuitWrapperNode',
 
  473                    name=
'pure_pursuit_wrapper',
 
  475                    {
'use_intra_process_comms': 
True},
 
  476                    {
'--log-level' : GetLogLevel(
'pure_pursuit_wrapper', env_log_levels) }
 
  479                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  480                    (
"ctrl_raw", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/ctrl_raw" ] ),
 
  481                    (
"pure_pursuit_wrapper/plan_trajectory", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugins/pure_pursuit/plan_trajectory" ] ),
 
  482                    (
"current_pose", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/current_pose" ] ),
 
  483                    (
"vehicle/twist", [ EnvironmentVariable(
'CARMA_INTR_NS', default_value=
''), 
"/vehicle/twist" ] ),
 
  486                    vehicle_characteristics_param_file, 
 
  487                    vehicle_config_param_file,
 
  488                    pure_pursuit_tuning_parameters,
 
  489                    global_params_override_file
 
  495    trajectory_follower_container = ComposableNodeContainer(
 
  496        package=
'carma_ros2_utils',
 
  497        name=
'trajectory_follower_container',
 
  498        executable=
'carma_component_container_mt',
 
  499        namespace=GetCurrentNamespace(),
 
  500        composable_node_descriptions=[
 
  502                package=
'trajectory_follower_nodes',
 
  503                plugin=
'autoware::motion::control::trajectory_follower_nodes::LatLonMuxer',
 
  504                name=
'latlon_muxer_node',
 
  506                    {
'use_intra_process_comms': 
False},
 
  507                    {
'--log-level' : GetLogLevel(
'latlon_muxer', env_log_levels) }
 
  510                      (
"input/lateral/control_cmd", 
"trajectory_follower/lateral/control_cmd"),
 
  511                      (
"input/longitudinal/control_cmd", 
"trajectory_follower/longitudinal/control_cmd"),
 
  512                      (
"output/control_cmd", 
"trajectory_follower/control_cmd")
 
  515                    {
'timeout_thr_sec':0.5},
 
  516                    global_params_override_file
 
  520                package=
'trajectory_follower_nodes',
 
  521                plugin=
'autoware::motion::control::trajectory_follower_nodes::LateralController',
 
  522                name=
'lateral_controller_node',
 
  524                    {
'use_intra_process_comms': 
True},
 
  525                    {
'--log-level' : GetLogLevel(
'lateral_controller', env_log_levels) }
 
  528                      (
"output/lateral/control_cmd", 
"trajectory_follower/lateral/control_cmd"),
 
  529                      (
"input/current_kinematic_state", 
"trajectory_follower/current_kinematic_state"),
 
  530                      (
"input/reference_trajectory",
"trajectory_follower/reference_trajectory" )
 
  533                    [vehicle_calibration_dir,
 
  534                     "/trajectory_follower/lateral_controller_defaults.yaml"],
 
  535                    global_params_override_file
 
  539                package=
'trajectory_follower_nodes',
 
  540                plugin=
'autoware::motion::control::trajectory_follower_nodes::LongitudinalController',
 
  541                name=
'longitudinal_controller_node',
 
  543                    {
'use_intra_process_comms': 
False},
 
  544                    {
'--log-level' : GetLogLevel(
'longitudinal_controller', env_log_levels) }
 
  547                      (
"output/longitudinal/control_cmd", 
"trajectory_follower/longitudinal/control_cmd"),
 
  548                      (
"input/current_trajectory", 
"trajectory_follower/reference_trajectory"),
 
  549                      (
"input/current_state", 
"trajectory_follower/current_kinematic_state")
 
  552                    [vehicle_calibration_dir,
 
  553                     "/trajectory_follower/longitudinal_controller_defaults.yaml"],
 
  554                    global_params_override_file
 
  559    carma_trajectory_follower_wrapper_container = ComposableNodeContainer(
 
  560        package=
'carma_ros2_utils',
 
  561        name=
'carma_trajectory_follower_wrapper_container',
 
  562        executable=
'carma_component_container_mt',
 
  563        namespace=GetCurrentNamespace(),
 
  564        composable_node_descriptions=[
 
  566                    package=
'trajectory_follower_wrapper',
 
  567                    plugin=
'trajectory_follower_wrapper::TrajectoryFollowerWrapperNode',
 
  568                    name=
'trajectory_follower_wrapper',
 
  570                    {
'use_intra_process_comms': 
True},
 
  571                    {
'--log-level' : GetLogLevel(
'trajectory_follower_wrapper', env_log_levels) }
 
  574                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  575                    (
"ctrl_raw", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/ctrl_raw" ] ),
 
  576                    (
"trajectory_follower_wrapper/plan_trajectory", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugins/trajectory_follower_wrapper/plan_trajectory" ] ),
 
  577                    (
"current_pose", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/current_pose" ] ),
 
  578                    (
"vehicle/twist", [ EnvironmentVariable(
'CARMA_INTR_NS', default_value=
''), 
"/vehicle/twist" ] ),
 
  581                    vehicle_characteristics_param_file,
 
  582                    trajectory_follower_wrapper_param_file,
 
  583                    global_params_override_file
 
  589    platooning_strategic_plugin_container = ComposableNodeContainer(
 
  590        package=
'carma_ros2_utils',
 
  591        name=
'platooning_strategic_plugin_container',
 
  592        executable=
'carma_component_container_mt',
 
  593        namespace=GetCurrentNamespace(),
 
  594        composable_node_descriptions=[
 
  596                package=
'platooning_strategic_ihp',
 
  597                plugin=
'platooning_strategic_ihp::Node',
 
  598                name=
'platooning_strategic_ihp_node',
 
  600                    {
'use_intra_process_comms': 
True},
 
  601                    {
'--log-level' : GetLogLevel(
'platooning_strategic_ihp', env_log_levels) }
 
  604                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  605                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  606                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  607                    (
"georeference", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/map_param_loader/georeference" ] ),
 
  608                    (
"outgoing_mobility_response", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/outgoing_mobility_response" ] ),
 
  609                    (
"outgoing_mobility_request", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/outgoing_mobility_request" ] ),
 
  610                    (
"outgoing_mobility_operation", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/outgoing_mobility_operation" ] ),
 
  611                    (
"incoming_mobility_request", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_mobility_request" ] ),
 
  612                    (
"incoming_mobility_response", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_mobility_response" ] ),
 
  613                    (
"incoming_mobility_operation", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_mobility_operation" ] ),
 
  614                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  615                    (
"twist_raw", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/twist_raw" ] ),
 
  616                    (
"platoon_info", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/platoon_info" ] ),
 
  617                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  618                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  619                    (
"current_velocity", [ EnvironmentVariable(
'CARMA_INTR_NS', default_value=
''), 
"/vehicle/twist" ] ),
 
  620                    (
"current_pose", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/current_pose" ] ),
 
  623                    platooning_strategic_ihp_param_file,
 
  624                    vehicle_config_param_file,
 
  625                    global_params_override_file
 
  631    platooning_tactical_plugin_container = ComposableNodeContainer(
 
  632        package=
'carma_ros2_utils',
 
  633        name=
'platooning_tactical_plugin_container',
 
  634        executable=
'carma_component_container_mt',
 
  635        namespace=GetCurrentNamespace(),
 
  636        composable_node_descriptions=[
 
  638                package=
'platooning_tactical_plugin',
 
  639                plugin=
'platooning_tactical_plugin::Node',
 
  640                name=
'platooning_tactical_plugin_node',
 
  642                    {
'use_intra_process_comms': 
True},
 
  643                    {
'--log-level' : GetLogLevel(
'platooning_tactical_plugin', env_log_levels) }
 
  646                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  647                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  648                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  649                    (
"georeference", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/map_param_loader/georeference" ] ),
 
  650                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  651                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  652                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  654                parameters=[platoon_tactical_ihp_param_file,
 
  655                            vehicle_config_param_file,
 
  656                            global_params_override_file]
 
  661    platooning_control_plugin_container = ComposableNodeContainer(
 
  662        package=
'carma_ros2_utils',
 
  663        name=
'platooning_control_container',
 
  664        executable=
'carma_component_container_mt',
 
  665        namespace=GetCurrentNamespace(),
 
  666        composable_node_descriptions=[
 
  668                package=
'platooning_control',
 
  669                plugin=
'platooning_control::PlatooningControlPlugin',
 
  670                name=
'platooning_control',
 
  672                    {
'use_intra_process_comms': 
True},
 
  673                    {
'--log-level' : GetLogLevel(
'platooning_control_plugin', env_log_levels) }
 
  676                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  677                    (
"ctrl_raw", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/ctrl_raw" ] ),
 
  678                    (
"twist_raw", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/twist_raw" ] ),
 
  679                    (
"platooning_control/plan_trajectory", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugins/platooning_control/plan_trajectory" ] ),
 
  680                    (
"current_pose", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/current_pose" ] ),
 
  681                    (
"vehicle/twist", [ EnvironmentVariable(
'CARMA_INTR_NS', default_value=
''), 
"/vehicle/twist" ] ),
 
  683                parameters=[ platooning_control_param_file,
 
  684                            vehicle_config_param_file,
 
  685                            unique_vehicle_calibration_params,
 
  686                            global_params_override_file]
 
  691    carma_stop_and_dwell_strategic_plugin_container = ComposableNodeContainer(
 
  692        package=
'carma_ros2_utils',
 
  693        name=
'carma_stop_and_dwell_strategic_plugin_container',
 
  694        executable=
'carma_component_container_mt',
 
  695        namespace=GetCurrentNamespace(),
 
  696        composable_node_descriptions=[
 
  698                package=
'stop_and_dwell_strategic_plugin',
 
  699                plugin=
'stop_and_dwell_strategic_plugin::StopAndDwellStrategicPlugin',
 
  700                name=
'stop_and_dwell_strategic_plugin',
 
  702                    {
'use_intra_process_comms': 
True},
 
  703                    {
'--log-level' : GetLogLevel(
'stop_and_dwell_strategic_plugin', env_log_levels) }
 
  706                    (
"semantic_map", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/semantic_map" ] ),
 
  707                    (
"map_update", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/map_update" ] ),
 
  708                    (
"roadway_objects", [ EnvironmentVariable(
'CARMA_ENV_NS', default_value=
''), 
"/roadway_objects" ] ),
 
  709                    (
"incoming_spat", [ EnvironmentVariable(
'CARMA_MSG_NS', default_value=
''), 
"/incoming_spat" ] ),
 
  710                    (
"plugin_discovery", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/plugin_discovery" ] ),
 
  711                    (
"route", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/route" ] ),
 
  712                    (
"maneuver_plan", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/final_maneuver_plan" ] ),
 
  713                    (
"state", [ EnvironmentVariable(
'CARMA_GUIDE_NS', default_value=
''), 
"/state" ] ),
 
  714                    (
"current_pose", [ EnvironmentVariable(
'CARMA_LOCZ_NS', default_value=
''), 
"/current_pose" ] ),
 
  717                    stop_and_dwell_strategic_plugin_container_file_path,
 
  718                    vehicle_config_param_file,
 
  719                    global_params_override_file
 
  725    intersection_transit_maneuvering_container = ComposableNodeContainer(
 
  726        package=
'carma_ros2_utils',
 
  727        name=
'intersection_transit_maneuvering_container',
 
  728        executable=
'carma_component_container_mt',
 
  729        namespace=GetCurrentNamespace(),
 
  730        composable_node_descriptions=[
 
  732                package=
'intersection_transit_maneuvering',
 
  733                plugin=
'intersection_transit_maneuvering::IntersectionTransitManeuveringNode',
 
  734                name=
'intersection_transit_maneuvering',
 
  736                    {
'use_intra_process_comms': 
True},
 
  737                    {
'--log-level' : GetLogLevel(
'intersection_transit_maneuvering', env_log_levels) }
 
  741                    vehicle_config_param_file,
 
  742                    global_params_override_file
 
  748    return LaunchDescription([
 
  749        declare_vehicle_config_dir_arg,
 
  750        declare_global_params_override_file_arg,
 
  751        carma_inlanecruising_plugin_container,
 
  752        carma_route_following_plugin_container,
 
  753        carma_approaching_emergency_vehicle_plugin_container,
 
  754        carma_stop_and_wait_plugin_container,
 
  755        carma_sci_strategic_plugin_container,
 
  756        carma_stop_and_dwell_strategic_plugin_container,
 
  757        carma_lci_strategic_plugin_container,
 
  758        carma_stop_controlled_intersection_tactical_plugin_container,
 
  759        carma_cooperative_lanechange_plugins_container,
 
  760        carma_yield_plugin_container,
 
  761        carma_light_controlled_intersection_plugins_container,
 
  762        carma_pure_pursuit_wrapper_container,
 
  763        carma_trajectory_follower_wrapper_container,
 
  765        platooning_tactical_plugin_container,
 
  766        platooning_control_plugin_container,
 
  767        intersection_transit_maneuvering_container,
 
  768        trajectory_follower_container
 
def generate_launch_description()