36 const std::string& name,
37 const std::shared_ptr<DependencyInjector>& injector) {
42 return TrafficRule::LoadConfig<BacksideVehicleConfig>(&config_);
45void BacksideVehicle::MakeLaneKeepingObstacleDecision(
48 ObjectDecisionType ignore;
49 ignore.mutable_ignore();
50 const double adc_length_s =
52 for (
const auto* obstacle : path_decision->obstacles().Items()) {
53 if (obstacle->PerceptionSLBoundary().end_s() >= adc_sl_boundary.
start_s()) {
58 if (obstacle->IsCautionLevelObstacle() &&
59 obstacle->PerceptionSLBoundary().start_s() >=
65 if (obstacle->reference_line_st_boundary().IsEmpty()) {
67 obstacle->Id(), ignore);
69 obstacle->Id(), ignore);
73 if (obstacle->reference_line_st_boundary().min_s() < -adc_length_s) {
75 obstacle->Id(), ignore);
77 obstacle->Id(), ignore);
82 if (obstacle->PerceptionSLBoundary().start_s() < adc_sl_boundary.
end_s()) {
83 if (obstacle->PerceptionSLBoundary().start_l() > lane_boundary ||
84 obstacle->PerceptionSLBoundary().end_l() < -lane_boundary) {
88 obstacle->Id(), ignore);
90 obstacle->Id(), ignore);
94 if (PredictionLineOverlapEgo(*obstacle, vehicle_state)) {
95 ADEBUG <<
"Prediction Line Overlap Ego Obstacle " << obstacle->Id();
97 "prediction line overlap ego",
98 obstacle->Id(), ignore);
100 "prediction line overlap ego",
101 obstacle->Id(), ignore);
110 const auto& adc_sl_boundary = reference_line_info->
AdcSlBoundary();
114 MakeLaneKeepingObstacleDecision(adc_sl_boundary, path_decision,
120bool BacksideVehicle::PredictionLineOverlapEgo(
124 if (trajectory.empty())
return false;
126 const auto vehicle_param =
128 Box2d adc_box({vehicle_state.
x(), vehicle_state.
y()}, vehicle_state.
heading(),
129 vehicle_param.length(), vehicle_param.width());
130 Polygon2d adc_polygon(adc_box);
131 for (
auto& point : trajectory) {
133 if (adc_polygon.HasOverlap(obs_polygon)) {
A general class to denote the return status of an API call.
static Status OK()
generate a success status.
static const VehicleConfig & GetConfig()
Get the current vehicle configuration.
Rectangular (undirected) bounding box in 2-D.
The class of polygon in 2-D.
bool Init(const std::string &name, const std::shared_ptr< DependencyInjector > &injector) override
common::Status ApplyRule(Frame *const frame, ReferenceLineInfo *const reference_line_info)
Frame holds all data for one planning cycle.
This is the class that associates an Obstacle with its path properties.
const prediction::Trajectory & Trajectory() const
common::math::Polygon2d GetObstacleTrajectoryPolygon(const common::TrajectoryPoint &point) const
PathDecision represents all obstacle decisions on one path.
bool AddLateralDecision(const std::string &tag, const std::string &object_id, const ObjectDecisionType &decision)
bool AddLongitudinalDecision(const std::string &tag, const std::string &object_id, const ObjectDecisionType &decision)
ReferenceLineInfo holds all data for one reference line.
PathDecision * path_decision()
const common::VehicleState & vehicle_state() const
const hdmap::RouteSegments & Lanes() const
const SLBoundary & AdcSlBoundary() const
virtual bool Init(const std::string &name, const std::shared_ptr< DependencyInjector > &injector)
Planning module main class.
optional VehicleParam vehicle_param
optional double backside_lane_width
repeated apollo::common::TrajectoryPoint trajectory_point