From f48667399970223b74b9e2558260d2aa96627efa Mon Sep 17 00:00:00 2001 From: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> Date: Mon, 29 May 2023 13:25:11 +0900 Subject: [PATCH 001/446] feat(behavior_path_planner): relax margin_from_boundary in goal_planner param (#371) --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 3c5846edf3..eaa103bff7 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -18,7 +18,7 @@ max_lateral_offset: 0.5 lateral_offset_interval: 0.25 ignore_distance_from_lane_start: 15.0 - margin_from_boundary: 0.5 + margin_from_boundary: 0.75 # occupancy grid map occupancy_grid: From 30b422a14c4a7249fb197fdc6630480ed69b63cc Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Mon, 29 May 2023 16:08:05 +0900 Subject: [PATCH 002/446] refactor(autoware_launch): remove duplicated path in planning launch (#365) Signed-off-by: Takamasa Horibe --- .../tier4_planning_component.launch.xml | 146 ++++++------------ 1 file changed, 45 insertions(+), 101 deletions(-) diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 6db13f5259..2afb669018 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -8,6 +8,13 @@ + + + + + + + @@ -15,128 +22,65 @@ - - + + - + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - + + - + From 402b2ff0db017a27943df9d1f0de305ebbcd4e70 Mon Sep 17 00:00:00 2001 From: Ahmed Ebrahim <36835765+ahmeddesokyebrahim@users.noreply.github.com> Date: Tue, 30 May 2023 11:08:25 +0300 Subject: [PATCH 003/446] feat: first draft proposal implementation for handling invalid lanelets (#235) * feat: first draft proposal implementation for handling invalid lanelets Signed-off-by: AhmedEbrahim * style(pre-commit): autofix * feat: adding invalid lanelet for rviz visualization Signed-off-by: AhmedEbrahim * feat: fixing review comment Signed-off-by: AhmedEbrahim * feat: changing module name from invalid_lanelet to no_drivable_lane Signed-off-by: AhmedEbrahim * feat: fixing merge conflict mistakes Signed-off-by: AhmedEbrahim * feat: fixing merge conflict mistakes Signed-off-by: AhmedEbrahim * feat: fixing merge conflicts Signed-off-by: AhmedEbrahim * feat: removing rtc handing Signed-off-by: AhmedEbrahim * feat(no_drivable_lane): reflecting refactoring changes to no_drivable_lane Signed-off-by: AhmedEbrahim --------- Signed-off-by: AhmedEbrahim Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../behavior_velocity_planner.param.yaml | 1 + .../no_drivable_lane.param.yaml | 5 ++++ .../tier4_planning_component.launch.xml | 1 + autoware_launch/rviz/autoware.rviz | 24 +++++++++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_drivable_lane.param.yaml diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml index 6f1341cb02..bbd7cd9592 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml @@ -12,6 +12,7 @@ launch_run_out: false launch_speed_bump: false launch_out_of_lane: true + launch_no_drivable_lane: false forward_path_length: 1000.0 backward_path_length: 5.0 stop_line_extend_length: 5.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_drivable_lane.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_drivable_lane.param.yaml new file mode 100644 index 0000000000..d75acfc0b6 --- /dev/null +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_drivable_lane.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + no_drivable_lane: + stop_margin: 1.5 # Stop margin before the no drivable lane [m] + print_debug_info: false diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 2afb669018..fc868add66 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -58,6 +58,7 @@ + diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 484ea7e8fd..a3db702f99 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -1639,6 +1639,18 @@ Visualization Manager: Reliability Policy: Reliable Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/virtual_wall/out_of_lane Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: VirtualWall (NoDrivableLane) + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/virtual_wall/no_drivable_lane + Value: true Enabled: true Name: VirtualWall - Class: rviz_common/Group @@ -1909,6 +1921,18 @@ Visualization Manager: Reliability Policy: Reliable Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/dynamic_avoidance Value: false + - Class: rviz_default_plugins/MarkerArray + Enabled: false + Name: NoDrivableLane + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/no_drivable_lane + Value: false Enabled: false Name: DebugMarker - Class: rviz_common/Group From 0207a00964fca6fb549423a35b6f881a45ef06df Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 30 May 2023 17:34:38 +0900 Subject: [PATCH 004/446] feat(lane_change): check lateral offset at lc finish judgement (#375) Signed-off-by: satoshi-ota --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index fe24eca17d..2b736a947e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -50,5 +50,7 @@ aborting_time: 5.0 # [s] abort_max_lateral_jerk: 100.0 # [m/s3] + finish_judge_lateral_threshold: 0.2 # [m] + # debug publish_debug_marker: false From d0b90397642ff17cd5d0ee6821805dcc43f05c03 Mon Sep 17 00:00:00 2001 From: beginningfan <103237402+beginningfan@users.noreply.github.com> Date: Wed, 31 May 2023 15:36:44 +0800 Subject: [PATCH 005/446] fix(tier4_perception_component_launch): add sync_param_path (#350) * fix(tier4_perception_component_launch): add sync_param_path Signed-off-by: beginningfan * style(pre-commit): autofix --------- Signed-off-by: beginningfan Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../object_recognition/detection/roi_sync.param.yaml | 5 +++++ .../launch/components/tier4_perception_component.launch.xml | 1 + 2 files changed, 6 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/roi_sync.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/roi_sync.param.yaml b/autoware_launch/config/perception/object_recognition/detection/roi_sync.param.yaml new file mode 100644 index 0000000000..21ba13787f --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/roi_sync.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + input_offset_ms: [61.67, 111.67, 45.0, 28.33, 78.33, 95.0] + timeout_ms: 70.0 + match_threshold_ms: 50.0 diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index c0c2e4fc4c..4417dba4d8 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -21,6 +21,7 @@ name="object_recognition_detection_pointcloud_map_filter_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/pointcloud_map_filter.param.yaml" /> + Date: Wed, 31 May 2023 17:32:39 +0900 Subject: [PATCH 006/446] feat(pull_out): support pull out normal lane (#377) * add th_blinker_on_lateral_offset: 1.0 Signed-off-by: kosuke55 * minimum_shift_pull_out_distance: 0.0 Signed-off-by: kosuke55 * minimum_lateral_jerk: 0.1 Signed-off-by: kosuke55 --------- Signed-off-by: kosuke55 --- .../behavior_path_planner/pull_out/pull_out.param.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/pull_out/pull_out.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/pull_out/pull_out.param.yaml index 68000747b7..bd1ccd2065 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/pull_out/pull_out.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/pull_out/pull_out.param.yaml @@ -4,15 +4,16 @@ th_arrived_distance: 1.0 th_stopped_velocity: 0.01 th_stopped_time: 1.0 + th_blinker_on_lateral_offset: 1.0 collision_check_margin: 1.0 collision_check_distance_from_end: 1.0 # shift pull out enable_shift_pull_out: true shift_pull_out_velocity: 2.0 pull_out_sampling_num: 4 - minimum_shift_pull_out_distance: 20.0 + minimum_shift_pull_out_distance: 0.0 maximum_lateral_jerk: 2.0 - minimum_lateral_jerk: 0.5 + minimum_lateral_jerk: 0.1 deceleration_interval: 15.0 # geometric pull out enable_geometric_pull_out: true From c6312c7dcaa8fdcf17b54c11953b2c23861cd577 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 31 May 2023 23:44:26 +0900 Subject: [PATCH 007/446] feat(rtc_auto_mode_manager): delete external_request_lane_change from rtc auto mode manager config (#379) --- .../rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml index af82a3461f..2e53b5d246 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml @@ -7,8 +7,6 @@ - "intersection" - "no_stopping_area" - "traffic_light" - - "external_request_lane_change_left" - - "external_request_lane_change_right" - "lane_change_left" - "lane_change_right" - "avoidance_left" From e566355d57d16bf48c8696b531d11d47cb9180fb Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Fri, 2 Jun 2023 18:31:34 +0900 Subject: [PATCH 008/446] fix(trajectory_follower_nodes): mpc_follower does not send proper converged data under low steering rate limit (#378) --- .../config/control/trajectory_follower/lateral/mpc.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml index 0bd5f74fd9..678544d4bf 100644 --- a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml +++ b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml @@ -62,6 +62,7 @@ keep_steer_control_until_converged: true new_traj_duration_time: 1.0 new_traj_end_dist: 0.3 + mpc_converged_threshold_rps: 0.01 # threshold of mpc convergence check [rad/s] # steer offset steering_offset: From ae2700a6a878eb240283f77ba5647937c7c19722 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 5 Jun 2023 15:23:39 +0900 Subject: [PATCH 009/446] feat(autoware_launch): dynamic steer rate limit in mpc (#381) * feat(autoware_launch): dynamic steer rate limit in mpc Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../control/trajectory_follower/lateral/mpc.param.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml index 678544d4bf..538224cf2b 100644 --- a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml +++ b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml @@ -47,7 +47,10 @@ vehicle_model_type: "kinematics" # vehicle model type for mpc prediction. option is kinematics, kinematics_no_delay, and dynamics input_delay: 0.24 # steering input delay time for delay compensation vehicle_model_steer_tau: 0.3 # steering dynamics time constant (1d approximation) [s] - steer_rate_lim_dps: 40.0 # steering angle rate limit [deg/s] + steer_rate_lim_dps_list_by_curvature: [10.0, 20.0, 30.0] # steering angle rate limit list depending on curvature [deg/s] + curvature_list_for_steer_rate_lim: [0.001, 0.002, 0.01] # curvature list for steering angle rate limit interpolation in ascending order [/m] + steer_rate_lim_dps_list_by_velocity: [40.0, 30.0, 20.0] # steering angle rate limit list depending on velocity [deg/s] + velocity_list_for_steer_rate_lim: [10.0, 15.0, 20.0] # velocity list for steering angle rate limit interpolation in ascending order [m/s] acceleration_limit: 2.0 # acceleration limit for trajectory velocity modification [m/ss] velocity_time_constant: 0.3 # velocity dynamics time constant for trajectory velocity modification [s] From 2c33f382f9bfc43717fd5391c57564a02900dc00 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Mon, 5 Jun 2023 16:55:22 +0900 Subject: [PATCH 010/446] feat(avoidance): add new parameter (#374) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index e0b709cfe8..ef9dabd8b0 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -101,6 +101,7 @@ lateral: lateral_collision_margin: 1.0 # [m] lateral_execution_threshold: 0.499 # [m] + lateral_small_shift_threshold: 0.101 # [m] road_shoulder_safety_margin: 0.3 # [m] max_right_shift_length: 5.0 max_left_shift_length: 5.0 From 87a63f5c4ce0c0b1f36a5362c030b47c0319f268 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 6 Jun 2023 01:53:10 +0900 Subject: [PATCH 011/446] feat(autoware_launch): suppress flickering to entry slow down (#382) Signed-off-by: Takayuki Murooka --- .../obstacle_cruise_planner/obstacle_cruise_planner.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index e7a9a7fb27..37d3ab4984 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -96,6 +96,9 @@ max_lat_margin: 1.1 # lateral margin between obstacle and trajectory band with ego's width lat_hysteresis_margin: 0.2 + successive_num_to_entry_slow_down_condition: 5 + successive_num_to_exit_slow_down_condition: 5 + cruise: pid_based_planner: use_velocity_limit_based_planner: true From a0392787a172f10e6927a9a9537379612512d1d4 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 6 Jun 2023 14:15:18 +0900 Subject: [PATCH 012/446] feat(avoidance): add option for yield during shifting (#383) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index ef9dabd8b0..1e3b5bec1e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -17,6 +17,7 @@ enable_force_avoidance_for_stopped_vehicle: false enable_safety_check: true enable_yield_maneuver: true + enable_yield_maneuver_during_shifting: false disable_path_update: false use_hatched_road_markings: false From 40685b5f0b31ef23039a0165054b78d9080404f9 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Tue, 6 Jun 2023 15:21:51 +0900 Subject: [PATCH 013/446] fix(planning_launch): parameterize scale for lc safety check (#384) Signed-off-by: Muhammad Zulfaqar Azmi --- .../behavior_path_planner/behavior_path_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml index f6c3d3a7ae..aa56edee2f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml @@ -31,6 +31,7 @@ lateral_distance_max_threshold: 1.7 longitudinal_distance_min_threshold: 3.0 + longitudinal_velocity_delta_time: 0.8 expected_front_deceleration: -1.0 expected_rear_deceleration: -1.0 From 5fc1994ca0c91b57fbab711f122e3d31d994c8a2 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 7 Jun 2023 20:48:13 +0900 Subject: [PATCH 014/446] refactor(start_planner): rename pull out to start planner (#386) Signed-off-by: kosuke55 --- .../behavior_path_planner_tree.xml | 8 ++++---- ...ior_path_planner_tree_lane_change_only.xml | 8 ++++---- .../behavior_path_planner_tree_pull_out.xml | 12 +++++------ ..._planner_tree_with_external_request_LC.xml | 8 ++++---- .../scene_module_manager.param.yaml | 2 +- .../start_planner.param.yaml} | 2 +- .../rtc_auto_mode_manager.param.yaml | 4 ++-- .../tier4_planning_component.launch.xml | 2 +- autoware_launch/rviz/autoware.rviz | 20 +++++++++---------- 9 files changed, 33 insertions(+), 33 deletions(-) rename autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/{pull_out/pull_out.param.yaml => start_planner/start_planner.param.yaml} (98%) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree.xml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree.xml index 4d8f1af9fa..e6c7f6cc24 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree.xml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree.xml @@ -8,8 +8,8 @@ - - + + @@ -70,10 +70,10 @@ desc - + - + desc diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_lane_change_only.xml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_lane_change_only.xml index 65c600d246..8988dd41b5 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_lane_change_only.xml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_lane_change_only.xml @@ -8,8 +8,8 @@ - - + + @@ -62,10 +62,10 @@ desc - + - + desc diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_pull_out.xml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_pull_out.xml index 70d6b37cb6..32f30af69a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_pull_out.xml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_pull_out.xml @@ -9,9 +9,9 @@ - - - + + + @@ -73,11 +73,11 @@ - + - - + + desc diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_with_external_request_LC.xml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_with_external_request_LC.xml index 80fe7ea8da..0410f775f7 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_with_external_request_LC.xml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_with_external_request_LC.xml @@ -8,8 +8,8 @@ - - + + @@ -57,10 +57,10 @@ desc - + - + desc diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index 76ae718c01..e52aebec9d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -31,7 +31,7 @@ priority: 6 max_module_size: 1 - pull_out: + start_planner: enable_module: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/pull_out/pull_out.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml similarity index 98% rename from autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/pull_out/pull_out.param.yaml rename to autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index bd1ccd2065..0d8782cb50 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/pull_out/pull_out.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -1,6 +1,6 @@ /**: ros__parameters: - pull_out: + start_planner: th_arrived_distance: 1.0 th_stopped_velocity: 0.01 th_stopped_time: 1.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml index 2e53b5d246..0aa3cbd49e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml @@ -12,7 +12,7 @@ - "avoidance_left" - "avoidance_right" - "goal_planner" - - "pull_out" + - "start_planner" - "intersection_occlusion" default_enable_list: @@ -27,5 +27,5 @@ - "avoidance_left" - "avoidance_right" - "goal_planner" - - "pull_out" + - "start_planner" - "intersection_occlusion" diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index fc868add66..47d22dc8d1 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -38,7 +38,7 @@ - + diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index a3db702f99..3d922b9c8a 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -1131,13 +1131,13 @@ Visualization Manager: - Class: rviz_plugins/Path Color Border Vel Max: 3 Enabled: false - Name: PathReference_PullOut + Name: PathReference_StartPlanner Topic: Depth: 5 Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /planning/path_reference/pull_out + Value: /planning/path_reference/start_planner Value: true View Path: Alpha: 0.3 @@ -1315,13 +1315,13 @@ Visualization Manager: - Class: rviz_plugins/Path Color Border Vel Max: 3 Enabled: true - Name: PathChangeCandidate_PullOut + Name: PathChangeCandidate_StartPlanner Topic: Depth: 5 Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /planning/path_candidate/pull_out + Value: /planning/path_candidate/start_planner Value: true View Path: Alpha: 0.30000001192092896 @@ -1460,7 +1460,7 @@ Visualization Manager: Value: true - Class: rviz_default_plugins/MarkerArray Enabled: true - Name: VirtualWall (PullOut) + Name: VirtualWall (StartPlanner) Namespaces: {} Topic: @@ -1468,7 +1468,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/virtual_wall/pull_out + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/virtual_wall/start_planner Value: true - Class: rviz_default_plugins/MarkerArray Enabled: true @@ -1863,7 +1863,7 @@ Visualization Manager: Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false - Name: PullOut + Name: StartPlanner Namespaces: {} Topic: @@ -1871,7 +1871,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/pull_out + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/start_planner Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false @@ -2028,7 +2028,7 @@ Visualization Manager: Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false - Name: Info (PullOut) + Name: Info (StartPlanner) Namespaces: {} Topic: @@ -2036,7 +2036,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/info/pull_out + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/info/start_planner Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false From c6108a23bc3069ead5c59d323f38b93060863858 Mon Sep 17 00:00:00 2001 From: "Takagi, Isamu" <43976882+isamu-takagi@users.noreply.github.com> Date: Wed, 7 Jun 2023 21:40:45 +0900 Subject: [PATCH 015/446] refactor(behavior_velocity_planner): update launch and parameter files for plugin (#369) * feat: update parameter files Signed-off-by: Takagi, Isamu * feat: update param name Signed-off-by: Takagi, Isamu * feat: add disabled module as comment Signed-off-by: Takagi, Isamu * feat: use behavior_velocity_config_path Signed-off-by: Takagi, Isamu --------- Signed-off-by: Takagi, Isamu --- .../behavior_velocity_planner.param.yaml | 28 ++++++++++--------- .../tier4_planning_component.launch.xml | 28 +++++++++---------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml index bbd7cd9592..1b71b3e7e2 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml @@ -1,18 +1,5 @@ /**: ros__parameters: - launch_stop_line: true - launch_crosswalk: true - launch_traffic_light: true - launch_intersection: true - launch_blind_spot: true - launch_detection_area: true - launch_virtual_traffic_light: false # disabled by default to not confuse newcomers - launch_occlusion_spot: false - launch_no_stopping_area: true - launch_run_out: false - launch_speed_bump: false - launch_out_of_lane: true - launch_no_drivable_lane: false forward_path_length: 1000.0 backward_path_length: 5.0 stop_line_extend_length: 5.0 @@ -21,3 +8,18 @@ system_delay: 0.5 delay_response_time: 0.5 is_publish_debug_path: false # publish all debug path with lane id in each module + launch_modules: + - behavior_velocity_planner::CrosswalkModulePlugin + - behavior_velocity_planner::WalkwayModulePlugin + - behavior_velocity_planner::TrafficLightModulePlugin + - behavior_velocity_planner::IntersectionModulePlugin # Intersection module should be before merge from private to declare intersection parameters. + - behavior_velocity_planner::MergeFromPrivateModulePlugin + - behavior_velocity_planner::BlindSpotModulePlugin + - behavior_velocity_planner::DetectionAreaModulePlugin + # behavior_velocity_planner::VirtualTrafficLightModulePlugin + - behavior_velocity_planner::NoStoppingAreaModulePlugin # No stopping area module requires all the stop line. Therefore this modules should be placed at the bottom. + - behavior_velocity_planner::StopLineModulePlugin # Permanent stop line module should be after no stopping area + # behavior_velocity_planner::OcclusionSpotModulePlugin + # behavior_velocity_planner::RunOutModulePlugin + # behavior_velocity_planner::SpeedBumpModulePlugin + - behavior_velocity_planner::OutOfLaneModulePlugin diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 47d22dc8d1..199c10cb02 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -45,21 +45,19 @@ - - - - - - - - - - - - - - - + + + From 4fb3a4cf21b25eff48102ba2e3ee883dcaeaeb7f Mon Sep 17 00:00:00 2001 From: "Takagi, Isamu" <43976882+isamu-takagi@users.noreply.github.com> Date: Thu, 8 Jun 2023 05:27:12 +0900 Subject: [PATCH 016/446] refactor(behavior_velocity_planner): load all module parameters (#389) load all module parameters Signed-off-by: Takagi, Isamu --- .../behavior_velocity_planner.param.yaml | 1 + .../launch/components/tier4_planning_component.launch.xml | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml index 1b71b3e7e2..7a0ef047f7 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml @@ -23,3 +23,4 @@ # behavior_velocity_planner::RunOutModulePlugin # behavior_velocity_planner::SpeedBumpModulePlugin - behavior_velocity_planner::OutOfLaneModulePlugin + # behavior_velocity_planner::NoDrivableLaneModulePlugin diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 199c10cb02..6055b14e48 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -55,8 +55,13 @@ $(var behavior_velocity_config_path)/intersection.param.yaml, $(var behavior_velocity_config_path)/stop_line.param.yaml, $(var behavior_velocity_config_path)/traffic_light.param.yaml, + $(var behavior_velocity_config_path)/virtual_traffic_light.param.yaml, + $(var behavior_velocity_config_path)/occlusion_spot.param.yaml, $(var behavior_velocity_config_path)/no_stopping_area.param.yaml, - $(var behavior_velocity_config_path)/out_of_lane.param.yaml]" + $(var behavior_velocity_config_path)/run_out.param.yaml, + $(var behavior_velocity_config_path)/speed_bump.param.yaml, + $(var behavior_velocity_config_path)/out_of_lane.param.yaml, + $(var behavior_velocity_config_path)/no_drivable_lane.param.yaml]" /> From 65884add50a684ddf8674e6e065ea5eb97888f81 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Thu, 8 Jun 2023 09:40:38 +0900 Subject: [PATCH 017/446] feat(behavior_path_planner): add flag to enable auto mode without rtc_auto_mode_manager (#387) * add param Signed-off-by: kyoichi-sugahara * enable rtc to false for default auto mode module Signed-off-by: kyoichi-sugahara * update Signed-off-by: kyoichi-sugahara * set avoidance module enable_rtc as false Signed-off-by: kyoichi-sugahara * set all module enable_rtc param as true Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../scene_module_manager.param.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index e52aebec9d..d4da549dcd 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -5,6 +5,7 @@ ros__parameters: external_request_lane_change_left: enable_module: false + enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true priority: 7 @@ -12,6 +13,7 @@ external_request_lane_change_right: enable_module: false + enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true priority: 7 @@ -19,6 +21,7 @@ lane_change_left: enable_module: true + enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true priority: 6 @@ -26,6 +29,7 @@ lane_change_right: enable_module: true + enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true priority: 6 @@ -33,6 +37,7 @@ start_planner: enable_module: true + enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false priority: 0 @@ -40,6 +45,7 @@ side_shift: enable_module: true + enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false priority: 2 @@ -47,6 +53,7 @@ goal_planner: enable_module: true + enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false priority: 1 @@ -54,6 +61,7 @@ avoidance: enable_module: true + enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false priority: 5 @@ -62,6 +70,7 @@ # NOTE: This module is unstable. Deprecated for now. avoidance_by_lc: enable_module: false + enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false priority: 4 @@ -69,6 +78,7 @@ dynamic_avoidance: enable_module: false + enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true priority: 3 From 612794396161e9d2348eac5a1014a85939f0529c Mon Sep 17 00:00:00 2001 From: Tomoya Kimura Date: Mon, 12 Jun 2023 10:59:08 +0900 Subject: [PATCH 018/446] fix(autoware_launch): add missing parameter in autonmous emergency braking (#392) Signed-off-by: tomoya.kimura --- .../autonomous_emergency_braking.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/control/autonomous_emergency_braking/autonomous_emergency_braking.param.yaml b/autoware_launch/config/control/autonomous_emergency_braking/autonomous_emergency_braking.param.yaml index 6019eaae50..09db0feb34 100644 --- a/autoware_launch/config/control/autonomous_emergency_braking/autonomous_emergency_braking.param.yaml +++ b/autoware_launch/config/control/autonomous_emergency_braking/autonomous_emergency_braking.param.yaml @@ -13,4 +13,5 @@ a_obj_min: -1.0 prediction_time_horizon: 1.5 prediction_time_interval: 0.1 + collision_keeping_sec: 0.0 aeb_hz: 10.0 From a27a36e64cb85681b3418e7cdf94570d92b75672 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 12 Jun 2023 17:49:39 +0900 Subject: [PATCH 019/446] refactor: intersection module (#391) Signed-off-by: Mamoru Sobue --- .../intersection.param.yaml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 0f176f1eaf..c81a22f6b2 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -2,24 +2,23 @@ ros__parameters: intersection: common: - detection_area_margin: 0.5 # [m] - detection_area_right_margin: 0.5 # [m] - detection_area_left_margin: 0.5 # [m] - detection_area_length: 200.0 # [m] - detection_area_angle_threshold: 0.785 # [rad] + attention_area_margin: 0.5 # [m] + attention_area_length: 200.0 # [m] + attention_area_angle_threshold: 0.785 # [rad] stop_line_margin: 3.0 intersection_velocity: 2.778 # 2.778m/s = 10.0km/h intersection_max_accel: 0.5 # m/ss stop_overshoot_margin: 0.5 # [m] overshoot margin for stuck, collision detection use_intersection_area: false + path_interpolation_ds: 0.1 # [m] stuck_vehicle: use_stuck_stopline: false # stopline generate before the intersection lanelet when is_stuck + stuck_vehicle_detect_dist: 3.0 # this should be the length between cars when they are stopped. The actual stuck vehicle detection length will be this value + vehicle_length. stuck_vehicle_ignore_dist: 10.0 # obstacle stop max distance(5.0m) + stuck vehicle size / 2 (0.0m-) stuck_vehicle_vel_thr: 0.833 # 0.833m/s = 3.0km/h - stuck_vehicle_detect_dist: 3.0 # this should be the length between cars when they are stopped. The actual stuck vehicle detection length will be this value + vehicle_length. - enable_front_car_decel_prediction: false # By default this feature is disabled - assumed_front_car_decel: 1.0 # [m/ss] the expected deceleration of front car when front car as well as ego are turning + # enable_front_car_decel_prediction: false # By default this feature is disabled + # assumed_front_car_decel: 1.0 # [m/ss] the expected deceleration of front car when front car as well as ego are turning collision_detection: state_transit_margin_time: 1.0 @@ -31,7 +30,7 @@ occlusion: enable: false - occlusion_detection_area_length: 70.0 # [m] + occlusion_attention_area_length: 70.0 # [m] enable_creeping: false # flag to use the creep velocity when reaching occlusion limit stop line occlusion_creep_velocity: 0.8333 # the creep velocity to occlusion limit stop line peeking_offset: -0.5 # [m] offset for peeking into detection area From b0885830b1c17a632d3881c705e85645f772b8c3 Mon Sep 17 00:00:00 2001 From: Yutaka Shimizu <43805014+purewater0901@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:38:48 +0900 Subject: [PATCH 020/446] feat(planning_launch): add a parameter for turn signal activation (#397) --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 2b736a947e..fb63a1b35c 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -6,6 +6,7 @@ backward_length_buffer_for_end_of_lane: 3.0 # [m] lane_change_finish_judge_buffer: 2.0 # [m] + min_length_for_turn_signal_activation: 10.0 #[m] lane_changing_lateral_jerk: 0.5 # [m/s3] lateral_acc_switching_velocity: 4.0 #[m/s] From 42a9820da902bbb48acf5d3d0811933808139637 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 13 Jun 2023 16:08:10 +0900 Subject: [PATCH 021/446] feat(rviz): hide crosswalk areas (#395) Signed-off-by: satoshi-ota --- autoware_launch/rviz/autoware.rviz | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 3d922b9c8a..d18d37cbfd 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -356,6 +356,7 @@ Visualization Manager: center_lane_line: false center_line_arrows: false crosswalk_lanelets: true + crosswalk_areas: false lane_start_bound: false lanelet direction: true lanelet_id: false From 15564cd20d9d2f05361f8b44d16a17059a296cc7 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Wed, 14 Jun 2023 20:03:54 +0900 Subject: [PATCH 022/446] feat(velocity_smoother): plan from ego velocity on manual mode (#396) Signed-off-by: Takamasa Horibe --- .../motion_velocity_smoother.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml index e600334ee2..868b1bd15c 100644 --- a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml @@ -56,3 +56,5 @@ # system over_stop_velocity_warn_thr: 1.389 # used to check if the optimization exceeds the input velocity on the stop point + + plan_from_ego_speed_on_manual_mode: true # planning is done from ego velocity/acceleration on MANUAL mode. This should be true for smooth transition from MANUAL to AUTONOMOUS, but could be false for debugging. From 45d91a1ddab86adee878822f95f02fa3b8641b58 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 15 Jun 2023 10:19:03 +0900 Subject: [PATCH 023/446] feat(avoidance): additional buffer for perception noise (#373) feat(avoidance): additional offset for perception noise Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 1e3b5bec1e..4b8b514a5f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -28,45 +28,55 @@ # avoidance is performed for the object type with true target_object: car: - enable: true - envelope_buffer_margin: 0.3 - safety_buffer_lateral: 0.7 - safety_buffer_longitudinal: 0.0 + enable: true # [-] + max_expand_ratio: 0.0 # [-] + envelope_buffer_margin: 0.3 # [m] + safety_buffer_lateral: 0.7 # [m] + safety_buffer_longitudinal: 0.0 # [m] truck: enable: true + max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bus: enable: true + max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 trailer: enable: true + max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 unknown: enable: false + max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bicycle: enable: false + max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 motorcycle: enable: false + max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 pedestrian: enable: false + max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 + lower_distance_for_polygon_expansion: 30.0 # [m] + upper_distance_for_polygon_expansion: 100.0 # [m] # For target object filtering target_filtering: From d7751ac2e08c7197d23911764b9005634296c89f Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Thu, 15 Jun 2023 14:16:47 +0900 Subject: [PATCH 024/446] feat(avoidance): change object_check_backward_distance from 100m to 10m (#388) Signed-off-by: kosuke55 --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 4b8b514a5f..f7f1cfc07e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -89,7 +89,7 @@ object_ignore_distance_crosswalk_forward: 30.0 # [m] object_ignore_distance_crosswalk_backward: 30.0 # [m] object_check_forward_distance: 150.0 # [m] - object_check_backward_distance: 100.0 # [m] + object_check_backward_distance: 10.0 # [m] object_check_goal_distance: 20.0 # [m] # filtering parking objects threshold_distance_object_is_on_center: 1.0 # [m] From bb513424f0406b0ebc8993c1ba7a3ca422e39ba8 Mon Sep 17 00:00:00 2001 From: Yutaka Shimizu <43805014+purewater0901@users.noreply.github.com> Date: Thu, 15 Jun 2023 20:23:45 +0900 Subject: [PATCH 025/446] feat(planning_launch): add a turn signal deactivation parameter for lane change (#398) --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index fb63a1b35c..a6e1594b89 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -6,7 +6,6 @@ backward_length_buffer_for_end_of_lane: 3.0 # [m] lane_change_finish_judge_buffer: 2.0 # [m] - min_length_for_turn_signal_activation: 10.0 #[m] lane_changing_lateral_jerk: 0.5 # [m/s3] lateral_acc_switching_velocity: 4.0 #[m/s] @@ -16,6 +15,10 @@ longitudinal_acceleration_sampling_num: 5 lateral_acceleration_sampling_num: 3 + # turn signal + min_length_for_turn_signal_activation: 10.0 # [m] + length_ratio_for_turn_signal_deactivation: 0.8 # ratio (desired end position) + # longitudinal acceleration min_longitudinal_acc: -1.0 max_longitudinal_acc: 1.0 From 202d416e5cbda25c4075ee40017f09f7020262e8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 16 Jun 2023 15:32:40 +0900 Subject: [PATCH 026/446] ci(pre-commit): autoupdate (#318) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ci(pre-commit): autoupdate updates: - [github.com/igorshubovych/markdownlint-cli: v0.33.0 → v0.34.0](https://github.com/igorshubovych/markdownlint-cli/compare/v0.33.0...v0.34.0) - [github.com/pre-commit/mirrors-prettier: v3.0.0-alpha.6 → v3.0.0-alpha.9-for-vscode](https://github.com/pre-commit/mirrors-prettier/compare/v3.0.0-alpha.6...v3.0.0-alpha.9-for-vscode) - [github.com/adrienverge/yamllint: v1.30.0 → v1.32.0](https://github.com/adrienverge/yamllint/compare/v1.30.0...v1.32.0) - [github.com/shellcheck-py/shellcheck-py: v0.9.0.2 → v0.9.0.5](https://github.com/shellcheck-py/shellcheck-py/compare/v0.9.0.2...v0.9.0.5) * style(pre-commit): autofix --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 8 ++++---- CODE_OF_CONDUCT.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 65cf91e8c4..5ad60de003 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,18 +18,18 @@ repos: args: [--markdown-linebreak-ext=md] - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.33.0 + rev: v0.34.0 hooks: - id: markdownlint args: [-c, .markdownlint.yaml, --fix] - repo: https://github.com/pre-commit/mirrors-prettier - rev: v3.0.0-alpha.6 + rev: v3.0.0-alpha.9-for-vscode hooks: - id: prettier - repo: https://github.com/adrienverge/yamllint - rev: v1.30.0 + rev: v1.32.0 hooks: - id: yamllint @@ -44,7 +44,7 @@ repos: - id: sort-package-xml - repo: https://github.com/shellcheck-py/shellcheck-py - rev: v0.9.0.2 + rev: v0.9.0.5 hooks: - id: shellcheck diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index c493cad4da..8dbcfb8510 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -conduct@autoware.org. +. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the From 36eaa578525c9c7459a6617c32d5d768b334cb16 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Mon, 19 Jun 2023 13:41:12 +0900 Subject: [PATCH 027/446] feat(avoidance): can set stop/move judge threshold for each object class (#399) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index f7f1cfc07e..d660de0743 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -29,48 +29,64 @@ target_object: car: enable: true # [-] + moving_speed_threshold: 1.0 # [m/s] + moving_time_threshold: 1.0 # [s] max_expand_ratio: 0.0 # [-] envelope_buffer_margin: 0.3 # [m] safety_buffer_lateral: 0.7 # [m] safety_buffer_longitudinal: 0.0 # [m] truck: enable: true + moving_speed_threshold: 1.0 # 3.6km/h + moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bus: enable: true + moving_speed_threshold: 1.0 # 3.6km/h + moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 trailer: enable: true + moving_speed_threshold: 1.0 # 3.6km/h + moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 unknown: enable: false + moving_speed_threshold: 0.28 # 1.0km/h + moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bicycle: enable: false + moving_speed_threshold: 0.28 # 1.0km/h + moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 motorcycle: enable: false + moving_speed_threshold: 1.0 # 3.6km/h + moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 pedestrian: enable: false + moving_speed_threshold: 0.28 # 1.0km/h + moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 safety_buffer_lateral: 1.0 @@ -81,8 +97,6 @@ # For target object filtering target_filtering: # filtering moving objects - threshold_speed_object_is_stopped: 1.0 # [m/s] - threshold_time_object_is_moving: 1.0 # [s] threshold_time_force_avoidance_for_stopped_vehicle: 10.0 # [s] # detection range object_ignore_distance_traffic_light: 30.0 # [m] From 01e327ece75669d14187750705af8360e8b197ca Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 19 Jun 2023 21:54:04 +0900 Subject: [PATCH 028/446] feat(start_planner): start with acceleration (#402) Signed-off-by: kosuke55 --- .../start_planner/start_planner.param.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 0d8782cb50..9a8b2ff973 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -9,12 +9,12 @@ collision_check_distance_from_end: 1.0 # shift pull out enable_shift_pull_out: true - shift_pull_out_velocity: 2.0 - pull_out_sampling_num: 4 minimum_shift_pull_out_distance: 0.0 - maximum_lateral_jerk: 2.0 - minimum_lateral_jerk: 0.1 deceleration_interval: 15.0 + lateral_jerk: 0.5 + lateral_acceleration_sampling_num: 1 + minimum_lateral_acc: 0.15 + maximum_lateral_acc: 0.5 # geometric pull out enable_geometric_pull_out: true divide_pull_out_path: false From 61fafb711bb2f6608638494386a12b366f31ee0f Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 20 Jun 2023 16:53:09 +0900 Subject: [PATCH 029/446] feat(start_planner): change lateral acceleration sampling num (#404) Signed-off-by: kosuke55 --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 9a8b2ff973..da2c6da930 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -12,7 +12,7 @@ minimum_shift_pull_out_distance: 0.0 deceleration_interval: 15.0 lateral_jerk: 0.5 - lateral_acceleration_sampling_num: 1 + lateral_acceleration_sampling_num: 3 minimum_lateral_acc: 0.15 maximum_lateral_acc: 0.5 # geometric pull out From e6be9a38e3c469f45b938cf9c81a9ba7a8f8d2ec Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Tue, 20 Jun 2023 20:13:57 +0900 Subject: [PATCH 030/446] fix(mpc): relax steering rate limit (#405) Signed-off-by: Takamasa Horibe --- .../config/control/trajectory_follower/lateral/mpc.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml index 538224cf2b..4222082d40 100644 --- a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml +++ b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml @@ -47,9 +47,9 @@ vehicle_model_type: "kinematics" # vehicle model type for mpc prediction. option is kinematics, kinematics_no_delay, and dynamics input_delay: 0.24 # steering input delay time for delay compensation vehicle_model_steer_tau: 0.3 # steering dynamics time constant (1d approximation) [s] - steer_rate_lim_dps_list_by_curvature: [10.0, 20.0, 30.0] # steering angle rate limit list depending on curvature [deg/s] + steer_rate_lim_dps_list_by_curvature: [40.0, 50.0, 60.0] # steering angle rate limit list depending on curvature [deg/s] curvature_list_for_steer_rate_lim: [0.001, 0.002, 0.01] # curvature list for steering angle rate limit interpolation in ascending order [/m] - steer_rate_lim_dps_list_by_velocity: [40.0, 30.0, 20.0] # steering angle rate limit list depending on velocity [deg/s] + steer_rate_lim_dps_list_by_velocity: [60.0, 50.0, 40.0] # steering angle rate limit list depending on velocity [deg/s] velocity_list_for_steer_rate_lim: [10.0, 15.0, 20.0] # velocity list for steering angle rate limit interpolation in ascending order [m/s] acceleration_limit: 2.0 # acceleration limit for trajectory velocity modification [m/ss] velocity_time_constant: 0.3 # velocity dynamics time constant for trajectory velocity modification [s] From e4cfdd4be5b5f37a25340c9e0ec2a3b05f5c5b97 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 21 Jun 2023 13:18:23 +0900 Subject: [PATCH 031/446] feat(start_planner): add length_ratio_for_turn_signal_deactivation_near_intersection (#407) Signed-off-by: kosuke55 --- .../start_planner/start_planner.param.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index da2c6da930..80114889d7 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -4,7 +4,6 @@ th_arrived_distance: 1.0 th_stopped_velocity: 0.01 th_stopped_time: 1.0 - th_blinker_on_lateral_offset: 1.0 collision_check_margin: 1.0 collision_check_distance_from_end: 1.0 # shift pull out @@ -30,3 +29,7 @@ backward_search_resolution: 2.0 backward_path_update_duration: 3.0 ignore_distance_from_lane_end: 15.0 + # turns signal + th_turn_signal_on_lateral_offset: 1.0 + intersection_search_length: 30.0 + length_ratio_for_turn_signal_deactivation_near_intersection: 0.5 From 64453f8d2d8509041203c8b9f69c5321782b0ed2 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 21 Jun 2023 16:44:03 +0900 Subject: [PATCH 032/446] feat(intersection): timeout stuck vehicle stop in private area (#406) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index c81a22f6b2..efb4c4c4be 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -19,6 +19,7 @@ stuck_vehicle_vel_thr: 0.833 # 0.833m/s = 3.0km/h # enable_front_car_decel_prediction: false # By default this feature is disabled # assumed_front_car_decel: 1.0 # [m/ss] the expected deceleration of front car when front car as well as ego are turning + timeout_private_area: 3.0 # [s] cancel stuck vehicle stop in private area collision_detection: state_transit_margin_time: 1.0 From d944796751edcd4e79aec9d62e46be9c8ed15649 Mon Sep 17 00:00:00 2001 From: Kento Yabuuchi Date: Thu, 22 Jun 2023 13:39:08 +0900 Subject: [PATCH 033/446] feat(yabloc): add camera and vector map localization (#393) * add yabloc_localization_component.launch.xml Signed-off-by: Kento Yabuuchi * add pose_initializer.logging_simulator.yabloc.param.yaml Signed-off-by: Kento Yabuuchi * add yabloc params Signed-off-by: Kento Yabuuchi * add graph_segment.param.yaml Signed-off-by: Kento Yabuuchi * integrate yabloc_loc_launch into tier_loc_launch Signed-off-by: Kento Yabuuchi * fix some config files Signed-off-by: Kento Yabuuchi * add conditional branch for yabloc Signed-off-by: Kento Yabuuchi * add sample config for yabloc Signed-off-by: Kento Yabuuchi * style(pre-commit): autofix * removed some obsolete parameters Signed-off-by: Kento Yabuuchi * style(pre-commit): autofix * removed is_swap_mode from yabloc config Signed-off-by: Kento Yabuuchi * rename AbstParaticleFilter in config files Signed-off-by: Kento Yabuuchi * fixed typo Signed-off-by: Kento Yabuuchi * removed optional param files Signed-off-by: Kento Yabuuchi * refactored tier4_loc_comp.launch.xml Signed-off-by: Kento Yabuuchi * changed localization_mode option names Signed-off-by: Kento Yabuuchi --------- Signed-off-by: Kento Yabuuchi Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- ...ializer.logging_simulator.lidar.param.yaml | 1 + .../localization/pose_initializer.param.yaml | 1 + ..._initializer.planning_simulator.param.yaml | 1 + .../camera_particle_corrector.param.yaml | 14 +++++ .../yabloc/camera_pose_initializer.param.yaml | 3 + .../yabloc/gnss_particle_corrector.param.yaml | 17 ++++++ .../yabloc/graph_segment.param.yaml | 18 ++++++ .../yabloc/ground_server.param.yaml | 5 ++ .../yabloc/ll2_decomposer.param.yaml | 5 ++ ...alizer.logging_simulator.yabloc.param.yaml | 7 +++ .../yabloc/pose_initializer.yabloc.param.yaml | 7 +++ .../localization/yabloc/predictor.param.yaml | 12 ++++ .../yabloc/segment_filter.param.yaml | 8 +++ .../localization/yabloc/undistort.param.yaml | 5 ++ autoware_launch/launch/autoware.launch.xml | 2 + .../tier4_localization_component.launch.xml | 58 +++++++++++++------ 16 files changed, 146 insertions(+), 18 deletions(-) create mode 100644 autoware_launch/config/localization/yabloc/camera_particle_corrector.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/camera_pose_initializer.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/gnss_particle_corrector.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/graph_segment.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/ground_server.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/ll2_decomposer.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/pose_initializer.logging_simulator.yabloc.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/pose_initializer.yabloc.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/predictor.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/segment_filter.param.yaml create mode 100644 autoware_launch/config/localization/yabloc/undistort.param.yaml diff --git a/autoware_launch/config/localization/pose_initializer.logging_simulator.lidar.param.yaml b/autoware_launch/config/localization/pose_initializer.logging_simulator.lidar.param.yaml index 0895bf80bb..1f3b37cb65 100644 --- a/autoware_launch/config/localization/pose_initializer.logging_simulator.lidar.param.yaml +++ b/autoware_launch/config/localization/pose_initializer.logging_simulator.lidar.param.yaml @@ -3,4 +3,5 @@ gnss_enabled: true ndt_enabled: true ekf_enabled: true + yabloc_enabled: false stop_check_enabled: false diff --git a/autoware_launch/config/localization/pose_initializer.param.yaml b/autoware_launch/config/localization/pose_initializer.param.yaml index c1486b71aa..16c7252fc0 100644 --- a/autoware_launch/config/localization/pose_initializer.param.yaml +++ b/autoware_launch/config/localization/pose_initializer.param.yaml @@ -3,4 +3,5 @@ gnss_enabled: true ndt_enabled: true ekf_enabled: true + yabloc_enabled: false stop_check_enabled: true diff --git a/autoware_launch/config/localization/pose_initializer.planning_simulator.param.yaml b/autoware_launch/config/localization/pose_initializer.planning_simulator.param.yaml index d6c960d08a..cf0760d99f 100644 --- a/autoware_launch/config/localization/pose_initializer.planning_simulator.param.yaml +++ b/autoware_launch/config/localization/pose_initializer.planning_simulator.param.yaml @@ -3,4 +3,5 @@ gnss_enabled: false ndt_enabled: false ekf_enabled: false + yabloc_enabled: false stop_check_enabled: false diff --git a/autoware_launch/config/localization/yabloc/camera_particle_corrector.param.yaml b/autoware_launch/config/localization/yabloc/camera_particle_corrector.param.yaml new file mode 100644 index 0000000000..17c5a604bf --- /dev/null +++ b/autoware_launch/config/localization/yabloc/camera_particle_corrector.param.yaml @@ -0,0 +1,14 @@ +/**: + ros__parameters: + # Declared in AbstractParticleCorrector + acceptable_max_delay: 1.0 + visualize: false + + # Declared in ll2_cost_map + image_size: 800 # cost map image made by lanelet2 + max_range: 40.0 # [m] a cost map scale size + gamma: 5.0 # cost map intensity gradient + + min_prob: 0.1 # minimum weight of particles + far_weight_gain: 0.001 # exp(-far_weight_gain_ * squared_norm) is multiplied each measurement + enabled_at_first: true # developing feature diff --git a/autoware_launch/config/localization/yabloc/camera_pose_initializer.param.yaml b/autoware_launch/config/localization/yabloc/camera_pose_initializer.param.yaml new file mode 100644 index 0000000000..a0c38682b3 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/camera_pose_initializer.param.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + angle_resolution: 30 diff --git a/autoware_launch/config/localization/yabloc/gnss_particle_corrector.param.yaml b/autoware_launch/config/localization/yabloc/gnss_particle_corrector.param.yaml new file mode 100644 index 0000000000..32267ce6f1 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/gnss_particle_corrector.param.yaml @@ -0,0 +1,17 @@ +/**: + ros__parameters: + # Declared in AbstractParticleCorrector + acceptable_max_delay: 1.0 + visualize: false + + mahalanobis_distance_threshold: 30.0 # If the distance to GNSS observation exceeds this, the correction is skipped. + # + for_fixed/max_weight: 5.0 + for_fixed/flat_radius: 0.5 + for_fixed/max_radius: 10.0 + for_fixed/min_weight: 0.5 + # + for_not_fixed/flat_radius: 5.0 + for_not_fixed/max_radius: 20.0 + for_not_fixed/min_weight: 0.5 + for_not_fixed/max_weight: 1.0 diff --git a/autoware_launch/config/localization/yabloc/graph_segment.param.yaml b/autoware_launch/config/localization/yabloc/graph_segment.param.yaml new file mode 100644 index 0000000000..21879a2984 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/graph_segment.param.yaml @@ -0,0 +1,18 @@ +/**: + ros__parameters: + # graph_node selects a road surface area from around this height + target_height_ratio: 0.65 + + # + target_candidate_box_width: 15 + + # graph_segment_node will pickup additional road-like areas + pickup_additional_graph_segment: true + + # used when the pickup_additional_graph_segment: true + similarity_score_threshold: 0.8 + + # parameters for cv::ximgproc::segmentation + sigma: 0.5 + k: 300.0 + min_size: 100.0 diff --git a/autoware_launch/config/localization/yabloc/ground_server.param.yaml b/autoware_launch/config/localization/yabloc/ground_server.param.yaml new file mode 100644 index 0000000000..25873ce799 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/ground_server.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + force_zero_tilt: false + K: 50 + R: 10 diff --git a/autoware_launch/config/localization/yabloc/ll2_decomposer.param.yaml b/autoware_launch/config/localization/yabloc/ll2_decomposer.param.yaml new file mode 100644 index 0000000000..1bc6394a17 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/ll2_decomposer.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + road_marking_labels: [cross_walk, zebra_marking, line_thin, line_thick, pedestrian_marking, stop_line, road_border] + sign_board_labels: [sign-board] + bounding_box_labels: [none] diff --git a/autoware_launch/config/localization/yabloc/pose_initializer.logging_simulator.yabloc.param.yaml b/autoware_launch/config/localization/yabloc/pose_initializer.logging_simulator.yabloc.param.yaml new file mode 100644 index 0000000000..a9aa7a3928 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/pose_initializer.logging_simulator.yabloc.param.yaml @@ -0,0 +1,7 @@ +/**: + ros__parameters: + gnss_enabled: true + ndt_enabled: false + ekf_enabled: true + yabloc_enabled: true + stop_check_enabled: false diff --git a/autoware_launch/config/localization/yabloc/pose_initializer.yabloc.param.yaml b/autoware_launch/config/localization/yabloc/pose_initializer.yabloc.param.yaml new file mode 100644 index 0000000000..b4334307d7 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/pose_initializer.yabloc.param.yaml @@ -0,0 +1,7 @@ +/**: + ros__parameters: + gnss_enabled: true + ndt_enabled: false + ekf_enabled: true + yabloc_enabled: true + stop_check_enabled: true diff --git a/autoware_launch/config/localization/yabloc/predictor.param.yaml b/autoware_launch/config/localization/yabloc/predictor.param.yaml new file mode 100644 index 0000000000..c7e7b62d14 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/predictor.param.yaml @@ -0,0 +1,12 @@ +/**: + ros__parameters: + visualize: true + + static_linear_covariance: 0.04 + static_angular_covariance: 0.006 + + resampling_interval_seconds: 1.0 + num_of_particles: 500 + prediction_rate: 50.0 + + cov_xx_yy: [2.0,0.25] diff --git a/autoware_launch/config/localization/yabloc/segment_filter.param.yaml b/autoware_launch/config/localization/yabloc/segment_filter.param.yaml new file mode 100644 index 0000000000..e2ba24d267 --- /dev/null +++ b/autoware_launch/config/localization/yabloc/segment_filter.param.yaml @@ -0,0 +1,8 @@ +/**: + ros__parameters: + min_segment_length: 1.5 # if it is negative, it is unlimited + max_segment_distance: 30.0 # if it is negative, it is unlimited + max_lateral_distance: 10.0 # if it is negative, it is unlimited + publish_image_with_segment_for_debug: true + max_range: 20.0 + image_size: 800 # debug diff --git a/autoware_launch/config/localization/yabloc/undistort.param.yaml b/autoware_launch/config/localization/yabloc/undistort.param.yaml new file mode 100644 index 0000000000..77f9be2c4a --- /dev/null +++ b/autoware_launch/config/localization/yabloc/undistort.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + use_sensor_qos: true + width: 800 + override_frame_id: "" # Value for overriding the camera's frame_id. If blank, frame_id of static_tf is not overwritten diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index 4a57cd1cb7..3d972188e1 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -38,6 +38,8 @@ + + diff --git a/autoware_launch/launch/components/tier4_localization_component.launch.xml b/autoware_launch/launch/components/tier4_localization_component.launch.xml index 560fc8f557..ba815398a1 100644 --- a/autoware_launch/launch/components/tier4_localization_component.launch.xml +++ b/autoware_launch/launch/components/tier4_localization_component.launch.xml @@ -1,23 +1,45 @@ - - + + + - - - + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e100e566ddae26173e4bc0d1e8aea40022bad658 Mon Sep 17 00:00:00 2001 From: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> Date: Thu, 22 Jun 2023 15:03:50 +0900 Subject: [PATCH 034/446] feat(behavior_path_planner): relax longitudinal_velocity_delta_time (#410) Signed-off-by: Shumpei Wakabayashi --- .../behavior_path_planner/behavior_path_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml index aa56edee2f..05775dc680 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml @@ -31,7 +31,7 @@ lateral_distance_max_threshold: 1.7 longitudinal_distance_min_threshold: 3.0 - longitudinal_velocity_delta_time: 0.8 + longitudinal_velocity_delta_time: 0.3 expected_front_deceleration: -1.0 expected_rear_deceleration: -1.0 From e3638b0398382eee673268956511307fc44fda1a Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 23 Jun 2023 12:05:20 +0900 Subject: [PATCH 035/446] feat(avoidance): avoid non car-like object (pedestrian, bicycle, motorcycle) (#408) feat(avoidance): avoid non vehicle object Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index d660de0743..8cd68d8638 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -68,7 +68,7 @@ safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bicycle: - enable: false + enable: true moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -76,7 +76,7 @@ safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 motorcycle: - enable: false + enable: true moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -84,7 +84,7 @@ safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 pedestrian: - enable: false + enable: true moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 From d34f8ba9560b72601366df341f0e941edfbb8dd4 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Fri, 23 Jun 2023 12:31:39 +0900 Subject: [PATCH 036/446] refactor(probabilistic_occupancy_grid_map): move param to yaml (#409) --- .../binary_bayes_filter_updater.param.yaml | 9 +++++++++ .../laserscan_based_occupancy_grid_map.param.yaml | 12 +++++++++--- .../pointcloud_based_occupancy_grid_map.param.yaml | 10 ++++++++-- .../components/tier4_perception_component.launch.xml | 3 +++ .../components/tier4_simulator_component.launch.xml | 3 +++ 5 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 autoware_launch/config/perception/occupancy_grid_map/binary_bayes_filter_updater.param.yaml diff --git a/autoware_launch/config/perception/occupancy_grid_map/binary_bayes_filter_updater.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/binary_bayes_filter_updater.param.yaml new file mode 100644 index 0000000000..afb776d9fd --- /dev/null +++ b/autoware_launch/config/perception/occupancy_grid_map/binary_bayes_filter_updater.param.yaml @@ -0,0 +1,9 @@ +/**: + ros__parameters: + binary_bayes_filter: + probability_matrix: + occupied_to_occupied: 0.95 + occupied_to_free: 0.05 + free_to_occupied: 0.2 + free_to_free: 0.8 + v_ratio: 10.0 diff --git a/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml index 3899b9f464..38109bad5a 100644 --- a/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml +++ b/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml @@ -7,8 +7,14 @@ # ray-tracing center: main sensor frame is preferable like: "velodyne_top" scan_origin_frame: "base_link" - use_height_filter: true + height_filter: + use_height_filter: true + min_height: -1.0 + max_height: 2.0 + enable_single_frame_mode: false - map_length: 150.0 - map_width: 150.0 + map_length: 100.0 + map_width: 100.0 map_resolution: 0.5 + + updater_type: "binary_bayes_filter" # binary_bayes_filter, etc. diff --git a/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml index ad93512d64..58475c22f1 100644 --- a/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml +++ b/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml @@ -1,9 +1,13 @@ /**: ros__parameters: - map_length: 150.0 # [m] + map_length: 100.0 # [m] map_resolution: 0.5 # [m] - use_height_filter: true + height_filter: + use_height_filter: true + min_height: -1.0 + max_height: 2.0 + enable_single_frame_mode: false # use sensor pointcloud to filter obstacle pointcloud filter_obstacle_pointcloud_by_raw_pointcloud: false @@ -15,3 +19,5 @@ gridmap_origin_frame: "base_link" # ray-tracing center: main sensor frame is preferable like: "velodyne_top" scan_origin_frame: "base_link" + + updater_type: "binary_bayes_filter" # binary_bayes_filter, etc. diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 4417dba4d8..5de556ac6f 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -1,6 +1,7 @@ + @@ -36,5 +37,7 @@ /> + + diff --git a/autoware_launch/launch/components/tier4_simulator_component.launch.xml b/autoware_launch/launch/components/tier4_simulator_component.launch.xml index 7c62bfbc34..7b21a43e50 100644 --- a/autoware_launch/launch/components/tier4_simulator_component.launch.xml +++ b/autoware_launch/launch/components/tier4_simulator_component.launch.xml @@ -11,6 +11,7 @@ + @@ -37,5 +38,7 @@ + + From f2c2b9fa1b616d537a7a91f93715f28b0ba3164a Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Fri, 23 Jun 2023 13:10:10 +0900 Subject: [PATCH 037/446] chore(probabilistic_occupancy_grid_map): revert map size (#414) Signed-off-by: Mamoru Sobue --- .../laserscan_based_occupancy_grid_map.param.yaml | 4 ++-- .../pointcloud_based_occupancy_grid_map.param.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml index 38109bad5a..e0c545b690 100644 --- a/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml +++ b/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml @@ -13,8 +13,8 @@ max_height: 2.0 enable_single_frame_mode: false - map_length: 100.0 - map_width: 100.0 + map_length: 150.0 + map_width: 150.0 map_resolution: 0.5 updater_type: "binary_bayes_filter" # binary_bayes_filter, etc. diff --git a/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml index 58475c22f1..8bd48c57df 100644 --- a/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml +++ b/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml @@ -1,6 +1,6 @@ /**: ros__parameters: - map_length: 100.0 # [m] + map_length: 150.0 # [m] map_resolution: 0.5 # [m] height_filter: From 1d46e1cdb909b80367a4facf8e46bd253d1e295a Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 23 Jun 2023 16:48:53 +0900 Subject: [PATCH 038/446] feat(autoware_launch): update dynamic avoidance param (#413) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 39de93dab6..0b8f35bac3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -12,7 +12,9 @@ motorcycle: true pedestrian: false - min_obstacle_vel: 1.0 # [m/s] + min_obstacle_vel: 0.0 # [m/s] + + successive_num_to_entry_dynamic_avoidance_condition: 5 drivable_area_generation: lat_offset_from_obstacle: 0.8 # [m] @@ -22,11 +24,11 @@ overtaking_object: max_time_to_collision: 3.0 # [s] start_duration_to_avoid: 4.0 # [s] - end_duration_to_avoid: 5.0 # [s] + end_duration_to_avoid: 8.0 # [s] duration_to_hold_avoidance: 3.0 # [s] # for opposite directional object oncoming_object: max_time_to_collision: 3.0 # [s] - start_duration_to_avoid: 9.0 # [s] + start_duration_to_avoid: 12.0 # [s] end_duration_to_avoid: 0.0 # [s] From 8b2e533b67a20c0a8fb9930f1dea5f04697ca617 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 23 Jun 2023 17:56:20 +0900 Subject: [PATCH 039/446] feat(avoidance): enable avoidance for unknown object (#416) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 8cd68d8638..90f0f6c379 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -60,7 +60,7 @@ safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 unknown: - enable: false + enable: true moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 From ce4608eec3beafb34b0727b4630201d44e590c38 Mon Sep 17 00:00:00 2001 From: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> Date: Fri, 23 Jun 2023 18:59:03 +0900 Subject: [PATCH 040/446] revert: "feat(behavior_path_planner): relax longitudinal_velocity_delta_time" (#415) Revert "feat(behavior_path_planner): relax longitudinal_velocity_delta_time (#410)" This reverts commit e100e566ddae26173e4bc0d1e8aea40022bad658. --- .../behavior_path_planner/behavior_path_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml index 05775dc680..aa56edee2f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml @@ -31,7 +31,7 @@ lateral_distance_max_threshold: 1.7 longitudinal_distance_min_threshold: 3.0 - longitudinal_velocity_delta_time: 0.3 + longitudinal_velocity_delta_time: 0.8 expected_front_deceleration: -1.0 expected_rear_deceleration: -1.0 From da900080ace2832a6c7110cfd6d8fc74a3e70f59 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Mon, 26 Jun 2023 09:52:09 +0900 Subject: [PATCH 041/446] feat(avoidance): set additional buffer margin independently (#412) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 90f0f6c379..437424838d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -33,6 +33,7 @@ moving_time_threshold: 1.0 # [s] max_expand_ratio: 0.0 # [-] envelope_buffer_margin: 0.3 # [m] + avoid_margin_lateral: 1.0 # [m] safety_buffer_lateral: 0.7 # [m] safety_buffer_longitudinal: 0.0 # [m] truck: @@ -41,6 +42,7 @@ moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 + avoid_margin_lateral: 1.0 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bus: @@ -49,6 +51,7 @@ moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 + avoid_margin_lateral: 1.0 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 trailer: @@ -57,6 +60,7 @@ moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 + avoid_margin_lateral: 1.0 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 unknown: @@ -65,6 +69,7 @@ moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.3 + avoid_margin_lateral: 1.0 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bicycle: @@ -73,6 +78,7 @@ moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 + avoid_margin_lateral: 1.0 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 motorcycle: @@ -81,6 +87,7 @@ moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 + avoid_margin_lateral: 1.0 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 pedestrian: @@ -89,6 +96,7 @@ moving_time_threshold: 1.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.8 + avoid_margin_lateral: 1.0 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 lower_distance_for_polygon_expansion: 30.0 # [m] From 86528daa0abca51332dc533b13fb1ee715515732 Mon Sep 17 00:00:00 2001 From: Yutaka Shimizu <43805014+purewater0901@users.noreply.github.com> Date: Mon, 26 Jun 2023 19:17:46 +0900 Subject: [PATCH 042/446] feat(planning_launch): add parameters for delaying lane change (#401) Signed-off-by: yutaka --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index a6e1594b89..a4568a7cd3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -15,6 +15,10 @@ longitudinal_acceleration_sampling_num: 5 lateral_acceleration_sampling_num: 3 + # side walk parked vehicle + object_check_min_road_shoulder_width: 0.5 # [m] + object_shiftable_ratio_threshold: 0.6 + # turn signal min_length_for_turn_signal_activation: 10.0 # [m] length_ratio_for_turn_signal_deactivation: 0.8 # ratio (desired end position) From 9053dcf2f9cb86707238eb12557491b3bd6f9fe6 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 26 Jun 2023 19:27:14 +0900 Subject: [PATCH 043/446] fix(occupancy grid): fix launcher (#419) updated yaml Signed-off-by: Mamoru Sobue --- .../binary_bayes_filter_updater.param.yaml | 13 ++++++------- .../laserscan_based_occupancy_grid_map.param.yaml | 2 -- .../pointcloud_based_occupancy_grid_map.param.yaml | 2 -- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/autoware_launch/config/perception/occupancy_grid_map/binary_bayes_filter_updater.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/binary_bayes_filter_updater.param.yaml index afb776d9fd..4e335e3574 100644 --- a/autoware_launch/config/perception/occupancy_grid_map/binary_bayes_filter_updater.param.yaml +++ b/autoware_launch/config/perception/occupancy_grid_map/binary_bayes_filter_updater.param.yaml @@ -1,9 +1,8 @@ /**: ros__parameters: - binary_bayes_filter: - probability_matrix: - occupied_to_occupied: 0.95 - occupied_to_free: 0.05 - free_to_occupied: 0.2 - free_to_free: 0.8 - v_ratio: 10.0 + probability_matrix: + occupied_to_occupied: 0.95 + occupied_to_free: 0.05 + free_to_occupied: 0.2 + free_to_free: 0.8 + v_ratio: 10.0 diff --git a/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml index e0c545b690..9dcc722587 100644 --- a/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml +++ b/autoware_launch/config/perception/occupancy_grid_map/laserscan_based_occupancy_grid_map.param.yaml @@ -16,5 +16,3 @@ map_length: 150.0 map_width: 150.0 map_resolution: 0.5 - - updater_type: "binary_bayes_filter" # binary_bayes_filter, etc. diff --git a/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml index 8bd48c57df..ccd74483c1 100644 --- a/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml +++ b/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml @@ -19,5 +19,3 @@ gridmap_origin_frame: "base_link" # ray-tracing center: main sensor frame is preferable like: "velodyne_top" scan_origin_frame: "base_link" - - updater_type: "binary_bayes_filter" # binary_bayes_filter, etc. From fe9a1f7a4954b87f5cae64878e8ced64396121e9 Mon Sep 17 00:00:00 2001 From: Tomoya Kimura Date: Tue, 27 Jun 2023 10:37:00 +0900 Subject: [PATCH 044/446] feat: use vehicle_stop_checker for judging vehicle stop vehicle_cmd_gate (#417) Signed-off-by: tomoya.kimura --- .../config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml index 9cc038352e..522cc3a1ca 100644 --- a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml +++ b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml @@ -9,6 +9,7 @@ emergency_acceleration: -2.4 moderate_stop_service_acceleration: -1.5 stopped_state_entry_duration_time: 0.1 + stop_check_duration: 1.0 nominal: vel_lim: 25.0 lon_acc_lim: 5.0 From f8f72e7c994de950c28335cfb13dd8c65428645c Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Tue, 27 Jun 2023 13:15:28 +0900 Subject: [PATCH 045/446] fix(autoware_launch): use experimental lane change function (#418) Signed-off-by: Fumiya Watanabe --- .../lane_change/lane_change.param.yaml | 6 +++--- .../launch/components/tier4_planning_component.launch.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index a4568a7cd3..20b81a893b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -47,12 +47,12 @@ # collision check enable_prepare_segment_collision_check: false prepare_segment_ignore_object_velocity_thresh: 0.1 # [m/s] - use_predicted_path_outside_lanelet: false - use_all_predicted_path: false + use_predicted_path_outside_lanelet: true + use_all_predicted_path: true # abort enable_cancel_lane_change: true - enable_abort_lane_change: false + enable_abort_lane_change: true abort_delta_time: 1.0 # [s] aborting_time: 5.0 # [s] diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 6055b14e48..a5674318cd 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -2,7 +2,7 @@ - + From 03c506a683c1f981bd74dfeac97e665af46da880 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 27 Jun 2023 13:52:02 +0900 Subject: [PATCH 046/446] refactor(avoidance): rename ununderstandable params (#422) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 437424838d..a1a864327d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -28,7 +28,7 @@ # avoidance is performed for the object type with true target_object: car: - enable: true # [-] + is_target: true # [-] moving_speed_threshold: 1.0 # [m/s] moving_time_threshold: 1.0 # [s] max_expand_ratio: 0.0 # [-] @@ -37,7 +37,7 @@ safety_buffer_lateral: 0.7 # [m] safety_buffer_longitudinal: 0.0 # [m] truck: - enable: true + is_target: true moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -46,7 +46,7 @@ safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bus: - enable: true + is_target: true moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -55,7 +55,7 @@ safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 trailer: - enable: true + is_target: true moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -64,7 +64,7 @@ safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 unknown: - enable: true + is_target: true moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -73,7 +73,7 @@ safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 bicycle: - enable: true + is_target: true moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -82,7 +82,7 @@ safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 motorcycle: - enable: true + is_target: true moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -91,7 +91,7 @@ safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 pedestrian: - enable: true + is_target: true moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -104,12 +104,12 @@ # For target object filtering target_filtering: - # filtering moving objects - threshold_time_force_avoidance_for_stopped_vehicle: 10.0 # [s] + # params for avoidance of not-parked objects + threshold_time_force_avoidance_for_stopped_vehicle: 10.0 # [s] + object_ignore_section_traffic_light_in_front_distance: 30.0 # [m] + object_ignore_section_crosswalk_in_front_distance: 30.0 # [m] + object_ignore_section_crosswalk_behind_distance: 30.0 # [m] # detection range - object_ignore_distance_traffic_light: 30.0 # [m] - object_ignore_distance_crosswalk_forward: 30.0 # [m] - object_ignore_distance_crosswalk_backward: 30.0 # [m] object_check_forward_distance: 150.0 # [m] object_check_backward_distance: 10.0 # [m] object_check_goal_distance: 20.0 # [m] @@ -132,7 +132,6 @@ avoidance: # avoidance lateral parameters lateral: - lateral_collision_margin: 1.0 # [m] lateral_execution_threshold: 0.499 # [m] lateral_small_shift_threshold: 0.101 # [m] road_shoulder_safety_margin: 0.3 # [m] From dfc7eae1b8be6ac97e4343ef2953459e461b5482 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Tue, 27 Jun 2023 16:20:32 +0900 Subject: [PATCH 047/446] refactor(lane_change): add namespace for lane-change-cancel (#423) * refactor(lane_change): add namespace for lane-change-cancel Signed-off-by: Takamasa Horibe * update Signed-off-by: Takamasa Horibe --------- Signed-off-by: Takamasa Horibe --- .../lane_change/lane_change.param.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 20b81a893b..47f11b74df 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -50,13 +50,13 @@ use_predicted_path_outside_lanelet: true use_all_predicted_path: true - # abort - enable_cancel_lane_change: true - enable_abort_lane_change: true - - abort_delta_time: 1.0 # [s] - aborting_time: 5.0 # [s] - abort_max_lateral_jerk: 100.0 # [m/s3] + # lane change cancel + cancel: + enable_on_prepare_phase: true + enable_on_lane_changing_phase: true + delta_time: 1.0 # [s] + duration: 5.0 # [s] + max_lateral_jerk: 100.0 # [m/s3] finish_judge_lateral_threshold: 0.2 # [m] From 905b81e9b6cde4cd7a854b7304b95431e775b8ae Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Tue, 27 Jun 2023 19:17:59 +0900 Subject: [PATCH 048/446] feat(lane_change): add param for a lateral distance margin where the abort can be performed (#421) Signed-off-by: Takamasa Horibe --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 47f11b74df..b1e8ffc3c3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -57,6 +57,7 @@ delta_time: 1.0 # [s] duration: 5.0 # [s] max_lateral_jerk: 100.0 # [m/s3] + overhang_tolerance: 0.0 # [m] finish_judge_lateral_threshold: 0.2 # [m] From 86e49df99ed33355d1374a3e9ac00dcc11397132 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 28 Jun 2023 12:06:01 +0900 Subject: [PATCH 049/446] fix(behavior_velocity_intersection_module): fix condition of use_stuck_stopline (#425) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index efb4c4c4be..11210677a9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -13,7 +13,7 @@ path_interpolation_ds: 0.1 # [m] stuck_vehicle: - use_stuck_stopline: false # stopline generate before the intersection lanelet when is_stuck + use_stuck_stopline: true # stopline generated before the first conflicting area stuck_vehicle_detect_dist: 3.0 # this should be the length between cars when they are stopped. The actual stuck vehicle detection length will be this value + vehicle_length. stuck_vehicle_ignore_dist: 10.0 # obstacle stop max distance(5.0m) + stuck vehicle size / 2 (0.0m-) stuck_vehicle_vel_thr: 0.833 # 0.833m/s = 3.0km/h From 1fd0a343ad57b80fe629acbd44a143e38981e43f Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 30 Jun 2023 15:44:34 +0900 Subject: [PATCH 050/446] feat(avoidance): update avoidance params (#424) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index a1a864327d..da87873533 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -132,7 +132,7 @@ avoidance: # avoidance lateral parameters lateral: - lateral_execution_threshold: 0.499 # [m] + lateral_execution_threshold: 0.09 # [m] lateral_small_shift_threshold: 0.101 # [m] road_shoulder_safety_margin: 0.3 # [m] max_right_shift_length: 5.0 @@ -156,7 +156,7 @@ constraints: # vehicle slows down under longitudinal constraints - use_constraints_for_decel: false # [-] + use_constraints_for_decel: true # [-] # lateral constraints lateral: @@ -181,7 +181,7 @@ shift_line_pipeline: trim: - quantize_filter_threshold: 0.2 + quantize_filter_threshold: 0.1 same_grad_filter_1_threshold: 0.1 same_grad_filter_2_threshold: 0.2 same_grad_filter_3_threshold: 0.5 From 5b23f165af6319f1b61ee989d6e708795ca4f8b1 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sat, 1 Jul 2023 01:44:47 +0900 Subject: [PATCH 051/446] feat(autoware_launch): no slow down against unknown object (#428) Signed-off-by: Takayuki Murooka --- .../obstacle_cruise_planner/obstacle_cruise_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index 37d3ab4984..b525d2914a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -51,7 +51,7 @@ pedestrian: false slow_down_obstacle_type: - unknown: true + unknown: false car: true truck: true bus: true From 3dc306e0abe89ff6294a7f0b1229e54e15ccbc75 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Mon, 3 Jul 2023 17:26:57 +0900 Subject: [PATCH 052/446] fix(autoware_launch): add missing pose_initializer param (#430) Signed-off-by: kminoda --- .../pose_initializer.logging_simulator.gnss.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/localization/pose_initializer.logging_simulator.gnss.param.yaml b/autoware_launch/config/localization/pose_initializer.logging_simulator.gnss.param.yaml index f32ac98604..4a1e4da885 100644 --- a/autoware_launch/config/localization/pose_initializer.logging_simulator.gnss.param.yaml +++ b/autoware_launch/config/localization/pose_initializer.logging_simulator.gnss.param.yaml @@ -3,4 +3,5 @@ gnss_enabled: true ndt_enabled: false ekf_enabled: true + yabloc_enabled: false stop_check_enabled: false From 9561e7c6674bb8490f82d264484e5300444a5088 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 3 Jul 2023 20:46:55 +0900 Subject: [PATCH 053/446] feat(start_planner): add option for lane departure (#432) Signed-off-by: kosuke55 --- .../behavior_path_planner/start_planner/start_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 80114889d7..fe98d7aa2a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -8,6 +8,7 @@ collision_check_distance_from_end: 1.0 # shift pull out enable_shift_pull_out: true + check_shift_path_lane_departure: false minimum_shift_pull_out_distance: 0.0 deceleration_interval: 15.0 lateral_jerk: 0.5 From 623594070e407692ce76ef72d6b5de6e84d145c9 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 4 Jul 2023 18:25:24 +0900 Subject: [PATCH 054/446] feat(avoidance): extend object ignore section (#433) feat(avoidance): increase object ignore section Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index da87873533..b82282df14 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -106,7 +106,7 @@ target_filtering: # params for avoidance of not-parked objects threshold_time_force_avoidance_for_stopped_vehicle: 10.0 # [s] - object_ignore_section_traffic_light_in_front_distance: 30.0 # [m] + object_ignore_section_traffic_light_in_front_distance: 100.0 # [m] object_ignore_section_crosswalk_in_front_distance: 30.0 # [m] object_ignore_section_crosswalk_behind_distance: 30.0 # [m] # detection range From 47070cb044eaa68949dfeb3a332b0e0c4440610d Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 5 Jul 2023 18:11:36 +0900 Subject: [PATCH 055/446] fix(avoidance): don't output new candidate path if there is huge offset between the ego and previous output path (#431) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index b82282df14..12dc6b9938 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -127,6 +127,7 @@ safety_check_idling_time: 1.5 # [s] safety_check_accel_for_rss: 2.5 # [m/ss] safety_check_hysteresis_factor: 2.0 # [-] + safety_check_ego_offset: 1.0 # [m] # For avoidance maneuver avoidance: From a6da6845ed32d4055f08fa18015c7adab97588c0 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 5 Jul 2023 18:57:03 +0900 Subject: [PATCH 056/446] feat(avoidance): insert slow down speed (#429) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 12dc6b9938..0acc3c52d1 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -144,7 +144,9 @@ min_prepare_distance: 1.0 # [m] min_avoidance_distance: 10.0 # [m] min_nominal_avoidance_speed: 7.0 # [m/s] - min_sharp_avoidance_speed: 1.0 # [m/s] + min_sharp_avoidance_speed: 2.78 # [m/s] + min_slow_down_speed: 1.38 # [m/s] + buf_slow_down_speed: 0.56 # [m/s] # For yield maneuver yield: @@ -154,6 +156,7 @@ stop: min_distance: 10.0 # [m] max_distance: 20.0 # [m] + stop_buffer: 1.0 # [m] constraints: # vehicle slows down under longitudinal constraints From f3171b7257765d60cca8548b01daec8a3488d10e Mon Sep 17 00:00:00 2001 From: beyzanurkaya <32412808+beyzanurkaya@users.noreply.github.com> Date: Thu, 6 Jul 2023 08:23:19 +0300 Subject: [PATCH 057/446] feat(autoware_launch): add intersection param for wrong direction vehicles (#394) add consider_wrong_direction_vehicle param Signed-off-by: beyza Co-authored-by: beyza --- .../behavior_velocity_planner/intersection.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 11210677a9..e54282739d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -11,7 +11,7 @@ stop_overshoot_margin: 0.5 # [m] overshoot margin for stuck, collision detection use_intersection_area: false path_interpolation_ds: 0.1 # [m] - + consider_wrong_direction_vehicle: false stuck_vehicle: use_stuck_stopline: true # stopline generated before the first conflicting area stuck_vehicle_detect_dist: 3.0 # this should be the length between cars when they are stopped. The actual stuck vehicle detection length will be this value + vehicle_length. From d0190ca5c7d61ee00357c002f2b203083f12d7cc Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 6 Jul 2023 23:07:30 +0900 Subject: [PATCH 058/446] feat(autoware_launch): add min_obj_lat_offset_to_ego_path in dynamic_avoidance (#427) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 0b8f35bac3..85f60e21cf 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -16,6 +16,8 @@ successive_num_to_entry_dynamic_avoidance_condition: 5 + min_obj_lat_offset_to_ego_path: 0.3 # [m] + drivable_area_generation: lat_offset_from_obstacle: 0.8 # [m] max_lat_offset_to_avoid: 0.5 # [m] From 98ac7f081d5c47308643db4b88baf6df1caf3f49 Mon Sep 17 00:00:00 2001 From: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> Date: Fri, 7 Jul 2023 12:24:28 +0900 Subject: [PATCH 059/446] feat(behavior_path_planner): shorten the wating time of force avoidance (#437) Signed-off-by: Shumpei Wakabayashi --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 0acc3c52d1..a9b96abcd8 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -105,10 +105,10 @@ # For target object filtering target_filtering: # params for avoidance of not-parked objects - threshold_time_force_avoidance_for_stopped_vehicle: 10.0 # [s] + threshold_time_force_avoidance_for_stopped_vehicle: 1.0 # [s] object_ignore_section_traffic_light_in_front_distance: 100.0 # [m] - object_ignore_section_crosswalk_in_front_distance: 30.0 # [m] - object_ignore_section_crosswalk_behind_distance: 30.0 # [m] + object_ignore_section_crosswalk_in_front_distance: 30.0 # [m] + object_ignore_section_crosswalk_behind_distance: 30.0 # [m] # detection range object_check_forward_distance: 150.0 # [m] object_check_backward_distance: 10.0 # [m] From b1a86ca3925ac76b59f19b58463b867987e4af93 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Fri, 7 Jul 2023 12:56:12 +0900 Subject: [PATCH 060/446] feat(probabilistic_occupancy_grid_map): add projective raytracing option from scan_origin (#434) --- .../pointcloud_based_occupancy_grid_map.param.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml b/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml index ccd74483c1..8077bdec50 100644 --- a/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml +++ b/autoware_launch/config/perception/occupancy_grid_map/pointcloud_based_occupancy_grid_map.param.yaml @@ -18,4 +18,13 @@ # center of the grid map gridmap_origin_frame: "base_link" # ray-tracing center: main sensor frame is preferable like: "velodyne_top" + # base_link should not be used with "OccupancyGridMapProjectiveBlindSpot" scan_origin_frame: "base_link" + + grid_map_type: "OccupancyGridMapFixedBlindSpot" + OccupancyGridMapFixedBlindSpot: + distance_margin: 1.0 + OccupancyGridMapProjectiveBlindSpot: + projection_dz_threshold: 0.01 # [m] for avoiding null division + obstacle_separation_threshold: 1.0 # [m] fill the interval between obstacles with unknown for this length + pub_debug_grid: false From e09a32264ed7f68b99514c4e8009611780a5ea74 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Mon, 10 Jul 2023 11:30:19 +0900 Subject: [PATCH 061/446] refactor(obstacle_avoidance_planner): move the elastic band smoothing to a new package (#420) Signed-off-by: Maxime CLEMENT --- .../obstacle_avoidance_planner.param.yaml | 30 --------------- .../elastic_band_smoother.param.yaml | 37 +++++++++++++++++++ .../tier4_planning_component.launch.xml | 10 +++-- 3 files changed, 43 insertions(+), 34 deletions(-) create mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml index 3f4655b782..10b41763ad 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml @@ -1,7 +1,6 @@ /**: ros__parameters: option: - enable_smoothing: true # enable path smoothing by elastic band enable_skip_optimization: false # skip elastic band and model predictive trajectory enable_reset_prev_optimization: false # If true, optimization has no fix constraint to the previous result. enable_outside_drivable_area_stop: true # stop if the ego's trajectory footprint is outside the drivable area @@ -30,35 +29,6 @@ max_goal_moving_dist: 15.0 # threshold of goal's moving distance for replan [m] max_delta_time_sec: 1.0 # threshold of delta time for replan [second] - # eb param - eb: - option: - enable_warm_start: true - enable_optimization_validation: false - - common: - num_points: 100 # number of points for optimization [-] - delta_arc_length: 1.0 # delta arc length for optimization [m] - - clearance: - num_joint_points: 3 # number of joint points (joint means connecting fixing and smoothing) - - clearance_for_fix: 0.0 # maximum optimizing range when applying fixing - clearance_for_joint: 0.1 # maximum optimizing range when applying jointing - clearance_for_smooth: 0.1 # maximum optimizing range when applying smoothing - - weight: - smooth_weight: 1.0 - lat_error_weight: 0.001 - - qp: - max_iteration: 10000 # max iteration when solving QP - eps_abs: 1.0e-7 # eps abs when solving OSQP - eps_rel: 1.0e-7 # eps rel when solving OSQP - - validation: # if enable_optimization_validation is true - max_error: 3.0 # [m] - # mpt param mpt: option: diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml new file mode 100644 index 0000000000..730bc3053e --- /dev/null +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml @@ -0,0 +1,37 @@ +/**: + ros__parameters: + common: + # output + output_delta_arc_length: 0.5 # delta arc length for output trajectory [m] + output_backward_traj_length: 5.0 # backward length for backward trajectory from base_link [m] + # elastic band + elastic_band: + option: + enable_warm_start: true + enable_optimization_validation: false + + common: + num_points: 100 # number of points for optimization [-] + delta_arc_length: 1.0 # delta arc length for optimization [m] + + clearance: + num_joint_points: 3 # number of joint points (joint means connecting fixing and smoothing) + + clearance_for_fix: 0.0 # maximum optimizing range when applying fixing + clearance_for_joint: 0.1 # maximum optimizing range when applying jointing + clearance_for_smooth: 0.1 # maximum optimizing range when applying smoothing + + weight: + smooth_weight: 1.0 + lat_error_weight: 0.001 + + qp: + max_iteration: 10000 # max iteration when solving QP + eps_abs: 1.0e-7 # eps abs when solving OSQP + eps_rel: 1.0e-7 # eps rel when solving OSQP + + validation: # if enable_optimization_validation is true + max_error: 3.0 # [m] + # nearest search + ego_nearest_dist_threshold: 3.0 # [m] + ego_nearest_yaw_threshold: 1.046 # [rad] = 60 [deg] diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index a5674318cd..a24bad2841 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -6,7 +6,8 @@ - + + @@ -19,7 +20,6 @@ - @@ -68,6 +68,7 @@ + @@ -78,11 +79,12 @@ - + + - + From 518116062c2a49904bfa6d94c8aa0b32e905bc26 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 11 Jul 2023 10:11:43 +0900 Subject: [PATCH 062/446] feat(avoidance): use intersection areas (#439) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index a9b96abcd8..3765c8f675 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -20,6 +20,7 @@ enable_yield_maneuver_during_shifting: false disable_path_update: false use_hatched_road_markings: false + use_intersection_areas: false # for debug publish_debug_marker: false From a0bf4a084b6b93768e7f98326c53a27e798305f1 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 11 Jul 2023 20:55:44 +0900 Subject: [PATCH 063/446] refactor(behavior_path_planner): remove unused config files (#441) * refactor(behavior_path_planner): remove unused config files Signed-off-by: satoshi-ota * refactor(behavior_path_planner): remove unnecessary code Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../behavior_path_planner_tree.xml | 94 ---------------- ...ior_path_planner_tree_lane_change_only.xml | 86 --------------- .../behavior_path_planner_tree_pull_out.xml | 100 ------------------ ..._planner_tree_with_external_request_LC.xml | 74 ------------- .../tier4_planning_component.launch.xml | 1 - 5 files changed, 355 deletions(-) delete mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree.xml delete mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_lane_change_only.xml delete mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_pull_out.xml delete mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_with_external_request_LC.xml diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree.xml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree.xml deleted file mode 100644 index e6c7f6cc24..0000000000 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - desc - - - desc - - - - - - desc - - - desc - - - - desc - - - desc - - - - - - - - desc - - - - - desc - - - desc - - - - - - - - diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_lane_change_only.xml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_lane_change_only.xml deleted file mode 100644 index 8988dd41b5..0000000000 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_lane_change_only.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - desc - - - desc - - - - - - desc - - - desc - - - - desc - - - desc - - - - - - - - desc - - - - - desc - - - desc - - - - - - - - diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_pull_out.xml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_pull_out.xml deleted file mode 100644 index 32f30af69a..0000000000 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_pull_out.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - desc - - - desc - - - - - - - - - desc - - - desc - - - - - desc - - - desc - - - - - - - - - - desc - - - - - - desc - - - desc - - - - - - - - - diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_with_external_request_LC.xml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_with_external_request_LC.xml deleted file mode 100644 index 0410f775f7..0000000000 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner_tree_with_external_request_LC.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - desc - - - - - desc - - - - desc - - - - desc - - - - desc - - - - - - - - desc - - - - desc - - - - - diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index a24bad2841..c197512e24 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -41,7 +41,6 @@ - From 0cac695826219f672f306e6c39685e9c927d5a1f Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 12 Jul 2023 13:46:04 +0900 Subject: [PATCH 064/446] feat(avoidance): consider acceleration during avoidance maneuver (#436) feat(avoidance): use improved path shifting logic Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 3765c8f675..891d927987 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -165,18 +165,17 @@ # lateral constraints lateral: - nominal_lateral_jerk: 0.2 # [m/s3] - max_lateral_jerk: 1.0 # [m/s3] + nominal_lateral_jerk: 0.2 # [m/sss] + max_lateral_jerk: 1.0 # [m/sss] + max_lateral_acceleration: 0.5 # [m/ss] # longitudinal constraints longitudinal: nominal_deceleration: -1.0 # [m/ss] nominal_jerk: 0.5 # [m/sss] max_deceleration: -2.0 # [m/ss] - max_jerk: 1.0 - # For prevention of large acceleration while avoidance - min_avoidance_speed_for_acc_prevention: 3.0 # [m/s] - max_avoidance_acceleration: 0.5 # [m/ss] + max_jerk: 1.0 # [m/sss] + max_acceleration: 1.0 # [m/ss] target_velocity_matrix: col_size: 2 From f0cfff78219963028c48b6eb69526cfd4d7d514f Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 12 Jul 2023 18:57:45 +0900 Subject: [PATCH 065/446] feat(avoidance): enable to use intersection area (#443) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 891d927987..68c146d72c 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -20,7 +20,7 @@ enable_yield_maneuver_during_shifting: false disable_path_update: false use_hatched_road_markings: false - use_intersection_areas: false + use_intersection_areas: true # for debug publish_debug_marker: false From eb101007d70a64d804e307c61fa185b15a4825af Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 13 Jul 2023 10:06:06 +0900 Subject: [PATCH 066/446] feat(avoidance): enable zebra zone avoidance (#448) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 68c146d72c..c937ebc65b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -19,7 +19,7 @@ enable_yield_maneuver: true enable_yield_maneuver_during_shifting: false disable_path_update: false - use_hatched_road_markings: false + use_hatched_road_markings: true use_intersection_areas: true # for debug From 78d639658e94807ae1b5acaf48506a8f71cdf472 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Thu, 13 Jul 2023 17:05:09 +0900 Subject: [PATCH 067/446] feat(start_planner): add curvature limit for path generation (#446) * add param for curvature shift start Signed-off-by: Takamasa Horibe * update Signed-off-by: Takamasa Horibe * change param Signed-off-by: Takamasa Horibe * maximum_curvature: 0.07 Signed-off-by: kosuke55 --------- Signed-off-by: Takamasa Horibe Signed-off-by: kosuke55 Co-authored-by: kosuke55 --- .../behavior_path_planner/start_planner/start_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index fe98d7aa2a..5ae5c99ff8 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -15,6 +15,7 @@ lateral_acceleration_sampling_num: 3 minimum_lateral_acc: 0.15 maximum_lateral_acc: 0.5 + maximum_curvature: 0.07 # geometric pull out enable_geometric_pull_out: true divide_pull_out_path: false From 507764dabce6dbeb0e1f3ce4c4531622e0e03214 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 14 Jul 2023 16:21:10 +0900 Subject: [PATCH 068/446] feat(autoware_launch): add disable_stop_for_yield_cancel in crosswalk (#449) * feat(autoware_launch): add disable_stop_for_yield_cancel in crosswalk Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 2bbc5d31fc..b20c83b5fd 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -21,12 +21,13 @@ stuck_vehicle_attention_range: 10.0 # [m] the detection area is defined as X meters behind the crosswalk # param for pass judge logic + disable_stop_for_yield_cancel: false ego_pass_first_margin: 6.0 # [s] time margin for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) ego_pass_later_margin: 10.0 # [s] time margin for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) max_yield_timeout: 3.0 # [s] if the pedestrian does not move for X seconds after stopping before the crosswalk, the module judge that ego is able to pass first. - ego_yield_query_stop_duration: 0.1 # [s] the amount of time which ego should be stopping to query whether it yields or not + ego_yield_query_stop_duration: 3.0 # [s] the amount of time which ego should be stopping to query whether it yields or not # param for input data tl_state_timeout: 3.0 # [s] timeout threshold for traffic light signal From 7e19a09628662873a08ba6f798f9abccb7dc6569 Mon Sep 17 00:00:00 2001 From: Yutaka Shimizu <43805014+purewater0901@users.noreply.github.com> Date: Fri, 14 Jul 2023 21:05:40 +0900 Subject: [PATCH 069/446] feat(autoware_launch): update lane change rviz configuration (#451) * feat(autoware_launch): update autoware rviz Signed-off-by: yutaka * update Signed-off-by: yutaka --------- Signed-off-by: yutaka --- autoware_launch/rviz/autoware.rviz | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index d18d37cbfd..97f73bc672 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -1828,7 +1828,7 @@ Visualization Manager: Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false - Name: LaneChange + Name: LeftLaneChange Namespaces: {} Topic: @@ -1836,7 +1836,19 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change_left + Value: false + - Class: rviz_default_plugins/MarkerArray + Enabled: false + Name: RightLaneChange + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change_right Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false From 2796d0a2115398f5479d95990dc72deabd09942d Mon Sep 17 00:00:00 2001 From: Ismet Atabay <56237550+ismetatabay@users.noreply.github.com> Date: Fri, 14 Jul 2023 15:10:48 +0300 Subject: [PATCH 070/446] refactor(autoware_launch): add euclidean_clustering params (#445) * add euclidean_clustering param Signed-off-by: ismetatabay * style(pre-commit): autofix Signed-off-by: ismetatabay * update and rearrange comments Signed-off-by: ismetatabay * style(pre-commit): autofix Signed-off-by: ismetatabay --------- Signed-off-by: ismetatabay Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../clustering/compare_map.param.yaml | 20 +++++++++++ .../clustering/euclidean_cluster.param.yaml | 6 ++++ .../detection/clustering/outlier.param.yaml | 8 +++++ .../clustering/voxel_grid.param.yaml | 7 ++++ ...el_grid_based_euclidean_cluster.param.yaml | 15 ++++++++ .../roi_sync.param.yaml | 0 .../object_lanelet_filter.param.yaml | 0 .../object_position_filter.param.yaml | 0 .../pointcloud_map_filter.param.yaml | 0 .../tier4_perception_component.launch.xml | 34 +++++++++++++++---- 10 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/compare_map.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/euclidean_cluster.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/outlier.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid_based_euclidean_cluster.param.yaml rename autoware_launch/config/perception/object_recognition/detection/{ => image_projection_based_fusion}/roi_sync.param.yaml (100%) rename autoware_launch/config/perception/object_recognition/detection/{ => object_filter}/object_lanelet_filter.param.yaml (100%) rename autoware_launch/config/perception/object_recognition/detection/{ => object_filter}/object_position_filter.param.yaml (100%) rename autoware_launch/config/perception/object_recognition/detection/{ => pointcloud_filter}/pointcloud_map_filter.param.yaml (100%) diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/compare_map.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/compare_map.param.yaml new file mode 100644 index 0000000000..3dd303464a --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/clustering/compare_map.param.yaml @@ -0,0 +1,20 @@ +/**: + ros__parameters: + + # distance threshold for compare compare + distance_threshold: 0.5 + + # publish voxelized map pointcloud for debug + publish_debug_pcd: False + + # use dynamic map loading + use_dynamic_map_loading: True + + # time interval to check dynamic map loading + timer_interval_ms: 100 + + # distance threshold for dynamic map update + map_update_distance_threshold: 10.0 + + # radius map for dynamic map loading + map_loader_radius: 150.0 diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/euclidean_cluster.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/euclidean_cluster.param.yaml new file mode 100644 index 0000000000..1411f766b4 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/clustering/euclidean_cluster.param.yaml @@ -0,0 +1,6 @@ +/**: + ros__parameters: + max_cluster_size: 1000 + min_cluster_size: 10 + tolerance: 0.7 + use_height: false diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/outlier.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/outlier.param.yaml new file mode 100644 index 0000000000..1962fba1f3 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/clustering/outlier.param.yaml @@ -0,0 +1,8 @@ +/**: + ros__parameters: + input_frame: base_link + output_frame: base_link + voxel_size_x: 0.3 + voxel_size_y: 0.3 + voxel_size_z: 100.0 + voxel_points_threshold: 3 diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid.param.yaml new file mode 100644 index 0000000000..3ff32bfbb7 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid.param.yaml @@ -0,0 +1,7 @@ +/**: + ros__parameters: + input_frame: base_link + output_frame: base_link + voxel_size_x: 0.15 + voxel_size_y: 0.15 + voxel_size_z: 0.15 diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid_based_euclidean_cluster.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid_based_euclidean_cluster.param.yaml new file mode 100644 index 0000000000..2f3de2b789 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid_based_euclidean_cluster.param.yaml @@ -0,0 +1,15 @@ +/**: + ros__parameters: + tolerance: 0.7 + voxel_leaf_size: 0.3 + min_points_number_per_voxel: 1 + min_cluster_size: 10 + max_cluster_size: 3000 + use_height: false + input_frame: "base_link" + max_x: 70.0 + min_x: -70.0 + max_y: 70.0 + min_y: -70.0 + max_z: 4.5 + min_z: -4.5 diff --git a/autoware_launch/config/perception/object_recognition/detection/roi_sync.param.yaml b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml similarity index 100% rename from autoware_launch/config/perception/object_recognition/detection/roi_sync.param.yaml rename to autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/object_lanelet_filter.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_filter/object_lanelet_filter.param.yaml similarity index 100% rename from autoware_launch/config/perception/object_recognition/detection/object_lanelet_filter.param.yaml rename to autoware_launch/config/perception/object_recognition/detection/object_filter/object_lanelet_filter.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/object_position_filter.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_filter/object_position_filter.param.yaml similarity index 100% rename from autoware_launch/config/perception/object_recognition/detection/object_position_filter.param.yaml rename to autoware_launch/config/perception/object_recognition/detection/object_filter/object_position_filter.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/pointcloud_map_filter.param.yaml b/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml similarity index 100% rename from autoware_launch/config/perception/object_recognition/detection/pointcloud_map_filter.param.yaml rename to autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 5de556ac6f..84c3c1519d 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -9,24 +9,46 @@ + + + + + + + + + - + + - + + - From 445a73dfc9f28bbc5ed0a3d2d00c271dd139cecb Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 18 Jul 2023 11:25:49 +0900 Subject: [PATCH 071/446] refactor(avoidance): update parameter names (#453) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index c937ebc65b..5f5e211492 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -11,16 +11,18 @@ # avoidance module common setting enable_bound_clipping: false - enable_avoidance_over_same_direction: true - enable_avoidance_over_opposite_direction: true enable_update_path_when_object_is_gone: false enable_force_avoidance_for_stopped_vehicle: false enable_safety_check: true enable_yield_maneuver: true enable_yield_maneuver_during_shifting: false disable_path_update: false - use_hatched_road_markings: true + + # drivable area setting + use_adjacent_lane: true + use_opposite_lane: true use_intersection_areas: true + use_hatched_road_markings: true # for debug publish_debug_marker: false From 39c52f832b022c731b5016be9ab98a6d424f16a7 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 18 Jul 2023 17:49:01 +0900 Subject: [PATCH 072/446] fix(occlusion_spot): add lacking param (#452) Signed-off-by: satoshi-ota --- .../behavior_velocity_planner/occlusion_spot.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/occlusion_spot.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/occlusion_spot.param.yaml index 0b93ea5308..089180aa66 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/occlusion_spot.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/occlusion_spot.param.yaml @@ -13,9 +13,12 @@ is_show_cv_window: false # [-] whether to show open_cv debug window is_show_processing_time: false # [-] whether to show processing time threshold: + detection_area_offset: 30.0 detection_area_length: 100.0 # [m] the length of path to consider perception range stuck_vehicle_vel: 1.0 # [m/s] velocity below this value is assumed to stop lateral_distance: 1.5 # [m] maximum lateral distance to consider hidden collision + search_dist: 10.0 + search_angle: 0.63 # [rad] PI/5.0 motion: safety_ratio: 0.8 # [-] jerk/acceleration ratio for safety max_slow_down_jerk: -0.3 # [m/s^3] minimum jerk deceleration for safe brake. From 860c1cffe9542550893192b405002b383f28255b Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 18 Jul 2023 20:27:14 +0900 Subject: [PATCH 073/446] feat(intersection): add behavior for arrow signal (#456) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index e54282739d..b430bfad4f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -25,8 +25,12 @@ state_transit_margin_time: 1.0 min_predicted_path_confidence: 0.05 minimum_ego_predicted_velocity: 1.388 # [m/s] - collision_start_margin_time: 4.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object - collision_end_margin_time: 6.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object + normal: + collision_start_margin_time: 4.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object + collision_end_margin_time: 6.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object + relaxed: + collision_start_margin_time: 2.0 + collision_end_margin_time: 0.0 keep_detection_vel_thr: 0.833 # == 3.0km/h. keep detection if ego is ego.vel < keep_detection_vel_thr occlusion: From 4daf918125090d656dea95405fad4b8c8b21bd18 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 19 Jul 2023 09:01:07 +0900 Subject: [PATCH 074/446] feat: use `pose_source` and `twist_source` for selecting localization methods (#442) * feat: add pose and twist sources args for localization Signed-off-by: kminoda * removed unnecessary params Signed-off-by: kminoda * allow only one source Signed-off-by: kminoda * Move configs to tier4_localization_component.launch.xml Signed-off-by: kminoda * Remove unnecessary line Signed-off-by: kminoda * fix comment Signed-off-by: kminoda --------- Signed-off-by: kminoda --- ...tializer.logging_simulator.gnss.param.yaml | 7 --- ...ializer.logging_simulator.lidar.param.yaml | 7 --- .../localization/pose_initializer.param.yaml | 29 +++++++++--- ..._initializer.planning_simulator.param.yaml | 7 --- .../pose_initializer_common.param.yaml | 26 ----------- ...alizer.logging_simulator.yabloc.param.yaml | 7 --- .../yabloc/pose_initializer.yabloc.param.yaml | 7 --- autoware_launch/launch/autoware.launch.xml | 3 -- .../map4_localization_component.launch.xml | 45 ------------------- .../tier4_localization_component.launch.xml | 26 +++++------ .../tier4_simulator_component.launch.xml | 3 +- 11 files changed, 36 insertions(+), 131 deletions(-) delete mode 100644 autoware_launch/config/localization/pose_initializer.logging_simulator.gnss.param.yaml delete mode 100644 autoware_launch/config/localization/pose_initializer.logging_simulator.lidar.param.yaml delete mode 100644 autoware_launch/config/localization/pose_initializer.planning_simulator.param.yaml delete mode 100644 autoware_launch/config/localization/pose_initializer_common.param.yaml delete mode 100644 autoware_launch/config/localization/yabloc/pose_initializer.logging_simulator.yabloc.param.yaml delete mode 100644 autoware_launch/config/localization/yabloc/pose_initializer.yabloc.param.yaml delete mode 100644 autoware_launch/launch/components/map4_localization_component.launch.xml diff --git a/autoware_launch/config/localization/pose_initializer.logging_simulator.gnss.param.yaml b/autoware_launch/config/localization/pose_initializer.logging_simulator.gnss.param.yaml deleted file mode 100644 index 4a1e4da885..0000000000 --- a/autoware_launch/config/localization/pose_initializer.logging_simulator.gnss.param.yaml +++ /dev/null @@ -1,7 +0,0 @@ -/**: - ros__parameters: - gnss_enabled: true - ndt_enabled: false - ekf_enabled: true - yabloc_enabled: false - stop_check_enabled: false diff --git a/autoware_launch/config/localization/pose_initializer.logging_simulator.lidar.param.yaml b/autoware_launch/config/localization/pose_initializer.logging_simulator.lidar.param.yaml deleted file mode 100644 index 1f3b37cb65..0000000000 --- a/autoware_launch/config/localization/pose_initializer.logging_simulator.lidar.param.yaml +++ /dev/null @@ -1,7 +0,0 @@ -/**: - ros__parameters: - gnss_enabled: true - ndt_enabled: true - ekf_enabled: true - yabloc_enabled: false - stop_check_enabled: false diff --git a/autoware_launch/config/localization/pose_initializer.param.yaml b/autoware_launch/config/localization/pose_initializer.param.yaml index 16c7252fc0..a05cc7c35c 100644 --- a/autoware_launch/config/localization/pose_initializer.param.yaml +++ b/autoware_launch/config/localization/pose_initializer.param.yaml @@ -1,7 +1,26 @@ /**: ros__parameters: - gnss_enabled: true - ndt_enabled: true - ekf_enabled: true - yabloc_enabled: false - stop_check_enabled: true + gnss_pose_timeout: 3.0 # [sec] + stop_check_duration: 3.0 # [sec] + + # from gnss + gnss_particle_covariance: + [ + 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 10.0, + ] + + # output + output_pose_covariance: + [ + 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, + ] diff --git a/autoware_launch/config/localization/pose_initializer.planning_simulator.param.yaml b/autoware_launch/config/localization/pose_initializer.planning_simulator.param.yaml deleted file mode 100644 index cf0760d99f..0000000000 --- a/autoware_launch/config/localization/pose_initializer.planning_simulator.param.yaml +++ /dev/null @@ -1,7 +0,0 @@ -/**: - ros__parameters: - gnss_enabled: false - ndt_enabled: false - ekf_enabled: false - yabloc_enabled: false - stop_check_enabled: false diff --git a/autoware_launch/config/localization/pose_initializer_common.param.yaml b/autoware_launch/config/localization/pose_initializer_common.param.yaml deleted file mode 100644 index a05cc7c35c..0000000000 --- a/autoware_launch/config/localization/pose_initializer_common.param.yaml +++ /dev/null @@ -1,26 +0,0 @@ -/**: - ros__parameters: - gnss_pose_timeout: 3.0 # [sec] - stop_check_duration: 3.0 # [sec] - - # from gnss - gnss_particle_covariance: - [ - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 10.0, - ] - - # output - output_pose_covariance: - [ - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, - ] diff --git a/autoware_launch/config/localization/yabloc/pose_initializer.logging_simulator.yabloc.param.yaml b/autoware_launch/config/localization/yabloc/pose_initializer.logging_simulator.yabloc.param.yaml deleted file mode 100644 index a9aa7a3928..0000000000 --- a/autoware_launch/config/localization/yabloc/pose_initializer.logging_simulator.yabloc.param.yaml +++ /dev/null @@ -1,7 +0,0 @@ -/**: - ros__parameters: - gnss_enabled: true - ndt_enabled: false - ekf_enabled: true - yabloc_enabled: true - stop_check_enabled: false diff --git a/autoware_launch/config/localization/yabloc/pose_initializer.yabloc.param.yaml b/autoware_launch/config/localization/yabloc/pose_initializer.yabloc.param.yaml deleted file mode 100644 index b4334307d7..0000000000 --- a/autoware_launch/config/localization/yabloc/pose_initializer.yabloc.param.yaml +++ /dev/null @@ -1,7 +0,0 @@ -/**: - ros__parameters: - gnss_enabled: true - ndt_enabled: false - ekf_enabled: true - yabloc_enabled: true - stop_check_enabled: true diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index 3d972188e1..f702747ec9 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -38,8 +38,6 @@ - - @@ -86,7 +84,6 @@ - diff --git a/autoware_launch/launch/components/map4_localization_component.launch.xml b/autoware_launch/launch/components/map4_localization_component.launch.xml deleted file mode 100644 index 4fd0fdf8bd..0000000000 --- a/autoware_launch/launch/components/map4_localization_component.launch.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/autoware_launch/launch/components/tier4_localization_component.launch.xml b/autoware_launch/launch/components/tier4_localization_component.launch.xml index ba815398a1..e167dd91ec 100644 --- a/autoware_launch/launch/components/tier4_localization_component.launch.xml +++ b/autoware_launch/launch/components/tier4_localization_component.launch.xml @@ -1,24 +1,16 @@ - - - - - - - - - - - - + + - + + + @@ -26,10 +18,11 @@ - - + + + @@ -40,6 +33,9 @@ + + + diff --git a/autoware_launch/launch/components/tier4_simulator_component.launch.xml b/autoware_launch/launch/components/tier4_simulator_component.launch.xml index 7b21a43e50..7af618ef71 100644 --- a/autoware_launch/launch/components/tier4_simulator_component.launch.xml +++ b/autoware_launch/launch/components/tier4_simulator_component.launch.xml @@ -35,8 +35,7 @@ name="object_recognition_tracking_multi_object_tracker_data_association_matrix_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/tracking/multi_object_tracker/data_association_matrix.param.yaml" /> - - + From 457063cc4f511fe2619a7aa99888fb2a5bc20452 Mon Sep 17 00:00:00 2001 From: Yutaka Shimizu <43805014+purewater0901@users.noreply.github.com> Date: Wed, 19 Jul 2023 17:05:27 +0900 Subject: [PATCH 075/446] feat(planning_launch): add safety check flags for lane change (#462) --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index b1e8ffc3c3..1f075993aa 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -47,7 +47,8 @@ # collision check enable_prepare_segment_collision_check: false prepare_segment_ignore_object_velocity_thresh: 0.1 # [m/s] - use_predicted_path_outside_lanelet: true + check_objects_on_current_lanes: true + check_objects_on_other_lanes: true use_all_predicted_path: true # lane change cancel From 3c7bf4dccdcaecc2b713cf2954f7b69471eed77c Mon Sep 17 00:00:00 2001 From: Ismet Atabay <56237550+ismetatabay@users.noreply.github.com> Date: Wed, 19 Jul 2023 13:58:26 +0300 Subject: [PATCH 076/446] refactor(autoware_launch): add map_based_prediction param file (#463) init commit Signed-off-by: ismetatabay --- .../map_based_prediction.param.yaml | 28 +++++++++++++++++++ .../tier4_perception_component.launch.xml | 4 +++ 2 files changed, 32 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml new file mode 100644 index 0000000000..eae747ce38 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -0,0 +1,28 @@ +/**: + ros__parameters: + enable_delay_compensation: true + prediction_time_horizon: 7.8 #[s] + prediction_sampling_delta_time: 0.5 #[s] + min_velocity_for_map_based_prediction: 1.39 #[m/s] + min_crosswalk_user_velocity: 1.39 #[m/s] + dist_threshold_for_searching_lanelet: 3.0 #[m] + delta_yaw_threshold_for_searching_lanelet: 0.785 #[rad] + sigma_lateral_offset: 0.5 #[m] + sigma_yaw_angle_deg: 5.0 #[angle degree] + object_buffer_time_length: 2.0 #[s] + history_time_length: 1.0 #[s] + + lane_change_detection: + method: "lat_diff_distance" # choose from "lat_diff_distance" or "time_to_change_lane" + time_to_change_lane: + dist_threshold_for_lane_change_detection: 1.0 #[m] + time_threshold_for_lane_change_detection: 5.0 #[s] + cutoff_freq_of_velocity_for_lane_change_detection: 0.1 #[Hz] + lat_diff_distance: + dist_ratio_threshold_to_left_bound: -0.5 #[ratio] + dist_ratio_threshold_to_right_bound: 0.5 #[ratio + diff_dist_threshold_to_left_bound: 0.29 #[m] + diff_dist_threshold_to_right_bound: -0.29 #[m] + num_continuous_state_transition: 3 + + reference_path_resolution: 0.5 #[m] diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 84c3c1519d..e4bedaed8a 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -43,6 +43,10 @@ name="object_recognition_detection_fusion_sync_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml" /> + Date: Wed, 19 Jul 2023 15:19:34 +0300 Subject: [PATCH 077/446] fix(obstacle_avoidance_planner): adding missing functionality for stop margin due to out of drivable area (#438) Signed-off-by: AhmedEbrahim --- .../obstacle_avoidance_planner.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml index 10b41763ad..a801d3c520 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml @@ -19,6 +19,9 @@ output_delta_arc_length: 0.5 # delta arc length for output trajectory [m] output_backward_traj_length: 5.0 # backward length for backward trajectory from base_link [m] + vehicle_stop_margin_outside_drivable_area: 1.5 # vehicle stop margin to let the vehicle stop before the calculated stop point if it is calculated outside the drivable area [m] . + # This margin will be realized with delta_arc_length_for_mpt_points m precision. + # replanning & trimming trajectory param outside algorithm replan: max_path_shape_around_ego_lat_dist: 2.0 # threshold of path shape change around ego [m] From 5939b17d9a48464681f5eac329738e0874ad9f57 Mon Sep 17 00:00:00 2001 From: Ismet Atabay <56237550+ismetatabay@users.noreply.github.com> Date: Wed, 19 Jul 2023 16:19:54 +0300 Subject: [PATCH 078/446] fix(tier4_simulator_component): add missing argument (#465) update simulator launch component Signed-off-by: ismetatabay --- .../launch/components/tier4_simulator_component.launch.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/launch/components/tier4_simulator_component.launch.xml b/autoware_launch/launch/components/tier4_simulator_component.launch.xml index 7af618ef71..bd191f7a56 100644 --- a/autoware_launch/launch/components/tier4_simulator_component.launch.xml +++ b/autoware_launch/launch/components/tier4_simulator_component.launch.xml @@ -27,6 +27,10 @@ + Date: Wed, 19 Jul 2023 22:32:17 +0900 Subject: [PATCH 079/446] refactor(autoware_launch): add walkway param yaml (#458) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 4 ---- .../behavior_velocity_planner/walkway.param.yaml | 5 +++++ .../launch/components/tier4_planning_component.launch.xml | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index b20c83b5fd..8a4b80a44d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -39,7 +39,3 @@ bicycle: true # [-] whether to look and stop by BICYCLE objects motorcycle: true # [-] whether to look and stop by MOTORCYCLE objects (tmp: currently it is difficult for perception modules to detect bicycles and motorcycles separately.) pedestrian: true # [-] whether to look and stop by PEDESTRIAN objects - - walkway: - stop_duration_sec: 1.0 # [s] stop time at stop position - stop_line_distance: 3.5 # [m] make stop line away from crosswalk when no explicit stop line exists diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml new file mode 100644 index 0000000000..b9f278796b --- /dev/null +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + walkway: + stop_duration_sec: 1.0 # [s] stop time at stop position + stop_line_distance: 3.5 # [m] make stop line away from crosswalk when no explicit stop line exists diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index c197512e24..ad55c76d82 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -50,6 +50,7 @@ name="behavior_velocity_planner_module_param_paths" value="[$(var behavior_velocity_config_path)/blind_spot.param.yaml, $(var behavior_velocity_config_path)/crosswalk.param.yaml, + $(var behavior_velocity_config_path)/walkway.param.yaml, $(var behavior_velocity_config_path)/detection_area.param.yaml, $(var behavior_velocity_config_path)/intersection.param.yaml, $(var behavior_velocity_config_path)/stop_line.param.yaml, From 6ef44e7a87d29ac5c85c6a8deb748f12bd6558c6 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 20 Jul 2023 00:42:35 +0900 Subject: [PATCH 080/446] refactor(autoware_launch): rename crosswalk/walkway parameters (#459) Signed-off-by: Takayuki Murooka --- .../crosswalk.param.yaml | 72 +++++++++++-------- .../walkway.param.yaml | 4 +- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 8a4b80a44d..edd37092ba 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -1,41 +1,51 @@ /**: ros__parameters: crosswalk: - show_processing_time: false # [-] whether to show processing time + common: + show_processing_time: false # [-] whether to show processing time + # param for input data + traffic_light_state_timeout: 3.0 # [s] timeout threshold for traffic light signal # param for stop position - stop_line_distance: 3.5 # [m] make stop line away from crosswalk when no explicit stop line exists - stop_line_margin: 10.0 # [m] if objects cross X meters behind the stop line, the stop position is determined according to the object position (stop_margin meters before the object) - stop_margin: 2.0 # [m] the vehicle decelerates to be able to stop in front of object with margin - stop_position_threshold: 1.0 # [m] threshold for check whether the vehicle stop in front of crosswalk + stop_position: + stop_position_threshold: 1.0 # [m] threshold to check whether the vehicle stops in front of crosswalk for yielding - # param for ego velocity - min_slow_down_velocity: 2.78 # [m/s] target vehicle velocity when module receive slow down command from FOA (2.78 m/s = 10.0 kmph) - max_slow_down_jerk: -1.5 # [m/sss] minimum jerk deceleration for safe brake - max_slow_down_accel: -2.5 # [m/ss] minimum accel deceleration for safe brake - no_relax_velocity: 2.78 # [m/s] if the current velocity is less than X m/s, ego always stops at the stop position(not relax deceleration constraints 2.78 m/s = 10 kmph) + # For the Lanelet2 map with no explicit stop lines + stop_distance_from_crosswalk: 3.5 # [m] make stop line away from crosswalk + # For the case where the crosswalk width is very wide + far_object_threshold: 10.0 # [m] If objects cross X meters behind the stop line, the stop position is determined according to the object position (stop_distance_from_object meters before the object). + # For the case where the stop position is determined according to the object position. + stop_distance_from_object: 2.0 # [m] the vehicle decelerates to be able to stop in front of object with margin - # param for stuck vehicle - stuck_vehicle_velocity: 1.0 # [m/s] maximum velocity threshold whether the vehicle is stuck - max_lateral_offset: 2.0 # [m] maximum lateral offset for stuck vehicle position should be looked - stuck_vehicle_attention_range: 10.0 # [m] the detection area is defined as X meters behind the crosswalk + # param for ego's slow down velocity + slow_down: + min_slow_down_velocity: 2.78 # [m/s] target vehicle velocity when module receive slow down command from FOA (2.78 m/s = 10.0 kmph) + max_slow_down_jerk: -1.5 # [m/sss] minimum jerk deceleration for safe brake + max_slow_down_accel: -2.5 # [m/ss] minimum accel deceleration for safe brake + no_relax_velocity: 2.78 # [m/s] if the current velocity is less than X m/s, ego always stops at the stop position(not relax deceleration constraints 2.78 m/s = 10 kmph) - # param for pass judge logic - disable_stop_for_yield_cancel: false - ego_pass_first_margin: 6.0 # [s] time margin for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) - ego_pass_later_margin: 10.0 # [s] time margin for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) - stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) - min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) - max_yield_timeout: 3.0 # [s] if the pedestrian does not move for X seconds after stopping before the crosswalk, the module judge that ego is able to pass first. - ego_yield_query_stop_duration: 3.0 # [s] the amount of time which ego should be stopping to query whether it yields or not + # param for stuck vehicles + stuck_vehicle: + stuck_vehicle_velocity: 1.0 # [m/s] maximum velocity threshold whether the vehicle is stuck + max_stuck_vehicle_lateral_offset: 2.0 # [m] maximum lateral offset for stuck vehicle position should be looked + stuck_vehicle_attention_range: 10.0 # [m] the detection area is defined as X meters behind the crosswalk - # param for input data - tl_state_timeout: 3.0 # [s] timeout threshold for traffic light signal + # param for pass judge logic + pass_judge: + ego_pass_first_margin: 6.0 # [s] time margin for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) + ego_pass_later_margin: 10.0 # [s] time margin for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) + stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) + min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) + ## param for yielding + disable_stop_for_yield_cancel: false + timeout_no_intention_to_walk: 3.0 # [s] if the pedestrian does not move for X seconds after stopping before the crosswalk, the module judge that ego is able to pass first. + timeout_ego_stop_for_yield: 3.0 # [s] the amount of time which ego should be stopping to query whether it yields or not - # param for target area & object - crosswalk_attention_range: 1.0 # [m] the detection area is defined as -X meters before the crosswalk to +X meters behind the crosswalk - target_object: - unknown: true # [-] whether to look and stop by UNKNOWN objects - bicycle: true # [-] whether to look and stop by BICYCLE objects - motorcycle: true # [-] whether to look and stop by MOTORCYCLE objects (tmp: currently it is difficult for perception modules to detect bicycles and motorcycles separately.) - pedestrian: true # [-] whether to look and stop by PEDESTRIAN objects + # param for target object filtering + object_filtering: + crosswalk_attention_range: 1.0 # [m] the detection area is defined as -X meters before the crosswalk to +X meters behind the crosswalk + target_object: + unknown: true # [-] whether to look and stop by UNKNOWN objects + bicycle: true # [-] whether to look and stop by BICYCLE objects + motorcycle: true # [-] whether to look and stop by MOTORCYCLE objects (tmp: currently it is difficult for perception modules to detect bicycles and motorcycles separately.) + pedestrian: true # [-] whether to look and stop by PEDESTRIAN objects diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml index b9f278796b..f21e3d12db 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml @@ -1,5 +1,5 @@ /**: ros__parameters: walkway: - stop_duration_sec: 1.0 # [s] stop time at stop position - stop_line_distance: 3.5 # [m] make stop line away from crosswalk when no explicit stop line exists + stop_duration: 1.0 # [s] stop time at stop position + stop_distance_from_crosswalk: 3.5 # [m] make stop line away from crosswalk when no explicit stop line exists From dde7d83215d6e8eeade8bbc8b4cbdb450ef72109 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 20 Jul 2023 15:53:41 +0900 Subject: [PATCH 081/446] fix(avoidance): update config to prevent unconfortable deceleration (#466) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 5f5e211492..eb300dd612 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -175,7 +175,7 @@ longitudinal: nominal_deceleration: -1.0 # [m/ss] nominal_jerk: 0.5 # [m/sss] - max_deceleration: -2.0 # [m/ss] + max_deceleration: -1.5 # [m/ss] max_jerk: 1.0 # [m/sss] max_acceleration: 1.0 # [m/ss] From e1da2bbc7a27badf9a9cc9ae01d0a91cb16ecac2 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 20 Jul 2023 19:38:12 +0900 Subject: [PATCH 082/446] chore(autoware_launch): zero margin for outside the drivable area (#468) Signed-off-by: Takayuki Murooka --- .../obstacle_avoidance_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml index a801d3c520..f681398717 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml @@ -19,7 +19,7 @@ output_delta_arc_length: 0.5 # delta arc length for output trajectory [m] output_backward_traj_length: 5.0 # backward length for backward trajectory from base_link [m] - vehicle_stop_margin_outside_drivable_area: 1.5 # vehicle stop margin to let the vehicle stop before the calculated stop point if it is calculated outside the drivable area [m] . + vehicle_stop_margin_outside_drivable_area: 0.0 # vehicle stop margin to let the vehicle stop before the calculated stop point if it is calculated outside the drivable area [m] . # This margin will be realized with delta_arc_length_for_mpt_points m precision. # replanning & trimming trajectory param outside algorithm From d406a4968001dced29f01c4b940c8114f65db98e Mon Sep 17 00:00:00 2001 From: Ismet Atabay <56237550+ismetatabay@users.noreply.github.com> Date: Thu, 20 Jul 2023 14:26:10 +0300 Subject: [PATCH 083/446] refactor(autoware_launch): add object_merger param files (#464) init commit Signed-off-by: ismetatabay --- .../data_association_matrix.param.yaml | 44 +++++++++++++++++++ .../object_merger/overlapped_judge.param.yaml | 5 +++ .../tier4_perception_component.launch.xml | 8 ++++ 3 files changed, 57 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/object_merger/data_association_matrix.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/object_merger/data_association_matrix.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_merger/data_association_matrix.param.yaml new file mode 100644 index 0000000000..e1bf2c67b3 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/object_merger/data_association_matrix.param.yaml @@ -0,0 +1,44 @@ +/**: + ros__parameters: + can_assign_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN + [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + 0, 1, 1, 1, 1, 0, 0, 0, #CAR + 0, 1, 1, 1, 1, 0, 0, 0, #TRUCK + 0, 1, 1, 1, 1, 0, 0, 0, #BUS + 0, 1, 1, 1, 1, 0, 0, 0, #TRAILER + 0, 0, 0, 0, 0, 1, 1, 1, #MOTORBIKE + 0, 0, 0, 0, 0, 1, 1, 1, #BICYCLE + 0, 0, 0, 0, 0, 1, 1, 1] #PEDESTRIAN + + max_dist_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [4.0, 4.0, 5.0, 5.0, 5.0, 2.0, 2.0, 2.0, #UNKNOWN + 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #CAR + 5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #TRUCK + 5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #BUS + 5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #TRAILER + 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, #MOTORBIKE + 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, #BICYCLE + 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0] #PEDESTRIAN + max_rad_matrix: # If value is greater than pi, it will be ignored. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER MOTORBIKE, BICYCLE, PEDESTRIAN + [3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #UNKNOWN + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #CAR + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRUCK + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #BUS + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRAILER + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #MOTORBIKE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #BICYCLE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150] #PEDESTRIAN + + min_iou_matrix: # If value is negative, it will be ignored. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #UNKNOWN + 0.1, 0.3, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, #CAR + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #TRUCK + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #BUS + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #TRAILER + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #MOTORBIKE + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #BICYCLE + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] #PEDESTRIAN diff --git a/autoware_launch/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml new file mode 100644 index 0000000000..94882fae4f --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + distance_threshold_list: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN + [9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0] #UNKNOWN diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index e4bedaed8a..f08de01837 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -47,6 +47,14 @@ name="object_recognition_prediction_map_based_prediction_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/prediction/map_based_prediction.param.yaml" /> + + Date: Fri, 21 Jul 2023 19:08:14 +0900 Subject: [PATCH 084/446] feat(avoidance): flexible avoidance path generation (#454) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index eb300dd612..2330c7c9e8 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -145,11 +145,9 @@ longitudinal: prepare_time: 2.0 # [s] min_prepare_distance: 1.0 # [m] - min_avoidance_distance: 10.0 # [m] - min_nominal_avoidance_speed: 7.0 # [m/s] - min_sharp_avoidance_speed: 2.78 # [m/s] min_slow_down_speed: 1.38 # [m/s] buf_slow_down_speed: 0.56 # [m/s] + nominal_avoidance_speed: 8.33 # [m/s] # For yield maneuver yield: @@ -157,7 +155,6 @@ # For stop maneuver stop: - min_distance: 10.0 # [m] max_distance: 20.0 # [m] stop_buffer: 1.0 # [m] @@ -167,9 +164,10 @@ # lateral constraints lateral: - nominal_lateral_jerk: 0.2 # [m/sss] - max_lateral_jerk: 1.0 # [m/sss] - max_lateral_acceleration: 0.5 # [m/ss] + velocity: [1.0, 1.38, 11.1] # [m/s] + max_accel_values: [0.5, 0.5, 0.5] # [m/ss] + min_jerk_values: [0.2, 0.2, 0.2] # [m/sss] + max_jerk_values: [1.0, 1.0, 1.0] # [m/sss] # longitudinal constraints longitudinal: From 94ffca2487ec21978d3c9b7b7f3559fe095d8080 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Sat, 22 Jul 2023 15:13:04 +0900 Subject: [PATCH 085/446] refactor(avoidance): parameterize magic number (#426) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 2330c7c9e8..15aa644390 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -138,6 +138,7 @@ lateral: lateral_execution_threshold: 0.09 # [m] lateral_small_shift_threshold: 0.101 # [m] + lateral_avoid_check_threshold: 0.1 # [m] road_shoulder_safety_margin: 0.3 # [m] max_right_shift_length: 5.0 max_left_shift_length: 5.0 From 732bd5d1988b9a3be9ace77df1e503423783087b Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Sat, 22 Jul 2023 17:32:29 +0900 Subject: [PATCH 086/446] feat(behavior_velocity_planner): add flag to enable auto mode without rtc_auto_mode_manager (#435) * add enable_rtc param Signed-off-by: kyoichi-sugahara * fix typo Signed-off-by: kyoichi-sugahara * revert change of rviz config Signed-off-by: kyoichi-sugahara * revert change of rviz config Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../behavior_velocity_planner/blind_spot.param.yaml | 1 + .../behavior_velocity_planner/crosswalk.param.yaml | 1 + .../behavior_velocity_planner/detection_area.param.yaml | 1 + .../behavior_velocity_planner/intersection.param.yaml | 4 ++++ .../behavior_velocity_planner/no_stopping_area.param.yaml | 1 + .../behavior_velocity_planner/traffic_light.param.yaml | 1 + 6 files changed, 9 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml index 7963766c03..8a57bfeabd 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml @@ -8,3 +8,4 @@ max_future_movement_time: 10.0 # [second] threshold_yaw_diff: 0.523 # [rad] adjacent_extend_width: 1.5 # [m] + enable_rtc: true # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index edd37092ba..65ef41eff9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -5,6 +5,7 @@ show_processing_time: false # [-] whether to show processing time # param for input data traffic_light_state_timeout: 3.0 # [s] timeout threshold for traffic light signal + enable_rtc: true # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. # param for stop position stop_position: diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/detection_area.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/detection_area.param.yaml index ad4e32cb4e..55b627cce7 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/detection_area.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/detection_area.param.yaml @@ -8,3 +8,4 @@ state_clear_time: 2.0 hold_stop_margin_distance: 0.0 distance_to_judge_over_stop_line: 0.5 + enable_rtc: true # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index b430bfad4f..f20db856a9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -48,5 +48,9 @@ denoise_kernel: 1.0 # [m] pub_debug_grid: false + enable_rtc: + intersection: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval + intersection_to_occlusion: true + merge_from_private: stop_duration_sec: 1.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_stopping_area.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_stopping_area.param.yaml index 32cd05a9cc..f550188d4f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_stopping_area.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_stopping_area.param.yaml @@ -8,3 +8,4 @@ stop_line_margin: 1.0 # [m] margin to auto-gen stop line at no stopping area detection_area_length: 200.0 # [m] used to create detection area polygon stuck_vehicle_front_margin: 6.0 # [m] obstacle stop max distance(5.0m) + enable_rtc: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml index 444fa5ca65..e8e0357daa 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml @@ -5,3 +5,4 @@ tl_state_timeout: 1.0 yellow_lamp_period: 2.75 enable_pass_judge: true + enable_rtc: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval From 9f7bdf254e9595f73be009d4434ed00ef10c6fbc Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:26:27 +0900 Subject: [PATCH 087/446] feat(avoidance_by_lc): make it possible to configurate flexibly (#469) feat(avodiance_by_lc): make it possible to configurate flexibly Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 8 ++ .../avoidance_by_lc.param.yaml | 82 ++++++++++++++++++- .../scene_module_manager.param.yaml | 3 +- .../rtc_auto_mode_manager.param.yaml | 4 + 4 files changed, 92 insertions(+), 5 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 15aa644390..fb20a0bfb3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -32,6 +32,7 @@ target_object: car: is_target: true # [-] + execute_num: 1 # [-] moving_speed_threshold: 1.0 # [m/s] moving_time_threshold: 1.0 # [s] max_expand_ratio: 0.0 # [-] @@ -41,6 +42,7 @@ safety_buffer_longitudinal: 0.0 # [m] truck: is_target: true + execute_num: 1 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -50,6 +52,7 @@ safety_buffer_longitudinal: 0.0 bus: is_target: true + execute_num: 1 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -59,6 +62,7 @@ safety_buffer_longitudinal: 0.0 trailer: is_target: true + execute_num: 1 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -68,6 +72,7 @@ safety_buffer_longitudinal: 0.0 unknown: is_target: true + execute_num: 1 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -77,6 +82,7 @@ safety_buffer_longitudinal: 0.0 bicycle: is_target: true + execute_num: 1 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -86,6 +92,7 @@ safety_buffer_longitudinal: 1.0 motorcycle: is_target: true + execute_num: 1 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 @@ -95,6 +102,7 @@ safety_buffer_longitudinal: 1.0 pedestrian: is_target: true + execute_num: 1 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml index a27841f28d..bd8545d9e6 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml @@ -1,6 +1,82 @@ /**: ros__parameters: avoidance_by_lane_change: - execute_object_num: 1 - execute_object_longitudinal_margin: 0.0 - execute_only_when_lane_change_finish_before_object: true + execute_object_longitudinal_margin: 80.0 + execute_only_when_lane_change_finish_before_object: false + + # avoidance is performed for the object type with true + target_object: + car: + is_target: true # [-] + execute_num: 2 # [-] + moving_speed_threshold: 1.0 # [m/s] + moving_time_threshold: 1.0 # [s] + max_expand_ratio: 0.0 # [-] + envelope_buffer_margin: 0.3 # [m] + avoid_margin_lateral: 0.0 # [m] + safety_buffer_lateral: 0.0 # [m] + truck: + is_target: true + execute_num: 2 + moving_speed_threshold: 1.0 # 3.6km/h + moving_time_threshold: 1.0 + max_expand_ratio: 0.0 + envelope_buffer_margin: 0.3 + avoid_margin_lateral: 0.0 + safety_buffer_lateral: 0.0 + bus: + is_target: true + execute_num: 2 + moving_speed_threshold: 1.0 # 3.6km/h + moving_time_threshold: 1.0 + max_expand_ratio: 0.0 + envelope_buffer_margin: 0.3 + avoid_margin_lateral: 0.0 + safety_buffer_lateral: 0.0 + trailer: + is_target: true + execute_num: 2 + moving_speed_threshold: 1.0 # 3.6km/h + moving_time_threshold: 1.0 + max_expand_ratio: 0.0 + envelope_buffer_margin: 0.3 + avoid_margin_lateral: 0.0 + safety_buffer_lateral: 0.0 + unknown: + is_target: true + execute_num: 1 + moving_speed_threshold: 0.28 # 1.0km/h + moving_time_threshold: 1.0 + max_expand_ratio: 0.0 + envelope_buffer_margin: 0.3 + avoid_margin_lateral: 0.0 + safety_buffer_lateral: 0.0 + bicycle: + is_target: false + execute_num: 2 + moving_speed_threshold: 0.28 # 1.0km/h + moving_time_threshold: 1.0 + max_expand_ratio: 0.0 + envelope_buffer_margin: 0.8 + avoid_margin_lateral: 0.0 + safety_buffer_lateral: 1.0 + motorcycle: + is_target: false + execute_num: 2 + moving_speed_threshold: 1.0 # 3.6km/h + moving_time_threshold: 1.0 + max_expand_ratio: 0.0 + envelope_buffer_margin: 0.8 + avoid_margin_lateral: 0.0 + safety_buffer_lateral: 1.0 + pedestrian: + is_target: false + execute_num: 2 + moving_speed_threshold: 0.28 # 1.0km/h + moving_time_threshold: 1.0 + max_expand_ratio: 0.0 + envelope_buffer_margin: 0.8 + avoid_margin_lateral: 0.0 + safety_buffer_lateral: 1.0 + lower_distance_for_polygon_expansion: 0.0 # [m] + upper_distance_for_polygon_expansion: 1.0 # [m] diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index d4da549dcd..65582656b9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -67,9 +67,8 @@ priority: 5 max_module_size: 1 - # NOTE: This module is unstable. Deprecated for now. avoidance_by_lc: - enable_module: false + enable_module: true enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml index 0aa3cbd49e..9d761b15ee 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml @@ -11,6 +11,8 @@ - "lane_change_right" - "avoidance_left" - "avoidance_right" + - "avoidance_by_lane_change_left" + - "avoidance_by_lane_change_right" - "goal_planner" - "start_planner" - "intersection_occlusion" @@ -26,6 +28,8 @@ - "lane_change_right" - "avoidance_left" - "avoidance_right" + - "avoidance_by_lane_change_left" + - "avoidance_by_lane_change_right" - "goal_planner" - "start_planner" - "intersection_occlusion" From f69d47625a816ce3afdc3f265c852a5ee9031e05 Mon Sep 17 00:00:00 2001 From: Ismet Atabay <56237550+ismetatabay@users.noreply.github.com> Date: Mon, 24 Jul 2023 12:29:06 +0300 Subject: [PATCH 088/446] refactor(autoware_launch): add lidar models params (#450) * init commit Signed-off-by: ismetatabay * add centerpoint params Signed-off-by: ismetatabay * remove dupplicated commits Signed-off-by: ismetatabay --------- Signed-off-by: ismetatabay --- .../lidar_model/centerpoint.param.yaml | 15 ++++++++ .../lidar_model/centerpoint_tiny.param.yaml | 15 ++++++++ .../detection_class_remapper.param.yaml | 38 +++++++++++++++++++ .../lidar_model/pointpainting.param.yaml | 10 +++++ .../tier4_perception_component.launch.xml | 1 + 5 files changed, 79 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/lidar_model/detection_class_remapper.param.yaml create mode 100755 autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint.param.yaml new file mode 100644 index 0000000000..0b29a87965 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint.param.yaml @@ -0,0 +1,15 @@ +/**: + ros__parameters: + class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] + point_feature_size: 4 + max_voxel_size: 40000 + point_cloud_range: [-76.8, -76.8, -4.0, 76.8, 76.8, 6.0] + voxel_size: [0.32, 0.32, 10.0] + downsample_factor: 1 + encoder_in_feature_size: 9 + # post-process params + circle_nms_dist_threshold: 0.5 + iou_nms_target_class_names: ["CAR"] + iou_nms_search_distance_2d: 10.0 + iou_nms_threshold: 0.1 + yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml new file mode 100644 index 0000000000..8252fde827 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml @@ -0,0 +1,15 @@ +/**: + ros__parameters: + class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] + point_feature_size: 4 + max_voxel_size: 40000 + point_cloud_range: [-76.8, -76.8, -4.0, 76.8, 76.8, 6.0] + voxel_size: [0.32, 0.32, 10.0] + downsample_factor: 2 + encoder_in_feature_size: 9 + # post-process params + circle_nms_dist_threshold: 0.5 + iou_nms_target_class_names: ["CAR"] + iou_nms_search_distance_2d: 10.0 + iou_nms_threshold: 0.1 + yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/detection_class_remapper.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/detection_class_remapper.param.yaml new file mode 100644 index 0000000000..ed378ffa44 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/detection_class_remapper.param.yaml @@ -0,0 +1,38 @@ +/**: + ros__parameters: + allow_remapping_by_area_matrix: + # NOTE(kl): We turn all vehicles into trailers if they go over 3x12 [m^2]. + # NOTE(kl): We turn cars into trucks if they have an area between 2.2 x 5.5 and 3.0 * 12.0 [m^2] + # row: original class. column: class to remap to + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN + [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + 0, 0, 1, 0, 1, 0, 0, 0, #CAR + 0, 0, 0, 0, 1, 0, 0, 0, #TRUCK + 0, 0, 0, 0, 1, 0, 0, 0, #BUS + 0, 0, 0, 0, 0, 0, 0, 0, #TRAILER + 0, 0, 0, 0, 0, 0, 0, 0, #MOTORBIKE + 0, 0, 0, 0, 0, 0, 0, 0, #BICYCLE + 0, 0, 0, 0, 0, 0, 0, 0] #PEDESTRIAN + + min_area_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [ 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #UNKNOWN + 0.000, 0.000, 12.100, 0.000, 36.000, 0.000, 0.000, 0.000, #CAR + 0.000, 0.000, 0.000, 0.000, 36.000, 0.000, 0.000, 0.000, #TRUCK + 0.000, 0.000, 0.000, 0.000, 36.000, 0.000, 0.000, 0.000, #BUS + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #TRAILER + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #MOTORBIKE + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #BICYCLE + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000] #PEDESTRIAN + + + max_area_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [ 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #UNKNOWN + 0.000, 0.000, 36.000, 0.000, inf, 0.000, 0.000, 0.000, #CAR + 0.000, 0.000, 0.000, 0.000, inf, 0.000, 0.000, 0.000, #TRUCK + 0.000, 0.000, 0.000, 0.000, inf, 0.000, 0.000, 0.000, #BUS + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #TRAILER + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #MOTORBIKE + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #BICYCLE + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000] #PEDESTRIAN diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml new file mode 100755 index 0000000000..700724a817 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml @@ -0,0 +1,10 @@ +/**: + ros__parameters: + class_names: ["CAR", "PEDESTRIAN", "BICYCLE"] + point_feature_size: 7 # x, y, z, time-lag and car, pedestrian, bicycle + max_voxel_size: 40000 + point_cloud_range: [-76.8, -76.8, -3.0, 76.8, 76.8, 5.0] + voxel_size: [0.32, 0.32, 8.0] + downsample_factor: 1 + encoder_in_feature_size: 12 + yaw_norm_thresholds: [0.3, 0.0, 0.3] diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index f08de01837..63b1b6c76a 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -55,6 +55,7 @@ name="object_recognition_detection_object_merger_distance_threshold_list_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml" /> + Date: Mon, 24 Jul 2023 19:39:00 +0900 Subject: [PATCH 089/446] add radar tracker parameter files and settings (#470) * add radar tracker parameter files and settings Signed-off-by: yoshiri * style(pre-commit): autofix --------- Signed-off-by: yoshiri Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../data_association_matrix.param.yaml | 66 +++++++++++++++++++ .../default_tracker.param.yaml | 9 +++ .../tier4_perception_component.launch.xml | 8 +++ 3 files changed, 83 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/data_association_matrix.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/data_association_matrix.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/data_association_matrix.param.yaml new file mode 100644 index 0000000000..104d790d18 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/data_association_matrix.param.yaml @@ -0,0 +1,66 @@ +/**: + ros__parameters: + can_assign_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN <-Measurement + [1, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN <-Tracker + 0, 1, 1, 1, 1, 0, 0, 0, #CAR + 0, 1, 1, 1, 1, 0, 0, 0, #TRUCK + 0, 1, 1, 1, 1, 0, 0, 0, #BUS + 0, 1, 1, 1, 1, 0, 0, 0, #TRAILER + 0, 0, 0, 0, 0, 1, 1, 1, #MOTORBIKE + 0, 0, 0, 0, 0, 1, 1, 1, #BICYCLE + 0, 0, 0, 0, 0, 1, 1, 1] #PEDESTRIAN + + max_dist_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [4.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, #UNKNOWN + 4.0, 4.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #CAR + 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #TRUCK + 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #BUS + 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #TRAILER + 3.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0, #MOTORBIKE + 3.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0, #BICYCLE + 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0] #PEDESTRIAN + max_area_matrix: + # NOTE: The size of truck is 12 m length x 3 m width. + # NOTE: The size of trailer is 20 m length x 3 m width. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [100.00, 100.00, 100.00, 100.00, 100.00, 100.00, 100.00, 100.00, #UNKNOWN + 12.10, 12.10, 36.00, 60.00, 60.00, 10000.00, 10000.00, 10000.00, #CAR + 36.00, 12.10, 36.00, 60.00, 60.00, 10000.00, 10000.00, 10000.00, #TRUCK + 60.00, 12.10, 36.00, 60.00, 60.00, 10000.00, 10000.00, 10000.00, #BUS + 60.00, 12.10, 36.00, 60.00, 60.00, 10000.00, 10000.00, 10000.00, #TRAILER + 2.50, 10000.00, 10000.00, 10000.00, 10000.00, 2.50, 2.50, 1.00, #MOTORBIKE + 2.50, 10000.00, 10000.00, 10000.00, 10000.00, 2.50, 2.50, 1.00, #BICYCLE + 2.00, 10000.00, 10000.00, 10000.00, 10000.00, 1.50, 1.50, 1.00] #PEDESTRIAN + min_area_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [ 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #UNKNOWN + 3.600, 3.600, 6.000, 10.000, 10.000, 0.000, 0.000, 0.000, #CAR + 6.000, 3.600, 6.000, 10.000, 10.000, 0.000, 0.000, 0.000, #TRUCK + 10.000, 3.600, 6.000, 10.000, 10.000, 0.000, 0.000, 0.000, #BUS + 10.000, 3.600, 6.000, 10.000, 10.000, 0.000, 0.000, 0.000, #TRAILER + 0.001, 0.000, 0.000, 0.000, 0.000, 0.100, 0.100, 0.100, #MOTORBIKE + 0.001, 0.000, 0.000, 0.000, 0.000, 0.100, 0.100, 0.100, #BICYCLE + 0.001, 0.000, 0.000, 0.000, 0.000, 0.100, 0.100, 0.100] #PEDESTRIAN + max_rad_matrix: # If value is greater than pi, it will be ignored. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER MOTORBIKE, BICYCLE, PEDESTRIAN + [3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #UNKNOWN + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #CAR + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRUCK + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #BUS + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRAILER + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #MOTORBIKE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #BICYCLE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150] #PEDESTRIAN + + min_iou_matrix: # If value is negative, it will be ignored. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [0.0001, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #UNKNOWN + 0.1, -0.1, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, #CAR + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #TRUCK + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #BUS + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #TRAILER + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #MOTORBIKE + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #BICYCLE + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.0001] #PEDESTRIAN diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml new file mode 100644 index 0000000000..757125202d --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml @@ -0,0 +1,9 @@ +/**: + ros__parameters: + car_tracker: "linear_motion_tracker" + truck_tracker: "linear_motion_tracker" + bus_tracker: "linear_motion_tracker" + trailer_tracker: "linear_motion_tracker" + pedestrian_tracker: "linear_motion_tracker" + bicycle_tracker: "linear_motion_tracker" + motorcycle_tracker: "linear_motion_tracker" diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 63b1b6c76a..1707815707 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -60,6 +60,14 @@ name="object_recognition_tracking_multi_object_tracker_data_association_matrix_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/tracking/multi_object_tracker/data_association_matrix.param.yaml" /> + + Date: Mon, 24 Jul 2023 19:40:45 +0900 Subject: [PATCH 090/446] fix(autoware_launch): rename pull over to goal planner (#472) Signed-off-by: tomoya.kimura --- autoware_launch/rviz/autoware.rviz | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 97f73bc672..2e17e514ba 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -1449,7 +1449,7 @@ Visualization Manager: Value: true - Class: rviz_default_plugins/MarkerArray Enabled: true - Name: VirtualWall (PullOver) + Name: VirtualWall (GoalPlanner) Namespaces: {} Topic: @@ -1457,7 +1457,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/virtual_wall/pull_over + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/virtual_wall/goal_planner Value: true - Class: rviz_default_plugins/MarkerArray Enabled: true @@ -2029,7 +2029,7 @@ Visualization Manager: Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false - Name: Info (PullOver) + Name: Info (GoalPlanner) Namespaces: {} Topic: @@ -2037,7 +2037,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Reliable - Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/info/pull_over + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/info/goal_planner Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false From 5b820f72c07d2d847cf7ba7eff831e3322efe9c6 Mon Sep 17 00:00:00 2001 From: Yusuke Muramatsu Date: Mon, 24 Jul 2023 22:28:04 +0900 Subject: [PATCH 091/446] feat(autoware_launch): update pointpainting param (#473) Signed-off-by: yukke42 --- .../lidar_model/pointpainting.param.yaml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml index 700724a817..56346b5a3e 100755 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml @@ -1,10 +1,17 @@ /**: ros__parameters: - class_names: ["CAR", "PEDESTRIAN", "BICYCLE"] - point_feature_size: 7 # x, y, z, time-lag and car, pedestrian, bicycle + class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] + point_feature_size: 9 # x, y, z, time-lag and car, pedestrian, bicycle max_voxel_size: 40000 - point_cloud_range: [-76.8, -76.8, -3.0, 76.8, 76.8, 5.0] - voxel_size: [0.32, 0.32, 8.0] + point_cloud_range: [-102.4, -102.4, -4.0, 102.4, 102.4, 6.0] + voxel_size: [0.32, 0.32, 10.0] downsample_factor: 1 - encoder_in_feature_size: 12 - yaw_norm_thresholds: [0.3, 0.0, 0.3] + encoder_in_feature_size: 14 + yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] + # post-process params + circle_nms_dist_threshold: 0.5 + iou_nms_target_class_names: ["CAR"] + iou_nms_search_distance_2d: 10.0 + iou_nms_threshold: 0.1 + # omp params + omp_num_threads: 1 From 66cb0fafb20732d7836e024c7702f3fcfb340736 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Tue, 25 Jul 2023 00:16:17 +0900 Subject: [PATCH 092/446] fix(compare_map_segmentation): add param for skip lower neighbor points comparision option (#447) * fix(compare_map_segmentation): add param for check lower neighbor points option Signed-off-by: badai-nguyen * fix: update param for reduce z distance threshold Signed-off-by: badai-nguyen * fix: change param type Signed-off-by: badai-nguyen --------- Signed-off-by: badai-nguyen --- .../pointcloud_filter/pointcloud_map_filter.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml b/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml index deffe001e0..0423217582 100644 --- a/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml @@ -9,6 +9,9 @@ # distance threshold for compare compare distance_threshold: 0.5 + # ratio to reduce voxel_leaf_size and neighbor points distance threshold in z axis + downsize_ratio_z_axis: 0.6 + # publish voxelized map pointcloud for debug publish_debug_pcd: False From 28c86e6c16a88cfa9ee9587b59ac463d75e867aa Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 25 Jul 2023 09:12:13 +0900 Subject: [PATCH 093/446] perf(path_sampler): tune lateral_deviation_weight for more stable planning (#455) Set lateral_deviation_weight 0.1 -> 1.0 Signed-off-by: Maxime CLEMENT --- .../motion_planning/path_sampler/path_sampler.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_sampler/path_sampler.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_sampler/path_sampler.param.yaml index b50602b8e6..d22ce0e6b4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_sampler/path_sampler.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_sampler/path_sampler.param.yaml @@ -16,7 +16,7 @@ max_curvature: 0.1 # [m⁻¹] maximum curvature of a sampled path min_curvature: -0.1 # [m⁻¹] minimum curvature of a sampled path soft: - lateral_deviation_weight: 0.1 # cost weight for lateral deviation between the end of a sampled path and the reference path + lateral_deviation_weight: 1.0 # cost weight for lateral deviation between the end of a sampled path and the reference path length_weight: 1.0 # cost weight for the length of a sampled path curvature_weight: 1.0 # cost weight for the curvature of a sampled path sampling: From 1e6aa167faab6e51a794814bcf102d59fb5109ed Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 25 Jul 2023 10:31:59 +0900 Subject: [PATCH 094/446] feat(autoware_launch): add dynamic avoidance parameters (#474) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance.param.yaml | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 85f60e21cf..845f9c38e2 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -16,21 +16,29 @@ successive_num_to_entry_dynamic_avoidance_condition: 5 - min_obj_lat_offset_to_ego_path: 0.3 # [m] + min_obj_lat_offset_to_ego_path: 0.0 # [m] + max_obj_lat_offset_to_ego_path: 1.0 # [m] + + crossing_object: + min_object_vel: 1.0 + max_object_angle: 1.05 + + front_object: + max_object_angle: 0.785 drivable_area_generation: - lat_offset_from_obstacle: 0.8 # [m] + lat_offset_from_obstacle: 1.0 # [m] max_lat_offset_to_avoid: 0.5 # [m] # for same directional object overtaking_object: - max_time_to_collision: 3.0 # [s] - start_duration_to_avoid: 4.0 # [s] - end_duration_to_avoid: 8.0 # [s] + max_time_to_collision: 10.0 # [s] + start_duration_to_avoid: 2.0 # [s] + end_duration_to_avoid: 4.0 # [s] duration_to_hold_avoidance: 3.0 # [s] # for opposite directional object oncoming_object: - max_time_to_collision: 3.0 # [s] + max_time_to_collision: 15.0 # [s] start_duration_to_avoid: 12.0 # [s] end_duration_to_avoid: 0.0 # [s] From d1f298ee0f954bc8531eff1097aed601f4ace0aa Mon Sep 17 00:00:00 2001 From: Yutaka Shimizu <43805014+purewater0901@users.noreply.github.com> Date: Thu, 27 Jul 2023 05:38:24 +0900 Subject: [PATCH 095/446] refactor(planning_launch): clean stop line parameters (#475) --- .../behavior_velocity_planner/stop_line.param.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/stop_line.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/stop_line.param.yaml index 69e9241ba1..5fa183d73a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/stop_line.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/stop_line.param.yaml @@ -2,10 +2,9 @@ ros__parameters: stop_line: stop_margin: 0.0 - stop_check_dist: 2.0 stop_duration_sec: 1.0 use_initialization_stop_line_state: true hold_stop_margin_distance: 2.0 debug: - show_stopline_collision_check: false + show_stop_line_collision_check: false From 579537bcf59c0f51b917d236e154a9069c9407d8 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 27 Jul 2023 13:45:34 +0900 Subject: [PATCH 096/446] refactor(avoidance): use common safety checker (#477) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index fb20a0bfb3..edee0756e9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -13,7 +13,6 @@ enable_bound_clipping: false enable_update_path_when_object_is_gone: false enable_force_avoidance_for_stopped_vehicle: false - enable_safety_check: true enable_yield_maneuver: true enable_yield_maneuver_during_shifting: false disable_path_update: false @@ -133,10 +132,18 @@ # For safety check safety_check: + # safety check configuration + enable: true # [-] + check_current_lane: false # [-] + check_shift_side_lane: true # [-] + check_other_side_lane: false # [-] + check_unavoidable_object: false # [-] + check_other_object: true # [-] + # collision check parameters + check_all_predicted_path: false # [-] + time_resolution: 0.5 # [s] + time_horizon: 10.0 # [s] safety_check_backward_distance: 100.0 # [m] - safety_check_time_horizon: 10.0 # [s] - safety_check_idling_time: 1.5 # [s] - safety_check_accel_for_rss: 2.5 # [m/ss] safety_check_hysteresis_factor: 2.0 # [-] safety_check_ego_offset: 1.0 # [m] From 4ee5cc8bfa5817cf8ec1f1ae824a6cd0c24258fa Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Thu, 27 Jul 2023 21:16:06 +0900 Subject: [PATCH 097/446] feat(path_smoother): add parameters for the replan checker (#482) Signed-off-by: Maxime CLEMENT --- .../path_smoother/elastic_band_smoother.param.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml index 730bc3053e..8e77420dd4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml @@ -35,3 +35,13 @@ # nearest search ego_nearest_dist_threshold: 3.0 # [m] ego_nearest_yaw_threshold: 1.046 # [rad] = 60 [deg] + # replanning & trimming trajectory param outside algorithm + replan: + enable: true # if true, only perform smoothing when the input changes significantly + max_path_shape_around_ego_lat_dist: 2.0 # threshold of path shape change around ego [m] + max_path_shape_forward_lon_dist: 100.0 # forward point to check lateral distance difference [m] + max_path_shape_forward_lat_dist: 0.1 # threshold of path shape change around forward point [m] + max_ego_moving_dist: 5.0 # threshold of ego's moving distance for replan [m] + # make max_goal_moving_dist long to keep start point fixed for pull over + max_goal_moving_dist: 15.0 # threshold of goal's moving distance for replan [m] + max_delta_time_sec: 1.0 # threshold of delta time for replan [second] From 4a618ae2305a50c832083d082f9794d640f749b7 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 27 Jul 2023 23:32:37 +0900 Subject: [PATCH 098/446] feat(autoware_launch): add enable_debug_info for dynamic_avoidance (#478) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 845f9c38e2..4b92567a35 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -1,6 +1,9 @@ /**: ros__parameters: dynamic_avoidance: + common: + enable_debug_info: true + # avoidance is performed for the object type with true target_object: car: true From bec9d95e3278cfe1c5d2e3256e1c93951c595a4d Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 28 Jul 2023 09:11:12 +0900 Subject: [PATCH 099/446] feat(autoware_launch): add cut_in_object.min_lon_offset_ego_to_object in dynamic avoidance (#481) * feat(autoware_launch): add cut_in_object.min_lon_offset_ego_to_object in dynamic avoidance Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 4b92567a35..336879185f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -22,6 +22,10 @@ min_obj_lat_offset_to_ego_path: 0.0 # [m] max_obj_lat_offset_to_ego_path: 1.0 # [m] + cut_in_object: + min_time_to_start_cut_in: 1.0 # [s] + min_lon_offset_ego_to_object: 0.0 # [m] + crossing_object: min_object_vel: 1.0 max_object_angle: 1.05 From 0d511da1e0d1fc0bd7a83d6722e6e4a9958555d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Yavuz=20K=C3=B6seo=C4=9Flu?= Date: Fri, 28 Jul 2023 12:08:49 +0300 Subject: [PATCH 100/446] refactor(tier4_localization_component): input_pointcloud param added (#480) * refactor(tier4_localization_component): input_pointcloud param added * style(pre-commit): autofix --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../launch/components/tier4_localization_component.launch.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/launch/components/tier4_localization_component.launch.xml b/autoware_launch/launch/components/tier4_localization_component.launch.xml index e167dd91ec..5fe0d856d2 100644 --- a/autoware_launch/launch/components/tier4_localization_component.launch.xml +++ b/autoware_launch/launch/components/tier4_localization_component.launch.xml @@ -3,6 +3,7 @@ + @@ -11,6 +12,7 @@ + From 91d4afb6e4701601bbc544eb8b8ea9fbb823e53d Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Sat, 29 Jul 2023 17:03:56 +0900 Subject: [PATCH 101/446] feat(intersection): extract occlusion contour as polygon (#485) Signed-off-by: Mamoru Sobue --- .../intersection.param.yaml | 2 +- autoware_launch/rviz/autoware.rviz | 26 ------------------- 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index f20db856a9..e6bfc56a62 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -46,7 +46,7 @@ min_vehicle_brake_for_rss: -2.5 # [m/s^2] max_vehicle_velocity_for_rss: 16.66 # [m/s] == 60kmph denoise_kernel: 1.0 # [m] - pub_debug_grid: false + possible_object_bbox: [1.0, 2.0] # [m x m] enable_rtc: intersection: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 2e17e514ba..0dad17aaf9 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -1692,32 +1692,6 @@ Visualization Manager: Reliability Policy: Reliable Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection Value: false - - Alpha: 0.5 - Autocompute Intensity Bounds: true - Class: grid_map_rviz_plugin/GridMap - Color: 200; 200; 200 - Color Layer: color - Color Transformer: IntensityLayer - Enabled: false - Height Layer: elevation - Height Transformer: Layer - History Length: 1 - Invert Rainbow: false - Max Color: 255; 255; 255 - Max Intensity: 10 - Min Color: 0; 0; 0 - Min Intensity: 0 - Name: IntersectionOcclusion - Show Grid Lines: false - Topic: - Depth: 5 - Durability Policy: Volatile - Filter size: 10 - History Policy: Keep Last - Reliability Policy: Reliable - Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection/occlusion_grid - Use Rainbow: true - Value: false - Class: rviz_default_plugins/MarkerArray Enabled: false Name: Blind Spot From cb36d57e9a615b4fffe980e87a75fb75aa7e4144 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 1 Aug 2023 07:59:23 +0900 Subject: [PATCH 102/446] feat(avoidance): add parameter to configurate avoidance return point (#493) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index edee0756e9..cff48985a2 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -160,6 +160,7 @@ # avoidance distance parameters longitudinal: prepare_time: 2.0 # [s] + remain_buffer_distance: 30.0 # [m] min_prepare_distance: 1.0 # [m] min_slow_down_speed: 1.38 # [m/s] buf_slow_down_speed: 0.56 # [m/s] From bd3f372a811d263eb61794fd0c01ccc15c94f9d9 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 1 Aug 2023 10:13:04 +0900 Subject: [PATCH 103/446] feat(autoware_launch): add acc/jerk parameters for stuck vehicle detection in crosswalk (#487) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 65ef41eff9..5fff846785 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -30,6 +30,9 @@ stuck_vehicle_velocity: 1.0 # [m/s] maximum velocity threshold whether the vehicle is stuck max_stuck_vehicle_lateral_offset: 2.0 # [m] maximum lateral offset for stuck vehicle position should be looked stuck_vehicle_attention_range: 10.0 # [m] the detection area is defined as X meters behind the crosswalk + min_acc: -1.0 # min acceleration [m/ss] + min_jerk: -1.0 # min jerk [m/sss] + max_jerk: 1.0 # max jerk [m/sss] # param for pass judge logic pass_judge: From 85db354c3106348a49efc53392db7b3efee63120 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 1 Aug 2023 10:37:55 +0900 Subject: [PATCH 104/446] feat(intersection_occlusion): ignore occlusion behind parked vehicles on the attention lane (#492) --- .../behavior_velocity_planner/intersection.param.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index e6bfc56a62..927a6bfaaf 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -2,7 +2,7 @@ ros__parameters: intersection: common: - attention_area_margin: 0.5 # [m] + attention_area_margin: 0.75 # [m] attention_area_length: 200.0 # [m] attention_area_angle_threshold: 0.785 # [rad] stop_line_margin: 3.0 @@ -46,7 +46,8 @@ min_vehicle_brake_for_rss: -2.5 # [m/s^2] max_vehicle_velocity_for_rss: 16.66 # [m/s] == 60kmph denoise_kernel: 1.0 # [m] - possible_object_bbox: [1.0, 2.0] # [m x m] + possible_object_bbox: [1.5, 2.5] # [m x m] + ignore_parked_vehicle_speed_threshold: 0.8333 # == 3.0km/h enable_rtc: intersection: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval From 9a384c8b3e942967ab9a068b4d4634a88f4e17b6 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 1 Aug 2023 18:44:21 +0900 Subject: [PATCH 105/446] feat(autoware_launch): add option of disable_yield_for_new_stopped_object in crosswalk (#491) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 5fff846785..097b2c6c94 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -41,7 +41,8 @@ stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding - disable_stop_for_yield_cancel: false + disable_stop_for_yield_cancel: false # for the crosswalk where there is a traffic signal + disable_yield_for_new_stopped_object: false # for the crosswalk where there is a traffic signal timeout_no_intention_to_walk: 3.0 # [s] if the pedestrian does not move for X seconds after stopping before the crosswalk, the module judge that ego is able to pass first. timeout_ego_stop_for_yield: 3.0 # [s] the amount of time which ego should be stopping to query whether it yields or not From b9f7c0e7082dc3dd1ed11904684cdbabd107b208 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 1 Aug 2023 22:12:56 +0900 Subject: [PATCH 106/446] feat(out_of_lane): add param for the min confidence of a predicted path (#440) Signed-off-by: Maxime CLEMENT Co-authored-by: Takayuki Murooka --- .../behavior_velocity_planner/out_of_lane.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml index c501599b4a..dd4c1c6102 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml @@ -16,6 +16,7 @@ minimum_velocity: 0.5 # [m/s] objects lower than this velocity will be ignored use_predicted_paths: true # if true, use the predicted paths to estimate future positions. # if false, assume the object moves at constant velocity along *all* lanelets it currently is located in. + predicted_path_min_confidence : 0.1 # when using predicted paths, ignore the ones whose confidence is lower than this value. overlap: minimum_distance: 0.0 # [m] minimum distance inside a lanelet for an overlap to be considered From 3cf58d2e75f01fc5a5dd18b7391c426922909c13 Mon Sep 17 00:00:00 2001 From: Tomohito ANDO Date: Tue, 1 Aug 2023 22:59:34 +0900 Subject: [PATCH 107/446] refactor(traffic_light_arbiter): add traffic_light_arbiter param file (#489) Signed-off-by: Tomohito Ando Co-authored-by: Kenzo Lobos Tsunekawa --- .../traffic_light_arbiter/traffic_light_arbiter.param.yaml | 5 +++++ .../launch/components/tier4_perception_component.launch.xml | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 autoware_launch/config/perception/traffic_light_arbiter/traffic_light_arbiter.param.yaml diff --git a/autoware_launch/config/perception/traffic_light_arbiter/traffic_light_arbiter.param.yaml b/autoware_launch/config/perception/traffic_light_arbiter/traffic_light_arbiter.param.yaml new file mode 100644 index 0000000000..5dc2b62eaa --- /dev/null +++ b/autoware_launch/config/perception/traffic_light_arbiter/traffic_light_arbiter.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + external_time_tolerance: 5.0 + perception_time_tolerance: 1.0 + external_priority: false diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 1707815707..0dbbee6065 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -82,5 +82,8 @@ + + + From f0f5f02d90c74ca393746115cf142cafc7af9603 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 2 Aug 2023 09:36:44 +0900 Subject: [PATCH 108/446] feat(autoware_launch): add chattering suppression margin in crosswalk (#494) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 097b2c6c94..11184eedf4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -37,7 +37,9 @@ # param for pass judge logic pass_judge: ego_pass_first_margin: 6.0 # [s] time margin for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) + ego_pass_first_additional_margin: 0.5 # [s] additional time margin for ego pass first situation to suppress chattering ego_pass_later_margin: 10.0 # [s] time margin for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) + ego_pass_later_additional_margin: 0.5 # [s] additional time margin for object pass first situation to suppress chattering stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding From 01cbb1a202ad32d780370e356d0f731622e94bec Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 2 Aug 2023 11:36:23 +0900 Subject: [PATCH 109/446] feat(autoware_launch): add pass juge line parameter in crosswalk (#495) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 11184eedf4..b0e198be68 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -40,6 +40,7 @@ ego_pass_first_additional_margin: 0.5 # [s] additional time margin for ego pass first situation to suppress chattering ego_pass_later_margin: 10.0 # [s] time margin for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) ego_pass_later_additional_margin: 0.5 # [s] additional time margin for object pass first situation to suppress chattering + max_offset_to_crosswalk_for_yield: 0.0 # [m] maximum offset from ego's front to crosswalk for yield. Positive value means in front of the crosswalk. stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding From f0b212e8253bc243430e277a59f9e2533feca6d6 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 2 Aug 2023 14:19:53 +0900 Subject: [PATCH 110/446] feat(autoware_launch): add gradable pass margin in crosswalk (#496) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index b0e198be68..4b0a1ffc43 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -36,9 +36,11 @@ # param for pass judge logic pass_judge: - ego_pass_first_margin: 6.0 # [s] time margin for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) + ego_pass_first_margin_x: [0.0] # [[s]] time to collision margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) + ego_pass_first_margin_y: [6.0] # [[s]] time to vehicle margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) ego_pass_first_additional_margin: 0.5 # [s] additional time margin for ego pass first situation to suppress chattering - ego_pass_later_margin: 10.0 # [s] time margin for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) + ego_pass_later_margin_x: [0.0] # [[s]] time to vehicle margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) + ego_pass_later_margin_y: [10.0] # [[s]] time to collision margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) ego_pass_later_additional_margin: 0.5 # [s] additional time margin for object pass first situation to suppress chattering max_offset_to_crosswalk_for_yield: 0.0 # [m] maximum offset from ego's front to crosswalk for yield. Positive value means in front of the crosswalk. stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) From 32d537b692b24549fa0d45a42ff6aa6e74c7a447 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Thu, 3 Aug 2023 08:41:44 +0900 Subject: [PATCH 111/446] fix(object_merger): separate GIoU (#497) Signed-off-by: badai-nguyen --- .../detection/object_merger/overlapped_judge.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml index 94882fae4f..15ca8dd713 100644 --- a/autoware_launch/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml @@ -3,3 +3,6 @@ distance_threshold_list: #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN [9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0] #UNKNOWN + + generalized_iou_threshold: + [-0.1, -0.1,-0.1, -0.6, -0.6, -0.1, -0.1, -0.1] From 301cf492b47a425900640410c40c6bff304c9a15 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Fri, 4 Aug 2023 14:34:02 +0900 Subject: [PATCH 112/446] feat(start_planner): use stop objects in pull out lanes for collision check (#498) Signed-off-by: kosuke55 --- .../behavior_path_planner/start_planner/start_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 5ae5c99ff8..60f2927440 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -6,6 +6,7 @@ th_stopped_time: 1.0 collision_check_margin: 1.0 collision_check_distance_from_end: 1.0 + th_moving_object_velocity: 1.0 # shift pull out enable_shift_pull_out: true check_shift_path_lane_departure: false From 30033251e329ebb487d4517a4d47e433a144f958 Mon Sep 17 00:00:00 2001 From: Yuxuan Liu <619684051@qq.com> Date: Fri, 4 Aug 2023 17:36:46 +0800 Subject: [PATCH 113/446] feat(rviz): add acceleration meter for debugging which is disabled by default (#499) * feat: add acceleration meter for debugging, disabled by default; https://github.com/autowarefoundation/autoware.universe/pull/4506 Signed-off-by: Owen-Liuyuxuan * not directly setting pixel numbers in rviz for display on screen with various resolutions Signed-off-by: Owen-Liuyuxuan --------- Signed-off-by: Owen-Liuyuxuan Co-authored-by: Owen-Liuyuxuan --- autoware_launch/rviz/autoware.rviz | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 0dad17aaf9..915a296d79 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -86,6 +86,15 @@ Visualization Manager: Value: /vehicle/status/velocity_status Value: true Value height offset: 0 + - Class: rviz_plugins/AccelerationMeter + Enabled: false + Name: AccelerationMeter + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /localization/acceleration - Alpha: 0.999 Class: rviz_plugins/VelocityHistory Color Border Vel Max: 3 From 230a91333889be113fbcb110f2687a02ff664779 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sat, 5 Aug 2023 10:51:35 +0900 Subject: [PATCH 114/446] feat(autoware_launch): add successive_num_to_exit_dynamic_avoidance_condition in dynamic_avoidance (#484) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 336879185f..e87e6ab546 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -18,6 +18,7 @@ min_obstacle_vel: 0.0 # [m/s] successive_num_to_entry_dynamic_avoidance_condition: 5 + successive_num_to_exit_dynamic_avoidance_condition: 1 min_obj_lat_offset_to_ego_path: 0.0 # [m] max_obj_lat_offset_to_ego_path: 1.0 # [m] From ec2fd767845e3d90be2a5457a692c9db5adc2d36 Mon Sep 17 00:00:00 2001 From: Yutaka Shimizu <43805014+purewater0901@users.noreply.github.com> Date: Mon, 7 Aug 2023 02:29:00 +0900 Subject: [PATCH 115/446] feat(lane_change): remove an unused parameter (#501) --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 1f075993aa..7408456d3e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -8,7 +8,6 @@ lane_change_finish_judge_buffer: 2.0 # [m] lane_changing_lateral_jerk: 0.5 # [m/s3] - lateral_acc_switching_velocity: 4.0 #[m/s] minimum_lane_changing_velocity: 2.78 # [m/s] prediction_time_resolution: 0.5 # [s] From a3e28d1058a8b15612b049d8a9c520775f655392 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 7 Aug 2023 10:35:54 +0900 Subject: [PATCH 116/446] feat(autoware_launch): add cut out parameters for dynamic avoidance (#500) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index e87e6ab546..a0571be4aa 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -27,6 +27,10 @@ min_time_to_start_cut_in: 1.0 # [s] min_lon_offset_ego_to_object: 0.0 # [m] + cut_out_object: + max_time_from_outside_ego_path: 0.5 # [s] + min_object_lat_vel: 0.3 # [m/s] + crossing_object: min_object_vel: 1.0 max_object_angle: 1.05 From 75eb84898036e81124f09471fee37690ee9d0362 Mon Sep 17 00:00:00 2001 From: Ismet Atabay <56237550+ismetatabay@users.noreply.github.com> Date: Mon, 7 Aug 2023 12:57:46 +0300 Subject: [PATCH 117/446] refactor(autoware_launch): add an option for filtering and validation (#479) * init commit Signed-off-by: ismetatabay * style(pre-commit): autofix --------- Signed-off-by: ismetatabay Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../components/tier4_perception_component.launch.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 0dbbee6065..65b8ac20bd 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -2,6 +2,12 @@ + + @@ -11,6 +17,8 @@ + + From e0c4af68cf39dd6bad61cee0052382d2a1a92e03 Mon Sep 17 00:00:00 2001 From: Ahmed Ebrahim <36835765+ahmeddesokyebrahim@users.noreply.github.com> Date: Mon, 7 Aug 2023 13:03:56 +0300 Subject: [PATCH 118/446] feat(routing_no_drivable_lane_when_module_enabled): add solution for routing no_drivable_lane only when module enabled (#457) * feat(routing_no_drivable_lane_when_module_enabled): add proposed solution Signed-off-by: AhmedEbrahim * style(pre-commit): autofix * feat(routing_no_drivable_lane_when_module_enabled): improving comments regarding new parameter Signed-off-by: AhmedEbrahim --------- Signed-off-by: AhmedEbrahim Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../mission_planning/mission_planner/mission_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/mission_planning/mission_planner/mission_planner.param.yaml b/autoware_launch/config/planning/mission_planning/mission_planner/mission_planner.param.yaml index d596eb9816..98c28344ea 100644 --- a/autoware_launch/config/planning/mission_planning/mission_planner/mission_planner.param.yaml +++ b/autoware_launch/config/planning/mission_planning/mission_planner/mission_planner.param.yaml @@ -8,3 +8,4 @@ enable_correct_goal_pose: false reroute_time_threshold: 10.0 minimum_reroute_length: 30.0 + consider_no_drivable_lanes: false # This flag is for considering no_drivable_lanes in planning or not. From e8069c6d6dc2b2ddf55451076d36df776fc20132 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 8 Aug 2023 10:50:02 +0900 Subject: [PATCH 119/446] feat(autoware_launch): update dynamic_avoidance parameters (#503) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index a0571be4aa..896c44c9ce 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -28,23 +28,25 @@ min_lon_offset_ego_to_object: 0.0 # [m] cut_out_object: - max_time_from_outside_ego_path: 0.5 # [s] + max_time_from_outside_ego_path: 2.0 # [s] min_object_lat_vel: 0.3 # [m/s] crossing_object: - min_object_vel: 1.0 - max_object_angle: 1.05 + min_overtaking_object_vel: 1.0 + max_overtaking_object_angle: 1.05 + min_oncoming_object_vel: 0.0 + max_oncoming_object_angle: 0.523 front_object: max_object_angle: 0.785 drivable_area_generation: - lat_offset_from_obstacle: 1.0 # [m] + lat_offset_from_obstacle: 0.8 # [m] max_lat_offset_to_avoid: 0.5 # [m] # for same directional object overtaking_object: - max_time_to_collision: 10.0 # [s] + max_time_to_collision: 40.0 # [s] start_duration_to_avoid: 2.0 # [s] end_duration_to_avoid: 4.0 # [s] duration_to_hold_avoidance: 3.0 # [s] From 1bd48089a7830e2fb9744e668946ee9421937e0a Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 8 Aug 2023 22:07:57 +0900 Subject: [PATCH 120/446] feat(avoidance): enable avoidance cancel (#476) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index cff48985a2..e751de2bb4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -11,10 +11,10 @@ # avoidance module common setting enable_bound_clipping: false - enable_update_path_when_object_is_gone: false enable_force_avoidance_for_stopped_vehicle: false enable_yield_maneuver: true enable_yield_maneuver_during_shifting: false + enable_cancel_maneuver: true disable_path_update: false # drivable area setting From dfba24c2ad67e4cc8e3fa00ada0257da7d3a3913 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 9 Aug 2023 03:56:34 +0900 Subject: [PATCH 121/446] feat(autoware_launch): use hatched road markings in dynamic avoidance (#504) * feat(autoware_launch): add use_hatched_road_markings in dynamic_avoidance Signed-off-by: Takayuki Murooka * add parameters Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 896c44c9ce..377c0a8c21 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -3,6 +3,7 @@ dynamic_avoidance: common: enable_debug_info: true + use_hatched_road_markings: true # avoidance is performed for the object type with true target_object: @@ -43,6 +44,8 @@ drivable_area_generation: lat_offset_from_obstacle: 0.8 # [m] max_lat_offset_to_avoid: 0.5 # [m] + max_time_for_object_lat_shift: 0.0 # [s] + lpf_gain_for_lat_avoid_to_offset: 0.9 # [-] # for same directional object overtaking_object: @@ -53,6 +56,6 @@ # for opposite directional object oncoming_object: - max_time_to_collision: 15.0 # [s] + max_time_to_collision: 40.0 # [s] This value should be the same as overtaking_object's one to suppress chattering of this value for parked vehicles start_duration_to_avoid: 12.0 # [s] end_duration_to_avoid: 0.0 # [s] From c5b3a44267f59a2b42cafae3ede6a393173e8850 Mon Sep 17 00:00:00 2001 From: Yusuke Muramatsu Date: Wed, 9 Aug 2023 23:26:42 +0900 Subject: [PATCH 122/446] feat(tier4_perception_launch): update pointpainting param (#506) Signed-off-by: yukke42 --- .../detection/lidar_model/pointpainting.param.yaml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml index 56346b5a3e..e1be5426cb 100755 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml @@ -1,15 +1,16 @@ /**: ros__parameters: class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] - point_feature_size: 9 # x, y, z, time-lag and car, pedestrian, bicycle + paint_class_names: ["CAR", "BICYCLE", "PEDESTRIAN"] + point_feature_size: 7 # x, y, z, time-lag and car, pedestrian, bicycle max_voxel_size: 40000 - point_cloud_range: [-102.4, -102.4, -4.0, 102.4, 102.4, 6.0] - voxel_size: [0.32, 0.32, 10.0] + point_cloud_range: [-121.6, -76.8, -3.0, 121.6, 76.8, 5.0] + voxel_size: [0.32, 0.32, 8.0] downsample_factor: 1 - encoder_in_feature_size: 14 + encoder_in_feature_size: 12 yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] # post-process params - circle_nms_dist_threshold: 0.5 + circle_nms_dist_threshold: 0.3 iou_nms_target_class_names: ["CAR"] iou_nms_search_distance_2d: 10.0 iou_nms_threshold: 0.1 From 786e8af5f1b073d36603b60f8b010c2ed202d4d3 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:05:41 +0900 Subject: [PATCH 123/446] feat(map_projection_loader): add map_projection_loader (#483) feat(map_loader): add map_projection_loader Signed-off-by: kminoda --- autoware_launch/config/map/lanelet2_map_loader.param.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/autoware_launch/config/map/lanelet2_map_loader.param.yaml b/autoware_launch/config/map/lanelet2_map_loader.param.yaml index 9abbaf2901..24d2b0e8ed 100755 --- a/autoware_launch/config/map/lanelet2_map_loader.param.yaml +++ b/autoware_launch/config/map/lanelet2_map_loader.param.yaml @@ -1,7 +1,3 @@ /**: ros__parameters: - lanelet2_map_projector_type: MGRS # Options: MGRS, UTM, local - latitude: 40.81187906 # Latitude of map_origin, using in UTM - longitude: 29.35810110 # Longitude of map_origin, using in UTM - center_line_resolution: 5.0 # [m] From 1978d63d85a28f8d053b1ebfd4199804526a718d Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 10 Aug 2023 12:05:06 +0900 Subject: [PATCH 124/446] feat(avoidance): make it selectable avoidance policy (#505) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index e751de2bb4..f27429ae81 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -175,10 +175,23 @@ max_distance: 20.0 # [m] stop_buffer: 1.0 # [m] - constraints: - # vehicle slows down under longitudinal constraints - use_constraints_for_decel: true # [-] + policy: + # policy for vehicle slow down behavior. select "best_effort" or "reliable". + # "best_effort": slow down deceleration & jerk are limited by constraints. + # but there is a possibility that the vehicle can't stop in front of the vehicle. + # "reliable": insert stop or slow down point with ignoring decel/jerk constraints. + # make it possible to increase chance to avoid but uncomfortable deceleration maybe happen. + deceleration: "best_effort" # [-] + # policy for avoidance lateral margin. select "best_effort" or "reliable". + # "best_effort": output avoidance path with shorten lateral margin when there is no enough longitudinal + # margin to avoid. + # "reliable": module output avoidance path with safe (rtc cooperate) state only when the vehicle can avoid + # with expected lateral margin. + lateral_margin: "best_effort" # [-] + # if true, module doesn't wait deceleration and outputs avoidance path by best effort margin. + use_shorten_margin_immediately: true # [-] + constraints: # lateral constraints lateral: velocity: [1.0, 1.38, 11.1] # [m/s] From 975fe46a7421bb03df7f4c39d6033289ea3a6ef0 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sat, 12 Aug 2023 13:00:06 +0900 Subject: [PATCH 125/446] feat(autoware_launch): add polygon_generation_method in dynamic_avoidance (#508) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 377c0a8c21..fad859ac16 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -42,6 +42,8 @@ max_object_angle: 0.785 drivable_area_generation: + polygon_generation_method: "ego_path_base" # choose "ego_path_base" and "object_path_base" + lat_offset_from_obstacle: 0.8 # [m] max_lat_offset_to_avoid: 0.5 # [m] max_time_for_object_lat_shift: 0.0 # [s] From 05d1914b791c5a137e7ca12c9a54f60d704660c9 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Tue, 15 Aug 2023 10:51:48 +0900 Subject: [PATCH 126/446] feat(lane_departure_checker): add road_border departure checker (#511) add param Signed-off-by: kyoichi-sugahara --- .../lane_departure_checker/lane_departure_checker.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml b/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml index 59e25cbc5d..008832b1ca 100644 --- a/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml +++ b/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml @@ -7,6 +7,7 @@ include_left_lanes: false include_opposite_lanes: false include_conflicting_lanes: false + road_border_departure_checker: false # Core footprint_margin_scale: 1.0 From b84b8cb15035d52ac8fd1346d3948f57b4a31a28 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 15 Aug 2023 10:59:41 +0900 Subject: [PATCH 127/446] feat(system_error_monitor): check lateral deviation in sim (#516) Signed-off-by: satoshi-ota --- .../system_error_monitor.planning_simulation.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml index 9708456df4..2c5fe6e8f5 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml @@ -19,6 +19,7 @@ autonomous_driving: /autoware/control/autonomous_driving/node_alive_monitoring: default /autoware/control/autonomous_driving/performance_monitoring/lane_departure: default + /autoware/control/autonomous_driving/performance_monitoring/trajectory_deviation: default /autoware/control/control_command_gate/node_alive_monitoring: default /autoware/localization/node_alive_monitoring: default From 05f55d38ad852b166276be2a14b99c9bf60e31fa Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 15 Aug 2023 11:32:11 +0900 Subject: [PATCH 128/446] feat(autoware_launch): add enable_pub_extra_debug_marker in obstacle_avoidance_planner (#512) Signed-off-by: Takayuki Murooka --- .../obstacle_avoidance_planner.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml index f681398717..bb64006656 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml @@ -9,6 +9,7 @@ debug: # flag to publish enable_pub_debug_marker: true # publish debug marker + enable_pub_extra_debug_marker: false # publish extra debug marker # flag to show enable_debug_info: false @@ -77,7 +78,7 @@ # avoidance avoidance: - max_bound_fixing_time: 3.0 # [s] + max_bound_fixing_time: 1.0 # [s] max_longitudinal_margin_for_bound_violation: 1.0 # [m] max_avoidance_cost: 0.5 # [m] avoidance_cost_margin: 0.0 # [m] From 6ea8c13b24f7762c2944b55fe9988c5bcf56a360 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 15 Aug 2023 14:56:19 +0900 Subject: [PATCH 129/446] feat(avoidance): reduce road shoulder margin if lateral distance is not enough to avoid (#513) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index f27429ae81..7f2e92419b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -154,7 +154,8 @@ lateral_execution_threshold: 0.09 # [m] lateral_small_shift_threshold: 0.101 # [m] lateral_avoid_check_threshold: 0.1 # [m] - road_shoulder_safety_margin: 0.3 # [m] + soft_road_shoulder_margin: 0.3 # [m] + hard_road_shoulder_margin: 0.3 # [m] max_right_shift_length: 5.0 max_left_shift_length: 5.0 # avoidance distance parameters From 01c14b0886845e77fe43f7494e6b57f41d06158d Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Tue, 15 Aug 2023 19:31:20 +0900 Subject: [PATCH 130/446] feat(control_validator): measure predicted path deviation from trajectory (#509) * update launcher Signed-off-by: kyoichi-sugahara * add config and modify launch file Signed-off-by: kyoichi-sugahara * style(pre-commit): autofix * feat(lane_departure_checker): add road_border departure checker (#511) add param Signed-off-by: kyoichi-sugahara * feat(system_error_monitor): check lateral deviation in sim (#516) Signed-off-by: satoshi-ota * restore rviz config change Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara Signed-off-by: satoshi-ota Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> --- .../control_validator/control_validator.param.yaml | 14 ++++++++++++++ .../components/tier4_control_component.launch.xml | 1 + 2 files changed, 15 insertions(+) create mode 100644 autoware_launch/config/control/control_validator/control_validator.param.yaml diff --git a/autoware_launch/config/control/control_validator/control_validator.param.yaml b/autoware_launch/config/control/control_validator/control_validator.param.yaml new file mode 100644 index 0000000000..9ce677b2c2 --- /dev/null +++ b/autoware_launch/config/control/control_validator/control_validator.param.yaml @@ -0,0 +1,14 @@ +/**: + ros__parameters: + + publish_diag: true # if true, diagnostic msg is published + + # If the number of consecutive invalid predicted_path exceeds this threshold, the Diag will be set to ERROR. + # (For example, threshold = 1 means, even if the predicted_path is invalid, Diag will not be ERROR if + # the next predicted_path is valid.) + diag_error_count_threshold: 0 + + display_on_terminal: true # show error msg on terminal + + thresholds: + max_distance_deviation: 1.0 diff --git a/autoware_launch/launch/components/tier4_control_component.launch.xml b/autoware_launch/launch/components/tier4_control_component.launch.xml index 7b3169eacd..8b29135048 100644 --- a/autoware_launch/launch/components/tier4_control_component.launch.xml +++ b/autoware_launch/launch/components/tier4_control_component.launch.xml @@ -35,6 +35,7 @@ + From 857a19e9f3ef2211bdcd5cd35367c2b23be544c1 Mon Sep 17 00:00:00 2001 From: Tomohito ANDO Date: Tue, 15 Aug 2023 20:07:11 +0900 Subject: [PATCH 131/446] chore(tier4_simulator_component): add traffic light arbiter param path (#502) Signed-off-by: Tomohito Ando --- .../launch/components/tier4_simulator_component.launch.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/launch/components/tier4_simulator_component.launch.xml b/autoware_launch/launch/components/tier4_simulator_component.launch.xml index bd191f7a56..f243414555 100644 --- a/autoware_launch/launch/components/tier4_simulator_component.launch.xml +++ b/autoware_launch/launch/components/tier4_simulator_component.launch.xml @@ -43,5 +43,6 @@ + From 11fdbccbd2b85b35718c6f1b3db893f585b27c39 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Fri, 18 Aug 2023 11:49:56 +0900 Subject: [PATCH 132/446] fix(ekf_localizer): fix parameter first capital letter (#519) Signed-off-by: kminoda --- autoware_launch/config/localization/ekf_localizer.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/localization/ekf_localizer.param.yaml b/autoware_launch/config/localization/ekf_localizer.param.yaml index 322325d239..4d3f5b9643 100644 --- a/autoware_launch/config/localization/ekf_localizer.param.yaml +++ b/autoware_launch/config/localization/ekf_localizer.param.yaml @@ -1,7 +1,7 @@ /**: ros__parameters: show_debug_info: false - enable_yaw_bias_estimation: True + enable_yaw_bias_estimation: true predict_frequency: 50.0 tf_rate: 50.0 extend_state_step: 50 From 3cf0e5539869d3d80e4f3470dd92c468f6850f30 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Sun, 20 Aug 2023 10:30:40 +0900 Subject: [PATCH 133/446] feat(start_planner): support freespace pull out (#514) Signed-off-by: kosuke55 --- .../start_planner/start_planner.param.yaml | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 60f2927440..bea78664c6 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -36,3 +36,39 @@ th_turn_signal_on_lateral_offset: 1.0 intersection_search_length: 30.0 length_ratio_for_turn_signal_deactivation_near_intersection: 0.5 + # freespace planner + freespace_planner: + enable_freespace_planner: true + end_pose_search_start_distance: 20.0 + end_pose_search_end_distance: 30.0 + end_pose_search_interval: 2.0 + freespace_planner_algorithm: "astar" # options: astar, rrtstar + velocity: 1.0 + vehicle_shape_margin: 1.0 + time_limit: 3000.0 + minimum_turning_radius: 5.0 + maximum_turning_radius: 5.0 + turning_radius_size: 1 + # search configs + search_configs: + theta_size: 144 + angle_goal_range: 6.0 + curve_weight: 1.2 + reverse_weight: 1.0 + lateral_goal_range: 0.5 + longitudinal_goal_range: 2.0 + # costmap configs + costmap_configs: + obstacle_threshold: 30 + # -- A* search Configurations -- + astar: + only_behind_solutions: false + use_back: false + distance_heuristic_weight: 1.0 + # -- RRT* search Configurations -- + rrtstar: + enable_update: true + use_informed_sampling: true + max_planning_time: 150.0 + neighbor_radius: 8.0 + margin: 1.0 From 58b45215b98ac879574fe496a10b439081db9b9a Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 22 Aug 2023 13:43:11 +0900 Subject: [PATCH 134/446] feat(merge_from_private): use separate param (#521) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 927a6bfaaf..4e77e0591f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -54,4 +54,5 @@ intersection_to_occlusion: true merge_from_private: + stop_line_margin: 3.0 stop_duration_sec: 1.0 From 9bdd7c5619298fa48279814b94428277e6da5d91 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 22 Aug 2023 15:14:56 +0900 Subject: [PATCH 135/446] feat(rviz): respawn rviz (#518) Signed-off-by: kosuke55 --- autoware_launch/launch/autoware.launch.xml | 11 ++++++++++- autoware_launch/launch/planning_simulator.launch.xml | 9 ++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index f702747ec9..1a4fbb70f4 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -35,6 +35,7 @@ + @@ -108,6 +109,14 @@ - + diff --git a/autoware_launch/launch/planning_simulator.launch.xml b/autoware_launch/launch/planning_simulator.launch.xml index 941399db7e..0a97454854 100644 --- a/autoware_launch/launch/planning_simulator.launch.xml +++ b/autoware_launch/launch/planning_simulator.launch.xml @@ -12,9 +12,6 @@ - - - @@ -22,6 +19,11 @@ + + + + + @@ -53,6 +55,7 @@ + From 563d1e69e6a363b092f12d9089f848988e18994c Mon Sep 17 00:00:00 2001 From: Ismet Atabay <56237550+ismetatabay@users.noreply.github.com> Date: Tue, 22 Aug 2023 12:38:27 +0300 Subject: [PATCH 136/446] feat(autoware_launch): add use_raw_remote_control_command_input argument (#460) * update external_cmd_converter Signed-off-by: ismetatabay * update default value Signed-off-by: ismetatabay * update argument name Signed-off-by: ismetatabay * move enable_cmd_limit_filter argument to param file Signed-off-by: ismetatabay * update enable_cmd_filter default value Signed-off-by: ismetatabay --------- Signed-off-by: ismetatabay --- .../config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml index 522cc3a1ca..cc5aa910e5 100644 --- a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml +++ b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml @@ -3,7 +3,9 @@ update_rate: 10.0 system_emergency_heartbeat_timeout: 0.5 use_emergency_handling: false + check_external_emergency_heartbeat: false use_start_request: false + enable_cmd_limit_filter: true external_emergency_stop_heartbeat_timeout: 0.0 stop_hold_acceleration: -1.5 emergency_acceleration: -2.4 From ca94061d201424c5fedca063bca085a9d5d3422d Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 22 Aug 2023 19:49:42 +0900 Subject: [PATCH 137/446] feat(goal_planner): add extra front margin for collision check considering stopping distance (#520) * feat(goal_planner): add extra front margin for collision check considering stopping distance Signed-off-by: kosuke55 * object_recognition_collision_check_margin: 0.6 Signed-off-by: kosuke55 * rename args and params Signed-off-by: kosuke55 * add comments Signed-off-by: kosuke55 --------- Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index eaa103bff7..cd2bc6168d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -31,7 +31,8 @@ # object recognition object_recognition: use_object_recognition: true - object_recognition_collision_check_margin: 1.0 + object_recognition_collision_check_margin: 0.6 # this should be larger than `surround_check_distance` of surround_obstacle_checker + object_recognition_collision_check_max_extra_stopping_margin: 1.0 # pull over pull_over: From 3e0ea0acbe80bdc0b52666f932d6c8f86b4de0a4 Mon Sep 17 00:00:00 2001 From: Ismet Atabay <56237550+ismetatabay@users.noreply.github.com> Date: Tue, 22 Aug 2023 19:40:27 +0300 Subject: [PATCH 138/446] fix(autoware_launch): correct prediction_time_horizon default value (#523) correct prediction_time_horizon value Signed-off-by: ismetatabay --- .../prediction/map_based_prediction.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index eae747ce38..cb9a61b600 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -1,7 +1,7 @@ /**: ros__parameters: enable_delay_compensation: true - prediction_time_horizon: 7.8 #[s] + prediction_time_horizon: 10.0 #[s] prediction_sampling_delta_time: 0.5 #[s] min_velocity_for_map_based_prediction: 1.39 #[m/s] min_crosswalk_user_velocity: 1.39 #[m/s] From 438d6922e658812625de3f788235d946e610ec78 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Wed, 23 Aug 2023 12:16:42 +0900 Subject: [PATCH 139/446] feat(vehicle_cmd_gate): adaptive filter limit (#510) * feat(vehicle_cmd_gate): adaptive filter limit Signed-off-by: Takamasa Horibe * update Signed-off-by: Takamasa Horibe --------- Signed-off-by: Takamasa Horibe --- .../vehicle_cmd_gate.param.yaml | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml index cc5aa910e5..92844c61f6 100644 --- a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml +++ b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml @@ -14,15 +14,17 @@ stop_check_duration: 1.0 nominal: vel_lim: 25.0 - lon_acc_lim: 5.0 - lon_jerk_lim: 5.0 - lat_acc_lim: 5.0 - lat_jerk_lim: 5.0 - actual_steer_diff_lim: 1.0 + reference_speed_points: [20.0, 30.0] + lon_acc_lim: [5.0, 4.0] + lon_jerk_lim: [5.0, 4.0] + lat_acc_lim: [5.0, 4.0] + lat_jerk_lim: [7.0, 6.0] + actual_steer_diff_lim: [1.0, 0.8] on_transition: vel_lim: 50.0 - lon_acc_lim: 1.0 - lon_jerk_lim: 0.5 - lat_acc_lim: 2.0 - lat_jerk_lim: 7.0 - actual_steer_diff_lim: 1.0 + reference_speed_points: [20.0, 30.0] + lon_acc_lim: [1.0, 0.9] + lon_jerk_lim: [0.5, 0.4] + lat_acc_lim: [2.0, 1.8] + lat_jerk_lim: [7.0, 6.0] + actual_steer_diff_lim: [1.0, 0.8] From b4a03f016b6e677abb937428fd93528f1dd3a02b Mon Sep 17 00:00:00 2001 From: keisuke <31088744+keiota@users.noreply.github.com> Date: Wed, 23 Aug 2023 13:49:55 +0900 Subject: [PATCH 140/446] fix(freespace_planner): fixed by adding parameters of RRTstar algorithm (#517) * fix(freespace_planner): add parameters of RRTstar algorithm * style(pre-commit): autofix --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kyoichi Sugahara --- .../freespace_planner/freespace_planner.param.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/parking/freespace_planner/freespace_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/parking/freespace_planner/freespace_planner.param.yaml index d6152c4f56..ffd99df533 100644 --- a/autoware_launch/config/planning/scenario_planning/parking/freespace_planner/freespace_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/parking/freespace_planner/freespace_planner.param.yaml @@ -37,3 +37,11 @@ only_behind_solutions: false use_back: true distance_heuristic_weight: 1.0 + + # -- RRT* search Configurations -- + rrtstar: + enable_update: true + use_informed_sampling: true + max_planning_time: 150.0 + neighbor_radius: 8.0 + margin: 0.1 From 407baae915682049408111d49f60ece14111d894 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 23 Aug 2023 23:02:38 +0900 Subject: [PATCH 141/446] refactor(safety_check): use safety check common param struct (#526) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 8 ++++++++ .../behavior_path_planner.param.yaml | 13 ------------- .../lane_change/lane_change.param.yaml | 12 ++++++++++++ 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 7f2e92419b..948fcaf829 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -146,6 +146,14 @@ safety_check_backward_distance: 100.0 # [m] safety_check_hysteresis_factor: 2.0 # [-] safety_check_ego_offset: 1.0 # [m] + # rss parameters + expected_front_deceleration: -1.0 # [m/ss] + expected_rear_deceleration: -1.0 # [m/ss] + rear_vehicle_reaction_time: 2.0 # [s] + rear_vehicle_safety_time_margin: 1.0 # [s] + lateral_distance_max_threshold: 2.0 # [m] + longitudinal_distance_min_threshold: 3.0 # [m] + longitudinal_velocity_delta_time: 0.8 # [s] # For avoidance maneuver avoidance: diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml index aa56edee2f..5de4c0d27b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml @@ -29,19 +29,6 @@ visualize_maximum_drivable_area: true - lateral_distance_max_threshold: 1.7 - longitudinal_distance_min_threshold: 3.0 - longitudinal_velocity_delta_time: 0.8 - - expected_front_deceleration: -1.0 - expected_rear_deceleration: -1.0 - - expected_front_deceleration_for_abort: -1.0 - expected_rear_deceleration_for_abort: -2.0 - - rear_vehicle_reaction_time: 2.0 - rear_vehicle_safety_time_margin: 1.0 - lane_following: drivable_area_right_bound_offset: 0.0 drivable_area_left_bound_offset: 0.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 7408456d3e..372ed9041c 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -26,6 +26,18 @@ min_longitudinal_acc: -1.0 max_longitudinal_acc: 1.0 + # safety check + safety_check: + expected_front_deceleration: -1.0 + expected_rear_deceleration: -1.0 + expected_front_deceleration_for_abort: -1.0 + expected_rear_deceleration_for_abort: -2.0 + rear_vehicle_reaction_time: 2.0 + rear_vehicle_safety_time_margin: 1.0 + lateral_distance_max_threshold: 2.0 + longitudinal_distance_min_threshold: 3.0 + longitudinal_velocity_delta_time: 0.8 + # lateral acceleration map lateral_acceleration: velocity: [0.0, 4.0, 10.0] From dd3f79f355e364d4f5bee9d387601aaa4c54ed06 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 24 Aug 2023 08:21:20 +0900 Subject: [PATCH 142/446] feat(autoware_launch): add hold stop threshold in obstacle_cruise_planner (#524) * feat(autoware_launch): add hold stop threshold in obstacle_cruise_planner Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../obstacle_cruise_planner/obstacle_cruise_planner.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index b525d2914a..cd32c57cbe 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -14,6 +14,8 @@ min_object_accel_for_rss: -1.0 # front obstacle's acceleration to calculate RSS distance [m/ss] safe_distance_margin : 6.0 # This is also used as a stop margin [m] terminal_safe_distance_margin : 3.0 # Stop margin at the goal. This value cannot exceed safe distance margin. [m] + hold_stop_velocity_threshold: 0.01 # The maximum ego velocity to hold stopping [m/s] + hold_stop_distance_threshold: 0.3 # The ego keeps stopping if the distance to stop changes within the threshold [m] nearest_dist_deviation_threshold: 3.0 # [m] for finding nearest index nearest_yaw_deviation_threshold: 1.57 # [rad] for finding nearest index From 84188bb16b1f701a25a16165e64c913bdf8188f0 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 25 Aug 2023 09:05:01 +0900 Subject: [PATCH 143/446] fix(avoidance): avoidance shift line processing bug (#527) fix(avoidance): safety check chattering Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 948fcaf829..ff52b70eae 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -4,8 +4,6 @@ avoidance: resample_interval_for_planning: 0.3 # [m] resample_interval_for_output: 4.0 # [m] - detection_area_right_expand_dist: 0.0 # [m] - detection_area_left_expand_dist: 1.0 # [m] drivable_area_right_bound_offset: 0.0 # [m] drivable_area_left_bound_offset: 0.0 # [m] @@ -145,13 +143,12 @@ time_horizon: 10.0 # [s] safety_check_backward_distance: 100.0 # [m] safety_check_hysteresis_factor: 2.0 # [-] - safety_check_ego_offset: 1.0 # [m] # rss parameters expected_front_deceleration: -1.0 # [m/ss] expected_rear_deceleration: -1.0 # [m/ss] rear_vehicle_reaction_time: 2.0 # [s] rear_vehicle_safety_time_margin: 1.0 # [s] - lateral_distance_max_threshold: 2.0 # [m] + lateral_distance_max_threshold: 0.75 # [m] longitudinal_distance_min_threshold: 3.0 # [m] longitudinal_velocity_delta_time: 0.8 # [s] From 20d27d3502e31573cfa3203ca3ece353a58d1ff0 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 25 Aug 2023 17:04:30 +0900 Subject: [PATCH 144/446] fix(smoother): fix smoother jerk weight params (#528) Signed-off-by: satoshi-ota --- .../motion_velocity_smoother/JerkFiltered.param.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/JerkFiltered.param.yaml b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/JerkFiltered.param.yaml index a6906b7117..f74ca045f5 100644 --- a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/JerkFiltered.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/JerkFiltered.param.yaml @@ -1,7 +1,7 @@ /**: ros__parameters: - jerk_weight: 0.1 # weight for "smoothness" cost for jerk - over_v_weight: 10000.0 # weight for "over speed limit" cost - over_a_weight: 500.0 # weight for "over accel limit" cost - over_j_weight: 200.0 # weight for "over jerk limit" cost + jerk_weight: 10.0 # weight for "smoothness" cost for jerk + over_v_weight: 100000.0 # weight for "over speed limit" cost + over_a_weight: 5000.0 # weight for "over accel limit" cost + over_j_weight: 2000.0 # weight for "over jerk limit" cost jerk_filter_ds: 0.1 # resampling ds for jerk filter From 03ed82b90d536b96d5748735e6f2a7bc5214ce43 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 25 Aug 2023 23:01:09 +0900 Subject: [PATCH 145/446] feat(autoware_launch): add suppress_sudden_obstacle_stop in obstacle_cruise_planner (#525) * feat(autoware_launch): add suppress_sudden_obstacle_stop in obstacle_cruise_planner Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../obstacle_cruise_planner/obstacle_cruise_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index cd32c57cbe..b71c2d667c 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -20,6 +20,7 @@ nearest_dist_deviation_threshold: 3.0 # [m] for finding nearest index nearest_yaw_deviation_threshold: 1.57 # [rad] for finding nearest index min_behavior_stop_margin: 3.0 # [m] + suppress_sudden_obstacle_stop: true stop_obstacle_type: unknown: true From 86ce74b35bc7dbff23ad23bc540e5ea9d3756b0d Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Sat, 26 Aug 2023 09:00:19 +0900 Subject: [PATCH 146/446] refactor(map_based_prediction): update prediction yaml file (#531) update prediction yaml file Signed-off-by: yoshiri --- .../prediction/map_based_prediction.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index cb9a61b600..1f6def2491 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -11,7 +11,10 @@ sigma_yaw_angle_deg: 5.0 #[angle degree] object_buffer_time_length: 2.0 #[s] history_time_length: 1.0 #[s] + # parameter for shoulder lane prediction + prediction_time_horizon_rate_for_validate_shoulder_lane_length: 0.8 + # parameters for lc prediction lane_change_detection: method: "lat_diff_distance" # choose from "lat_diff_distance" or "time_to_change_lane" time_to_change_lane: From 42efcc33850f7e818ff8d9ebd8b64b56df7dea71 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Sun, 27 Aug 2023 21:50:22 +0900 Subject: [PATCH 147/446] feat(avoidance): add time series hysteresis (#530) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index ff52b70eae..65623343bb 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -142,7 +142,8 @@ time_resolution: 0.5 # [s] time_horizon: 10.0 # [s] safety_check_backward_distance: 100.0 # [m] - safety_check_hysteresis_factor: 2.0 # [-] + hysteresis_factor_expand_rate: 1.5 # [-] + hysteresis_factor_safe_count: 10 # [-] # rss parameters expected_front_deceleration: -1.0 # [m/ss] expected_rear_deceleration: -1.0 # [m/ss] From 1e1fb186e5672615dfd4b6aef8f0409a775e8de5 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 29 Aug 2023 08:15:44 +0900 Subject: [PATCH 148/446] feat(avoidance): flexible avoidance safety check param (#529) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 65623343bb..c91ec0e88b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -140,7 +140,8 @@ # collision check parameters check_all_predicted_path: false # [-] time_resolution: 0.5 # [s] - time_horizon: 10.0 # [s] + time_horizon_for_front_object: 3.0 # [s] + time_horizon_for_rear_object: 10.0 # [s] safety_check_backward_distance: 100.0 # [m] hysteresis_factor_expand_rate: 1.5 # [-] hysteresis_factor_safe_count: 10 # [-] From 449bb6940fad16642734146dca04922fb767b96f Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Tue, 29 Aug 2023 19:31:26 +0900 Subject: [PATCH 149/446] feat(autoware_launch): set larger max_area for pedestrian with umbrella (#535) set larger max_area for pedestrian with umbrella Signed-off-by: yoshiri --- .../multi_object_tracker/data_association_matrix.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/data_association_matrix.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/data_association_matrix.param.yaml index 69af202e7a..13f2220655 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/data_association_matrix.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/data_association_matrix.param.yaml @@ -30,9 +30,9 @@ 36.00, 12.10, 36.00, 60.00, 60.00, 10000.00, 10000.00, 10000.00, #TRUCK 60.00, 12.10, 36.00, 60.00, 60.00, 10000.00, 10000.00, 10000.00, #BUS 60.00, 12.10, 36.00, 60.00, 60.00, 10000.00, 10000.00, 10000.00, #TRAILER - 2.50, 10000.00, 10000.00, 10000.00, 10000.00, 2.50, 2.50, 1.00, #MOTORBIKE - 2.50, 10000.00, 10000.00, 10000.00, 10000.00, 2.50, 2.50, 1.00, #BICYCLE - 2.00, 10000.00, 10000.00, 10000.00, 10000.00, 1.50, 1.50, 1.00] #PEDESTRIAN + 2.50, 10000.00, 10000.00, 10000.00, 10000.00, 2.50, 2.50, 1.50, #MOTORBIKE + 2.50, 10000.00, 10000.00, 10000.00, 10000.00, 2.50, 2.50, 1.50, #BICYCLE + 2.00, 10000.00, 10000.00, 10000.00, 10000.00, 2.00, 2.00, 1.50] #PEDESTRIAN min_area_matrix: #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN [ 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #UNKNOWN From 87021c6ce04e6fae68449969c4a20aa313bbbda6 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 30 Aug 2023 01:49:21 +0900 Subject: [PATCH 150/446] feat(autoware_launch): add min_longitudinal_polygon_margin and use object_path_base in dynamic_avoidance (#534) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index fad859ac16..fe30397683 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -2,7 +2,7 @@ ros__parameters: dynamic_avoidance: common: - enable_debug_info: true + enable_debug_info: false use_hatched_road_markings: true # avoidance is performed for the object type with true @@ -42,7 +42,9 @@ max_object_angle: 0.785 drivable_area_generation: - polygon_generation_method: "ego_path_base" # choose "ego_path_base" and "object_path_base" + polygon_generation_method: "object_path_base" # choose "ego_path_base" and "object_path_base" + object_path_base: + min_longitudinal_polygon_margin: 3.0 # [m] lat_offset_from_obstacle: 0.8 # [m] max_lat_offset_to_avoid: 0.5 # [m] From 0bd22cd6c19c3f1f6874217121fbedf2a1d89642 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 30 Aug 2023 08:45:34 +0900 Subject: [PATCH 151/446] feat(autoware_launch): add max_crosswalk_user_delta_yaw_threshold_for_lanelet in map_based_prediction (#536) Signed-off-by: Takayuki Murooka --- .../prediction/map_based_prediction.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index 1f6def2491..31fae9c811 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -5,6 +5,7 @@ prediction_sampling_delta_time: 0.5 #[s] min_velocity_for_map_based_prediction: 1.39 #[m/s] min_crosswalk_user_velocity: 1.39 #[m/s] + max_crosswalk_user_delta_yaw_threshold_for_lanelet: 0.785 #[m/s] dist_threshold_for_searching_lanelet: 3.0 #[m] delta_yaw_threshold_for_searching_lanelet: 0.785 #[rad] sigma_lateral_offset: 0.5 #[m] From 321db8957cb06db842ac9a6677f7fa3573b44759 Mon Sep 17 00:00:00 2001 From: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Date: Wed, 30 Aug 2023 13:46:51 +0900 Subject: [PATCH 152/446] chore: add default args for TLR models (#538) Signed-off-by: Shunsuke Miura --- .../launch/components/tier4_perception_component.launch.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 65b8ac20bd..cf5b2dd98c 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -93,5 +93,9 @@ + + + + From a46e5551ea17f7bfc752b5880ada95b2cfc8d1d9 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 30 Aug 2023 14:50:20 +0900 Subject: [PATCH 153/446] feat(autoware_launch): add no stop decision parameters in crosswalk (#537) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 4b0a1ffc43..0c12624f3b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -42,7 +42,13 @@ ego_pass_later_margin_x: [0.0] # [[s]] time to vehicle margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) ego_pass_later_margin_y: [10.0] # [[s]] time to collision margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) ego_pass_later_additional_margin: 0.5 # [s] additional time margin for object pass first situation to suppress chattering - max_offset_to_crosswalk_for_yield: 0.0 # [m] maximum offset from ego's front to crosswalk for yield. Positive value means in front of the crosswalk. + + no_stop_decision: + max_offset_to_crosswalk_for_yield: 0.0 # [m] maximum offset from ego's front to crosswalk for yield. Positive value means in front of the crosswalk. + min_acc: -1.0 # min acceleration [m/ss] + min_jerk: -1.0 # min jerk [m/sss] + max_jerk: 1.0 # max jerk [m/sss] + stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding From d0e57332c5e0cb0e978f84f76f9531798dce75e1 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 30 Aug 2023 15:39:01 +0900 Subject: [PATCH 154/446] feat(intersection): suppress intersection occlusion chattering (#533) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 4e77e0591f..e35215612a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -48,6 +48,7 @@ denoise_kernel: 1.0 # [m] possible_object_bbox: [1.5, 2.5] # [m x m] ignore_parked_vehicle_speed_threshold: 0.8333 # == 3.0km/h + stop_release_margin_time: 1.5 # [s] enable_rtc: intersection: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval From c2201c21374f2c1fab0aa95d44943fb221f7bb91 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 30 Aug 2023 17:43:48 +0900 Subject: [PATCH 155/446] feat(intersection): strict definition of stuck vehicle detection area (#532) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index e35215612a..00df2e2ced 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -14,8 +14,7 @@ consider_wrong_direction_vehicle: false stuck_vehicle: use_stuck_stopline: true # stopline generated before the first conflicting area - stuck_vehicle_detect_dist: 3.0 # this should be the length between cars when they are stopped. The actual stuck vehicle detection length will be this value + vehicle_length. - stuck_vehicle_ignore_dist: 10.0 # obstacle stop max distance(5.0m) + stuck vehicle size / 2 (0.0m-) + stuck_vehicle_detect_dist: 5.0 # this should be the length between cars when they are stopped. The actual stuck vehicle detection length will be this value + vehicle_length. stuck_vehicle_vel_thr: 0.833 # 0.833m/s = 3.0km/h # enable_front_car_decel_prediction: false # By default this feature is disabled # assumed_front_car_decel: 1.0 # [m/ss] the expected deceleration of front car when front car as well as ego are turning From ef98f76e5a433cf37d56444d41ab2a0c7ea88792 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 31 Aug 2023 01:04:30 +0900 Subject: [PATCH 156/446] feat(autoware_launch): remove polygon_generation_method from dynamic_avoidance (#539) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index fe30397683..a05bdda099 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -42,7 +42,6 @@ max_object_angle: 0.785 drivable_area_generation: - polygon_generation_method: "object_path_base" # choose "ego_path_base" and "object_path_base" object_path_base: min_longitudinal_polygon_margin: 3.0 # [m] From 1e48981bb34aea3078eb6326a5ac54366f2653a7 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Thu, 31 Aug 2023 09:31:35 +0900 Subject: [PATCH 157/446] chore(rviz_config): add debug marker group (#541) Signed-off-by: Takamasa Horibe --- autoware_launch/rviz/autoware.rviz | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 915a296d79..296d707b13 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -2418,6 +2418,34 @@ Visualization Manager: Value: false Enabled: true Name: Control + - Class: rviz_common/Group + Displays: + - Class: rviz_common/Group + Displays: ~ + Enabled: true + Name: Map + - Class: rviz_common/Group + Displays: ~ + Enabled: true + Name: Sensing + - Class: rviz_common/Group + Displays: ~ + Enabled: true + Name: Localization + - Class: rviz_common/Group + Displays: ~ + Enabled: true + Name: Perception + - Class: rviz_common/Group + Displays: ~ + Enabled: true + Name: Planning + - Class: rviz_common/Group + Displays: ~ + Enabled: true + Name: Control + Enabled: false + Name: Debug Enabled: true Global Options: Background Color: 10; 10; 10 From b98fb034254a1761bb24a85588fff1d446366b6e Mon Sep 17 00:00:00 2001 From: Tomoya Kimura Date: Thu, 31 Aug 2023 09:54:34 +0900 Subject: [PATCH 158/446] feat(autoware_launch): enable emergency handling when resource monitoring state becomes error (#542) Signed-off-by: tomoya.kimura --- .../system/system_error_monitor/system_error_monitor.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml index 71dc2ac600..251486dafd 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml @@ -37,7 +37,7 @@ /autoware/system/node_alive_monitoring: default /autoware/system/emergency_stop_operation: default /autoware/system/service_log_checker: { sf_at: "warn", lf_at: "none", spf_at: "none" } - /autoware/system/resource_monitoring: { sf_at: "warn", lf_at: "none", spf_at: "none" } + /autoware/system/resource_monitoring: { sf_at: "warn", lf_at: "error", spf_at: "none" } /autoware/vehicle/node_alive_monitoring: default From 250defe83011632a0f2d3629346d5bdf544ae172 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Thu, 31 Aug 2023 11:43:31 +0900 Subject: [PATCH 159/446] fix(control_validator): default false for publishing diag and display terminal (#545) default false for publishing diag and display terminal Signed-off-by: kyoichi-sugahara --- .../control/control_validator/control_validator.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/control/control_validator/control_validator.param.yaml b/autoware_launch/config/control/control_validator/control_validator.param.yaml index 9ce677b2c2..c51cbafba2 100644 --- a/autoware_launch/config/control/control_validator/control_validator.param.yaml +++ b/autoware_launch/config/control/control_validator/control_validator.param.yaml @@ -1,14 +1,14 @@ /**: ros__parameters: - publish_diag: true # if true, diagnostic msg is published + publish_diag: false # if true, diagnostic msg is published # If the number of consecutive invalid predicted_path exceeds this threshold, the Diag will be set to ERROR. # (For example, threshold = 1 means, even if the predicted_path is invalid, Diag will not be ERROR if # the next predicted_path is valid.) diag_error_count_threshold: 0 - display_on_terminal: true # show error msg on terminal + display_on_terminal: false # show error msg on terminal thresholds: max_distance_deviation: 1.0 From fb5691ae9f1a40112cdcad7661d909044d6e7e12 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:27:55 +0900 Subject: [PATCH 160/446] chore(rviz_config): add localization debug config (#544) Signed-off-by: kminoda --- autoware_launch/rviz/autoware.rviz | 104 ++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 296d707b13..9b130902a9 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -2429,9 +2429,111 @@ Visualization Manager: Enabled: true Name: Sensing - Class: rviz_common/Group - Displays: ~ Enabled: true Name: Localization + Displays: + - Alpha: 0.9990000128746033 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz_default_plugins/PointCloud2 + Color: 85; 255; 0 + Color Transformer: FlatColor + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 85; 255; 127 + Max Intensity: 0 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: NDT pointclouds + Position Transformer: XYZ + Selectable: false + Size (Pixels): 10 + Size (m): 0.5 + Style: Squares + Topic: + Depth: 5 + Durability Policy: Volatile + Filter size: 10 + History Policy: Keep Last + Reliability Policy: Reliable + Value: /localization/pose_estimator/points_aligned + Use Fixed Frame: true + Use rainbow: true + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: intensity + Class: rviz_default_plugins/PointCloud2 + Color: 255; 255; 255 + Color Transformer: "" + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: NDTLoadedPCDMap + Position Transformer: "" + Selectable: true + Size (Pixels): 3 + Size (m): 0.1 + Style: Flat Squares + Topic: + Depth: 5 + Durability Policy: Volatile + Filter size: 10 + History Policy: Keep Last + Reliability Policy: Reliable + Value: /localization/pose_estimator/debug/loaded_pointcloud_map + Use Fixed Frame: true + Use rainbow: true + Value: true + - Buffer Size: 200 + Class: rviz_plugins::PoseHistory + Enabled: true + Line: + Alpha: 0.9990000128746033 + Color: 170; 255; 127 + Value: true + Width: 0.10000000149011612 + Name: NDTPoseHistory + Topic: + Depth: 5 + Durability Policy: Volatile + Filter size: 10 + History Policy: Keep Last + Reliability Policy: Reliable + Value: /localization/pose_estimator/pose + Value: true + - Buffer Size: 1000 + Class: rviz_plugins::PoseHistory + Enabled: true + Line: + Alpha: 0.9990000128746033 + Color: 0; 255; 255 + Value: true + Width: 0.10000000149011612 + Name: EKFPoseHistory + Topic: + Depth: 5 + Durability Policy: Volatile + Filter size: 10 + History Policy: Keep Last + Reliability Policy: Reliable + Value: /localization/pose_twist_fusion_filter/pose + Value: true - Class: rviz_common/Group Displays: ~ Enabled: true From 90b98b4d58105a4ac40b6f1e18f0d14e92ca2c05 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 1 Sep 2023 07:56:11 +0900 Subject: [PATCH 161/446] feat(interface): add new option `keep_last` (#543) feat(planner_manager): keep last module Signed-off-by: satoshi-ota --- .../scene_module_manager.param.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index 65582656b9..a3c0194d03 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -8,6 +8,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true + keep_last: false priority: 7 max_module_size: 1 @@ -16,6 +17,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true + keep_last: false priority: 7 max_module_size: 1 @@ -24,6 +26,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true + keep_last: false priority: 6 max_module_size: 1 @@ -32,6 +35,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true + keep_last: false priority: 6 max_module_size: 1 @@ -40,6 +44,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false + keep_last: false priority: 0 max_module_size: 1 @@ -48,6 +53,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false + keep_last: false priority: 2 max_module_size: 1 @@ -56,6 +62,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false + keep_last: true priority: 1 max_module_size: 1 @@ -64,6 +71,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false + keep_last: false priority: 5 max_module_size: 1 @@ -72,6 +80,7 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false + keep_last: false priority: 4 max_module_size: 1 @@ -80,5 +89,6 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true + keep_last: false priority: 3 max_module_size: 1 From 7fde9660e273f8c089c0a0f4b8263cae76936ba8 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Fri, 1 Sep 2023 10:43:22 +0900 Subject: [PATCH 162/446] feat(behavior_path_planner): add path resampling interval param (#522) Signed-off-by: Maxime CLEMENT --- .../behavior_path_planner/drivable_area_expansion.param.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml index 1609cdbc60..160ebdc180 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml @@ -21,12 +21,14 @@ rear: 0.5 # [m] extra length to add to the rear of the dynamic object footprint left: 0.5 # [m] extra length to add to the left of the dynamic object footprint right: 0.5 # [m] extra length to add to the rear of the dynamic object footprint + path_preprocessing: + max_arc_length: 50.0 # [m] maximum arc length along the path where the ego footprint is projected (0.0 means no limit) + resample_interval: 2.0 # [m] fixed interval between resampled path points (0.0 means path points are directly used) expansion: method: polygon # method used to expand the drivable area. Either 'lanelet' or 'polygon'. # 'lanelet': add lanelets overlapped by the ego footprints # 'polygon': add polygons built around sections of the ego footprint that go out of the drivable area max_distance: 0.0 # [m] maximum distance by which the drivable area can be expended (0.0 means no limit) - max_path_arc_length: 50.0 # [m] maximum arc length along the path where the ego footprint is projected (0.0 means no limit) extra_arc_length: 0.5 # [m] extra expansion arc length around an ego footprint avoid_linestring: types: # linestring types in the lanelet maps that will not be crossed when expanding the drivable area From d5b427ac5c3f73d4f938adee2e20548e0d5702a7 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Fri, 1 Sep 2023 15:38:01 +0900 Subject: [PATCH 163/446] feat(out_of_lane): add min_assumed_velocity parameter (#548) Signed-off-by: Maxime CLEMENT --- .../behavior_velocity_planner/out_of_lane.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml index dd4c1c6102..510dc86ef6 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml @@ -34,6 +34,7 @@ distance_threshold: 15.0 # [m] insert a stop when closer than this distance from an overlap ego: + min_assumed_velocity: 2.0 # [m/s] minimum velocity used to calculate the enter and exit times of ego extra_front_offset: 0.0 # [m] extra front distance extra_rear_offset: 0.0 # [m] extra rear distance extra_right_offset: 0.0 # [m] extra right distance From da57b463770b24a9a00753d451e721ce817d2bdb Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Tue, 5 Sep 2023 17:28:49 +0900 Subject: [PATCH 164/446] feat(behavior_path_planner): add safety check against dynamic objects for start/goal planner (#550) add params for safety check Signed-off-by: kyoichi-sugahara --- .../goal_planner/goal_planner.param.yaml | 60 +++++++++++++++++++ .../start_planner/start_planner.param.yaml | 60 +++++++++++++++++++ 2 files changed, 120 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index cd2bc6168d..9ee48d7555 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -104,6 +104,66 @@ neighbor_radius: 8.0 margin: 1.0 + stop_condition: + maximum_deceleration_for_stop: 1.0 + maximum_jerk_for_stop: 1.0 + path_safety_check: + # EgoPredictedPath + ego_predicted_path: + acceleration: 1.0 + time_horizon: 10.0 + time_resolution: 0.5 + min_slow_speed: 0.0 + delay_until_departure: 1.0 + target_velocity: 1.0 + # For target object filtering + target_filtering: + safety_check_time_horizon: 5.0 + safety_check_time_resolution: 1.0 + # detection range + object_check_forward_distance: 10.0 + object_check_backward_distance: 100.0 + ignore_object_velocity_threshold: 0.0 + # ObjectTypesToCheck + object_types_to_check: + check_car: true + check_truck: true + check_bus: true + check_trailer: true + check_bicycle: true + check_motorcycle: true + check_pedestrian: true + check_unknown: false + # ObjectLaneConfiguration + object_lane_configuration: + check_current_lane: true + check_right_side_lane: true + check_left_side_lane: true + check_shoulder_lane: true + check_other_lane: false + include_opposite_lane: false + invert_opposite_lane: false + check_all_predicted_path: true + use_all_predicted_path: true + use_predicted_path_outside_lanelet: false + + # For safety check + safety_check_params: + # safety check configuration + enable_safety_check: true + # collision check parameters + check_all_predicted_path: true + publish_debug_marker: false + rss_params: + rear_vehicle_reaction_time: 1.0 + rear_vehicle_safety_time_margin: 1.0 + lateral_distance_max_threshold: 1.0 + longitudinal_distance_min_threshold: 1.0 + longitudinal_velocity_delta_time: 1.0 + # temporary + backward_path_length: 30.0 + forward_path_length: 100.0 + # debug debug: print_debug_info: false diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index bea78664c6..b62262423f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -72,3 +72,63 @@ max_planning_time: 150.0 neighbor_radius: 8.0 margin: 1.0 + + stop_condition: + maximum_deceleration_for_stop: 1.0 + maximum_jerk_for_stop: 1.0 + path_safety_check: + # EgoPredictedPath + ego_predicted_path: + acceleration: 1.0 + time_horizon: 10.0 + time_resolution: 0.5 + min_slow_speed: 0.0 + delay_until_departure: 1.0 + target_velocity: 1.0 + # For target object filtering + target_filtering: + safety_check_time_horizon: 5.0 + safety_check_time_resolution: 1.0 + # detection range + object_check_forward_distance: 10.0 + object_check_backward_distance: 100.0 + ignore_object_velocity_threshold: 0.0 + # ObjectTypesToCheck + object_types_to_check: + check_car: true + check_truck: true + check_bus: true + check_trailer: true + check_bicycle: true + check_motorcycle: true + check_pedestrian: true + check_unknown: false + # ObjectLaneConfiguration + object_lane_configuration: + check_current_lane: true + check_right_side_lane: true + check_left_side_lane: true + check_shoulder_lane: true + check_other_lane: false + include_opposite_lane: false + invert_opposite_lane: false + check_all_predicted_path: true + use_all_predicted_path: true + use_predicted_path_outside_lanelet: false + + # For safety check + safety_check_params: + # safety check configuration + enable_safety_check: true + # collision check parameters + check_all_predicted_path: true + publish_debug_marker: false + rss_params: + rear_vehicle_reaction_time: 1.0 + rear_vehicle_safety_time_margin: 1.0 + lateral_distance_max_threshold: 1.0 + longitudinal_distance_min_threshold: 1.0 + longitudinal_velocity_delta_time: 1.0 + # temporary + backward_path_length: 30.0 + forward_path_length: 100.0 From 9bcc7e2efabcfa736a9a4af27220187f753411e8 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 5 Sep 2023 21:24:27 +0900 Subject: [PATCH 165/446] feat(goal_planner): set ignore_distance_from_lane_start 0.0 (#552) Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 9ee48d7555..ef14906b04 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -17,7 +17,7 @@ longitudinal_margin: 3.0 max_lateral_offset: 0.5 lateral_offset_interval: 0.25 - ignore_distance_from_lane_start: 15.0 + ignore_distance_from_lane_start: 0.0 margin_from_boundary: 0.75 # occupancy grid map From 8a867ce7ab61532ab3d0535c3c455b6dd6d70d33 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 6 Sep 2023 02:21:48 +0900 Subject: [PATCH 166/446] =?UTF-8?q?feat(goal=5Fplanner):=20do=20not=20use?= =?UTF-8?q?=20minimum=5Frequest=5Flength=20for=20fixed=20goal=20=E2=80=A6?= =?UTF-8?q?=20(#546)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(goal_planner): do not use minimum_request_length for fixed goal planner Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index ef14906b04..1bfe689c55 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -2,7 +2,6 @@ ros__parameters: goal_planner: # general params - minimum_request_length: 100.0 th_arrived_distance: 1.0 th_stopped_velocity: 0.01 th_stopped_time: 2.0 # It must be greater than the state_machine's. @@ -36,6 +35,7 @@ # pull over pull_over: + minimum_request_length: 100.0 pull_over_velocity: 3.0 pull_over_minimum_velocity: 1.38 decide_path_distance: 10.0 From 235a2d58c05858388a45955f536d03ecfa594ba5 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Thu, 7 Sep 2023 13:01:45 +0900 Subject: [PATCH 167/446] feat(operation_transition_mannager): add param enable_engage_on_driving (#553) Signed-off-by: Takamasa Horibe --- .../operation_mode_transition_manager.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/control/operation_mode_transition_manager/operation_mode_transition_manager.param.yaml b/autoware_launch/config/control/operation_mode_transition_manager/operation_mode_transition_manager.param.yaml index a86443f5ca..a4e8ab2c83 100644 --- a/autoware_launch/config/control/operation_mode_transition_manager/operation_mode_transition_manager.param.yaml +++ b/autoware_launch/config/control/operation_mode_transition_manager/operation_mode_transition_manager.param.yaml @@ -2,6 +2,10 @@ ros__parameters: transition_timeout: 10.0 frequency_hz: 10.0 + + # set true if you want to engage the autonomous driving mode while the vehicle is driving. If set to false, it will deny Engage in any situation where the vehicle speed is not zero. Note that if you use this feature without adjusting the parameters, it may cause issues like sudden deceleration. Before using, please ensure the engage condition and the vehicle_cmd_gate transition filter are appropriately adjusted. + enable_engage_on_driving: false + check_engage_condition: false # set false if you do not want to care about the engage condition. nearest_dist_deviation_threshold: 3.0 # [m] for finding nearest index nearest_yaw_deviation_threshold: 1.57 # [rad] for finding nearest index From 3c23a106e333fba47229c7e415be57cf617679f2 Mon Sep 17 00:00:00 2001 From: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Date: Thu, 7 Sep 2023 19:27:05 +0900 Subject: [PATCH 168/446] feat: add traffic light recogition namespace to e2e sim launch (#555) Signed-off-by: Shunsuke Miura --- autoware_launch/launch/e2e_simulator.launch.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/launch/e2e_simulator.launch.xml b/autoware_launch/launch/e2e_simulator.launch.xml index a089da6397..9ce8a421e9 100644 --- a/autoware_launch/launch/e2e_simulator.launch.xml +++ b/autoware_launch/launch/e2e_simulator.launch.xml @@ -18,6 +18,8 @@ + + @@ -56,6 +58,7 @@ + From 86e7c16a5185d66f4067257d0b7ff67ef45dabdd Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Thu, 7 Sep 2023 22:20:52 +0900 Subject: [PATCH 169/446] feat(lane_departure_checker): add border types to check (#549) update lane_departure_checker.param.yaml Signed-off-by: kyoichi-sugahara --- .../lane_departure_checker.param.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml b/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml index 008832b1ca..2d044e7cfd 100644 --- a/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml +++ b/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml @@ -1,5 +1,10 @@ /**: ros__parameters: + # Enable feature + will_out_of_lane_checker: true + out_of_lane_checker: true + boundary_departure_checker: false + # Node update_rate: 10.0 visualize_lanelet: false @@ -7,7 +12,7 @@ include_left_lanes: false include_opposite_lanes: false include_conflicting_lanes: false - road_border_departure_checker: false + boundary_types_to_detect: [road_border] # Core footprint_margin_scale: 1.0 From 6de525cb25552fd59c22fe78807de488dad14481 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Fri, 8 Sep 2023 11:47:46 +0900 Subject: [PATCH 170/446] feat(ndt_scan_matcher): add param lidar_topic_timeout_sec (#540) Signed-off-by: yamato-ando Co-authored-by: yamato-ando --- .../config/localization/ndt_scan_matcher.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index 4c29059581..3a99927b41 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -37,6 +37,9 @@ # The number of particles to estimate initial pose initial_estimate_particles_num: 100 + # Tolerance of timestamp difference between current time and sensor pointcloud. [sec] + lidar_topic_timeout_sec: 1.0 + # Tolerance of timestamp difference between initial_pose and sensor pointcloud. [sec] initial_pose_timeout_sec: 1.0 From da09163506c7db364350c411482ee1beef8f9bb7 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sat, 9 Sep 2023 14:14:18 +0900 Subject: [PATCH 171/446] feat(autoware_launch): additional margin parameters in surround obstacle checker (#557) feat(autoware_launch): additional margin parameters in surround ostacle checker Signed-off-by: Takayuki Murooka --- .../surround_obstacle_checker.param.yaml | 56 +++++++++++++++++-- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/surround_obstacle_checker.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/surround_obstacle_checker.param.yaml index 6aa4e71774..5ec10572ff 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/surround_obstacle_checker.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/surround_obstacle_checker.param.yaml @@ -1,11 +1,56 @@ /**: ros__parameters: - # obstacle check - use_pointcloud: true # use pointcloud as obstacle check - use_dynamic_object: true # use dynamic object as obstacle check - surround_check_distance: 0.5 # if objects exist in this distance, transit to "exist-surrounding-obstacle" status [m] - surround_check_recover_distance: 0.8 # if no object exists in this distance, transit to "non-surrounding-obstacle" status [m] + # surround_check_*_distance: if objects exist in this distance, transit to "exist-surrounding-obstacle" status [m] + # surround_check_hysteresis_distance: if no object exists in this hysteresis distance added to the above distance, transit to "non-surrounding-obstacle" status [m] + pointcloud: + enable_check: false + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.5 + surround_check_back_distance: 0.5 + unknown: + enable_check: true + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.5 + surround_check_back_distance: 0.5 + car: + enable_check: true + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.0 + surround_check_back_distance: 0.5 + truck: + enable_check: true + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.0 + surround_check_back_distance: 0.5 + bus: + enable_check: true + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.0 + surround_check_back_distance: 0.5 + trailer: + enable_check: true + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.0 + surround_check_back_distance: 0.5 + motorcycle: + enable_check: true + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.0 + surround_check_back_distance: 0.5 + bicycle: + enable_check: true + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.5 + surround_check_back_distance: 0.5 + pedestrian: + enable_check: true + surround_check_front_distance: 0.5 + surround_check_side_distance: 0.5 + surround_check_back_distance: 0.5 + + surround_check_hysteresis_distance: 0.3 + state_clear_time: 2.0 # ego stop state @@ -13,3 +58,4 @@ # debug publish_debug_footprints: true # publish vehicle footprint & footprints with surround_check_distance and surround_check_recover_distance offsets + debug_footprint_label: "car" From 0df78f526ac6e3cb278f98b5fab662a894354a45 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Tue, 12 Sep 2023 16:10:42 +0900 Subject: [PATCH 172/446] fix(autoware.rviz): remove initial_pose_button_panel (#561) Signed-off-by: yamato-ando Co-authored-by: yamato-ando --- autoware_launch/rviz/autoware.rviz | 2 -- 1 file changed, 2 deletions(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 9b130902a9..0013fc36ca 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -16,8 +16,6 @@ Panels: Expanded: ~ Name: Views Splitter Ratio: 0.5 - - Class: tier4_localization_rviz_plugin/InitialPoseButtonPanel - Name: InitialPoseButtonPanel - Class: AutowareDateTimePanel Name: AutowareDateTimePanel - Class: rviz_plugins::AutowareStatePanel From aab18baba751d4c7affe9bc25b5fc196861379ae Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 12 Sep 2023 23:00:13 +0900 Subject: [PATCH 173/446] feat(autoware_launch): add approaching stop on curve in obstacle cruise planner (#560) * feat(autoware_launch): add approaching stop on curve in obstacle cruise planner Signed-off-by: Takayuki Murooka * update config Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../obstacle_cruise_planner.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index b71c2d667c..aadd0ccd02 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -20,6 +20,10 @@ nearest_dist_deviation_threshold: 3.0 # [m] for finding nearest index nearest_yaw_deviation_threshold: 1.57 # [rad] for finding nearest index min_behavior_stop_margin: 3.0 # [m] + stop_on_curve: + enable_approaching: false + additional_safe_distance_margin: 3.0 # [m] + min_safe_distance_margin: 3.0 # [m] suppress_sudden_obstacle_stop: true stop_obstacle_type: From cb55e835b29c54030c45c7647f3948574fd7975b Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 13 Sep 2023 00:45:18 +0900 Subject: [PATCH 174/446] feat(goal_planner): use only static objects in pull over lanes to path generation (#562) Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 1bfe689c55..c1fd848857 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -32,6 +32,7 @@ use_object_recognition: true object_recognition_collision_check_margin: 0.6 # this should be larger than `surround_check_distance` of surround_obstacle_checker object_recognition_collision_check_max_extra_stopping_margin: 1.0 + th_moving_object_velocity: 1.0 # pull over pull_over: From 7f675e21bcf486c8d2e5d2007a6b2378ddca4a6b Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:08:52 +0900 Subject: [PATCH 175/446] chore(localization_error_monitor): update default parameter (#565) Signed-off-by: kminoda --- .../config/localization/localization_error_monitor.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/localization/localization_error_monitor.param.yaml b/autoware_launch/config/localization/localization_error_monitor.param.yaml index 026daf0532..2aa28014ea 100644 --- a/autoware_launch/config/localization/localization_error_monitor.param.yaml +++ b/autoware_launch/config/localization/localization_error_monitor.param.yaml @@ -4,4 +4,4 @@ error_ellipse_size: 1.0 warn_ellipse_size: 0.8 error_ellipse_size_lateral_direction: 0.3 - warn_ellipse_size_lateral_direction: 0.2 + warn_ellipse_size_lateral_direction: 0.25 From 405e5fbe3a21446d57959faf01b76432a79a3743 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 13 Sep 2023 16:09:15 +0900 Subject: [PATCH 176/446] feat(tier4_system_rviz_plugin): add package (#564) * feat(tier4_system_rviz_plugin): add package Signed-off-by: kminoda * fix Signed-off-by: kminoda --------- Signed-off-by: kminoda --- autoware_launch/rviz/autoware.rviz | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 0013fc36ca..00e924da39 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -319,6 +319,22 @@ Visualization Manager: Value: true Enabled: true Name: Vehicle + - Class: rviz_plugins/MrmSummaryOverlayDisplay + Enabled: false + Font Size: 10 + Left: 512 + Max Letter Num: 100 + Name: MRM Summary + Text Color: 25; 255; 240 + Top: 64 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /system/emergency/hazard_status + Value: false + Value height offset: 0 Enabled: true Name: System - Class: rviz_common/Group From a576ad2ca3f77e3fd179f8d80fa295608bbd6f5f Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Thu, 14 Sep 2023 16:56:05 +0900 Subject: [PATCH 177/446] feat(goal_planner): add options of occupancy grid map to use only for goal search (#563) Signed-off-by: kosuke55 --- .../goal_planner/goal_planner.param.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index c1fd848857..f298406792 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -21,8 +21,9 @@ # occupancy grid map occupancy_grid: - use_occupancy_grid: true - use_occupancy_grid_for_longitudinal_margin: false + use_occupancy_grid_for_goal_search: true + use_occupancy_grid_for_goal_longitudinal_margin: false + use_occupancy_grid_for_path_collision_check: false occupancy_grid_collision_check_margin: 0.0 theta_size: 360 obstacle_threshold: 60 From 79af6a9e34939c3ed28b58b76a791b3ac164495e Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Sat, 16 Sep 2023 18:17:57 +0900 Subject: [PATCH 178/446] fix(behavior_path_planner): define hysteresis_factor_expand_rate (#569) * hysteresis_factor_expand_rate Signed-off-by: kyoichi-sugahara * style(pre-commit): autofix * add hysteresis_factor_expand_rate in SafetyCheckParams Signed-off-by: kyoichi-sugahara * delete setting files Signed-off-by: kyoichi-sugahara * revert unnecessary change Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 ++ .../start_planner/start_planner.param.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index f298406792..da42efc7f9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -162,6 +162,8 @@ lateral_distance_max_threshold: 1.0 longitudinal_distance_min_threshold: 1.0 longitudinal_velocity_delta_time: 1.0 + # hysteresis factor to expand/shrink polygon with the value + hysteresis_factor_expand_rate: 1.0 # temporary backward_path_length: 30.0 forward_path_length: 100.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index b62262423f..586676fbbb 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -129,6 +129,8 @@ lateral_distance_max_threshold: 1.0 longitudinal_distance_min_threshold: 1.0 longitudinal_velocity_delta_time: 1.0 + # hysteresis factor to expand/shrink polygon + hysteresis_factor_expand_rate: 1.0 # temporary backward_path_length: 30.0 forward_path_length: 100.0 From 9256a1322f233883c92ba36c09f03c38ceedf291 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 18 Sep 2023 16:28:12 +0900 Subject: [PATCH 179/446] feat(behavior_path_planner): update start_goal_planner's parameter (#571) update start_goal_planner's parameter Signed-off-by: kyoichi-sugahara --- .../goal_planner/goal_planner.param.yaml | 7 ++++--- .../start_planner/start_planner.param.yaml | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index da42efc7f9..c4d1b7bb1b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -112,12 +112,13 @@ path_safety_check: # EgoPredictedPath ego_predicted_path: + min_velocity: 0.0 acceleration: 1.0 - time_horizon: 10.0 + max_velocity: 1.0 + time_horizon_for_front_object: 10.0 + time_horizon_for_rear_object: 10.0 time_resolution: 0.5 - min_slow_speed: 0.0 delay_until_departure: 1.0 - target_velocity: 1.0 # For target object filtering target_filtering: safety_check_time_horizon: 5.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 586676fbbb..492bf1ddca 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -79,12 +79,13 @@ path_safety_check: # EgoPredictedPath ego_predicted_path: + min_velocity: 0.0 acceleration: 1.0 - time_horizon: 10.0 + max_velocity: 1.0 + time_horizon_for_front_object: 10.0 + time_horizon_for_rear_object: 10.0 time_resolution: 0.5 - min_slow_speed: 0.0 delay_until_departure: 1.0 - target_velocity: 1.0 # For target object filtering target_filtering: safety_check_time_horizon: 5.0 From 17f9cea1334afba763133286752d7c3aa95c6acd Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 18 Sep 2023 21:19:39 +0900 Subject: [PATCH 180/446] fix(behavior_path_planner): change safety check default disable (#572) * change safety check default disable Signed-off-by: kyoichi-sugahara * add warning message Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 +- .../start_planner/start_planner.param.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index c4d1b7bb1b..94ae9fa6d9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -153,7 +153,7 @@ # For safety check safety_check_params: # safety check configuration - enable_safety_check: true + enable_safety_check: false # Don't set to true if auto_mode is enabled # collision check parameters check_all_predicted_path: true publish_debug_marker: false diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 492bf1ddca..e12a1a3519 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -120,7 +120,7 @@ # For safety check safety_check_params: # safety check configuration - enable_safety_check: true + enable_safety_check: false # Don't set to true if auto_mode is enabled # collision check parameters check_all_predicted_path: true publish_debug_marker: false From c085625ae13afd850fe401c0603f6cf9c6c36904 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 18 Sep 2023 21:19:53 +0900 Subject: [PATCH 181/446] feat(behavior_path_planner): set param ignore_object_velocity_threshold (#573) set param ignore_object_velocity_threshold Signed-off-by: kyoichi-sugahara --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 +- .../start_planner/start_planner.param.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 94ae9fa6d9..0c11077ea6 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -126,7 +126,7 @@ # detection range object_check_forward_distance: 10.0 object_check_backward_distance: 100.0 - ignore_object_velocity_threshold: 0.0 + ignore_object_velocity_threshold: 1.0 # ObjectTypesToCheck object_types_to_check: check_car: true diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index e12a1a3519..4fa1c09958 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -93,7 +93,7 @@ # detection range object_check_forward_distance: 10.0 object_check_backward_distance: 100.0 - ignore_object_velocity_threshold: 0.0 + ignore_object_velocity_threshold: 1.0 # ObjectTypesToCheck object_types_to_check: check_car: true From 34e4ac35bde3cf2dbec366f9b4f02e6837277ebf Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Tue, 19 Sep 2023 09:38:37 +0900 Subject: [PATCH 182/446] refactor(perception): rearrange clustering pipeline parameters (#567) * fix: use downsample before compare map Signed-off-by: badai-nguyen * fix: remove downsample after compare map Signed-off-by: badai-nguyen * fix: add low range crop filter param Signed-off-by: badai-nguyen * chore: refactor Signed-off-by: badai-nguyen * chore: typo Signed-off-by: badai-nguyen --------- Signed-off-by: badai-nguyen --- .../clustering/compare_map.param.yaml | 20 ------------------- .../detection/clustering/outlier.param.yaml | 8 -------- .../clustering/voxel_grid.param.yaml | 7 ------- ...el_grid_based_euclidean_cluster.param.yaml | 14 +++++++------ .../pointcloud_map_filter.param.yaml | 2 -- .../tier4_perception_component.launch.xml | 5 ----- 6 files changed, 8 insertions(+), 48 deletions(-) delete mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/compare_map.param.yaml delete mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/outlier.param.yaml delete mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/compare_map.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/compare_map.param.yaml deleted file mode 100644 index 3dd303464a..0000000000 --- a/autoware_launch/config/perception/object_recognition/detection/clustering/compare_map.param.yaml +++ /dev/null @@ -1,20 +0,0 @@ -/**: - ros__parameters: - - # distance threshold for compare compare - distance_threshold: 0.5 - - # publish voxelized map pointcloud for debug - publish_debug_pcd: False - - # use dynamic map loading - use_dynamic_map_loading: True - - # time interval to check dynamic map loading - timer_interval_ms: 100 - - # distance threshold for dynamic map update - map_update_distance_threshold: 10.0 - - # radius map for dynamic map loading - map_loader_radius: 150.0 diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/outlier.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/outlier.param.yaml deleted file mode 100644 index 1962fba1f3..0000000000 --- a/autoware_launch/config/perception/object_recognition/detection/clustering/outlier.param.yaml +++ /dev/null @@ -1,8 +0,0 @@ -/**: - ros__parameters: - input_frame: base_link - output_frame: base_link - voxel_size_x: 0.3 - voxel_size_y: 0.3 - voxel_size_z: 100.0 - voxel_points_threshold: 3 diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid.param.yaml deleted file mode 100644 index 3ff32bfbb7..0000000000 --- a/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid.param.yaml +++ /dev/null @@ -1,7 +0,0 @@ -/**: - ros__parameters: - input_frame: base_link - output_frame: base_link - voxel_size_x: 0.15 - voxel_size_y: 0.15 - voxel_size_z: 0.15 diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid_based_euclidean_cluster.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid_based_euclidean_cluster.param.yaml index 2f3de2b789..26b027f007 100644 --- a/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid_based_euclidean_cluster.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/clustering/voxel_grid_based_euclidean_cluster.param.yaml @@ -7,9 +7,11 @@ max_cluster_size: 3000 use_height: false input_frame: "base_link" - max_x: 70.0 - min_x: -70.0 - max_y: 70.0 - min_y: -70.0 - max_z: 4.5 - min_z: -4.5 + + # low height crop box filter param + max_x: 200.0 + min_x: -200.0 + max_y: 200.0 + min_y: -200.0 + max_z: 2.0 + min_z: -10.0 diff --git a/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml b/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml index 0423217582..62b3074c15 100644 --- a/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/pointcloud_filter/pointcloud_map_filter.param.yaml @@ -1,7 +1,5 @@ /**: ros__parameters: - # use downsample filter before compare map - use_down_sample_filter: False # voxel size for downsample filter down_sample_voxel_size: 0.1 diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index cf5b2dd98c..3b133bdf0f 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -21,16 +21,11 @@ - - Date: Tue, 19 Sep 2023 12:11:33 +0900 Subject: [PATCH 183/446] fix(autoware_launch): add radar lanelet filter parameter (#566) Signed-off-by: scepter914 --- .../object_filter/radar_lanelet_filter.param.yaml | 11 +++++++++++ .../components/tier4_perception_component.launch.xml | 4 ++++ 2 files changed, 15 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/object_filter/radar_lanelet_filter.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/object_filter/radar_lanelet_filter.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_filter/radar_lanelet_filter.param.yaml new file mode 100644 index 0000000000..62051e1c5e --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/object_filter/radar_lanelet_filter.param.yaml @@ -0,0 +1,11 @@ +/**: + ros__parameters: + filter_target_label: + UNKNOWN : true + CAR : true + TRUCK : true + BUS : true + TRAILER : true + MOTORCYCLE : true + BICYCLE : true + PEDESTRIAN : true diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 3b133bdf0f..10da418468 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -58,6 +58,10 @@ name="object_recognition_detection_object_merger_distance_threshold_list_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml" /> + Date: Wed, 20 Sep 2023 11:34:52 +0900 Subject: [PATCH 184/446] feat(ekf_lolicazer): add diagnostics parameters (#554) * feat(ekf_lolicazer): add diagnostics parameters Signed-off-by: yamato-ando * remote param Signed-off-by: yamato-ando --------- Signed-off-by: yamato-ando Co-authored-by: yamato-ando --- .../config/localization/ekf_localizer.param.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/autoware_launch/config/localization/ekf_localizer.param.yaml b/autoware_launch/config/localization/ekf_localizer.param.yaml index 4d3f5b9643..8b24b79e71 100644 --- a/autoware_launch/config/localization/ekf_localizer.param.yaml +++ b/autoware_launch/config/localization/ekf_localizer.param.yaml @@ -21,3 +21,9 @@ proc_stddev_yaw_c: 0.005 proc_stddev_vx_c: 10.0 proc_stddev_wz_c: 5.0 + + # for diagnostics + pose_no_update_count_threshold_warn: 50 + pose_no_update_count_threshold_error: 250 + twist_no_update_count_threshold_warn: 50 + twist_no_update_count_threshold_error: 250 From eadccd51de84f142bdfd3bd5214a23d958190d45 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:23:18 +0900 Subject: [PATCH 185/446] feat(ekf_localizer): ignore dead band of velocity sensor (#574) * feat(ekf_localizer): ignore dead band of velocity sensor Signed-off-by: kminoda * style(pre-commit): autofix --------- Signed-off-by: kminoda Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- autoware_launch/config/localization/ekf_localizer.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/localization/ekf_localizer.param.yaml b/autoware_launch/config/localization/ekf_localizer.param.yaml index 8b24b79e71..667217d259 100644 --- a/autoware_launch/config/localization/ekf_localizer.param.yaml +++ b/autoware_launch/config/localization/ekf_localizer.param.yaml @@ -27,3 +27,6 @@ pose_no_update_count_threshold_error: 250 twist_no_update_count_threshold_warn: 50 twist_no_update_count_threshold_error: 250 + + # for velocity measurement limitation (Set 0.0 if you want to ignore) + threshold_observable_velocity_mps: 0.0 # [m/s] From f584821fe617b2ec0fc9b4024ff0db9449f65fe4 Mon Sep 17 00:00:00 2001 From: Alexey Panferov <37497658+lexavtanke@users.noreply.github.com> Date: Wed, 20 Sep 2023 13:00:06 +0300 Subject: [PATCH 186/446] feat(perception): add data_path argument to launch file (#577) * feat(perception): add data_path argument to launch file Signed-off-by: Alexey Panferov * style(pre-commit): autofix --------- Signed-off-by: Alexey Panferov Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- autoware_launch/launch/autoware.launch.xml | 5 ++++- .../launch/components/tier4_perception_component.launch.xml | 6 ++++-- autoware_launch/launch/e2e_simulator.launch.xml | 2 ++ autoware_launch/launch/logging_simulator.launch.xml | 1 + autoware_launch/launch/planning_simulator.launch.xml | 2 ++ 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index 1a4fbb70f4..afb65c669d 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -6,6 +6,7 @@ + @@ -89,7 +90,9 @@ - + + + diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 10da418468..342396934c 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -8,6 +8,7 @@ default="obstacle_pointcloud" description="options: obstacle_pointcloud, occupancy_grid (occupancy_grid_map_method must be laserscan_based_occupancy_grid_map)" /> + @@ -19,6 +20,7 @@ + - + - + diff --git a/autoware_launch/launch/e2e_simulator.launch.xml b/autoware_launch/launch/e2e_simulator.launch.xml index 9ce8a421e9..5db03b94a9 100644 --- a/autoware_launch/launch/e2e_simulator.launch.xml +++ b/autoware_launch/launch/e2e_simulator.launch.xml @@ -4,6 +4,7 @@ + @@ -36,6 +37,7 @@ + diff --git a/autoware_launch/launch/logging_simulator.launch.xml b/autoware_launch/launch/logging_simulator.launch.xml index 6621c15ea3..7eb13135d3 100644 --- a/autoware_launch/launch/logging_simulator.launch.xml +++ b/autoware_launch/launch/logging_simulator.launch.xml @@ -5,6 +5,7 @@ + diff --git a/autoware_launch/launch/planning_simulator.launch.xml b/autoware_launch/launch/planning_simulator.launch.xml index 0a97454854..fdc86ebba7 100644 --- a/autoware_launch/launch/planning_simulator.launch.xml +++ b/autoware_launch/launch/planning_simulator.launch.xml @@ -4,6 +4,7 @@ + @@ -37,6 +38,7 @@ + From 86aa396e604f93e0301b68ca495c8172bf7502a1 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Thu, 21 Sep 2023 14:13:09 +0900 Subject: [PATCH 187/446] feat(vehicle_cmd_gate): add steering angle and rate filter (#576) Signed-off-by: Takamasa Horibe --- .../control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml index 92844c61f6..191e894622 100644 --- a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml +++ b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml @@ -15,6 +15,8 @@ nominal: vel_lim: 25.0 reference_speed_points: [20.0, 30.0] + steer_lim: [1.0, 0.8] + steer_rate_lim: [1.0, 0.8] lon_acc_lim: [5.0, 4.0] lon_jerk_lim: [5.0, 4.0] lat_acc_lim: [5.0, 4.0] @@ -23,6 +25,8 @@ on_transition: vel_lim: 50.0 reference_speed_points: [20.0, 30.0] + steer_lim: [1.0, 0.8] + steer_rate_lim: [1.0, 0.8] lon_acc_lim: [1.0, 0.9] lon_jerk_lim: [0.5, 0.4] lat_acc_lim: [2.0, 1.8] From b5e61161467e8ac39ebf69edc806229fd00fca73 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Thu, 21 Sep 2023 14:36:40 +0900 Subject: [PATCH 188/446] feat: prevent start planner execution in the middle of the road (#579) * start planner:new param: dist th to middle of road Signed-off-by: Daniel Sanchez * refactor param order Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .../behavior_path_planner/start_planner/start_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 4fa1c09958..ee0edd21c9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -7,6 +7,7 @@ collision_check_margin: 1.0 collision_check_distance_from_end: 1.0 th_moving_object_velocity: 1.0 + th_distance_to_middle_of_the_road: 0.1 # shift pull out enable_shift_pull_out: true check_shift_path_lane_departure: false From 484b7eabc3d84b9e7aa6dcc35f3d159d068d2cfd Mon Sep 17 00:00:00 2001 From: TaikiYamada4 <129915538+TaikiYamada4@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:07:03 +0900 Subject: [PATCH 189/446] refactor(ndt_scan_matcher): match ndt_scan_matcher.param.yaml (#583) * Added ndt_base_link parameter in ndt_scan_matcher.param.yaml Deleted neighborhood_search_mathod paramter in ndt_scan_matcher.param.yaml Signed-off-by: TaikiYamada4 * Copy-pasted the ndt_scan_matcher.param.yaml from universe Signed-off-by: TaikiYamada4 * Correct spelling Signed-off-by: TaikiYamada4 --------- Signed-off-by: TaikiYamada4 --- .../config/localization/ndt_scan_matcher.param.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index 3a99927b41..2785938d5e 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -6,6 +6,9 @@ # Vehicle reference frame base_frame: "base_link" + # NDT reference frame + ndt_base_frame: "ndt_base_link" + # Subscriber queue size input_sensor_points_queue_size: 1 @@ -46,10 +49,6 @@ # Tolerance of distance difference between two initial poses used for linear interpolation. [m] initial_pose_distance_tolerance_m: 10.0 - # neighborhood search method - # 0=KDTREE, 1=DIRECT26, 2=DIRECT7, 3=DIRECT1 - neighborhood_search_method: 0 - # Number of threads used for parallel computing num_threads: 4 @@ -80,6 +79,7 @@ # Radius of input LiDAR range (used for diagnostics of dynamic map loading) lidar_radius: 100.0 + # cspell: ignore degrounded # A flag for using scan matching score based on de-grounded LiDAR scan estimate_scores_for_degrounded_scan: false From b7dc59efc310ea0b637492dda8df8db9a59902ae Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Fri, 22 Sep 2023 16:39:41 +0900 Subject: [PATCH 190/446] feat(planning_launch): add config for regulate lane change (#582) Signed-off-by: Fumiya Watanabe --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 372ed9041c..7e58a27e28 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -62,6 +62,11 @@ check_objects_on_other_lanes: true use_all_predicted_path: true + # lane change regulations + regulation: + crosswalk: false + intersection: false + # lane change cancel cancel: enable_on_prepare_phase: true From 6e1174a405888b5242617aa02c6620fdf20b0dcd Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Fri, 22 Sep 2023 17:16:46 +0900 Subject: [PATCH 191/446] fix(motion_velocity_smoother): change curvature calculation distance parameter (#556) Signed-off-by: Takamasa Horibe --- .../motion_velocity_smoother.param.yaml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml index 868b1bd15c..1fc5d3d670 100644 --- a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml @@ -7,12 +7,19 @@ # external velocity limit parameter margin_to_insert_external_velocity_limit: 0.3 # margin distance to insert external velocity limit [m] - # curve parameters + # -- curve parameters -- + # common parameters + curvature_calculation_distance: 5.0 # distance of points while curvature is calculating for the steer rate and lateral acceleration limit [m] + # lateral acceleration limit parameters max_lateral_accel: 1.0 # max lateral acceleration limit [m/ss] min_curve_velocity: 2.74 # min velocity at lateral acceleration limit and steering angle rate limit [m/s] decel_distance_before_curve: 3.5 # slow speed distance before a curve for lateral acceleration limit decel_distance_after_curve: 2.0 # slow speed distance after a curve for lateral acceleration limit min_decel_for_lateral_acc_lim_filter: -2.5 # deceleration limit applied in the lateral acceleration filter to avoid sudden braking [m/ss] + # steering angle rate limit parameters + max_steering_angle_rate: 40.0 # maximum steering angle rate [degree/s] + resample_ds: 0.1 # distance between trajectory points [m] + curvature_threshold: 0.02 # if curvature > curvature_threshold, steeringRateLimit is triggered [1/m] # engage & replan parameters replan_vel_deviation: 5.53 # velocity deviation to replan initial velocity [m/s] @@ -48,11 +55,7 @@ post_sparse_resample_dt: 0.1 # resample time interval for sparse sampling [s] post_sparse_min_interval_distance: 1.0 # minimum points-interval length for sparse sampling [m] - # steering angle rate limit parameters - max_steering_angle_rate: 40.0 # maximum steering angle rate [degree/s] - resample_ds: 0.1 # distance between trajectory points [m] - curvature_threshold: 0.02 # if curvature > curvature_threshold, steeringRateLimit is triggered [1/m] - curvature_calculation_distance: 1.0 # distance of points while curvature is calculating [m] + # system over_stop_velocity_warn_thr: 1.389 # used to check if the optimization exceeds the input velocity on the stop point From 76a3f658add1e040c7872648385a5283a4ff0be7 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Sun, 24 Sep 2023 18:07:05 +0900 Subject: [PATCH 192/446] fix(start/goal_planner): resample path and make params (#586) Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 1 + .../behavior_path_planner/start_planner/start_planner.param.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 0c11077ea6..70dd904863 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -5,6 +5,7 @@ th_arrived_distance: 1.0 th_stopped_velocity: 0.01 th_stopped_time: 2.0 # It must be greater than the state_machine's. + center_line_path_interval: 1.0 # goal search goal_search: diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index ee0edd21c9..352a0bf350 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -8,6 +8,7 @@ collision_check_distance_from_end: 1.0 th_moving_object_velocity: 1.0 th_distance_to_middle_of_the_road: 0.1 + center_line_path_interval: 1.0 # shift pull out enable_shift_pull_out: true check_shift_path_lane_departure: false From 7dbcf0a450f15796f35b21b883aac0a016f0cda0 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Mon, 25 Sep 2023 09:47:41 +0900 Subject: [PATCH 193/446] chore(motion_velocity_smoother): add enable curve filtering param (#580) Signed-off-by: Takamasa Horibe --- .../motion_velocity_smoother.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml index 1fc5d3d670..235c76a5c1 100644 --- a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml @@ -11,12 +11,14 @@ # common parameters curvature_calculation_distance: 5.0 # distance of points while curvature is calculating for the steer rate and lateral acceleration limit [m] # lateral acceleration limit parameters + enable_lateral_acc_limit: true # To toggle the lateral acc filter on and off. You can switch it dynamically at runtime. max_lateral_accel: 1.0 # max lateral acceleration limit [m/ss] min_curve_velocity: 2.74 # min velocity at lateral acceleration limit and steering angle rate limit [m/s] decel_distance_before_curve: 3.5 # slow speed distance before a curve for lateral acceleration limit decel_distance_after_curve: 2.0 # slow speed distance after a curve for lateral acceleration limit min_decel_for_lateral_acc_lim_filter: -2.5 # deceleration limit applied in the lateral acceleration filter to avoid sudden braking [m/ss] # steering angle rate limit parameters + enable_steering_rate_limit: true # To toggle the steer rate filter on and off. You can switch it dynamically at runtime. max_steering_angle_rate: 40.0 # maximum steering angle rate [degree/s] resample_ds: 0.1 # distance between trajectory points [m] curvature_threshold: 0.02 # if curvature > curvature_threshold, steeringRateLimit is triggered [1/m] @@ -55,8 +57,6 @@ post_sparse_resample_dt: 0.1 # resample time interval for sparse sampling [s] post_sparse_min_interval_distance: 1.0 # minimum points-interval length for sparse sampling [m] - - # system over_stop_velocity_warn_thr: 1.389 # used to check if the optimization exceeds the input velocity on the stop point From 49e260eb19397ff0eda99b22b445ecb514d4f9b2 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 25 Sep 2023 10:49:56 +0900 Subject: [PATCH 194/446] feat(autoware_launch): add check_footprint_inside_lanes in mission_planner (#589) Signed-off-by: Takayuki Murooka --- .../mission_planning/mission_planner/mission_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/mission_planning/mission_planner/mission_planner.param.yaml b/autoware_launch/config/planning/mission_planning/mission_planner/mission_planner.param.yaml index 98c28344ea..9b7dcffbc6 100644 --- a/autoware_launch/config/planning/mission_planning/mission_planner/mission_planner.param.yaml +++ b/autoware_launch/config/planning/mission_planning/mission_planner/mission_planner.param.yaml @@ -9,3 +9,4 @@ reroute_time_threshold: 10.0 minimum_reroute_length: 30.0 consider_no_drivable_lanes: false # This flag is for considering no_drivable_lanes in planning or not. + check_footprint_inside_lanes: true From 34b006265a453a0ed094ed60fe52efe4cb0431e3 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 25 Sep 2023 10:53:45 +0900 Subject: [PATCH 195/446] feat(autoware_launch): add stop_distance_threshold in merge_from_private (#587) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/intersection.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 00df2e2ced..def2335e20 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -56,3 +56,4 @@ merge_from_private: stop_line_margin: 3.0 stop_duration_sec: 1.0 + stop_distance_threshold: 1.0 From 36820f2547187aabe727d6624ce04adb5b715388 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 25 Sep 2023 14:04:52 +0900 Subject: [PATCH 196/446] feat(autoware_launch): add traffic protected level for amber color in intersection (#588) * feat(autoware_launch): add traffic protected level for amber color in intersection Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/intersection.param.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index def2335e20..5b626ec19d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -24,12 +24,15 @@ state_transit_margin_time: 1.0 min_predicted_path_confidence: 0.05 minimum_ego_predicted_velocity: 1.388 # [m/s] - normal: - collision_start_margin_time: 4.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object - collision_end_margin_time: 6.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object - relaxed: + fully_prioritized: collision_start_margin_time: 2.0 collision_end_margin_time: 0.0 + partially_prioritized: + collision_start_margin_time: 2.0 + collision_end_margin_time: 2.0 + not_prioritized: + collision_start_margin_time: 4.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object + collision_end_margin_time: 6.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object keep_detection_vel_thr: 0.833 # == 3.0km/h. keep detection if ego is ego.vel < keep_detection_vel_thr occlusion: From f4ed3ba8d97affb76b11fa38044238ac21af6b51 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Mon, 25 Sep 2023 16:23:49 +0900 Subject: [PATCH 197/446] feat(obstacle_cruise_planner): add parameters for a new feature (#581) * feat: add parameters for the feature "cosider-current-ego-pose" Signed-off-by: Yuki Takagi * set the params to be merged. use stop planner as cruise planner type (conventional setting) polygon expansion in obstacle_cruise_planner is true Signed-off-by: Yuki Takagi --------- Signed-off-by: Yuki Takagi --- .../obstacle_cruise_planner.param.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index aadd0ccd02..cb4d6a68c5 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -106,6 +106,13 @@ successive_num_to_entry_slow_down_condition: 5 successive_num_to_exit_slow_down_condition: 5 + # consider the current ego pose (it is not the nearest pose on the reference trajectory) + # Both the lateral error and the yaw error are assumed to decrease to zero by the time duration "time_to_convergence" + # The both errors decrease with constant rates against the time. + consider_current_pose: + enable_to_consider_current_pose: true + time_to_convergence: 1.5 #[s] + cruise: pid_based_planner: use_velocity_limit_based_planner: true From 50175784389ea1d3bb4fc31269d363a5ddbb5d21 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 25 Sep 2023 23:31:33 +0900 Subject: [PATCH 198/446] feat(intersection): ensure-temporal-stop-before-upcoming-lane (#578) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 5b626ec19d..a932254140 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -51,6 +51,7 @@ possible_object_bbox: [1.5, 2.5] # [m x m] ignore_parked_vehicle_speed_threshold: 0.8333 # == 3.0km/h stop_release_margin_time: 1.5 # [s] + temporal_stop_before_attention_area: false enable_rtc: intersection: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval From 5b7e16cc0c34159202b5ce6e29bcad6212a9d02b Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 26 Sep 2023 12:15:09 +0900 Subject: [PATCH 199/446] feat(goal_planner): sort goal candidates priority by weighted distance (#591) Signed-off-by: kosuke55 --- .../goal_planner/goal_planner.param.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 70dd904863..e1108d56c9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -9,7 +9,10 @@ # goal search goal_search: - search_priority: "efficient_path" # "efficient_path" or "close_goal" + goal_priority: "minimum_weighted_distance" # "minimum_weighted_distance" or "minimum_longitudinal_distance" + minimum_weighted_distance: + lateral_weight: 40.0 + path_priority: "efficient_path" # "efficient_path" or "close_goal" parking_policy: "left_side" # "left_side" or "right_side" forward_goal_search_length: 20.0 backward_goal_search_length: 20.0 From 45f7e581cbc17cdf82737c2c12cd5e7576c90773 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Tue, 26 Sep 2023 15:19:07 +0900 Subject: [PATCH 200/446] feat(lane_change): enable lane change in crosswalk/intersection if ego vehicle gets stuck (#590) Signed-off-by: Fumiya Watanabe --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 7e58a27e28..1accb1f709 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -67,6 +67,11 @@ crosswalk: false intersection: false + # ego vehicle stuck detection + stuck_detection: + velocity: 0.1 # [m/s] + stop_time: 3.0 # [s] + # lane change cancel cancel: enable_on_prepare_phase: true From bf07c8aeb6bb1aa42f0e3e6db2eb5e39cdc5377e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Yavuz=20K=C3=B6seo=C4=9Flu?= Date: Tue, 26 Sep 2023 10:59:29 +0300 Subject: [PATCH 201/446] feat(ndt_scan_matcher): adding exe time parameter (#559) add critical_upper_bound_exe_time_ms for ndt --- .../config/localization/ndt_scan_matcher.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index 2785938d5e..4a22059bda 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -85,3 +85,6 @@ # If lidar_point.z - base_link.z <= this threshold , the point will be removed z_margin_for_ground_removal: 0.8 + + # The execution time which means probably NDT cannot matches scans properly + critical_upper_bound_exe_time_ms: 100 # [ms] From 4dd0acab6cd58353bbed3c0ae46415c46b19c833 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 26 Sep 2023 18:45:00 +0900 Subject: [PATCH 202/446] feat(autoware_launch): move dynamic_avoidance last (#593) Signed-off-by: Takayuki Murooka --- .../scene_module_manager.param.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index a3c0194d03..ff4b486ef9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -9,7 +9,7 @@ enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true keep_last: false - priority: 7 + priority: 6 max_module_size: 1 external_request_lane_change_right: @@ -18,7 +18,7 @@ enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true keep_last: false - priority: 7 + priority: 6 max_module_size: 1 lane_change_left: @@ -27,7 +27,7 @@ enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true keep_last: false - priority: 6 + priority: 5 max_module_size: 1 lane_change_right: @@ -36,7 +36,7 @@ enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true keep_last: false - priority: 6 + priority: 5 max_module_size: 1 start_planner: @@ -72,7 +72,7 @@ enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false keep_last: false - priority: 5 + priority: 4 max_module_size: 1 avoidance_by_lc: @@ -81,7 +81,7 @@ enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false keep_last: false - priority: 4 + priority: 3 max_module_size: 1 dynamic_avoidance: @@ -89,6 +89,6 @@ enable_rtc: true enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true - keep_last: false - priority: 3 + keep_last: true + priority: 7 max_module_size: 1 From 97d8d601e03a6f93f68dab8e8ed01afb0a6fee2b Mon Sep 17 00:00:00 2001 From: Tomoya Kimura Date: Tue, 26 Sep 2023 22:34:57 +0900 Subject: [PATCH 203/446] feat: add system monitor param file for awsim (#568) * feat: add system monitor param file for awsim Signed-off-by: tomoya.kimura * feat: use system_error_monitor.awsim.param in e2e_simulator.launch Signed-off-by: tomoya.kimura --------- Signed-off-by: tomoya.kimura --- .../system_error_monitor.awsim.param.yaml | 52 +++++++++++++++++++ autoware_launch/launch/autoware.launch.xml | 1 + .../tier4_system_component.launch.xml | 4 +- .../launch/e2e_simulator.launch.xml | 6 +++ 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml new file mode 100644 index 0000000000..2f98f9d0e2 --- /dev/null +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml @@ -0,0 +1,52 @@ +# Description: +# name: diag name +# sf_at: diag level where it becomes Safe Fault +# lf_at: diag level where it becomes Latent Fault +# spf_at: diag level where it becomes Single Point Fault +# auto_recovery: Determines whether the system will automatically recover when it recovers from an error. +# +# Note: +# empty-value for sf_at, lf_at and spf_at is "none" +# default values are: +# sf_at: "none" +# lf_at: "warn" +# spf_at: "error" +# auto_recovery: "true" +--- +/**: + ros__parameters: + required_modules: + autonomous_driving: + /autoware/control/autonomous_driving/node_alive_monitoring: default + /autoware/control/autonomous_driving/performance_monitoring/lane_departure: default + /autoware/control/control_command_gate/node_alive_monitoring: default + + /autoware/localization/node_alive_monitoring: default + /autoware/localization/performance_monitoring/matching_score: { sf_at: "warn", lf_at: "none", spf_at: "none" } + /autoware/localization/performance_monitoring/localization_accuracy: { sf_at: "warn", lf_at: "none", spf_at: "none" } + + /autoware/map/node_alive_monitoring: default + + /autoware/perception/node_alive_monitoring: default + + /autoware/planning/node_alive_monitoring: default + /autoware/planning/performance_monitoring/trajectory_validation: default + + # /autoware/sensing/node_alive_monitoring: default + + /autoware/system/node_alive_monitoring: default + /autoware/system/emergency_stop_operation: default + /autoware/system/service_log_checker: { sf_at: "warn", lf_at: "none", spf_at: "none" } + # /autoware/system/resource_monitoring: { sf_at: "warn", lf_at: "none", spf_at: "none" } + + /autoware/vehicle/node_alive_monitoring: default + + external_control: + /autoware/control/control_command_gate/node_alive_monitoring: default + /autoware/control/external_control/external_command_selector/node_alive_monitoring: default + + /autoware/system/node_alive_monitoring: default + /autoware/system/emergency_stop_operation: default + /autoware/system/service_log_checker: { sf_at: "warn", lf_at: "none", spf_at: "none" } + + /autoware/vehicle/node_alive_monitoring: default diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index afb65c669d..5d98c9388f 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -33,6 +33,7 @@ + diff --git a/autoware_launch/launch/components/tier4_system_component.launch.xml b/autoware_launch/launch/components/tier4_system_component.launch.xml index 3cfc6d8541..1bd74ccbbf 100644 --- a/autoware_launch/launch/components/tier4_system_component.launch.xml +++ b/autoware_launch/launch/components/tier4_system_component.launch.xml @@ -1,5 +1,7 @@ + + @@ -10,7 +12,7 @@ - + diff --git a/autoware_launch/launch/e2e_simulator.launch.xml b/autoware_launch/launch/e2e_simulator.launch.xml index 5db03b94a9..fe8d1de1d8 100644 --- a/autoware_launch/launch/e2e_simulator.launch.xml +++ b/autoware_launch/launch/e2e_simulator.launch.xml @@ -27,6 +27,11 @@ + @@ -56,6 +61,7 @@ + From 98da1a0eaa814b11a0da6b05d12c3e740482539b Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 27 Sep 2023 07:53:38 +0900 Subject: [PATCH 204/446] feat(autoware_launch): add max_obstacle_vel in dynamic_avoidance (#595) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index a05bdda099..bf9c815405 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -16,6 +16,7 @@ motorcycle: true pedestrian: false + max_obstacle_vel: 100.0 # [m/s] min_obstacle_vel: 0.0 # [m/s] successive_num_to_entry_dynamic_avoidance_condition: 5 From f9edba40b5f101d4304ee97920d5b4b1a43ad379 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 27 Sep 2023 20:31:28 +0900 Subject: [PATCH 205/446] feat(goal_planner): extend goal search area (#592) feat(goal_planner): extend goal search are Signed-off-by: kosuke55 --- .../goal_planner/goal_planner.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index e1108d56c9..10bb6453b4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -14,12 +14,12 @@ lateral_weight: 40.0 path_priority: "efficient_path" # "efficient_path" or "close_goal" parking_policy: "left_side" # "left_side" or "right_side" - forward_goal_search_length: 20.0 + forward_goal_search_length: 40.0 backward_goal_search_length: 20.0 goal_search_interval: 2.0 longitudinal_margin: 3.0 - max_lateral_offset: 0.5 - lateral_offset_interval: 0.25 + max_lateral_offset: 1.0 + lateral_offset_interval: 0.5 ignore_distance_from_lane_start: 0.0 margin_from_boundary: 0.75 From 3d050e3cc65de2f01b9c61ffbf6cb4324350ff73 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 27 Sep 2023 21:09:17 +0900 Subject: [PATCH 206/446] feat(goal_planner): change minimum_request_length 0.0 (#598) Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 10bb6453b4..a59786ccdd 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -41,7 +41,7 @@ # pull over pull_over: - minimum_request_length: 100.0 + minimum_request_length: 0.0 pull_over_velocity: 3.0 pull_over_minimum_velocity: 1.38 decide_path_distance: 10.0 From 051da834e9aaf0fdec46175a9ddc09ba7637cced Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 27 Sep 2023 22:27:19 +0900 Subject: [PATCH 207/446] feat(start_planner): enable divide_pull_out_path (#600) Signed-off-by: kosuke55 --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 352a0bf350..45a214b7d3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -21,7 +21,7 @@ maximum_curvature: 0.07 # geometric pull out enable_geometric_pull_out: true - divide_pull_out_path: false + divide_pull_out_path: true geometric_pull_out_velocity: 1.0 arc_path_interval: 1.0 lane_departure_margin: 0.2 From 6b6f00622e67a23886672850119b5a51dd502554 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Wed, 27 Sep 2023 22:27:36 +0900 Subject: [PATCH 208/446] feat(start_planner): change th_distance_to_middle_of_the_road 0.5 (#599) Signed-off-by: kosuke55 --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 45a214b7d3..5487b0fde9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -7,7 +7,7 @@ collision_check_margin: 1.0 collision_check_distance_from_end: 1.0 th_moving_object_velocity: 1.0 - th_distance_to_middle_of_the_road: 0.1 + th_distance_to_middle_of_the_road: 0.5 center_line_path_interval: 1.0 # shift pull out enable_shift_pull_out: true From 557b4ccac99b913cda971844fb1736e0465657b5 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Thu, 28 Sep 2023 09:14:37 +0900 Subject: [PATCH 209/446] feat(goal_planner): prioritize goals before objects to avoid (#594) * feat(goal_planner): extend goal search are Signed-off-by: kosuke55 * feat(goal_planner): prioritize goals before objects to avoid Signed-off-by: kosuke55 --------- Signed-off-by: kosuke55 --- .../goal_planner/goal_planner.param.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index a59786ccdd..f52c36179b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -12,7 +12,7 @@ goal_priority: "minimum_weighted_distance" # "minimum_weighted_distance" or "minimum_longitudinal_distance" minimum_weighted_distance: lateral_weight: 40.0 - path_priority: "efficient_path" # "efficient_path" or "close_goal" + prioritize_goals_before_objects: true parking_policy: "left_side" # "left_side" or "right_side" forward_goal_search_length: 40.0 backward_goal_search_length: 20.0 @@ -47,6 +47,8 @@ decide_path_distance: 10.0 maximum_deceleration: 1.0 maximum_jerk: 1.0 + path_priority: "efficient_path" # "efficient_path" or "close_goal" + efficient_path_order: ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] # only lane based pull over(exculde freespace parking) # shift parking shift_parking: From 40281243c5ebb012ed9f261ae77a1982c0f72ad4 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Thu, 28 Sep 2023 13:24:05 +0900 Subject: [PATCH 210/446] feat(intersection): use planned velocity from upstream modules (#597) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index a932254140..4042adeb36 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -34,6 +34,8 @@ collision_start_margin_time: 4.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object collision_end_margin_time: 6.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object keep_detection_vel_thr: 0.833 # == 3.0km/h. keep detection if ego is ego.vel < keep_detection_vel_thr + use_upstream_velocity: true # flag to use the planned velocity profile from the upstream module + minimum_upstream_velocity: 0.01 # [m/s] minimum velocity to avoid null division for the stop line from the upstream velocity occlusion: enable: false From 206d439e074eda2c9c0faedef84e3bbfa55fa93d Mon Sep 17 00:00:00 2001 From: TaikiYamada4 <129915538+TaikiYamada4@users.noreply.github.com> Date: Thu, 28 Sep 2023 17:48:52 +0900 Subject: [PATCH 211/446] refactor(ndt_scan_matcher): modified ndt_scan_matcher.param.yaml to match with the one in universe (#596) Modified ndt_scan_matcher.param.yaml to match with the one in universe Signed-off-by: TaikiYamada4 --- .../config/localization/ndt_scan_matcher.param.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index 4a22059bda..718bc6ca3b 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -9,6 +9,9 @@ # NDT reference frame ndt_base_frame: "ndt_base_link" + # map frame + map_frame: "map" + # Subscriber queue size input_sensor_points_queue_size: 1 @@ -53,7 +56,7 @@ num_threads: 4 # The covariance of output pose - # Do note that this covariance matrix is empirically derived + # Note that this covariance matrix is empirically derived output_pose_covariance: [ 0.0225, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -86,5 +89,5 @@ # If lidar_point.z - base_link.z <= this threshold , the point will be removed z_margin_for_ground_removal: 0.8 - # The execution time which means probably NDT cannot matches scans properly - critical_upper_bound_exe_time_ms: 100 # [ms] + # The execution time which means probably NDT cannot matches scans properly. [ms] + critical_upper_bound_exe_time_ms: 100 From 901a04495f77488f0fa630e621dbd95b36e3ebbe Mon Sep 17 00:00:00 2001 From: Berkay Karaman Date: Sun, 1 Oct 2023 17:07:18 +0300 Subject: [PATCH 212/446] feat(autoware_launch): add predicted_path_checker package (#385) Signed-off-by: Berkay Karaman --- .../predicted_path_checker.param.yaml | 22 +++++++++++++++++++ .../tier4_control_component.launch.xml | 3 +++ 2 files changed, 25 insertions(+) create mode 100644 autoware_launch/config/control/predicted_path_checker/predicted_path_checker.param.yaml diff --git a/autoware_launch/config/control/predicted_path_checker/predicted_path_checker.param.yaml b/autoware_launch/config/control/predicted_path_checker/predicted_path_checker.param.yaml new file mode 100644 index 0000000000..780d86b5e9 --- /dev/null +++ b/autoware_launch/config/control/predicted_path_checker/predicted_path_checker.param.yaml @@ -0,0 +1,22 @@ +/**: + ros__parameters: + # Node + update_rate: 10.0 + delay_time: 0.17 + max_deceleration: 1.5 + resample_interval: 0.5 + stop_margin: 0.5 # [m] + ego_nearest_dist_threshold: 3.0 # [m] + ego_nearest_yaw_threshold: 1.046 # [rad] = 60 [deg] + min_trajectory_check_length: 1.5 # [m] + trajectory_check_time: 3.0 + distinct_point_distance_threshold: 0.3 + distinct_point_yaw_threshold: 5.0 # [deg] + filtering_distance_threshold: 1.5 # [m] + use_object_prediction: true + + collision_checker_params: + width_margin: 0.2 + chattering_threshold: 0.2 + z_axis_filtering_buffer: 0.3 + enable_z_axis_obstacle_filtering: false diff --git a/autoware_launch/launch/components/tier4_control_component.launch.xml b/autoware_launch/launch/components/tier4_control_component.launch.xml index 8b29135048..d15e050d7a 100644 --- a/autoware_launch/launch/components/tier4_control_component.launch.xml +++ b/autoware_launch/launch/components/tier4_control_component.launch.xml @@ -5,6 +5,7 @@ + @@ -42,5 +43,7 @@ + + From da1cfda260d9f488ce617b916f687e42400b0a9e Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Mon, 2 Oct 2023 10:55:18 +0900 Subject: [PATCH 213/446] feat(lane_change): expand target lanes for object filtering (#601) Signed-off-by: Muhammad Zulfaqar Azmi --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 1accb1f709..1be71cae53 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -38,6 +38,11 @@ longitudinal_distance_min_threshold: 3.0 longitudinal_velocity_delta_time: 0.8 + # lane expansion for object filtering + lane_expansion: + left_offset: 0.0 # [m] + right_offset: 0.0 # [m] + # lateral acceleration map lateral_acceleration: velocity: [0.0, 4.0, 10.0] From c1e98dde3f7d6b0c89b29c97376c83cb349a73e9 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 2 Oct 2023 12:06:39 +0900 Subject: [PATCH 214/446] feat(behavior_path_planner): update rss param (#604) update param Signed-off-by: kyoichi-sugahara --- .../goal_planner/goal_planner.param.yaml | 10 +++++----- .../start_planner/start_planner.param.yaml | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index f52c36179b..0f1b441bed 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -118,7 +118,7 @@ path_safety_check: # EgoPredictedPath ego_predicted_path: - min_velocity: 0.0 + min_velocity: 1.0 acceleration: 1.0 max_velocity: 1.0 time_horizon_for_front_object: 10.0 @@ -164,11 +164,11 @@ check_all_predicted_path: true publish_debug_marker: false rss_params: - rear_vehicle_reaction_time: 1.0 + rear_vehicle_reaction_time: 2.0 rear_vehicle_safety_time_margin: 1.0 - lateral_distance_max_threshold: 1.0 - longitudinal_distance_min_threshold: 1.0 - longitudinal_velocity_delta_time: 1.0 + lateral_distance_max_threshold: 2.0 + longitudinal_distance_min_threshold: 3.0 + longitudinal_velocity_delta_time: 0.8 # hysteresis factor to expand/shrink polygon with the value hysteresis_factor_expand_rate: 1.0 # temporary diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 5487b0fde9..1424b58d22 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -127,11 +127,11 @@ check_all_predicted_path: true publish_debug_marker: false rss_params: - rear_vehicle_reaction_time: 1.0 + rear_vehicle_reaction_time: 2.0 rear_vehicle_safety_time_margin: 1.0 - lateral_distance_max_threshold: 1.0 - longitudinal_distance_min_threshold: 1.0 - longitudinal_velocity_delta_time: 1.0 + lateral_distance_max_threshold: 2.0 + longitudinal_distance_min_threshold: 3.0 + longitudinal_velocity_delta_time: 0.8 # hysteresis factor to expand/shrink polygon hysteresis_factor_expand_rate: 1.0 # temporary From 3fa16a194159cfca6664b293d4e6bb73a86b6c7a Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Tue, 3 Oct 2023 06:57:28 +0900 Subject: [PATCH 215/446] feat(localization_error_monitor): update parameter (#614) Signed-off-by: kminoda --- .../config/localization/localization_error_monitor.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/localization/localization_error_monitor.param.yaml b/autoware_launch/config/localization/localization_error_monitor.param.yaml index 2aa28014ea..def5c80164 100644 --- a/autoware_launch/config/localization/localization_error_monitor.param.yaml +++ b/autoware_launch/config/localization/localization_error_monitor.param.yaml @@ -1,7 +1,7 @@ /**: ros__parameters: scale: 3.0 - error_ellipse_size: 1.0 - warn_ellipse_size: 0.8 + error_ellipse_size: 1.5 + warn_ellipse_size: 1.2 error_ellipse_size_lateral_direction: 0.3 warn_ellipse_size_lateral_direction: 0.25 From dee409f7716b324a29e43dc9a3bf6f14fa5968af Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 3 Oct 2023 10:55:17 +0900 Subject: [PATCH 216/446] fix(autoware_launch): improve stop decision in out_of_lane (#615) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/out_of_lane.param.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml index 510dc86ef6..c74c5b3d87 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml @@ -24,8 +24,7 @@ action: # action to insert in the path if an object causes a conflict at an overlap skip_if_over_max_decel: true # if true, do not take an action that would cause more deceleration than the maximum allowed - strict: true # if true, when a decision is taken to avoid entering a lane, the stop point will make sure no lane at all is entered by ego - # if false, ego stops just before entering a lane but may then be overlapping another lane. + precision: 0.1 # [m] precision when inserting a stop pose in the path distance_buffer: 1.5 # [m] buffer distance to try to keep between the ego footprint and lane slowdown: distance_threshold: 30.0 # [m] insert a slowdown when closer than this distance from an overlap From b951b5190232b3bd36b982a355dbbe6041e0b0f3 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 3 Oct 2023 12:11:39 +0900 Subject: [PATCH 217/446] feat(autoware_launch): dynamic timeout for no intention to walk decision in crosswalk (#610) * feat(autoware_launch): dynamic timeout for no intention to walk decision in crosswalk Signed-off-by: Takayuki Murooka * update config Signed-off-by: Takayuki Murooka * revert a parg of config Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 0c12624f3b..4b81a1e687 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -54,7 +54,9 @@ ## param for yielding disable_stop_for_yield_cancel: false # for the crosswalk where there is a traffic signal disable_yield_for_new_stopped_object: false # for the crosswalk where there is a traffic signal - timeout_no_intention_to_walk: 3.0 # [s] if the pedestrian does not move for X seconds after stopping before the crosswalk, the module judge that ego is able to pass first. + # if the pedestrian does not move for X seconds after stopping before the crosswalk, the module judge that ego is able to pass first. + distance_map_for_no_intention_to_walk: [1.0, 5.0] # [m] ascending order + timeout_map_for_no_intention_to_walk: [3.0, 0.0] # [s] timeout_ego_stop_for_yield: 3.0 # [s] the amount of time which ego should be stopping to query whether it yields or not # param for target object filtering From cc47affb1346db5e638ae27736897f3fa03a264f Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 4 Oct 2023 09:49:55 +0900 Subject: [PATCH 218/446] feat(intersection): aggressively peek into attention area if traffic light does not exist (#611) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 4042adeb36..5e74e837bf 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -54,6 +54,9 @@ ignore_parked_vehicle_speed_threshold: 0.8333 # == 3.0km/h stop_release_margin_time: 1.5 # [s] temporal_stop_before_attention_area: false + absence_traffic_light: + creep_velocity: 1.388 # [m/s] + maximum_peeking_distance: 6.0 # [m] enable_rtc: intersection: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval From c1edaf9d71ffa9a653ba7fce376a93f8f5f64276 Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Wed, 4 Oct 2023 15:14:06 +0900 Subject: [PATCH 219/446] perf(ndt_scan_matcher): changed default `initial_estimate_particles_num` to 200 (#618) Changed initial_estimate_particles_num to 200 Signed-off-by: Shintaro Sakoda --- autoware_launch/config/localization/ndt_scan_matcher.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index 718bc6ca3b..cf41a4cf55 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -41,7 +41,7 @@ converged_param_nearest_voxel_transformation_likelihood: 2.3 # The number of particles to estimate initial pose - initial_estimate_particles_num: 100 + initial_estimate_particles_num: 200 # Tolerance of timestamp difference between current time and sensor pointcloud. [sec] lidar_topic_timeout_sec: 1.0 From 5cba1dabfad5dbd6bdbbe446f90cd96db61f9da9 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 4 Oct 2023 21:17:04 +0900 Subject: [PATCH 220/446] feat(intersection): ignore occlusion beyond high curvature point (#619) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 5e74e837bf..ccd3612203 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -57,6 +57,8 @@ absence_traffic_light: creep_velocity: 1.388 # [m/s] maximum_peeking_distance: 6.0 # [m] + attention_lane_crop_curvature_threshold: 0.25 + attention_lane_curvature_calculation_ds: 0.5 enable_rtc: intersection: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval From 811307d605eb2983d4ab669e9ed3cb24a862ee80 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Thu, 5 Oct 2023 11:32:30 +0900 Subject: [PATCH 221/446] fix: add param file for obstacle pointcloud based validator (#606) * fix: add param file for obstacle pointcloud based validator Signed-off-by: badai-nguyen * fix: tier4_perception launch Signed-off-by: badai-nguyen --------- Signed-off-by: badai-nguyen --- .../obstacle_pointcloud_based_validator.param.yaml | 13 +++++++++++++ .../tier4_perception_component.launch.xml | 4 ++++ 2 files changed, 17 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/detected_object_validation/obstacle_pointcloud_based_validator.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/detected_object_validation/obstacle_pointcloud_based_validator.param.yaml b/autoware_launch/config/perception/object_recognition/detection/detected_object_validation/obstacle_pointcloud_based_validator.param.yaml new file mode 100644 index 0000000000..22999b411f --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/detected_object_validation/obstacle_pointcloud_based_validator.param.yaml @@ -0,0 +1,13 @@ +/**: + ros__parameters: + min_points_num: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [10, 10, 10, 10, 10,10, 10, 10] + + max_points_num: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [10, 10, 10, 10, 10,10, 10, 10] + + min_points_and_distance_ratio: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [800.0, 880.0, 800.0, 800.0, 800.0, 800.0, 800.0, 800.0] diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 342396934c..1ec8f2c22f 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -48,6 +48,10 @@ name="object_recognition_detection_fusion_sync_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml" /> + Date: Thu, 5 Oct 2023 13:16:30 +0900 Subject: [PATCH 222/446] refactor(avoidance): use safety check parameter struct (#617) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index c91ec0e88b..5f80c76111 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -139,12 +139,16 @@ check_other_object: true # [-] # collision check parameters check_all_predicted_path: false # [-] - time_resolution: 0.5 # [s] - time_horizon_for_front_object: 3.0 # [s] - time_horizon_for_rear_object: 10.0 # [s] safety_check_backward_distance: 100.0 # [m] hysteresis_factor_expand_rate: 1.5 # [-] hysteresis_factor_safe_count: 10 # [-] + # predicted path parameters + min_velocity: 1.38 # [m/s] + max_velocity: 50.0 # [m/s] + time_resolution: 0.5 # [s] + time_horizon_for_front_object: 3.0 # [s] + time_horizon_for_rear_object: 10.0 # [s] + delay_until_departure: 0.0 # [s] # rss parameters expected_front_deceleration: -1.0 # [m/ss] expected_rear_deceleration: -1.0 # [m/ss] From fd15eb88fe1759d90390b93a7a20a63a345c4393 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 6 Oct 2023 13:53:31 +0900 Subject: [PATCH 223/446] feat(intersection)!: disable the exception behavior in the private areas (#622) feat: add enabling param for the private areas Signed-off-by: Yuki Takagi --- .../behavior_velocity_planner/intersection.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index ccd3612203..e210d2fb21 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -19,6 +19,7 @@ # enable_front_car_decel_prediction: false # By default this feature is disabled # assumed_front_car_decel: 1.0 # [m/ss] the expected deceleration of front car when front car as well as ego are turning timeout_private_area: 3.0 # [s] cancel stuck vehicle stop in private area + enable_private_area_stuck_disregard: false #In the intersections which labeled as "private area", the obstacle vehicles judged as "stuck" are neglected if this param is set as true. collision_detection: state_transit_margin_time: 1.0 From cbe4ed8763f6c33dff67e91ebeb5bd4e6250f5b6 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Fri, 6 Oct 2023 13:54:04 +0900 Subject: [PATCH 224/446] feat(obstacle_cruise_planner): obstacle type dependent slow down for obstacle cruise planner param change (#621) * set obstacle type dependant params Signed-off-by: Daniel Sanchez * Set obstacle cruise planner as default to test changes Signed-off-by: Daniel Sanchez * Change back testing parameters to default Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez Signed-off-by: Daniel Sanchez --- .../obstacle_cruise_planner.param.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index cb4d6a68c5..ddea1a9b56 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -179,10 +179,13 @@ slow_down: # parameters to calculate slow down velocity by linear interpolation - min_lat_margin: 0.2 - max_lat_margin: 1.0 - min_ego_velocity: 2.0 - max_ego_velocity: 8.0 + labels: + - "default" + default: + min_lat_margin: 0.2 + max_lat_margin: 1.0 + min_ego_velocity: 2.0 + max_ego_velocity: 8.0 time_margin_on_target_velocity: 1.5 # [s] From 347b2939ffdc9dc00effe897c1a0eff6c16c74f1 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Fri, 6 Oct 2023 20:16:48 +0900 Subject: [PATCH 225/446] feat(lane_change): separate execution and cancel safety check param (#626) Signed-off-by: Zulfaqar Azmi --- .../lane_change/lane_change.param.yaml | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 1be71cae53..a090a6d3a8 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -28,15 +28,23 @@ # safety check safety_check: - expected_front_deceleration: -1.0 - expected_rear_deceleration: -1.0 - expected_front_deceleration_for_abort: -1.0 - expected_rear_deceleration_for_abort: -2.0 - rear_vehicle_reaction_time: 2.0 - rear_vehicle_safety_time_margin: 1.0 - lateral_distance_max_threshold: 2.0 - longitudinal_distance_min_threshold: 3.0 - longitudinal_velocity_delta_time: 0.8 + allow_loose_check_for_cancel: true + execution: + expected_front_deceleration: -1.0 + expected_rear_deceleration: -1.0 + rear_vehicle_reaction_time: 2.0 + rear_vehicle_safety_time_margin: 1.0 + lateral_distance_max_threshold: 2.0 + longitudinal_distance_min_threshold: 3.0 + longitudinal_velocity_delta_time: 0.8 + cancel: + expected_front_deceleration: -1.0 + expected_rear_deceleration: -2.0 + rear_vehicle_reaction_time: 1.5 + rear_vehicle_safety_time_margin: 0.8 + lateral_distance_max_threshold: 1.0 + longitudinal_distance_min_threshold: 2.5 + longitudinal_velocity_delta_time: 0.6 # lane expansion for object filtering lane_expansion: From 2c08bc6586a81f13d1e08da8d70cfc4b255864c6 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Fri, 6 Oct 2023 22:14:40 +0900 Subject: [PATCH 226/446] feat(intersection): yield initially on green light (#623) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index e210d2fb21..a303b78af9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -37,6 +37,10 @@ keep_detection_vel_thr: 0.833 # == 3.0km/h. keep detection if ego is ego.vel < keep_detection_vel_thr use_upstream_velocity: true # flag to use the planned velocity profile from the upstream module minimum_upstream_velocity: 0.01 # [m/s] minimum velocity to avoid null division for the stop line from the upstream velocity + yield_on_green_traffic_light: + distance_to_assigned_lanelet_start: 10.0 + duration: 3.0 + range: 50.0 # [m] occlusion: enable: false From 9d9eb334818b0eb8b42d4d0f8d676626f19da381 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Sat, 7 Oct 2023 17:20:43 +0900 Subject: [PATCH 227/446] feat(rtc_auto_mode_manager): eliminate rtc auto mode manager (#625) * disable RTC Signed-off-by: kyoichi-sugahara * remove rtc auto mode manager Signed-off-by: kyoichi-sugahara * fix file name Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../scene_module_manager.param.yaml | 20 +++++++++---------- .../blind_spot.param.yaml | 2 +- .../crosswalk.param.yaml | 2 +- .../detection_area.param.yaml | 2 +- .../intersection.param.yaml | 4 ++-- .../no_stopping_area.param.yaml | 2 +- .../traffic_light.param.yaml | 2 +- .../rtc_replayer.param.yaml} | 0 .../tier4_planning_component.launch.xml | 3 --- 9 files changed, 17 insertions(+), 20 deletions(-) rename autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/{rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml => rtc_replayer/rtc_replayer.param.yaml} (100%) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index ff4b486ef9..1fc83edd08 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -5,7 +5,7 @@ ros__parameters: external_request_lane_change_left: enable_module: false - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true keep_last: false @@ -14,7 +14,7 @@ external_request_lane_change_right: enable_module: false - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true keep_last: false @@ -23,7 +23,7 @@ lane_change_left: enable_module: true - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true keep_last: false @@ -32,7 +32,7 @@ lane_change_right: enable_module: true - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true keep_last: false @@ -41,7 +41,7 @@ start_planner: enable_module: true - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false keep_last: false @@ -50,7 +50,7 @@ side_shift: enable_module: true - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false keep_last: false @@ -59,7 +59,7 @@ goal_planner: enable_module: true - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false keep_last: true @@ -68,7 +68,7 @@ avoidance: enable_module: true - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false keep_last: false @@ -77,7 +77,7 @@ avoidance_by_lc: enable_module: true - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false keep_last: false @@ -86,7 +86,7 @@ dynamic_avoidance: enable_module: false - enable_rtc: true + enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true keep_last: true diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml index 8a57bfeabd..0950ece4ae 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml @@ -8,4 +8,4 @@ max_future_movement_time: 10.0 # [second] threshold_yaw_diff: 0.523 # [rad] adjacent_extend_width: 1.5 # [m] - enable_rtc: true # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. + enable_rtc: false # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 4b81a1e687..d99c70c5f6 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -5,7 +5,7 @@ show_processing_time: false # [-] whether to show processing time # param for input data traffic_light_state_timeout: 3.0 # [s] timeout threshold for traffic light signal - enable_rtc: true # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. + enable_rtc: false # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. # param for stop position stop_position: diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/detection_area.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/detection_area.param.yaml index 55b627cce7..ddd8b934d2 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/detection_area.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/detection_area.param.yaml @@ -8,4 +8,4 @@ state_clear_time: 2.0 hold_stop_margin_distance: 0.0 distance_to_judge_over_stop_line: 0.5 - enable_rtc: true # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. + enable_rtc: false # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index a303b78af9..4b8f15ab27 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -66,8 +66,8 @@ attention_lane_curvature_calculation_ds: 0.5 enable_rtc: - intersection: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval - intersection_to_occlusion: true + intersection: false # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval + intersection_to_occlusion: false merge_from_private: stop_line_margin: 3.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_stopping_area.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_stopping_area.param.yaml index f550188d4f..c84848f8cc 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_stopping_area.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/no_stopping_area.param.yaml @@ -8,4 +8,4 @@ stop_line_margin: 1.0 # [m] margin to auto-gen stop line at no stopping area detection_area_length: 200.0 # [m] used to create detection area polygon stuck_vehicle_front_margin: 6.0 # [m] obstacle stop max distance(5.0m) - enable_rtc: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval + enable_rtc: false # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml index e8e0357daa..a837ae1b46 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml @@ -5,4 +5,4 @@ tl_state_timeout: 1.0 yellow_lamp_period: 2.75 enable_pass_judge: true - enable_rtc: true # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval + enable_rtc: false # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_replayer/rtc_replayer.param.yaml similarity index 100% rename from autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_auto_mode_manager/rtc_auto_mode_manager.param.yaml rename to autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/rtc_replayer/rtc_replayer.param.yaml diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index ad55c76d82..a1cb2b79f5 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -25,9 +25,6 @@ - - - From 198f929dd6e0585335d38cbcecd30f2891513743 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 12 Oct 2023 09:39:09 +0900 Subject: [PATCH 228/446] feat(avoidance): check if the avoidance path is in drivable area (#584) * feat(avoidance): check if the avoidance path is in drivable area Signed-off-by: satoshi-ota * refactor(avoidance): remove unused param Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 5f80c76111..40f10f4805 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -169,6 +169,7 @@ hard_road_shoulder_margin: 0.3 # [m] max_right_shift_length: 5.0 max_left_shift_length: 5.0 + max_deviation_from_lane: 0.5 # [m] # avoidance distance parameters longitudinal: prepare_time: 2.0 # [s] @@ -219,12 +220,6 @@ max_jerk: 1.0 # [m/sss] max_acceleration: 1.0 # [m/ss] - target_velocity_matrix: - col_size: 2 - matrix: - [2.78, 13.9, # velocity [m/s] - 0.50, 1.00] # margin [m] - shift_line_pipeline: trim: quantize_filter_threshold: 0.1 From be567283e01842201e912d4e4bfcbd8d99e3131b Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Thu, 12 Oct 2023 14:31:17 +0900 Subject: [PATCH 229/446] chore(intersection): parameterize stuck vehicle detection turn_direction (#630) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 4b8f15ab27..23a5a3aaf0 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -13,6 +13,10 @@ path_interpolation_ds: 0.1 # [m] consider_wrong_direction_vehicle: false stuck_vehicle: + turn_direction: + left: true + right: true + straight: true use_stuck_stopline: true # stopline generated before the first conflicting area stuck_vehicle_detect_dist: 5.0 # this should be the length between cars when they are stopped. The actual stuck vehicle detection length will be this value + vehicle_length. stuck_vehicle_vel_thr: 0.833 # 0.833m/s = 3.0km/h From eeccf72060e0c9402699c822c591c35b6b4c761a Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Fri, 13 Oct 2023 13:27:14 +0900 Subject: [PATCH 230/446] feat(ndt_scan_matcher): added a new parameter "n_startup_trials" (#602) * Added a new parameter "n_startup_trials" Signed-off-by: Shintaro Sakoda * Changed default `n_startup_trials` to 20 Signed-off-by: Shintaro Sakoda --------- Signed-off-by: Shintaro Sakoda --- .../config/localization/ndt_scan_matcher.param.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index cf41a4cf55..0ba1b1a2e1 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -43,6 +43,11 @@ # The number of particles to estimate initial pose initial_estimate_particles_num: 200 + # The number of initial random trials in the TPE (Tree-Structured Parzen Estimator). + # This value should be equal to or less than 'initial_estimate_particles_num' and more than 0. + # If it is equal to 'initial_estimate_particles_num', the search will be the same as a full random search. + n_startup_trials: 20 + # Tolerance of timestamp difference between current time and sensor pointcloud. [sec] lidar_topic_timeout_sec: 1.0 From 26148188f74271adbb0f96ceab03d91d564adb9b Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 13 Oct 2023 21:31:48 +0900 Subject: [PATCH 231/446] feat(autoware_launch): add yield_stuck.distance_thr in intersection (#628) * feat(autoware_launch): add yield_stuck.distance_thr in intersection Signed-off-by: Takayuki Murooka * use turn_direction Signed-off-by: Takayuki Murooka * update param Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/intersection.param.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 23a5a3aaf0..30f4bc7b42 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -24,6 +24,12 @@ # assumed_front_car_decel: 1.0 # [m/ss] the expected deceleration of front car when front car as well as ego are turning timeout_private_area: 3.0 # [s] cancel stuck vehicle stop in private area enable_private_area_stuck_disregard: false #In the intersections which labeled as "private area", the obstacle vehicles judged as "stuck" are neglected if this param is set as true. + yield_stuck: + turn_direction: + left: true + right: false + straight: false + distance_thr: 1.0 # [m] collision_detection: state_transit_margin_time: 1.0 From 5b9dfdbc0a5043ba5c43bddc97ddea9ebff04c22 Mon Sep 17 00:00:00 2001 From: Yuxuan Liu <619684051@qq.com> Date: Sat, 14 Oct 2023 10:40:15 +0800 Subject: [PATCH 232/446] feat(duplicated_node_checker): add duplicated_node_checker (#631) * add duplicated_node_checker Signed-off-by: Owen-Liuyuxuan * add arguments for duplicated node checker, required by new PR on the universe Signed-off-by: Owen-Liuyuxuan * fix type Signed-off-by: Owen-Liuyuxuan * add config inside launch Signed-off-by: Owen-Liuyuxuan * style(pre-commit): autofix * the default should be set to 10 Signed-off-by: Owen-Liuyuxuan --------- Signed-off-by: Owen-Liuyuxuan Co-authored-by: Owen-Liuyuxuan Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../duplicated_node_checker/duplicated_node_checker.param.yaml | 3 +++ .../system_error_monitor/system_error_monitor.param.yaml | 1 + .../system_error_monitor.planning_simulation.param.yaml | 1 + .../launch/components/tier4_system_component.launch.xml | 1 + 4 files changed, 6 insertions(+) create mode 100644 autoware_launch/config/system/duplicated_node_checker/duplicated_node_checker.param.yaml diff --git a/autoware_launch/config/system/duplicated_node_checker/duplicated_node_checker.param.yaml b/autoware_launch/config/system/duplicated_node_checker/duplicated_node_checker.param.yaml new file mode 100644 index 0000000000..5b8c019de5 --- /dev/null +++ b/autoware_launch/config/system/duplicated_node_checker/duplicated_node_checker.param.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + update_rate: 10.0 diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml index 251486dafd..b8da5f4e7c 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml @@ -38,6 +38,7 @@ /autoware/system/emergency_stop_operation: default /autoware/system/service_log_checker: { sf_at: "warn", lf_at: "none", spf_at: "none" } /autoware/system/resource_monitoring: { sf_at: "warn", lf_at: "error", spf_at: "none" } + /autoware/system/duplicated_node_checker: default /autoware/vehicle/node_alive_monitoring: default diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml index 2c5fe6e8f5..3fd6264376 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml @@ -39,6 +39,7 @@ /autoware/system/emergency_stop_operation: default /autoware/system/service_log_checker: { sf_at: "warn", lf_at: "none", spf_at: "none" } # /autoware/system/resource_monitoring: { sf_at: "warn", lf_at: "error", spf_at: "none" } + /autoware/system/duplicated_node_checker: default /autoware/vehicle/node_alive_monitoring: default diff --git a/autoware_launch/launch/components/tier4_system_component.launch.xml b/autoware_launch/launch/components/tier4_system_component.launch.xml index 1bd74ccbbf..a90fdb89a5 100644 --- a/autoware_launch/launch/components/tier4_system_component.launch.xml +++ b/autoware_launch/launch/components/tier4_system_component.launch.xml @@ -10,6 +10,7 @@ + From 807e5c68fd1cef535afac4b0d6408a86d7ba62ea Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Sun, 15 Oct 2023 13:50:13 +0900 Subject: [PATCH 233/446] feat(intersection): ignore decelerating vehicle on amber traffic light (#635) * feat(intersection): ignore decelerating vehicle on amber traffic light Signed-off-by: Mamoru Sobue * tuning Signed-off-by: Mamoru Sobue --------- Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 30f4bc7b42..f37911b35b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -39,8 +39,8 @@ collision_start_margin_time: 2.0 collision_end_margin_time: 0.0 partially_prioritized: - collision_start_margin_time: 2.0 - collision_end_margin_time: 2.0 + collision_start_margin_time: 4.0 + collision_end_margin_time: 6.0 not_prioritized: collision_start_margin_time: 4.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object collision_end_margin_time: 6.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object @@ -50,7 +50,9 @@ yield_on_green_traffic_light: distance_to_assigned_lanelet_start: 10.0 duration: 3.0 - range: 50.0 # [m] + object_dist_to_stopline: 10.0 # [m] + ignore_on_amber_traffic_light: + object_expected_deceleration: 2.0 # [m/ss] occlusion: enable: false From d95d929a3968c08dc25f95cc83c4260d147f7d11 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Sun, 15 Oct 2023 19:31:56 +0900 Subject: [PATCH 234/446] feat(lane_change): add rss paramas for stuck (#633) Signed-off-by: kosuke55 --- .../lane_change/lane_change.param.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index a090a6d3a8..81004d859a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -45,6 +45,14 @@ lateral_distance_max_threshold: 1.0 longitudinal_distance_min_threshold: 2.5 longitudinal_velocity_delta_time: 0.6 + stuck: + expected_front_deceleration: -1.0 + expected_rear_deceleration: -1.0 + rear_vehicle_reaction_time: 2.0 + rear_vehicle_safety_time_margin: 1.0 + lateral_distance_max_threshold: 2.0 + longitudinal_distance_min_threshold: 3.0 + longitudinal_velocity_delta_time: 0.8 # lane expansion for object filtering lane_expansion: From 307dc94a121f6f22ed7fc810665e1ba3adf9bdfa Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Mon, 16 Oct 2023 13:29:39 +0900 Subject: [PATCH 235/446] add tracking object merger for long range radar sensor (#627) * add tracking object merger paramters Signed-off-by: yoshiri * fix typo Signed-off-by: yoshiri --------- Signed-off-by: yoshiri --- .../radar_object_tracker.param.yaml | 27 +++ .../tracking/linear_motion_tracker.yaml | 32 ++++ .../data_association_matrix.param.yaml | 168 ++++++++++++++++++ .../decorative_tracker_merger.param.yaml | 26 +++ ...ecorative_tracker_merger_policy.param.yaml | 16 ++ .../tier4_perception_component.launch.xml | 12 ++ 6 files changed, 281 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/linear_motion_tracker.yaml create mode 100644 autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/data_association_matrix.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger_policy.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml new file mode 100644 index 0000000000..f80adffb41 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml @@ -0,0 +1,27 @@ +# general parameters for radar_object_tracker node +/**: + ros__parameters: + # basic settings + world_frame_id: "map" + tracker_lifetime: 1.0 # [sec] + # if empty, use default config declared in this package + tracking_config_directory: "" + + # delay compensate parameters + publish_rate: 10.0 + enable_delay_compensation: false + + # logging + enable_logging: false + logging_file_path: "/tmp/association_log.json" + + # filtering + ## 1. distance based filtering: remove closer objects than this threshold + use_distance_based_noise_filtering: true + minimum_range_threshold: 70.0 # [m] + + ## 2. lanelet map based filtering + use_map_based_noise_filtering: true + max_distance_from_lane: 5.0 # [m] + max_angle_diff_from_lane: 0.785398 # [rad] (45 deg) + max_lateral_velocity: 5.0 # [m/s] diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/linear_motion_tracker.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/linear_motion_tracker.yaml new file mode 100644 index 0000000000..71367f4575 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/linear_motion_tracker.yaml @@ -0,0 +1,32 @@ +default: + # This file defines the parameters for the linear motion tracker. + # All this parameter coordinate is assumed to be in the vehicle coordinate system. + # So, the x axis is pointing to the front of the vehicle, y axis is pointing to the left of the vehicle. + ekf_params: + # random walk noise is used to model the acceleration noise + process_noise_std: # [m/s^2] + ax: 0.98 # assume 0.1G acceleration noise + ay: 0.98 + vx: 0.1 # assume 0.1m/s velocity noise + vy: 0.1 + x: 1.0 # assume 1m position noise + y: 1.0 + measurement_noise_std: + x: 0.6 # [m] + y: 0.9 # [m] + vx: 0.4 # [m/s] + vy: 1 # [m/s] + initial_covariance_std: + x: 3.0 # [m] + y: 6.0 # [m] + vx: 1.0 # [m/s] + vy: 5.0 # [m/s] + ax: 0.5 # [m/s^2] + ay: 1.0 # [m/s^2] + # output limitation + limit: + max_speed: 80.0 # [m/s] + # low pass filter is used to smooth the yaw and shape estimation + low_pass_filter: + time_constant: 1.0 # [s] + sampling_time: 0.1 # [s] diff --git a/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/data_association_matrix.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/data_association_matrix.param.yaml new file mode 100644 index 0000000000..702809b3ce --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/data_association_matrix.param.yaml @@ -0,0 +1,168 @@ +/**: + ros__parameters: + lidar-lidar: + can_assign_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN + [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + 0, 1, 1, 1, 1, 0, 0, 0, #CAR + 0, 1, 1, 1, 1, 0, 0, 0, #TRUCK + 0, 1, 1, 1, 1, 0, 0, 0, #BUS + 0, 1, 1, 1, 1, 0, 0, 0, #TRAILER + 0, 0, 0, 0, 0, 1, 1, 1, #MOTORBIKE + 0, 0, 0, 0, 0, 1, 1, 1, #BICYCLE + 0, 0, 0, 0, 0, 1, 1, 1] #PEDESTRIAN + + max_dist_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [4.0, 4.0, 5.0, 5.0, 5.0, 2.0, 2.0, 2.0, #UNKNOWN + 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #CAR + 5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #TRUCK + 5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #BUS + 5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #TRAILER + 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, #MOTORBIKE + 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, #BICYCLE + 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0] #PEDESTRIAN + + max_rad_matrix: # If value is greater than pi, it will be ignored. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER MOTORBIKE, BICYCLE, PEDESTRIAN + [3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #UNKNOWN + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #CAR + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRUCK + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #BUS + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRAILER + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #MOTORBIKE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #BICYCLE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150] #PEDESTRIAN + + max_velocity_diff_matrix: # Ignored when value is larger than 100.0 + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #UNKNOWN + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #CAR + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #TRUCK + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #BUS + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #TRAILER + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #MOTORBIKE + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #BICYCLE + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0] #PEDESTRIAN + + min_iou_matrix: # If value is negative, it will be ignored. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #UNKNOWN + 0.1, 0.3, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, #CAR + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #TRUCK + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #BUS + 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, #TRAILER + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #MOTORBIKE + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, #BICYCLE + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] #PEDESTRIAN + + lidar-radar: + can_assign_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN + [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + 0, 1, 1, 1, 1, 0, 0, 0, #CAR + 0, 1, 1, 1, 1, 0, 0, 0, #TRUCK + 0, 1, 1, 1, 1, 0, 0, 0, #BUS + 0, 1, 1, 1, 1, 0, 0, 0, #TRAILER + 0, 0, 0, 0, 0, 1, 1, 1, #MOTORBIKE + 0, 0, 0, 0, 0, 1, 1, 1, #BICYCLE + 0, 0, 0, 0, 0, 1, 1, 1] #PEDESTRIAN + + max_dist_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [4.0, 4.0, 5.0, 5.0, 5.0, 3.5, 3.5, 3.5, #UNKNOWN + 4.0, 5.5, 6.0, 6.0, 6.0, 1.0, 1.0, 1.0, #CAR + 5.0, 6.0, 6.5, 6.5, 6.5, 1.0, 1.0, 1.0, #TRUCK + 5.0, 6.0, 6.5, 6.5, 6.5, 1.0, 1.0, 1.0, #BUS + 5.0, 6.0, 6.5, 6.5, 6.5, 1.0, 1.0, 1.0, #TRAILER + 3.5, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, #MOTORBIKE + 3.5, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, #BICYCLE + 3.5, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.5] #PEDESTRIAN + + max_rad_matrix: # If value is greater than pi, it will be ignored. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER MOTORBIKE, BICYCLE, PEDESTRIAN + [3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #UNKNOWN + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #CAR + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRUCK + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #BUS + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRAILER + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #MOTORBIKE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #BICYCLE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150] #PEDESTRIAN + + max_velocity_diff_matrix: # Ignored when value is larger than 100.0 + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #UNKNOWN + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #CAR + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #TRUCK + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #BUS + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #TRAILER + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #MOTORBIKE + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #BICYCLE + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0] #PEDESTRIAN + + min_iou_matrix: # set all value to 0.0 to disable this constraint + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #UNKNOWN + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #CAR + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #TRUCK + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #BUS + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #TRAILER + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #MOTORBIKE + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #BICYCLE + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] #PEDESTRIAN + + radar-radar: + can_assign_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN + [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + 0, 1, 1, 1, 1, 0, 0, 0, #CAR + 0, 1, 1, 1, 1, 0, 0, 0, #TRUCK + 0, 1, 1, 1, 1, 0, 0, 0, #BUS + 0, 1, 1, 1, 1, 0, 0, 0, #TRAILER + 0, 0, 0, 0, 0, 1, 1, 1, #MOTORBIKE + 0, 0, 0, 0, 0, 1, 1, 1, #BICYCLE + 0, 0, 0, 0, 0, 1, 1, 1] #PEDESTRIAN + + max_dist_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [4.0, 4.0, 5.0, 5.0, 5.0, 3.5, 3.5, 3.5, #UNKNOWN + 4.0, 7.0, 7.5, 7.5, 7.5, 1.0, 1.0, 1.0, #CAR + 5.0, 7.5, 7.5, 7.5, 7.5, 1.0, 1.0, 1.0, #TRUCK + 5.0, 7.5, 7.5, 7.5, 7.5, 1.0, 1.0, 1.0, #BUS + 5.0, 7.5, 7.5, 7.5, 7.5, 1.0, 1.0, 1.0, #TRAILER + 3.5, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, #MOTORBIKE + 3.5, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, #BICYCLE + 3.5, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.5] #PEDESTRIAN + max_rad_matrix: # If value is greater than pi, it will be ignored. + #UNKNOWN, CAR, TRUCK, BUS, TRAILER MOTORBIKE, BICYCLE, PEDESTRIAN + [3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #UNKNOWN + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #CAR + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRUCK + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #BUS + 3.150, 1.047, 1.047, 1.047, 1.047, 3.150, 3.150, 3.150, #TRAILER + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #MOTORBIKE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, #BICYCLE + 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150, 3.150] #PEDESTRIAN + + max_velocity_diff_matrix: # Ignored when value is larger than 100.0 + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #UNKNOWN + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #CAR + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #TRUCK + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #BUS + 100.0, 8.0, 8.0, 8.0, 8.0, 100.0, 100.0, 100.0, #TRAILER + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #MOTORBIKE + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0, #BICYCLE + 100.0, 100.0,100.0,100.0,100.0, 100.0, 100.0, 100.0] #PEDESTRIAN + + min_iou_matrix: # set all value to 0.0 to disable this constraint + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #UNKNOWN + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #CAR + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #TRUCK + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #BUS + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #TRAILER + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #MOTORBIKE + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, #BICYCLE + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] #PEDESTRIAN diff --git a/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger.param.yaml new file mode 100644 index 0000000000..13369d5422 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger.param.yaml @@ -0,0 +1,26 @@ +# Node parameters +/**: + ros__parameters: + base_link_frame_id: "base_link" + time_sync_threshold: 0.999 + sub_object_timeout_sec: 0.8 + publish_interpolated_sub_objects: true #for debug + + # choose the input sensor type for each object type + # "lidar", "radar", "camera" are available + main_sensor_type: "lidar" + sub_sensor_type: "radar" + + # tracker settings + tracker_state_parameter: + remove_probability_threshold: 0.3 + publish_probability_threshold: 0.5 + default_lidar_existence_probability: 0.7 + default_radar_existence_probability: 0.6 + default_camera_existence_probability: 0.5 + decay_rate: 0.1 + max_dt: 1.0 + + # logging + enable_logging: false + log_file_path: "/tmp/decorative_tracker_merger.log" diff --git a/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger_policy.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger_policy.param.yaml new file mode 100644 index 0000000000..0b98e1b202 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger_policy.param.yaml @@ -0,0 +1,16 @@ +# Merger policy for decorative tracker merger node +# decorative tracker merger works by merging the sub-object trackers into a main object tracker result +# There are 3 merger policy: +# 1. "skip": skip the sub-object tracker result +# 2. "overwrite": overwrite the main object tracker result with sub-object tracker result +# 3. "fusion": merge the main object tracker result with sub-object tracker result by using covariance based fusion +/**: + ros__parameters: + kinematics_to_be_merged: "velocity" # currently only support "velocity" + + # choose the merger policy for each object type + # : "skip", "overwrite", "fusion" + kinematics_merge_policy: "overwrite" + classification_merge_policy: "skip" + existence_prob_merge_policy: "skip" + shape_merge_policy: "skip" diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 1ec8f2c22f..e3df873492 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -81,6 +81,18 @@ name="object_recognition_tracking_radar_object_tracker_tracking_setting_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml" /> + + + Date: Mon, 16 Oct 2023 17:23:18 +0900 Subject: [PATCH 236/446] feat(behavior_path_planner): curvature based drivable area expansion (#632) * Modify parameters for curvature based dynamic drivable area expansion Signed-off-by: Maxime CLEMENT * Add parameter to enable/disable printing the runtime Signed-off-by: Maxime CLEMENT * Add smoothing.extra_arc_length param Signed-off-by: Maxime CLEMENT --------- Signed-off-by: Maxime CLEMENT --- .../drivable_area_expansion.param.yaml | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml index 160ebdc180..940bb82a59 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml @@ -5,15 +5,19 @@ drivable_area_left_bound_offset: 0.0 drivable_area_types_to_skip: [road_border] - # Dynamic expansion by projecting the ego footprint along the path + # Dynamic expansion by using the path curvature dynamic_expansion: - enabled: false + enabled: true + print_runtime: false + max_expansion_distance: 0.0 # [m] maximum distance by which the drivable area can be expended (0.0 means no limit) + smoothing: + curvature_average_window: 3 # window size used for smoothing the curvatures using a moving window average + max_bound_rate: 1.0 # [m/m] maximum rate of change of the bound lateral distance over its arc length + extra_arc_length: 2.0 # [m] extra arc length where an expansion distance is initially applied ego: - extra_footprint_offset: - front: 0.5 # [m] extra length to add to the front of the ego footprint - rear: 0.5 # [m] extra length to add to the rear of the ego footprint - left: 0.5 # [m] extra length to add to the left of the ego footprint - right: 0.5 # [m] extra length to add to the rear of the ego footprint + extra_wheelbase: 0.0 # [m] extra length to add to the wheelbase + extra_front_overhang: 0.5 # [m] extra length to add to the front overhang + extra_width: 1.0 # [m] extra length to add to the width dynamic_objects: avoid: true # if true, the drivable area is not expanded in the predicted path of dynamic objects extra_footprint_offset: @@ -24,16 +28,9 @@ path_preprocessing: max_arc_length: 50.0 # [m] maximum arc length along the path where the ego footprint is projected (0.0 means no limit) resample_interval: 2.0 # [m] fixed interval between resampled path points (0.0 means path points are directly used) - expansion: - method: polygon # method used to expand the drivable area. Either 'lanelet' or 'polygon'. - # 'lanelet': add lanelets overlapped by the ego footprints - # 'polygon': add polygons built around sections of the ego footprint that go out of the drivable area - max_distance: 0.0 # [m] maximum distance by which the drivable area can be expended (0.0 means no limit) - extra_arc_length: 0.5 # [m] extra expansion arc length around an ego footprint + reuse_max_deviation: 0.5 # [m] if the path changes by more than this value, the curvatures are recalculated. Otherwise they are reused. avoid_linestring: types: # linestring types in the lanelet maps that will not be crossed when expanding the drivable area - road_border + - curbstone distance: 0.0 # [m] distance to keep between the drivable area and the linestrings to avoid - compensate: - enable: true # if true, when the drivable area cannot be expanded in one direction to completely include the ego footprint, it is expanded in the opposite direction - extra_distance: 3.0 # [m] extra distance to add to the compensation From 434f95a1037d777b2e3ee5ded041449397d5da9b Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 16 Oct 2023 18:10:13 +0900 Subject: [PATCH 237/446] feat(lane_change): change stuck velocity to 0.5 (#636) Signed-off-by: kosuke55 --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 81004d859a..e09f6e479b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -90,7 +90,7 @@ # ego vehicle stuck detection stuck_detection: - velocity: 0.1 # [m/s] + velocity: 0.5 # [m/s] stop_time: 3.0 # [s] # lane change cancel From 06cd7431e27a5fd0aaff3c881d79f7158e74a567 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:12:43 +0900 Subject: [PATCH 238/446] fix(tier4_simulator_component): add lacked param path (#640) Signed-off-by: satoshi-ota --- .../tier4_simulator_component.launch.xml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/autoware_launch/launch/components/tier4_simulator_component.launch.xml b/autoware_launch/launch/components/tier4_simulator_component.launch.xml index f243414555..02f9a8243c 100644 --- a/autoware_launch/launch/components/tier4_simulator_component.launch.xml +++ b/autoware_launch/launch/components/tier4_simulator_component.launch.xml @@ -44,5 +44,26 @@ + + + + + + From 76dcd5435904f19b8f22baf06749cb6b86605bd4 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 17 Oct 2023 13:06:07 +0900 Subject: [PATCH 239/446] fix(drivable_area_expansion): disable by default (#639) Signed-off-by: Maxime CLEMENT --- .../behavior_path_planner/drivable_area_expansion.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml index 940bb82a59..e1a0c7e38d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml @@ -7,7 +7,7 @@ # Dynamic expansion by using the path curvature dynamic_expansion: - enabled: true + enabled: false print_runtime: false max_expansion_distance: 0.0 # [m] maximum distance by which the drivable area can be expended (0.0 means no limit) smoothing: From 7d3f1d2359402f73b29762c05e8e4a8e58fb388a Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 17 Oct 2023 14:08:25 +0900 Subject: [PATCH 240/446] fix(intersection): lower state_transit_margi_time to 0 (#638) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index f37911b35b..11bdedf0d1 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -32,7 +32,7 @@ distance_thr: 1.0 # [m] collision_detection: - state_transit_margin_time: 1.0 + state_transit_margin_time: 0.0 min_predicted_path_confidence: 0.05 minimum_ego_predicted_velocity: 1.388 # [m/s] fully_prioritized: From 5d8a2f0d6cfd715c6ef01daa007e3748edbf6b7a Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 17 Oct 2023 19:08:37 +0900 Subject: [PATCH 241/446] feat(avoidance): add paramenters for dynamic detection area (#634) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 40f10f4805..fe9c37d200 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -118,8 +118,6 @@ object_ignore_section_crosswalk_in_front_distance: 30.0 # [m] object_ignore_section_crosswalk_behind_distance: 30.0 # [m] # detection range - object_check_forward_distance: 150.0 # [m] - object_check_backward_distance: 10.0 # [m] object_check_goal_distance: 20.0 # [m] # filtering parking objects threshold_distance_object_is_on_center: 1.0 # [m] @@ -128,6 +126,13 @@ # lost object compensation object_last_seen_threshold: 2.0 + # detection area generation parameters + detection_area: + static: false # [-] + min_forward_distance: 50.0 # [m] + max_forward_distance: 150.0 # [m] + backward_distance: 10.0 # [m] + # For safety check safety_check: # safety check configuration From 681f5f76a425c845bf23258ad9d5a89104105475 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 19 Oct 2023 16:17:18 +0900 Subject: [PATCH 242/446] feat(planner_manager): limit iteration number by parameter (#645) Signed-off-by: satoshi-ota --- .../behavior_path_planner/behavior_path_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml index 5de4c0d27b..3a7393a4c9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml @@ -1,6 +1,7 @@ /**: ros__parameters: verbose: false + max_iteration_num: 100 groot_zmq_publisher_port: 1666 groot_zmq_server_port: 1667 From 9e5293c479f645edb0f183eb42155051467ee6eb Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Fri, 20 Oct 2023 11:06:29 +0900 Subject: [PATCH 243/446] feat(map_based_prediction): enable to control lateral path convergence time (#637) enable to control lateral path convergence time Signed-off-by: yoshiri --- .../prediction/map_based_prediction.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index 31fae9c811..260ae45da2 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -2,6 +2,7 @@ ros__parameters: enable_delay_compensation: true prediction_time_horizon: 10.0 #[s] + lateral_control_time_horizon: 5.0 #[s] prediction_sampling_delta_time: 0.5 #[s] min_velocity_for_map_based_prediction: 1.39 #[m/s] min_crosswalk_user_velocity: 1.39 #[m/s] From 082e862ffe7365f68a0055bf0d14da2409d65e79 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Fri, 20 Oct 2023 19:04:39 +0900 Subject: [PATCH 244/446] feat(intersection): timeout static occlusion with traffic light (#646) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 11bdedf0d1..99640e616f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -76,6 +76,7 @@ maximum_peeking_distance: 6.0 # [m] attention_lane_crop_curvature_threshold: 0.25 attention_lane_curvature_calculation_ds: 0.5 + static_occlusion_with_traffic_light_timeout: 0.5 enable_rtc: intersection: false # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval From 90c7a6a6a5aab6bf7198ebfdb78bc89c25724a22 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Fri, 20 Oct 2023 20:46:09 +0900 Subject: [PATCH 245/446] feat(duplicated_node_checker): disable duplicated_node_checker (#649) * disable duplicated_node_checker Signed-off-by: kyoichi-sugahara * enable duplicated_node_checker Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../system_error_monitor.planning_simulation.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml index 3fd6264376..522dbb51ee 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml @@ -39,7 +39,7 @@ /autoware/system/emergency_stop_operation: default /autoware/system/service_log_checker: { sf_at: "warn", lf_at: "none", spf_at: "none" } # /autoware/system/resource_monitoring: { sf_at: "warn", lf_at: "error", spf_at: "none" } - /autoware/system/duplicated_node_checker: default + # /autoware/system/duplicated_node_checker: default /autoware/vehicle/node_alive_monitoring: default From 13b28551b50141bd887042063e00cfc987c19e76 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 23 Oct 2023 13:38:56 +0900 Subject: [PATCH 246/446] feat(intersection): use own max acc/jerk param (#650) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 99640e616f..c49be22d0a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -12,6 +12,9 @@ use_intersection_area: false path_interpolation_ds: 0.1 # [m] consider_wrong_direction_vehicle: false + max_accel: -2.8 + max_jerk: -5.0 + delay_response_time: 0.5 stuck_vehicle: turn_direction: left: true From 5a04d1cdc0859528d5156dc35f566bf35070b5fb Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 23 Oct 2023 20:27:29 +0900 Subject: [PATCH 247/446] feat(duplicated_node_checker): add duplicated node names to msg (#651) add duplicated node names to msg Signed-off-by: kyoichi-sugahara --- .../duplicated_node_checker/duplicated_node_checker.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/system/duplicated_node_checker/duplicated_node_checker.param.yaml b/autoware_launch/config/system/duplicated_node_checker/duplicated_node_checker.param.yaml index 5b8c019de5..54b4f691b6 100644 --- a/autoware_launch/config/system/duplicated_node_checker/duplicated_node_checker.param.yaml +++ b/autoware_launch/config/system/duplicated_node_checker/duplicated_node_checker.param.yaml @@ -1,3 +1,4 @@ /**: ros__parameters: update_rate: 10.0 + add_duplicated_node_names_to_msg: false # if true, duplicated node names are added to msg From 2ed86f27297af256574ee11c996dee935b31a577 Mon Sep 17 00:00:00 2001 From: Tomohito ANDO Date: Tue, 24 Oct 2023 11:52:17 +0900 Subject: [PATCH 248/446] feat(behavior_velocity_run_out): ignore momentary detection caused by false positive (#647) * feat(behavior_velocity_run_out): ignore momentary detection caused by false positive Signed-off-by: Tomohito Ando * style(pre-commit): autofix --------- Signed-off-by: Tomohito Ando Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../behavior_velocity_planner/run_out.param.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml index f9668549f2..2641214ac5 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml @@ -48,3 +48,8 @@ enable: true max_jerk: -0.7 # [m/s^3] minimum jerk deceleration for safe brake. max_acc : -2.0 # [m/s^2] minimum accel deceleration for safe brake. + + # prevent abrupt stops caused by false positives in perception + ignore_momentary_detection: + enable: true + time_threshold: 0.15 # [sec] ignores detections that persist for less than this duration From c88d0555374352547966ce6f5e0a595158b11d39 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 24 Oct 2023 11:55:17 +0900 Subject: [PATCH 249/446] perf(elastic_band_smoother): increase lateral replan threshold (#652) --- .../path_smoother/elastic_band_smoother.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml index 8e77420dd4..c67d29c418 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml @@ -40,7 +40,7 @@ enable: true # if true, only perform smoothing when the input changes significantly max_path_shape_around_ego_lat_dist: 2.0 # threshold of path shape change around ego [m] max_path_shape_forward_lon_dist: 100.0 # forward point to check lateral distance difference [m] - max_path_shape_forward_lat_dist: 0.1 # threshold of path shape change around forward point [m] + max_path_shape_forward_lat_dist: 0.2 # threshold of path shape change around forward point [m] max_ego_moving_dist: 5.0 # threshold of ego's moving distance for replan [m] # make max_goal_moving_dist long to keep start point fixed for pull over max_goal_moving_dist: 15.0 # threshold of goal's moving distance for replan [m] From 61aeb5201271f81ac172daf2516c71704d47c35c Mon Sep 17 00:00:00 2001 From: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Date: Wed, 25 Oct 2023 01:49:40 +0900 Subject: [PATCH 250/446] feat(rviz): add sensing/perception debug topics (#653) * add perception debug topics Signed-off-by: Shunsuke Miura * add sensing debug topics Signed-off-by: Shunsuke Miura * change color of dbt to orange Signed-off-by: Shunsuke Miura --------- Signed-off-by: Shunsuke Miura --- autoware_launch/rviz/autoware.rviz | 891 ++++++++++++++++++++++++++++- 1 file changed, 888 insertions(+), 3 deletions(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 00e924da39..cdb1ffe690 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -2439,8 +2439,329 @@ Visualization Manager: Enabled: true Name: Map - Class: rviz_common/Group - Displays: ~ - Enabled: true + Displays: + - Class: rviz_default_plugins/Camera + Enabled: true + Far Plane Distance: 100 + Image Rendering: background and overlay + Name: PointcloudOnCamera + Overlay Alpha: 0.5 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /sensing/camera/camera6/image_raw + Value: true + Visibility: + Control: + Debug/AEB: true + Debug/MPC: true + Debug/PurePursuit: true + Predicted Trajectory: true + Value: false + Debug: + Control: true + Localization: + EKFPoseHistory: true + NDT pointclouds: true + NDTLoadedPCDMap: true + NDTPoseHistory: true + Value: true + Map: true + Perception: + CameraLidarFusion(purple): true + Centerpoint(red1): true + CenterpointROIFusion(red3): true + CenterpointValidator(red2): true + Detection(yellow): true + DetectionByTracker(cyan): true + PointPainting(light_green1): true + PointPaintingROIFusion(light_green3): true + PointPaintingValidator(light_green2): true + Prediction(light_blue): true + RadarFarObjects(white): true + Tracking(green): true + Value: true + Planning: true + Sensing: + ConcatenatePointCloud: true + PointcloudOnCamera: true + RadarRawObjects(white): true + Value: true + Value: true + Localization: + EKF: + PoseHistory: true + Value: true + NDT: + Aligned: true + Initial: true + MonteCarloInitialPose: true + PoseHistory: true + PoseWithCovAligned: true + PoseWithCovInitial: true + Value: true + Value: false + Map: + Lanelet2VectorMap: true + PointCloudMap: true + Value: false + Perception: + ObjectRecognition: + Detection: + DetectedObjects: true + Value: true + Prediction: + Maneuver: true + PredictedObjects: true + Value: true + Tracking: + TrackedObjects: true + Value: true + Value: true + OccupancyGrid: + Map: true + Value: true + Segmentation: + NoGroundPointCloud: true + Value: true + TrafficLight: + MapBasedDetectionResult: true + RecognitionResultOnImage: true + Value: true + Value: false + Planning: + Diagnostic: + PlanningErrorMarker: true + Value: true + MissionPlanning: + GoalPose: true + RouteArea: true + Value: true + ScenarioPlanning: + LaneDriving: + BehaviorPlanning: + (old)PathChangeCandidate_LaneChange: true + Bound: true + DebugMarker: + Arrow: true + Avoidance: true + Blind Spot: true + Crosswalk: true + DetectionArea: true + DynamicAvoidance: true + GoalPlanner: true + Intersection: true + LaneFollowing: true + LeftLaneChange: true + NoDrivableLane: true + NoStoppingArea: true + OcclusionSpot: true + OutOfLane: true + RightLaneChange: true + RunOut: true + SideShift: true + SpeedBump: true + StartPlanner: true + StopLine: true + TrafficLight: true + Value: true + VirtualTrafficLight: true + InfoMarker: + Info (Avoidance): true + Info (AvoidanceByLC): true + Info (DynamicAvoidance): true + Info (ExtLaneChangeLeft): true + Info (ExtLaneChangeRight): true + Info (GoalPlanner): true + Info (LaneChangeLeft): true + Info (LaneChangeRight): true + Info (StartPlanner): true + Value: true + Path: true + PathChangeCandidate_Avoidance: true + PathChangeCandidate_AvoidanceByLC: true + PathChangeCandidate_ExternalRequestLaneChangeLeft: true + PathChangeCandidate_ExternalRequestLaneChangeRight: true + PathChangeCandidate_GoalPlanner: true + PathChangeCandidate_LaneChangeLeft: true + PathChangeCandidate_LaneChangeRight: true + PathChangeCandidate_StartPlanner: true + PathReference_Avoidance: true + PathReference_AvoidanceByLC: true + PathReference_GoalPlanner: true + PathReference_LaneChangeLeft: true + PathReference_LaneChangeRight: true + PathReference_StartPlanner: true + Value: true + VirtualWall: + Value: true + VirtualWall (Avoidance): true + VirtualWall (AvoidanceByLC): true + VirtualWall (BlindSpot): true + VirtualWall (Crosswalk): true + VirtualWall (DetectionArea): true + VirtualWall (ExtLaneChangeLeft): true + VirtualWall (ExtLaneChangeRight): true + VirtualWall (GoalPlanner): true + VirtualWall (Intersection): true + VirtualWall (LaneChangeLeft): true + VirtualWall (LaneChangeRight): true + VirtualWall (MergeFromPrivateArea): true + VirtualWall (NoDrivableLane): true + VirtualWall (NoStoppingArea): true + VirtualWall (OcclusionSpot): true + VirtualWall (OutOfLane): true + VirtualWall (RunOut): true + VirtualWall (SpeedBump): true + VirtualWall (StartPlanner): true + VirtualWall (StopLine): true + VirtualWall (TrafficLight): true + VirtualWall (VirtualTrafficLight): true + VirtualWall (Walkway): true + MotionPlanning: + DebugMarker: + ObstacleAvoidance: true + ObstacleCruise: + CruiseVirtualWall: true + DebugMarker: true + SlowDownVirtualWall: true + Value: true + ObstacleStop: true + SurroundObstacleChecker: + Footprint: true + FootprintOffset: true + FootprintRecoverOffset: true + SurroundObstacleCheck: true + Value: true + Value: true + Trajectory: true + Value: true + VirtualWall: + Value: true + VirtualWall (ObstacleAvoidance): true + VirtualWall (ObstacleCruise): true + VirtualWall (ObstacleStop): true + VirtualWall (SurroundObstacle): true + Value: true + ModifiedGoal: true + Parking: + Costmap: true + PartialPoseArray: true + PoseArray: true + Value: true + ScenarioTrajectory: true + Value: true + Value: false + Sensing: + GNSS: + PoseWithCovariance: true + Value: true + LiDAR: + ConcatenatePointCloud: true + MeasurementRange: true + Value: true + Value: true + System: + Grid: true + MRM Summary: true + TF: true + Value: false + Vehicle: + AccelerationMeter: true + ConsoleMeter: true + MaxVelocity: true + PolarGridDisplay: true + SteeringAngle: true + TurnSignal: true + Value: true + VehicleModel: true + VelocityHistory: true + Value: true + Zoom Factor: 1 + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 5 + Min Value: -1 + Value: false + Axis: Z + Channel Name: intensity + Class: rviz_default_plugins/PointCloud2 + Color: 255; 255; 255 + Color Transformer: AxisColor + Decay Time: 0 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Max Intensity: 4096 + Min Color: 0; 0; 0 + Min Intensity: 0 + Name: ConcatenatePointCloud + Position Transformer: XYZ + Selectable: false + Size (Pixels): 3 + Size (m): 0.019999999552965164 + Style: Points + Topic: + Depth: 5 + Durability Policy: Volatile + Filter size: 10 + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /sensing/lidar/concatenated/pointcloud + Use Fixed Frame: false + Use rainbow: true + Value: true + - BUS: + Alpha: 0.5 + Color: 255; 255; 255 + CAR: + Alpha: 0.5 + Color: 255; 255; 255 + CYCLIST: + Alpha: 0.5 + Color: 255; 255; 255 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.029999999329447746 + MOTORCYCLE: + Alpha: 0.5 + Color: 255; 255; 255 + Name: RadarRawObjects(white) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.5 + Color: 255; 255; 255 + Polygon Type: 3d + TRAILER: + Alpha: 0.5 + Color: 255; 255; 255 + TRUCK: + Alpha: 0.5 + Color: 255; 255; 255 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /sensing/radar/detected_objects + UNKNOWN: + Alpha: 0.5 + Color: 255; 255; 255 + Value: true + Visualization Type: Normal + Enabled: false Name: Sensing - Class: rviz_common/Group Enabled: true @@ -2549,7 +2870,571 @@ Visualization Manager: Value: /localization/pose_twist_fusion_filter/pose Value: true - Class: rviz_common/Group - Displays: ~ + Displays: + - BUS: + Alpha: 0.9990000128746033 + Color: 255; 138; 128 + CAR: + Alpha: 0.9990000128746033 + Color: 255; 138; 128 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 255; 138; 128 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 255; 138; 128 + Name: Centerpoint(red1) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 255; 138; 128 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 255; 138; 128 + TRUCK: + Alpha: 0.9990000128746033 + Color: 255; 138; 128 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/centerpoint/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 255; 138; 128 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 255; 82; 82 + CAR: + Alpha: 0.9990000128746033 + Color: 255; 82; 82 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 255; 82; 82 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 255; 82; 82 + Name: CenterpointValidator(red2) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 255; 82; 82 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 255; 82; 82 + TRUCK: + Alpha: 0.9990000128746033 + Color: 255; 82; 82 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/centerpoint/validation/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 255; 82; 82 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 213; 0; 0 + CAR: + Alpha: 0.9990000128746033 + Color: 213; 0; 0 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 213; 0; 0 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 213; 0; 0 + Name: CenterpointROIFusion(red3) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 213; 0; 0 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 213; 0; 0 + TRUCK: + Alpha: 0.9990000128746033 + Color: 213; 0; 0 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/centerpoint/validation/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 213; 0; 0 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 178; 255; 89 + CAR: + Alpha: 0.9990000128746033 + Color: 178; 255; 89 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 178; 255; 89 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 178; 255; 89 + Name: PointPainting(light_green1) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 178; 255; 89 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 178; 255; 89 + TRUCK: + Alpha: 0.9990000128746033 + Color: 178; 255; 89 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/pointpainting/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 178; 255; 89 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 118; 255; 3 + CAR: + Alpha: 0.9990000128746033 + Color: 118; 255; 3 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 118; 255; 3 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 118; 255; 3 + Name: PointPaintingValidator(light_green2) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 118; 255; 3 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 118; 255; 3 + TRUCK: + Alpha: 0.9990000128746033 + Color: 118; 255; 3 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/pointpainting/validation/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 118; 255; 3 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 100; 221; 23 + CAR: + Alpha: 0.9990000128746033 + Color: 100; 221; 23 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 100; 221; 23 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 100; 221; 23 + Name: PointPaintingROIFusion(light_green3) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 100; 221; 23 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 100; 221; 23 + TRUCK: + Alpha: 0.9990000128746033 + Color: 100; 221; 23 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/pointpainting/validation/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 100; 221; 23 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 255; 145; 0 + CAR: + Alpha: 0.9990000128746033 + Color: 255; 145; 0 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 255; 145; 0 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 255; 145; 0 + Name: DetectionByTracker(orange) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 255; 145; 0 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 255; 145; 0 + TRUCK: + Alpha: 0.9990000128746033 + Color: 255; 145; 0 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/detection_by_tracker/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 255; 145; 0 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 213; 0; 249 + CAR: + Alpha: 0.9990000128746033 + Color: 213; 0; 249 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 213; 0; 249 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 213; 0; 249 + Name: CameraLidarFusion(purple) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 213; 0; 249 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 213; 0; 249 + TRUCK: + Alpha: 0.9990000128746033 + Color: 213; 0; 249 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/clustering/camera_lidar_fusion/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 213; 0; 249 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 255; 255; 255 + CAR: + Alpha: 0.9990000128746033 + Color: 255; 255; 255 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 255; 255; 255 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 255; 255; 255 + Name: RadarFarObjects(white) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 255; 255; 255 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 255; 255; 255 + TRUCK: + Alpha: 0.9990000128746033 + Color: 255; 255; 255 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/radar/far_objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 255; 255; 255 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 255; 234; 0 + CAR: + Alpha: 0.9990000128746033 + Color: 255; 234; 0 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 255; 234; 0 + Class: autoware_auto_perception_rviz_plugin/DetectedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 255; 234; 0 + Name: Detection(yellow) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 255; 234; 0 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 255; 234; 0 + TRUCK: + Alpha: 0.9990000128746033 + Color: 255; 234; 0 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/detection/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 255; 234; 0 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 0; 230; 118 + CAR: + Alpha: 0.9990000128746033 + Color: 0; 230; 118 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 0; 230; 118 + Class: autoware_auto_perception_rviz_plugin/TrackedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: true + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 0; 230; 118 + Name: Tracking(green) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 0; 230; 118 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 0; 230; 118 + TRUCK: + Alpha: 0.9990000128746033 + Color: 0; 230; 118 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/tracking/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 0; 230; 118 + Value: false + Visualization Type: Normal + - BUS: + Alpha: 0.9990000128746033 + Color: 0; 176; 255 + CAR: + Alpha: 0.9990000128746033 + Color: 0; 176; 255 + CYCLIST: + Alpha: 0.9990000128746033 + Color: 0; 176; 255 + Class: autoware_auto_perception_rviz_plugin/PredictedObjects + Display Acceleration: true + Display Label: true + Display PoseWithCovariance: false + Display Predicted Path Confidence: true + Display Predicted Paths: true + Display Twist: true + Display UUID: true + Display Velocity: true + Enabled: true + Line Width: 0.10000000149011612 + MOTORCYCLE: + Alpha: 0.9990000128746033 + Color: 0; 176; 255 + Name: Prediction(light_blue) + Namespaces: + {} + PEDESTRIAN: + Alpha: 0.9990000128746033 + Color: 0; 176; 255 + Polygon Type: 3d + TRAILER: + Alpha: 0.9990000128746033 + Color: 0; 176; 255 + TRUCK: + Alpha: 0.9990000128746033 + Color: 0; 176; 255 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Best Effort + Value: /perception/object_recognition/objects + UNKNOWN: + Alpha: 0.9990000128746033 + Color: 0; 176; 255 + Value: false + Visualization Type: Normal Enabled: true Name: Perception - Class: rviz_common/Group From 6620515b627b62e13a83d97ebac6ce7659208eb8 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 25 Oct 2023 10:38:42 +0900 Subject: [PATCH 251/446] feat(intersection): check path margin for overshoot vehicles on red light (#654) --- .../behavior_velocity_planner/intersection.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index c49be22d0a..ea5c5736ca 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -56,6 +56,8 @@ object_dist_to_stopline: 10.0 # [m] ignore_on_amber_traffic_light: object_expected_deceleration: 2.0 # [m/ss] + ignore_on_red_traffic_light: + object_margin_to_path: 2.0 occlusion: enable: false From 9e55e100c985861cc9b5873e972b71211bb084a6 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 25 Oct 2023 17:15:46 +0900 Subject: [PATCH 252/446] feat: add use_conservative_buffer_longitudinal in avoidance (#656) Signed-off-by: Takayuki Murooka --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index fe9c37d200..ea75fc9cb4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -37,6 +37,7 @@ avoid_margin_lateral: 1.0 # [m] safety_buffer_lateral: 0.7 # [m] safety_buffer_longitudinal: 0.0 # [m] + use_conservative_buffer_longitudinal: true # [-] When set to true, the base_link2front is added to the longitudinal buffer before avoidance. truck: is_target: true execute_num: 1 @@ -47,6 +48,7 @@ avoid_margin_lateral: 1.0 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 + use_conservative_buffer_longitudinal: true bus: is_target: true execute_num: 1 @@ -57,6 +59,7 @@ avoid_margin_lateral: 1.0 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 + use_conservative_buffer_longitudinal: true trailer: is_target: true execute_num: 1 @@ -67,6 +70,7 @@ avoid_margin_lateral: 1.0 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 + use_conservative_buffer_longitudinal: true unknown: is_target: true execute_num: 1 @@ -77,6 +81,7 @@ avoid_margin_lateral: 1.0 safety_buffer_lateral: 0.7 safety_buffer_longitudinal: 0.0 + use_conservative_buffer_longitudinal: true bicycle: is_target: true execute_num: 1 @@ -87,6 +92,7 @@ avoid_margin_lateral: 1.0 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 + use_conservative_buffer_longitudinal: true motorcycle: is_target: true execute_num: 1 @@ -97,6 +103,7 @@ avoid_margin_lateral: 1.0 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 + use_conservative_buffer_longitudinal: true pedestrian: is_target: true execute_num: 1 @@ -107,6 +114,7 @@ avoid_margin_lateral: 1.0 safety_buffer_lateral: 1.0 safety_buffer_longitudinal: 1.0 + use_conservative_buffer_longitudinal: true lower_distance_for_polygon_expansion: 30.0 # [m] upper_distance_for_polygon_expansion: 100.0 # [m] From 262a77491e187f4aa678d846bc2c2d53b6961687 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:37:30 +0900 Subject: [PATCH 253/446] chore(rviz): hide interseciton area polygon as default (#655) Signed-off-by: satoshi-ota --- autoware_launch/rviz/autoware.rviz | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index cdb1ffe690..1e0076275a 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -401,6 +401,7 @@ Visualization Manager: walkway_lanelets: true hatched_road_markings_bound: true hatched_road_markings_area: false + intersection_area: false Topic: Depth: 5 Durability Policy: Transient Local From 99281f13da8cc89d91a1da4f66e807a0b0173d17 Mon Sep 17 00:00:00 2001 From: Takeshi Miura <57553950+1222-takeshi@users.noreply.github.com> Date: Thu, 26 Oct 2023 18:31:05 +0900 Subject: [PATCH 254/446] feat(AEB): implement parameterized prediction time horizon and interval (#657) Signed-off-by: 1222-takeshi --- .../autonomous_emergency_braking.param.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/control/autonomous_emergency_braking/autonomous_emergency_braking.param.yaml b/autoware_launch/config/control/autonomous_emergency_braking/autonomous_emergency_braking.param.yaml index 09db0feb34..1a870aff7a 100644 --- a/autoware_launch/config/control/autonomous_emergency_braking/autonomous_emergency_braking.param.yaml +++ b/autoware_launch/config/control/autonomous_emergency_braking/autonomous_emergency_braking.param.yaml @@ -1,5 +1,6 @@ /**: ros__parameters: + publish_debug_pointcloud: false use_predicted_trajectory: true use_imu_path: true voxel_grid_x: 0.05 @@ -11,7 +12,9 @@ t_response: 1.0 a_ego_min: -3.0 a_obj_min: -1.0 - prediction_time_horizon: 1.5 - prediction_time_interval: 0.1 + imu_prediction_time_horizon: 1.5 + imu_prediction_time_interval: 0.1 + mpc_prediction_time_horizon: 1.5 + mpc_prediction_time_interval: 0.1 collision_keeping_sec: 0.0 aeb_hz: 10.0 From 546924401a4aa3d29119dab77a077796d5ea3bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Thu, 26 Oct 2023 19:50:29 +0300 Subject: [PATCH 255/446] fix(rviz2): update traffic_light/debug/rois topic name (#642) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- autoware_launch/rviz/autoware.rviz | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 1e0076275a..fda080bfcf 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -903,7 +903,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Best Effort - Value: /perception/traffic_light_recognition/debug/rois + Value: /perception/traffic_light_recognition/traffic_light/debug/rois Value: true - Class: rviz_default_plugins/MarkerArray Enabled: true From 6805d0a42db8e4fb1464385ea1af7d378ee05f98 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Mon, 30 Oct 2023 01:06:35 +0900 Subject: [PATCH 256/446] fix(lane_change): separate backward buffer for blocking object (#661) Signed-off-by: Fumiya Watanabe --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index e09f6e479b..b7ae55536e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -5,6 +5,7 @@ prepare_duration: 4.0 # [s] backward_length_buffer_for_end_of_lane: 3.0 # [m] + backward_length_buffer_for_blocking_object: 3.0 # [m] lane_change_finish_judge_buffer: 2.0 # [m] lane_changing_lateral_jerk: 0.5 # [m/s3] From 7c8fb4e2015a71a6a76ab355295bf7bd9ca91803 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Mon, 30 Oct 2023 10:29:08 +0900 Subject: [PATCH 257/446] feat(behavior_path_planner): add traffic light recognition timeout threshold (#662) Signed-off-by: satoshi-ota --- .../behavior_path_planner/behavior_path_planner.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml index 3a7393a4c9..6acbe9783d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml @@ -3,6 +3,8 @@ verbose: false max_iteration_num: 100 + traffic_light_signal_timeout: 1.0 + groot_zmq_publisher_port: 1666 groot_zmq_server_port: 1667 From 4574c9b2738bb5b77348e5ed4d2ffd3daa54f073 Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Mon, 30 Oct 2023 12:13:47 +0900 Subject: [PATCH 258/446] feat(radar_object_tracker): update and add parameter about radar_object_tracker for far away perecption (#658) update and add parameter about radar_object_tracker for far away detection Signed-off-by: yoshiri --- .../data_association_matrix.param.yaml | 8 ++--- .../default_tracker.param.yaml | 14 ++++---- .../radar_object_tracker.param.yaml | 9 +++-- .../constant_turn_rate_motion_tracker.yaml | 36 +++++++++++++++++++ .../tracking/linear_motion_tracker.yaml | 24 ++++++++----- .../tier4_perception_component.launch.xml | 4 +++ 6 files changed, 70 insertions(+), 25 deletions(-) create mode 100644 autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/constant_turn_rate_motion_tracker.yaml diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/data_association_matrix.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/data_association_matrix.param.yaml index 104d790d18..69628414e6 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/data_association_matrix.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/data_association_matrix.param.yaml @@ -14,10 +14,10 @@ max_dist_matrix: #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN [4.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, #UNKNOWN - 4.0, 4.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #CAR - 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #TRUCK - 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #BUS - 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, #TRAILER + 4.0, 8.0, 8.0, 8.0, 8.0, 1.0, 1.0, 1.0, #CAR + 4.0, 6.0, 8.0, 8.0, 8.0, 1.0, 1.0, 1.0, #TRUCK + 4.0, 6.0, 8.0, 8.0, 8.0, 1.0, 1.0, 1.0, #BUS + 4.0, 6.0, 8.0, 8.0, 8.0, 1.0, 1.0, 1.0, #TRAILER 3.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0, #MOTORBIKE 3.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0, #BICYCLE 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0] #PEDESTRIAN diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml index 757125202d..6c26034860 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/default_tracker.param.yaml @@ -1,9 +1,9 @@ /**: ros__parameters: - car_tracker: "linear_motion_tracker" - truck_tracker: "linear_motion_tracker" - bus_tracker: "linear_motion_tracker" - trailer_tracker: "linear_motion_tracker" - pedestrian_tracker: "linear_motion_tracker" - bicycle_tracker: "linear_motion_tracker" - motorcycle_tracker: "linear_motion_tracker" + car_tracker: "constant_turn_rate_motion_tracker" + truck_tracker: "constant_turn_rate_motion_tracker" + bus_tracker: "constant_turn_rate_motion_tracker" + trailer_tracker: "constant_turn_rate_motion_tracker" + pedestrian_tracker: "constant_turn_rate_motion_tracker" + bicycle_tracker: "constant_turn_rate_motion_tracker" + motorcycle_tracker: "constant_turn_rate_motion_tracker" diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml index f80adffb41..d2c0841cf3 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml @@ -4,12 +4,11 @@ # basic settings world_frame_id: "map" tracker_lifetime: 1.0 # [sec] - # if empty, use default config declared in this package - tracking_config_directory: "" + measurement_count_threshold: 3 # object will be published if it is tracked more than this threshold # delay compensate parameters publish_rate: 10.0 - enable_delay_compensation: false + enable_delay_compensation: true # logging enable_logging: false @@ -18,10 +17,10 @@ # filtering ## 1. distance based filtering: remove closer objects than this threshold use_distance_based_noise_filtering: true - minimum_range_threshold: 70.0 # [m] + minimum_range_threshold: 60.0 # [m] ## 2. lanelet map based filtering use_map_based_noise_filtering: true max_distance_from_lane: 5.0 # [m] max_angle_diff_from_lane: 0.785398 # [rad] (45 deg) - max_lateral_velocity: 5.0 # [m/s] + max_lateral_velocity: 7.0 # [m/s] diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/constant_turn_rate_motion_tracker.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/constant_turn_rate_motion_tracker.yaml new file mode 100644 index 0000000000..f80f881cab --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/constant_turn_rate_motion_tracker.yaml @@ -0,0 +1,36 @@ +default: + # This file defines the parameters for the linear motion tracker. + # All this parameter coordinate is assumed to be in the vehicle coordinate system. + # So, the x axis is pointing to the front of the vehicle, y axis is pointing to the left of the vehicle. + ekf_params: + # random walk noise is used to model the acceleration noise + process_noise_std: # [m/s^2] + x: 0.5 + y: 0.5 + yaw: 0.1 + vx: 1.0 # assume 1m/s velocity noise + wz: 0.4 + measurement_noise_std: + x: 4.0 # [m] + y: 4.0 # [m] + # y: 0.02 # rad/m if use_polar_coordinate_in_measurement_noise is true + yaw: 0.2 # [rad] + vx: 10 # [m/s] + initial_covariance_std: + x: 3.0 # [m] + y: 6.0 # [m] + yaw: 10.0 # [rad] + vx: 100.0 # [m/s] + wz: 10.0 # [rad/s] + # input flag + trust_yaw_input: false # set true if yaw input of sensor is reliable + trust_twist_input: false # set true if twist input of sensor is reliable + use_polar_coordinate_in_measurement_noise: false # set true if you want to define the measurement noise in polar coordinate + assume_zero_yaw_rate: false # set true if you want to assume zero yaw rate + # output limitation + limit: + max_speed: 80.0 # [m/s] + # low pass filter is used to smooth the yaw and shape estimation + low_pass_filter: + time_constant: 1.0 # [s] + sampling_time: 0.1 # [s] diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/linear_motion_tracker.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/linear_motion_tracker.yaml index 71367f4575..5e813558a2 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/linear_motion_tracker.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/tracking/linear_motion_tracker.yaml @@ -7,22 +7,28 @@ default: process_noise_std: # [m/s^2] ax: 0.98 # assume 0.1G acceleration noise ay: 0.98 - vx: 0.1 # assume 0.1m/s velocity noise - vy: 0.1 + vx: 1.0 # assume 1m/s velocity noise + vy: 1.0 x: 1.0 # assume 1m position noise y: 1.0 measurement_noise_std: x: 0.6 # [m] - y: 0.9 # [m] - vx: 0.4 # [m/s] - vy: 1 # [m/s] + # y: 4.0 # [m] + y: 0.01 # rad/m if use_polar_coordinate_in_measurement_noise is true + vx: 10 # [m/s] + vy: 100 # [m/s] initial_covariance_std: x: 3.0 # [m] y: 6.0 # [m] - vx: 1.0 # [m/s] - vy: 5.0 # [m/s] - ax: 0.5 # [m/s^2] - ay: 1.0 # [m/s^2] + vx: 1000.0 # [m/s] + vy: 1000.0 # [m/s] + ax: 1000.0 # [m/s^2] + ay: 1000.0 # [m/s^2] + estimate_acc: false # set true if you want to estimate the acceleration + # input flag + trust_yaw_input: false # set true if yaw input of sensor is reliable + trust_twist_input: false # set true if twist input of sensor is reliable + use_polar_coordinate_in_measurement_noise: true # set true if you want to define the measurement noise in polar coordinate # output limitation limit: max_speed: 80.0 # [m/s] diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index e3df873492..5959d58e18 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -85,6 +85,10 @@ name="object_recognition_tracking_radar_object_tracker_node_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml" /> + Date: Mon, 30 Oct 2023 21:34:19 +0900 Subject: [PATCH 259/446] refactor(avoidance): cleanup force avoidance params (#667) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index ea75fc9cb4..ab1273b5b5 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -9,7 +9,6 @@ # avoidance module common setting enable_bound_clipping: false - enable_force_avoidance_for_stopped_vehicle: false enable_yield_maneuver: true enable_yield_maneuver_during_shifting: false enable_cancel_maneuver: true @@ -120,11 +119,6 @@ # For target object filtering target_filtering: - # params for avoidance of not-parked objects - threshold_time_force_avoidance_for_stopped_vehicle: 1.0 # [s] - object_ignore_section_traffic_light_in_front_distance: 100.0 # [m] - object_ignore_section_crosswalk_in_front_distance: 30.0 # [m] - object_ignore_section_crosswalk_behind_distance: 30.0 # [m] # detection range object_check_goal_distance: 20.0 # [m] # filtering parking objects @@ -141,6 +135,17 @@ max_forward_distance: 150.0 # [m] backward_distance: 10.0 # [m] + # params for avoidance of vehicle type objects that are ambiguous as to whether they are parked. + force_avoidance: + enable: false # [-] + time_threshold: 1.0 # [s] + ignore_area: + traffic_light: + front_distance: 100.0 # [m] + crosswalk: + front_distance: 30.0 # [m] + behind_distance: 30.0 # [m] + # For safety check safety_check: # safety check configuration From 0debb71dccab182faed8616839874064974c8118 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 31 Oct 2023 18:41:27 +0900 Subject: [PATCH 260/446] feat(avoidance): return original lane by red traffic light (#663) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index ab1273b5b5..98d75415d0 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -191,11 +191,18 @@ # avoidance distance parameters longitudinal: prepare_time: 2.0 # [s] - remain_buffer_distance: 30.0 # [m] min_prepare_distance: 1.0 # [m] min_slow_down_speed: 1.38 # [m/s] buf_slow_down_speed: 0.56 # [m/s] nominal_avoidance_speed: 8.33 # [m/s] + # return dead line + return_dead_line: + goal: + enable: true # [-] + buffer: 30.0 # [m] + traffic_light: + enable: true # [-] + buffer: 3.0 # [m] # For yield maneuver yield: From b868eaee917ff8e0555b515eecef242ecbb42b42 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 31 Oct 2023 20:06:04 +0900 Subject: [PATCH 261/446] feat(intersection): add ttc debug plotter (#666) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index ea5c5736ca..960dd89b00 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -83,6 +83,9 @@ attention_lane_curvature_calculation_ds: 0.5 static_occlusion_with_traffic_light_timeout: 0.5 + debug: + ttc: [0] + enable_rtc: intersection: false # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval intersection_to_occlusion: false From 2255356e0164430ed5bc7dd325e3b61e983567a3 Mon Sep 17 00:00:00 2001 From: Takeshi Miura Date: Wed, 1 Nov 2023 13:05:46 +0900 Subject: [PATCH 262/446] feat(vehicle_cmd_gate): improve debug marker activation (#659) * feat(vehicle_cmd_gate): add filter activated threshold Signed-off-by: 1222-takeshi * feat: update parameter Signed-off-by: 1222-takeshi * feat: add condition for filtering marker Signed-off-by: 1222-takeshi --------- Signed-off-by: 1222-takeshi --- .../config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml index 191e894622..7ad685217f 100644 --- a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml +++ b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml @@ -6,6 +6,8 @@ check_external_emergency_heartbeat: false use_start_request: false enable_cmd_limit_filter: true + filter_activated_count_threshold: 5 + filter_activated_velocity_threshold: 1.0 external_emergency_stop_heartbeat_timeout: 0.0 stop_hold_acceleration: -1.5 emergency_acceleration: -2.4 From e76498c62dec7741a3b993ae2895056e33fd7f29 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:23:18 +0900 Subject: [PATCH 263/446] refactor(planning): update args name (#671) Signed-off-by: satoshi-ota --- .../tier4_planning_component.launch.xml | 52 +++++++++---------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index a1cb2b79f5..0f70873d55 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -29,37 +29,35 @@ - - - - - - - - - - + + + + + + + + + + - + + + + + + + + + + + + + + + From 80fa7e8f58abc9794957277f338a3f006e74c180 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Mon, 6 Nov 2023 16:11:00 +0900 Subject: [PATCH 264/446] refactor(planning): update args name (#675) Signed-off-by: satoshi-ota --- .../tier4_planning_component.launch.xml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 0f70873d55..7a21273131 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -4,10 +4,11 @@ - - - - + + + + + @@ -71,15 +72,10 @@ - - - - - - + From 81d71f69de825714b4555804c1e130723ba45fb7 Mon Sep 17 00:00:00 2001 From: Takeshi Miura Date: Mon, 6 Nov 2023 19:32:58 +0900 Subject: [PATCH 265/446] chore(goal_planner): fix typo (#670) Signed-off-by: 1222-takeshi --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 0f1b441bed..295c9caf84 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -48,7 +48,7 @@ maximum_deceleration: 1.0 maximum_jerk: 1.0 path_priority: "efficient_path" # "efficient_path" or "close_goal" - efficient_path_order: ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] # only lane based pull over(exculde freespace parking) + efficient_path_order: ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] # only lane based pull over(exclude freespace parking) # shift parking shift_parking: From a71571bd55168c3cb9030c28f8ff872b5157814c Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Mon, 6 Nov 2023 20:02:04 +0900 Subject: [PATCH 266/446] feat(ekf_localizer, system_error_monitor): system_error_monitor handles ekf diags (#674) * fix(ekf_localizer): change default parameter for no update count Signed-off-by: kminoda * update system_error_monitor Signed-off-by: kminoda --------- Signed-off-by: kminoda --- autoware_launch/config/localization/ekf_localizer.param.yaml | 4 ++-- .../system_error_monitor/system_error_monitor.param.yaml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/localization/ekf_localizer.param.yaml b/autoware_launch/config/localization/ekf_localizer.param.yaml index 667217d259..1c16624605 100644 --- a/autoware_launch/config/localization/ekf_localizer.param.yaml +++ b/autoware_launch/config/localization/ekf_localizer.param.yaml @@ -24,9 +24,9 @@ # for diagnostics pose_no_update_count_threshold_warn: 50 - pose_no_update_count_threshold_error: 250 + pose_no_update_count_threshold_error: 100 twist_no_update_count_threshold_warn: 50 - twist_no_update_count_threshold_error: 250 + twist_no_update_count_threshold_error: 100 # for velocity measurement limitation (Set 0.0 if you want to ignore) threshold_observable_velocity_mps: 0.0 # [m/s] diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml index b8da5f4e7c..6a763eace4 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml @@ -24,6 +24,7 @@ /autoware/localization/node_alive_monitoring: default /autoware/localization/performance_monitoring/matching_score: { sf_at: "warn", lf_at: "none", spf_at: "none" } /autoware/localization/performance_monitoring/localization_accuracy: default + /autoware/localization/performance_monitoring/sensor_fusion_status: { sf_at: "error", lf_at: "none", spf_at: "none" } /autoware/map/node_alive_monitoring: default From 916c39cb4ef170c727cc22e689eaa468d834f5cd Mon Sep 17 00:00:00 2001 From: KokiAoki <81670028+KOKIAOKI@users.noreply.github.com> Date: Tue, 7 Nov 2023 16:43:32 +0900 Subject: [PATCH 267/446] feat(ndt_scan_matcher): add parameters of real-time covariance estimation (#643) * add covariance_estimation * fix * fix * fix: parameter names and explanations Signed-off-by: Koki Aoki * fix: A parameter that I forgot to add Signed-off-by: Koki Aoki * fix: remove white space Signed-off-by: KOKIAOKI * fix: remove white spaces --------- Signed-off-by: Koki Aoki Signed-off-by: KOKIAOKI --- .../config/localization/ndt_scan_matcher.param.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index 0ba1b1a2e1..1a6c26cd9c 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -72,6 +72,14 @@ 0.0, 0.0, 0.0, 0.0, 0.0, 0.000625, ] + # 2D Real-time covariance estimation with multiple searches (output_pose_covariance is the minimum value) + use_covariance_estimation: false + + # Offset arrangement in covariance estimation [m] + # initial_pose_offset_model_x & initial_pose_offset_model_y must have the same number of elements. + initial_pose_offset_model_x: [0.0, 0.0, 0.5, -0.5, 1.0, -1.0] + initial_pose_offset_model_y: [0.5, -0.5, 0.0, 0.0, 0.0, 0.0] + # Regularization switch regularization_enabled: false From 426378d93ada2c1b6f205f4e6be4cd1be8e2d0c7 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 7 Nov 2023 17:29:53 +0900 Subject: [PATCH 268/446] chore(tier4_planning_launch): add costmap generator config (#679) Signed-off-by: satoshi-ota --- .../common/costmap_generator.param.yaml | 22 +++++++++++++++++++ .../tier4_planning_component.launch.xml | 4 ++++ 2 files changed, 26 insertions(+) create mode 100644 autoware_launch/config/planning/scenario_planning/common/costmap_generator.param.yaml diff --git a/autoware_launch/config/planning/scenario_planning/common/costmap_generator.param.yaml b/autoware_launch/config/planning/scenario_planning/common/costmap_generator.param.yaml new file mode 100644 index 0000000000..cf4f73dc79 --- /dev/null +++ b/autoware_launch/config/planning/scenario_planning/common/costmap_generator.param.yaml @@ -0,0 +1,22 @@ +/**: + ros__parameters: + costmap_frame: "map" + vehicle_frame: "base_link" + map_frame: "map" + update_rate: 10.0 + activate_by_scenario: False + grid_min_value: 0.0 + grid_max_value: 1.0 + grid_resolution: 0.2 + grid_length_x: 70.0 + grid_length_y: 70.0 + grid_position_x: 0.0 + grid_position_y: 0.0 + maximum_lidar_height_thres: 0.3 + minimum_lidar_height_thres: -2.2 + use_wayarea: true + use_parkinglot: true + use_objects: true + use_points: true + expand_polygon_size: 1.0 + size_of_expansion_kernel: 9 diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 7a21273131..5f14006f7a 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -17,6 +17,9 @@ + + + @@ -25,6 +28,7 @@ + From 5ba1301ca2be42405d18915f1441c22a35b3ad8e Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 8 Nov 2023 18:18:00 +0900 Subject: [PATCH 269/446] feat(intersection): rectify initial accel/velocity profile in ego velocity profile (#677) feat(intersection): rectify smoothed velocity Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 960dd89b00..22f68733a3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -35,18 +35,18 @@ distance_thr: 1.0 # [m] collision_detection: - state_transit_margin_time: 0.0 + state_transit_margin_time: 0.5 min_predicted_path_confidence: 0.05 minimum_ego_predicted_velocity: 1.388 # [m/s] fully_prioritized: collision_start_margin_time: 2.0 collision_end_margin_time: 0.0 partially_prioritized: - collision_start_margin_time: 4.0 - collision_end_margin_time: 6.0 + collision_start_margin_time: 3.0 + collision_end_margin_time: 2.0 not_prioritized: - collision_start_margin_time: 4.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object - collision_end_margin_time: 6.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object + collision_start_margin_time: 3.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object + collision_end_margin_time: 2.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object keep_detection_vel_thr: 0.833 # == 3.0km/h. keep detection if ego is ego.vel < keep_detection_vel_thr use_upstream_velocity: true # flag to use the planned velocity profile from the upstream module minimum_upstream_velocity: 0.01 # [m/s] minimum velocity to avoid null division for the stop line from the upstream velocity From 0cd5d891a36ac34a32a417205905c109f2bafe7b Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 9 Nov 2023 08:09:17 +0900 Subject: [PATCH 270/446] refactor(launch): add new option to select planning preset (#680) * chore(config): remove behavior launch modules Signed-off-by: satoshi-ota * refactor(config): add preset yaml file Signed-off-by: satoshi-ota * refactor(launch): add new option to select planning preset Signed-off-by: satoshi-ota * refactor(config): remove unused params Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../planning/preset/default_preset.yaml | 120 ++++++++++++++++++ .../behavior_path_planner.param.yaml | 3 - .../scene_module_manager.param.yaml | 10 -- .../behavior_velocity_planner.param.yaml | 16 --- autoware_launch/launch/autoware.launch.xml | 7 +- .../tier4_planning_component.launch.xml | 24 +--- .../launch/e2e_simulator.launch.xml | 5 + .../launch/logging_simulator.launch.xml | 5 + .../launch/planning_simulator.launch.xml | 5 + 9 files changed, 147 insertions(+), 48 deletions(-) create mode 100644 autoware_launch/config/planning/preset/default_preset.yaml diff --git a/autoware_launch/config/planning/preset/default_preset.yaml b/autoware_launch/config/planning/preset/default_preset.yaml new file mode 100644 index 0000000000..a6f2ed025d --- /dev/null +++ b/autoware_launch/config/planning/preset/default_preset.yaml @@ -0,0 +1,120 @@ +launch: + # behavior path modules + - arg: + name: launch_avoidance_module + default: "true" + - arg: + name: launch_avoidance_by_lane_change_module + default: "true" + - arg: + name: launch_dynamic_avoidance_module + default: "false" + - arg: + name: launch_lane_change_right_module + default: "true" + - arg: + name: launch_lane_change_left_module + default: "true" + - arg: + name: launch_external_request_lane_change_right_module + default: "false" + - arg: + name: launch_external_request_lane_change_left_module + default: "false" + - arg: + name: launch_goal_planner_module + default: "true" + - arg: + name: launch_start_planner_module + default: "true" + - arg: + name: launch_side_shift_module + default: "true" + - arg: + name: use_experimental_lane_change_function + default: "true" + + # behavior velocity modules + - arg: + name: launch_crosswalk_module + default: "true" + - arg: + name: launch_walkway_module + default: "true" + - arg: + name: launch_traffic_light_module + default: "true" + - arg: + name: launch_intersection_module + default: "true" + - arg: + name: launch_merge_from_private_module + default: "true" + - arg: + name: launch_blind_spot_module + default: "true" + - arg: + name: launch_detection_area_module + default: "true" + - arg: + name: launch_virtual_traffic_light_module + default: "false" + - arg: + name: launch_no_stopping_area_module + default: "true" + - arg: + name: launch_stop_line_module + default: "true" + - arg: + name: launch_occlusion_spot_module + default: "false" + - arg: + name: launch_run_out_module + default: "false" + - arg: + name: launch_speed_bump_module + default: "false" + - arg: + name: launch_out_of_lane_module + default: "true" + - arg: + name: launch_no_drivable_lane_module + default: "false" + + # motion planning modules + - arg: + name: motion_path_smoother_type + default: elastic_band + # option: elastic_band + # none + + - arg: + name: motion_path_planner_type + default: obstacle_avoidance_planner + # option: obstacle_avoidance_planner + # path_sampler + # none + + - arg: + name: motion_stop_planner_type + default: obstacle_stop_planner + # option: obstacle_stop_planner + # obstacle_cruise_planner + # none + + - arg: + name: motion_velocity_smoother_type + default: JerkFiltered + # option: JerkFiltered + # L2 + # Linf(Unstable) + # Analytical + + - arg: + name: launch_surround_obstacle_checker + default: "true" + + # parking modules + - arg: + name: launch_parking_module + default: "true" diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml index 6acbe9783d..8d93a95b37 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml @@ -5,9 +5,6 @@ traffic_light_signal_timeout: 1.0 - groot_zmq_publisher_port: 1666 - groot_zmq_server_port: 1667 - planning_hz: 10.0 backward_path_length: 5.0 forward_path_length: 300.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index 1fc83edd08..0090a29926 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -4,7 +4,6 @@ /**: ros__parameters: external_request_lane_change_left: - enable_module: false enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true @@ -13,7 +12,6 @@ max_module_size: 1 external_request_lane_change_right: - enable_module: false enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: true @@ -22,7 +20,6 @@ max_module_size: 1 lane_change_left: - enable_module: true enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true @@ -31,7 +28,6 @@ max_module_size: 1 lane_change_right: - enable_module: true enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true @@ -40,7 +36,6 @@ max_module_size: 1 start_planner: - enable_module: true enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false @@ -49,7 +44,6 @@ max_module_size: 1 side_shift: - enable_module: true enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false @@ -58,7 +52,6 @@ max_module_size: 1 goal_planner: - enable_module: true enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false @@ -67,7 +60,6 @@ max_module_size: 1 avoidance: - enable_module: true enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false @@ -76,7 +68,6 @@ max_module_size: 1 avoidance_by_lc: - enable_module: true enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false @@ -85,7 +76,6 @@ max_module_size: 1 dynamic_avoidance: - enable_module: false enable_rtc: false enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: true diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml index 7a0ef047f7..aa51c38b55 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml @@ -8,19 +8,3 @@ system_delay: 0.5 delay_response_time: 0.5 is_publish_debug_path: false # publish all debug path with lane id in each module - launch_modules: - - behavior_velocity_planner::CrosswalkModulePlugin - - behavior_velocity_planner::WalkwayModulePlugin - - behavior_velocity_planner::TrafficLightModulePlugin - - behavior_velocity_planner::IntersectionModulePlugin # Intersection module should be before merge from private to declare intersection parameters. - - behavior_velocity_planner::MergeFromPrivateModulePlugin - - behavior_velocity_planner::BlindSpotModulePlugin - - behavior_velocity_planner::DetectionAreaModulePlugin - # behavior_velocity_planner::VirtualTrafficLightModulePlugin - - behavior_velocity_planner::NoStoppingAreaModulePlugin # No stopping area module requires all the stop line. Therefore this modules should be placed at the bottom. - - behavior_velocity_planner::StopLineModulePlugin # Permanent stop line module should be after no stopping area - # behavior_velocity_planner::OcclusionSpotModulePlugin - # behavior_velocity_planner::RunOutModulePlugin - # behavior_velocity_planner::SpeedBumpModulePlugin - - behavior_velocity_planner::OutOfLaneModulePlugin - # behavior_velocity_planner::NoDrivableLaneModulePlugin diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index 5d98c9388f..80822d0146 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -8,6 +8,9 @@ + + + @@ -98,7 +101,9 @@ - + + + diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 5f14006f7a..5fb17541cd 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -1,24 +1,8 @@ - - - - - - - - - - - - - - - - - - + + @@ -26,6 +10,7 @@ + @@ -34,6 +19,7 @@ + @@ -46,6 +32,7 @@ + @@ -68,6 +55,7 @@ + diff --git a/autoware_launch/launch/e2e_simulator.launch.xml b/autoware_launch/launch/e2e_simulator.launch.xml index fe8d1de1d8..d920584c6c 100644 --- a/autoware_launch/launch/e2e_simulator.launch.xml +++ b/autoware_launch/launch/e2e_simulator.launch.xml @@ -6,6 +6,9 @@ + + + @@ -43,6 +46,8 @@ + + diff --git a/autoware_launch/launch/logging_simulator.launch.xml b/autoware_launch/launch/logging_simulator.launch.xml index 7eb13135d3..a2b66e91ed 100644 --- a/autoware_launch/launch/logging_simulator.launch.xml +++ b/autoware_launch/launch/logging_simulator.launch.xml @@ -7,6 +7,9 @@ + + + @@ -39,6 +42,8 @@ + + diff --git a/autoware_launch/launch/planning_simulator.launch.xml b/autoware_launch/launch/planning_simulator.launch.xml index fdc86ebba7..28a0f0e347 100644 --- a/autoware_launch/launch/planning_simulator.launch.xml +++ b/autoware_launch/launch/planning_simulator.launch.xml @@ -6,6 +6,9 @@ + + + @@ -39,6 +42,8 @@ + + From 29ea47918ee51ea3326c26457f64b60175b8076e Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 9 Nov 2023 19:59:58 +0900 Subject: [PATCH 271/446] feat: enable the run_out module (#683) feat: enable run_out Signed-off-by: Takayuki Murooka --- autoware_launch/config/planning/preset/default_preset.yaml | 2 +- .../behavior_velocity_planner/run_out.param.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/preset/default_preset.yaml b/autoware_launch/config/planning/preset/default_preset.yaml index a6f2ed025d..fa4a2e4308 100644 --- a/autoware_launch/config/planning/preset/default_preset.yaml +++ b/autoware_launch/config/planning/preset/default_preset.yaml @@ -70,7 +70,7 @@ launch: default: "false" - arg: name: launch_run_out_module - default: "false" + default: "true" - arg: name: launch_speed_bump_module default: "false" diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml index 2641214ac5..ca24c59598 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml @@ -45,7 +45,7 @@ # parameter to avoid sudden stopping slow_down_limit: - enable: true + enable: false max_jerk: -0.7 # [m/s^3] minimum jerk deceleration for safe brake. max_acc : -2.0 # [m/s^2] minimum accel deceleration for safe brake. From 2b25e8126d8ef84e6eb04310b29ecf599a886b22 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Mon, 13 Nov 2023 20:16:50 +0900 Subject: [PATCH 272/446] fix(perception): add detection_by_tracker param file (#676) Signed-off-by: badai-nguyen --- .../detection_by_tracker.param.yaml | 11 +++++++++++ .../components/tier4_perception_component.launch.xml | 4 ++++ 2 files changed, 15 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml b/autoware_launch/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml new file mode 100644 index 0000000000..6957040506 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml @@ -0,0 +1,11 @@ +/**: + ros__parameters: + tracker_ignore_label: + UNKNOWN : true + CAR : false + TRUCK : false + BUS : false + TRAILER : false + MOTORCYCLE : false + BICYCLE : false + PEDESTRIAN : false diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 5959d58e18..db79336fb5 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -64,6 +64,10 @@ name="object_recognition_detection_object_merger_distance_threshold_list_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/object_merger/overlapped_judge.param.yaml" /> + Date: Tue, 14 Nov 2023 11:03:57 +0900 Subject: [PATCH 273/446] feat(obstacle_cruise_planner): use obstacle velocity based obstacle parameters (#681) * add moving parameters for testing Signed-off-by: Daniel Sanchez * param tuning for tests Signed-off-by: Daniel Sanchez * wip params for velocity-based obscruise planner Signed-off-by: Daniel Sanchez * add different values for debugging Signed-off-by: Daniel Sanchez * set hysteresis-based obstacle moving classification Signed-off-by: Daniel Sanchez * set params to match previous values Signed-off-by: Daniel Sanchez * eliminate pedestrian mention Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez Signed-off-by: Daniel Sanchez --- .../obstacle_cruise_planner.param.yaml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index ddea1a9b56..4c9f84d5eb 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -182,10 +182,19 @@ labels: - "default" default: - min_lat_margin: 0.2 - max_lat_margin: 1.0 - min_ego_velocity: 2.0 - max_ego_velocity: 8.0 + moving: + min_lat_margin: 0.2 + max_lat_margin: 1.0 + min_ego_velocity: 2.0 + max_ego_velocity: 8.0 + static: + min_lat_margin: 0.2 + max_lat_margin: 1.0 + min_ego_velocity: 2.0 + max_ego_velocity: 8.0 + + moving_object_speed_threshold: 0.5 # [m/s] how fast the object needs to move to be considered as "moving" + moving_object_hysteresis_range: 0.1 # [m/s] hysteresis range used to prevent chattering when obstacle moves close to moving_object_speed_threshold time_margin_on_target_velocity: 1.5 # [s] From 064c458ff916dfb34da3c460cfac797afef3bf9f Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Tue, 14 Nov 2023 15:05:11 +0900 Subject: [PATCH 274/446] feat(duplicated_node_checker): enable duplicated_node_checker in simulation (#686) Enable duplicated node checker in planning simulation Signed-off-by: kyoichi-sugahara --- .../system_error_monitor.planning_simulation.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml index 522dbb51ee..3fd6264376 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml @@ -39,7 +39,7 @@ /autoware/system/emergency_stop_operation: default /autoware/system/service_log_checker: { sf_at: "warn", lf_at: "none", spf_at: "none" } # /autoware/system/resource_monitoring: { sf_at: "warn", lf_at: "error", spf_at: "none" } - # /autoware/system/duplicated_node_checker: default + /autoware/system/duplicated_node_checker: default /autoware/vehicle/node_alive_monitoring: default From 81b9f112dff791bb67ec50e175482e645a6e7434 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 14 Nov 2023 21:37:26 +0900 Subject: [PATCH 275/446] feat: add motion_velocity_smoother's virtual wall in rviz (#684) Signed-off-by: Takayuki Murooka --- autoware_launch/rviz/autoware.rviz | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index fda080bfcf..c30060659a 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -2140,6 +2140,18 @@ Visualization Manager: Reliability Policy: Reliable Value: /planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/virtual_wall Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: VirtualWall (MotionVelocitySmoother) + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/scenario_planning/motion_velocity_smoother/virtual_wall + Value: true Enabled: true Name: VirtualWall - Class: rviz_common/Group From c97cf8bb8d23e93a39e4b31a69ffac90c79ab753 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Wed, 15 Nov 2023 23:26:03 +0900 Subject: [PATCH 276/446] fix(detected_object_validation): add param (#669) * fix(detected_object_validation): add param Signed-off-by: badai-nguyen * fix: change to 2d validator use Signed-off-by: badai-nguyen --------- Signed-off-by: badai-nguyen --- .../obstacle_pointcloud_based_validator.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/detection/detected_object_validation/obstacle_pointcloud_based_validator.param.yaml b/autoware_launch/config/perception/object_recognition/detection/detected_object_validation/obstacle_pointcloud_based_validator.param.yaml index 22999b411f..b98f8adfb5 100644 --- a/autoware_launch/config/perception/object_recognition/detection/detected_object_validation/obstacle_pointcloud_based_validator.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/detected_object_validation/obstacle_pointcloud_based_validator.param.yaml @@ -11,3 +11,5 @@ min_points_and_distance_ratio: #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN [800.0, 880.0, 800.0, 800.0, 800.0, 800.0, 800.0, 800.0] + + using_2d_validator: true From 6679b5dec598dd78e05cec1057a3089091d0d9e1 Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Thu, 16 Nov 2023 15:25:09 +0900 Subject: [PATCH 277/446] feat(radar_object_clustering): move radar object clustering params to autoware_launch (#672) * add radar object clustering param path Signed-off-by: yoshiri * style(pre-commit): autofix --------- Signed-off-by: yoshiri Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../clustering/radar_object_clustering.param.yaml | 15 +++++++++++++++ .../tier4_perception_component.launch.xml | 4 ++++ 2 files changed, 19 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/clustering/radar_object_clustering.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/clustering/radar_object_clustering.param.yaml b/autoware_launch/config/perception/object_recognition/detection/clustering/radar_object_clustering.param.yaml new file mode 100644 index 0000000000..2abbf14622 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/clustering/radar_object_clustering.param.yaml @@ -0,0 +1,15 @@ +/**: + ros__parameters: + # clustering parameter + angle_threshold: 0.174 # [rad] (10 deg) + distance_threshold: 10.0 # [m] + velocity_threshold: 4.0 # [m/s] + + # output object settings + # set false if you want to use the object information from radar + is_fixed_label: true + fixed_label: "CAR" + is_fixed_size: true + size_x: 4.0 # [m] + size_y: 1.5 # [m] + size_z: 1.5 # [m] diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index db79336fb5..ece7bee52c 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -72,6 +72,10 @@ name="object_recognition_detection_radar_lanelet_filtering_range_param" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/object_filter/radar_lanelet_filter.param.yaml" /> + Date: Thu, 16 Nov 2023 17:10:30 +0900 Subject: [PATCH 278/446] fix(avoidance): prevent sudden steering at yield maneuver (#690) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 98d75415d0..f3f04270d6 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -190,7 +190,8 @@ max_deviation_from_lane: 0.5 # [m] # avoidance distance parameters longitudinal: - prepare_time: 2.0 # [s] + min_prepare_time: 1.0 # [s] + max_prepare_time: 2.0 # [s] min_prepare_distance: 1.0 # [m] min_slow_down_speed: 1.38 # [m/s] buf_slow_down_speed: 0.56 # [m/s] From 8f660e4def5910b811fcc42c454e7b70bb5c3650 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Thu, 16 Nov 2023 18:06:08 +0900 Subject: [PATCH 279/446] feat(out_of_lane): more stable decisions (#612) Signed-off-by: Maxime CLEMENT --- .../behavior_velocity_planner/out_of_lane.param.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml index c74c5b3d87..b55c3b21de 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/out_of_lane.param.yaml @@ -2,7 +2,7 @@ ros__parameters: out_of_lane: # module to stop or slowdown before overlapping another lane with other objects mode: ttc # mode used to consider a conflict with an object. "threshold", "intervals", or "ttc" - skip_if_already_overlapping: true # do not run this module when ego already overlaps another lane + skip_if_already_overlapping: false # do not run this module when ego already overlaps another lane threshold: time_threshold: 5.0 # [s] consider objects that will reach an overlap within this time @@ -17,6 +17,7 @@ use_predicted_paths: true # if true, use the predicted paths to estimate future positions. # if false, assume the object moves at constant velocity along *all* lanelets it currently is located in. predicted_path_min_confidence : 0.1 # when using predicted paths, ignore the ones whose confidence is lower than this value. + distance_buffer: 1.0 # [m] distance buffer used to determine if a collision will occur in the other lane overlap: minimum_distance: 0.0 # [m] minimum distance inside a lanelet for an overlap to be considered @@ -26,6 +27,7 @@ skip_if_over_max_decel: true # if true, do not take an action that would cause more deceleration than the maximum allowed precision: 0.1 # [m] precision when inserting a stop pose in the path distance_buffer: 1.5 # [m] buffer distance to try to keep between the ego footprint and lane + min_duration: 1.0 # [s] minimum duration needed before a decision can be canceled slowdown: distance_threshold: 30.0 # [m] insert a slowdown when closer than this distance from an overlap velocity: 2.0 # [m/s] slowdown velocity From 31961eb34ec34f589bd732f946a4b62edc3ba2b8 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 16 Nov 2023 23:07:25 +0900 Subject: [PATCH 280/446] feat: lane_departure_checker with curbstones (#687) Signed-off-by: Takayuki Murooka --- .../lane_departure_checker.param.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml b/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml index 2d044e7cfd..253737609b 100644 --- a/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml +++ b/autoware_launch/config/control/lane_departure_checker/lane_departure_checker.param.yaml @@ -1,9 +1,9 @@ /**: ros__parameters: # Enable feature - will_out_of_lane_checker: true - out_of_lane_checker: true - boundary_departure_checker: false + will_out_of_lane_checker: false + out_of_lane_checker: false + boundary_departure_checker: true # Node update_rate: 10.0 @@ -12,7 +12,7 @@ include_left_lanes: false include_opposite_lanes: false include_conflicting_lanes: false - boundary_types_to_detect: [road_border] + boundary_types_to_detect: [curbstone] # Core footprint_margin_scale: 1.0 From 3c9d39d3d3bc11fab08e6d3f726fe4ce980bbaba Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 16 Nov 2023 23:13:45 +0900 Subject: [PATCH 281/446] feat: enable and tune drivable area expansion (#689) enable drivable area expansion Signed-off-by: Takayuki Murooka --- .../drivable_area_expansion.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml index e1a0c7e38d..0558f6c606 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml @@ -7,7 +7,7 @@ # Dynamic expansion by using the path curvature dynamic_expansion: - enabled: false + enabled: true print_runtime: false max_expansion_distance: 0.0 # [m] maximum distance by which the drivable area can be expended (0.0 means no limit) smoothing: @@ -19,14 +19,14 @@ extra_front_overhang: 0.5 # [m] extra length to add to the front overhang extra_width: 1.0 # [m] extra length to add to the width dynamic_objects: - avoid: true # if true, the drivable area is not expanded in the predicted path of dynamic objects + avoid: false # if true, the drivable area is not expanded in the predicted path of dynamic objects extra_footprint_offset: front: 0.5 # [m] extra length to add to the front of the dynamic object footprint rear: 0.5 # [m] extra length to add to the rear of the dynamic object footprint left: 0.5 # [m] extra length to add to the left of the dynamic object footprint right: 0.5 # [m] extra length to add to the rear of the dynamic object footprint path_preprocessing: - max_arc_length: 50.0 # [m] maximum arc length along the path where the ego footprint is projected (0.0 means no limit) + max_arc_length: 100.0 # [m] maximum arc length along the path where the ego footprint is projected (0.0 means no limit) resample_interval: 2.0 # [m] fixed interval between resampled path points (0.0 means path points are directly used) reuse_max_deviation: 0.5 # [m] if the path changes by more than this value, the curvatures are recalculated. Otherwise they are reused. avoid_linestring: From 1d365edfca6263fb164e360147b94d7f977a36cd Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Fri, 17 Nov 2023 15:57:23 +0900 Subject: [PATCH 282/446] fix(lane_change): regulate at the traffic light (#673) Signed-off-by: Zulfaqar Azmi --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index b7ae55536e..366c093901 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -88,6 +88,7 @@ regulation: crosswalk: false intersection: false + traffic_light: true # ego vehicle stuck detection stuck_detection: From aa96dead98ffb1fc09dd6d2c630ac2257b1dc219 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Mon, 20 Nov 2023 10:33:14 +0900 Subject: [PATCH 283/446] feat(component_state_monitor): monitor pose_estimator output (#692) Signed-off-by: kminoda --- .../system/component_state_monitor/topics.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/autoware_launch/config/system/component_state_monitor/topics.yaml b/autoware_launch/config/system/component_state_monitor/topics.yaml index c00203dbb6..5672d13dcb 100644 --- a/autoware_launch/config/system/component_state_monitor/topics.yaml +++ b/autoware_launch/config/system/component_state_monitor/topics.yaml @@ -50,6 +50,19 @@ error_rate: 1.0 timeout: 1.0 +- module: localization + mode: [online, logging_simulation] + type: autonomous + args: + node_name_suffix: pose_estimator_pose + topic: /localization/pose_estimator/pose_with_covariance + topic_type: geometry_msgs/msg/PoseWithCovarianceStamped + best_effort: false + transient_local: false + warn_rate: 5.0 + error_rate: 1.0 + timeout: 1.0 + - module: perception mode: [online, logging_simulation] type: launch From 6f2b8ba8332153e23f3c50daefbd3900e3adb584 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 20 Nov 2023 18:13:18 +0900 Subject: [PATCH 284/446] refactor(start_planner): add verbose parameter for debug print (#693) Add verbose option to start planner parameters Signed-off-by: kyoichi-sugahara --- .../start_planner/start_planner.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 1424b58d22..7652cf1e6f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -1,6 +1,9 @@ /**: ros__parameters: start_planner: + + verbose: true + th_arrived_distance: 1.0 th_stopped_velocity: 0.01 th_stopped_time: 1.0 From d46616183681682d2b5747e39a7bee71a7786e6c Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Tue, 21 Nov 2023 10:25:32 +0900 Subject: [PATCH 285/446] fix(start_planner): disbale verbose flag to false in start_planner.param.yaml (#696) Change verbose flag to false in start_planner.param.yaml Signed-off-by: kyoichi-sugahara --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 7652cf1e6f..c83be4ea15 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -2,7 +2,7 @@ ros__parameters: start_planner: - verbose: true + verbose: false th_arrived_distance: 1.0 th_stopped_velocity: 0.01 From 258c5665c25e5eae515d538abefec345fc9ef544 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Fri, 24 Nov 2023 17:07:10 +0900 Subject: [PATCH 286/446] feat(goal_planner): add time hysteresis to keep unsafe (#700) feat(goal_planner): add tiem hysteresis to keep unsafe Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 295c9caf84..d04676f365 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -160,6 +160,7 @@ safety_check_params: # safety check configuration enable_safety_check: false # Don't set to true if auto_mode is enabled + keep_unsafe_time: 3.0 # collision check parameters check_all_predicted_path: true publish_debug_marker: false From fbc524f774b87d4c07a09df622f0beb7d57900f9 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Fri, 24 Nov 2023 17:31:08 +0900 Subject: [PATCH 287/446] feat(start_planner): enable safety check for start planner (#702) Enable safety check feature for start planner Signed-off-by: kyoichi-sugahara --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index c83be4ea15..6f85128264 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -125,7 +125,7 @@ # For safety check safety_check_params: # safety check configuration - enable_safety_check: false # Don't set to true if auto_mode is enabled + enable_safety_check: true # collision check parameters check_all_predicted_path: true publish_debug_marker: false From 5a4fbf425d3f4c5e253c21abc012d13fb65d3fc7 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 24 Nov 2023 19:10:45 +0900 Subject: [PATCH 288/446] feat(avoidance): add new parameter for target object filtering (#668) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index f3f04270d6..d3032ffdd3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -146,6 +146,10 @@ front_distance: 30.0 # [m] behind_distance: 30.0 # [m] + # params for filtering objects that are in intersection + intersection: + yaw_deviation: 0.349 # [rad] (default 20.0deg) + # For safety check safety_check: # safety check configuration From 7580bc72aa13f8de753237693f757a171171327c Mon Sep 17 00:00:00 2001 From: Mehmet Dogru <48479081+mehmetdogru@users.noreply.github.com> Date: Sat, 25 Nov 2023 15:57:39 +0900 Subject: [PATCH 289/446] feat(map_based_prediction): consider only routable neighbours for lane change (#703) Signed-off-by: Mehmet Dogru --- .../prediction/map_based_prediction.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index 260ae45da2..69ff96a263 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -29,5 +29,6 @@ diff_dist_threshold_to_left_bound: 0.29 #[m] diff_dist_threshold_to_right_bound: -0.29 #[m] num_continuous_state_transition: 3 + consider_only_routable_neighbours: false reference_path_resolution: 0.5 #[m] From 860dc12299f6a34be8c48da9b8bae6e3c6a7b602 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Sun, 26 Nov 2023 23:18:48 +0900 Subject: [PATCH 290/446] feat(goal_planner): safer safety checker (#701) * feat(goal_planner): safer safety checker Signed-off-by: kosuke55 fix fix fix fix * disable safety check Signed-off-by: kosuke55 --------- Signed-off-by: kosuke55 --- .../goal_planner/goal_planner.param.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index d04676f365..118268d854 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -130,7 +130,7 @@ safety_check_time_horizon: 5.0 safety_check_time_resolution: 1.0 # detection range - object_check_forward_distance: 10.0 + object_check_forward_distance: 100.0 object_check_backward_distance: 100.0 ignore_object_velocity_threshold: 1.0 # ObjectTypesToCheck @@ -160,6 +160,7 @@ safety_check_params: # safety check configuration enable_safety_check: false # Don't set to true if auto_mode is enabled + method: "integral_predicted_polygon" keep_unsafe_time: 3.0 # collision check parameters check_all_predicted_path: true @@ -170,6 +171,11 @@ lateral_distance_max_threshold: 2.0 longitudinal_distance_min_threshold: 3.0 longitudinal_velocity_delta_time: 0.8 + integral_predicted_polygon_params: + forward_margin: 1.0 + backward_margin: 1.0 + lat_margin: 1.0 + time_horizon: 10.0 # hysteresis factor to expand/shrink polygon with the value hysteresis_factor_expand_rate: 1.0 # temporary From 17a27ac72db3391ea495246de5c3519d20951896 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Sun, 26 Nov 2023 23:23:37 +0900 Subject: [PATCH 291/446] feat(goal_planenr): enable safety check (#705) Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 118268d854..d339ed99ff 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -159,7 +159,7 @@ # For safety check safety_check_params: # safety check configuration - enable_safety_check: false # Don't set to true if auto_mode is enabled + enable_safety_check: true method: "integral_predicted_polygon" keep_unsafe_time: 3.0 # collision check parameters From 1e78babc7f99c89c26f0328f16bace420f6461bd Mon Sep 17 00:00:00 2001 From: Tomohito ANDO Date: Sun, 26 Nov 2023 23:25:50 +0900 Subject: [PATCH 292/446] feat(run_out): add parameter to decide whether to use the object's velocity (#704) Signed-off-by: Tomohito Ando --- .../run_out.param.yaml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml index ca24c59598..f265594a38 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml @@ -21,14 +21,17 @@ # parameter to create abstracted dynamic obstacles dynamic_obstacle: - use_mandatory_area: false # [-] whether to use mandatory detection area - min_vel_kmph: 0.0 # [km/h] minimum velocity for dynamic obstacles - max_vel_kmph: 5.0 # [km/h] maximum velocity for dynamic obstacles - diameter: 0.1 # [m] diameter of obstacles. used for creating dynamic obstacles from points - height: 2.0 # [m] height of obstacles. used for creating dynamic obstacles from points - max_prediction_time: 10.0 # [sec] create predicted path until this time - time_step: 0.5 # [sec] time step for each path step. used for creating dynamic obstacles from points or objects without path - points_interval: 0.1 # [m] divide obstacle points into groups with this interval, and detect only lateral nearest point. used only for Points method + use_mandatory_area: false # [-] whether to use mandatory detection area + assume_fixed_velocity: + enable: false # [-] If enabled, the obstacle's velocity is assumed to be within the minimum and maximum velocity values specified below + min_vel_kmph: 0.0 # [km/h] minimum velocity for dynamic obstacles + max_vel_kmph: 5.0 # [km/h] maximum velocity for dynamic obstacles + std_dev_multiplier: 1.96 # [-] min and max velocity of the obstacles are calculated from this value and covariance + diameter: 0.1 # [m] diameter of obstacles. used for creating dynamic obstacles from points + height: 2.0 # [m] height of obstacles. used for creating dynamic obstacles from points + max_prediction_time: 10.0 # [sec] create predicted path until this time + time_step: 0.5 # [sec] time step for each path step. used for creating dynamic obstacles from points or objects without path + points_interval: 0.1 # [m] divide obstacle points into groups with this interval, and detect only lateral nearest point. used only for Points method # approach if ego has stopped in the front of the obstacle for a certain amount of time approaching: From 1a37eb39848349169aed74f62f7c1c5a34dfa76e Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Mon, 27 Nov 2023 09:07:58 +0900 Subject: [PATCH 293/446] feat(pid_longitudinal_controller): error integration on vehicle takeoff (#698) * add parameter for PID integration time threshold Signed-off-by: Daniel Sanchez * add param to enable or disable low speed error integration Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .../control/trajectory_follower/longitudinal/pid.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml b/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml index bc3213081d..c39088753f 100644 --- a/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml +++ b/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml @@ -32,7 +32,9 @@ max_d_effort: 0.0 min_d_effort: 0.0 lpf_vel_error_gain: 0.9 + enable_integration_at_low_speed: false current_vel_threshold_pid_integration: 0.5 + time_threshold_before_pid_integration: 2.0 enable_brake_keeping_before_stop: false brake_keeping_acc: -0.2 From 1076688c21b65444ee1516833505f1988e29af39 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 27 Nov 2023 13:56:08 +0900 Subject: [PATCH 294/446] feat: add parameters for the front object decision in dynamic_avoidance module (#706) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index bf9c815405..9ee86a06a4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -41,6 +41,8 @@ front_object: max_object_angle: 0.785 + min_vel: -0.5 # [m/s] The value is negative considering the noisy velocity of the stopped vehicle. + max_ego_path_lat_cover_ratio: 0.3 # [-] The object will be ignored if the ratio of the object covering the ego's path is higher than this value. drivable_area_generation: object_path_base: From 5ec4778d3ad60d9c037cb391deedd63377eaf17f Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 28 Nov 2023 19:29:17 +0900 Subject: [PATCH 295/446] feat(avoidance): configurable object type for safety check (#709) Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 28 +++++++++++++------ .../avoidance_by_lc.param.yaml | 21 ++++++++------ 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index d3032ffdd3..27f6a0df63 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -27,7 +27,6 @@ # avoidance is performed for the object type with true target_object: car: - is_target: true # [-] execute_num: 1 # [-] moving_speed_threshold: 1.0 # [m/s] moving_time_threshold: 1.0 # [s] @@ -38,7 +37,6 @@ safety_buffer_longitudinal: 0.0 # [m] use_conservative_buffer_longitudinal: true # [-] When set to true, the base_link2front is added to the longitudinal buffer before avoidance. truck: - is_target: true execute_num: 1 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 @@ -49,7 +47,6 @@ safety_buffer_longitudinal: 0.0 use_conservative_buffer_longitudinal: true bus: - is_target: true execute_num: 1 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 @@ -60,7 +57,6 @@ safety_buffer_longitudinal: 0.0 use_conservative_buffer_longitudinal: true trailer: - is_target: true execute_num: 1 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 @@ -71,7 +67,6 @@ safety_buffer_longitudinal: 0.0 use_conservative_buffer_longitudinal: true unknown: - is_target: true execute_num: 1 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 @@ -82,7 +77,6 @@ safety_buffer_longitudinal: 0.0 use_conservative_buffer_longitudinal: true bicycle: - is_target: true execute_num: 1 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 @@ -93,7 +87,6 @@ safety_buffer_longitudinal: 1.0 use_conservative_buffer_longitudinal: true motorcycle: - is_target: true execute_num: 1 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 @@ -104,7 +97,6 @@ safety_buffer_longitudinal: 1.0 use_conservative_buffer_longitudinal: true pedestrian: - is_target: true execute_num: 1 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 @@ -119,6 +111,16 @@ # For target object filtering target_filtering: + # avoidance target type + target_type: + car: true # [-] + truck: true # [-] + bus: true # [-] + trailer: true # [-] + unknown: true # [-] + bicycle: true # [-] + motorcycle: true # [-] + pedestrian: true # [-] # detection range object_check_goal_distance: 20.0 # [m] # filtering parking objects @@ -152,6 +154,16 @@ # For safety check safety_check: + # safety check target type + target_type: + car: true # [-] + truck: true # [-] + bus: true # [-] + trailer: true # [-] + unknown: false # [-] + bicycle: true # [-] + motorcycle: true # [-] + pedestrian: true # [-] # safety check configuration enable: true # [-] check_current_lane: false # [-] diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml index bd8545d9e6..74c6112c0e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml @@ -7,7 +7,6 @@ # avoidance is performed for the object type with true target_object: car: - is_target: true # [-] execute_num: 2 # [-] moving_speed_threshold: 1.0 # [m/s] moving_time_threshold: 1.0 # [s] @@ -16,7 +15,6 @@ avoid_margin_lateral: 0.0 # [m] safety_buffer_lateral: 0.0 # [m] truck: - is_target: true execute_num: 2 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 @@ -25,7 +23,6 @@ avoid_margin_lateral: 0.0 safety_buffer_lateral: 0.0 bus: - is_target: true execute_num: 2 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 @@ -34,7 +31,6 @@ avoid_margin_lateral: 0.0 safety_buffer_lateral: 0.0 trailer: - is_target: true execute_num: 2 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 @@ -43,7 +39,6 @@ avoid_margin_lateral: 0.0 safety_buffer_lateral: 0.0 unknown: - is_target: true execute_num: 1 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 @@ -52,7 +47,6 @@ avoid_margin_lateral: 0.0 safety_buffer_lateral: 0.0 bicycle: - is_target: false execute_num: 2 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 @@ -61,7 +55,6 @@ avoid_margin_lateral: 0.0 safety_buffer_lateral: 1.0 motorcycle: - is_target: false execute_num: 2 moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 @@ -70,7 +63,6 @@ avoid_margin_lateral: 0.0 safety_buffer_lateral: 1.0 pedestrian: - is_target: false execute_num: 2 moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 @@ -80,3 +72,16 @@ safety_buffer_lateral: 1.0 lower_distance_for_polygon_expansion: 0.0 # [m] upper_distance_for_polygon_expansion: 1.0 # [m] + + # For target object filtering + target_filtering: + # avoidance target type + target_type: + car: true # [-] + truck: true # [-] + bus: true # [-] + trailer: true # [-] + unknown: true # [-] + bicycle: false # [-] + motorcycle: false # [-] + pedestrian: false # [-] From 27794596739362fe2784cc38143d7d660c45e279 Mon Sep 17 00:00:00 2001 From: Naophis Date: Wed, 29 Nov 2023 17:47:05 +0900 Subject: [PATCH 296/446] feat: disable obstacle avoidance debug marker for optimization (#711) feat: disable obstacle avoidance debug marker --- .../obstacle_avoidance_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml index bb64006656..9ab8f42bcf 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml @@ -8,7 +8,7 @@ debug: # flag to publish - enable_pub_debug_marker: true # publish debug marker + enable_pub_debug_marker: false # publish debug marker enable_pub_extra_debug_marker: false # publish extra debug marker # flag to show From 51157f2c793423d1c2e22e9054dc4c747934cd0a Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 30 Nov 2023 11:40:03 +0900 Subject: [PATCH 297/446] feat: add several min_object_vel in dynamic_avoidance (#707) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 9ee86a06a4..24bc144c40 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -28,10 +28,12 @@ cut_in_object: min_time_to_start_cut_in: 1.0 # [s] min_lon_offset_ego_to_object: 0.0 # [m] + min_object_vel: 0.5 # [m/s] cut_out_object: max_time_from_outside_ego_path: 2.0 # [s] min_object_lat_vel: 0.3 # [m/s] + min_object_vel: 0.5 # [m/s] crossing_object: min_overtaking_object_vel: 1.0 @@ -41,7 +43,7 @@ front_object: max_object_angle: 0.785 - min_vel: -0.5 # [m/s] The value is negative considering the noisy velocity of the stopped vehicle. + min_object_vel: -0.5 # [m/s] The value is negative considering the noisy velocity of the stopped vehicle. max_ego_path_lat_cover_ratio: 0.3 # [-] The object will be ignored if the ratio of the object covering the ego's path is higher than this value. drivable_area_generation: From 388d19c391b7f81ddbf5e4d40dc0bcbdd9b618df Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 30 Nov 2023 20:54:46 +0900 Subject: [PATCH 298/446] fix(crosswalk): don't stop in front of the crosswalk if vehicle stuck in intersection (#714) Signed-off-by: satoshi-ota --- .../behavior_velocity_planner/crosswalk.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index d99c70c5f6..d9d2c407bb 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -27,6 +27,7 @@ # param for stuck vehicles stuck_vehicle: + enable_stuck_check_in_intersection: false # [-] flag to enable stuck vehicle checking for crosswalk which is in intersection stuck_vehicle_velocity: 1.0 # [m/s] maximum velocity threshold whether the vehicle is stuck max_stuck_vehicle_lateral_offset: 2.0 # [m] maximum lateral offset for stuck vehicle position should be looked stuck_vehicle_attention_range: 10.0 # [m] the detection area is defined as X meters behind the crosswalk From afdc3fb18a15556ed70444fdebefe6de8ad12744 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 1 Dec 2023 21:25:48 +0900 Subject: [PATCH 299/446] feat(avoidance): keep stopping until all shift lines are registered (#699) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 27f6a0df63..c68c10f2a9 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -231,6 +231,10 @@ stop_buffer: 1.0 # [m] policy: + # policy for rtc request. select "per_shift_line" or "per_avoidance_maneuver". + # "per_shift_line": request approval for each shift line. + # "per_avoidance_maneuver": request approval for avoidance maneuver (avoid + return). + make_approval_request: "per_shift_line" # policy for vehicle slow down behavior. select "best_effort" or "reliable". # "best_effort": slow down deceleration & jerk are limited by constraints. # but there is a possibility that the vehicle can't stop in front of the vehicle. From 608beba558bedd503d2d825ce68df160ad436605 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Sat, 2 Dec 2023 05:24:24 +0900 Subject: [PATCH 300/446] refactor(intersection): rename param, update doc (#708) --- .../intersection.param.yaml | 97 +++++++++---------- 1 file changed, 48 insertions(+), 49 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 22f68733a3..1e6ce843de 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -2,42 +2,47 @@ ros__parameters: intersection: common: - attention_area_margin: 0.75 # [m] - attention_area_length: 200.0 # [m] - attention_area_angle_threshold: 0.785 # [rad] - stop_line_margin: 3.0 - intersection_velocity: 2.778 # 2.778m/s = 10.0km/h - intersection_max_accel: 0.5 # m/ss - stop_overshoot_margin: 0.5 # [m] overshoot margin for stuck, collision detection + attention_area_length: 200.0 + attention_area_margin: 0.75 + attention_area_angle_threshold: 0.785 use_intersection_area: false - path_interpolation_ds: 0.1 # [m] - consider_wrong_direction_vehicle: false + default_stopline_margin: 3.0 + stopline_overshoot_margin: 0.5 + path_interpolation_ds: 0.1 max_accel: -2.8 max_jerk: -5.0 delay_response_time: 0.5 + stuck_vehicle: turn_direction: left: true right: true straight: true - use_stuck_stopline: true # stopline generated before the first conflicting area - stuck_vehicle_detect_dist: 5.0 # this should be the length between cars when they are stopped. The actual stuck vehicle detection length will be this value + vehicle_length. - stuck_vehicle_vel_thr: 0.833 # 0.833m/s = 3.0km/h - # enable_front_car_decel_prediction: false # By default this feature is disabled - # assumed_front_car_decel: 1.0 # [m/ss] the expected deceleration of front car when front car as well as ego are turning - timeout_private_area: 3.0 # [s] cancel stuck vehicle stop in private area - enable_private_area_stuck_disregard: false #In the intersections which labeled as "private area", the obstacle vehicles judged as "stuck" are neglected if this param is set as true. - yield_stuck: - turn_direction: - left: true - right: false - straight: false - distance_thr: 1.0 # [m] + use_stuck_stopline: true + stuck_vehicle_detect_dist: 5.0 + stuck_vehicle_velocity_threshold: 0.833 + # enable_front_car_decel_prediction: false + # assumed_front_car_decel: 1.0 + timeout_private_area: 3.0 + enable_private_area_stuck_disregard: false + + yield_stuck: + turn_direction: + left: true + right: false + straight: false + distance_threshold: 1.0 collision_detection: - state_transit_margin_time: 0.5 + consider_wrong_direction_vehicle: false + collision_detection_hold_time: 0.5 min_predicted_path_confidence: 0.05 - minimum_ego_predicted_velocity: 1.388 # [m/s] + keep_detection_velocity_threshold: 0.833 + velocity_profile: + use_upstream: true + minimum_upstream_velocity: 0.01 + default_velocity: 2.778 + minimum_default_velocity: 1.388 fully_prioritized: collision_start_margin_time: 2.0 collision_end_margin_time: 0.0 @@ -45,52 +50,46 @@ collision_start_margin_time: 3.0 collision_end_margin_time: 2.0 not_prioritized: - collision_start_margin_time: 3.0 # [s] this + state_transit_margin_time should be higher to account for collision with fast/accelerating object - collision_end_margin_time: 2.0 # [s] this + state_transit_margin_time should be higher to account for collision with slow/decelerating object - keep_detection_vel_thr: 0.833 # == 3.0km/h. keep detection if ego is ego.vel < keep_detection_vel_thr - use_upstream_velocity: true # flag to use the planned velocity profile from the upstream module - minimum_upstream_velocity: 0.01 # [m/s] minimum velocity to avoid null division for the stop line from the upstream velocity + collision_start_margin_time: 3.0 + collision_end_margin_time: 2.0 yield_on_green_traffic_light: distance_to_assigned_lanelet_start: 10.0 duration: 3.0 - object_dist_to_stopline: 10.0 # [m] + object_dist_to_stopline: 10.0 ignore_on_amber_traffic_light: - object_expected_deceleration: 2.0 # [m/ss] + object_expected_deceleration: 2.0 ignore_on_red_traffic_light: object_margin_to_path: 2.0 occlusion: enable: false - occlusion_attention_area_length: 70.0 # [m] - enable_creeping: false # flag to use the creep velocity when reaching occlusion limit stop line - occlusion_creep_velocity: 0.8333 # the creep velocity to occlusion limit stop line - peeking_offset: -0.5 # [m] offset for peeking into detection area + occlusion_attention_area_length: 70.0 free_space_max: 43 occupied_min: 58 - do_dp: true - before_creep_stop_time: 0.1 # [s] - min_vehicle_brake_for_rss: -2.5 # [m/s^2] - max_vehicle_velocity_for_rss: 16.66 # [m/s] == 60kmph - denoise_kernel: 1.0 # [m] - possible_object_bbox: [1.5, 2.5] # [m x m] - ignore_parked_vehicle_speed_threshold: 0.8333 # == 3.0km/h - stop_release_margin_time: 1.5 # [s] - temporal_stop_before_attention_area: false - absence_traffic_light: - creep_velocity: 1.388 # [m/s] - maximum_peeking_distance: 6.0 # [m] + denoise_kernel: 1.0 attention_lane_crop_curvature_threshold: 0.25 attention_lane_curvature_calculation_ds: 0.5 + creep_during_peeking: + enable: false + creep_velocity: 0.8333 + peeking_offset: -0.5 + occlusion_required_clearance_distance: 55 + possible_object_bbox: [1.5, 2.5] + ignore_parked_vehicle_speed_threshold: 0.8333 + occlusion_detection_hold_time: 1.5 + temporal_stop_time_before_peeking: 0.1 + temporal_stop_before_attention_area: false + creep_velocity_without_traffic_light: 1.388 static_occlusion_with_traffic_light_timeout: 0.5 debug: ttc: [0] enable_rtc: - intersection: false # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval + intersection: false intersection_to_occlusion: false merge_from_private: - stop_line_margin: 3.0 + stopline_margin: 3.0 stop_duration_sec: 1.0 stop_distance_threshold: 1.0 From c991d2af6fd95776157b52b88939b92a0517eb6e Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Mon, 4 Dec 2023 11:50:20 +0900 Subject: [PATCH 301/446] chore(obstacle_cruise)!: remove unused params (#716) chore!: remove unused params Signed-off-by: Yuki Takagi --- .../obstacle_cruise_planner/obstacle_cruise_planner.param.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index 4c9f84d5eb..90e897fda3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -70,9 +70,6 @@ behavior_determination: decimate_trajectory_step_length : 2.0 # longitudinal step length to calculate trajectory polygon for collision checking - goal_extension_length: 5.0 # extension length for collision check around the goal - goal_extension_interval: 1.0 # extension interval for collision check around the goal - prediction_resampling_time_interval: 0.1 prediction_resampling_time_horizon: 10.0 From 6d6af420cb334cbd2a2e59dc78d19eb77fb2609a Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Tue, 5 Dec 2023 14:37:27 +0900 Subject: [PATCH 302/446] refactor(multi_object_tracker): add multi_object_tracker node param (#718) * add multi_object_tracker node param Signed-off-by: yoshiri * add additional node parameters for future update * style(pre-commit): autofix * fix default value --------- Signed-off-by: yoshiri Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../multi_object_tracker_node.param.yaml | 18 ++++++++++++++++++ .../tier4_perception_component.launch.xml | 4 ++++ 2 files changed, 22 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml new file mode 100644 index 0000000000..ae1e9d31e6 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml @@ -0,0 +1,18 @@ +/**: + ros__parameters: + # default tracker models for each class + car_tracker: "multi_vehicle_tracker" + truck_tracker: "multi_vehicle_tracker" + bus_tracker: "multi_vehicle_tracker" + trailer_tracker: "multi_vehicle_tracker" + pedestrian_tracker: "pedestrian_and_bicycle_tracker" + bicycle_tracker: "pedestrian_and_bicycle_tracker" + motorcycle_tracker: "pedestrian_and_bicycle_tracker" + + # default tracker node parameters + publish_rate: 10.0 + world_frame_id: map + enable_delay_compensation: true + pass_through_unknown_objects: false + publish_untracked_objects: false + debug_flag: false diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index ece7bee52c..49156fba51 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -81,6 +81,10 @@ name="object_recognition_tracking_multi_object_tracker_data_association_matrix_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/tracking/multi_object_tracker/data_association_matrix.param.yaml" /> + Date: Tue, 5 Dec 2023 15:13:47 +0900 Subject: [PATCH 303/446] refactor(start_planner): refactor debug and safety check logic (#719) refactor(start_planner): refactor debug parameters This commit removes the `verbose` parameter under `start_planner` and introduces a new `debug` section. The newly added `debug` section includes a `print_debug_info` parameter, set to false by default. This change provides a more structured way to handle debugging configurations for the start planner. Signed-off-by: kyoichi-sugahara --- .../goal_planner/goal_planner.param.yaml | 2 +- .../start_planner/start_planner.param.yaml | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index d339ed99ff..06fe74e3b7 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -119,7 +119,7 @@ # EgoPredictedPath ego_predicted_path: min_velocity: 1.0 - acceleration: 1.0 + min_acceleration: 1.0 max_velocity: 1.0 time_horizon_for_front_object: 10.0 time_horizon_for_rear_object: 10.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 6f85128264..420d9b5fcc 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -2,8 +2,6 @@ ros__parameters: start_planner: - verbose: false - th_arrived_distance: 1.0 th_stopped_velocity: 0.01 th_stopped_time: 1.0 @@ -85,7 +83,7 @@ # EgoPredictedPath ego_predicted_path: min_velocity: 0.0 - acceleration: 1.0 + min_acceleration: 1.0 max_velocity: 1.0 time_horizon_for_front_object: 10.0 time_horizon_for_rear_object: 10.0 @@ -140,3 +138,7 @@ # temporary backward_path_length: 30.0 forward_path_length: 100.0 + + # debug + debug: + print_debug_info: false From 54f5d6e94557e0e83b245e5e5963eb57f7df589c Mon Sep 17 00:00:00 2001 From: Tomohito ANDO Date: Tue, 5 Dec 2023 18:21:38 +0900 Subject: [PATCH 304/446] feat(component_state_monitor): monitor traffic light recognition output (#720) Signed-off-by: Tomohito Ando --- .../system/component_state_monitor/topics.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/autoware_launch/config/system/component_state_monitor/topics.yaml b/autoware_launch/config/system/component_state_monitor/topics.yaml index 5672d13dcb..f8c6f9685f 100644 --- a/autoware_launch/config/system/component_state_monitor/topics.yaml +++ b/autoware_launch/config/system/component_state_monitor/topics.yaml @@ -89,6 +89,19 @@ error_rate: 1.0 timeout: 1.0 +- module: perception + mode: [online, logging_simulation] + type: autonomous + args: + node_name_suffix: traffic_light_recognition_traffic_signals + topic: /perception/traffic_light_recognition/traffic_signals + topic_type: autoware_perception_msgs/msg/TrafficSignalArray + best_effort: false + transient_local: false + warn_rate: 5.0 + error_rate: 1.0 + timeout: 1.0 + - module: planning mode: [online, logging_simulation, planning_simulation] type: autonomous From 42ea6834b876a68b6b60dd0c10b29ae79759ee81 Mon Sep 17 00:00:00 2001 From: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Date: Tue, 5 Dec 2023 18:47:45 +0900 Subject: [PATCH 305/446] feat(rviz): fix perception debug topics in Rviz (#721) fix perception debug topics in Rviz Signed-off-by: Shunsuke Miura --- autoware_launch/rviz/autoware.rviz | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index c30060659a..97dd22a13d 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -2485,13 +2485,13 @@ Visualization Manager: Perception: CameraLidarFusion(purple): true Centerpoint(red1): true - CenterpointROIFusion(red3): true - CenterpointValidator(red2): true + CenterpointROIFusion(red2): true + CenterpointValidator(red3): true Detection(yellow): true DetectionByTracker(cyan): true PointPainting(light_green1): true - PointPaintingROIFusion(light_green3): true - PointPaintingValidator(light_green2): true + PointPaintingROIFusion(light_green2): true + PointPaintingValidator(light_green3): true Prediction(light_blue): true RadarFarObjects(white): true Tracking(green): true @@ -2954,7 +2954,7 @@ Visualization Manager: MOTORCYCLE: Alpha: 0.9990000128746033 Color: 255; 82; 82 - Name: CenterpointValidator(red2) + Name: CenterpointROIFusion(red2) Namespaces: {} PEDESTRIAN: @@ -2972,7 +2972,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Best Effort - Value: /perception/object_recognition/detection/centerpoint/validation/objects + Value: /perception/object_recognition/detection/centerpoint/roi_fusion/objects UNKNOWN: Alpha: 0.9990000128746033 Color: 255; 82; 82 @@ -3001,7 +3001,7 @@ Visualization Manager: MOTORCYCLE: Alpha: 0.9990000128746033 Color: 213; 0; 0 - Name: CenterpointROIFusion(red3) + Name: CenterpointValidator(red3) Namespaces: {} PEDESTRIAN: @@ -3095,7 +3095,7 @@ Visualization Manager: MOTORCYCLE: Alpha: 0.9990000128746033 Color: 118; 255; 3 - Name: PointPaintingValidator(light_green2) + Name: PointPaintingROIFusion(light_green2) Namespaces: {} PEDESTRIAN: @@ -3113,7 +3113,7 @@ Visualization Manager: Durability Policy: Volatile History Policy: Keep Last Reliability Policy: Best Effort - Value: /perception/object_recognition/detection/pointpainting/validation/objects + Value: /perception/object_recognition/detection/pointpainting/roi_fusion/objects UNKNOWN: Alpha: 0.9990000128746033 Color: 118; 255; 3 @@ -3142,7 +3142,7 @@ Visualization Manager: MOTORCYCLE: Alpha: 0.9990000128746033 Color: 100; 221; 23 - Name: PointPaintingROIFusion(light_green3) + Name: PointPaintingValidator(light_green3) Namespaces: {} PEDESTRIAN: From 0960260213a189e895f1c13d84c02603acf429f2 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 5 Dec 2023 23:46:47 +0900 Subject: [PATCH 306/446] feat: add polygon_generation_method in dynamic_avoidance (#715) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 24bc144c40..854c29aa89 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -47,6 +47,7 @@ max_ego_path_lat_cover_ratio: 0.3 # [-] The object will be ignored if the ratio of the object covering the ego's path is higher than this value. drivable_area_generation: + polygon_generation_method: "ego_path_base" # choose "ego_path_base" and "object_path_base" object_path_base: min_longitudinal_polygon_margin: 3.0 # [m] From 0472cb9ac3254a719c92657516c306cad699fcdb Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Thu, 7 Dec 2023 01:04:46 +0900 Subject: [PATCH 307/446] feat(start_planner): add surround moving obstacle check (#723) update start_planner.param.yaml Signed-off-by: kyoichi-sugahara --- .../start_planner/start_planner.param.yaml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 420d9b5fcc..514d61e225 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -84,7 +84,6 @@ ego_predicted_path: min_velocity: 0.0 min_acceleration: 1.0 - max_velocity: 1.0 time_horizon_for_front_object: 10.0 time_horizon_for_rear_object: 10.0 time_resolution: 0.5 @@ -139,6 +138,20 @@ backward_path_length: 30.0 forward_path_length: 100.0 + surround_moving_obstacle_check: + search_radius: 10.0 + th_moving_obstacle_velocity: 1.0 + # ObjectTypesToCheck + object_types_to_check: + check_car: true + check_truck: true + check_bus: true + check_trailer: true + check_bicycle: true + check_motorcycle: true + check_pedestrian: true + check_unknown: false + # debug debug: print_debug_info: false From 36804c87f61a0a13a4e6221c4effc1fa183b71aa Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Thu, 7 Dec 2023 10:43:58 +0900 Subject: [PATCH 308/446] fix(multi_object_tracker): fix psim launcher related to tracking launch changes (#724) * add multi_object_tracker node param Signed-off-by: yoshiri * add additional node parameters for future update * style(pre-commit): autofix * fix default value * update simulator component launch Signed-off-by: yoshiri --------- Signed-off-by: yoshiri Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../launch/components/tier4_simulator_component.launch.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/launch/components/tier4_simulator_component.launch.xml b/autoware_launch/launch/components/tier4_simulator_component.launch.xml index 02f9a8243c..a8503818cd 100644 --- a/autoware_launch/launch/components/tier4_simulator_component.launch.xml +++ b/autoware_launch/launch/components/tier4_simulator_component.launch.xml @@ -39,6 +39,10 @@ name="object_recognition_tracking_multi_object_tracker_data_association_matrix_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/tracking/multi_object_tracker/data_association_matrix.param.yaml" /> + From 192a250c8be3aca7c8115aa7d9d2a9c3f23944ff Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Mon, 11 Dec 2023 09:49:02 +0900 Subject: [PATCH 309/446] fix(traffic_light): stop if the traffic light signal timed out (#727) Signed-off-by: Fumiya Watanabe --- .../behavior_velocity_planner/traffic_light.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml index a837ae1b46..23746a61b6 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/traffic_light.param.yaml @@ -3,6 +3,7 @@ traffic_light: stop_margin: 0.0 tl_state_timeout: 1.0 + stop_time_hysteresis: 0.1 yellow_lamp_period: 2.75 enable_pass_judge: true enable_rtc: false # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval From f6d63f6a9374b9d00569888bb6b72da04967b33b Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Mon, 11 Dec 2023 10:55:13 +0900 Subject: [PATCH 310/446] feat(obstacle_cruise_planner): add slow down acc and jerk params (#726) Add slow down acc and jerk params Signed-off-by: Daniel Sanchez --- .../planning/scenario_planning/common/common.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/common/common.param.yaml b/autoware_launch/config/planning/scenario_planning/common/common.param.yaml index 6bb130e805..03958fda9a 100644 --- a/autoware_launch/config/planning/scenario_planning/common/common.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/common.param.yaml @@ -7,6 +7,10 @@ min_jerk: -1.0 # min jerk [m/sss] max_jerk: 1.0 # max jerk [m/sss] + slow_down: + min_acc: -1.0 # min deceleration [m/ss] + min_jerk: -1.0 # min jerk [m/sss] + # constraints to be observed limit: min_acc: -2.5 # min deceleration limit [m/ss] From d51f96721de513b1b8af707a1dc7968ca9e5a283 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Mon, 11 Dec 2023 15:57:31 +0900 Subject: [PATCH 311/446] chore(crosswalk): sync a config file to the univese one (#729) update comment, by sync to the univese one Signed-off-by: Yuki Takagi --- .../crosswalk.param.yaml | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index d9d2c407bb..6559f39278 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -9,7 +9,7 @@ # param for stop position stop_position: - stop_position_threshold: 1.0 # [m] threshold to check whether the vehicle stops in front of crosswalk for yielding + stop_position_threshold: 1.0 # [m] If the ego vehicle has stopped near the stop line than this value, this module assumes itself to have achieved yielding. # For the Lanelet2 map with no explicit stop lines stop_distance_from_crosswalk: 3.5 # [m] make stop line away from crosswalk @@ -18,24 +18,24 @@ # For the case where the stop position is determined according to the object position. stop_distance_from_object: 2.0 # [m] the vehicle decelerates to be able to stop in front of object with margin - # param for ego's slow down velocity + # params for ego's slow down velocity. These params are not used for the case of "enable_rtc: false". slow_down: min_slow_down_velocity: 2.78 # [m/s] target vehicle velocity when module receive slow down command from FOA (2.78 m/s = 10.0 kmph) max_slow_down_jerk: -1.5 # [m/sss] minimum jerk deceleration for safe brake max_slow_down_accel: -2.5 # [m/ss] minimum accel deceleration for safe brake no_relax_velocity: 2.78 # [m/s] if the current velocity is less than X m/s, ego always stops at the stop position(not relax deceleration constraints 2.78 m/s = 10 kmph) - # param for stuck vehicles + # params to prevent stopping on crosswalks due to another vehicle ahead stuck_vehicle: enable_stuck_check_in_intersection: false # [-] flag to enable stuck vehicle checking for crosswalk which is in intersection - stuck_vehicle_velocity: 1.0 # [m/s] maximum velocity threshold whether the vehicle is stuck - max_stuck_vehicle_lateral_offset: 2.0 # [m] maximum lateral offset for stuck vehicle position should be looked - stuck_vehicle_attention_range: 10.0 # [m] the detection area is defined as X meters behind the crosswalk - min_acc: -1.0 # min acceleration [m/ss] - min_jerk: -1.0 # min jerk [m/sss] - max_jerk: 1.0 # max jerk [m/sss] + stuck_vehicle_velocity: 1.0 # [m/s] threshold velocity whether other vehicles are assumed to be stuck or not. + max_stuck_vehicle_lateral_offset: 2.0 # [m] The feature does not handle the vehicles farther than this value to the ego's path. + stuck_vehicle_attention_range: 10.0 # [m] Ego does not enter the crosswalk area if a stuck vehicle exists within this distance from the end of the crosswalk on the ego's path. + min_acc: -1.0 # min acceleration [m/ss] + min_jerk: -1.0 # min jerk [m/sss] + max_jerk: 1.0 # max jerk [m/sss] - # param for pass judge logic + # params for the pass judge logic against the crosswalk users such as pedestrians or bicycles pass_judge: ego_pass_first_margin_x: [0.0] # [[s]] time to collision margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) ego_pass_first_margin_y: [6.0] # [[s]] time to vehicle margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) @@ -44,21 +44,21 @@ ego_pass_later_margin_y: [10.0] # [[s]] time to collision margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) ego_pass_later_additional_margin: 0.5 # [s] additional time margin for object pass first situation to suppress chattering - no_stop_decision: + no_stop_decision: # parameters to determine if it is safe to attempt stopping before the crosswalk max_offset_to_crosswalk_for_yield: 0.0 # [m] maximum offset from ego's front to crosswalk for yield. Positive value means in front of the crosswalk. - min_acc: -1.0 # min acceleration [m/ss] - min_jerk: -1.0 # min jerk [m/sss] - max_jerk: 1.0 # max jerk [m/sss] + min_acc: -1.0 # min acceleration [m/ss] + min_jerk: -1.0 # min jerk [m/sss] + max_jerk: 1.0 # max jerk [m/sss] stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding - disable_stop_for_yield_cancel: false # for the crosswalk where there is a traffic signal - disable_yield_for_new_stopped_object: false # for the crosswalk where there is a traffic signal - # if the pedestrian does not move for X seconds after stopping before the crosswalk, the module judge that ego is able to pass first. + disable_stop_for_yield_cancel: true # for the crosswalks with traffic signal + disable_yield_for_new_stopped_object: true # for the crosswalks with traffic signal + # If the pedestrian does not move for X seconds after the ego has stopped in front the crosswalk, the module judge that the pedestrian has no intention to walk and allows the ego to proceed. distance_map_for_no_intention_to_walk: [1.0, 5.0] # [m] ascending order timeout_map_for_no_intention_to_walk: [3.0, 0.0] # [s] - timeout_ego_stop_for_yield: 3.0 # [s] the amount of time which ego should be stopping to query whether it yields or not + timeout_ego_stop_for_yield: 3.0 # [s] If the ego maintains the stop for this amount of time, then the ego proceeds, assuming it has stopped long time enough. # param for target object filtering object_filtering: From 4bd395183f3de4f4b93952eff3993c870d26057e Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Mon, 11 Dec 2023 18:50:34 +0900 Subject: [PATCH 312/446] fix(crosswalk): fix inappropriate sync (#731) fix in-appropriate sync Signed-off-by: Yuki Takagi --- .../behavior_velocity_planner/crosswalk.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 6559f39278..548e2f9b14 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -53,8 +53,8 @@ stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding - disable_stop_for_yield_cancel: true # for the crosswalks with traffic signal - disable_yield_for_new_stopped_object: true # for the crosswalks with traffic signal + disable_stop_for_yield_cancel: false # for the crosswalks with traffic signal + disable_yield_for_new_stopped_object: false # for the crosswalks with traffic signal # If the pedestrian does not move for X seconds after the ego has stopped in front the crosswalk, the module judge that the pedestrian has no intention to walk and allows the ego to proceed. distance_map_for_no_intention_to_walk: [1.0, 5.0] # [m] ascending order timeout_map_for_no_intention_to_walk: [3.0, 0.0] # [s] From 1251b3ae3e307adfc9ccf72be245b04d7a1616fb Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Tue, 12 Dec 2023 17:12:31 +0900 Subject: [PATCH 313/446] feat(multi_object_tracker): update tracker parameter yaml (#732) * add multi_object_tracker node param Signed-off-by: yoshiri * add additional node parameters for future update * style(pre-commit): autofix * fix default value * update simulator component launch Signed-off-by: yoshiri * feat: update multi_object_tracker node param Signed-off-by: yoshiri --------- Signed-off-by: yoshiri Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../multi_object_tracker_node.param.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml index ae1e9d31e6..f58de8e615 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml @@ -15,4 +15,9 @@ enable_delay_compensation: true pass_through_unknown_objects: false publish_untracked_objects: false - debug_flag: false + + # debug parameters + publish_processing_time: false + publish_tentative_objects: false + diagnostic_warn_delay: 0.5 # [sec] + diagnostic_error_delay: 1.0 # [sec] From d09293c9d5494ad9144cf98833b836291ac1e2e5 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Tue, 12 Dec 2023 17:13:20 +0900 Subject: [PATCH 314/446] refactor(localization_component_launch): rename lidar topic (#722) rename lidar topic Signed-off-by: yamato-ando Co-authored-by: yamato-ando --- .../launch/components/tier4_localization_component.launch.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/launch/components/tier4_localization_component.launch.xml b/autoware_launch/launch/components/tier4_localization_component.launch.xml index 5fe0d856d2..88b326b2f7 100644 --- a/autoware_launch/launch/components/tier4_localization_component.launch.xml +++ b/autoware_launch/launch/components/tier4_localization_component.launch.xml @@ -3,7 +3,7 @@ - + From 33b12ba80ffed84d578854bb112d9748b81d7445 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Fri, 15 Dec 2023 09:42:46 +0900 Subject: [PATCH 315/446] feat(rviz_config): add objects of interest marker (#738) Signed-off-by: Fumiya Watanabe --- autoware_launch/rviz/autoware.rviz | 174 ++++++++++++++++++++++++++++- 1 file changed, 173 insertions(+), 1 deletion(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 97dd22a13d..bc22eadb70 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -3451,7 +3451,179 @@ Visualization Manager: Enabled: true Name: Perception - Class: rviz_common/Group - Displays: ~ + Displays: + - Class: rviz_common/Group + Displays: + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: LaneChangeLeft + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/lane_change_left + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: LaneChangeRight + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/lane_change_right + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: AvoidanceLeft + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/avoidance_left + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: AvoidanceRight + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/avoidance_right + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: AvoidanceByLCLeft + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/avoidance_by_lc_left + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: AvoidanceByLCRight + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/avoidance_by_lc_right + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: StartPlanner + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/start_planner + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: GoalPlanner + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/goal_planner + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: Crosswalk + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/crosswalk + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: Intersection + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/intersection + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: BlindSpot + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/blind_spot + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: TrafficLight + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/traffic_light + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: DetectionArea + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/detection_area + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: NoStoppingArea + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/debug/objects_of_interest/no_stopping_area + Value: true + Enabled: true + Name: Objects Of Interest Enabled: true Name: Planning - Class: rviz_common/Group From 304ffb41db32664a5bab94b8cd4fe93278ce41d4 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Fri, 15 Dec 2023 10:26:55 +0900 Subject: [PATCH 316/446] feat(crosswalk): ignore predicted path going across the crosswalk (#733) --- .../behavior_velocity_planner/crosswalk.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 548e2f9b14..e7bdda45de 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -63,6 +63,7 @@ # param for target object filtering object_filtering: crosswalk_attention_range: 1.0 # [m] the detection area is defined as -X meters before the crosswalk to +X meters behind the crosswalk + vehicle_object_cross_angle_threshold: 0.5 # [rad] threshold judging object is crossing walkway as a pedestrian or passing over as a vehicle target_object: unknown: true # [-] whether to look and stop by UNKNOWN objects bicycle: true # [-] whether to look and stop by BICYCLE objects From 0d35c8a7b4c6e8aa26e5ba6feed3586845640261 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Fri, 15 Dec 2023 16:41:00 +0900 Subject: [PATCH 317/446] chore(image_projection_based_fusion): add param (#739) * chore(image_projection_based_fusion): add param Signed-off-by: badai-nguyen * style(pre-commit): autofix --------- Signed-off-by: badai-nguyen Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../image_projection_based_fusion/roi_sync.param.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml index 21ba13787f..0e4c52ba92 100644 --- a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml @@ -3,3 +3,9 @@ input_offset_ms: [61.67, 111.67, 45.0, 28.33, 78.33, 95.0] timeout_ms: 70.0 match_threshold_ms: 50.0 + filter_scope_min_x: -100.0 + filter_scope_min_y: -100.0 + filter_scope_min_z: -100.0 + filter_scope_max_x: 100.0 + filter_scope_max_y: 100.0 + filter_scope_max_z: 100.0 From a368c13ebd8185cf2da40fb75e6053a44970f6e8 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 18 Dec 2023 14:05:16 +0900 Subject: [PATCH 318/446] refactor(autoware_launch): remove use_experimental_lane_change_function (#741) Signed-off-by: Takayuki Murooka --- autoware_launch/config/planning/preset/default_preset.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/autoware_launch/config/planning/preset/default_preset.yaml b/autoware_launch/config/planning/preset/default_preset.yaml index fa4a2e4308..7bd3dd26b3 100644 --- a/autoware_launch/config/planning/preset/default_preset.yaml +++ b/autoware_launch/config/planning/preset/default_preset.yaml @@ -30,9 +30,6 @@ launch: - arg: name: launch_side_shift_module default: "true" - - arg: - name: use_experimental_lane_change_function - default: "true" # behavior velocity modules - arg: From cf56d2c2c5b5785ccb8034b713b05cef37ad4cf7 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 18 Dec 2023 22:07:03 +0900 Subject: [PATCH 319/446] fix(intersection): generate yield stuck detect area from multiple lanes (#742) --- .../behavior_velocity_planner/intersection.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 1e6ce843de..997addd48d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -29,9 +29,9 @@ yield_stuck: turn_direction: left: true - right: false + right: true straight: false - distance_threshold: 1.0 + distance_threshold: 5.0 collision_detection: consider_wrong_direction_vehicle: false From 0c9f74e5736aa34b00a61ed4be9a588b832c4a36 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:22:06 +0900 Subject: [PATCH 320/446] feat(run_out)!: ignore the collision points on crosswalk (#737) suppress on crosswalk Signed-off-by: Yuki Takagi --- .../behavior_velocity_planner/run_out.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml index f265594a38..ccd263bf3a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml @@ -3,6 +3,7 @@ run_out: detection_method: "Object" # [-] candidate: Object, ObjectWithoutPath, Points use_partition_lanelet: true # [-] whether to use partition lanelet map data + suppress_on_crosswalk: true # [-] whether to suppress on crosswalk lanelet: specify_decel_jerk: false # [-] whether to specify jerk when ego decelerates stop_margin: 2.5 # [m] the vehicle decelerates to be able to stop with this margin passing_margin: 1.1 # [m] the vehicle begins to accelerate if the vehicle's front in predicted position is ahead of the obstacle + this margin From 989c899d1c14d662f3f9b299415699d32ce06da6 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 19 Dec 2023 14:00:45 +0900 Subject: [PATCH 321/446] feat(blind_spot): consider opposite adjacent lane for wrong vehicles (#695) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/blind_spot.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml index 0950ece4ae..7bd7d88230 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml @@ -8,4 +8,5 @@ max_future_movement_time: 10.0 # [second] threshold_yaw_diff: 0.523 # [rad] adjacent_extend_width: 1.5 # [m] + opposite_adjacent_extend_width: 1.5 # [m] enable_rtc: false # if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. From 024254c82f2687deddfadba716afe0f2b8a3a03c Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 19 Dec 2023 17:48:46 +0900 Subject: [PATCH 322/446] fix(avoidance): shorten the parameter (#745) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index c68c10f2a9..d50b1ad42c 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -216,7 +216,7 @@ return_dead_line: goal: enable: true # [-] - buffer: 30.0 # [m] + buffer: 25.0 # [m] traffic_light: enable: true # [-] buffer: 3.0 # [m] From 829f8e9a873c07f7ad99dbe82561afe40de5f181 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 20 Dec 2023 13:01:09 +0900 Subject: [PATCH 323/446] feat(intersection): disable stuck detection against private lane (#744) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 997addd48d..6fc136c512 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -23,8 +23,7 @@ stuck_vehicle_velocity_threshold: 0.833 # enable_front_car_decel_prediction: false # assumed_front_car_decel: 1.0 - timeout_private_area: 3.0 - enable_private_area_stuck_disregard: false + disable_against_private_lane: true yield_stuck: turn_direction: From 8c2aab97b0cded219c17553a022a05a66e43e3b7 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 20 Dec 2023 13:16:40 +0900 Subject: [PATCH 324/446] feat(avoidance): enable avoidance for objects that stop longer time than thresh (#747) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index d50b1ad42c..abea410e7e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -141,6 +141,7 @@ force_avoidance: enable: false # [-] time_threshold: 1.0 # [s] + distance_threshold: 1.0 # [m] ignore_area: traffic_light: front_distance: 100.0 # [m] From cfa256fb60efa8356d8bd9f059503ff06ff19e06 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 21 Dec 2023 15:18:41 +0900 Subject: [PATCH 325/446] feat(avoidance): enable avoidance for objects that stop longer time than thresh (#743) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index abea410e7e..add538c7bf 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -139,8 +139,8 @@ # params for avoidance of vehicle type objects that are ambiguous as to whether they are parked. force_avoidance: - enable: false # [-] - time_threshold: 1.0 # [s] + enable: true # [-] + time_threshold: 3.0 # [s] distance_threshold: 1.0 # [m] ignore_area: traffic_light: From a9779ec2350d89868952f15c8f7e1748835d38bb Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 21 Dec 2023 18:08:36 +0900 Subject: [PATCH 326/446] feat: run_out does not plan to stop when there is enough time for stopping (#749) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/run_out.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml index ccd263bf3a..86bcf34382 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml @@ -4,7 +4,7 @@ detection_method: "Object" # [-] candidate: Object, ObjectWithoutPath, Points use_partition_lanelet: true # [-] whether to use partition lanelet map data suppress_on_crosswalk: true # [-] whether to suppress on crosswalk lanelet: - specify_decel_jerk: false # [-] whether to specify jerk when ego decelerates + specify_decel_jerk: true # [-] whether to specify jerk when ego decelerates stop_margin: 2.5 # [m] the vehicle decelerates to be able to stop with this margin passing_margin: 1.1 # [m] the vehicle begins to accelerate if the vehicle's front in predicted position is ahead of the obstacle + this margin deceleration_jerk: -0.3 # [m/s^3] ego decelerates with this jerk when stopping for obstacles From e670bf1e7bde4a28d52d29cc31870b2f2c57f87b Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 22 Dec 2023 10:11:29 +0900 Subject: [PATCH 327/446] revert: "fix(avoidance): shorten the parameter (#745)" (#750) revert "fix(avoidance): shorten the parameter (#745)" This reverts commit 024254c82f2687deddfadba716afe0f2b8a3a03c. --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index add538c7bf..7117d1d6da 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -217,7 +217,7 @@ return_dead_line: goal: enable: true # [-] - buffer: 25.0 # [m] + buffer: 30.0 # [m] traffic_light: enable: true # [-] buffer: 3.0 # [m] From 31b7b9883478952a762921893475559653b6300d Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 25 Dec 2023 14:43:55 +0900 Subject: [PATCH 328/446] feat: add stopped_object.max_object_vel in dynamic_avoidance (#753) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 854c29aa89..29fdca78e5 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -46,6 +46,9 @@ min_object_vel: -0.5 # [m/s] The value is negative considering the noisy velocity of the stopped vehicle. max_ego_path_lat_cover_ratio: 0.3 # [-] The object will be ignored if the ratio of the object covering the ego's path is higher than this value. + stopped_object: + max_object_vel: 0.5 # [m/s] The object will be determined as stopped if the velocity is smaller than this value. + drivable_area_generation: polygon_generation_method: "ego_path_base" # choose "ego_path_base" and "object_path_base" object_path_base: From 9e5e166cf770d548c03a6be44710f537b09f4acd Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 25 Dec 2023 18:43:23 +0900 Subject: [PATCH 329/446] feat(start_planner): change collision_check_distance_from_end to shorten back distance ## Description (#754) feat(start_planner): change collision_check_distance_from_end to shorten back distance Signed-off-by: kosuke55 --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 514d61e225..b96e81a699 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -6,7 +6,7 @@ th_stopped_velocity: 0.01 th_stopped_time: 1.0 collision_check_margin: 1.0 - collision_check_distance_from_end: 1.0 + collision_check_distance_from_end: -10.0 th_moving_object_velocity: 1.0 th_distance_to_middle_of_the_road: 0.5 center_line_path_interval: 1.0 From 96f2f18d23ba829804415135b241065ecf53b13d Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 25 Dec 2023 23:24:29 +0900 Subject: [PATCH 330/446] feat(start_planner): revert change collision_check_distance_from_end to shorten back distance (#757) Revert "feat(start_planner): change collision_check_distance_from_end to shorten back distance" This reverts commit 680fb05e9bebdff6cf2c9734631cb4e949d7c499. --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index b96e81a699..514d61e225 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -6,7 +6,7 @@ th_stopped_velocity: 0.01 th_stopped_time: 1.0 collision_check_margin: 1.0 - collision_check_distance_from_end: -10.0 + collision_check_distance_from_end: 1.0 th_moving_object_velocity: 1.0 th_distance_to_middle_of_the_road: 0.5 center_line_path_interval: 1.0 From 22f04701ad8ad757c954f19c6128a7de6ad78761 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 26 Dec 2023 09:23:57 +0900 Subject: [PATCH 331/446] refactor(behavior_path_planner): rename parameter "extra_arc_length" to "arc_length_range" (#755) Signed-off-by: Maxime CLEMENT --- .../behavior_path_planner/drivable_area_expansion.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml index 0558f6c606..f3393ff5a4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml @@ -13,7 +13,7 @@ smoothing: curvature_average_window: 3 # window size used for smoothing the curvatures using a moving window average max_bound_rate: 1.0 # [m/m] maximum rate of change of the bound lateral distance over its arc length - extra_arc_length: 2.0 # [m] extra arc length where an expansion distance is initially applied + arc_length_range: 2.0 # [m] arc length range where an expansion distance is initially applied ego: extra_wheelbase: 0.0 # [m] extra length to add to the wheelbase extra_front_overhang: 0.5 # [m] extra length to add to the front overhang From 2447f7cf71632ceedd2b51cb889dbe83bc9969ac Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 26 Dec 2023 11:09:12 +0900 Subject: [PATCH 332/446] fix(avoidance): apply params used in xx1 vehicle (#751) * fix(avoidance): use xx1 params Signed-off-by: satoshi-ota * fix(avoidance): expand safety check polygon lateral margin Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../avoidance/avoidance.param.yaml | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 7117d1d6da..0618185dcf 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -29,41 +29,41 @@ car: execute_num: 1 # [-] moving_speed_threshold: 1.0 # [m/s] - moving_time_threshold: 1.0 # [s] + moving_time_threshold: 2.0 # [s] max_expand_ratio: 0.0 # [-] - envelope_buffer_margin: 0.3 # [m] - avoid_margin_lateral: 1.0 # [m] - safety_buffer_lateral: 0.7 # [m] + envelope_buffer_margin: 0.5 # [m] + avoid_margin_lateral: 0.7 # [m] + safety_buffer_lateral: 0.3 # [m] safety_buffer_longitudinal: 0.0 # [m] use_conservative_buffer_longitudinal: true # [-] When set to true, the base_link2front is added to the longitudinal buffer before avoidance. truck: execute_num: 1 - moving_speed_threshold: 1.0 # 3.6km/h - moving_time_threshold: 1.0 + moving_speed_threshold: 2.0 # 7.2km/h + moving_time_threshold: 2.0 max_expand_ratio: 0.0 - envelope_buffer_margin: 0.3 - avoid_margin_lateral: 1.0 - safety_buffer_lateral: 0.7 + envelope_buffer_margin: 0.5 + avoid_margin_lateral: 0.9 + safety_buffer_lateral: 0.1 safety_buffer_longitudinal: 0.0 use_conservative_buffer_longitudinal: true bus: execute_num: 1 - moving_speed_threshold: 1.0 # 3.6km/h - moving_time_threshold: 1.0 + moving_speed_threshold: 2.0 # 7.2km/h + moving_time_threshold: 2.0 max_expand_ratio: 0.0 - envelope_buffer_margin: 0.3 - avoid_margin_lateral: 1.0 - safety_buffer_lateral: 0.7 + envelope_buffer_margin: 0.5 + avoid_margin_lateral: 0.9 + safety_buffer_lateral: 0.1 safety_buffer_longitudinal: 0.0 use_conservative_buffer_longitudinal: true trailer: execute_num: 1 - moving_speed_threshold: 1.0 # 3.6km/h - moving_time_threshold: 1.0 + moving_speed_threshold: 2.0 # 7.2km/h + moving_time_threshold: 2.0 max_expand_ratio: 0.0 - envelope_buffer_margin: 0.3 - avoid_margin_lateral: 1.0 - safety_buffer_lateral: 0.7 + envelope_buffer_margin: 0.5 + avoid_margin_lateral: 0.9 + safety_buffer_lateral: 0.1 safety_buffer_longitudinal: 0.0 use_conservative_buffer_longitudinal: true unknown: @@ -71,9 +71,9 @@ moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 - envelope_buffer_margin: 0.3 - avoid_margin_lateral: 1.0 - safety_buffer_lateral: 0.7 + envelope_buffer_margin: 0.1 + avoid_margin_lateral: 0.7 + safety_buffer_lateral: -0.2 safety_buffer_longitudinal: 0.0 use_conservative_buffer_longitudinal: true bicycle: @@ -81,9 +81,9 @@ moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 - envelope_buffer_margin: 0.8 - avoid_margin_lateral: 1.0 - safety_buffer_lateral: 1.0 + envelope_buffer_margin: 0.5 + avoid_margin_lateral: 0.7 + safety_buffer_lateral: 0.5 safety_buffer_longitudinal: 1.0 use_conservative_buffer_longitudinal: true motorcycle: @@ -91,9 +91,9 @@ moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 - envelope_buffer_margin: 0.8 - avoid_margin_lateral: 1.0 - safety_buffer_lateral: 1.0 + envelope_buffer_margin: 0.5 + avoid_margin_lateral: 0.7 + safety_buffer_lateral: 0.3 safety_buffer_longitudinal: 1.0 use_conservative_buffer_longitudinal: true pedestrian: @@ -101,9 +101,9 @@ moving_speed_threshold: 0.28 # 1.0km/h moving_time_threshold: 1.0 max_expand_ratio: 0.0 - envelope_buffer_margin: 0.8 - avoid_margin_lateral: 1.0 - safety_buffer_lateral: 1.0 + envelope_buffer_margin: 0.5 + avoid_margin_lateral: 0.7 + safety_buffer_lateral: 0.5 safety_buffer_longitudinal: 1.0 use_conservative_buffer_longitudinal: true lower_distance_for_polygon_expansion: 30.0 # [m] @@ -189,7 +189,7 @@ expected_rear_deceleration: -1.0 # [m/ss] rear_vehicle_reaction_time: 2.0 # [s] rear_vehicle_safety_time_margin: 1.0 # [s] - lateral_distance_max_threshold: 0.75 # [m] + lateral_distance_max_threshold: 2.0 # [m] longitudinal_distance_min_threshold: 3.0 # [m] longitudinal_velocity_delta_time: 0.8 # [s] From 805756256ce392c1a7ef300251acae85a7f4d76a Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 26 Dec 2023 19:55:45 +0900 Subject: [PATCH 333/446] feat(obstacle_stop_planner): change stop distance after goal (#758) * feat(obstacle_stop/cruise): change stop distance after goal Signed-off-by: kosuke55 * Update autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml --------- Signed-off-by: kosuke55 --- .../obstacle_stop_planner/obstacle_stop_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/obstacle_stop_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/obstacle_stop_planner.param.yaml index c804cea577..8e215a1bcf 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/obstacle_stop_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_stop_planner/obstacle_stop_planner.param.yaml @@ -17,7 +17,7 @@ # params for stop position stop_position: max_longitudinal_margin: 5.0 # stop margin distance from obstacle on the path [m] - max_longitudinal_margin_behind_goal: 3.0 # stop margin distance from obstacle behind goal on the path [m] + max_longitudinal_margin_behind_goal: 2.5 # stop margin distance from obstacle behind goal on the path [m] min_longitudinal_margin: 5.0 # stop margin distance when any other stop point is inserted in stop margin [m] hold_stop_margin_distance: 0.0 # the ego keeps stopping if the ego is in this margin [m] From 6bc483a736edd11bebbd264dd7806511364ad015 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Wed, 27 Dec 2023 11:30:04 +0900 Subject: [PATCH 334/446] feat(map_based_prediction): map prediction with acc constraints (#759) * Add params for acceleration constraints for map_based_prediction Signed-off-by: Daniel Sanchez * add new param Signed-off-by: Daniel Sanchez * tune params Signed-off-by: Daniel Sanchez * add parameter to switch on and off constraints check Signed-off-by: Daniel Sanchez * improve comment Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez Signed-off-by: Daniel Sanchez --- .../prediction/map_based_prediction.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index 69ff96a263..fe4d2a51ec 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -13,6 +13,9 @@ sigma_yaw_angle_deg: 5.0 #[angle degree] object_buffer_time_length: 2.0 #[s] history_time_length: 1.0 #[s] + check_lateral_acceleration_constraints: false # whether to check if the predicted path complies with lateral acceleration constraints + max_lateral_accel: 2.0 # [m/ss] max acceptable lateral acceleration for predicted vehicle paths + min_acceleration_before_curve: -2.0 # [m/ss] min acceleration a vehicle might take to decelerate before a curve # parameter for shoulder lane prediction prediction_time_horizon_rate_for_validate_shoulder_lane_length: 0.8 From e17229cf352274ee17c7dadb9320fdcfedf2d6ac Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 27 Dec 2023 11:58:37 +0900 Subject: [PATCH 335/446] feat: make crosswalk decision more aggressive towards the real world's driving (#762) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/crosswalk.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index e7bdda45de..240963309e 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -53,8 +53,8 @@ stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding - disable_stop_for_yield_cancel: false # for the crosswalks with traffic signal - disable_yield_for_new_stopped_object: false # for the crosswalks with traffic signal + disable_stop_for_yield_cancel: true # for the crosswalks with traffic signal + disable_yield_for_new_stopped_object: true # for the crosswalks with traffic signal # If the pedestrian does not move for X seconds after the ego has stopped in front the crosswalk, the module judge that the pedestrian has no intention to walk and allows the ego to proceed. distance_map_for_no_intention_to_walk: [1.0, 5.0] # [m] ascending order timeout_map_for_no_intention_to_walk: [3.0, 0.0] # [s] From 5020749764b688eb3f4323331360407b97ce0820 Mon Sep 17 00:00:00 2001 From: Tao Zhong <55872497+tzhong518@users.noreply.github.com> Date: Fri, 29 Dec 2023 13:39:50 +0900 Subject: [PATCH 336/446] feat(autoware_launch): update traffic light recognition models (#752) * fix: update model names Signed-off-by: tzhong518 * fix: argument name Signed-off-by: tzhong518 * Update autoware_launch/launch/components/tier4_perception_component.launch.xml * fix: model name Signed-off-by: tzhong518 * fix: add model path Signed-off-by: tzhong518 * Update autoware_launch/launch/components/tier4_perception_component.launch.xml --------- Signed-off-by: tzhong518 Co-authored-by: Yusuke Muramatsu Co-authored-by: Shunsuke Miura <37187849+miursh@users.noreply.github.com> --- .../launch/components/tier4_perception_component.launch.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 49156fba51..3a968f0f27 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -127,8 +127,9 @@ - + - + + From 01fb0f25035380e25e757e51de27cd666d74024c Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 5 Jan 2024 16:38:49 +0900 Subject: [PATCH 337/446] feat: add parameters to avoid sudden steering in dynamic avoidance (#756) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 29fdca78e5..371f7da2fa 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -59,6 +59,10 @@ max_time_for_object_lat_shift: 0.0 # [s] lpf_gain_for_lat_avoid_to_offset: 0.9 # [-] + max_ego_lat_acc: 0.3 # [m/ss] + max_ego_lat_jerk: 0.3 # [m/sss] + delay_time_ego_shift: 1.0 # [s] + # for same directional object overtaking_object: max_time_to_collision: 40.0 # [s] From fb88b82382af2c70103aba4b606b5c9d096ededd Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Tue, 9 Jan 2024 12:55:29 +0900 Subject: [PATCH 338/446] refactor(ndt_scan_matcher, map_loader): remove unused parameters (#769) Removed unused parameters Signed-off-by: Shintaro Sakoda --- .../config/localization/ndt_scan_matcher.param.yaml | 3 --- autoware_launch/config/map/pointcloud_map_loader.param.yaml | 1 - 2 files changed, 4 deletions(-) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index 1a6c26cd9c..9bc62d3f91 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -1,8 +1,5 @@ /**: ros__parameters: - # Use dynamic map loading - use_dynamic_map_loading: true - # Vehicle reference frame base_frame: "base_link" diff --git a/autoware_launch/config/map/pointcloud_map_loader.param.yaml b/autoware_launch/config/map/pointcloud_map_loader.param.yaml index ba4c032d3e..b4efbec970 100644 --- a/autoware_launch/config/map/pointcloud_map_loader.param.yaml +++ b/autoware_launch/config/map/pointcloud_map_loader.param.yaml @@ -3,7 +3,6 @@ enable_whole_load: true enable_downsampled_whole_load: false enable_partial_load: true - enable_differential_load: true enable_selected_load: false # only used when downsample_whole_load enabled From b9cf24d2da1fff71ec2bfd0fde3bb0c8e17ca586 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 9 Jan 2024 13:11:39 +0900 Subject: [PATCH 339/446] feat: add behavior_output_path_interval in behavior_velocity_planner (#773) Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml index aa51c38b55..b31506918a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml @@ -2,6 +2,7 @@ ros__parameters: forward_path_length: 1000.0 backward_path_length: 5.0 + behavior_output_path_interval: 1.0 stop_line_extend_length: 5.0 max_accel: -2.8 max_jerk: -5.0 From fc6d07ff327fd3c9757d8bf3232b924d2656da02 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Tue, 9 Jan 2024 13:11:52 +0900 Subject: [PATCH 340/446] feat: tune dynamic avoidance parameters with the real vehicle (#775) Signed-off-by: Takayuki Murooka --- .../dynamic_avoidance/dynamic_avoidance.param.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml index 371f7da2fa..0a563498be 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/dynamic_avoidance/dynamic_avoidance.param.yaml @@ -38,7 +38,7 @@ crossing_object: min_overtaking_object_vel: 1.0 max_overtaking_object_angle: 1.05 - min_oncoming_object_vel: 0.0 + min_oncoming_object_vel: 1.0 max_oncoming_object_angle: 0.523 front_object: @@ -54,7 +54,7 @@ object_path_base: min_longitudinal_polygon_margin: 3.0 # [m] - lat_offset_from_obstacle: 0.8 # [m] + lat_offset_from_obstacle: 1.0 # [m] max_lat_offset_to_avoid: 0.5 # [m] max_time_for_object_lat_shift: 0.0 # [s] lpf_gain_for_lat_avoid_to_offset: 0.9 # [-] @@ -66,12 +66,12 @@ # for same directional object overtaking_object: max_time_to_collision: 40.0 # [s] - start_duration_to_avoid: 2.0 # [s] - end_duration_to_avoid: 4.0 # [s] + start_duration_to_avoid: 1.0 # [s] + end_duration_to_avoid: 1.0 # [s] duration_to_hold_avoidance: 3.0 # [s] # for opposite directional object oncoming_object: max_time_to_collision: 40.0 # [s] This value should be the same as overtaking_object's one to suppress chattering of this value for parked vehicles - start_duration_to_avoid: 12.0 # [s] + start_duration_to_avoid: 1.0 # [s] end_duration_to_avoid: 0.0 # [s] From 24fd44b3a08bd93fcf0afff29218a13afcd13c80 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Tue, 9 Jan 2024 18:00:31 +0900 Subject: [PATCH 341/446] fix(lane_change): set lane change parameters to real vehicle environment (#761) Signed-off-by: Fumiya Watanabe --- .../lane_change/lane_change.param.yaml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 366c093901..57899fada8 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -57,14 +57,14 @@ # lane expansion for object filtering lane_expansion: - left_offset: 0.0 # [m] - right_offset: 0.0 # [m] + left_offset: 1.0 # [m] + right_offset: 1.0 # [m] # lateral acceleration map lateral_acceleration: velocity: [0.0, 4.0, 10.0] - min_values: [0.15, 0.15, 0.15] - max_values: [0.5, 0.5, 0.5] + min_values: [0.4, 0.4, 0.4] + max_values: [0.65, 0.65, 0.65] # target object target_object: @@ -72,7 +72,7 @@ truck: true bus: true trailer: true - unknown: true + unknown: false bicycle: true motorcycle: true pedestrian: true @@ -80,14 +80,14 @@ # collision check enable_prepare_segment_collision_check: false prepare_segment_ignore_object_velocity_thresh: 0.1 # [m/s] - check_objects_on_current_lanes: true - check_objects_on_other_lanes: true + check_objects_on_current_lanes: false + check_objects_on_other_lanes: false use_all_predicted_path: true # lane change regulations regulation: - crosswalk: false - intersection: false + crosswalk: true + intersection: true traffic_light: true # ego vehicle stuck detection @@ -107,4 +107,4 @@ finish_judge_lateral_threshold: 0.2 # [m] # debug - publish_debug_marker: false + publish_debug_marker: true From beec828574dc6131f9cb7c0b9ff2a4558cf86b5e Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 10 Jan 2024 10:40:08 +0900 Subject: [PATCH 342/446] fix(pointpainting): update parameter structure (#778) * fix(pointpainting): update parameter structure Signed-off-by: kminoda * update roi_sync.param.yaml Signed-off-by: kminoda * style(pre-commit): autofix --------- Signed-off-by: kminoda Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../roi_sync.param.yaml | 2 + .../lidar_model/pointpainting.param.yaml | 40 +++++++++++-------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml index 0e4c52ba92..99d85089be 100644 --- a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml @@ -3,6 +3,8 @@ input_offset_ms: [61.67, 111.67, 45.0, 28.33, 78.33, 95.0] timeout_ms: 70.0 match_threshold_ms: 50.0 + image_buffer_size: 15 + debug_mode: false filter_scope_min_x: -100.0 filter_scope_min_y: -100.0 filter_scope_min_z: -100.0 diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml index e1be5426cb..21d31f2163 100755 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml @@ -1,18 +1,26 @@ /**: ros__parameters: - class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] - paint_class_names: ["CAR", "BICYCLE", "PEDESTRIAN"] - point_feature_size: 7 # x, y, z, time-lag and car, pedestrian, bicycle - max_voxel_size: 40000 - point_cloud_range: [-121.6, -76.8, -3.0, 121.6, 76.8, 5.0] - voxel_size: [0.32, 0.32, 8.0] - downsample_factor: 1 - encoder_in_feature_size: 12 - yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] - # post-process params - circle_nms_dist_threshold: 0.3 - iou_nms_target_class_names: ["CAR"] - iou_nms_search_distance_2d: 10.0 - iou_nms_threshold: 0.1 - # omp params - omp_num_threads: 1 + model_params: + class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] + paint_class_names: ["CAR", "BICYCLE", "PEDESTRIAN"] + point_feature_size: 7 # x, y, z, time-lag and car, pedestrian, bicycle + max_voxel_size: 40000 + point_cloud_range: [-121.6, -76.8, -3.0, 121.6, 76.8, 5.0] + voxel_size: [0.32, 0.32, 8.0] + downsample_factor: 1 + encoder_in_feature_size: 12 + yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] + has_twist: false + densification_params: + world_frame_id: "map" + num_past_frames: 0 + post_process_params: + # post-process params + circle_nms_dist_threshold: 0.3 + iou_nms_target_class_names: ["CAR"] + iou_nms_search_distance_2d: 10.0 + iou_nms_threshold: 0.1 + score_threshold: 0.4 + omp_params: + # omp params + num_threads: 1 From daea9fc756368a98bc49eb3f064e7a09103940f9 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:30:57 +0900 Subject: [PATCH 343/446] feat(behavior_velocity_planner): add new 'dynamic_obstacle_stop' module (#730) Signed-off-by: Maxime CLEMENT --- .../planning/preset/default_preset.yaml | 3 +++ .../dynamic_obstacle_stop.param.yaml | 10 ++++++++ .../tier4_planning_component.launch.xml | 1 + autoware_launch/rviz/autoware.rviz | 24 +++++++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/dynamic_obstacle_stop.param.yaml diff --git a/autoware_launch/config/planning/preset/default_preset.yaml b/autoware_launch/config/planning/preset/default_preset.yaml index 7bd3dd26b3..3df13a108d 100644 --- a/autoware_launch/config/planning/preset/default_preset.yaml +++ b/autoware_launch/config/planning/preset/default_preset.yaml @@ -77,6 +77,9 @@ launch: - arg: name: launch_no_drivable_lane_module default: "false" + - arg: + name: launch_dynamic_obstacle_stop_module + default: "true" # motion planning modules - arg: diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/dynamic_obstacle_stop.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/dynamic_obstacle_stop.param.yaml new file mode 100644 index 0000000000..14483093e8 --- /dev/null +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/dynamic_obstacle_stop.param.yaml @@ -0,0 +1,10 @@ +/**: + ros__parameters: + dynamic_obstacle_stop: # module to stop or before entering the immediate path of a moving object + extra_object_width: 1.0 # [m] extra width around detected objects + minimum_object_velocity: 0.5 # [m/s] objects with a velocity bellow this value are ignored + stop_distance_buffer: 0.5 # [m] extra distance to add between the stop point and the collision point + time_horizon: 5.0 # [s] time horizon used for collision checks + hysteresis: 1.0 # [m] once a collision has been detected, this hysteresis is used on the collision detection + decision_duration_buffer : 1.0 # [s] duration between no collision being detected and the stop decision being cancelled + minimum_object_distance_from_ego_path: 1.0 # [m] minimum distance between the footprints of ego and an object to consider for collision diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 5fb17541cd..3e9061da80 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -49,6 +49,7 @@ + diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index bc22eadb70..d8d2602d1a 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -1676,6 +1676,18 @@ Visualization Manager: Reliability Policy: Reliable Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/virtual_wall/no_drivable_lane Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: VirtualWall (DynamicObstacleStop) + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/virtual_wall/dynamic_obstacle_stop + Value: true Enabled: true Name: VirtualWall - Class: rviz_common/Group @@ -1944,6 +1956,18 @@ Visualization Manager: Reliability Policy: Reliable Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/no_drivable_lane Value: false + - Class: rviz_default_plugins/MarkerArray + Enabled: false + Name: DynamicObstacleStop + Namespaces: + {} + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/dynamic_obstacle_stop + Value: false Enabled: false Name: DebugMarker - Class: rviz_common/Group From 3d1e11728048609beea197ed3c7dedfebb80e9d0 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:49:53 +0900 Subject: [PATCH 344/446] fix(rviz): hide traffic light regulatory element id (#777) Signed-off-by: satoshi-ota --- autoware_launch/rviz/autoware.rviz | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index d8d2602d1a..a0ade56821 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -397,6 +397,7 @@ Visualization Manager: shoulder_road_lanelets: false traffic_light: true traffic_light_id: false + traffic_light_reg_elem_id: false traffic_light_triangle: true walkway_lanelets: true hatched_road_markings_bound: true From 02050cc99003c3398f11830045091e8ee70be468 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:53:16 +0900 Subject: [PATCH 345/446] feat(surround_obstacle_checker): disable the surround obstacle checker (#685) Signed-off-by: Maxime CLEMENT --- .../launch/components/tier4_planning_component.launch.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 3e9061da80..06740146f5 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -8,6 +8,7 @@ + From 5be51657d8ff49228bf0bafe11101367fbabf552 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 10 Jan 2024 14:53:36 +0900 Subject: [PATCH 346/446] feat: tune parameters for optimization path planning (#774) * feat: tune parameters for optimization path planning Signed-off-by: Takayuki Murooka * disable warm start Signed-off-by: Takayuki Murooka * Update autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml --------- Signed-off-by: Takayuki Murooka --- .../obstacle_avoidance_planner.param.yaml | 6 +++--- .../path_smoother/elastic_band_smoother.param.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml index 9ab8f42bcf..db89a81e47 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_avoidance_planner/obstacle_avoidance_planner.param.yaml @@ -31,7 +31,7 @@ max_ego_moving_dist: 5.0 # threshold of ego's moving distance for replan [m] # make max_goal_moving_dist long to keep start point fixed for pull over max_goal_moving_dist: 15.0 # threshold of goal's moving distance for replan [m] - max_delta_time_sec: 1.0 # threshold of delta time for replan [second] + max_delta_time_sec: 0.0 # threshold of delta time for replan [second] # mpt param mpt: @@ -40,7 +40,7 @@ steer_limit_constraint: false visualize_sampling_num: 1 enable_manual_warm_start: false - enable_warm_start: true + enable_warm_start: false enable_optimization_validation: false common: @@ -62,7 +62,7 @@ # weight parameter for optimization weight: # collision free - soft_collision_free_weight: 1000.0 # soft weight for lateral error around the middle point + soft_collision_free_weight: 1.0 # soft weight for lateral error around the middle point # tracking error lat_error_weight: 1.0 # weight for lateral error diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml index c67d29c418..a9e71368e3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/path_smoother/elastic_band_smoother.param.yaml @@ -44,4 +44,4 @@ max_ego_moving_dist: 5.0 # threshold of ego's moving distance for replan [m] # make max_goal_moving_dist long to keep start point fixed for pull over max_goal_moving_dist: 15.0 # threshold of goal's moving distance for replan [m] - max_delta_time_sec: 1.0 # threshold of delta time for replan [second] + max_delta_time_sec: 0.0 # threshold of delta time for replan [second] From bcf3b56314a0910a158a3620464e9b2cd73b605a Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Thu, 11 Jan 2024 11:38:33 +0900 Subject: [PATCH 347/446] feat(start_planner): keep distance against front objects (#766) Add collision check margin from front object Signed-off-by: kyoichi-sugahara --- .../behavior_path_planner/start_planner/start_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 514d61e225..d04728861a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -7,6 +7,7 @@ th_stopped_time: 1.0 collision_check_margin: 1.0 collision_check_distance_from_end: 1.0 + collision_check_margin_from_front_object: 5.0 th_moving_object_velocity: 1.0 th_distance_to_middle_of_the_road: 0.5 center_line_path_interval: 1.0 From d074e0e41e312c1a54f24de64a1ba1856a0c5bc1 Mon Sep 17 00:00:00 2001 From: Amadeusz Szymko Date: Thu, 11 Jan 2024 05:14:00 +0100 Subject: [PATCH 348/446] feat(ekf_localizer): add publish_tf arg (#772) Signed-off-by: amadeuszsz --- autoware_launch/config/localization/ekf_localizer.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/localization/ekf_localizer.param.yaml b/autoware_launch/config/localization/ekf_localizer.param.yaml index 1c16624605..c1bfdaa787 100644 --- a/autoware_launch/config/localization/ekf_localizer.param.yaml +++ b/autoware_launch/config/localization/ekf_localizer.param.yaml @@ -4,6 +4,7 @@ enable_yaw_bias_estimation: true predict_frequency: 50.0 tf_rate: 50.0 + publish_tf: true extend_state_step: 50 # for Pose measurement From 017d50bf220240b75c7b9e4ea3459b85caac56df Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Thu, 11 Jan 2024 14:54:25 +0900 Subject: [PATCH 349/446] feat(start_planner): define collision check margin as list (#770) * Update collision check margins in start planner configuration Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index d04728861a..277771f13f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -5,7 +5,7 @@ th_arrived_distance: 1.0 th_stopped_velocity: 0.01 th_stopped_time: 1.0 - collision_check_margin: 1.0 + collision_check_margins: [2.0, 1.0, 0.5, 0.1] collision_check_distance_from_end: 1.0 collision_check_margin_from_front_object: 5.0 th_moving_object_velocity: 1.0 From ade41439a3e1f8184d8d4d24c304b1b680511060 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Thu, 11 Jan 2024 18:35:23 +0900 Subject: [PATCH 350/446] fix(intersection): fix bugs (#781) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 6fc136c512..4e9eb50f2a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -72,7 +72,7 @@ enable: false creep_velocity: 0.8333 peeking_offset: -0.5 - occlusion_required_clearance_distance: 55 + occlusion_required_clearance_distance: 55.0 possible_object_bbox: [1.5, 2.5] ignore_parked_vehicle_speed_threshold: 0.8333 occlusion_detection_hold_time: 1.5 From ad2c8fdcd88665e7aa5540f7cc55e54a61a3d35e Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 12 Jan 2024 13:34:21 +0900 Subject: [PATCH 351/446] chore(crosswalk): change params (#780) * change params Signed-off-by: Yuki Takagi --- .../behavior_velocity_planner/crosswalk.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 240963309e..273db320f1 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -16,7 +16,7 @@ # For the case where the crosswalk width is very wide far_object_threshold: 10.0 # [m] If objects cross X meters behind the stop line, the stop position is determined according to the object position (stop_distance_from_object meters before the object). # For the case where the stop position is determined according to the object position. - stop_distance_from_object: 2.0 # [m] the vehicle decelerates to be able to stop in front of object with margin + stop_distance_from_object: 3.0 # [m] the vehicle decelerates to be able to stop in front of object with margin # params for ego's slow down velocity. These params are not used for the case of "enable_rtc: false". slow_down: @@ -38,7 +38,7 @@ # params for the pass judge logic against the crosswalk users such as pedestrians or bicycles pass_judge: ego_pass_first_margin_x: [0.0] # [[s]] time to collision margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) - ego_pass_first_margin_y: [6.0] # [[s]] time to vehicle margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) + ego_pass_first_margin_y: [3.0] # [[s]] time to vehicle margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) ego_pass_first_additional_margin: 0.5 # [s] additional time margin for ego pass first situation to suppress chattering ego_pass_later_margin_x: [0.0] # [[s]] time to vehicle margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) ego_pass_later_margin_y: [10.0] # [[s]] time to collision margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) @@ -62,7 +62,7 @@ # param for target object filtering object_filtering: - crosswalk_attention_range: 1.0 # [m] the detection area is defined as -X meters before the crosswalk to +X meters behind the crosswalk + crosswalk_attention_range: 2.0 # [m] the detection area is defined as -X meters before the crosswalk to +X meters behind the crosswalk vehicle_object_cross_angle_threshold: 0.5 # [rad] threshold judging object is crossing walkway as a pedestrian or passing over as a vehicle target_object: unknown: true # [-] whether to look and stop by UNKNOWN objects From 10b95d7669ff77a8fce3954c0b314e1126f92d9c Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Fri, 12 Jan 2024 20:57:26 +0900 Subject: [PATCH 352/446] feat(multi_object_tracker): fix typo in param name and change default value (#785) * fix(multi_object_tracker): fix typo in param name Signed-off-by: kminoda * feat: update default param Signed-off-by: kminoda --------- Signed-off-by: kminoda --- .../multi_object_tracker_node.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml index f58de8e615..32a12f8bf5 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/multi_object_tracker/multi_object_tracker_node.param.yaml @@ -17,7 +17,7 @@ publish_untracked_objects: false # debug parameters - publish_processing_time: false + publish_processing_time: true publish_tentative_objects: false - diagnostic_warn_delay: 0.5 # [sec] - diagnostic_error_delay: 1.0 # [sec] + diagnostics_warn_delay: 0.5 # [sec] + diagnostics_error_delay: 1.0 # [sec] From 3e4aa01bed2ffb70a2cba7cc8c865d5e025af2a7 Mon Sep 17 00:00:00 2001 From: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> Date: Mon, 15 Jan 2024 14:25:40 +0900 Subject: [PATCH 353/446] feat(start_planner): shorten max backward distance (#734) Update start_planner.param.yaml --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 277771f13f..592302ce5d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -32,7 +32,7 @@ # search start pose backward enable_back: true search_priority: "efficient_path" # "efficient_path" or "short_back_distance" - max_back_distance: 30.0 + max_back_distance: 20.0 backward_search_resolution: 2.0 backward_path_update_duration: 3.0 ignore_distance_from_lane_end: 15.0 From e7c0f89b8bf22a1fab6954c67567ddd6fca6bbfc Mon Sep 17 00:00:00 2001 From: melike tanrikulu <41450930+meliketanrikulu@users.noreply.github.com> Date: Mon, 15 Jan 2024 08:55:03 +0300 Subject: [PATCH 354/446] refactor(ekf_localizer): add Simple1DFilter params to parameter file (#710) * feat(ekf_localizer): Add Simple1DFilter params to parameter file Signed-off-by: meliketanrikulu * Update autoware_launch/config/localization/ekf_localizer.param.yaml --------- Signed-off-by: meliketanrikulu Co-authored-by: Kento Yabuuchi --- autoware_launch/config/localization/ekf_localizer.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/localization/ekf_localizer.param.yaml b/autoware_launch/config/localization/ekf_localizer.param.yaml index c1bfdaa787..ebdf2828fc 100644 --- a/autoware_launch/config/localization/ekf_localizer.param.yaml +++ b/autoware_launch/config/localization/ekf_localizer.param.yaml @@ -23,6 +23,10 @@ proc_stddev_vx_c: 10.0 proc_stddev_wz_c: 5.0 + #Simple1DFilter parameters + z_filter_proc_dev: 1.0 + roll_filter_proc_dev: 0.01 + pitch_filter_proc_dev: 0.01 # for diagnostics pose_no_update_count_threshold_warn: 50 pose_no_update_count_threshold_error: 100 From 7e145bcaefbbc17cd225c22dba1898c25c37eae5 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Mon, 15 Jan 2024 18:10:11 +0900 Subject: [PATCH 355/446] feat(mpc): add parameter for debug trajectory publisher (#790) Signed-off-by: Takamasa Horibe --- .../config/control/trajectory_follower/lateral/mpc.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml index 4222082d40..9998b6aadf 100644 --- a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml +++ b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml @@ -74,3 +74,5 @@ update_steer_threshold: 0.035 average_num: 1000 steering_offset_limit: 0.02 + + debug_publish_predicted_trajectory: false # publish debug predicted trajectory in Frenet coordinate From 5b6dab34c6ff19929bbca0492b216115b6ebec86 Mon Sep 17 00:00:00 2001 From: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Date: Tue, 16 Jan 2024 00:08:54 +0900 Subject: [PATCH 356/446] fix(image_projection_based_fusion): add image_porojection_based_fusion params (#789) add image_porojection_based_fusion params Signed-off-by: Shunsuke Miura --- .../roi_cluster_fusion.param.yaml | 12 ++++++++++++ .../roi_detected_object_fusion.param.yaml | 19 +++++++++++++++++++ .../roi_pointcloud_fusion.param.yaml | 5 +++++ .../tier4_perception_component.launch.xml | 12 ++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_cluster_fusion.param.yaml create mode 100755 autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_detected_object_fusion.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_pointcloud_fusion.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_cluster_fusion.param.yaml b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_cluster_fusion.param.yaml new file mode 100644 index 0000000000..90ba841d53 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_cluster_fusion.param.yaml @@ -0,0 +1,12 @@ +/**: + ros__parameters: + fusion_distance: 100.0 + trust_object_distance: 100.0 + trust_object_iou_mode: "iou" + non_trust_object_iou_mode: "iou_x" + use_cluster_semantic_type: false + only_allow_inside_cluster: true + roi_scale_factor: 1.1 + iou_threshold: 0.65 + unknown_iou_threshold: 0.1 + remove_unknown: true diff --git a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_detected_object_fusion.param.yaml b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_detected_object_fusion.param.yaml new file mode 100755 index 0000000000..bd49dc6574 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_detected_object_fusion.param.yaml @@ -0,0 +1,19 @@ +/**: + ros__parameters: + # UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + passthrough_lower_bound_probability_thresholds: [0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.50] + trust_distances: [50.0, 100.0, 100.0, 100.0, 100.0, 50.0, 50.0, 50.0] + min_iou_threshold: 0.5 + use_roi_probability: false + roi_probability_threshold: 0.5 + + can_assign_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN <-roi_msg + [1, 0, 0, 0, 0, 0, 0, 0, # UNKNOWN <-detected_objects + 0, 1, 1, 1, 1, 0, 0, 0, # CAR + 0, 1, 1, 1, 1, 0, 0, 0, # TRUCK + 0, 1, 1, 1, 1, 0, 0, 0, # BUS + 0, 1, 1, 1, 1, 0, 0, 0, # TRAILER + 0, 0, 0, 0, 0, 1, 1, 1, # MOTORBIKE + 0, 0, 0, 0, 0, 1, 1, 1, # BICYCLE + 0, 0, 0, 0, 0, 1, 1, 1] # PEDESTRIAN diff --git a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_pointcloud_fusion.param.yaml b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_pointcloud_fusion.param.yaml new file mode 100644 index 0000000000..5b86b8e81d --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_pointcloud_fusion.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + fuse_unknown_only: true + min_cluster_size: 2 + cluster_2d_tolerance: 0.5 diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 3a968f0f27..21373c78e4 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -48,6 +48,18 @@ name="object_recognition_detection_fusion_sync_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/image_projection_based_fusion/roi_sync.param.yaml" /> + + + Date: Tue, 16 Jan 2024 16:09:29 +0900 Subject: [PATCH 357/446] fix: change the way to disable surround_obstacle_checker (#794) Signed-off-by: Takayuki Murooka --- autoware_launch/config/planning/preset/default_preset.yaml | 2 +- .../launch/components/tier4_planning_component.launch.xml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/preset/default_preset.yaml b/autoware_launch/config/planning/preset/default_preset.yaml index 3df13a108d..3512d722ec 100644 --- a/autoware_launch/config/planning/preset/default_preset.yaml +++ b/autoware_launch/config/planning/preset/default_preset.yaml @@ -112,7 +112,7 @@ launch: - arg: name: launch_surround_obstacle_checker - default: "true" + default: "false" # parking modules - arg: diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 06740146f5..3e9061da80 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -8,7 +8,6 @@ - From faef67ad27511d9bd604e3757203e119a7940967 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 16 Jan 2024 23:32:22 +0900 Subject: [PATCH 358/446] feat(avoidance/goal_planner): execute avoidance and pull over simultaneously (#782) Signed-off-by: kosuke55 --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 3 ++- .../behavior_path_planner/scene_module_manager.param.yaml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 0618185dcf..d540a73940 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -122,7 +122,8 @@ motorcycle: true # [-] pedestrian: true # [-] # detection range - object_check_goal_distance: 20.0 # [m] + object_check_goal_distance: 20.0 # [m] + object_check_return_pose_distance: 20.0 # [m] # filtering parking objects threshold_distance_object_is_on_center: 1.0 # [m] object_check_shiftable_ratio: 0.6 # [-] diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index 0090a29926..584039ba5d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -53,7 +53,7 @@ goal_planner: enable_rtc: false - enable_simultaneous_execution_as_approved_module: false + enable_simultaneous_execution_as_approved_module: true enable_simultaneous_execution_as_candidate_module: false keep_last: true priority: 1 From 55cba841a135ae4f8482f0f6dac9032d79d00f2c Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 17 Jan 2024 17:43:42 +0900 Subject: [PATCH 359/446] fix(AbLC): fix module name inconsistency (#795) Signed-off-by: satoshi-ota --- .../avoidance_by_lane_change.param.yaml} | 0 .../behavior_path_planner/scene_module_manager.param.yaml | 2 +- .../launch/components/tier4_planning_component.launch.xml | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/{avoidance_by_lc/avoidance_by_lc.param.yaml => avoidance_by_lane_change/avoidance_by_lane_change.param.yaml} (100%) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lane_change/avoidance_by_lane_change.param.yaml similarity index 100% rename from autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lc/avoidance_by_lc.param.yaml rename to autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance_by_lane_change/avoidance_by_lane_change.param.yaml diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index 584039ba5d..9853e220bc 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -67,7 +67,7 @@ priority: 4 max_module_size: 1 - avoidance_by_lc: + avoidance_by_lane_change: enable_rtc: false enable_simultaneous_execution_as_approved_module: false enable_simultaneous_execution_as_candidate_module: false diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 3e9061da80..4711f4b7f0 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -24,7 +24,7 @@ - + From d3811ef583fa07155c4c5565c3ec95ef816e75eb Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:18:19 +0900 Subject: [PATCH 360/446] feat(rviz): add marker to show bpp internal state (#801) Signed-off-by: satoshi-ota --- autoware_launch/rviz/autoware.rviz | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index a0ade56821..064f87d3ff 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -3649,6 +3649,22 @@ Visualization Manager: Value: true Enabled: true Name: Objects Of Interest + - Class: rviz_plugins/StringStampedOverlayDisplay + Enabled: true + Font Size: 15 + Left: 1024 + Max Letter Num: 100 + Name: StringStampedOverlayDisplay + Text Color: 25; 255; 240 + Top: 128 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/internal_state + Value: true + Value height offset: 0 Enabled: true Name: Planning - Class: rviz_common/Group From 604660c3b568217aa2ab27fcbff619578467282e Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Thu, 18 Jan 2024 15:45:08 +0900 Subject: [PATCH 361/446] chore: update roi_cluster_fusion default param (#802) Signed-off-by: badai-nguyen --- .../image_projection_based_fusion/roi_cluster_fusion.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_cluster_fusion.param.yaml b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_cluster_fusion.param.yaml index 90ba841d53..016a133227 100644 --- a/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_cluster_fusion.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/image_projection_based_fusion/roi_cluster_fusion.param.yaml @@ -9,4 +9,4 @@ roi_scale_factor: 1.1 iou_threshold: 0.65 unknown_iou_threshold: 0.1 - remove_unknown: true + remove_unknown: false From cb6e526e5de3ba9359c9fa0f3013911199cdd200 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Thu, 18 Jan 2024 17:58:19 +0900 Subject: [PATCH 362/446] feat(intersection): consider 1st/2nd pass judge line (#792) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 4e9eb50f2a..108e021240 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -12,6 +12,7 @@ max_accel: -2.8 max_jerk: -5.0 delay_response_time: 0.5 + enable_pass_judge_before_default_stopline: false stuck_vehicle: turn_direction: @@ -36,7 +37,6 @@ consider_wrong_direction_vehicle: false collision_detection_hold_time: 0.5 min_predicted_path_confidence: 0.05 - keep_detection_velocity_threshold: 0.833 velocity_profile: use_upstream: true minimum_upstream_velocity: 0.01 From b88af2dd6fc4ef5eccdb674469c0c2068b918ef6 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Thu, 18 Jan 2024 20:22:57 +0900 Subject: [PATCH 363/446] feat(start_planner): enable shift path lane departure check (#803) enable shift path lane departure check in start planner Signed-off-by: kyoichi-sugahara --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 592302ce5d..ddfc8fab52 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -13,7 +13,7 @@ center_line_path_interval: 1.0 # shift pull out enable_shift_pull_out: true - check_shift_path_lane_departure: false + check_shift_path_lane_departure: true minimum_shift_pull_out_distance: 0.0 deceleration_interval: 15.0 lateral_jerk: 0.5 From e96c3fa12a1a05c66be6c7158a112827bfe2633a Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Thu, 18 Jan 2024 20:44:59 +0900 Subject: [PATCH 364/446] chore(pointcloud_container): fix output log from screen to both (#804) Signed-off-by: kminoda --- autoware_launch/launch/pointcloud_container.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/launch/pointcloud_container.launch.py b/autoware_launch/launch/pointcloud_container.launch.py index 87c46bce69..dfe9191d3c 100644 --- a/autoware_launch/launch/pointcloud_container.launch.py +++ b/autoware_launch/launch/pointcloud_container.launch.py @@ -43,7 +43,7 @@ def add_launch_arg(name: str, default_value=None): package="rclcpp_components", executable=LaunchConfiguration("container_executable"), composable_node_descriptions=[], - output="screen", + output="both", ) return LaunchDescription( From 93f9663e1ba7bce1774a9d43d6303121a11ec6cb Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 19 Jan 2024 08:31:43 +0900 Subject: [PATCH 365/446] fix(surround_obstacle_checker): use xx1 params (#800) Signed-off-by: satoshi-ota --- .../surround_obstacle_checker.param.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/surround_obstacle_checker.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/surround_obstacle_checker.param.yaml index 5ec10572ff..7f72420b3a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/surround_obstacle_checker.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/surround_obstacle_checker/surround_obstacle_checker.param.yaml @@ -9,7 +9,7 @@ surround_check_side_distance: 0.5 surround_check_back_distance: 0.5 unknown: - enable_check: true + enable_check: false surround_check_front_distance: 0.5 surround_check_side_distance: 0.5 surround_check_back_distance: 0.5 @@ -17,22 +17,22 @@ enable_check: true surround_check_front_distance: 0.5 surround_check_side_distance: 0.0 - surround_check_back_distance: 0.5 + surround_check_back_distance: 0.0 truck: enable_check: true surround_check_front_distance: 0.5 surround_check_side_distance: 0.0 - surround_check_back_distance: 0.5 + surround_check_back_distance: 0.0 bus: enable_check: true surround_check_front_distance: 0.5 surround_check_side_distance: 0.0 - surround_check_back_distance: 0.5 + surround_check_back_distance: 0.0 trailer: enable_check: true surround_check_front_distance: 0.5 surround_check_side_distance: 0.0 - surround_check_back_distance: 0.5 + surround_check_back_distance: 0.0 motorcycle: enable_check: true surround_check_front_distance: 0.5 @@ -49,9 +49,9 @@ surround_check_side_distance: 0.5 surround_check_back_distance: 0.5 - surround_check_hysteresis_distance: 0.3 + surround_check_hysteresis_distance: 0.1 - state_clear_time: 2.0 + state_clear_time: 0.2 # ego stop state stop_state_ego_speed: 0.1 #[m/s] From 71a0a3ee6e6274788932b0e0cac80529a976b363 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Fri, 19 Jan 2024 10:00:05 +0900 Subject: [PATCH 366/446] feat: always separate lidar preprocessing from pointcloud_container (#796) * feat!: replace use_pointcloud_container Signed-off-by: kminoda * change default value Signed-off-by: kminoda * remove from planning Signed-off-by: kminoda * revert: revert change in planning.launch Signed-off-by: kminoda * revert: revert rename of use_pointcloud_container Signed-off-by: kminoda * revert: revert pointcloud_container launch Signed-off-by: kminoda * style(pre-commit): autofix * feat: move glog to pointcloud_container.launch.py * revert: revert unnecessary change Signed-off-by: kminoda * revert: revert glog porting Signed-off-by: kminoda * fix: fix comment in localization launch Signed-off-by: kminoda * style(pre-commit): autofix * remove pointcloud_container_name from localization launcher Signed-off-by: kminoda --------- Signed-off-by: kminoda Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../components/tier4_localization_component.launch.xml | 8 ++++++-- .../components/tier4_perception_component.launch.xml | 1 - 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/autoware_launch/launch/components/tier4_localization_component.launch.xml b/autoware_launch/launch/components/tier4_localization_component.launch.xml index 88b326b2f7..7ec292a381 100644 --- a/autoware_launch/launch/components/tier4_localization_component.launch.xml +++ b/autoware_launch/launch/components/tier4_localization_component.launch.xml @@ -4,15 +4,19 @@ + - - + diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 21373c78e4..939792af84 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -13,7 +13,6 @@ - From 61d8ee599640f4f5958a4e45b77fd4a3ac4fc7d7 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Fri, 19 Jan 2024 13:16:46 +0900 Subject: [PATCH 367/446] feat(map_based_prediction): use acc for map prediction (#788) * add param to toggle on and off acc consideration Signed-off-by: Daniel Sanchez * add params Signed-off-by: Daniel Sanchez * set default to true for evaluator testing Signed-off-by: Daniel Sanchez * set back to false default Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez Signed-off-by: Daniel Sanchez --- .../prediction/map_based_prediction.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index fe4d2a51ec..fdd64174de 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -16,6 +16,9 @@ check_lateral_acceleration_constraints: false # whether to check if the predicted path complies with lateral acceleration constraints max_lateral_accel: 2.0 # [m/ss] max acceptable lateral acceleration for predicted vehicle paths min_acceleration_before_curve: -2.0 # [m/ss] min acceleration a vehicle might take to decelerate before a curve + use_vehicle_acceleration: false # whether to consider current vehicle acceleration when predicting paths or not + speed_limit_multiplier: 1.5 # When using vehicle acceleration. Set vehicle's maximum predicted speed as the legal speed limit in that lanelet times this value + acceleration_exponential_half_life: 2.5 # [s] When using vehicle acceleration. The decaying acceleration model considers that the current vehicle acceleration will be halved after this many seconds # parameter for shoulder lane prediction prediction_time_horizon_rate_for_validate_shoulder_lane_length: 0.8 From b346792d6184334c8d20df6219f9dbc011e78e5d Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:01:17 +0900 Subject: [PATCH 368/446] chore(planning): change params to vehicle tested values (#797) change params to vehicle tested values Signed-off-by: Yuki Takagi --- .../behavior_velocity_planner/crosswalk.param.yaml | 6 +++--- .../behavior_velocity_planner/walkway.param.yaml | 2 +- .../obstacle_cruise_planner.param.yaml | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 273db320f1..72102ed908 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -50,15 +50,15 @@ min_jerk: -1.0 # min jerk [m/sss] max_jerk: 1.0 # max jerk [m/sss] - stop_object_velocity_threshold: 0.28 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.28 m/s = 1.0 kmph) + stop_object_velocity_threshold: 0.25 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.25 m/s = 0.9 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding disable_stop_for_yield_cancel: true # for the crosswalks with traffic signal disable_yield_for_new_stopped_object: true # for the crosswalks with traffic signal # If the pedestrian does not move for X seconds after the ego has stopped in front the crosswalk, the module judge that the pedestrian has no intention to walk and allows the ego to proceed. distance_map_for_no_intention_to_walk: [1.0, 5.0] # [m] ascending order - timeout_map_for_no_intention_to_walk: [3.0, 0.0] # [s] - timeout_ego_stop_for_yield: 3.0 # [s] If the ego maintains the stop for this amount of time, then the ego proceeds, assuming it has stopped long time enough. + timeout_map_for_no_intention_to_walk: [1.0, 0.0] # [s] + timeout_ego_stop_for_yield: 1.0 # [s] If the ego maintains the stop for this amount of time, then the ego proceeds, assuming it has stopped long time enough. # param for target object filtering object_filtering: diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml index f21e3d12db..07f493edcd 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/walkway.param.yaml @@ -1,5 +1,5 @@ /**: ros__parameters: walkway: - stop_duration: 1.0 # [s] stop time at stop position + stop_duration: 0.1 # [s] stop time at stop position stop_distance_from_crosswalk: 3.5 # [m] make stop line away from crosswalk when no explicit stop line exists diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index 90e897fda3..1ac32ba562 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -85,15 +85,15 @@ obstacle_traj_angle_threshold : 1.22 # [rad] = 70 [deg], yaw threshold of crossing obstacle against the nearest trajectory point for cruise or stop stop: - max_lat_margin: 0.0 # lateral margin between obstacle and trajectory band with ego's width + max_lat_margin: 0.2 # lateral margin between obstacle and trajectory band with ego's width crossing_obstacle: collision_time_margin : 4.0 # time threshold of collision between obstacle adn ego for cruise or stop [s] cruise: max_lat_margin: 1.0 # lateral margin between obstacle and trajectory band with ego's width outside_obstacle: - obstacle_velocity_threshold : 3.0 # minimum velocity threshold of obstacles outside the trajectory to cruise or stop [m/s] - ego_obstacle_overlap_time_threshold : 1.0 # time threshold to decide cut-in obstacle for cruise or stop [s] + obstacle_velocity_threshold : 3.5 # minimum velocity threshold of obstacles outside the trajectory to cruise or stop [m/s] + ego_obstacle_overlap_time_threshold : 2.0 # time threshold to decide cut-in obstacle for cruise or stop [s] max_prediction_time_for_collision_check : 20.0 # prediction time to check collision between obstacle and ego slow_down: @@ -187,7 +187,7 @@ static: min_lat_margin: 0.2 max_lat_margin: 1.0 - min_ego_velocity: 2.0 + min_ego_velocity: 4.0 max_ego_velocity: 8.0 moving_object_speed_threshold: 0.5 # [m/s] how fast the object needs to move to be considered as "moving" From 1f0a5a14b319f7ff4f1bf34baef9e53e2328edf7 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Fri, 19 Jan 2024 20:41:08 +0900 Subject: [PATCH 369/446] feat(planning): add enable_all_modules_auto_mode argument to launch files for planning modules (#798) * Add auto mode setting for all modules Signed-off-by: kyoichi-sugahara --- autoware_launch/launch/autoware.launch.xml | 3 +++ .../launch/components/tier4_planning_component.launch.xml | 2 ++ autoware_launch/launch/planning_simulator.launch.xml | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index 80822d0146..64bdf47c72 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -44,6 +44,8 @@ + + @@ -103,6 +105,7 @@ + diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 4711f4b7f0..4e65c30c02 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -2,12 +2,14 @@ + + diff --git a/autoware_launch/launch/planning_simulator.launch.xml b/autoware_launch/launch/planning_simulator.launch.xml index 28a0f0e347..030299f5af 100644 --- a/autoware_launch/launch/planning_simulator.launch.xml +++ b/autoware_launch/launch/planning_simulator.launch.xml @@ -30,6 +30,8 @@ + + @@ -63,6 +65,8 @@ + + From 765cafd6df77214d8bf6d6262bef0adf70e7f19a Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Sat, 20 Jan 2024 18:22:39 +0900 Subject: [PATCH 370/446] chore(pointcloud_container): move glog_component to autoware_launch (#805) --- autoware_launch/launch/pointcloud_container.launch.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/autoware_launch/launch/pointcloud_container.launch.py b/autoware_launch/launch/pointcloud_container.launch.py index dfe9191d3c..650e555e27 100644 --- a/autoware_launch/launch/pointcloud_container.launch.py +++ b/autoware_launch/launch/pointcloud_container.launch.py @@ -19,6 +19,7 @@ from launch.conditions import UnlessCondition from launch.substitutions import LaunchConfiguration from launch_ros.actions import ComposableNodeContainer +from launch_ros.descriptions import ComposableNode def generate_launch_description(): @@ -37,12 +38,19 @@ def add_launch_arg(name: str, default_value=None): condition=IfCondition(LaunchConfiguration("use_multithread")), ) + glog_component = ComposableNode( + package="glog_component", + plugin="GlogComponent", + name="glog_component", + namespace="pointcloud_container", + ) + pointcloud_container = ComposableNodeContainer( name=LaunchConfiguration("container_name"), namespace="/", package="rclcpp_components", executable=LaunchConfiguration("container_executable"), - composable_node_descriptions=[], + composable_node_descriptions=[glog_component], output="both", ) From 873f15457b55badf864e2f1cea0413f13099fbe5 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Sun, 21 Jan 2024 14:02:49 +0900 Subject: [PATCH 371/446] feat(goal_planner): expand pull over lanes for detection area of path generation collision check (#808) Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 06fe74e3b7..d03efa405f 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -38,6 +38,7 @@ object_recognition_collision_check_margin: 0.6 # this should be larger than `surround_check_distance` of surround_obstacle_checker object_recognition_collision_check_max_extra_stopping_margin: 1.0 th_moving_object_velocity: 1.0 + detection_bound_offset: 15.0 # pull over pull_over: From 88ee8de117a830a3ca2acd2004d7e7a08e7f154c Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 22 Jan 2024 11:08:17 +0900 Subject: [PATCH 372/446] chore(intersection): align param to robotaxi (#809) --- .../behavior_velocity_planner/intersection.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 108e021240..238d40e7ad 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -67,7 +67,7 @@ occupied_min: 58 denoise_kernel: 1.0 attention_lane_crop_curvature_threshold: 0.25 - attention_lane_curvature_calculation_ds: 0.5 + attention_lane_curvature_calculation_ds: 0.6 creep_during_peeking: enable: false creep_velocity: 0.8333 From de1ba7cb4eb1ebee7abf884c7795c4091e836097 Mon Sep 17 00:00:00 2001 From: Tomohito ANDO Date: Mon, 22 Jan 2024 14:12:02 +0900 Subject: [PATCH 373/446] refactor(run_out): reorganize the parameter (#784) * chore(run_out): reorganize the parameter Signed-off-by: Tomohito Ando * style(pre-commit): autofix --------- Signed-off-by: Tomohito Ando Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../run_out.param.yaml | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml index 86bcf34382..196f7c6296 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/run_out.param.yaml @@ -3,7 +3,7 @@ run_out: detection_method: "Object" # [-] candidate: Object, ObjectWithoutPath, Points use_partition_lanelet: true # [-] whether to use partition lanelet map data - suppress_on_crosswalk: true # [-] whether to suppress on crosswalk lanelet: + suppress_on_crosswalk: true # [-] whether to suppress on crosswalk lanelet specify_decel_jerk: true # [-] whether to specify jerk when ego decelerates stop_margin: 2.5 # [m] the vehicle decelerates to be able to stop with this margin passing_margin: 1.1 # [m] the vehicle begins to accelerate if the vehicle's front in predicted position is ahead of the obstacle + this margin @@ -12,15 +12,7 @@ detection_span: 1.0 # [m] calculate collision with this span to reduce calculation time min_vel_ego_kmph: 3.6 # [km/h] min velocity to calculate time to collision - detection_area: - margin_behind: 0.5 # [m] ahead margin for detection area length - margin_ahead: 1.0 # [m] behind margin for detection area length - - # This area uses points not filtered by vector map to ensure safety - mandatory_area: - decel_jerk: -1.2 # [m/s^3] deceleration jerk for obstacles in this area - - # parameter to create abstracted dynamic obstacles + # Parameter to create abstracted dynamic obstacles dynamic_obstacle: use_mandatory_area: false # [-] whether to use mandatory detection area assume_fixed_velocity: @@ -34,26 +26,42 @@ time_step: 0.5 # [sec] time step for each path step. used for creating dynamic obstacles from points or objects without path points_interval: 0.1 # [m] divide obstacle points into groups with this interval, and detect only lateral nearest point. used only for Points method - # approach if ego has stopped in the front of the obstacle for a certain amount of time - approaching: - enable: false - margin: 0.0 # [m] distance on how close ego approaches the obstacle - limit_vel_kmph: 3.0 # [km/h] limit velocity for approaching after stopping - - # parameters for the change of state. used only when approaching is enabled - state: - stop_thresh: 0.01 # [m/s] threshold to decide if ego is stopping - stop_time_thresh: 3.0 # [sec] threshold for stopping time to transit to approaching state - disable_approach_dist: 3.0 # [m] end the approaching state if distance to the obstacle is longer than this value - keep_approach_duration: 1.0 # [sec] keep approach state for this duration to avoid chattering of state transition - - # parameter to avoid sudden stopping + # Parameter to prevent sudden stopping. + # If the deceleration jerk and acceleration exceed this value upon inserting a stop point, + # the deceleration will be moderated to stay under this value. slow_down_limit: enable: false max_jerk: -0.7 # [m/s^3] minimum jerk deceleration for safe brake. max_acc : -2.0 # [m/s^2] minimum accel deceleration for safe brake. - # prevent abrupt stops caused by false positives in perception + # Parameter to prevent abrupt stops caused by false positives in perception ignore_momentary_detection: enable: true time_threshold: 0.15 # [sec] ignores detections that persist for less than this duration + + # Typically used when the "detection_method" is set to ObjectWithoutPath or Points + # Approach if the ego has stopped in front of the obstacle for a certain period + # This avoids the issue of the ego continuously stopping in front of the obstacle + approaching: + enable: false + margin: 0.0 # [m] distance on how close ego approaches the obstacle + limit_vel_kmph: 3.0 # [km/h] limit velocity for approaching after stopping + # Parameters for state change when "approaching" is enabled + state: + stop_thresh: 0.01 # [m/s] threshold to decide if ego is stopping + stop_time_thresh: 3.0 # [sec] threshold for stopping time to transit to approaching state + disable_approach_dist: 3.0 # [m] end the approaching state if distance to the obstacle is longer than this value + keep_approach_duration: 1.0 # [sec] keep approach state for this duration to avoid chattering of state transition + + # Only used when "detection_method" is set to Points + # Filters points by the detection area polygon to reduce computational cost + # The detection area is calculated based on the current velocity and acceleration and deceleration jerk constraints + detection_area: + margin_behind: 0.5 # [m] ahead margin for detection area length + margin_ahead: 1.0 # [m] behind margin for detection area length + + # Only used when "detection_method" is set to Points + # Points in this area are detected even if it is in the no obstacle segmentation area + # The mandatory area is calculated based on the current velocity and acceleration and "decel_jerk" constraints + mandatory_area: + decel_jerk: -1.2 # [m/s^3] deceleration jerk for obstacles in this area From 000527bde7b1a4e4d643591d031818169802188d Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:36:40 +0900 Subject: [PATCH 374/446] chore(detection_by_tracker): organize parameter structure (#811) Signed-off-by: kminoda --- .../detection_by_tracker.param.yaml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml b/autoware_launch/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml index 6957040506..fac8687c5e 100644 --- a/autoware_launch/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml @@ -1,11 +1,10 @@ /**: ros__parameters: - tracker_ignore_label: - UNKNOWN : true - CAR : false - TRUCK : false - BUS : false - TRAILER : false - MOTORCYCLE : false - BICYCLE : false - PEDESTRIAN : false + tracker_ignore_label.UNKNOWN : true + tracker_ignore_label.CAR : false + tracker_ignore_label.TRUCK : false + tracker_ignore_label.BUS : false + tracker_ignore_label.TRAILER : false + tracker_ignore_label.MOTORCYCLE : false + tracker_ignore_label.BICYCLE : false + tracker_ignore_label.PEDESTRIAN : false From f5a287566f49e7c7302abbb994e86bb8f2cd5710 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Tue, 23 Jan 2024 11:52:16 +0900 Subject: [PATCH 375/446] fix(vehicle_launch): add raw_vehicle_cmd_converter parameter file (#812) Signed-off-by: Fumiya Watanabe --- .../raw_vehicle_cmd_converter.param.yaml | 25 +++++++++++++++++++ autoware_launch/launch/autoware.launch.xml | 1 + 2 files changed, 26 insertions(+) create mode 100644 autoware_launch/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml diff --git a/autoware_launch/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml b/autoware_launch/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml new file mode 100644 index 0000000000..f6676bdbe7 --- /dev/null +++ b/autoware_launch/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml @@ -0,0 +1,25 @@ +/**: + ros__parameters: + convert_accel_cmd: true + convert_brake_cmd: true + convert_steer_cmd: false + use_steer_ff: true + use_steer_fb: true + is_debugging: false + max_throttle: 0.4 + max_brake: 0.8 + max_steer: 10.0 + min_steer: -10.0 + steer_pid: + kp: 150.0 + ki: 15.0 + kd: 0.0 + max: 8.0 + min: -8.0 + max_p: 8.0 + min_p: -8.0 + max_i: 8.0 + min_i: -8.0 + max_d: 0.0 + min_d: 0.0 + invalid_integration_decay: 0.97 diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index 64bdf47c72..a2cd12b2c1 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -71,6 +71,7 @@ + From 8b818d4ddbe2e5ad16d3f2f4b20bdd08e3694963 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 24 Jan 2024 09:55:38 +0900 Subject: [PATCH 376/446] fix(avoidance): decrease velocity threshold for avoidance target objects (#817) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index d540a73940..dfe62a2487 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -38,7 +38,7 @@ use_conservative_buffer_longitudinal: true # [-] When set to true, the base_link2front is added to the longitudinal buffer before avoidance. truck: execute_num: 1 - moving_speed_threshold: 2.0 # 7.2km/h + moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 2.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.5 @@ -48,7 +48,7 @@ use_conservative_buffer_longitudinal: true bus: execute_num: 1 - moving_speed_threshold: 2.0 # 7.2km/h + moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 2.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.5 @@ -58,7 +58,7 @@ use_conservative_buffer_longitudinal: true trailer: execute_num: 1 - moving_speed_threshold: 2.0 # 7.2km/h + moving_speed_threshold: 1.0 # 3.6km/h moving_time_threshold: 2.0 max_expand_ratio: 0.0 envelope_buffer_margin: 0.5 From b58eff29ce9fa8afa8b35bc9e7dde8492cda2f23 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Thu, 25 Jan 2024 14:40:00 +0900 Subject: [PATCH 377/446] fix(ndt_scan_matcher): fix type of critical_upper_bound_exe_time_ms (#819) * fix type Signed-off-by: Yamato Ando * fix order Signed-off-by: Yamato Ando --------- Signed-off-by: Yamato Ando --- .../config/localization/ndt_scan_matcher.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index 9bc62d3f91..a5a4941bfe 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -54,6 +54,9 @@ # Tolerance of distance difference between two initial poses used for linear interpolation. [m] initial_pose_distance_tolerance_m: 10.0 + # The execution time which means probably NDT cannot matches scans properly. [ms] + critical_upper_bound_exe_time_ms: 100.0 + # Number of threads used for parallel computing num_threads: 4 @@ -98,6 +101,3 @@ # If lidar_point.z - base_link.z <= this threshold , the point will be removed z_margin_for_ground_removal: 0.8 - - # The execution time which means probably NDT cannot matches scans properly. [ms] - critical_upper_bound_exe_time_ms: 100 From 3e4dc2455f69a327406999c57e09f3d9db6e1977 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Thu, 25 Jan 2024 14:51:43 +0900 Subject: [PATCH 378/446] feat(start_planner): change collision_check_distance_from_end to shorten back distance (#757)" (#813) Revert "feat(start_planner): revert change collision_check_distance_from_end to shorten back distance (#757)" This reverts commit 96f2f18d23ba829804415135b241065ecf53b13d. --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index ddfc8fab52..27ce630f1a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -6,7 +6,7 @@ th_stopped_velocity: 0.01 th_stopped_time: 1.0 collision_check_margins: [2.0, 1.0, 0.5, 0.1] - collision_check_distance_from_end: 1.0 + collision_check_distance_from_end: -10.0 collision_check_margin_from_front_object: 5.0 th_moving_object_velocity: 1.0 th_distance_to_middle_of_the_road: 0.5 From 7df85a85c7eba27cc1b96ceb58304d8515c7b9ee Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Thu, 25 Jan 2024 15:28:34 +0900 Subject: [PATCH 379/446] feat(crosswalk)!: improve stuck prevention on crosswalk (#816) * change a param definition Signed-off-by: Yuki Takagi --- .../behavior_velocity_planner/crosswalk.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 72102ed908..921b728a34 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -30,7 +30,7 @@ enable_stuck_check_in_intersection: false # [-] flag to enable stuck vehicle checking for crosswalk which is in intersection stuck_vehicle_velocity: 1.0 # [m/s] threshold velocity whether other vehicles are assumed to be stuck or not. max_stuck_vehicle_lateral_offset: 2.0 # [m] The feature does not handle the vehicles farther than this value to the ego's path. - stuck_vehicle_attention_range: 10.0 # [m] Ego does not enter the crosswalk area if a stuck vehicle exists within this distance from the end of the crosswalk on the ego's path. + required_clearance: 6.0 # [m] clearance to be secured between the ego and the ahead vehicle min_acc: -1.0 # min acceleration [m/ss] min_jerk: -1.0 # min jerk [m/sss] max_jerk: 1.0 # max jerk [m/sss] From 626b48b79206a2f5cc12baaeb72d6c0027aa026a Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Fri, 26 Jan 2024 12:50:17 +0900 Subject: [PATCH 380/446] fix(tracking_object_merger): fix unknown is not associated problem (#825) fix: unknown is not associated problem Signed-off-by: yoshiri --- .../data_association_matrix.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/data_association_matrix.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/data_association_matrix.param.yaml index 702809b3ce..c232dbde40 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/data_association_matrix.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/data_association_matrix.param.yaml @@ -3,7 +3,7 @@ lidar-lidar: can_assign_matrix: #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN - [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + [1, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN 0, 1, 1, 1, 1, 0, 0, 0, #CAR 0, 1, 1, 1, 1, 0, 0, 0, #TRUCK 0, 1, 1, 1, 1, 0, 0, 0, #BUS @@ -59,7 +59,7 @@ lidar-radar: can_assign_matrix: #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN - [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + [1, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN 0, 1, 1, 1, 1, 0, 0, 0, #CAR 0, 1, 1, 1, 1, 0, 0, 0, #TRUCK 0, 1, 1, 1, 1, 0, 0, 0, #BUS @@ -115,7 +115,7 @@ radar-radar: can_assign_matrix: #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN - [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + [1, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN 0, 1, 1, 1, 1, 0, 0, 0, #CAR 0, 1, 1, 1, 1, 0, 0, 0, #TRUCK 0, 1, 1, 1, 1, 0, 0, 0, #BUS From 8ec96492210b97c3df109ceb2f0202b159384a41 Mon Sep 17 00:00:00 2001 From: Motz <83898149+Motsu-san@users.noreply.github.com> Date: Fri, 26 Jan 2024 13:44:06 +0900 Subject: [PATCH 381/446] refactor(system_error_monitor): rename localization_accuracy (#605) refactor: Rename localization_accuracy to localization_error_ellipse Signed-off-by: Motsu-san --- autoware_launch/config/simulator/fault_injection.param.yaml | 2 +- .../system_error_monitor/system_error_monitor.awsim.param.yaml | 2 +- .../system/system_error_monitor/system_error_monitor.param.yaml | 2 +- .../system_error_monitor.planning_simulation.param.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/simulator/fault_injection.param.yaml b/autoware_launch/config/simulator/fault_injection.param.yaml index 1a57b852f7..ac02442d70 100644 --- a/autoware_launch/config/simulator/fault_injection.param.yaml +++ b/autoware_launch/config/simulator/fault_injection.param.yaml @@ -4,7 +4,7 @@ vehicle_is_out_of_lane: "lane_departure" trajectory_deviation_is_high: "trajectory_deviation" localization_matching_score_is_low: "ndt_scan_matcher" - localization_accuracy_is_low: "localization_accuracy" + localization_accuracy_is_low: "localization_error_ellipse" map_version_is_different: "map_version" trajectory_is_invalid: "trajectory_point_validation" cpu_temperature_is_high: "CPU Temperature" diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml index 2f98f9d0e2..69e3831591 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml @@ -23,7 +23,7 @@ /autoware/localization/node_alive_monitoring: default /autoware/localization/performance_monitoring/matching_score: { sf_at: "warn", lf_at: "none", spf_at: "none" } - /autoware/localization/performance_monitoring/localization_accuracy: { sf_at: "warn", lf_at: "none", spf_at: "none" } + /autoware/localization/performance_monitoring/localization_error_ellipse: { sf_at: "warn", lf_at: "none", spf_at: "none" } /autoware/map/node_alive_monitoring: default diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml index 6a763eace4..d8229425af 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml @@ -23,7 +23,7 @@ /autoware/localization/node_alive_monitoring: default /autoware/localization/performance_monitoring/matching_score: { sf_at: "warn", lf_at: "none", spf_at: "none" } - /autoware/localization/performance_monitoring/localization_accuracy: default + /autoware/localization/performance_monitoring/localization_error_ellipse: default /autoware/localization/performance_monitoring/sensor_fusion_status: { sf_at: "error", lf_at: "none", spf_at: "none" } /autoware/map/node_alive_monitoring: default diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml index 3fd6264376..deddf33b34 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.planning_simulation.param.yaml @@ -24,7 +24,7 @@ /autoware/localization/node_alive_monitoring: default # /autoware/localization/performance_monitoring/matching_score: { sf_at: "warn", lf_at: "none", spf_at: "none" } - # /autoware/localization/performance_monitoring/localization_accuracy: default + # /autoware/localization/performance_monitoring/localization_error_ellipse: default /autoware/map/node_alive_monitoring: default From 402bb3fd04e988f27446445c231a8239470c7ed6 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 26 Jan 2024 15:55:55 +0900 Subject: [PATCH 382/446] feat(avoidance): add new flag to use freespace in avoidance module (#818) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index dfe62a2487..d1da7b7730 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -19,6 +19,7 @@ use_opposite_lane: true use_intersection_areas: true use_hatched_road_markings: true + use_freespace_areas: true # for debug publish_debug_marker: false From 3f1c9053933d47fc23cfeee9cecb5ca8e5ec1206 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 26 Jan 2024 21:09:57 +0900 Subject: [PATCH 383/446] fix(avoidance): change return dead line param (#814) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index d1da7b7730..52724cdda0 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -219,7 +219,7 @@ return_dead_line: goal: enable: true # [-] - buffer: 30.0 # [m] + buffer: 3.0 # [m] traffic_light: enable: true # [-] buffer: 3.0 # [m] From 726210f6d8dc15e06ea5278172fd7ef36efdf68c Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 29 Jan 2024 10:08:06 +0900 Subject: [PATCH 384/446] feat(intersection): publish and visualize the reason for dangerous situation to blame past detection fault retrospectively (#828) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 238d40e7ad..86bcf801f4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -59,6 +59,8 @@ object_expected_deceleration: 2.0 ignore_on_red_traffic_light: object_margin_to_path: 2.0 + avoid_collision_by_acceleration: + object_time_margin_to_collision_point: 4.0 occlusion: enable: false From 64b2990706a21c657f383502899b0669c0885203 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Mon, 29 Jan 2024 13:03:11 +0900 Subject: [PATCH 385/446] chore(object_range_splitter): rework parameters (#821) * chore(object_range_splitter): add config Signed-off-by: kminoda * revert change Signed-off-by: kminoda --------- Signed-off-by: kminoda --- .../object_range_splitter_radar.param.yaml | 3 +++ .../object_range_splitter_radar_fusion.param.yaml | 3 +++ .../components/tier4_perception_component.launch.xml | 8 ++++++++ 3 files changed, 14 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/object_range_splitter/object_range_splitter_radar.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/object_range_splitter/object_range_splitter_radar_fusion.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/object_range_splitter/object_range_splitter_radar.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_range_splitter/object_range_splitter_radar.param.yaml new file mode 100644 index 0000000000..ed1ce176ed --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/object_range_splitter/object_range_splitter_radar.param.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + split_range: 80.0 diff --git a/autoware_launch/config/perception/object_recognition/detection/object_range_splitter/object_range_splitter_radar_fusion.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_range_splitter/object_range_splitter_radar_fusion.param.yaml new file mode 100644 index 0000000000..a8b2562883 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/object_range_splitter/object_range_splitter_radar_fusion.param.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + split_range: 70.0 diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 939792af84..8636141685 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -88,6 +88,14 @@ value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/clustering/radar_object_clustering.param.yaml" /> + + Date: Mon, 29 Jan 2024 16:25:18 +0900 Subject: [PATCH 386/446] refactor(ndt_scan_matcher): rename de-grounded (#827) * refactor(ndt_scan_matcher): rename de-grounded Signed-off-by: Yamato Ando * fix value Signed-off-by: Yamato Ando --------- Signed-off-by: Yamato Ando --- .../config/localization/ndt_scan_matcher.param.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index a5a4941bfe..d4c49b7e8e 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -95,9 +95,8 @@ # Radius of input LiDAR range (used for diagnostics of dynamic map loading) lidar_radius: 100.0 - # cspell: ignore degrounded - # A flag for using scan matching score based on de-grounded LiDAR scan - estimate_scores_for_degrounded_scan: false + # A flag for using scan matching score based on no ground LiDAR scan + estimate_scores_by_no_ground_points: false # If lidar_point.z - base_link.z <= this threshold , the point will be removed z_margin_for_ground_removal: 0.8 From 7cf64d8b9efedf684a3de1c4655d1cf80b8e4e9b Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Mon, 29 Jan 2024 17:16:45 +0900 Subject: [PATCH 387/446] fix(tracking_object_merger): fix bug and rework parameters (#823) fix(tracking_object_merger): fix bug and use param file Signed-off-by: kminoda --- .../tracking_object_merger/decorative_tracker_merger.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger.param.yaml index 13369d5422..e4ea2becd7 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/tracking_object_merger/decorative_tracker_merger.param.yaml @@ -23,4 +23,4 @@ # logging enable_logging: false - log_file_path: "/tmp/decorative_tracker_merger.log" + logging_file_path: "/tmp/decorative_tracker_merger.log" From 864b9270979a07ba65cd5e054854b3554fe33440 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Tue, 30 Jan 2024 16:02:40 +0900 Subject: [PATCH 388/446] refactor(tier4_map_lcomponent): use map.launch.xml instead of map.launch.py (#826) Signed-off-by: Yamato Ando --- .../launch/components/tier4_map_component.launch.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/autoware_launch/launch/components/tier4_map_component.launch.xml b/autoware_launch/launch/components/tier4_map_component.launch.xml index 3062a6cedd..187c63b7c7 100644 --- a/autoware_launch/launch/components/tier4_map_component.launch.xml +++ b/autoware_launch/launch/components/tier4_map_component.launch.xml @@ -1,8 +1,10 @@ - - + + + + From 7837d1f039f2639e5e9ec36102a42709387fa5ef Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Wed, 31 Jan 2024 10:05:51 +0900 Subject: [PATCH 389/446] feat(start_planner): add collision check distances for shift and geometric pull out (#832) * Add collision check distances for shift and geometric pull out Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../start_planner/start_planner.param.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 27ce630f1a..154c4b1e0b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -14,6 +14,7 @@ # shift pull out enable_shift_pull_out: true check_shift_path_lane_departure: true + shift_collision_check_distance_from_end: -10.0 minimum_shift_pull_out_distance: 0.0 deceleration_interval: 15.0 lateral_jerk: 0.5 @@ -23,6 +24,7 @@ maximum_curvature: 0.07 # geometric pull out enable_geometric_pull_out: true + geometric_collision_check_distance_from_end: 0.0 divide_pull_out_path: true geometric_pull_out_velocity: 1.0 arc_path_interval: 1.0 From f3caadeb2b81fdff8c47aae1547a23bffcd6a01b Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Wed, 31 Jan 2024 19:28:58 +0900 Subject: [PATCH 390/446] chore(ground_segmentation): add default params (#831) Signed-off-by: badai-nguyen Co-authored-by: kminoda <44218668+kminoda@users.noreply.github.com> --- .../ground_segmentation/ground_segmentation.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/perception/obstacle_segmentation/ground_segmentation/ground_segmentation.param.yaml b/autoware_launch/config/perception/obstacle_segmentation/ground_segmentation/ground_segmentation.param.yaml index b367fef386..4c58c066ed 100644 --- a/autoware_launch/config/perception/obstacle_segmentation/ground_segmentation/ground_segmentation.param.yaml +++ b/autoware_launch/config/perception/obstacle_segmentation/ground_segmentation/ground_segmentation.param.yaml @@ -30,3 +30,6 @@ detection_range_z_max: 2.5 elevation_grid_mode: true use_recheck_ground_cluster: true + low_priority_region_x: -20.0 + center_pcl_shift: 0.0 + radial_divider_angle_deg: 1.0 From 862cc696ca5eb63c3d7cf40c0a0579b023780fac Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Wed, 31 Jan 2024 20:55:39 +0900 Subject: [PATCH 391/446] feat(autoware_launch): set default vehicle/sensor models to sample ones (#768) Signed-off-by: Vincent Richard --- autoware_launch/launch/autoware.launch.xml | 4 ++-- autoware_launch/launch/e2e_simulator.launch.xml | 4 ++-- autoware_launch/launch/logging_simulator.launch.xml | 4 ++-- autoware_launch/launch/planning_simulator.launch.xml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index a2cd12b2c1..7de7741be2 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -2,8 +2,8 @@ - - + + diff --git a/autoware_launch/launch/e2e_simulator.launch.xml b/autoware_launch/launch/e2e_simulator.launch.xml index d920584c6c..4d978dc3fa 100644 --- a/autoware_launch/launch/e2e_simulator.launch.xml +++ b/autoware_launch/launch/e2e_simulator.launch.xml @@ -2,8 +2,8 @@ - - + + diff --git a/autoware_launch/launch/logging_simulator.launch.xml b/autoware_launch/launch/logging_simulator.launch.xml index a2b66e91ed..57cbc38af6 100644 --- a/autoware_launch/launch/logging_simulator.launch.xml +++ b/autoware_launch/launch/logging_simulator.launch.xml @@ -2,8 +2,8 @@ - - + + diff --git a/autoware_launch/launch/planning_simulator.launch.xml b/autoware_launch/launch/planning_simulator.launch.xml index 030299f5af..d19c7308f0 100644 --- a/autoware_launch/launch/planning_simulator.launch.xml +++ b/autoware_launch/launch/planning_simulator.launch.xml @@ -2,8 +2,8 @@ - - + + From b7880fea1a03e86874a348ea6511024b08e3168c Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 31 Jan 2024 22:04:14 +0900 Subject: [PATCH 392/446] chore(object_velocity_splitter): rework parameters (#820) chore(object_velocity_splitter): add config Signed-off-by: kminoda --- .../object_velocity_splitter_radar.param.yaml | 3 +++ .../object_velocity_splitter_radar_fusion.param.yaml | 3 +++ .../components/tier4_perception_component.launch.xml | 8 ++++++++ 3 files changed, 14 insertions(+) create mode 100644 autoware_launch/config/perception/object_recognition/detection/object_velocity_splitter/object_velocity_splitter_radar.param.yaml create mode 100644 autoware_launch/config/perception/object_recognition/detection/object_velocity_splitter/object_velocity_splitter_radar_fusion.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/object_velocity_splitter/object_velocity_splitter_radar.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_velocity_splitter/object_velocity_splitter_radar.param.yaml new file mode 100644 index 0000000000..c6351bea72 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/object_velocity_splitter/object_velocity_splitter_radar.param.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + velocity_threshold: 5.5 diff --git a/autoware_launch/config/perception/object_recognition/detection/object_velocity_splitter/object_velocity_splitter_radar_fusion.param.yaml b/autoware_launch/config/perception/object_recognition/detection/object_velocity_splitter/object_velocity_splitter_radar_fusion.param.yaml new file mode 100644 index 0000000000..6a40ac9616 --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/object_velocity_splitter/object_velocity_splitter_radar_fusion.param.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + velocity_threshold: 4.5 diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 8636141685..2940bd614e 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -88,6 +88,14 @@ value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/clustering/radar_object_clustering.param.yaml" /> + + Date: Thu, 1 Feb 2024 10:41:42 +0900 Subject: [PATCH 393/446] refactor(map_projection_loader): rework parameters (#839) * Added launch argument map_projection_loader_param_path to tier4_map_component.launch.xml Copied map_projection_loader.launch.xml from universe Signed-off-by: TaikiYamada4 * style(pre-commit): autofix --------- Signed-off-by: TaikiYamada4 Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- autoware_launch/config/map/map_projection_loader.param.yaml | 4 ++++ .../launch/components/tier4_map_component.launch.xml | 1 + 2 files changed, 5 insertions(+) create mode 100644 autoware_launch/config/map/map_projection_loader.param.yaml diff --git a/autoware_launch/config/map/map_projection_loader.param.yaml b/autoware_launch/config/map/map_projection_loader.param.yaml new file mode 100644 index 0000000000..6ec300309a --- /dev/null +++ b/autoware_launch/config/map/map_projection_loader.param.yaml @@ -0,0 +1,4 @@ +/**: + ros__parameters: + map_projector_info_path: $(var map_projector_info_path) + lanelet2_map_path: $(var lanelet2_map_path) diff --git a/autoware_launch/launch/components/tier4_map_component.launch.xml b/autoware_launch/launch/components/tier4_map_component.launch.xml index 187c63b7c7..455b848c63 100644 --- a/autoware_launch/launch/components/tier4_map_component.launch.xml +++ b/autoware_launch/launch/components/tier4_map_component.launch.xml @@ -8,5 +8,6 @@ + From ec4491819c77dc751c06f99b5fbeb5264d4e020b Mon Sep 17 00:00:00 2001 From: Satoshi Tanaka <16330533+scepter914@users.noreply.github.com> Date: Thu, 1 Feb 2024 13:00:35 +0900 Subject: [PATCH 394/446] fix(autoware_launch): add config file (#829) * fix(autoware_launch): add config file Signed-off-by: scepter914 * style(pre-commit): autofix --------- Signed-off-by: scepter914 Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../radar_crossing_objects_noise_filter.param.yaml | 4 ++++ .../launch/components/tier4_perception_component.launch.xml | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 autoware_launch/config/perception/object_recognition/detection/radar_crossing_objects_noise_filter/radar_crossing_objects_noise_filter.param.yaml diff --git a/autoware_launch/config/perception/object_recognition/detection/radar_crossing_objects_noise_filter/radar_crossing_objects_noise_filter.param.yaml b/autoware_launch/config/perception/object_recognition/detection/radar_crossing_objects_noise_filter/radar_crossing_objects_noise_filter.param.yaml new file mode 100644 index 0000000000..f52edf641f --- /dev/null +++ b/autoware_launch/config/perception/object_recognition/detection/radar_crossing_objects_noise_filter/radar_crossing_objects_noise_filter.param.yaml @@ -0,0 +1,4 @@ +/**: + ros__parameters: + angle_threshold: 1.2210 + velocity_threshold: 1.5 diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 2940bd614e..a84911a414 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -80,7 +80,11 @@ value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/detection/detection_by_tracker/detection_by_tracker.param.yaml" /> + Date: Thu, 1 Feb 2024 16:28:11 +0900 Subject: [PATCH 395/446] refactor(ndt_scan_matcher): hierarchize parameters (#830) * refactor(ndt_scan_matcher): hierarchize parameters Signed-off-by: Yamato Ando * add new lines Signed-off-by: Yamato Ando --------- Signed-off-by: Yamato Ando --- .../localization/ndt_scan_matcher.param.yaml | 158 ++++++++++-------- 1 file changed, 85 insertions(+), 73 deletions(-) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml index d4c49b7e8e..144449ce75 100644 --- a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml +++ b/autoware_launch/config/localization/ndt_scan_matcher.param.yaml @@ -1,102 +1,114 @@ /**: ros__parameters: - # Vehicle reference frame - base_frame: "base_link" + frame: + # Vehicle reference frame + base_frame: "base_link" - # NDT reference frame - ndt_base_frame: "ndt_base_link" + # NDT reference frame + ndt_base_frame: "ndt_base_link" - # map frame - map_frame: "map" + # Map frame + map_frame: "map" - # Subscriber queue size - input_sensor_points_queue_size: 1 - # The maximum difference between two consecutive - # transformations in order to consider convergence - trans_epsilon: 0.01 + ndt: + # The maximum difference between two consecutive + # transformations in order to consider convergence + trans_epsilon: 0.01 - # The newton line search maximum step length - step_size: 0.1 + # The newton line search maximum step length + step_size: 0.1 - # The ND voxel grid resolution - resolution: 2.0 + # The ND voxel grid resolution + resolution: 2.0 - # The number of iterations required to calculate alignment - max_iterations: 30 + # The number of iterations required to calculate alignment + max_iterations: 30 - # Converged param type - # 0=TRANSFORM_PROBABILITY, 1=NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD - converged_param_type: 1 + # Number of threads used for parallel computing + num_threads: 4 - # If converged_param_type is 0 - # Threshold for deciding whether to trust the estimation result - converged_param_transform_probability: 3.0 + regularization: + enable: false - # If converged_param_type is 1 - # Threshold for deciding whether to trust the estimation result - converged_param_nearest_voxel_transformation_likelihood: 2.3 + # Regularization scale factor + scale_factor: 0.01 - # The number of particles to estimate initial pose - initial_estimate_particles_num: 200 - # The number of initial random trials in the TPE (Tree-Structured Parzen Estimator). - # This value should be equal to or less than 'initial_estimate_particles_num' and more than 0. - # If it is equal to 'initial_estimate_particles_num', the search will be the same as a full random search. - n_startup_trials: 20 + initial_pose_estimation: + # The number of particles to estimate initial pose + particles_num: 200 - # Tolerance of timestamp difference between current time and sensor pointcloud. [sec] - lidar_topic_timeout_sec: 1.0 + # The number of initial random trials in the TPE (Tree-Structured Parzen Estimator). + # This value should be equal to or less than 'initial_estimate_particles_num' and more than 0. + # If it is equal to 'initial_estimate_particles_num', the search will be the same as a full random search. + n_startup_trials: 20 - # Tolerance of timestamp difference between initial_pose and sensor pointcloud. [sec] - initial_pose_timeout_sec: 1.0 - # Tolerance of distance difference between two initial poses used for linear interpolation. [m] - initial_pose_distance_tolerance_m: 10.0 + validation: + # Tolerance of timestamp difference between current time and sensor pointcloud. [sec] + lidar_topic_timeout_sec: 1.0 - # The execution time which means probably NDT cannot matches scans properly. [ms] - critical_upper_bound_exe_time_ms: 100.0 + # Tolerance of timestamp difference between initial_pose and sensor pointcloud. [sec] + initial_pose_timeout_sec: 1.0 - # Number of threads used for parallel computing - num_threads: 4 + # Tolerance of distance difference between two initial poses used for linear interpolation. [m] + initial_pose_distance_tolerance_m: 10.0 - # The covariance of output pose - # Note that this covariance matrix is empirically derived - output_pose_covariance: - [ - 0.0225, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0225, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0225, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.000625, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.000625, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.000625, - ] + # The execution time which means probably NDT cannot matches scans properly. [ms] + critical_upper_bound_exe_time_ms: 100.0 - # 2D Real-time covariance estimation with multiple searches (output_pose_covariance is the minimum value) - use_covariance_estimation: false - # Offset arrangement in covariance estimation [m] - # initial_pose_offset_model_x & initial_pose_offset_model_y must have the same number of elements. - initial_pose_offset_model_x: [0.0, 0.0, 0.5, -0.5, 1.0, -1.0] - initial_pose_offset_model_y: [0.5, -0.5, 0.0, 0.0, 0.0, 0.0] + score_estimation: + # Converged param type + # 0=TRANSFORM_PROBABILITY, 1=NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD + converged_param_type: 1 - # Regularization switch - regularization_enabled: false + # If converged_param_type is 0 + # Threshold for deciding whether to trust the estimation result + converged_param_transform_probability: 3.0 - # Regularization scale factor - regularization_scale_factor: 0.01 + # If converged_param_type is 1 + # Threshold for deciding whether to trust the estimation result + converged_param_nearest_voxel_transformation_likelihood: 2.3 - # Dynamic map loading distance - dynamic_map_loading_update_distance: 20.0 + # Scan matching score based on no ground LiDAR scan + no_ground_points: + enable: false - # Dynamic map loading loading radius - dynamic_map_loading_map_radius: 150.0 + # If lidar_point.z - base_link.z <= this threshold , the point will be removed + z_margin_for_ground_removal: 0.8 - # Radius of input LiDAR range (used for diagnostics of dynamic map loading) - lidar_radius: 100.0 - # A flag for using scan matching score based on no ground LiDAR scan - estimate_scores_by_no_ground_points: false + covariance: + # The covariance of output pose + # Note that this covariance matrix is empirically derived + output_pose_covariance: + [ + 0.0225, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0225, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0225, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.000625, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.000625, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.000625, + ] - # If lidar_point.z - base_link.z <= this threshold , the point will be removed - z_margin_for_ground_removal: 0.8 + # 2D Real-time covariance estimation with multiple searches (output_pose_covariance is the minimum value) + covariance_estimation: + enable: false + + # Offset arrangement in covariance estimation [m] + # initial_pose_offset_model_x & initial_pose_offset_model_y must have the same number of elements. + initial_pose_offset_model_x: [0.0, 0.0, 0.5, -0.5, 1.0, -1.0] + initial_pose_offset_model_y: [0.5, -0.5, 0.0, 0.0, 0.0, 0.0] + + + dynamic_map_loading: + # Dynamic map loading distance + update_distance: 20.0 + + # Dynamic map loading loading radius + map_radius: 150.0 + + # Radius of input LiDAR range (used for diagnostics of dynamic map loading) + lidar_radius: 100.0 From a72fe01df9de03dea774f89dfbf50a4063b9998f Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Thu, 1 Feb 2024 17:03:48 +0900 Subject: [PATCH 396/446] chore(twist2accel): rework parameters (#842) Added twist2accel.param.yaml Signed-off-by: Shintaro SAKODA --- autoware_launch/config/localization/twist2accel.param.yaml | 4 ++++ .../launch/components/tier4_localization_component.launch.xml | 1 + 2 files changed, 5 insertions(+) create mode 100644 autoware_launch/config/localization/twist2accel.param.yaml diff --git a/autoware_launch/config/localization/twist2accel.param.yaml b/autoware_launch/config/localization/twist2accel.param.yaml new file mode 100644 index 0000000000..e58e029248 --- /dev/null +++ b/autoware_launch/config/localization/twist2accel.param.yaml @@ -0,0 +1,4 @@ +/**: + ros__parameters: + use_odom: true + accel_lowpass_gain: 0.9 diff --git a/autoware_launch/launch/components/tier4_localization_component.launch.xml b/autoware_launch/launch/components/tier4_localization_component.launch.xml index 7ec292a381..70170a5fef 100644 --- a/autoware_launch/launch/components/tier4_localization_component.launch.xml +++ b/autoware_launch/launch/components/tier4_localization_component.launch.xml @@ -25,6 +25,7 @@ + From 14d144c3e909dda2c989ee42bed8b549c281d4c2 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Thu, 1 Feb 2024 17:43:43 +0900 Subject: [PATCH 397/446] feat(detection): add container option (#834) feat: use pointcloud_container Signed-off-by: kminoda --- .../lidar_model/detection_class_remapper.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/detection_class_remapper.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/detection_class_remapper.param.yaml index ed378ffa44..baea087c96 100644 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/detection_class_remapper.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/detection_class_remapper.param.yaml @@ -29,9 +29,9 @@ max_area_matrix: #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN [ 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #UNKNOWN - 0.000, 0.000, 36.000, 0.000, inf, 0.000, 0.000, 0.000, #CAR - 0.000, 0.000, 0.000, 0.000, inf, 0.000, 0.000, 0.000, #TRUCK - 0.000, 0.000, 0.000, 0.000, inf, 0.000, 0.000, 0.000, #BUS + 0.000, 0.000, 36.000, 0.000, 999.999, 0.000, 0.000, 0.000, #CAR + 0.000, 0.000, 0.000, 0.000, 999.999, 0.000, 0.000, 0.000, #TRUCK + 0.000, 0.000, 0.000, 0.000, 999.999, 0.000, 0.000, 0.000, #BUS 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #TRAILER 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #MOTORBIKE 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #BICYCLE From e27368b16fca69694d0b11f5dc5caed8377e770d Mon Sep 17 00:00:00 2001 From: Khalil Selyan <36904941+KhalilSelyan@users.noreply.github.com> Date: Thu, 1 Feb 2024 21:42:57 +0300 Subject: [PATCH 398/446] feat: update rviz splash and vehicle UI display (#836) Signed-off-by: KhalilSelyan --- autoware_launch/rviz/autoware.rviz | 92 ++++-------------------- autoware_launch/rviz/image/autoware.png | Bin 600002 -> 34941 bytes 2 files changed, 15 insertions(+), 77 deletions(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 064f87d3ff..4301034e74 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -58,58 +58,6 @@ Visualization Manager: Value: false - Class: rviz_common/Group Displays: - - Class: rviz_plugins/SteeringAngle - Enabled: true - Name: SteeringAngle - Scale: 17 - Text Color: 25; 255; 240 - Topic: - Depth: 5 - Durability Policy: Volatile - History Policy: Keep Last - Reliability Policy: Reliable - Value: /vehicle/status/steering_status - Value: true - Value height offset: 0 - - Class: rviz_plugins/ConsoleMeter - Enabled: true - Name: ConsoleMeter - Scale: 3 - Text Color: 25; 255; 240 - Topic: - Depth: 5 - Durability Policy: Volatile - History Policy: Keep Last - Reliability Policy: Reliable - Value: /vehicle/status/velocity_status - Value: true - Value height offset: 0 - - Class: rviz_plugins/AccelerationMeter - Enabled: false - Name: AccelerationMeter - Topic: - Depth: 5 - Durability Policy: Volatile - History Policy: Keep Last - Reliability Policy: Reliable - Value: /localization/acceleration - - Alpha: 0.999 - Class: rviz_plugins/VelocityHistory - Color Border Vel Max: 3 - Constant Color: - Color: 255; 255; 255 - Value: true - Enabled: true - Name: VelocityHistory - Scale: 0.30000001192092896 - Timeout: 10 - Topic: - Depth: 5 - Durability Policy: Volatile - History Policy: Keep Last - Reliability Policy: Reliable - Value: /vehicle/status/velocity_status - Value: true - Alpha: 0.30000001192092896 Class: rviz_default_plugins/RobotModel Collision Enabled: false @@ -296,27 +244,22 @@ Visualization Manager: Value: true Wave Color: 255; 255; 255 Wave Velocity: 40 - - Class: rviz_plugins/MaxVelocity + - Class: awf_2d_overlay_vehicle/SignalDisplay Enabled: true - Name: MaxVelocity - Text Color: 255; 255; 255 - Topic: - Depth: 5 - Durability Policy: Volatile - History Policy: Keep Last - Reliability Policy: Reliable - Value: /planning/scenario_planning/current_max_velocity - Value: true - - Class: rviz_plugins/TurnSignal - Enabled: true - Name: TurnSignal - Topic: - Depth: 5 - Durability Policy: Volatile - History Policy: Keep Last - Reliability Policy: Reliable - Value: /vehicle/status/turn_indicators_status + Gear Topic Test: /vehicle/status/gear_status + Hazard Lights Topic: /vehicle/status/hazard_lights_status + Height: 175 + Left: 10 + Name: SignalDisplay + Signal Color: 94; 130; 255 + Speed Limit Topic: /planning/scenario_planning/current_max_velocity + Speed Topic: /vehicle/status/velocity_status + Steering Topic: /vehicle/status/steering_status + Top: 10 + Traffic Topic: /perception/traffic_light_recognition/traffic_signals + Turn Signals Topic: /vehicle/status/turn_indicators_status Value: true + Width: 517 Enabled: true Name: Vehicle - Class: rviz_plugins/MrmSummaryOverlayDisplay @@ -2707,15 +2650,10 @@ Visualization Manager: TF: true Value: false Vehicle: - AccelerationMeter: true - ConsoleMeter: true - MaxVelocity: true PolarGridDisplay: true - SteeringAngle: true - TurnSignal: true Value: true VehicleModel: true - VelocityHistory: true + SignalDisplay: true Value: true Zoom Factor: 1 - Alpha: 1 diff --git a/autoware_launch/rviz/image/autoware.png b/autoware_launch/rviz/image/autoware.png index cf2d1e8eff3550c4427f8d98dc2f1d0c41aa712a..3b27ce5fbce7a5fc518d99c23a5df4c207f81708 100644 GIT binary patch literal 34941 zcmeFZg;UmD{4Gi-C@kod0BBR3{ngvBqS_Ji5IVtkWknWe{Z3|cm8%! zzd=Gm4lolHm6sG1rM9uNHa4>~LPB~J?HMg3(I|f}Ku)oQh5(%*IN0!qEa8in{N@Cq z@?Qrqa{1$`4sa4UA3SD`^tGt3Pi_9`7gn5yo##t^f;zV`^KFIZ;Z*EB^(L3uUE!X} z<((p=3$(}nv0i_TCS2K*MBK_UznbfXT`TEN;6i=YhKevZ6^LcZE^xVHf~q| z_vi6A0<2Fi3A{N!NEb0lVhMUQk_PQQac#Hj5OV6Q%NLy7BmQ zYw08}@ zEPL9UAW*i%CrkB?v-^oHDmgid!OafsV;5)V^NFiXvz~4A=*M=&pR%ak;9Su3rNmz# zi6Ai}&HtT~hHoIN z&ugb++YV1_kcUzvRFF{vR*-?}z?B{=)y4 zXaAp1{r|u4e+0;XTk?B5{E1KS1m@$%$kM4PKB=iJ4<8zBj5)^b?a>j4y|`!i;@ftS zdIX~uzfU|z=KBxqcvMtWPo6v>7IJ%#$i1n%zr^w6L+}Kb>|JYBk{1hBaUAr~r~4+X zP8-Df`f03*-Kp2po8x7C?nmV4*yP5IffVHYN?E=k!M@?af-YHE&luHM{T?gQ;Zjh9 zl$9M5U1?fdvv6^7-6PO~_ukCWh!r(5%Eov^gTYQ?cl{<;Oxr~do5NW8{{8!rU%pTW zMXqmcE%klxOcHQTkx4Aw-KsoSmPVvd^ts7uA6r+dNDP}n-z^M`3zkWVNb|REzo*ST zIX_z5UCkUH{k`vt!SL^$x0{+=cB{9AMBUDKpFj649JQQ2;aXp_QczH+-YWmN=lOW>_2xWI`55HXeitKTZMJY z^t80GF-oscnJ+Hwhuy=&W<&PL;_2b3sh;k{5^^E8@UrQv;LCHCKLZ1~nD-H@nd8kK zYzxM%7refR`IZ?)%gTCJRh2_lR`&S9d3@7JT|?uyTgiv2Dim$+OVL-a%n3|iym%(| zVvAfi5Nn^F!2)A{shf_S9VM)J&W7hT>}Pd#HSwLmYdkmjv$DEcZ_3Gkp)MpO^sBVg zZuU7_s#iq-lg5$V>g#Hhh~P(U!EMuMadl5|=wwKn=bABz`RsVP6Y0g$>t~Vrhla#l zPanFuyGzQ-o?T2QCnpz z?#AGx@kPGy`ogX>s z%z-y9-zhTYamjK%=6v*3{Cnb#kgP_yS*By1OI( z{JAR@NiM54qU+|aVQOjlrLa(nNFK32lwwy`#_a5AZz>$PdqrwLgop3CxVvAPC} z%+3z0sNg@^?3~xRK8&5HQ0}dAErtWmNKg0kLyy{-a;L&2BWs?izZ$XR{`vE#%kg9s zpWOm)P0f^x+Zb!SG`1rT$sIIHZnE87+Xr+lvzwcN?E}vY3}~5{getxuPIZs9Kt1By zw;OEMQ!i4yy&l>xb?LXgrw$iO7e&s<%nZuNFqTabY)-V!n~Ug~cDA!? z&}E%jUKW4-nx--Eim3{jLa`P zJ6jaF#j32oudiXTQ}yIzzU1P(_Bv9?z30!!$TO88UP2bH@R^zWoLpQnv9Y}j`4`CV z#>=c(^nhe-N9*{{G}VF`k1y;ANQc{y~2y2?rfPV)xq4yYZtV z?4Q}$qeVsnwO5B!Zz`Qw78fJnaXuuFc7+mzNyy2yT9w)F>a*onAJH>w=b(KlD#G>l z#%~O4o>^QBNu8!%TQh(B__u_kqkwAu)KXhC{>RTLt3_dIo!{D$RZ@Bo z60&=8?yg@lmX%-oeV60ks_sfB+^biV>oyrJdfAmCgep?|jQCDux7ga&Rz}7WU29b8 z%yI2Ce(mKZeG3_R0NAvVXd%L8AlhbQ8m%wfB>*=ig?Tf@=&ctyNVL@C-DobvL z$w{pw5%0*KKbLyFGYSjC8iS;GZRc2pgf?B=+`OhH7bL#0kw)COdGo{jyK)i|)X~wx z4$jj{YlGtz_y4sGk)30nV$0DNDtVes7pL|lLi{&*czA*;qoIC1W?(Q`?wP!3^{%QH z*k16`V+{!|C^G%axYV8K7Z!#I4WR1!ij>=0_%I+}L(Sz=d3pT{aq-!$tw=aXtErrf z^70L9l-G`q43*BQ3ww+9#CK%X7zrmPnXqrN(bLm+8FPpR1>)o5cmMf%A42N4>wXJS zN)V#BNl+D<{xyX*avPJ-kj?8t&BN1^0-M!a3ukGjzOib*2mNA!o=QPm`*`}wLrjcu z`s%3v20D5_6zqDxpwrXd>9f89o7o0eb`EjeyLaCWnm0p%8Z8dctZ-Pz^sf1JK$pn9 z*x#=hRX-CR7Iqs4$2q8?B`GPXU^E937oULZ)B;^H#1x+!Xm++$;r@m z!=}l}IU9zUdR^T=U!J{qapxgF{|A5nr*3Xm-ewZ`|Jt0KwwEh5lu2K+{tPG%5zYFx zCnHNs#+Mx-{FLA9rUaL@c0mnzJtUMQZEPqk4=^b{5j`w_gd~~wNvMMSPgxrsctR^$7c3Z{-oX{^#pzUb8 z%-SyXriLXZl9gEv?oYXAzbP@lR^<<>sL;4^V?;taytTU<3!s&`d7h$@L;LJg1to{% zbnz(rb0?ub-$)27b$Ui(hJn7f3QEuP9e{eJfxgf?9hX7O)nDzC9S6kbJ zJICJFf-!VPc%-DEP}Lh-A@gElRqK|z$6esuU|vIeS?C7=ijVf-`W}$Lm&0}&FIR`Iw!Z2?S>jjbF+!r z+qd7Ut0SKIdDz<9+poC9wEIUz@yyQZg_Ck6otz-$X+G{>t3%XKyD~^a*NwtLk8O9B zoe_gKFJ8XXFX69wVl6I?zTB&$J6RFoaqw46C4Z{(6GMc~si#`5nAbu2_J?RT%Hq+0 z_2KN3$?d5xU%s4JICf6dOonzZHLd(jw{b3;nVo$mF3y0ClXBIOuc|fq%4&-&w=OQiKYrBgGyeFmF*{y5+P7ZsiqtfAe3E1L zaKRH67RJu+81L_I9L)Z7aoVeKx)2iq5l<+a{PS$g;Mr$JlGd`C!v|hoek&_0x}Bdl zt4^2D%q;|JhSnXOj-aE7>waOewQaO<{>ie;XhYl|+PsBny^s8G*Q z!3k=`<`WQ@2T1d@PB#!o?g1B9%Fqz$+B(@iQ$!72$i5LbqwB2gx+r;dwXH)fo}O)s zwl1ZUvaq0ca%Z3wd*C(oaA9*(@>#u4zEI*1=sFxGPaZQdEww~g92_{zuC9gz1qC(s zmk0?8-onDVFXVZLjZL)N^PJz&QHJy`BO()Z=x7=`CVtPKWO|=5zj;%98w<&vJ&)o!SKe3_3}tS?%&*Qu^;g)xbQ&te^Q5?s$Wk4K6gUX#gbZEb9P zFD|~x!onjKE&=cjD|;|mqs+=?L1LB1ZL^}nDKsqq^=mtyjt-12VF-f6O zKLqFoj`h1#?3-FI{A`t6z4aj!3`~oySFvp-#ox5`SN_-_VN>uooNwpPAFQrb+HE;H zZt@D0;gOJtNl5JI7_+(BugKT)P&$l{j!GFB(Ha@WK4z$tc)KYBO*17W1xiN{N(A&U zKeW>iAJ_r(VO%0A+kGHtC&NHESFn$Bb!TkYA52F6N-5q(mgE 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 literal 600002 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ǃQ&aVS#+ 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 Ephim6oj8U!=^Z-G*w%hD~HMaG5hfFEK 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 z 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

9+MAypvrpip-0H^C!FjrbdH_1cF&{RJ4$<& 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

k;(lSR*R<##K@D{qjg6>gQG-QIKjpX0x-4E6 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%0Dw7*>Qi*18lORLPS=## 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 Date: Fri, 2 Feb 2024 08:18:55 +0900 Subject: [PATCH 399/446] chore(image_projection_based_fusion): rework parameters (#824) chore(image_projection_based_fusion): use config Signed-off-by: kminoda --- .../detection/lidar_model/pointpainting.param.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml index 21d31f2163..8fb88da291 100755 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml @@ -1,5 +1,12 @@ /**: ros__parameters: + trt_precision: fp16 + build_only: false + encoder_onnx_path: "$(var model_path)/pts_voxel_encoder_$(var model_name).onnx" + encoder_engine_path: "$(var model_path)/pts_voxel_encoder_$(var model_name).engine" + head_onnx_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).onnx" + head_engine_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).engine" + model_params: class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] paint_class_names: ["CAR", "BICYCLE", "PEDESTRIAN"] From 4abad00b40d312f1f37f9fbb3d9bfd2cfdd6732e Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 2 Feb 2024 19:51:16 +0900 Subject: [PATCH 400/446] feat(map_based_prediction): consider crosswalks signals (#849) add param Signed-off-by: Yuki Takagi --- .../prediction/map_based_prediction.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index fdd64174de..ed1193f1c4 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -19,6 +19,7 @@ use_vehicle_acceleration: false # whether to consider current vehicle acceleration when predicting paths or not speed_limit_multiplier: 1.5 # When using vehicle acceleration. Set vehicle's maximum predicted speed as the legal speed limit in that lanelet times this value acceleration_exponential_half_life: 2.5 # [s] When using vehicle acceleration. The decaying acceleration model considers that the current vehicle acceleration will be halved after this many seconds + use_crosswalk_signal: true # parameter for shoulder lane prediction prediction_time_horizon_rate_for_validate_shoulder_lane_length: 0.8 From 5d5b3a6e1c90c443eebe14bfb0fb03f4780b09cf Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 2 Feb 2024 20:09:02 +0900 Subject: [PATCH 401/446] fix(planning_launch): align parameters to real vehicle (#848) update param Signed-off-by: Yuki Takagi --- .../motion_velocity_smoother.param.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml index 235c76a5c1..4b6693f150 100644 --- a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml @@ -9,17 +9,17 @@ # -- curve parameters -- # common parameters - curvature_calculation_distance: 5.0 # distance of points while curvature is calculating for the steer rate and lateral acceleration limit [m] + curvature_calculation_distance: 2.0 # distance of points while curvature is calculating for the steer rate and lateral acceleration limit [m] # lateral acceleration limit parameters enable_lateral_acc_limit: true # To toggle the lateral acc filter on and off. You can switch it dynamically at runtime. max_lateral_accel: 1.0 # max lateral acceleration limit [m/ss] - min_curve_velocity: 2.74 # min velocity at lateral acceleration limit and steering angle rate limit [m/s] + min_curve_velocity: 2.0 # min velocity at lateral acceleration limit and steering angle rate limit [m/s] decel_distance_before_curve: 3.5 # slow speed distance before a curve for lateral acceleration limit decel_distance_after_curve: 2.0 # slow speed distance after a curve for lateral acceleration limit min_decel_for_lateral_acc_lim_filter: -2.5 # deceleration limit applied in the lateral acceleration filter to avoid sudden braking [m/ss] # steering angle rate limit parameters enable_steering_rate_limit: true # To toggle the steer rate filter on and off. You can switch it dynamically at runtime. - max_steering_angle_rate: 40.0 # maximum steering angle rate [degree/s] + max_steering_angle_rate: 11.5 # maximum steering angle rate [degree/s] resample_ds: 0.1 # distance between trajectory points [m] curvature_threshold: 0.02 # if curvature > curvature_threshold, steeringRateLimit is triggered [1/m] From bee8c48c771a013a8b3fd54eb68cf3b38ddcf2f6 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Mon, 5 Feb 2024 17:08:22 +0900 Subject: [PATCH 402/446] feat(obstacle_cruise_planner): yield function for ocp (#837) * add params for yield Signed-off-by: Daniel Sanchez * param name change Signed-off-by: Daniel Sanchez * add params Signed-off-by: Daniel Sanchez * refactoring Signed-off-by: Daniel Sanchez * fix typo, tuning Signed-off-by: Daniel Sanchez * update parameters Signed-off-by: Daniel Sanchez * delete unused param Signed-off-by: Daniel Sanchez * set cruise planner as default for testing Signed-off-by: Daniel Sanchez * add param for stopped obj speed threshold Signed-off-by: Daniel Sanchez * change back param Signed-off-by: Daniel Sanchez * set default false Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez Signed-off-by: Daniel Sanchez --- .../obstacle_cruise_planner.param.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml index 1ac32ba562..2ff87e9b01 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml @@ -95,7 +95,12 @@ obstacle_velocity_threshold : 3.5 # minimum velocity threshold of obstacles outside the trajectory to cruise or stop [m/s] ego_obstacle_overlap_time_threshold : 2.0 # time threshold to decide cut-in obstacle for cruise or stop [s] max_prediction_time_for_collision_check : 20.0 # prediction time to check collision between obstacle and ego - + yield: + enable_yield: false + lat_distance_threshold: 5.0 # lateral margin between obstacle in neighbor lanes and trajectory band with ego's width for yielding + max_lat_dist_between_obstacles: 2.5 # lateral margin between moving obstacle in neighbor lanes and stopped obstacle in front of it + max_obstacles_collision_time: 10.0 # how far the blocking obstacle + stopped_obstacle_velocity_threshold: 0.5 slow_down: max_lat_margin: 1.1 # lateral margin between obstacle and trajectory band with ego's width lat_hysteresis_margin: 0.2 From 6b75cf2380aa650961ed0dc447fab78b9f62245c Mon Sep 17 00:00:00 2001 From: Motz <83898149+Motsu-san@users.noreply.github.com> Date: Tue, 6 Feb 2024 09:20:47 +0900 Subject: [PATCH 403/446] refactor(ekf_localizer): rework parameters (#847) refactor: Add the classification names to yaml file Signed-off-by: Motsu-san --- .../localization/ekf_localizer.param.yaml | 69 +++++++++++-------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/autoware_launch/config/localization/ekf_localizer.param.yaml b/autoware_launch/config/localization/ekf_localizer.param.yaml index ebdf2828fc..4cc71e0904 100644 --- a/autoware_launch/config/localization/ekf_localizer.param.yaml +++ b/autoware_launch/config/localization/ekf_localizer.param.yaml @@ -1,37 +1,46 @@ /**: ros__parameters: - show_debug_info: false - enable_yaw_bias_estimation: true - predict_frequency: 50.0 - tf_rate: 50.0 - publish_tf: true - extend_state_step: 50 + node: + show_debug_info: false + enable_yaw_bias_estimation: true + predict_frequency: 50.0 + tf_rate: 50.0 + publish_tf: true + extend_state_step: 50 - # for Pose measurement - pose_additional_delay: 0.0 - pose_measure_uncertainty_time: 0.01 - pose_smoothing_steps: 5 - pose_gate_dist: 10000.0 + pose_measurement: + # for Pose measurement + pose_additional_delay: 0.0 + pose_measure_uncertainty_time: 0.01 + pose_smoothing_steps: 5 + pose_gate_dist: 10000.0 - # for twist measurement - twist_additional_delay: 0.0 - twist_smoothing_steps: 2 - twist_gate_dist: 10000.0 + twist_measurement: + # for twist measurement + twist_additional_delay: 0.0 + twist_smoothing_steps: 2 + twist_gate_dist: 10000.0 - # for process model - proc_stddev_yaw_c: 0.005 - proc_stddev_vx_c: 10.0 - proc_stddev_wz_c: 5.0 + process_noise: + # for process model + proc_stddev_yaw_c: 0.005 + proc_stddev_vx_c: 10.0 + proc_stddev_wz_c: 5.0 - #Simple1DFilter parameters - z_filter_proc_dev: 1.0 - roll_filter_proc_dev: 0.01 - pitch_filter_proc_dev: 0.01 - # for diagnostics - pose_no_update_count_threshold_warn: 50 - pose_no_update_count_threshold_error: 100 - twist_no_update_count_threshold_warn: 50 - twist_no_update_count_threshold_error: 100 + simple_1d_filter_parameters: + #Simple1DFilter parameters + z_filter_proc_dev: 1.0 + roll_filter_proc_dev: 0.01 + pitch_filter_proc_dev: 0.01 - # for velocity measurement limitation (Set 0.0 if you want to ignore) - threshold_observable_velocity_mps: 0.0 # [m/s] + diagnostics: + # for diagnostics + pose_no_update_count_threshold_warn: 50 + pose_no_update_count_threshold_error: 100 + twist_no_update_count_threshold_warn: 50 + twist_no_update_count_threshold_error: 100 + + misc: + # for velocity measurement limitation (Set 0.0 if you want to ignore) + threshold_observable_velocity_mps: 0.0 # [m/s] + pose_frame_id: "map" From 2eeb90e28f43830bd427570af73773cf20c2c14a Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Tue, 6 Feb 2024 11:06:25 +0900 Subject: [PATCH 404/446] chore(lidar_centerpoint): rework parameters (#822) * chore(lidar_centerpoint): use config Signed-off-by: kminoda * fix: remove build_only param Signed-off-by: kminoda --------- Signed-off-by: kminoda Co-authored-by: Kenzo Lobos Tsunekawa --- .../detection/lidar_model/centerpoint.param.yaml | 11 +++++++++++ .../lidar_model/centerpoint_tiny.param.yaml | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint.param.yaml index 0b29a87965..a9c3174846 100644 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint.param.yaml @@ -13,3 +13,14 @@ iou_nms_search_distance_2d: 10.0 iou_nms_threshold: 0.1 yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] + score_threshold: 0.35 + has_twist: false + trt_precision: fp16 + densification_num_past_frames: 1 + densification_world_frame_id: map + + # weight files + encoder_onnx_path: "$(var model_path)/pts_voxel_encoder_$(var model_name).onnx" + encoder_engine_path: "$(var model_path)/pts_voxel_encoder_$(var model_name).engine" + head_onnx_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).onnx" + head_engine_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).engine" diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml index 8252fde827..5eb560dd7b 100644 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml @@ -13,3 +13,15 @@ iou_nms_search_distance_2d: 10.0 iou_nms_threshold: 0.1 yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] + score_threshold: 0.35 + build_only: false # shutdown node after TensorRT engine file is built + has_twist: false + trt_precision: fp16 + densification_num_past_frames: 1 + densification_world_frame_id: map + + # weight files + encoder_onnx_path: "$(var model_path)/pts_voxel_encoder_$(var model_name).onnx" + encoder_engine_path: "$(var model_path)/pts_voxel_encoder_$(var model_name).engine" + head_onnx_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).onnx" + head_engine_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).engine" From f487e03916fcbddbedf7776ee322a65bcf2ed753 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Tue, 6 Feb 2024 11:22:05 +0900 Subject: [PATCH 405/446] fix(pointpainting): update parameter (#850) Signed-off-by: kminoda --- .../detection/lidar_model/pointpainting.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml index 8fb88da291..8ccd469786 100755 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml @@ -1,7 +1,6 @@ /**: ros__parameters: trt_precision: fp16 - build_only: false encoder_onnx_path: "$(var model_path)/pts_voxel_encoder_$(var model_name).onnx" encoder_engine_path: "$(var model_path)/pts_voxel_encoder_$(var model_name).engine" head_onnx_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).onnx" From 43570938556f633447cb37149ba22019bbd40ede Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Tue, 6 Feb 2024 13:04:09 +0900 Subject: [PATCH 406/446] refactor(map_tf_generator): rework parameters (#835) Signed-off-by: Yamato Ando --- autoware_launch/config/map/map_tf_generator.param.yaml | 4 ++++ .../launch/components/tier4_map_component.launch.xml | 1 + 2 files changed, 5 insertions(+) create mode 100644 autoware_launch/config/map/map_tf_generator.param.yaml diff --git a/autoware_launch/config/map/map_tf_generator.param.yaml b/autoware_launch/config/map/map_tf_generator.param.yaml new file mode 100644 index 0000000000..90790808ac --- /dev/null +++ b/autoware_launch/config/map/map_tf_generator.param.yaml @@ -0,0 +1,4 @@ +/**: + ros__parameters: + map_frame: map + viewer_frame: viewer diff --git a/autoware_launch/launch/components/tier4_map_component.launch.xml b/autoware_launch/launch/components/tier4_map_component.launch.xml index 455b848c63..ba5611b6c0 100644 --- a/autoware_launch/launch/components/tier4_map_component.launch.xml +++ b/autoware_launch/launch/components/tier4_map_component.launch.xml @@ -8,6 +8,7 @@ + From 4e94d652916525fccc1a9d505b5db2594767d9f5 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Tue, 6 Feb 2024 13:40:08 +0900 Subject: [PATCH 407/446] feat(behavior_path_sampling_planner): add sampling based planner to behavior path planner (#810) * Add sampling based planner params Signed-off-by: Daniel Sanchez * update keep_last param Signed-off-by: Daniel Sanchez * change priority of sampling based planner Signed-off-by: Daniel Sanchez * Set parameters for frenet planner Signed-off-by: Daniel Sanchez * changes for testing Signed-off-by: Daniel Sanchez * change curvature weight for testing Signed-off-by: Daniel Sanchez * tuning params Signed-off-by: Daniel Sanchez * tuning Signed-off-by: Daniel Sanchez * for integ w/ other modules Signed-off-by: Daniel Sanchez * add support for soft constraints weight reconfig Signed-off-by: Daniel Sanchez * rebase Signed-off-by: Daniel Sanchez * temp Signed-off-by: Daniel Sanchez * update default params Signed-off-by: Daniel Sanchez * Tune params Signed-off-by: Daniel Sanchez * Set defaults back to normal Signed-off-by: Daniel Sanchez * fix name of ablc Signed-off-by: Daniel Sanchez * formatting fix Signed-off-by: Daniel Sanchez * set verbose to false Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez Signed-off-by: Daniel Sanchez --- .../planning/preset/default_preset.yaml | 3 ++ .../sampling_planner.param.yaml | 40 +++++++++++++++++++ .../scene_module_manager.param.yaml | 9 +++++ .../tier4_planning_component.launch.xml | 1 + 4 files changed, 53 insertions(+) create mode 100644 autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/sampling_planner/sampling_planner.param.yaml diff --git a/autoware_launch/config/planning/preset/default_preset.yaml b/autoware_launch/config/planning/preset/default_preset.yaml index 3512d722ec..69328a9b79 100644 --- a/autoware_launch/config/planning/preset/default_preset.yaml +++ b/autoware_launch/config/planning/preset/default_preset.yaml @@ -9,6 +9,9 @@ launch: - arg: name: launch_dynamic_avoidance_module default: "false" + - arg: + name: launch_sampling_planner_module + default: "false" # Warning, experimental module, use only in simulations - arg: name: launch_lane_change_right_module default: "true" diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/sampling_planner/sampling_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/sampling_planner/sampling_planner.param.yaml new file mode 100644 index 0000000000..9a6b30c219 --- /dev/null +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/sampling_planner/sampling_planner.param.yaml @@ -0,0 +1,40 @@ +/**: + ros__parameters: + common: + output_delta_arc_length: 0.5 # [m] delta arc length for output trajectory + + debug: + enable_calculation_time_info: false # flag to print calculation times + id: 0 # id of the candidate paths for which to print/show details (e.g., footprint in rviz) + + preprocessing: + force_zero_initial_deviation: True # if true, initial planning starts from the reference path + force_zero_initial_heading: True # if true, initial planning starts with a heading aligned with the reference path + smooth_reference_trajectory: False # if true, the reference trajectory is smoothed before being used for planning + constraints: + hard: + max_curvature: 3.0 # [m⁻¹] maximum curvature of a sampled path + min_curvature: -3.0 # [m⁻¹] minimum curvature of a sampled path + soft: + lateral_deviation_weight: 1.0 # cost weight for lateral deviation between the end of a sampled path and the reference path + length_weight: 1.0 # cost weight for the length of a sampled path + curvature_weight: 2000.0 # cost weight for the curvature of a sampled path + weights: [0.5,1.0,20.0] + sampling: + enable_frenet: True + enable_bezier: False + resolution: 0.5 # [m] target distance between sampled path points + previous_path_reuse_points_nb: 2 # number of points reused from the previously generated path (0:no reuse, 1:replan from end of prev path, 2: end and mid of prev path, etc) + target_lengths: [20.0, 40.0] # [m] target lengths of the sampled paths + nb_target_lateral_positions: 0 # number of lateral positions to use for sampling (in addition to 0.0 and the current lateral deviation) + target_lateral_positions: [-4.5,-2.5, 0.0, 2.5,4.5] # manual values that are only used if nb_target_lateral_positions = 0 + frenet: # target values for the sampled "lateral deviation over longitudinal position" polynomial + target_lateral_velocities: [-0.5, 0.0, 0.5] + target_lateral_accelerations: [0.0] + # bezier: + # nb_k: 3 # number of sampled curvature values + # mk_min: 0.0 # minimum curvature value + # mk_max: 10.0 # maximum curvature value + # nb_t: 5 # number of sampled acceleration values + # mt_min: 0.3 # minimum acceleration value + # mt_max: 1.7 # maximum acceleration value diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml index 9853e220bc..8d4fe057b4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/scene_module_manager.param.yaml @@ -82,3 +82,12 @@ keep_last: true priority: 7 max_module_size: 1 + + sampling_planner: + enable_module: true + enable_rtc: false + enable_simultaneous_execution_as_approved_module: false + enable_simultaneous_execution_as_candidate_module: false + keep_last: false + priority: 16 + max_module_size: 1 diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index 4e65c30c02..cbc2349a6e 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -27,6 +27,7 @@ + From b422b3c65bc25d7e71c1143c566e1f3565315fea Mon Sep 17 00:00:00 2001 From: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Date: Wed, 7 Feb 2024 01:36:00 +0900 Subject: [PATCH 408/446] feat(traffic_light_recognition): add tlr args in tier4_perception_component.launch.xml (#840) * feat(traffic_light_recognition): add tlr args in tier4_perception_component.launch.xml Signed-off-by: Shunsuke Miura * fix dfault value of fusion_only to false Signed-off-by: Shunsuke Miura * fix arg passing way Signed-off-by: Shunsuke Miura --------- Signed-off-by: Shunsuke Miura --- .../launch/components/tier4_perception_component.launch.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index a84911a414..3519d5780d 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -14,7 +14,6 @@ - @@ -156,6 +155,11 @@ + + + + + From 92d05298dc900d98c9a67fad11c5c56f2f953c56 Mon Sep 17 00:00:00 2001 From: Phoebe Wu Date: Wed, 7 Feb 2024 08:20:50 +0800 Subject: [PATCH 409/446] refactor(pose_initializer): rework parameters (#853) Signed-off-by: PhoebeWu21 --- .../config/localization/pose_initializer.param.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/autoware_launch/config/localization/pose_initializer.param.yaml b/autoware_launch/config/localization/pose_initializer.param.yaml index a05cc7c35c..88acbfb526 100644 --- a/autoware_launch/config/localization/pose_initializer.param.yaml +++ b/autoware_launch/config/localization/pose_initializer.param.yaml @@ -2,6 +2,11 @@ ros__parameters: gnss_pose_timeout: 3.0 # [sec] stop_check_duration: 3.0 # [sec] + ekf_enabled: $(var ekf_enabled) + gnss_enabled: $(var gnss_enabled) + yabloc_enabled: $(var yabloc_enabled) + ndt_enabled: $(var ndt_enabled) + stop_check_enabled: $(var stop_check_enabled) # from gnss gnss_particle_covariance: From b19141504820197400750757e06cb63e34590a0f Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 7 Feb 2024 10:49:20 +0900 Subject: [PATCH 410/446] fix(lidar_centerpoint): remove build_only param from param.yaml (#856) Signed-off-by: kminoda --- .../detection/lidar_model/centerpoint_tiny.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml index 5eb560dd7b..474d0e2b69 100644 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/centerpoint_tiny.param.yaml @@ -14,7 +14,6 @@ iou_nms_threshold: 0.1 yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] score_threshold: 0.35 - build_only: false # shutdown node after TensorRT engine file is built has_twist: false trt_precision: fp16 densification_num_past_frames: 1 From 668c9b014eabf6f4a5cc79f6fddf521a9b4233ec Mon Sep 17 00:00:00 2001 From: Anh Nguyen Date: Wed, 7 Feb 2024 11:16:00 +0700 Subject: [PATCH 411/446] chore(map): rework parameters of map (#843) * Added reference to launch parameters to yaml files of map/ Signed-off-by: anhnv3991 * style(pre-commit): autofix --------- Signed-off-by: anhnv3991 Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- autoware_launch/config/map/lanelet2_map_loader.param.yaml | 1 + autoware_launch/config/map/pointcloud_map_loader.param.yaml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/autoware_launch/config/map/lanelet2_map_loader.param.yaml b/autoware_launch/config/map/lanelet2_map_loader.param.yaml index 24d2b0e8ed..b830e038f1 100755 --- a/autoware_launch/config/map/lanelet2_map_loader.param.yaml +++ b/autoware_launch/config/map/lanelet2_map_loader.param.yaml @@ -1,3 +1,4 @@ /**: ros__parameters: center_line_resolution: 5.0 # [m] + lanelet2_map_path: $(var lanelet2_map_path) # The lanelet2 map path diff --git a/autoware_launch/config/map/pointcloud_map_loader.param.yaml b/autoware_launch/config/map/pointcloud_map_loader.param.yaml index b4efbec970..48d10944cb 100644 --- a/autoware_launch/config/map/pointcloud_map_loader.param.yaml +++ b/autoware_launch/config/map/pointcloud_map_loader.param.yaml @@ -7,3 +7,5 @@ # only used when downsample_whole_load enabled leaf_size: 3.0 # downsample leaf size [m] + pcd_paths_or_directory: [$(var pointcloud_map_path)] # Path to the pointcloud map file or directory + pcd_metadata_path: $(var pointcloud_map_metadata_path) # Path to pointcloud metadata file From b1b1423eefcb821f48728851a4e2febbe498d95c Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Wed, 7 Feb 2024 14:41:30 +0900 Subject: [PATCH 412/446] chore(planning/control/vehicle): declare ROS params in yaml files (#833) * update yaml Signed-off-by: Yuki Takagi --- .../config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml index 7ad685217f..54c87f45b6 100644 --- a/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml +++ b/autoware_launch/config/control/vehicle_cmd_gate/vehicle_cmd_gate.param.yaml @@ -3,7 +3,7 @@ update_rate: 10.0 system_emergency_heartbeat_timeout: 0.5 use_emergency_handling: false - check_external_emergency_heartbeat: false + check_external_emergency_heartbeat: $(var check_external_emergency_heartbeat) use_start_request: false enable_cmd_limit_filter: true filter_activated_count_threshold: 5 From 1ad37efbf853908e701da58a3d615f3a01a650f2 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 7 Feb 2024 16:42:46 +0900 Subject: [PATCH 413/446] feat(intersection): use different expected deceleration for bike/car (#852) Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/intersection.param.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 86bcf801f4..8e50a451f3 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -56,7 +56,9 @@ duration: 3.0 object_dist_to_stopline: 10.0 ignore_on_amber_traffic_light: - object_expected_deceleration: 2.0 + object_expected_deceleration: + car: 2.0 + bike: 5.0 ignore_on_red_traffic_light: object_margin_to_path: 2.0 avoid_collision_by_acceleration: From 86c9f00d90aec18610e6b3570c27471f3af67dfb Mon Sep 17 00:00:00 2001 From: Khalil Selyan <36904941+KhalilSelyan@users.noreply.github.com> Date: Wed, 7 Feb 2024 12:58:23 +0300 Subject: [PATCH 414/446] refactor(rviz): update the class name and turn signal color (#855) Signed-off-by: KhalilSelyan --- autoware_launch/rviz/autoware.rviz | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index 4301034e74..f73b720b5d 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -244,14 +244,14 @@ Visualization Manager: Value: true Wave Color: 255; 255; 255 Wave Velocity: 40 - - Class: awf_2d_overlay_vehicle/SignalDisplay + - Class: autoware_overlay_rviz_plugin/SignalDisplay Enabled: true Gear Topic Test: /vehicle/status/gear_status Hazard Lights Topic: /vehicle/status/hazard_lights_status Height: 175 Left: 10 Name: SignalDisplay - Signal Color: 94; 130; 255 + Signal Color: 0; 230; 120 Speed Limit Topic: /planning/scenario_planning/current_max_velocity Speed Topic: /vehicle/status/velocity_status Steering Topic: /vehicle/status/steering_status From 93fc83e02e2090bc68ea426059c273cf3bec8457 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Wed, 7 Feb 2024 19:02:35 +0900 Subject: [PATCH 415/446] chore(ndt_scan_matcher): rename config path (#854) * chore(ndt_scan_matcher): rename config path Signed-off-by: Yamato Ando * rename path Signed-off-by: Yamato Ando * style(pre-commit): autofix --------- Signed-off-by: Yamato Ando Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../ndt_scan_matcher.param.yaml | 0 ...crop_box_filter_measurement_range.param.yaml | 0 .../random_downsample_filter.param.yaml | 0 .../voxel_grid_filter.param.yaml | 0 .../tier4_localization_component.launch.xml | 17 +++++++++++++---- 5 files changed, 13 insertions(+), 4 deletions(-) rename autoware_launch/config/localization/{ => ndt_scan_matcher}/ndt_scan_matcher.param.yaml (100%) rename autoware_launch/config/localization/{ => ndt_scan_matcher/pointcloud_preprocessor}/crop_box_filter_measurement_range.param.yaml (100%) rename autoware_launch/config/localization/{ => ndt_scan_matcher/pointcloud_preprocessor}/random_downsample_filter.param.yaml (100%) rename autoware_launch/config/localization/{ => ndt_scan_matcher/pointcloud_preprocessor}/voxel_grid_filter.param.yaml (100%) diff --git a/autoware_launch/config/localization/ndt_scan_matcher.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher/ndt_scan_matcher.param.yaml similarity index 100% rename from autoware_launch/config/localization/ndt_scan_matcher.param.yaml rename to autoware_launch/config/localization/ndt_scan_matcher/ndt_scan_matcher.param.yaml diff --git a/autoware_launch/config/localization/crop_box_filter_measurement_range.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher/pointcloud_preprocessor/crop_box_filter_measurement_range.param.yaml similarity index 100% rename from autoware_launch/config/localization/crop_box_filter_measurement_range.param.yaml rename to autoware_launch/config/localization/ndt_scan_matcher/pointcloud_preprocessor/crop_box_filter_measurement_range.param.yaml diff --git a/autoware_launch/config/localization/random_downsample_filter.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher/pointcloud_preprocessor/random_downsample_filter.param.yaml similarity index 100% rename from autoware_launch/config/localization/random_downsample_filter.param.yaml rename to autoware_launch/config/localization/ndt_scan_matcher/pointcloud_preprocessor/random_downsample_filter.param.yaml diff --git a/autoware_launch/config/localization/voxel_grid_filter.param.yaml b/autoware_launch/config/localization/ndt_scan_matcher/pointcloud_preprocessor/voxel_grid_filter.param.yaml similarity index 100% rename from autoware_launch/config/localization/voxel_grid_filter.param.yaml rename to autoware_launch/config/localization/ndt_scan_matcher/pointcloud_preprocessor/voxel_grid_filter.param.yaml diff --git a/autoware_launch/launch/components/tier4_localization_component.launch.xml b/autoware_launch/launch/components/tier4_localization_component.launch.xml index 70170a5fef..c5117009d2 100644 --- a/autoware_launch/launch/components/tier4_localization_component.launch.xml +++ b/autoware_launch/launch/components/tier4_localization_component.launch.xml @@ -19,16 +19,25 @@ - - - - + + + + From 7623f6fea0da7ad2a949b81b5b85b16ebd714a1e Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Thu, 8 Feb 2024 01:25:07 +0900 Subject: [PATCH 416/446] feat(start/goal_planner): remove unused param and update time horizon for goal planner's safety check (#863) * remove unused param Signed-off-by: kyoichi-sugahara * update safety check time horizon Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 3 +-- .../start_planner/start_planner.param.yaml | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index d03efa405f..6d82e7790d 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -128,7 +128,7 @@ delay_until_departure: 1.0 # For target object filtering target_filtering: - safety_check_time_horizon: 5.0 + safety_check_time_horizon: 10.0 safety_check_time_resolution: 1.0 # detection range object_check_forward_distance: 100.0 @@ -164,7 +164,6 @@ method: "integral_predicted_polygon" keep_unsafe_time: 3.0 # collision check parameters - check_all_predicted_path: true publish_debug_marker: false rss_params: rear_vehicle_reaction_time: 2.0 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 154c4b1e0b..5edf7d468b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -127,7 +127,6 @@ # safety check configuration enable_safety_check: true # collision check parameters - check_all_predicted_path: true publish_debug_marker: false rss_params: rear_vehicle_reaction_time: 2.0 From 0ce46ea580d6e782136157512079da9b0b30a56c Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Thu, 8 Feb 2024 09:02:15 +0900 Subject: [PATCH 417/446] feat: remove use_pointcloud_container (#806) * feat!: remove use_pointcloud_container Signed-off-by: kminoda * style(pre-commit): autofix * remove unnecessary files Signed-off-by: kminoda * revert: revert change in declaration of sample vehicle and sensor_kit Signed-off-by: kminoda --------- Signed-off-by: kminoda Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- autoware_launch/launch/autoware.launch.xml | 10 ++++------ .../components/tier4_planning_component.launch.xml | 1 - .../components/tier4_sensing_component.launch.xml | 1 - autoware_launch/launch/logging_simulator.launch.xml | 2 -- autoware_launch/launch/planning_simulator.launch.xml | 2 -- 5 files changed, 4 insertions(+), 12 deletions(-) diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index 7de7741be2..91a12aebfe 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -56,12 +56,10 @@ - - - - - - + + + + diff --git a/autoware_launch/launch/components/tier4_planning_component.launch.xml b/autoware_launch/launch/components/tier4_planning_component.launch.xml index cbc2349a6e..3d57f6198e 100644 --- a/autoware_launch/launch/components/tier4_planning_component.launch.xml +++ b/autoware_launch/launch/components/tier4_planning_component.launch.xml @@ -7,7 +7,6 @@ - diff --git a/autoware_launch/launch/components/tier4_sensing_component.launch.xml b/autoware_launch/launch/components/tier4_sensing_component.launch.xml index fe520e1fdc..4cd6eccbaa 100644 --- a/autoware_launch/launch/components/tier4_sensing_component.launch.xml +++ b/autoware_launch/launch/components/tier4_sensing_component.launch.xml @@ -5,7 +5,6 @@ - diff --git a/autoware_launch/launch/logging_simulator.launch.xml b/autoware_launch/launch/logging_simulator.launch.xml index 57cbc38af6..77d17d7897 100644 --- a/autoware_launch/launch/logging_simulator.launch.xml +++ b/autoware_launch/launch/logging_simulator.launch.xml @@ -21,7 +21,6 @@ - @@ -55,7 +54,6 @@ - diff --git a/autoware_launch/launch/planning_simulator.launch.xml b/autoware_launch/launch/planning_simulator.launch.xml index d19c7308f0..cf56413121 100644 --- a/autoware_launch/launch/planning_simulator.launch.xml +++ b/autoware_launch/launch/planning_simulator.launch.xml @@ -50,8 +50,6 @@ - - From a027fa9a30487684d68b83d7a52835b5e645a610 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Thu, 8 Feb 2024 10:03:31 +0900 Subject: [PATCH 418/446] chore(intersection): target type param (#851) Signed-off-by: Mamoru Sobue --- .../intersection.param.yaml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml index 8e50a451f3..68d4070cbf 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml @@ -15,6 +15,14 @@ enable_pass_judge_before_default_stopline: false stuck_vehicle: + target_type: + car: true + bus: true + truck: true + trailer: true + motorcycle: false + bicycle: false + unknown: false turn_direction: left: true right: true @@ -27,6 +35,14 @@ disable_against_private_lane: true yield_stuck: + target_type: + car: true + bus: true + truck: true + trailer: true + motorcycle: false + bicycle: false + unknown: false turn_direction: left: true right: true @@ -37,6 +53,14 @@ consider_wrong_direction_vehicle: false collision_detection_hold_time: 0.5 min_predicted_path_confidence: 0.05 + target_type: + car: true + bus: true + truck: true + trailer: true + motorcycle: true + bicycle: true + unknown: false velocity_profile: use_upstream: true minimum_upstream_velocity: 0.01 From f2f298acd76c5c4d5105c8ef5415395e94198c8e Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Fri, 9 Feb 2024 06:52:44 +0900 Subject: [PATCH 419/446] fix(autoware_launch): remove use_pointcloud_container flag completely (#864) --- autoware_launch/launch/autoware.launch.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/autoware_launch/launch/autoware.launch.xml b/autoware_launch/launch/autoware.launch.xml index 91a12aebfe..a5daf3dd16 100644 --- a/autoware_launch/launch/autoware.launch.xml +++ b/autoware_launch/launch/autoware.launch.xml @@ -4,7 +4,6 @@ - From 6969c8890570ba7b52de0c40b8761dbfd246d9d0 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 9 Feb 2024 13:30:54 +0900 Subject: [PATCH 420/446] feat(map based prediction, crosswalk)!: transplantation of pedestrians' behavior prediction against green signal (#860) pedestrians' intention estimation feature against the green signal Signed-off-by: Yuki Takagi --- .../prediction/map_based_prediction.param.yaml | 7 ++++++- .../behavior_velocity_planner/crosswalk.param.yaml | 5 ++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml index ed1193f1c4..f8ad371ab9 100644 --- a/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml +++ b/autoware_launch/config/perception/object_recognition/prediction/map_based_prediction.param.yaml @@ -19,7 +19,12 @@ use_vehicle_acceleration: false # whether to consider current vehicle acceleration when predicting paths or not speed_limit_multiplier: 1.5 # When using vehicle acceleration. Set vehicle's maximum predicted speed as the legal speed limit in that lanelet times this value acceleration_exponential_half_life: 2.5 # [s] When using vehicle acceleration. The decaying acceleration model considers that the current vehicle acceleration will be halved after this many seconds - use_crosswalk_signal: true + crosswalk_with_signal: + use_crosswalk_signal: true + threshold_velocity_assumed_as_stopping: 0.25 # [m/s] velocity threshold for the module to judge whether the objects is stopped + # If the pedestrian does not move for X seconds against green signal, the module judge that the pedestrian has no intention to walk. + distance_set_for_no_intention_to_walk: [1.0, 5.0] # [m] ascending order, keys of map + timeout_set_for_no_intention_to_walk: [1.0, 0.0] # [s] values of map # parameter for shoulder lane prediction prediction_time_horizon_rate_for_validate_shoulder_lane_length: 0.8 diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 921b728a34..8e42255f67 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -53,11 +53,10 @@ stop_object_velocity_threshold: 0.25 # [m/s] velocity threshold for the module to judge whether the objects is stopped (0.25 m/s = 0.9 kmph) min_object_velocity: 1.39 # [m/s] minimum object velocity (compare the estimated velocity by perception module with this parameter and adopt the larger one to calculate TTV. 1.39 m/s = 5.0 kmph) ## param for yielding - disable_stop_for_yield_cancel: true # for the crosswalks with traffic signal disable_yield_for_new_stopped_object: true # for the crosswalks with traffic signal # If the pedestrian does not move for X seconds after the ego has stopped in front the crosswalk, the module judge that the pedestrian has no intention to walk and allows the ego to proceed. - distance_map_for_no_intention_to_walk: [1.0, 5.0] # [m] ascending order - timeout_map_for_no_intention_to_walk: [1.0, 0.0] # [s] + distance_set_for_no_intention_to_walk: [1.0, 5.0] # [m] ascending order + timeout_set_for_no_intention_to_walk: [1.0, 0.0] # [s] timeout_ego_stop_for_yield: 1.0 # [s] If the ego maintains the stop for this amount of time, then the ego proceeds, assuming it has stopped long time enough. # param for target object filtering From 4afc06f12ec0ba398a165595dc4a95285bfd3827 Mon Sep 17 00:00:00 2001 From: Berkay Karaman Date: Fri, 9 Feb 2024 13:26:50 +0300 Subject: [PATCH 421/446] feat(pid_longitudinal_controller): adjust slope compensation parameters (#585) Signed-off-by: Berkay Karaman --- .../control/trajectory_follower/longitudinal/pid.param.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml b/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml index c39088753f..ad6217663f 100644 --- a/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml +++ b/autoware_launch/config/control/trajectory_follower/longitudinal/pid.param.yaml @@ -69,8 +69,9 @@ max_jerk: 2.0 min_jerk: -5.0 - # pitch - use_trajectory_for_pitch_calculation: false + # slope compensation lpf_pitch_gain: 0.95 + slope_source: "raw_pitch" # raw_pitch, trajectory_pitch or trajectory_adaptive + adaptive_trajectory_velocity_th: 1.0 max_pitch_rad: 0.1 min_pitch_rad: -0.1 From fe35f03b0c1383a0825c619c38c47e75340f0cf1 Mon Sep 17 00:00:00 2001 From: Yoshi Ri Date: Sat, 10 Feb 2024 23:21:09 +0900 Subject: [PATCH 422/446] chore(radar_object_tracker): move radar object tracker param to yaml (#838) chore: move radar object tracker param to yaml Signed-off-by: yoshiri --- .../radar_object_tracker/radar_object_tracker.param.yaml | 3 +++ .../launch/components/tier4_perception_component.launch.xml | 4 ---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml index d2c0841cf3..3a1e9f02c3 100644 --- a/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml +++ b/autoware_launch/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml @@ -24,3 +24,6 @@ max_distance_from_lane: 5.0 # [m] max_angle_diff_from_lane: 0.785398 # [rad] (45 deg) max_lateral_velocity: 7.0 # [m/s] + + # tracking model parameters + tracking_config_directory: $(find-pkg-share autoware_launch)/config/perception/object_recognition/tracking/radar_object_tracker/tracking/ diff --git a/autoware_launch/launch/components/tier4_perception_component.launch.xml b/autoware_launch/launch/components/tier4_perception_component.launch.xml index 3519d5780d..3b0f8eca46 100644 --- a/autoware_launch/launch/components/tier4_perception_component.launch.xml +++ b/autoware_launch/launch/components/tier4_perception_component.launch.xml @@ -127,10 +127,6 @@ name="object_recognition_tracking_radar_object_tracker_node_param_path" value="$(find-pkg-share autoware_launch)/config/perception/object_recognition/tracking/radar_object_tracker/radar_object_tracker.param.yaml" /> - Date: Sun, 11 Feb 2024 11:13:42 +0900 Subject: [PATCH 423/446] fix(avoidance): tuning shiftable ratio & deviation param (#869) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 52724cdda0..49978d07d2 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -127,7 +127,7 @@ object_check_return_pose_distance: 20.0 # [m] # filtering parking objects threshold_distance_object_is_on_center: 1.0 # [m] - object_check_shiftable_ratio: 0.6 # [-] + object_check_shiftable_ratio: 0.8 # [-] object_check_min_road_shoulder_width: 0.5 # [m] # lost object compensation object_last_seen_threshold: 2.0 @@ -206,7 +206,7 @@ hard_road_shoulder_margin: 0.3 # [m] max_right_shift_length: 5.0 max_left_shift_length: 5.0 - max_deviation_from_lane: 0.5 # [m] + max_deviation_from_lane: 0.2 # [m] # avoidance distance parameters longitudinal: min_prepare_time: 1.0 # [s] From 1a31b4b7013e31e4772c01711ae1bf2426c51414 Mon Sep 17 00:00:00 2001 From: Ahmed Ebrahim <36835765+ahmeddesokyebrahim@users.noreply.github.com> Date: Mon, 12 Feb 2024 19:42:20 +0200 Subject: [PATCH 424/446] fix(log-messages): reduce excessive log messages (#760) Signed-off-by: AhmedEbrahim --- .../control/control_validator/control_validator.param.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/autoware_launch/config/control/control_validator/control_validator.param.yaml b/autoware_launch/config/control/control_validator/control_validator.param.yaml index c51cbafba2..ffd259e5e5 100644 --- a/autoware_launch/config/control/control_validator/control_validator.param.yaml +++ b/autoware_launch/config/control/control_validator/control_validator.param.yaml @@ -1,8 +1,6 @@ /**: ros__parameters: - publish_diag: false # if true, diagnostic msg is published - # If the number of consecutive invalid predicted_path exceeds this threshold, the Diag will be set to ERROR. # (For example, threshold = 1 means, even if the predicted_path is invalid, Diag will not be ERROR if # the next predicted_path is valid.) From 2db8354615d88dc5bf6b6188f7a90ef229d3a3f5 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 13 Feb 2024 13:37:48 +0900 Subject: [PATCH 425/446] feat(goal_planne): check objects within the area between ego edge and boudary of pull_over_lanes (#867) Signed-off-by: Mamoru Sobue --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 6d82e7790d..66542e1bf1 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -39,6 +39,9 @@ object_recognition_collision_check_max_extra_stopping_margin: 1.0 th_moving_object_velocity: 1.0 detection_bound_offset: 15.0 + outer_road_detection_offset: 1.0 + inner_road_detection_offset: 0.0 + # pull over pull_over: From f5ca49c53f3151e6442023721f3745f9914c2652 Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Tue, 13 Feb 2024 14:25:35 +0900 Subject: [PATCH 426/446] feat(planning_simulator): use fit_target=vector_map in planning_simulator (#859) * Added fit_target Signed-off-by: Shintaro Sakoda * Fixed arg name Signed-off-by: Shintaro Sakoda --------- Signed-off-by: Shintaro Sakoda --- autoware_launch/launch/planning_simulator.launch.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/launch/planning_simulator.launch.xml b/autoware_launch/launch/planning_simulator.launch.xml index cf56413121..63443c928f 100644 --- a/autoware_launch/launch/planning_simulator.launch.xml +++ b/autoware_launch/launch/planning_simulator.launch.xml @@ -13,6 +13,8 @@ + + From 1cf2e8f8a11c98d13b4b7c0188d0d0fbaaf46269 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Tue, 13 Feb 2024 14:29:50 +0900 Subject: [PATCH 427/446] chore(crosswalk): change LATER param (#868) crosswalk/change-LATER-param Signed-off-by: Yuki Takagi --- .../behavior_velocity_planner/crosswalk.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 8e42255f67..6de22a67dc 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -41,7 +41,7 @@ ego_pass_first_margin_y: [3.0] # [[s]] time to vehicle margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) ego_pass_first_additional_margin: 0.5 # [s] additional time margin for ego pass first situation to suppress chattering ego_pass_later_margin_x: [0.0] # [[s]] time to vehicle margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) - ego_pass_later_margin_y: [10.0] # [[s]] time to collision margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) + ego_pass_later_margin_y: [13.0] # [[s]] time to collision margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) ego_pass_later_additional_margin: 0.5 # [s] additional time margin for object pass first situation to suppress chattering no_stop_decision: # parameters to determine if it is safe to attempt stopping before the crosswalk From 6a2320e0709a898de64a83d1f44d5e4b73a75765 Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Tue, 13 Feb 2024 17:38:31 +0900 Subject: [PATCH 428/446] fix(localization): add ar tag based localizer param (#871) Added ar_tag_based_localizer.param.yaml Signed-off-by: Shintaro Sakoda --- .../ar_tag_based_localizer.param.yaml | 40 +++++++++++++++++++ .../tier4_localization_component.launch.xml | 3 ++ 2 files changed, 43 insertions(+) create mode 100644 autoware_launch/config/localization/ar_tag_based_localizer.param.yaml diff --git a/autoware_launch/config/localization/ar_tag_based_localizer.param.yaml b/autoware_launch/config/localization/ar_tag_based_localizer.param.yaml new file mode 100644 index 0000000000..e8f9016537 --- /dev/null +++ b/autoware_launch/config/localization/ar_tag_based_localizer.param.yaml @@ -0,0 +1,40 @@ +/**: + ros__parameters: + # marker_size + marker_size: 0.6 + + # target_tag_ids + target_tag_ids: ['0','1','2','3','4','5','6'] + + # base_covariance + # This value is dynamically scaled according to the distance at which AR tags are detected. + base_covariance: [0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.2, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.02, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.02, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.02] + + # Detect AR-Tags within this range and publish the pose of ego vehicle + distance_threshold: 13.0 # [m] + + # consider_orientation + consider_orientation: false + + # Detector parameters + # See https://github.com/pal-robotics/aruco_ros/blob/7787a6794d30c248bc546d1582e65dd47bc40c12/aruco/include/aruco/markerdetector.h#L106-L126 + detection_mode: "DM_NORMAL" # select from [DM_NORMAL, DM_FAST, DM_VIDEO_FAST] + min_marker_size: 0.02 + + # Parameters for comparison with EKF Pose + # If the difference between the EKF pose and the current pose is within the range of values set below, the current pose is published. + # [How to determine the value] + # * ekf_time_tolerance: Since it is abnormal if the data comes too old from EKF, the tentative tolerance value is set at 5 seconds. + # This value is assumed to be unaffected even if it is increased or decreased by some amount. + # * ekf_position_tolerance: Since it is possible that multiple AR tags with the same ID could be placed, the tolerance should be as small as possible. + # And if the vehicle is running only on odometry in a section without AR tags, + # it is possible that self-position estimation could be off by a few meters. + # it should be fixed by AR tag detection, so tolerance should not be smaller than 10 meters. + # Therefore, the tolerance is set at 10 meters. + ekf_time_tolerance: 5.0 # [s] + ekf_position_tolerance: 10.0 # [m] diff --git a/autoware_launch/launch/components/tier4_localization_component.launch.xml b/autoware_launch/launch/components/tier4_localization_component.launch.xml index c5117009d2..3ccd98104d 100644 --- a/autoware_launch/launch/components/tier4_localization_component.launch.xml +++ b/autoware_launch/launch/components/tier4_localization_component.launch.xml @@ -52,6 +52,9 @@ + + + From 07d12301e03857416a77ce2beb13774aa62d1cfc Mon Sep 17 00:00:00 2001 From: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> Date: Wed, 14 Feb 2024 13:26:20 +0900 Subject: [PATCH 429/446] feat(motion_velocity_smoother): increase engage_acceleration (#736) * feat(motion_velocity_smoother): increase engage_acceleration * Update autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml --- .../motion_velocity_smoother.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml index 4b6693f150..cfe03102a1 100644 --- a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml @@ -26,7 +26,7 @@ # engage & replan parameters replan_vel_deviation: 5.53 # velocity deviation to replan initial velocity [m/s] engage_velocity: 0.25 # engage velocity threshold [m/s] (if the trajectory velocity is higher than this value, use this velocity for engage vehicle speed) - engage_acceleration: 0.1 # engage acceleration [m/ss] (use this acceleration when engagement) + engage_acceleration: 0.5 # engage acceleration [m/ss] (use this acceleration when engagement) engage_exit_ratio: 0.5 # exit engage sequence to normal velocity planning when the velocity exceeds engage_exit_ratio x engage_velocity. stop_dist_to_prohibit_engage: 0.5 # if the stop point is in this distance, the speed is set to 0 not to move the vehicle [m] From 1a6dbe2ea610263c12936b9323c5bfe9e2b6f852 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 14 Feb 2024 21:32:27 +0900 Subject: [PATCH 430/446] feat: define common max_vel (#870) Signed-off-by: Takayuki Murooka --- .../config/planning/scenario_planning/common/common.param.yaml | 2 ++ .../motion_velocity_smoother.param.yaml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/common/common.param.yaml b/autoware_launch/config/planning/scenario_planning/common/common.param.yaml index 03958fda9a..face8610c7 100644 --- a/autoware_launch/config/planning/scenario_planning/common/common.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/common.param.yaml @@ -1,5 +1,7 @@ /**: ros__parameters: + max_vel: 11.1 # max velocity limit [m/s] + # constraints param for normal driving normal: min_acc: -1.0 # min deceleration [m/ss] diff --git a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml index cfe03102a1..ff97ae8dfb 100644 --- a/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/motion_velocity_smoother/motion_velocity_smoother.param.yaml @@ -1,7 +1,6 @@ /**: ros__parameters: # motion state constraints - max_velocity: 20.0 # max velocity limit [m/s] stop_decel: 0.0 # deceleration at a stop point[m/ss] # external velocity limit parameter From 39892b18358bb024ea68db611e33c377419e66d2 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Thu, 15 Feb 2024 00:57:22 +0900 Subject: [PATCH 431/446] refactor(blind_spot): find first_conflicting_lane just as intersection module (#873) temp Signed-off-by: Mamoru Sobue --- .../behavior_velocity_planner/blind_spot.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml index 7bd7d88230..424029300a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/blind_spot.param.yaml @@ -4,7 +4,7 @@ use_pass_judge_line: true stop_line_margin: 1.0 # [m] backward_length: 50.0 # [m] - ignore_width_from_center_line: 0.7 # [m] + ignore_width_from_center_line: 0.0 # [m] max_future_movement_time: 10.0 # [second] threshold_yaw_diff: 0.523 # [rad] adjacent_extend_width: 1.5 # [m] From 6c6e8640e6725e137a0650c389af2cfceb0cd25a Mon Sep 17 00:00:00 2001 From: Zhe Shen <80969277+HansOersted@users.noreply.github.com> Date: Thu, 15 Feb 2024 08:40:17 +0900 Subject: [PATCH 432/446] feat(tier4_control_launch): disable the trajectory extension (#866) disable the trajectory extending for terminal yaw control Signed-off-by: Zhe Shen --- .../config/control/trajectory_follower/lateral/mpc.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml index 9998b6aadf..7820c562e8 100644 --- a/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml +++ b/autoware_launch/config/control/trajectory_follower/lateral/mpc.param.yaml @@ -13,7 +13,7 @@ curvature_smoothing_num_ref_steer: 15 # point-to-point index distance used in curvature calculation (for steer command reference): curvature is calculated from three points p(i-num), p(i), p(i+num) # -- trajectory extending -- - extend_trajectory_for_end_yaw_control: true # flag of trajectory extending for terminal yaw control + extend_trajectory_for_end_yaw_control: false # flag of trajectory extending for terminal yaw control # -- mpc optimization -- qp_solver_type: "osqp" # optimization solver option (unconstraint_fast or osqp) From bb8e579f2aad82982e38308ee7d92905970bc099 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 15 Feb 2024 09:10:41 +0900 Subject: [PATCH 433/446] fix(planning_validator): add missing params (#876) Signed-off-by: satoshi-ota --- .../planning_validator/planning_validator.param.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/common/planning_validator/planning_validator.param.yaml b/autoware_launch/config/planning/scenario_planning/common/planning_validator/planning_validator.param.yaml index 658a968906..da337d70b1 100644 --- a/autoware_launch/config/planning/scenario_planning/common/planning_validator/planning_validator.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/common/planning_validator/planning_validator.param.yaml @@ -26,3 +26,14 @@ steering_rate: 10.0 velocity_deviation: 100.0 distance_deviation: 100.0 + longitudinal_distance_deviation: 1.0 + + parameters: + # The required trajectory length is calculated as the distance needed + # to stop from the current speed at this deceleration. + forward_trajectory_length_acceleration: -3.0 + + # An error is raised if the required trajectory length is less than this distance. + # Setting it to 0 means an error will occur if even slightly exceeding the end of the path, + # therefore, a certain margin is necessary. + forward_trajectory_length_margin: 2.0 From 3fff913415566244fde4b7890d9c2179e61f6824 Mon Sep 17 00:00:00 2001 From: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> Date: Thu, 15 Feb 2024 13:35:33 +0900 Subject: [PATCH 434/446] chore(start_planner): remove unused parameter (#878) Signed-off-by: Shumpei Wakabayashi --- .../behavior_path_planner/start_planner/start_planner.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 5edf7d468b..cfa630b24b 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -6,7 +6,6 @@ th_stopped_velocity: 0.01 th_stopped_time: 1.0 collision_check_margins: [2.0, 1.0, 0.5, 0.1] - collision_check_distance_from_end: -10.0 collision_check_margin_from_front_object: 5.0 th_moving_object_velocity: 1.0 th_distance_to_middle_of_the_road: 0.5 From a6141ab4e75a00b3a7663160d77540f6a8b60a59 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Thu, 15 Feb 2024 14:10:51 +0900 Subject: [PATCH 435/446] fix(start_planner): fix safety_check_time_horizon (#875) Signed-off-by: kosuke55 --- .../start_planner/start_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index cfa630b24b..3fed8bd726 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -92,7 +92,7 @@ delay_until_departure: 1.0 # For target object filtering target_filtering: - safety_check_time_horizon: 5.0 + safety_check_time_horizon: 10.0 safety_check_time_resolution: 1.0 # detection range object_check_forward_distance: 10.0 From 59556db9794164f3c54a1f29c0b708115d25db57 Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Thu, 15 Feb 2024 18:11:28 +0900 Subject: [PATCH 436/446] fix(system_error_monitor): changed settings of /autoware/localization/performance_monitoring (#877) Fixed settings of /autoware/localization/performance_monitoring Signed-off-by: Shintaro Sakoda --- .../system_error_monitor/system_error_monitor.awsim.param.yaml | 2 ++ .../system/system_error_monitor/system_error_monitor.param.yaml | 1 + 2 files changed, 3 insertions(+) diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml index 69e3831591..a3c712d466 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.awsim.param.yaml @@ -24,6 +24,8 @@ /autoware/localization/node_alive_monitoring: default /autoware/localization/performance_monitoring/matching_score: { sf_at: "warn", lf_at: "none", spf_at: "none" } /autoware/localization/performance_monitoring/localization_error_ellipse: { sf_at: "warn", lf_at: "none", spf_at: "none" } + /autoware/localization/performance_monitoring/localization_stability: { sf_at: "warn", lf_at: "none", spf_at: "none" } + /autoware/localization/performance_monitoring/sensor_fusion_status: { sf_at: "warn", lf_at: "none", spf_at: "none" } /autoware/map/node_alive_monitoring: default diff --git a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml index d8229425af..2826e9348c 100644 --- a/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml +++ b/autoware_launch/config/system/system_error_monitor/system_error_monitor.param.yaml @@ -24,6 +24,7 @@ /autoware/localization/node_alive_monitoring: default /autoware/localization/performance_monitoring/matching_score: { sf_at: "warn", lf_at: "none", spf_at: "none" } /autoware/localization/performance_monitoring/localization_error_ellipse: default + /autoware/localization/performance_monitoring/localization_stability: default /autoware/localization/performance_monitoring/sensor_fusion_status: { sf_at: "error", lf_at: "none", spf_at: "none" } /autoware/map/node_alive_monitoring: default From a2532da0279beb1da7401941b321d26c7b8007bb Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 16 Feb 2024 17:56:31 +0900 Subject: [PATCH 437/446] feat(avoidance): use free steer policy for safety check (#865) Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 49978d07d2..2ac846ed25 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -187,6 +187,7 @@ time_horizon_for_rear_object: 10.0 # [s] delay_until_departure: 0.0 # [s] # rss parameters + extended_polygon_policy: "along_path" # [-] select "rectangle" or "along_path" expected_front_deceleration: -1.0 # [m/ss] expected_rear_deceleration: -1.0 # [m/ss] rear_vehicle_reaction_time: 2.0 # [s] From 39fbda1e496a50c2ec5683e8775d08bb504269c6 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 20 Feb 2024 13:52:48 +0900 Subject: [PATCH 438/446] feat(strat_planner): add a prepare time for blinker before taking action for approval (#881) Signed-off-by: Mamoru Sobue --- .../behavior_path_planner/start_planner/start_planner.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml index 3fed8bd726..2c55e9fad5 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/start_planner/start_planner.param.yaml @@ -38,6 +38,7 @@ backward_path_update_duration: 3.0 ignore_distance_from_lane_end: 15.0 # turns signal + prepare_time_before_start: 0.0 th_turn_signal_on_lateral_offset: 1.0 intersection_search_length: 30.0 length_ratio_for_turn_signal_deactivation_near_intersection: 0.5 From 9039471f84b634fc57962180e054c8d5b8211998 Mon Sep 17 00:00:00 2001 From: Tomohito ANDO Date: Tue, 20 Feb 2024 14:13:30 +0900 Subject: [PATCH 439/446] feat(traffic_light_arbiter): add parameter of signal match validator (#879) Signed-off-by: Tomohito Ando --- .../traffic_light_arbiter/traffic_light_arbiter.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/perception/traffic_light_arbiter/traffic_light_arbiter.param.yaml b/autoware_launch/config/perception/traffic_light_arbiter/traffic_light_arbiter.param.yaml index 5dc2b62eaa..dfe12ff352 100644 --- a/autoware_launch/config/perception/traffic_light_arbiter/traffic_light_arbiter.param.yaml +++ b/autoware_launch/config/perception/traffic_light_arbiter/traffic_light_arbiter.param.yaml @@ -3,3 +3,4 @@ external_time_tolerance: 5.0 perception_time_tolerance: 1.0 external_priority: false + enable_signal_matching: false From b23c5f948421037d2bf81dd340015c4b2fd1602c Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 20 Feb 2024 20:13:31 +0900 Subject: [PATCH 440/446] feat(goal_planner): change pull over path candidate priority with soft and hard margins (#874) Signed-off-by: kosuke55 --- .../behavior_path_planner/goal_planner/goal_planner.param.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml index 66542e1bf1..eea6d0acdc 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/goal_planner/goal_planner.param.yaml @@ -35,7 +35,8 @@ # object recognition object_recognition: use_object_recognition: true - object_recognition_collision_check_margin: 0.6 # this should be larger than `surround_check_distance` of surround_obstacle_checker + collision_check_soft_margins: [2.0, 1.5, 1.0] + collision_check_hard_margins: [0.6] # this should be larger than `surround_check_distance` of surround_obstacle_checker object_recognition_collision_check_max_extra_stopping_margin: 1.0 th_moving_object_velocity: 1.0 detection_bound_offset: 15.0 From c86e9a2d34b088e5759e94d0800ed4de18b20acc Mon Sep 17 00:00:00 2001 From: Shintaro Tomie <58775300+Shin-kyoto@users.noreply.github.com> Date: Tue, 20 Feb 2024 21:30:20 +0900 Subject: [PATCH 441/446] fix: recovery default parameter (#882) Signed-off-by: Shin-kyoto --- .../detection/lidar_model/pointpainting.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml index 8ccd469786..3abaffb243 100755 --- a/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml +++ b/autoware_launch/config/perception/object_recognition/detection/lidar_model/pointpainting.param.yaml @@ -26,7 +26,7 @@ iou_nms_target_class_names: ["CAR"] iou_nms_search_distance_2d: 10.0 iou_nms_threshold: 0.1 - score_threshold: 0.4 + score_threshold: 0.35 omp_params: # omp params num_threads: 1 From 2b510453aa2ea950513067b62248f7aedfbf1b41 Mon Sep 17 00:00:00 2001 From: pawellech1 <111358112+pawellech1@users.noreply.github.com> Date: Tue, 20 Feb 2024 16:18:15 +0100 Subject: [PATCH 442/446] =?UTF-8?q?feat(autoware=5Flaunch):=20set=20use=5F?= =?UTF-8?q?sim=5Ftime=20parameter=20equal=20to=20true=20when=20=E2=80=A6?= =?UTF-8?q?=20(#746)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Paweł Lech --- autoware_launch/launch/planning_simulator.launch.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/autoware_launch/launch/planning_simulator.launch.xml b/autoware_launch/launch/planning_simulator.launch.xml index 63443c928f..882ea9d9f9 100644 --- a/autoware_launch/launch/planning_simulator.launch.xml +++ b/autoware_launch/launch/planning_simulator.launch.xml @@ -41,6 +41,8 @@ + + From 9b750b10bd5ceebac0df1f918be35f79254900d4 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Wed, 21 Feb 2024 12:00:11 +0900 Subject: [PATCH 443/446] feat(lane_change): cancel hysteresis (#844) * feat(lane_change): cancel hysteresis Signed-off-by: Muhammad Zulfaqar Azmi * reduce the hysteresis value Signed-off-by: Zulfaqar Azmi --------- Signed-off-by: Muhammad Zulfaqar Azmi Signed-off-by: Zulfaqar Azmi --- .../behavior_path_planner/lane_change/lane_change.param.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml index 57899fada8..a25234e100 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml @@ -103,6 +103,7 @@ duration: 5.0 # [s] max_lateral_jerk: 100.0 # [m/s3] overhang_tolerance: 0.0 # [m] + unsafe_hysteresis_threshold: 5 # [/] finish_judge_lateral_threshold: 0.2 # [m] From e06b167e6cb575f1620f92236bbad0cc1f9cd156 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Thu, 22 Feb 2024 13:30:51 +0900 Subject: [PATCH 444/446] feat(crosswalk): add parameters for occlusion slowdown feature (#807) Signed-off-by: Maxime CLEMENT --- .../crosswalk.param.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml index 6de22a67dc..87140169b4 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/crosswalk.param.yaml @@ -68,3 +68,20 @@ bicycle: true # [-] whether to look and stop by BICYCLE objects motorcycle: true # [-] whether to look and stop by MOTORCYCLE objects (tmp: currently it is difficult for perception modules to detect bicycles and motorcycles separately.) pedestrian: true # [-] whether to look and stop by PEDESTRIAN objects + + # param for occlusions + occlusion: + enable: true # if true, ego will slowdown around crosswalks that are occluded + occluded_object_velocity: 1.0 # [m/s] assumed velocity of objects that may come out of the occluded space + slow_down_velocity: 1.0 # [m/s] + time_buffer: 0.5 # [s] consecutive time with/without an occlusion to add/remove the slowdown + min_size: 0.5 # [m] minimum size of an occlusion (square side size) + free_space_max: 43 # [-] maximum value of a free space cell in the occupancy grid + occupied_min: 58 # [-] minimum value of an occupied cell in the occupancy grid + ignore_with_red_traffic_light: true # [-] if true, occlusions at crosswalks with traffic lights are ignored + ignore_behind_predicted_objects: true # [-] if true, occlusions behind predicted objects are ignored + ignore_velocity_thresholds: + default: 0.5 # [m/s] occlusions are only ignored behind objects with a higher or equal velocity + custom_labels: ["PEDESTRIAN"] # labels for which to define a non-default velocity threshold (see autoware_auto_perception_msgs::msg::ObjectClassification for all the labels) + custom_thresholds: [0.0] # velocities of the custom labels + extra_predicted_objects_size: 0.5 # [m] extra size added to the objects for masking the occlusions From b4d9bb040ba6b515e793a0d03bcf234798f2c629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Fri, 23 Feb 2024 00:08:36 +0300 Subject: [PATCH 445/446] feat(rviz): make rviz2 background lighter, lower the contrast (#887) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- autoware_launch/rviz/autoware.rviz | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoware_launch/rviz/autoware.rviz b/autoware_launch/rviz/autoware.rviz index f73b720b5d..9b998dc29b 100644 --- a/autoware_launch/rviz/autoware.rviz +++ b/autoware_launch/rviz/autoware.rviz @@ -3613,7 +3613,7 @@ Visualization Manager: Name: Debug Enabled: true Global Options: - Background Color: 10; 10; 10 + Background Color: 42; 42; 42 Default Light: true Fixed Frame: map Frame Rate: 30 From 618e790dd9303386279dae777a5ccab02d571097 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 28 Feb 2024 08:56:12 +0900 Subject: [PATCH 446/446] feat(avoidance): wait next shift approval until the ego reaches shift length threshold (#891) * feat(avoidance): wait next shift approval until the ego reaches shift length threshold Signed-off-by: satoshi-ota * fix(avoidance): param description Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../behavior_path_planner/avoidance/avoidance.param.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml index 2ac846ed25..3d59774e4a 100644 --- a/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml +++ b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/avoidance/avoidance.param.yaml @@ -208,6 +208,10 @@ max_right_shift_length: 5.0 max_left_shift_length: 5.0 max_deviation_from_lane: 0.2 # [m] + # approve the next shift line after reaching this percentage of the current shift line length. + # this parameter is added to allow waiting for the return of shift approval until the occlusion behind the avoid target is clear. + # this feature can be disabled by setting this parameter to 0.0. + ratio_for_return_shift_approval: 0.5 # [-] # avoidance distance parameters longitudinal: min_prepare_time: 1.0 # [s]