diff --git a/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp index c0052d4ff1b3e..d8ea5bbc3a486 100644 --- a/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp +++ b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp @@ -83,7 +83,7 @@ MPCTrajectory KinematicsBicycleModel::calculatePredictedTrajectoryInWorldCoordin // create initial state in the world coordinate Eigen::VectorXd state_w = [&]() { - Eigen::VectorXd state = Eigen::VectorXd::Zero(3); + Eigen::VectorXd state = Eigen::VectorXd::Zero(4); const auto lateral_error_0 = x0(0); const auto yaw_error_0 = x0(1); state(0, 0) = t.x.at(0) - std::sin(t.yaw.at(0)) * lateral_error_0; // world-x diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/config/obstacle_stop.param.yaml b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/config/obstacle_stop.param.yaml index 4203a94df43a9..b50284dd42306 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/config/obstacle_stop.param.yaml +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/config/obstacle_stop.param.yaml @@ -10,6 +10,8 @@ terminal_stop_margin : 3.0 # Stop margin at the goal. This value cannot exceed stop margin. [m] min_behavior_stop_margin: 3.0 # [m] + additional_stop_margin_opposing_traffic: 5.0 + 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] diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/obstacle_stop_module.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/obstacle_stop_module.cpp index f739bed1f1d69..1fe0d22ee3eff 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/obstacle_stop_module.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/obstacle_stop_module.cpp @@ -890,15 +890,19 @@ double ObstacleStopModule::calc_desired_stop_margin( const double dist_to_collide_on_ref_traj) { // calculate default stop margin - const double default_stop_margin = [&]() { - const auto ref_traj_length = - autoware::motion_utils::calcSignedArcLength(traj_points, 0, traj_points.size() - 1); - if (dist_to_collide_on_ref_traj > ref_traj_length) { - // Use terminal margin (terminal_stop_margin) for obstacle stop - return stop_planning_param_.terminal_stop_margin; - } - return stop_planning_param_.stop_margin; - }(); + const double default_stop_margin = + [&]() { + const auto ref_traj_length = + autoware::motion_utils::calcSignedArcLength(traj_points, 0, traj_points.size() - 1); + if (dist_to_collide_on_ref_traj > ref_traj_length) { + // Use terminal margin (terminal_stop_margin) for obstacle stop + return stop_planning_param_.terminal_stop_margin; + } + return stop_planning_param_.stop_margin; + }() + + (stop_obstacle.velocity < 0.0) + ? stop_planning_param_.additional_stop_margin_opposing_traffic + : 0.0; // calculate stop margin on curve const double stop_margin_on_curve = calc_margin_from_obstacle_on_curve( @@ -915,10 +919,14 @@ double ObstacleStopModule::calc_desired_stop_margin( const double stop_dist_diff = closest_behavior_stop_dist_on_ref_traj - (dist_to_collide_on_ref_traj - stop_margin_on_curve); if (0.0 < stop_dist_diff && stop_dist_diff < stop_margin_on_curve) { - return stop_planning_param_.min_behavior_stop_margin; + return stop_planning_param_.min_behavior_stop_margin + (stop_obstacle.velocity < 0.0) + ? stop_planning_param_.additional_stop_margin_opposing_traffic + : 0.0; } } - return stop_margin_on_curve; + return stop_margin_on_curve + (stop_obstacle.velocity < 0.0) + ? stop_planning_param_.additional_stop_margin_opposing_traffic + : 0.0; } std::optional ObstacleStopModule::calc_candidate_zero_vel_dist( diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/parameters.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/parameters.hpp index ce910287bb77a..ef817b9cf458f 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/parameters.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_stop_module/src/parameters.hpp @@ -157,6 +157,7 @@ struct StopPlanningParam double stop_margin{}; double terminal_stop_margin{}; double min_behavior_stop_margin{}; + double additional_stop_margin_opposing_traffic{}; double hold_stop_velocity_threshold{}; double hold_stop_distance_threshold{}; bool enable_approaching_on_curve{}; @@ -185,6 +186,8 @@ struct StopPlanningParam get_or_declare_parameter(node, "obstacle_stop.stop_planning.terminal_stop_margin"); min_behavior_stop_margin = get_or_declare_parameter( node, "obstacle_stop.stop_planning.min_behavior_stop_margin"); + additional_stop_margin_opposing_traffic = get_or_declare_parameter( + node, "obstacle_stop.stop_planning.additional_stop_margin_opposing_traffic"); hold_stop_velocity_threshold = get_or_declare_parameter( node, "obstacle_stop.stop_planning.hold_stop_velocity_threshold"); hold_stop_distance_threshold = get_or_declare_parameter(