26 #include <unordered_map> 29 #include "modules/common/configs/proto/vehicle_config.pb.h" 32 #include "modules/perception/proto/perception_obstacle.pb.h" 35 #include "modules/planning/proto/decision.pb.h" 36 #include "modules/planning/proto/sl_boundary.pb.h" 38 #include "modules/prediction/proto/prediction_obstacle.pb.h" 64 const perception::PerceptionObstacle& perception_obstacle,
65 const prediction::ObstaclePriority::Priority& obstacle_priority,
66 const bool is_static);
68 const perception::PerceptionObstacle& perception_obstacle,
69 const prediction::Trajectory& trajectory,
70 const prediction::ObstaclePriority::Priority& obstacle_priority,
71 const bool is_static);
73 const std::string&
Id()
const {
return id_; }
74 void SetId(
const std::string&
id) { id_ = id; }
76 double speed()
const {
return speed_; }
86 const common::TrajectoryPoint& point)
const;
89 return perception_bounding_box_;
92 return perception_polygon_;
94 const prediction::Trajectory&
Trajectory()
const {
return trajectory_; }
96 return trajectory_.add_trajectory_point();
99 return !(trajectory_.trajectory_point().empty());
103 return perception_obstacle_;
114 const prediction::PredictionObstacles& predictions);
120 const perception::PerceptionObstacle& obstacle);
125 return is_caution_level_obstacle_;
152 const std::vector<ObjectDecisionType>&
decisions()
const;
155 const ObjectDecisionType& decision);
158 const ObjectDecisionType& decision);
164 return path_st_boundary_initialized_;
198 const double adc_start_s);
224 FRIEND_TEST(MergeLongitudinalDecision, AllDecisions);
225 static ObjectDecisionType MergeLongitudinalDecision(
226 const ObjectDecisionType& lhs,
const ObjectDecisionType& rhs);
227 FRIEND_TEST(MergeLateralDecision, AllDecisions);
228 static ObjectDecisionType MergeLateralDecision(
const ObjectDecisionType& lhs,
229 const ObjectDecisionType& rhs);
231 bool BuildTrajectoryStBoundary(
const ReferenceLine& reference_line,
232 const double adc_start_s,
234 bool IsValidObstacle(
235 const perception::PerceptionObstacle& perception_obstacle);
239 int32_t perception_id_ = 0;
240 bool is_static_ =
false;
241 bool is_virtual_ =
false;
244 bool path_st_boundary_initialized_ =
false;
246 prediction::Trajectory trajectory_;
247 perception::PerceptionObstacle perception_obstacle_;
251 std::vector<ObjectDecisionType> decisions_;
252 std::vector<std::string> decider_tags_;
253 SLBoundary sl_boundary_;
258 ObjectDecisionType lateral_decision_;
259 ObjectDecisionType longitudinal_decision_;
262 bool is_blocking_obstacle_ =
false;
264 bool is_lane_blocking_ =
false;
266 bool is_lane_change_blocking_ =
false;
268 bool is_caution_level_obstacle_ =
false;
270 double min_radius_stop_distance_ = -1.0;
272 struct ObjectTagCaseHash {
274 const planning::ObjectDecisionType::ObjectTagCase tag)
const {
275 return static_cast<size_t>(tag);
279 static const std::unordered_map<ObjectDecisionType::ObjectTagCase, int,
281 s_lateral_decision_safety_sorter_;
282 static const std::unordered_map<ObjectDecisionType::ObjectTagCase, int,
284 s_longitudinal_decision_safety_sorter_;
void SetStBoundaryType(const STBoundary::BoundaryType type)
void SetBlockingObstacle(bool blocking)
Definition: obstacle.h:212
This is the class that associates an Obstacle with its path properties. An obstacle's path properties...
Definition: obstacle.h:60
void SetPerceptionSlBoundary(const SLBoundary &sl_boundary)
bool IsLaneChangeBlocking() const
Definition: obstacle.h:220
bool IsBlockingObstacle() const
Definition: obstacle.h:213
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
void SetReferenceLineStBoundaryType(const STBoundary::BoundaryType type)
static bool IsValidTrajectoryPoint(const common::TrajectoryPoint &point)
bool IsIgnore() const
Check if this object can be safely ignored. The object will be ignored if the lateral decision is ign...
static std::unique_ptr< Obstacle > CreateStaticVirtualObstacles(const std::string &id, const common::math::Box2d &obstacle_box)
bool IsLaneBlocking() const
Definition: obstacle.h:218
const std::vector< std::string > & decider_tags() const
const STBoundary & reference_line_st_boundary() const
Planning module main class. It processes GPS and IMU as input, to generate planning info...
static bool IsLongitudinalDecision(const ObjectDecisionType &decision)
check if an ObjectDecisionType is a longitudinal decision.
The class of polygon in 2-D.
Definition: polygon2d.h:43
const STBoundary & path_st_boundary() const
void SetLaneChangeBlocking(const bool is_distance_clear)
static std::list< std::unique_ptr< Obstacle > > CreateObstacles(const prediction::PredictionObstacles &predictions)
This is a helper function that can create obstacles from prediction data. The original prediction may...
bool HasNonIgnoreDecision() const
const perception::PerceptionObstacle & Perception() const
Definition: obstacle.h:102
double MinRadiusStopDistance(const common::VehicleParam &vehicle_param) const
Calculate stop distance with the obstacle using the ADC's minimum turning radius. ...
void AddLongitudinalDecision(const std::string &decider_tag, const ObjectDecisionType &decision)
void AddLateralDecision(const std::string &decider_tag, const ObjectDecisionType &decision)
common::TrajectoryPoint GetPointAtTime(const double time) const
std::string DebugString() const
bool HasTrajectory() const
Definition: obstacle.h:98
void SetReferenceLineStBoundary(const STBoundary &boundary)
Rectangular (undirected) bounding box in 2-D.
Definition: box2d.h:52
static bool IsLateralDecision(const ObjectDecisionType &decision)
check if an ObjectDecisionType is a lateral decision.
bool IsLateralIgnore() const
Definition: st_boundary.h:38
bool IsVirtual() const
Definition: obstacle.h:81
void EraseReferenceLineStBoundary()
void BuildReferenceLineStBoundary(const ReferenceLine &reference_line, const double adc_start_s)
common::math::Box2d GetBoundingBox(const common::TrajectoryPoint &point) const
bool HasLateralDecision() const
void SetId(const std::string &id)
Definition: obstacle.h:74
int32_t PerceptionId() const
Definition: obstacle.h:78
const prediction::Trajectory & Trajectory() const
Definition: obstacle.h:94
static bool IsValidPerceptionObstacle(const perception::PerceptionObstacle &obstacle)
bool HasLongitudinalDecision() const
void set_path_st_boundary(const STBoundary &boundary)
Definition: reference_line.h:39
ThreadSafeIndexedList< std::string, Obstacle > ThreadSafeIndexedObstacles
Definition: obstacle.h:288
const ObjectDecisionType & LongitudinalDecision() const
return the merged longitudinal decision Longitudinal decision is one of {Stop, Yield, Follow, Overtake, Ignore}
const std::string & Id() const
Definition: obstacle.h:73
IndexedList< std::string, Obstacle > IndexedObstacles
Definition: obstacle.h:287
The class of Box2d. Here, the x/y axes are respectively Forward/Left, as opposed to what happens in e...
void CheckLaneBlocking(const ReferenceLine &reference_line)
const common::math::Box2d & PerceptionBoundingBox() const
Definition: obstacle.h:88
common::TrajectoryPoint * AddTrajectoryPoint()
Definition: obstacle.h:95
bool IsCautionLevelObstacle() const
Definition: obstacle.h:124
bool IsStatic() const
Definition: obstacle.h:80
const ObjectDecisionType & LateralDecision() const
const common::math::Polygon2d & PerceptionPolygon() const
Definition: obstacle.h:91
BoundaryType
Definition: st_boundary.h:80
bool IsLongitudinalIgnore() const
double speed() const
Definition: obstacle.h:76
bool is_path_st_boundary_initialized()
Definition: obstacle.h:163
const std::vector< ObjectDecisionType > & decisions() const
const SLBoundary & PerceptionSLBoundary() const