Skip to content

Commit

Permalink
feat(lane_change): use external velocity limit in safety check
Browse files Browse the repository at this point in the history
Signed-off-by: Muhammad Zulfaqar <[email protected]>
  • Loading branch information
zulfaqar-azmi-t4 committed Apr 8, 2024
1 parent 35642a6 commit bfb7be8
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 9 deletions.
13 changes: 8 additions & 5 deletions planning/behavior_path_lane_change_module/src/scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1954,10 +1954,13 @@ PathSafetyStatus NormalLaneChange::isLaneChangePathSafe(
target_objects.other_lane.end());
}

const auto expanded_target_lanes = utils::lane_change::generateExpandedLanelets(
lane_change_path.info.target_lanes, direction_,
lane_change_parameters_->lane_expansion_left_offset,
lane_change_parameters_->lane_expansion_right_offset);
const auto extenal_velocity_limit_ptr = planner_data_->external_limit_max_velocity;
const auto max_velocity_limit = (extenal_velocity_limit_ptr) ? std::min(static_cast<double>(extenal_velocity_limit_ptr->max_velocity), getCommonParam().max_vel) : getCommonParam().max_vel;

const auto expanded_target_lanes = utils::lane_change::generateExpandedLanelets(
lane_change_path.info.target_lanes, direction_,
lane_change_parameters_->lane_expansion_left_offset,
lane_change_parameters_->lane_expansion_right_offset);

