diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 451ade3771f61..45fc1dd5176d6 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,9 +1,9 @@
### Automatically generated from package.xml ###
common/autoware_ad_api_specs/** isamu.takagi@tier4.jp ryohsuke.mitsudome@tier4.jp
common/autoware_auto_common/** opensource@apex.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
-common/autoware_perception_rviz_plugin/** opensource@apex.ai satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taiki.tanaka@tier4.jp takeshi.miura@tier4.jp yoshi.ri@tier4.jp
common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/** ahmed.ebrahim@leodrive.ai
common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/** khalil@leodrive.ai
+common/autoware_perception_rviz_plugin/** opensource@apex.ai satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taiki.tanaka@tier4.jp takeshi.miura@tier4.jp yoshi.ri@tier4.jp
common/autoware_point_types/** taichi.higashide@tier4.jp
common/autoware_testing/** adam.dabrowski@robotec.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
common/bag_time_manager_rviz_plugin/** taiki.tanaka@tier4.jp
@@ -44,23 +44,24 @@ common/time_utils/** christopherj.ho@gmail.com shumpei.wakabayashi@tier4.jp tomo
common/traffic_light_recognition_marker_publisher/** shumpei.wakabayashi@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp
common/traffic_light_utils/** kotaro.uetake@tier4.jp satoshi.ota@tier4.jp shunsuke.miura@tier4.jp
common/tvm_utility/** ambroise.vincent@arm.com xinyu.wang@tier4.jp
-control/autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp
+control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp
+control/autoware_control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+control/autoware_external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
+control/autoware_joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
+control/autoware_lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp zulfaqar.azmi@tier4.jp
+control/autoware_mpc_lateral_controller/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+control/autoware_pid_longitudinal_controller/** mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+control/autoware_smart_mpc_trajectory_follower/** kosuke.takeuchi@tier4.jp masayuki.aino@proxima-ai-tech.com takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+control/autoware_vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp
control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
-control/control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
-control/external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
-control/joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
-control/lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp
-control/mpc_lateral_controller/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
control/obstacle_collision_checker/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
-control/operation_mode_transition_manager/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp
-control/pid_longitudinal_controller/** mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+control/operation_mode_transition_manager/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
control/predicted_path_checker/** berkay@leodrive.ai
-control/pure_pursuit/** takamasa.horibe@tier4.jp
-control/shift_decider/** takamasa.horibe@tier4.jp
-control/smart_mpc_trajectory_follower/** masayuki.aino@proxima-ai-tech.com
-control/trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
-control/trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
-control/vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp
+control/autoware_smart_mpc_trajectory_follower/** masayuki.aino@proxima-ai-tech.com
+control/autoware_trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+control/pure_pursuit/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+control/shift_decider/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+control/autoware_trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
evaluator/control_evaluator/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp
evaluator/diagnostic_converter/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp takamasa.horibe@tier4.jp
evaluator/kinematic_evaluator/** dominik.jargot@robotec.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
@@ -70,7 +71,7 @@ evaluator/planning_evaluator/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.j
launch/tier4_autoware_api_launch/** isamu.takagi@tier4.jp ryohsuke.mitsudome@tier4.jp
launch/tier4_control_launch/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
launch/tier4_localization_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
-launch/tier4_map_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryohsuke.mitsudome@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
+launch/tier4_map_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
launch/tier4_perception_launch/** shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
launch/tier4_planning_launch/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp zulfaqar.azmi@tier4.jp
launch/tier4_sensing_launch/** yukihiro.saito@tier4.jp
@@ -99,14 +100,15 @@ localization/yabloc/yabloc_monitor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tie
localization/yabloc/yabloc_particle_filter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
localization/yabloc/yabloc_pose_initializer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
map/map_height_fitter/** anh.nguyen.2@tier4.jp isamu.takagi@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
-map/map_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryohsuke.mitsudome@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
+map/map_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
map/map_projection_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
map/map_tf_generator/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
-map/util/lanelet2_map_preprocessor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryohsuke.mitsudome@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
+map/util/lanelet2_map_preprocessor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
+perception/autoware_crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp
+perception/autoware_map_based_prediction/** kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yoshi.ri@tier4.jp
perception/bytetrack/** manato.hirabayashi@tier4.jp yoshi.ri@tier4.jp
perception/cluster_merger/** dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp
perception/compare_map_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp yukihiro.saito@tier4.jp
-perception/crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp
perception/detected_object_feature_remover/** tomoya.kimura@tier4.jp
perception/detected_object_validation/** dai.nguyen@tier4.jp shintaro.tomie@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
perception/detection_by_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
@@ -119,7 +121,7 @@ perception/lidar_apollo_segmentation_tvm/** ambroise.vincent@arm.com xinyu.wang@
perception/lidar_apollo_segmentation_tvm_nodes/** ambroise.vincent@arm.com xinyu.wang@tier4.jp
perception/lidar_centerpoint/** kenzo.lobos@tier4.jp koji.minoda@tier4.jp
perception/lidar_centerpoint_tvm/** carl.liu@autocore.ai xinyu.wang@tier4.jp
-perception/map_based_prediction/** kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yoshi.ri@tier4.jp
+perception/lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp
perception/multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
perception/object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
perception/object_range_splitter/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
@@ -144,68 +146,81 @@ perception/traffic_light_map_based_detector/** shunsuke.miura@tier4.jp tao.zhong
perception/traffic_light_multi_camera_fusion/** shunsuke.miura@tier4.jp tao.zhong@tier4.jp
perception/traffic_light_occlusion_predictor/** shunsuke.miura@tier4.jp tao.zhong@tier4.jp
perception/traffic_light_visualization/** tao.zhong@tier4.jp yukihiro.saito@tier4.jp
+planning/autoware_behavior_path_avoidance_by_lane_change_module/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_behavior_path_dynamic_obstacle_avoidance_module/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp
planning/autoware_behavior_path_external_request_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_behavior_path_planner_common/** daniel.sanchez@tier4.jp fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_path_static_obstacle_avoidance_module/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp
planning/autoware_behavior_velocity_planner/** kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp
planning/autoware_behavior_velocity_template_module/** daniel.sanchez@tier4.jp
+planning/autoware_behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
planning/autoware_behavior_velocity_virtual_traffic_light_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_costmap_generator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+planning/autoware_external_velocity_limit_selector/** satoshi.ota@tier4.jp shinnosuke.hirakawa@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+planning/autoware_freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+planning/autoware_mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+planning/autoware_objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_path_optimizer/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
+planning/autoware_path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp
planning/autoware_planning_test_manager/** kyoichi.sugahara@tier4.jp takamasa.horibe@tier4.jp
+planning/autoware_planning_topic_converter/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp
+planning/autoware_planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp
planning/autoware_remaining_distance_time_calculator/** ahmed.ebrahim@leodrive.ai
+planning/autoware_rtc_interface/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp taiki.tanaka@tier4.jp
+planning/autoware_scenario_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
planning/autoware_static_centerline_generator/** kosuke.takeuchi@tier4.jp takayuki.murooka@tier4.jp
-planning/behavior_path_avoidance_by_lane_change_module/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
-planning/behavior_path_avoidance_module/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
-planning/behavior_path_dynamic_avoidance_module/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp
-planning/behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_surround_obstacle_checker/** go.sakayori@tier4.jp satoshi.ota@tier4.jp
+planning/autoware_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@tier4.jp satoshi.ota@tier4.jp takamasa.horibe@tier4.jp
planning/behavior_path_planner/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
-planning/behavior_path_planner_common/** daniel.sanchez@tier4.jp fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp
-planning/behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp
-planning/behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp
+planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
planning/behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_crosswalk_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yuki.takagi@tier4.jp
+planning/autoware_behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_crosswalk_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yuki.takagi@tier4.jp
planning/behavior_velocity_detection_area_module/** kyoichi.sugahara@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
planning/behavior_velocity_dynamic_obstacle_stop_module/** mamoru.sobue@tier4.jp maxime.clement@tier4.jp
-planning/behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
planning/behavior_velocity_no_drivable_lane_module/** ahmed.ebrahim@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
+planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp
-planning/behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp
-planning/behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
-planning/costmap_generator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
-planning/external_velocity_limit_selector/** satoshi.ota@tier4.jp shinnosuke.hirakawa@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp
-planning/freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
-planning/freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
-planning/mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
-planning/motion_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@tier4.jp satoshi.ota@tier4.jp takamasa.horibe@tier4.jp
-planning/objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp zulfaqar.azmi@tier4.jp
-planning/obstacle_avoidance_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
-planning/obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp
+planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/** maxime.clement@tier4.jp
+planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
+planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp
+planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp
+planning/autoware_objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp
planning/obstacle_stop_planner/** berkay@leodrive.ai bnk@leodrive.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp
-planning/obstacle_velocity_limiter/** maxime.clement@tier4.jp
-planning/path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp
planning/planning_test_utils/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp zulfaqar.azmi@tier4.jp
-planning/planning_topic_converter/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp
planning/planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp
-planning/route_handler/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp zulfaqar.azmi@tier4.jp
+planning/autoware_route_handler/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp zulfaqar.azmi@tier4.jp
planning/rtc_interface/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp taiki.tanaka@tier4.jp
planning/rtc_replayer/** fumiya.watanabe@tier4.jp taiki.tanaka@tier4.jp
-planning/sampling_based_planner/bezier_sampler/** maxime.clement@tier4.jp
-planning/sampling_based_planner/frenet_planner/** maxime.clement@tier4.jp
-planning/sampling_based_planner/path_sampler/** maxime.clement@tier4.jp
-planning/sampling_based_planner/sampler_common/** maxime.clement@tier4.jp
-planning/scenario_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
-planning/surround_obstacle_checker/** satoshi.ota@tier4.jp
+planning/sampling_based_planner/autoware_bezier_sampler/** maxime.clement@tier4.jp
+planning/sampling_based_planner/autoware_frenet_planner/** maxime.clement@tier4.jp
+planning/sampling_based_planner/autoware_path_sampler/** maxime.clement@tier4.jp
+planning/sampling_based_planner/autoware_sampler_common/** maxime.clement@tier4.jp
sensing/gnss_poser/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
sensing/image_diagnostics/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp
sensing/image_transport_decompressor/** kenzo.lobos@tier4.jp yukihiro.saito@tier4.jp
sensing/imu_corrector/** koji.minoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp
sensing/livox/livox_tag_filter/** kenzo.lobos@tier4.jp ryohsuke.mitsudome@tier4.jp
-sensing/pointcloud_preprocessor/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp kenzo.lobos@tier4.jp kyoichi.sugahara@tier4.jp shunsuke.miura@tier4.jp yihsiang.fang@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
+sensing/pointcloud_preprocessor/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp david.wong@tier4.jp kenzo.lobos@tier4.jp kyoichi.sugahara@tier4.jp melike@leodrive.ai shunsuke.miura@tier4.jp yihsiang.fang@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp
sensing/radar_scan_to_pointcloud2/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp
sensing/radar_static_pointcloud_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp
sensing/radar_threshold_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp
@@ -239,10 +254,10 @@ system/system_monitor/** fumihito.ito@tier4.jp tetsuhiro.kawaguchi@tier4.jp
system/topic_state_monitor/** ryohsuke.mitsudome@tier4.jp
system/velodyne_monitor/** fumihito.ito@tier4.jp
tools/reaction_analyzer/** berkay@leodrive.ai
-vehicle/accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp
-vehicle/external_cmd_converter/** takamasa.horibe@tier4.jp
-vehicle/raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp
-vehicle/steer_offset_estimator/** taiki.tanaka@tier4.jp
-vehicle/vehicle_info_util/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp
+vehicle/autoware_accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp
+vehicle/autoware_external_cmd_converter/** eiki.nagata.2@tier4.jp takamasa.horibe@tier4.jp
+vehicle/autoware_raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp
+vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp
+vehicle/autoware_vehicle_info_utils/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp
### Copied from .github/CODEOWNERS-manual ###
diff --git a/.github/workflows/build-and-test-differential.yaml b/.github/workflows/build-and-test-differential.yaml
index fb98d321fde88..6745976aa543a 100644
--- a/.github/workflows/build-and-test-differential.yaml
+++ b/.github/workflows/build-and-test-differential.yaml
@@ -74,40 +74,3 @@ jobs:
- name: Show disk space after the tasks
run: df -h
-
- clang-tidy-differential:
- runs-on: ubuntu-latest
- container: ghcr.io/autowarefoundation/autoware:latest-prebuilt-cuda
- steps:
- - name: Check out repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Show disk space before the tasks
- run: df -h
-
- - name: Remove exec_depend
- uses: autowarefoundation/autoware-github-actions/remove-exec-depend@v1
-
- - name: Get modified packages
- id: get-modified-packages
- uses: autowarefoundation/autoware-github-actions/get-modified-packages@v1
-
- - name: Get modified files
- id: get-modified-files
- uses: tj-actions/changed-files@v35
- with:
- files: |
- **/*.cpp
- **/*.hpp
-
- - name: Run clang-tidy
- if: ${{ steps.get-modified-files.outputs.all_changed_files != '' }}
- uses: autowarefoundation/autoware-github-actions/clang-tidy@v1
- with:
- rosdistro: humble
- target-packages: ${{ steps.get-modified-packages.outputs.modified-packages }}
- target-files: ${{ steps.get-modified-files.outputs.all_changed_files }}
- clang-tidy-config-url: https://raw.githubusercontent.com/autowarefoundation/autoware/main/.clang-tidy
- build-depends-repos: build_depends.repos
diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml
index a469e7a33d190..85c531a02fca9 100644
--- a/.github/workflows/build-and-test.yaml
+++ b/.github/workflows/build-and-test.yaml
@@ -9,7 +9,7 @@ on:
jobs:
build-and-test:
if: ${{ github.event_name != 'push' || github.ref_name == github.event.repository.default_branch }}
- runs-on: ubuntu-latest
+ runs-on: [self-hosted, linux, X64]
container: ${{ matrix.container }}${{ matrix.container-suffix }}
strategy:
fail-fast: false
diff --git a/.github/workflows/clang-tidy-differential.yaml b/.github/workflows/clang-tidy-differential.yaml
new file mode 100644
index 0000000000000..26c5314d4b119
--- /dev/null
+++ b/.github/workflows/clang-tidy-differential.yaml
@@ -0,0 +1,53 @@
+name: clang-tidy-differential
+
+on:
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ - labeled
+
+jobs:
+ prevent-no-label-execution:
+ uses: autowarefoundation/autoware-github-actions/.github/workflows/prevent-no-label-execution.yaml@v1
+ with:
+ label: tag:run-clang-tidy-differential
+
+ clang-tidy-differential:
+ needs: prevent-no-label-execution
+ if: ${{ needs.prevent-no-label-execution.outputs.run == 'true' }}
+ runs-on: ubuntu-latest
+ container: ghcr.io/autowarefoundation/autoware:latest-prebuilt-cuda
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Show disk space before the tasks
+ run: df -h
+
+ - name: Remove exec_depend
+ uses: autowarefoundation/autoware-github-actions/remove-exec-depend@v1
+
+ - name: Get modified packages
+ id: get-modified-packages
+ uses: autowarefoundation/autoware-github-actions/get-modified-packages@v1
+
+ - name: Get modified files
+ id: get-modified-files
+ uses: tj-actions/changed-files@v35
+ with:
+ files: |
+ **/*.cpp
+ **/*.hpp
+
+ - name: Run clang-tidy
+ if: ${{ steps.get-modified-files.outputs.all_changed_files != '' }}
+ uses: autowarefoundation/autoware-github-actions/clang-tidy@v1
+ with:
+ rosdistro: humble
+ target-packages: ${{ steps.get-modified-packages.outputs.modified-packages }}
+ target-files: ${{ steps.get-modified-files.outputs.all_changed_files }}
+ clang-tidy-config-url: https://raw.githubusercontent.com/autowarefoundation/autoware/main/.clang-tidy
+ build-depends-repos: build_depends.repos
diff --git a/.github/workflows/cppcheck-all.yaml b/.github/workflows/cppcheck-all.yaml
deleted file mode 100644
index db3bd5d259895..0000000000000
--- a/.github/workflows/cppcheck-all.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-name: cppcheck-all
-
-on:
- pull_request:
- schedule:
- - cron: 0 0 * * *
- workflow_dispatch:
-
-jobs:
- cppcheck-all:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v2
-
- - name: Install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y build-essential cmake git libpcre3-dev
-
- # cppcheck from apt does not yet support --check-level args, and thus install from source
- - name: Install Cppcheck from source
- run: |
- mkdir /tmp/cppcheck
- git clone https://github.com/danmar/cppcheck.git /tmp/cppcheck
- cd /tmp/cppcheck
- git checkout 2.14.1
- mkdir build
- cd build
- cmake ..
- make -j $(nproc)
- sudo make install
-
- - name: Run Cppcheck on all files
- continue-on-error: true
- id: cppcheck
- run: |
- cppcheck --enable=all --inconclusive --check-level=exhaustive --error-exitcode=1 --xml . 2> cppcheck-report.xml
- shell: bash
-
- - name: Count errors by error ID and severity
- run: |
- #!/bin/bash
- temp_file=$(mktemp)
- grep -oP '(?<=id=")[^"]+" severity="[^"]+' cppcheck-report.xml | sed 's/" severity="/,/g' > "$temp_file"
- echo "Error counts by error ID and severity:"
- sort "$temp_file" | uniq -c
- rm "$temp_file"
- shell: bash
-
- - name: Upload Cppcheck report
- uses: actions/upload-artifact@v2
- with:
- name: cppcheck-report
- path: cppcheck-report.xml
-
- - name: Fail the job if Cppcheck failed
- if: steps.cppcheck.outcome == 'failure'
- run: exit 1
diff --git a/.github/workflows/cppcheck-daily.yaml b/.github/workflows/cppcheck-daily.yaml
new file mode 100644
index 0000000000000..6a18bfb988b08
--- /dev/null
+++ b/.github/workflows/cppcheck-daily.yaml
@@ -0,0 +1,59 @@
+name: cppcheck-daily
+
+on:
+ schedule:
+ - cron: 0 0 * * *
+ workflow_dispatch:
+
+jobs:
+ cppcheck-daily:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Install dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y build-essential cmake git libpcre3-dev
+
+ # cppcheck from apt does not yet support --check-level args, and thus install from source
+ - name: Install Cppcheck from source
+ run: |
+ mkdir /tmp/cppcheck
+ git clone https://github.com/danmar/cppcheck.git /tmp/cppcheck
+ cd /tmp/cppcheck
+ git checkout 2.14.1
+ mkdir build
+ cd build
+ cmake ..
+ make -j $(nproc)
+ sudo make install
+
+ - name: Run Cppcheck on all files
+ continue-on-error: true
+ id: cppcheck
+ run: |
+ cppcheck --enable=all --inconclusive --check-level=exhaustive --error-exitcode=1 --xml . 2> cppcheck-report.xml
+ shell: bash
+
+ - name: Count errors by error ID and severity
+ run: |
+ #!/bin/bash
+ temp_file=$(mktemp)
+ grep -oP '(?<=id=")[^"]+" severity="[^"]+' cppcheck-report.xml | sed 's/" severity="/,/g' > "$temp_file"
+ echo "Error counts by error ID and severity:"
+ sort "$temp_file" | uniq -c
+ rm "$temp_file"
+ shell: bash
+
+ - name: Upload Cppcheck report
+ uses: actions/upload-artifact@v2
+ with:
+ name: cppcheck-report
+ path: cppcheck-report.xml
+
+ - name: Fail the job if Cppcheck failed
+ if: steps.cppcheck.outcome == 'failure'
+ run: exit 1
diff --git a/.github/workflows/openai-pr-reviewer.yaml b/.github/workflows/openai-pr-reviewer.yaml
deleted file mode 100644
index 4ecbd93198276..0000000000000
--- a/.github/workflows/openai-pr-reviewer.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: Code Review By ChatGPT
-
-permissions:
- contents: read
- pull-requests: write
-
-on:
- pull_request_target:
- types:
- - labeled
- pull_request_review_comment:
- types: [created]
-
-concurrency:
- group: ${{ github.repository }}-${{ github.event.number || github.head_ref ||
- github.sha }}-${{ github.workflow }}-${{ github.event_name ==
- 'pull_request_review_comment' && 'pr_comment' || 'pr' }}
- cancel-in-progress: ${{ github.event_name != 'pull_request_review_comment' }}
-
-jobs:
- prevent-no-label-execution:
- uses: autowarefoundation/autoware-github-actions/.github/workflows/prevent-no-label-execution.yaml@v1
- with:
- label: tag:openai-pr-reviewer
- review:
- needs: prevent-no-label-execution
- if: ${{ needs.prevent-no-label-execution.outputs.run == 'true' }}
- runs-on: ubuntu-latest
- steps:
- - uses: fluxninja/openai-pr-reviewer@latest
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- with:
- debug: false
- review_simple_changes: false
- review_comment_lgtm: false
- openai_light_model: gpt-3.5-turbo-0613
- openai_heavy_model: gpt-3.5-turbo-0613 # The default is to use GPT4, which needs to be changed to join ChatGPT Plus.
diff --git a/.github/workflows/pr-agent.yaml b/.github/workflows/pr-agent.yaml
index f4794b7497402..81b192a1c2095 100644
--- a/.github/workflows/pr-agent.yaml
+++ b/.github/workflows/pr-agent.yaml
@@ -26,6 +26,13 @@ jobs:
env:
OPENAI_KEY: ${{ secrets.OPENAI_KEY_PR_AGENT }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- github_action_config.auto_review: "false"
- github_action_config.auto_describe: "false"
- github_action_config.auto_improve: "false"
+ github_action_config.auto_review: false
+ github_action_config.auto_describe: false
+ github_action_config.auto_improve: false
+ # https://github.com/Codium-ai/pr-agent/blob/main/pr_agent/settings/configuration.toml
+ pr_description.publish_labels: false
+ config.model: gpt-4o
+ config.model_turbo: gpt-4o
+ config.max_model_tokens: 64000
+ pr_code_suggestions.max_context_tokens: 12000
+ pr_code_suggestions.commitable_code_suggestions: true
diff --git a/build_depends.repos b/build_depends.repos
index a8f431f97df25..bd93897d81d68 100644
--- a/build_depends.repos
+++ b/build_depends.repos
@@ -41,3 +41,7 @@ repositories:
type: git
url: https://github.com/tier4/glog.git
version: v0.6.0_t4-ros
+ universe/external/ament_cmake: # TODO(mitsudome-r): remove when https://github.com/ament/ament_cmake/pull/448 is merged
+ type: git
+ url: https://github.com/autowarefoundation/ament_cmake.git
+ version: feat/faster_ament_libraries_deduplicate
diff --git a/common/global_parameter_loader/launch/global_params.launch.py b/common/global_parameter_loader/launch/global_params.launch.py
index 06f807aaa4609..8f9092b10fa37 100644
--- a/common/global_parameter_loader/launch/global_params.launch.py
+++ b/common/global_parameter_loader/launch/global_params.launch.py
@@ -33,7 +33,7 @@ def launch_setup(context, *args, **kwargs):
load_vehicle_info = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
- [FindPackageShare("vehicle_info_util"), "/launch/vehicle_info.launch.py"]
+ [FindPackageShare("autoware_vehicle_info_utils"), "/launch/vehicle_info.launch.py"]
),
launch_arguments={
"vehicle_info_param_file": [vehicle_description_pkg, "/config/vehicle_info.param.yaml"]
diff --git a/common/global_parameter_loader/package.xml b/common/global_parameter_loader/package.xml
index 4c2568b9aec98..472ef0c063430 100644
--- a/common/global_parameter_loader/package.xml
+++ b/common/global_parameter_loader/package.xml
@@ -10,7 +10,7 @@
ament_cmake_auto
autoware_cmake
- vehicle_info_util
+ autoware_vehicle_info_utils
ament_lint_auto
autoware_lint_common
diff --git a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp
index b842261d56cfa..d0b6dfac2dcff 100644
--- a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp
+++ b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp
@@ -20,13 +20,27 @@
#include
#include
#include
+#include
+#include
namespace tier4_autoware_utils
{
-template
-class InterProcessPollingSubscriber
+template
+class InterProcessPollingSubscriber;
+
+template
+class InterProcessPollingSubscriber::type>
{
+public:
+ using SharedPtr =
+ std::shared_ptr::type>>;
+ static SharedPtr create_subscription(
+ rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{1})
+ {
+ return std::make_shared>(node, topic_name, qos);
+ }
+
private:
typename rclcpp::Subscription::SharedPtr subscriber_;
typename T::SharedPtr data_;
@@ -50,6 +64,12 @@ class InterProcessPollingSubscriber
"serialization while updateLatestData()");
}
};
+ /*
+ * @brief take and return the latest data from DDS queue if such data existed, otherwise return
+ * previous taken data("stale" data)
+ * @note if you want to ignore "stale" data, you should use takeNewData()
+ * instead
+ */
typename T::ConstSharedPtr takeData()
{
auto new_data = std::make_shared();
@@ -61,6 +81,75 @@ class InterProcessPollingSubscriber
return data_;
};
+
+ /*
+ * @brief take and return the latest data from DDS queue if such data existed, otherwise return
+ * nullptr instead
+ * @note this API allows you to avoid redundant computation on the taken data which is unchanged
+ * since the previous cycle
+ */
+ typename T::ConstSharedPtr takeNewData()
+ {
+ auto new_data = std::make_shared();
+ rclcpp::MessageInfo message_info;
+ const bool success = subscriber_->take(*new_data, message_info);
+ if (success) {
+ data_ = new_data;
+ return data_;
+ } else {
+ return nullptr;
+ }
+ }
+};
+
+template
+class InterProcessPollingSubscriber= 2)>::type>
+{
+public:
+ using SharedPtr =
+ std::shared_ptr= 2)>::type>>;
+ static SharedPtr create_subscription(
+ rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{N})
+ {
+ return std::make_shared>(node, topic_name, qos);
+ }
+
+private:
+ typename rclcpp::Subscription::SharedPtr subscriber_;
+
+public:
+ explicit InterProcessPollingSubscriber(
+ rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{N})
+ {
+ auto noexec_callback_group =
+ node->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive, false);
+ auto noexec_subscription_options = rclcpp::SubscriptionOptions();
+ noexec_subscription_options.callback_group = noexec_callback_group;
+
+ subscriber_ = node->create_subscription(
+ topic_name, qos,
+ [node]([[maybe_unused]] const typename T::ConstSharedPtr msg) { assert(false); },
+ noexec_subscription_options);
+ if (qos.get_rmw_qos_profile().depth < N) {
+ throw std::invalid_argument(
+ "InterProcessPollingSubscriber will be used with depth == " + std::to_string(N) +
+ ", which may cause inefficient serialization while updateLatestData()");
+ }
+ };
+ std::vector takeData()
+ {
+ std::vector data;
+ rclcpp::MessageInfo message_info;
+ for (int i = 0; i < N; ++i) {
+ auto datum = std::make_shared();
+ if (subscriber_->take(*datum, message_info)) {
+ data.push_back(datum);
+ } else {
+ break;
+ }
+ }
+ return data;
+ };
};
} // namespace tier4_autoware_utils
diff --git a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/transform_listener.hpp b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/transform_listener.hpp
index ffc845575a76f..96b1cc6ea6ccc 100644
--- a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/transform_listener.hpp
+++ b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/transform_listener.hpp
@@ -48,8 +48,9 @@ class TransformListener
try {
tf = tf_buffer_->lookupTransform(from, to, tf2::TimePointZero);
} catch (tf2::TransformException & ex) {
- RCLCPP_WARN(
- logger_, "failed to get transform from %s to %s: %s", from.c_str(), to.c_str(), ex.what());
+ RCLCPP_WARN_THROTTLE(
+ logger_, *clock_, 5000, "failed to get transform from %s to %s: %s", from.c_str(),
+ to.c_str(), ex.what());
return {};
}
@@ -64,8 +65,9 @@ class TransformListener
try {
tf = tf_buffer_->lookupTransform(from, to, time, duration);
} catch (tf2::TransformException & ex) {
- RCLCPP_WARN(
- logger_, "failed to get transform from %s to %s: %s", from.c_str(), to.c_str(), ex.what());
+ RCLCPP_WARN_THROTTLE(
+ logger_, *clock_, 5000, "failed to get transform from %s to %s: %s", from.c_str(),
+ to.c_str(), ex.what());
return {};
}
diff --git a/common/tier4_localization_rviz_plugin/package.xml b/common/tier4_localization_rviz_plugin/package.xml
index f2482b2d45a3b..1c1c4ad6d8ba1 100644
--- a/common/tier4_localization_rviz_plugin/package.xml
+++ b/common/tier4_localization_rviz_plugin/package.xml
@@ -11,6 +11,7 @@
ament_cmake_auto
autoware_cmake
+ autoware_vehicle_info_utils
geometry_msgs
libqt5-core
libqt5-gui
@@ -20,7 +21,6 @@
rviz_common
rviz_default_plugins
tf2_ros
- vehicle_info_util
ament_lint_auto
autoware_lint_common
diff --git a/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.cpp b/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.cpp
index c4233bd6305e3..cd32df498bfd4 100644
--- a/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.cpp
+++ b/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.cpp
@@ -172,7 +172,7 @@ void PoseHistoryFootprint::updateFootprint()
if (!vehicle_info_) {
try {
vehicle_info_ = std::make_shared(
- VehicleInfoUtil(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo());
+ VehicleInfoUtils(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo());
updateVehicleInfo();
} catch (const std::exception & e) {
RCLCPP_WARN_THROTTLE(
diff --git a/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.hpp b/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.hpp
index d957054bd479e..44625ad7deb41 100644
--- a/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.hpp
+++ b/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.hpp
@@ -15,8 +15,8 @@
#ifndef POSE_HISTORY_FOOTPRINT__DISPLAY_HPP_
#define POSE_HISTORY_FOOTPRINT__DISPLAY_HPP_
+#include
#include
-#include
#include
@@ -39,8 +39,8 @@ class BoolProperty;
namespace rviz_plugins
{
-using vehicle_info_util::VehicleInfo;
-using vehicle_info_util::VehicleInfoUtil;
+using autoware::vehicle_info_utils::VehicleInfo;
+using autoware::vehicle_info_utils::VehicleInfoUtils;
class PoseHistoryFootprint
: public rviz_common::MessageFilterDisplay
diff --git a/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display_base.hpp b/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display_base.hpp
index ed79e122c0a01..9cb710c239029 100644
--- a/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display_base.hpp
+++ b/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display_base.hpp
@@ -15,6 +15,7 @@
#ifndef TIER4_PLANNING_RVIZ_PLUGIN__PATH__DISPLAY_BASE_HPP_
#define TIER4_PLANNING_RVIZ_PLUGIN__PATH__DISPLAY_BASE_HPP_
+#include
#include
#include
#include
@@ -25,7 +26,6 @@
#include
#include
#include
-#include
#include
@@ -97,8 +97,8 @@ bool validateFloats(const typename T::ConstSharedPtr & msg_ptr)
namespace rviz_plugins
{
-using vehicle_info_util::VehicleInfo;
-using vehicle_info_util::VehicleInfoUtil;
+using autoware::vehicle_info_utils::VehicleInfo;
+using autoware::vehicle_info_utils::VehicleInfoUtils;
template
class AutowarePathBaseDisplay : public rviz_common::MessageFilterDisplay
{
diff --git a/common/tier4_planning_rviz_plugin/package.xml b/common/tier4_planning_rviz_plugin/package.xml
index 5d755d212c859..95edcb7a96c56 100644
--- a/common/tier4_planning_rviz_plugin/package.xml
+++ b/common/tier4_planning_rviz_plugin/package.xml
@@ -12,6 +12,7 @@
autoware_cmake
autoware_planning_msgs
+ autoware_vehicle_info_utils
libqt5-core
libqt5-gui
libqt5-widgets
@@ -25,7 +26,6 @@
tf2_ros
tier4_autoware_utils
tier4_planning_msgs
- vehicle_info_util
ament_lint_auto
autoware_lint_common
diff --git a/common/tier4_planning_rviz_plugin/src/path/display.cpp b/common/tier4_planning_rviz_plugin/src/path/display.cpp
index 4a297b47bcfcc..342e72d66c5f9 100644
--- a/common/tier4_planning_rviz_plugin/src/path/display.cpp
+++ b/common/tier4_planning_rviz_plugin/src/path/display.cpp
@@ -31,7 +31,7 @@ void AutowarePathWithLaneIdDisplay::preProcessMessageDetail()
if (!vehicle_info_) {
try {
vehicle_info_ = std::make_shared(
- VehicleInfoUtil(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo());
+ VehicleInfoUtils(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo());
updateVehicleInfo();
} catch (const std::exception & e) {
RCLCPP_WARN_ONCE(
@@ -107,7 +107,7 @@ void AutowarePathDisplay::preProcessMessageDetail()
if (!vehicle_info_) {
try {
vehicle_info_ = std::make_shared(
- VehicleInfoUtil(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo());
+ VehicleInfoUtils(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo());
updateVehicleInfo();
} catch (const std::exception & e) {
RCLCPP_WARN_ONCE(
@@ -124,7 +124,7 @@ void AutowareTrajectoryDisplay::preProcessMessageDetail()
if (!vehicle_info_) {
try {
vehicle_info_ = std::make_shared(
- VehicleInfoUtil(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo());
+ VehicleInfoUtils(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo());
updateVehicleInfo();
} catch (const std::exception & e) {
RCLCPP_WARN_ONCE(
diff --git a/control/autonomous_emergency_braking/CMakeLists.txt b/control/autonomous_emergency_braking/CMakeLists.txt
deleted file mode 100644
index 53a629fafa0cc..0000000000000
--- a/control/autonomous_emergency_braking/CMakeLists.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-cmake_minimum_required(VERSION 3.14)
-project(autonomous_emergency_braking)
-
-find_package(autoware_cmake REQUIRED)
-autoware_package()
-
-find_package(PCL REQUIRED)
-
-include_directories(
- include
- SYSTEM
- ${PCL_INCLUDE_DIRS}
-)
-
-set(AEB_NODE ${PROJECT_NAME}_node)
-ament_auto_add_library(${AEB_NODE} SHARED
- src/node.cpp
-)
-
-rclcpp_components_register_node(${AEB_NODE}
- PLUGIN "autoware::motion::control::autonomous_emergency_braking::AEB"
- EXECUTABLE ${PROJECT_NAME}
-)
-
-if(BUILD_TESTING)
- find_package(ament_lint_auto REQUIRED)
- ament_lint_auto_find_test_dependencies()
-endif()
-
-ament_auto_package(
- INSTALL_TO_SHARE
- launch
- config
-)
diff --git a/control/autonomous_emergency_braking/include/autonomous_emergency_braking/node.hpp b/control/autonomous_emergency_braking/include/autonomous_emergency_braking/node.hpp
deleted file mode 100644
index 81ab2ecff790b..0000000000000
--- a/control/autonomous_emergency_braking/include/autonomous_emergency_braking/node.hpp
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright 2023 TIER IV, Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_
-#define AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-namespace autoware::motion::control::autonomous_emergency_braking
-{
-
-using autoware_planning_msgs::msg::Trajectory;
-using autoware_system_msgs::msg::AutowareState;
-using autoware_vehicle_msgs::msg::VelocityReport;
-using nav_msgs::msg::Odometry;
-using sensor_msgs::msg::Imu;
-using sensor_msgs::msg::PointCloud2;
-using PointCloud = pcl::PointCloud;
-using diagnostic_updater::DiagnosticStatusWrapper;
-using diagnostic_updater::Updater;
-using tier4_autoware_utils::Point2d;
-using tier4_autoware_utils::Polygon2d;
-using vehicle_info_util::VehicleInfo;
-using visualization_msgs::msg::Marker;
-using visualization_msgs::msg::MarkerArray;
-using Path = std::vector;
-using Vector3 = geometry_msgs::msg::Vector3;
-struct ObjectData
-{
- rclcpp::Time stamp;
- geometry_msgs::msg::Point position;
- double velocity{0.0};
- double rss{0.0};
- double distance_to_object{0.0};
-};
-
-class CollisionDataKeeper
-{
-public:
- explicit CollisionDataKeeper(rclcpp::Clock::SharedPtr clock) { clock_ = clock; }
-
- void setTimeout(const double collision_keep_time, const double previous_obstacle_keep_time)
- {
- collision_keep_time_ = collision_keep_time;
- previous_obstacle_keep_time_ = previous_obstacle_keep_time;
- }
-
- std::pair getTimeout()
- {
- return {collision_keep_time_, previous_obstacle_keep_time_};
- }
-
- bool checkObjectDataExpired(std::optional & data, const double timeout)
- {
- if (!data.has_value()) return true;
- const auto now = clock_->now();
- const auto & prev_obj = data.value();
- const auto & data_time_stamp = prev_obj.stamp;
- if ((now - data_time_stamp).nanoseconds() * 1e-9 > timeout) {
- data = std::nullopt;
- return true;
- }
- return false;
- }
-
- bool checkCollisionExpired()
- {
- return this->checkObjectDataExpired(closest_object_, collision_keep_time_);
- }
-
- bool checkPreviousObjectDataExpired()
- {
- return this->checkObjectDataExpired(prev_closest_object_, previous_obstacle_keep_time_);
- }
-
- ObjectData get() const
- {
- return (closest_object_.has_value()) ? closest_object_.value() : ObjectData();
- }
-
- ObjectData getPreviousObjectData() const
- {
- return (prev_closest_object_.has_value()) ? prev_closest_object_.value() : ObjectData();
- }
-
- void setCollisionData(const ObjectData & data)
- {
- closest_object_ = std::make_optional(data);
- }
-
- void setPreviousObjectData(const ObjectData & data)
- {
- prev_closest_object_ = std::make_optional(data);
- }
-
- void resetVelocityHistory() { obstacle_velocity_history_.clear(); }
-
- void updateVelocityHistory(
- const double current_object_velocity, const rclcpp::Time & current_object_velocity_time_stamp)
- {
- // remove old msg from deque
- const auto now = clock_->now();
- obstacle_velocity_history_.erase(
- std::remove_if(
- obstacle_velocity_history_.begin(), obstacle_velocity_history_.end(),
- [&](const auto & velocity_time_pair) {
- const auto & vel_time = velocity_time_pair.second;
- return ((now - vel_time).nanoseconds() * 1e-9 > previous_obstacle_keep_time_);
- }),
- obstacle_velocity_history_.end());
- obstacle_velocity_history_.emplace_back(
- std::make_pair(current_object_velocity, current_object_velocity_time_stamp));
- }
-
- std::optional getMedianObstacleVelocity() const
- {
- if (obstacle_velocity_history_.empty()) return std::nullopt;
- std::vector raw_velocities;
- for (const auto & vel_time_pair : obstacle_velocity_history_) {
- raw_velocities.emplace_back(vel_time_pair.first);
- }
-
- const size_t med1 = (raw_velocities.size() % 2 == 0) ? (raw_velocities.size()) / 2 - 1
- : (raw_velocities.size()) / 2.0;
- const size_t med2 = (raw_velocities.size()) / 2.0;
- std::nth_element(raw_velocities.begin(), raw_velocities.begin() + med1, raw_velocities.end());
- const double vel1 = raw_velocities.at(med1);
- std::nth_element(raw_velocities.begin(), raw_velocities.begin() + med2, raw_velocities.end());
- const double vel2 = raw_velocities.at(med2);
- return (vel1 + vel2) / 2.0;
- }
-
- std::optional calcObjectSpeedFromHistory(
- const ObjectData & closest_object, const Path & path, const double current_ego_speed)
- {
- if (this->checkPreviousObjectDataExpired()) {
- this->setPreviousObjectData(closest_object);
- this->resetVelocityHistory();
- return std::nullopt;
- }
-
- const auto estimated_velocity_opt = std::invoke([&]() -> std::optional {
- const auto & prev_object = this->getPreviousObjectData();
- const double p_dt =
- (closest_object.stamp.nanoseconds() - prev_object.stamp.nanoseconds()) * 1e-9;
- if (p_dt < std::numeric_limits::epsilon()) return std::nullopt;
- const auto & nearest_collision_point = closest_object.position;
- const auto & prev_collision_point = prev_object.position;
-
- const double p_dx = nearest_collision_point.x - prev_collision_point.x;
- const double p_dy = nearest_collision_point.y - prev_collision_point.y;
- const double p_dist = std::hypot(p_dx, p_dy);
- const double p_yaw = std::atan2(p_dy, p_dx);
- const double p_vel = p_dist / p_dt;
-
- const auto nearest_idx = motion_utils::findNearestIndex(path, nearest_collision_point);
- const auto & nearest_path_pose = path.at(nearest_idx);
- const auto & traj_yaw = tf2::getYaw(nearest_path_pose.orientation);
- const auto estimated_velocity = p_vel * std::cos(p_yaw - traj_yaw) + current_ego_speed;
-
- // Current RSS distance calculation does not account for negative velocities
- return (estimated_velocity > 0.0) ? estimated_velocity : 0.0;
- });
-
- if (!estimated_velocity_opt.has_value()) {
- return std::nullopt;
- }
-
- const auto & estimated_velocity = estimated_velocity_opt.value();
- this->setPreviousObjectData(closest_object);
- this->updateVelocityHistory(estimated_velocity, closest_object.stamp);
- return this->getMedianObstacleVelocity();
- }
-
-private:
- std::optional prev_closest_object_{std::nullopt};
- std::optional closest_object_{std::nullopt};
- double collision_keep_time_{0.0};
- double previous_obstacle_keep_time_{0.0};
-
- std::deque> obstacle_velocity_history_;
- rclcpp::Clock::SharedPtr clock_;
-};
-
-static rclcpp::SensorDataQoS SingleDepthSensorQoS()
-{
- rclcpp::SensorDataQoS qos;
- qos.get_rmw_qos_profile().depth = 1;
- return qos;
-}
-
-class AEB : public rclcpp::Node
-{
-public:
- explicit AEB(const rclcpp::NodeOptions & node_options);
-
- // subscriber
- tier4_autoware_utils::InterProcessPollingSubscriber sub_point_cloud_{
- this, "~/input/pointcloud", SingleDepthSensorQoS()};
- tier4_autoware_utils::InterProcessPollingSubscriber sub_velocity_{
- this, "~/input/velocity"};
- tier4_autoware_utils::InterProcessPollingSubscriber sub_imu_{this, "~/input/imu"};
- tier4_autoware_utils::InterProcessPollingSubscriber sub_predicted_traj_{
- this, "~/input/predicted_trajectory"};
- tier4_autoware_utils::InterProcessPollingSubscriber sub_autoware_state_{
- this, "/autoware/state"};
- // publisher
- rclcpp::Publisher::SharedPtr pub_obstacle_pointcloud_;
- rclcpp::Publisher::SharedPtr debug_ego_path_publisher_; // debug
-
- // timer
- rclcpp::TimerBase::SharedPtr timer_;
-
- // callback
- void onPointCloud(const PointCloud2::ConstSharedPtr input_msg);
- void onImu(const Imu::ConstSharedPtr input_msg);
- void onTimer();
- rcl_interfaces::msg::SetParametersResult onParameter(
- const std::vector & parameters);
-
- bool fetchLatestData();
-
- // main function
- void onCheckCollision(DiagnosticStatusWrapper & stat);
- bool checkCollision(MarkerArray & debug_markers);
- bool hasCollision(const double current_v, const ObjectData & closest_object);
-
- Path generateEgoPath(const double curr_v, const double curr_w);
- std::optional generateEgoPath(const Trajectory & predicted_traj);
- std::vector generatePathFootprint(const Path & path, const double extra_width_margin);
-
- void createObjectDataUsingPointCloudClusters(
- const Path & ego_path, const std::vector & ego_polys, const rclcpp::Time & stamp,
- std::vector & objects,
- const pcl::PointCloud::Ptr obstacle_points_ptr);
-
- void cropPointCloudWithEgoFootprintPath(
- const std::vector & ego_polys, pcl::PointCloud::Ptr filtered_objects);
-
- void createObjectDataUsingPointCloudClusters(
- const Path & ego_path, const std::vector & ego_polys, const rclcpp::Time & stamp,
- std::vector & objects);
- void cropPointCloudWithEgoFootprintPath(const std::vector & ego_polys);
-
- void addMarker(
- const rclcpp::Time & current_time, const Path & path, const std::vector & polygons,
- const std::vector & objects, const std::optional & closest_object,
- const double color_r, const double color_g, const double color_b, const double color_a,
- const std::string & ns, MarkerArray & debug_markers);
-
- void addCollisionMarker(const ObjectData & data, MarkerArray & debug_markers);
-
- std::optional calcObjectSpeedFromHistory(
- const ObjectData & closest_object, const Path & path, const double current_ego_speed);
-
- PointCloud2::SharedPtr obstacle_ros_pointcloud_ptr_{nullptr};
- VelocityReport::ConstSharedPtr current_velocity_ptr_{nullptr};
- Vector3::SharedPtr angular_velocity_ptr_{nullptr};
- Trajectory::ConstSharedPtr predicted_traj_ptr_{nullptr};
- AutowareState::ConstSharedPtr autoware_state_{nullptr};
-
- tf2_ros::Buffer tf_buffer_{get_clock()};
- tf2_ros::TransformListener tf_listener_{tf_buffer_};
-
- // vehicle info
- VehicleInfo vehicle_info_;
-
- // diag
- Updater updater_{this};
-
- // member variables
- bool publish_debug_pointcloud_;
- bool use_predicted_trajectory_;
- bool use_imu_path_;
- double path_footprint_extra_margin_;
- double detection_range_min_height_;
- double detection_range_max_height_margin_;
- double voxel_grid_x_;
- double voxel_grid_y_;
- double voxel_grid_z_;
- double min_generated_path_length_;
- double expand_width_;
- double longitudinal_offset_;
- double t_response_;
- double a_ego_min_;
- double a_obj_min_;
- double cluster_tolerance_;
- int minimum_cluster_size_;
- int maximum_cluster_size_;
- double imu_prediction_time_horizon_;
- double imu_prediction_time_interval_;
- double mpc_prediction_time_horizon_;
- double mpc_prediction_time_interval_;
- CollisionDataKeeper collision_data_keeper_;
- // Parameter callback
- OnSetParametersCallbackHandle::SharedPtr set_param_res_;
-};
-} // namespace autoware::motion::control::autonomous_emergency_braking
-
-#endif // AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_
diff --git a/control/autonomous_emergency_braking/launch/autonomous_emergency_braking.launch.xml b/control/autonomous_emergency_braking/launch/autonomous_emergency_braking.launch.xml
deleted file mode 100644
index cf6640ec6be52..0000000000000
--- a/control/autonomous_emergency_braking/launch/autonomous_emergency_braking.launch.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/control/autonomous_emergency_braking/package.xml b/control/autonomous_emergency_braking/package.xml
deleted file mode 100644
index bf27e6b7e1575..0000000000000
--- a/control/autonomous_emergency_braking/package.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
- autonomous_emergency_braking
- 0.1.0
- Autonomous Emergency Braking package as a ROS 2 node
- Takamasa Horibe
- Tomoya Kimura
- Mamoru Sobue
- Daniel Sanchez
-
- Apache License 2.0
-
- ament_cmake
- autoware_cmake
-
- autoware_control_msgs
- autoware_planning_msgs
- autoware_system_msgs
- autoware_vehicle_msgs
- diagnostic_updater
- geometry_msgs
- motion_utils
- nav_msgs
- pcl_conversions
- pcl_ros
- pointcloud_preprocessor
- rclcpp
- rclcpp_components
- sensor_msgs
- std_msgs
- tf2
- tf2_eigen
- tf2_geometry_msgs
- tf2_ros
- tier4_autoware_utils
- vehicle_info_util
- visualization_msgs
-
- ament_lint_auto
- autoware_lint_common
-
-
- ament_cmake
-
-
diff --git a/control/autonomous_emergency_braking/src/node.cpp b/control/autonomous_emergency_braking/src/node.cpp
deleted file mode 100644
index 71eb92a4e95fb..0000000000000
--- a/control/autonomous_emergency_braking/src/node.cpp
+++ /dev/null
@@ -1,742 +0,0 @@
-// Copyright 2022 TIER IV, Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "autonomous_emergency_braking/node.hpp"
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#ifdef ROS_DISTRO_GALACTIC
-#include
-#include
-#else
-#include
-
-#include
-#endif
-
-namespace autoware::motion::control::autonomous_emergency_braking
-{
-using diagnostic_msgs::msg::DiagnosticStatus;
-namespace bg = boost::geometry;
-
-void appendPointToPolygon(Polygon2d & polygon, const geometry_msgs::msg::Point & geom_point)
-{
- Point2d point;
- point.x() = geom_point.x;
- point.y() = geom_point.y;
-
- bg::append(polygon.outer(), point);
-}
-
-Polygon2d createPolygon(
- const geometry_msgs::msg::Pose & base_pose, const geometry_msgs::msg::Pose & next_pose,
- const vehicle_info_util::VehicleInfo & vehicle_info, const double expand_width)
-{
- Polygon2d polygon;
-
- const double longitudinal_offset = vehicle_info.max_longitudinal_offset_m;
- const double width = vehicle_info.vehicle_width_m / 2.0 + expand_width;
- const double rear_overhang = vehicle_info.rear_overhang_m;
-
- appendPointToPolygon(
- polygon,
- tier4_autoware_utils::calcOffsetPose(base_pose, longitudinal_offset, width, 0.0).position);
- appendPointToPolygon(
- polygon,
- tier4_autoware_utils::calcOffsetPose(base_pose, longitudinal_offset, -width, 0.0).position);
- appendPointToPolygon(
- polygon, tier4_autoware_utils::calcOffsetPose(base_pose, -rear_overhang, -width, 0.0).position);
- appendPointToPolygon(
- polygon, tier4_autoware_utils::calcOffsetPose(base_pose, -rear_overhang, width, 0.0).position);
-
- appendPointToPolygon(
- polygon,
- tier4_autoware_utils::calcOffsetPose(next_pose, longitudinal_offset, width, 0.0).position);
- appendPointToPolygon(
- polygon,
- tier4_autoware_utils::calcOffsetPose(next_pose, longitudinal_offset, -width, 0.0).position);
- appendPointToPolygon(
- polygon, tier4_autoware_utils::calcOffsetPose(next_pose, -rear_overhang, -width, 0.0).position);
- appendPointToPolygon(
- polygon, tier4_autoware_utils::calcOffsetPose(next_pose, -rear_overhang, width, 0.0).position);
-
- polygon = tier4_autoware_utils::isClockwise(polygon)
- ? polygon
- : tier4_autoware_utils::inverseClockwise(polygon);
-
- Polygon2d hull_polygon;
- bg::convex_hull(polygon, hull_polygon);
-
- return hull_polygon;
-}
-
-AEB::AEB(const rclcpp::NodeOptions & node_options)
-: Node("AEB", node_options),
- vehicle_info_(vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo()),
- collision_data_keeper_(this->get_clock())
-{
- // Publisher
- {
- pub_obstacle_pointcloud_ =
- this->create_publisher("~/debug/obstacle_pointcloud", 1);
- debug_ego_path_publisher_ = this->create_publisher("~/debug/markers", 1);
- }
- // Diagnostics
- {
- updater_.setHardwareID("autonomous_emergency_braking");
- updater_.add("aeb_emergency_stop", this, &AEB::onCheckCollision);
- }
- // parameter
- publish_debug_pointcloud_ = declare_parameter("publish_debug_pointcloud");
- use_predicted_trajectory_ = declare_parameter("use_predicted_trajectory");
- use_imu_path_ = declare_parameter("use_imu_path");
- path_footprint_extra_margin_ = declare_parameter("path_footprint_extra_margin");
- detection_range_min_height_ = declare_parameter("detection_range_min_height");
- detection_range_max_height_margin_ =
- declare_parameter("detection_range_max_height_margin");
- voxel_grid_x_ = declare_parameter("voxel_grid_x");
- voxel_grid_y_ = declare_parameter("voxel_grid_y");
- voxel_grid_z_ = declare_parameter("voxel_grid_z");
- min_generated_path_length_ = declare_parameter("min_generated_path_length");
- expand_width_ = declare_parameter("expand_width");
- longitudinal_offset_ = declare_parameter("longitudinal_offset");
- t_response_ = declare_parameter("t_response");
- a_ego_min_ = declare_parameter("a_ego_min");
- a_obj_min_ = declare_parameter("a_obj_min");
-
- cluster_tolerance_ = declare_parameter("cluster_tolerance");
- minimum_cluster_size_ = declare_parameter("minimum_cluster_size");
- maximum_cluster_size_ = declare_parameter("maximum_cluster_size");
-
- imu_prediction_time_horizon_ = declare_parameter("imu_prediction_time_horizon");
- imu_prediction_time_interval_ = declare_parameter("imu_prediction_time_interval");
- mpc_prediction_time_horizon_ = declare_parameter("mpc_prediction_time_horizon");
- mpc_prediction_time_interval_ = declare_parameter("mpc_prediction_time_interval");
-
- { // Object history data keeper setup
- const auto previous_obstacle_keep_time =
- declare_parameter("previous_obstacle_keep_time");
- const auto collision_keeping_sec = declare_parameter("collision_keeping_sec");
- collision_data_keeper_.setTimeout(collision_keeping_sec, previous_obstacle_keep_time);
- }
-
- // Parameter Callback
- set_param_res_ =
- add_on_set_parameters_callback(std::bind(&AEB::onParameter, this, std::placeholders::_1));
-
- // start time
- const double aeb_hz = declare_parameter("aeb_hz");
- const auto period_ns = rclcpp::Rate(aeb_hz).period();
- timer_ = rclcpp::create_timer(this, this->get_clock(), period_ns, std::bind(&AEB::onTimer, this));
-}
-
-rcl_interfaces::msg::SetParametersResult AEB::onParameter(
- const std::vector & parameters)
-{
- using tier4_autoware_utils::updateParam;
- updateParam(parameters, "publish_debug_pointcloud", publish_debug_pointcloud_);
- updateParam(parameters, "use_predicted_trajectory", use_predicted_trajectory_);
- updateParam(parameters, "use_imu_path", use_imu_path_);
- updateParam(parameters, "path_footprint_extra_margin", path_footprint_extra_margin_);
- updateParam(parameters, "detection_range_min_height", detection_range_min_height_);
- updateParam(
- parameters, "detection_range_max_height_margin", detection_range_max_height_margin_);
- updateParam(parameters, "voxel_grid_x", voxel_grid_x_);
- updateParam(parameters, "voxel_grid_y", voxel_grid_y_);
- updateParam(parameters, "voxel_grid_z", voxel_grid_z_);
- updateParam(parameters, "min_generated_path_length", min_generated_path_length_);
- updateParam(parameters, "expand_width", expand_width_);
- updateParam(parameters, "longitudinal_offset", longitudinal_offset_);
- updateParam(parameters, "t_response", t_response_);
- updateParam(parameters, "a_ego_min", a_ego_min_);
- updateParam(parameters, "a_obj_min", a_obj_min_);
-
- updateParam(parameters, "cluster_tolerance", cluster_tolerance_);
- updateParam(parameters, "minimum_cluster_size", minimum_cluster_size_);
- updateParam(parameters, "maximum_cluster_size", maximum_cluster_size_);
-
- updateParam(parameters, "imu_prediction_time_horizon", imu_prediction_time_horizon_);
- updateParam(parameters, "imu_prediction_time_interval", imu_prediction_time_interval_);
- updateParam(parameters, "mpc_prediction_time_horizon", mpc_prediction_time_horizon_);
- updateParam(parameters, "mpc_prediction_time_interval", mpc_prediction_time_interval_);
-
- { // Object history data keeper setup
- auto [previous_obstacle_keep_time, collision_keeping_sec] = collision_data_keeper_.getTimeout();
- updateParam(parameters, "previous_obstacle_keep_time", previous_obstacle_keep_time);
- updateParam(parameters, "collision_keeping_sec", collision_keeping_sec);
- collision_data_keeper_.setTimeout(collision_keeping_sec, previous_obstacle_keep_time);
- }
-
- rcl_interfaces::msg::SetParametersResult result;
- result.successful = true;
- result.reason = "success";
- return result;
-}
-
-void AEB::onTimer()
-{
- updater_.force_update();
-}
-
-void AEB::onImu(const Imu::ConstSharedPtr input_msg)
-{
- // transform imu
- geometry_msgs::msg::TransformStamped transform_stamped{};
- try {
- transform_stamped = tf_buffer_.lookupTransform(
- "base_link", input_msg->header.frame_id, input_msg->header.stamp,
- rclcpp::Duration::from_seconds(0.5));
- } catch (tf2::TransformException & ex) {
- RCLCPP_ERROR_STREAM(
- get_logger(),
- "[AEB] Failed to look up transform from base_link to" << input_msg->header.frame_id);
- return;
- }
-
- angular_velocity_ptr_ = std::make_shared();
- tf2::doTransform(input_msg->angular_velocity, *angular_velocity_ptr_, transform_stamped);
-}
-
-void AEB::onPointCloud(const PointCloud2::ConstSharedPtr input_msg)
-{
- PointCloud::Ptr pointcloud_ptr(new PointCloud);
- pcl::fromROSMsg(*input_msg, *pointcloud_ptr);
-
- if (input_msg->header.frame_id != "base_link") {
- RCLCPP_ERROR_STREAM(
- get_logger(),
- "[AEB]: Input point cloud frame is not base_link and it is " << input_msg->header.frame_id);
- // transform pointcloud
- geometry_msgs::msg::TransformStamped transform_stamped{};
- try {
- transform_stamped = tf_buffer_.lookupTransform(
- "base_link", input_msg->header.frame_id, input_msg->header.stamp,
- rclcpp::Duration::from_seconds(0.5));
- } catch (tf2::TransformException & ex) {
- RCLCPP_ERROR_STREAM(
- get_logger(),
- "[AEB] Failed to look up transform from base_link to" << input_msg->header.frame_id);
- return;
- }
-
- // transform by using eigen matrix
- PointCloud2 transformed_points{};
- const Eigen::Matrix4f affine_matrix =
- tf2::transformToEigen(transform_stamped.transform).matrix().cast();
- pcl_ros::transformPointCloud(affine_matrix, *input_msg, transformed_points);
- pcl::fromROSMsg(transformed_points, *pointcloud_ptr);
- }
-
- // apply z-axis filter for removing False Positive points
- PointCloud::Ptr height_filtered_pointcloud_ptr(new PointCloud);
- pcl::PassThrough height_filter;
- height_filter.setInputCloud(pointcloud_ptr);
- height_filter.setFilterFieldName("z");
- height_filter.setFilterLimits(
- detection_range_min_height_,
- vehicle_info_.vehicle_height_m + detection_range_max_height_margin_);
- height_filter.filter(*height_filtered_pointcloud_ptr);
-
- pcl::VoxelGrid filter;
- PointCloud::Ptr no_height_filtered_pointcloud_ptr(new PointCloud);
- filter.setInputCloud(height_filtered_pointcloud_ptr);
- filter.setLeafSize(voxel_grid_x_, voxel_grid_y_, voxel_grid_z_);
- filter.filter(*no_height_filtered_pointcloud_ptr);
-
- obstacle_ros_pointcloud_ptr_ = std::make_shared();
-
- pcl::toROSMsg(*no_height_filtered_pointcloud_ptr, *obstacle_ros_pointcloud_ptr_);
- obstacle_ros_pointcloud_ptr_->header = input_msg->header;
-}
-
-bool AEB::fetchLatestData()
-{
- const auto missing = [this](const auto & name) {
- RCLCPP_INFO_SKIPFIRST_THROTTLE(get_logger(), *get_clock(), 5000, "[AEB] waiting for %s", name);
- return false;
- };
-
- current_velocity_ptr_ = sub_velocity_.takeData();
- if (!current_velocity_ptr_) {
- return missing("ego velocity");
- }
-
- const auto pointcloud_ptr = sub_point_cloud_.takeData();
- if (!pointcloud_ptr) {
- return missing("object pointcloud message");
- }
- onPointCloud(pointcloud_ptr);
- if (!obstacle_ros_pointcloud_ptr_) {
- return missing("object pointcloud");
- }
-
- const auto imu_ptr = sub_imu_.takeData();
- if (use_imu_path_) {
- if (!imu_ptr) {
- return missing("imu message");
- }
- // imu_ptr is valid
- onImu(imu_ptr);
- }
- if (use_imu_path_ && !angular_velocity_ptr_) {
- return missing("imu");
- }
-
- predicted_traj_ptr_ = sub_predicted_traj_.takeData();
- if (use_predicted_trajectory_ && !predicted_traj_ptr_) {
- return missing("control predicted trajectory");
- }
-
- autoware_state_ = sub_autoware_state_.takeData();
- if (!autoware_state_) {
- return missing("autoware_state");
- }
-
- return true;
-}
-
-void AEB::onCheckCollision(DiagnosticStatusWrapper & stat)
-{
- MarkerArray debug_markers;
- checkCollision(debug_markers);
-
- if (!collision_data_keeper_.checkCollisionExpired()) {
- const std::string error_msg = "[AEB]: Emergency Brake";
- const auto diag_level = DiagnosticStatus::ERROR;
- stat.summary(diag_level, error_msg);
- const auto & data = collision_data_keeper_.get();
- stat.addf("RSS", "%.2f", data.rss);
- stat.addf("Distance", "%.2f", data.distance_to_object);
- stat.addf("Object Speed", "%.2f", data.velocity);
- addCollisionMarker(data, debug_markers);
- } else {
- const std::string error_msg = "[AEB]: No Collision";
- const auto diag_level = DiagnosticStatus::OK;
- stat.summary(diag_level, error_msg);
- }
-
- // publish debug markers
- debug_ego_path_publisher_->publish(debug_markers);
-}
-
-bool AEB::checkCollision(MarkerArray & debug_markers)
-{
- using colorTuple = std::tuple;
-
- // step1. check data
- if (!fetchLatestData()) {
- return false;
- }
-
- // if not driving, disable aeb
- if (autoware_state_->state != AutowareState::DRIVING) {
- return false;
- }
-
- // step2. create velocity data check if the vehicle stops or not
- const double current_v = current_velocity_ptr_->longitudinal_velocity;
- if (current_v < 0.1) {
- return false;
- }
-
- auto check_collision = [&](
- const auto & path, const colorTuple & debug_colors,
- const std::string & debug_ns,
- pcl::PointCloud::Ptr filtered_objects) {
- // Crop out Pointcloud using an extra wide ego path
- const auto expanded_ego_polys =
- generatePathFootprint(path, expand_width_ + path_footprint_extra_margin_);
- cropPointCloudWithEgoFootprintPath(expanded_ego_polys, filtered_objects);
-
- // Check which points of the cropped point cloud are on the ego path, and get the closest one
- std::vector objects_from_point_clusters;
- const auto ego_polys = generatePathFootprint(path, expand_width_);
- const auto current_time = obstacle_ros_pointcloud_ptr_->header.stamp;
- createObjectDataUsingPointCloudClusters(
- path, ego_polys, current_time, objects_from_point_clusters, filtered_objects);
-
- // Get only the closest object and calculate its speed
- const auto closest_object_point = std::invoke([&]() -> std::optional {
- const auto closest_object_point_itr = std::min_element(
- objects_from_point_clusters.begin(), objects_from_point_clusters.end(),
- [](const auto & o1, const auto & o2) {
- return o1.distance_to_object < o2.distance_to_object;
- });
-
- if (closest_object_point_itr == objects_from_point_clusters.end()) {
- return std::nullopt;
- }
- const auto closest_object_speed = collision_data_keeper_.calcObjectSpeedFromHistory(
- *closest_object_point_itr, path, current_v);
- if (!closest_object_speed.has_value()) {
- return std::nullopt;
- }
- closest_object_point_itr->velocity = closest_object_speed.value();
- return std::make_optional(*closest_object_point_itr);
- });
-
- // Add debug markers
- {
- const auto [color_r, color_g, color_b, color_a] = debug_colors;
- addMarker(
- this->get_clock()->now(), path, ego_polys, objects_from_point_clusters,
- closest_object_point, color_r, color_g, color_b, color_a, debug_ns, debug_markers);
- }
- // check collision using rss distance
- return (closest_object_point.has_value())
- ? hasCollision(current_v, closest_object_point.value())
- : false;
- };
-
- // step3. make function to check collision with ego path created with sensor data
- const auto has_collision_ego = [&](pcl::PointCloud::Ptr filtered_objects) -> bool {
- if (!use_imu_path_) return false;
- const double current_w = angular_velocity_ptr_->z;
- constexpr colorTuple debug_color = {0.0 / 256.0, 148.0 / 256.0, 205.0 / 256.0, 0.999};
- const std::string ns = "ego";
- const auto ego_path = generateEgoPath(current_v, current_w);
-
- return check_collision(ego_path, debug_color, ns, filtered_objects);
- };
-
- // step4. make function to check collision with predicted trajectory from control module
- const auto has_collision_predicted =
- [&](pcl::PointCloud::Ptr filtered_objects) -> bool {
- if (!use_predicted_trajectory_ || !predicted_traj_ptr_) return false;
- const auto predicted_traj_ptr = predicted_traj_ptr_;
- const auto predicted_path_opt = generateEgoPath(*predicted_traj_ptr);
-
- if (!predicted_path_opt) return false;
- constexpr colorTuple debug_color = {0.0 / 256.0, 100.0 / 256.0, 0.0 / 256.0, 0.999};
- const std::string ns = "predicted";
- const auto & predicted_path = predicted_path_opt.value();
-
- return check_collision(predicted_path, debug_color, ns, filtered_objects);
- };
-
- // Data of filtered point cloud
- pcl::PointCloud::Ptr filtered_objects(new PointCloud);
- // evaluate if there is a collision for both paths
- const bool has_collision =
- has_collision_ego(filtered_objects) || has_collision_predicted(filtered_objects);
-
- // Debug print
- if (!filtered_objects->empty() && publish_debug_pointcloud_) {
- const auto filtered_objects_ros_pointcloud_ptr_ = std::make_shared();
- pcl::toROSMsg(*filtered_objects, *filtered_objects_ros_pointcloud_ptr_);
- pub_obstacle_pointcloud_->publish(*filtered_objects_ros_pointcloud_ptr_);
- }
- return has_collision;
-}
-
-bool AEB::hasCollision(const double current_v, const ObjectData & closest_object)
-{
- const double & obj_v = closest_object.velocity;
- const double & t = t_response_;
- const double rss_dist = current_v * t + (current_v * current_v) / (2 * std::fabs(a_ego_min_)) -
- obj_v * obj_v / (2 * std::fabs(a_obj_min_)) + longitudinal_offset_;
- if (closest_object.distance_to_object < rss_dist) {
- // collision happens
- ObjectData collision_data = closest_object;
- collision_data.rss = rss_dist;
- collision_data.distance_to_object = closest_object.distance_to_object;
- collision_data_keeper_.setCollisionData(collision_data);
- return true;
- }
- return false;
-}
-
-Path AEB::generateEgoPath(const double curr_v, const double curr_w)
-{
- Path path;
- double curr_x = 0.0;
- double curr_y = 0.0;
- double curr_yaw = 0.0;
- geometry_msgs::msg::Pose ini_pose;
- ini_pose.position = tier4_autoware_utils::createPoint(curr_x, curr_y, 0.0);
- ini_pose.orientation = tier4_autoware_utils::createQuaternionFromYaw(curr_yaw);
- path.push_back(ini_pose);
-
- if (curr_v < 0.1) {
- // if current velocity is too small, assume it stops at the same point
- return path;
- }
-
- constexpr double epsilon = 1e-6;
- const double & dt = imu_prediction_time_interval_;
- const double & horizon = imu_prediction_time_horizon_;
- for (double t = 0.0; t < horizon + epsilon; t += dt) {
- curr_x = curr_x + curr_v * std::cos(curr_yaw) * dt;
- curr_y = curr_y + curr_v * std::sin(curr_yaw) * dt;
- curr_yaw = curr_yaw + curr_w * dt;
- geometry_msgs::msg::Pose current_pose;
- current_pose.position = tier4_autoware_utils::createPoint(curr_x, curr_y, 0.0);
- current_pose.orientation = tier4_autoware_utils::createQuaternionFromYaw(curr_yaw);
- if (tier4_autoware_utils::calcDistance2d(path.back(), current_pose) < 1e-3) {
- continue;
- }
- path.push_back(current_pose);
- }
-
- // If path is shorter than minimum path length
- while (motion_utils::calcArcLength(path) < min_generated_path_length_) {
- curr_x = curr_x + curr_v * std::cos(curr_yaw) * dt;
- curr_y = curr_y + curr_v * std::sin(curr_yaw) * dt;
- curr_yaw = curr_yaw + curr_w * dt;
- geometry_msgs::msg::Pose current_pose;
- current_pose.position = tier4_autoware_utils::createPoint(curr_x, curr_y, 0.0);
- current_pose.orientation = tier4_autoware_utils::createQuaternionFromYaw(curr_yaw);
- if (tier4_autoware_utils::calcDistance2d(path.back(), current_pose) < 1e-3) {
- continue;
- }
- path.push_back(current_pose);
- }
- return path;
-}
-
-std::optional AEB::generateEgoPath(const Trajectory & predicted_traj)
-{
- if (predicted_traj.points.empty()) {
- return std::nullopt;
- }
-
- geometry_msgs::msg::TransformStamped transform_stamped{};
- try {
- transform_stamped = tf_buffer_.lookupTransform(
- "base_link", predicted_traj.header.frame_id, predicted_traj.header.stamp,
- rclcpp::Duration::from_seconds(0.5));
- } catch (tf2::TransformException & ex) {
- RCLCPP_ERROR_STREAM(get_logger(), "[AEB] Failed to look up transform from base_link to map");
- return std::nullopt;
- }
-
- // create path
- Path path;
- path.resize(predicted_traj.points.size());
- for (size_t i = 0; i < predicted_traj.points.size(); ++i) {
- geometry_msgs::msg::Pose map_pose;
- tf2::doTransform(predicted_traj.points.at(i).pose, map_pose, transform_stamped);
- path.at(i) = map_pose;
-
- if (i * mpc_prediction_time_interval_ > mpc_prediction_time_horizon_) {
- break;
- }
- }
- return path;
-}
-
-std::vector AEB::generatePathFootprint(
- const Path & path, const double extra_width_margin)
-{
- std::vector polygons;
- for (size_t i = 0; i < path.size() - 1; ++i) {
- polygons.push_back(
- createPolygon(path.at(i), path.at(i + 1), vehicle_info_, extra_width_margin));
- }
- return polygons;
-}
-
-void AEB::createObjectDataUsingPointCloudClusters(
- const Path & ego_path, const std::vector & ego_polys, const rclcpp::Time & stamp,
- std::vector & objects, const pcl::PointCloud::Ptr obstacle_points_ptr)
-{
- // check if the predicted path has valid number of points
- if (ego_path.size() < 2 || ego_polys.empty() || obstacle_points_ptr->empty()) {
- return;
- }
-
- // eliminate noisy points by only considering points belonging to clusters of at least a certain
- // size
- const std::vector cluster_indices = std::invoke([&]() {
- std::vector cluster_idx;
- pcl::search::KdTree::Ptr tree(new pcl::search::KdTree);
- tree->setInputCloud(obstacle_points_ptr);
- pcl::EuclideanClusterExtraction ec;
- ec.setClusterTolerance(cluster_tolerance_);
- ec.setMinClusterSize(minimum_cluster_size_);
- ec.setMaxClusterSize(maximum_cluster_size_);
- ec.setSearchMethod(tree);
- ec.setInputCloud(obstacle_points_ptr);
- ec.extract(cluster_idx);
- return cluster_idx;
- });
-
- PointCloud::Ptr points_belonging_to_cluster_hulls(new PointCloud);
- for (const auto & indices : cluster_indices) {
- PointCloud::Ptr cluster(new PointCloud);
- for (const auto & index : indices.indices) {
- cluster->push_back((*obstacle_points_ptr)[index]);
- }
- // Make a 2d convex hull for the objects
- pcl::ConvexHull hull;
- hull.setDimension(2);
- hull.setInputCloud(cluster);
- std::vector polygons;
- PointCloud::Ptr surface_hull(new pcl::PointCloud);
- hull.reconstruct(*surface_hull, polygons);
- for (const auto & p : *surface_hull) {
- points_belonging_to_cluster_hulls->push_back(p);
- }
- }
-
- // select points inside the ego footprint path
- const auto current_p = tier4_autoware_utils::createPoint(
- ego_path[0].position.x, ego_path[0].position.y, ego_path[0].position.z);
-
- for (const auto & p : *points_belonging_to_cluster_hulls) {
- const auto obj_position = tier4_autoware_utils::createPoint(p.x, p.y, p.z);
- const double dist_ego_to_object =
- motion_utils::calcSignedArcLength(ego_path, current_p, obj_position) -
- vehicle_info_.max_longitudinal_offset_m;
- // objects behind ego are ignored
- if (dist_ego_to_object < 0.0) continue;
-
- ObjectData obj;
- obj.stamp = stamp;
- obj.position = obj_position;
- obj.velocity = 0.0;
- obj.distance_to_object = dist_ego_to_object;
-
- const Point2d obj_point(p.x, p.y);
- for (const auto & ego_poly : ego_polys) {
- if (bg::within(obj_point, ego_poly)) {
- objects.push_back(obj);
- break;
- }
- }
- }
-}
-
-void AEB::cropPointCloudWithEgoFootprintPath(
- const std::vector & ego_polys, pcl::PointCloud::Ptr filtered_objects)
-{
- PointCloud::Ptr full_points_ptr(new PointCloud);
- pcl::fromROSMsg(*obstacle_ros_pointcloud_ptr_, *full_points_ptr);
- // Create a Point cloud with the points of the ego footprint
- PointCloud::Ptr path_polygon_points(new PointCloud);
- std::for_each(ego_polys.begin(), ego_polys.end(), [&](const auto & poly) {
- std::for_each(poly.outer().begin(), poly.outer().end(), [&](const auto & p) {
- pcl::PointXYZ point(p.x(), p.y(), 0.0);
- path_polygon_points->push_back(point);
- });
- });
- // Make a surface hull with the ego footprint to filter out points
- pcl::ConvexHull hull;
- hull.setDimension(2);
- hull.setInputCloud(path_polygon_points);
- std::vector polygons;
- pcl::PointCloud::Ptr surface_hull(new pcl::PointCloud);
- hull.reconstruct(*surface_hull, polygons);
- // Filter out points outside of the path's convex hull
- pcl::CropHull path_polygon_hull_filter;
- path_polygon_hull_filter.setDim(2);
- path_polygon_hull_filter.setInputCloud(full_points_ptr);
- path_polygon_hull_filter.setHullIndices(polygons);
- path_polygon_hull_filter.setHullCloud(surface_hull);
- path_polygon_hull_filter.filter(*filtered_objects);
- filtered_objects->header.stamp = full_points_ptr->header.stamp;
-}
-
-void AEB::addMarker(
- const rclcpp::Time & current_time, const Path & path, const std::vector & polygons,
- const std::vector & objects, const std::optional & closest_object,
- const double color_r, const double color_g, const double color_b, const double color_a,
- const std::string & ns, MarkerArray & debug_markers)
-{
- auto path_marker = tier4_autoware_utils::createDefaultMarker(
- "base_link", current_time, ns + "_path", 0L, Marker::LINE_STRIP,
- tier4_autoware_utils::createMarkerScale(0.2, 0.2, 0.2),
- tier4_autoware_utils::createMarkerColor(color_r, color_g, color_b, color_a));
- path_marker.points.resize(path.size());
- for (size_t i = 0; i < path.size(); ++i) {
- path_marker.points.at(i) = path.at(i).position;
- }
- debug_markers.markers.push_back(path_marker);
-
- auto polygon_marker = tier4_autoware_utils::createDefaultMarker(
- "base_link", current_time, ns + "_polygon", 0, Marker::LINE_LIST,
- tier4_autoware_utils::createMarkerScale(0.03, 0.0, 0.0),
- tier4_autoware_utils::createMarkerColor(color_r, color_g, color_b, color_a));
- for (const auto & poly : polygons) {
- for (size_t dp_idx = 0; dp_idx < poly.outer().size(); ++dp_idx) {
- const auto & boost_cp = poly.outer().at(dp_idx);
- const auto & boost_np = poly.outer().at((dp_idx + 1) % poly.outer().size());
- const auto curr_point = tier4_autoware_utils::createPoint(boost_cp.x(), boost_cp.y(), 0.0);
- const auto next_point = tier4_autoware_utils::createPoint(boost_np.x(), boost_np.y(), 0.0);
- polygon_marker.points.push_back(curr_point);
- polygon_marker.points.push_back(next_point);
- }
- }
- debug_markers.markers.push_back(polygon_marker);
-
- auto object_data_marker = tier4_autoware_utils::createDefaultMarker(
- "base_link", current_time, ns + "_objects", 0, Marker::SPHERE_LIST,
- tier4_autoware_utils::createMarkerScale(0.5, 0.5, 0.5),
- tier4_autoware_utils::createMarkerColor(color_r, color_g, color_b, color_a));
- for (const auto & e : objects) {
- object_data_marker.points.push_back(e.position);
- }
- debug_markers.markers.push_back(object_data_marker);
-
- // Visualize planner type text
- if (closest_object.has_value()) {
- const auto & obj = closest_object.value();
- const auto color = tier4_autoware_utils::createMarkerColor(0.95, 0.95, 0.95, 0.999);
- auto closest_object_velocity_marker_array = tier4_autoware_utils::createDefaultMarker(
- "base_link", obj.stamp, ns + "_closest_object_velocity", 0,
- visualization_msgs::msg::Marker::TEXT_VIEW_FACING,
- tier4_autoware_utils::createMarkerScale(0.0, 0.0, 0.7), color);
- closest_object_velocity_marker_array.pose.position = obj.position;
- const auto ego_velocity = current_velocity_ptr_->longitudinal_velocity;
- closest_object_velocity_marker_array.text =
- "Object velocity: " + std::to_string(obj.velocity) + " [m/s]\n";
- closest_object_velocity_marker_array.text +=
- "Object relative velocity to ego: " + std::to_string(obj.velocity - ego_velocity) + " [m/s]";
- debug_markers.markers.push_back(closest_object_velocity_marker_array);
- }
-}
-
-void AEB::addCollisionMarker(const ObjectData & data, MarkerArray & debug_markers)
-{
- auto point_marker = tier4_autoware_utils::createDefaultMarker(
- "base_link", data.stamp, "collision_point", 0, Marker::SPHERE,
- tier4_autoware_utils::createMarkerScale(0.3, 0.3, 0.3),
- tier4_autoware_utils::createMarkerColor(1.0, 0.0, 0.0, 0.3));
- point_marker.pose.position = data.position;
- debug_markers.markers.push_back(point_marker);
-}
-
-} // namespace autoware::motion::control::autonomous_emergency_braking
-
-#include
-RCLCPP_COMPONENTS_REGISTER_NODE(autoware::motion::control::autonomous_emergency_braking::AEB)
diff --git a/control/autoware_autonomous_emergency_braking/CMakeLists.txt b/control/autoware_autonomous_emergency_braking/CMakeLists.txt
new file mode 100644
index 0000000000000..7f38e4387b452
--- /dev/null
+++ b/control/autoware_autonomous_emergency_braking/CMakeLists.txt
@@ -0,0 +1,34 @@
+cmake_minimum_required(VERSION 3.14)
+project(autoware_autonomous_emergency_braking)
+
+find_package(autoware_cmake REQUIRED)
+autoware_package()
+
+find_package(PCL REQUIRED)
+
+include_directories(
+ include
+ SYSTEM
+ ${PCL_INCLUDE_DIRS}
+)
+
+set(AEB_NODE ${PROJECT_NAME}_node)
+ament_auto_add_library(${AEB_NODE} SHARED
+ src/node.cpp
+)
+
+rclcpp_components_register_node(${AEB_NODE}
+ PLUGIN "autoware::motion::control::autonomous_emergency_braking::AEB"
+ EXECUTABLE ${PROJECT_NAME}
+)
+
+if(BUILD_TESTING)
+ find_package(ament_lint_auto REQUIRED)
+ ament_lint_auto_find_test_dependencies()
+endif()
+
+ament_auto_package(
+ INSTALL_TO_SHARE
+ launch
+ config
+)
diff --git a/control/autonomous_emergency_braking/README.md b/control/autoware_autonomous_emergency_braking/README.md
similarity index 100%
rename from control/autonomous_emergency_braking/README.md
rename to control/autoware_autonomous_emergency_braking/README.md
diff --git a/control/autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml b/control/autoware_autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml
similarity index 100%
rename from control/autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml
rename to control/autoware_autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml
diff --git a/control/autonomous_emergency_braking/image/obstacle_filtering_1.drawio.svg b/control/autoware_autonomous_emergency_braking/image/obstacle_filtering_1.drawio.svg
similarity index 100%
rename from control/autonomous_emergency_braking/image/obstacle_filtering_1.drawio.svg
rename to control/autoware_autonomous_emergency_braking/image/obstacle_filtering_1.drawio.svg
diff --git a/control/autonomous_emergency_braking/image/obstacle_filtering_2.drawio.svg b/control/autoware_autonomous_emergency_braking/image/obstacle_filtering_2.drawio.svg
similarity index 100%
rename from control/autonomous_emergency_braking/image/obstacle_filtering_2.drawio.svg
rename to control/autoware_autonomous_emergency_braking/image/obstacle_filtering_2.drawio.svg
diff --git a/control/autonomous_emergency_braking/image/range.drawio.svg b/control/autoware_autonomous_emergency_braking/image/range.drawio.svg
similarity index 100%
rename from control/autonomous_emergency_braking/image/range.drawio.svg
rename to control/autoware_autonomous_emergency_braking/image/range.drawio.svg
diff --git a/control/autonomous_emergency_braking/image/rss_check.drawio.svg b/control/autoware_autonomous_emergency_braking/image/rss_check.drawio.svg
similarity index 100%
rename from control/autonomous_emergency_braking/image/rss_check.drawio.svg
rename to control/autoware_autonomous_emergency_braking/image/rss_check.drawio.svg
diff --git a/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp b/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp
new file mode 100644
index 0000000000000..3e72d72cb9946
--- /dev/null
+++ b/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp
@@ -0,0 +1,343 @@
+// Copyright 2023 TIER IV, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef AUTOWARE_AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_
+#define AUTOWARE_AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+namespace autoware::motion::control::autonomous_emergency_braking
+{
+
+using autoware_planning_msgs::msg::Trajectory;
+using autoware_system_msgs::msg::AutowareState;
+using autoware_vehicle_msgs::msg::VelocityReport;
+using nav_msgs::msg::Odometry;
+using sensor_msgs::msg::Imu;
+using sensor_msgs::msg::PointCloud2;
+using PointCloud = pcl::PointCloud;
+using autoware::vehicle_info_utils::VehicleInfo;
+using diagnostic_updater::DiagnosticStatusWrapper;
+using diagnostic_updater::Updater;
+using tier4_autoware_utils::Point2d;
+using tier4_autoware_utils::Polygon2d;
+using visualization_msgs::msg::Marker;
+using visualization_msgs::msg::MarkerArray;
+using Path = std::vector