for (const auto & obj : collision_check_objects) {
auto current_debug_data = utils::path_safety_checker::createObjectDebug(obj);
Expand All @@ -1966,7 +1969,7 @@ PathSafetyStatus NormalLaneChange::isLaneChangePathSafe(
auto is_safe = true;
for (const auto & obj_path : obj_predicted_paths) {
const auto collided_polygons = utils::path_safety_checker::getCollidedPolygons(
path, ego_predicted_path, obj, obj_path, common_parameters, rss_params, 1.0,
path, ego_predicted_path, obj, obj_path, common_parameters, rss_params, 1.0, max_velocity_limit,
current_debug_data.second);

if (collided_polygons.empty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "behavior_path_planner_common/interface/steering_factor_interface.hpp"
#include "tier4_autoware_utils/ros/logger_level_configure.hpp"

#include <rclcpp/subscription.hpp>
#include <tier4_autoware_utils/ros/published_time_publisher.hpp>

#include <autoware_adapi_v1_msgs/msg/operation_mode_state.hpp>
Expand All @@ -36,6 +37,7 @@
#include <nav_msgs/msg/odometry.hpp>
#include <tier4_planning_msgs/msg/approval.hpp>
#include <tier4_planning_msgs/msg/avoidance_debug_msg_array.hpp>
#include <tier4_planning_msgs/msg/detail/velocity_limit__struct.hpp>
#include <tier4_planning_msgs/msg/path_change_module.hpp>
#include <tier4_planning_msgs/msg/reroute_availability.hpp>
#include <tier4_planning_msgs/msg/scenario.hpp>
Expand Down Expand Up @@ -103,6 +105,8 @@ class BehaviorPathPlannerNode : public rclcpp::Node
rclcpp::Publisher<PoseWithUuidStamped>::SharedPtr modified_goal_publisher_;
rclcpp::Publisher<StopReasonArray>::SharedPtr stop_reason_publisher_;
rclcpp::Publisher<RerouteAvailability>::SharedPtr reroute_availability_publisher_;
rclcpp::Subscription<tier4_planning_msgs::msg::VelocityLimit>::SharedPtr
external_limit_max_velocity_subscriber_;
rclcpp::TimerBase::SharedPtr timer_;

std::map<std::string, rclcpp::Publisher<Path>::SharedPtr> path_candidate_publishers_;
Expand Down Expand Up @@ -142,6 +146,9 @@ class BehaviorPathPlannerNode : public rclcpp::Node
void onRoute(const LaneletRoute::ConstSharedPtr route_msg);
void onOperationMode(const OperationModeState::ConstSharedPtr msg);
void onLateralOffset(const LateralOffset::ConstSharedPtr msg);
void on_external_velocity_limiter(
const tier4_planning_msgs::msg::VelocityLimit::ConstSharedPtr msg);

SetParametersResult onSetParam(const std::vector<rclcpp::Parameter> & parameters);

OnSetParametersCallbackHandle::SharedPtr m_set_param_res;
Expand Down
18 changes: 18 additions & 0 deletions planning/behavior_path_planner/src/behavior_path_planner_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,10 @@
#include <tier4_autoware_utils/ros/update_param.hpp>
#include <vehicle_info_util/vehicle_info_util.hpp>

#include <tier4_planning_msgs/msg/velocity_limit.hpp>
#include <tier4_planning_msgs/msg/path_change_module_id.hpp>

#include <functional>
#include <memory>
#include <string>
#include <vector>
Expand Down Expand Up @@ -112,6 +114,11 @@ BehaviorPathPlannerNode::BehaviorPathPlannerNode(const rclcpp::NodeOptions & nod
current_scenario_ = std::make_shared<Scenario>(*msg);
},
createSubscriptionOptions(this));
external_limit_max_velocity_subscriber_ =
create_subscription<tier4_planning_msgs::msg::VelocityLimit>(
"/planning/scenario_planning/max_velocity", 1,
std::bind(&BehaviorPathPlannerNode::on_external_velocity_limiter, this, _1),
createSubscriptionOptions(this));

// route_handler
vector_map_subscriber_ = create_subscription<HADMapBin>(
Expand Down Expand Up @@ -817,6 +824,17 @@ void BehaviorPathPlannerNode::onOperationMode(const OperationModeState::ConstSha
const std::lock_guard<std::mutex> lock(mutex_pd_);
planner_data_->operation_mode = msg;
}

void BehaviorPathPlannerNode::on_external_velocity_limiter(
const tier4_planning_msgs::msg::VelocityLimit::ConstSharedPtr msg)
{
if(!msg){
return;
}

const std::lock_guard<std::mutex> lock(mutex_pd_);
planner_data_->external_limit_max_velocity = msg;
}
void BehaviorPathPlannerNode::onLateralOffset(const LateralOffset::ConstSharedPtr msg)
{
std::lock_guard<std::mutex> lock(mutex_pd_);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include <geometry_msgs/msg/pose_stamped.hpp>
#include <nav_msgs/msg/occupancy_grid.hpp>
#include <nav_msgs/msg/odometry.hpp>
#include <tier4_planning_msgs/msg/detail/velocity_limit__struct.hpp>
#include <tier4_planning_msgs/msg/lateral_offset.hpp>

#include <limits>
Expand Down Expand Up @@ -65,6 +66,7 @@ using route_handler::RouteHandler;
using tier4_planning_msgs::msg::LateralOffset;
using PlanResult = PathWithLaneId::SharedPtr;
using lanelet::TrafficLight;
using tier4_planning_msgs::msg::VelocityLimit;
using unique_identifier_msgs::msg::UUID;

struct TrafficSignalStamped
Expand Down Expand Up @@ -161,6 +163,7 @@ struct PlannerData
std::map<int64_t, TrafficSignalStamped> traffic_light_id_map;
BehaviorPathPlannerParameters parameters{};
drivable_area_expansion::DrivableAreaExpansionParameters drivable_area_expansion_parameters{};
VelocityLimit::ConstSharedPtr external_limit_max_velocity{};

mutable std::vector<geometry_msgs::msg::Pose> drivable_area_expansion_prev_path_poses{};
mutable std::vector<double> drivable_area_expansion_prev_curvatures{};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ std::vector<Polygon2d> getCollidedPolygons(
const ExtendedPredictedObject & target_object,
const PredictedPathWithPolygon & target_object_path,
const BehaviorPathPlannerParameters & common_parameters, const RSSparams & rss_parameters,
const double hysteresis_factor, CollisionCheckDebug & debug);
const double hysteresis_factor, const double max_velocity_limit, CollisionCheckDebug & debug);

bool checkPolygonsIntersects(
const std::vector<Polygon2d> & polys_1, const std::vector<Polygon2d> & polys_2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <boost/geometry/algorithms/overlaps.hpp>
#include <boost/geometry/algorithms/union.hpp>
#include <boost/geometry/strategies/strategies.hpp>
#include <limits>

namespace behavior_path_planner::utils::path_safety_checker
{
Expand Down Expand Up @@ -560,7 +561,7 @@ bool checkCollision(
{
const auto collided_polygons = getCollidedPolygons(
planned_path, predicted_ego_path, target_object, target_object_path, common_parameters,
rss_parameters, hysteresis_factor, debug);
rss_parameters, hysteresis_factor, std::numeric_limits<double>::max(), debug);
return collided_polygons.empty();
}

Expand All @@ -570,7 +571,7 @@ std::vector<Polygon2d> getCollidedPolygons(
const ExtendedPredictedObject & target_object,
const PredictedPathWithPolygon & target_object_path,
const BehaviorPathPlannerParameters & common_parameters, const RSSparams & rss_parameters,
double hysteresis_factor, CollisionCheckDebug & debug)
double hysteresis_factor, const double max_velocity_limit, CollisionCheckDebug & debug)
{
{
debug.ego_predicted_path = predicted_ego_path;
Expand Down Expand Up @@ -599,7 +600,7 @@ std::vector<Polygon2d> getCollidedPolygons(
}
const auto & ego_pose = interpolated_data->pose;
const auto & ego_polygon = interpolated_data->poly;
const auto & ego_velocity = interpolated_data->velocity;
const auto & ego_velocity = std::min(interpolated_data->velocity, max_velocity_limit);

// check overlap
if (boost::geometry::overlaps(ego_polygon, obj_polygon)) {
Expand Down

0 comments on commit bfb7be8

Please sign in to comment.