Apollo 10.0
自动驾驶开放平台
apollo::prediction::InteractionPredictor类 参考

#include <interaction_predictor.h>

类 apollo::prediction::InteractionPredictor 继承关系图:
apollo::prediction::InteractionPredictor 的协作图:

Public 成员函数

 InteractionPredictor ()
 Constructor
 
virtual ~InteractionPredictor ()=default
 Destructor
 
bool Predict (const ADCTrajectoryContainer *adc_trajectory_container, Obstacle *obstacle, ObstaclesContainer *obstacles_container) override
 Make prediction
 
- Public 成员函数 继承自 apollo::prediction::SequencePredictor
 SequencePredictor ()=default
 Constructor
 
virtual ~SequencePredictor ()=default
 Destructor
 
bool Predict (const ADCTrajectoryContainer *adc_trajectory_container, Obstacle *obstacle, ObstaclesContainer *obstacles_container) override
 Make prediction
 
 FRIEND_TEST (SequencePredictorTest, General)
 
- Public 成员函数 继承自 apollo::prediction::Predictor
 Predictor ()=default
 Constructor
 
virtual ~Predictor ()=default
 Destructor
 
int NumOfTrajectories (const Obstacle &obstacle)
 Get trajectory size
 
void TrimTrajectories (const ADCTrajectoryContainer &adc_trajectory_container, Obstacle *obstacle)
 Trim prediction trajectories by adc trajectory
 
const ObstacleConf::PredictorTypepredictor_type ()
 get the predictor type
 

额外继承的成员函数

- Public 类型 继承自 apollo::prediction::SequencePredictor
enum class  LaneChangeType {
  LEFT , RIGHT , STRAIGHT , ONTO_LANE ,
  INVALID
}
 
- Protected 成员函数 继承自 apollo::prediction::SequencePredictor
bool GetLongitudinalPolynomial (const Obstacle &obstacle, const LaneSequence &lane_sequence, const std::pair< double, double > &lon_end_state, std::array< double, 5 > *coefficients)
 
bool GetLateralPolynomial (const Obstacle &obstacle, const LaneSequence &lane_sequence, const double time_to_end_state, std::array< double, 4 > *coefficients)
 
void FilterLaneSequences (const Feature &feature, const std::string &lane_id, const Obstacle *ego_vehicle_ptr, const ADCTrajectoryContainer *adc_trajectory_container, std::vector< bool > *enable_lane_sequence)
 Filter lane sequences
 
LaneChangeType GetLaneChangeType (const std::string &lane_id, const LaneSequence &lane_sequence)
 Get lane change type
 
double GetLaneChangeDistanceWithADC (const LaneSequence &lane_sequence, const Obstacle *ego_vehicle_ptr, const ADCTrajectoryContainer *adc_trajectory_container)
 Get lane change distance with ADC
 
void DrawConstantAccelerationTrajectory (const Obstacle &obstacle, const LaneSequence &lane_sequence, const double total_time, const double period, const double acceleration, std::vector< apollo::common::TrajectoryPoint > *points)
 Draw constant acceleration trajectory points
 
double GetLaneSequenceCurvatureByS (const LaneSequence &lane_sequence, const double s)
 Get lane sequence curvature by s
 
void Clear ()
 Clear private members
 
std::string ToString (const LaneSequence &sequence)
 Convert a lane sequence to string
 
- Protected 成员函数 继承自 apollo::prediction::Predictor
void SetEqualProbability (const double probability, const int start_index, Obstacle *obstacle_ptr)
 Set equal probability to prediction trajectories
 
bool TrimTrajectory (const ADCTrajectoryContainer &adc_trajectory_container, Obstacle *obstacle, Trajectory *trajectory)
 Trim a single prediction trajectory, keep the portion that is not in junction.
 
bool SupposedToStop (const Feature &feature, const double stop_distance, double *acceleration)
 Determine if an obstacle is supposed to stop within a distance
 
- 静态 Protected 成员函数 继承自 apollo::prediction::Predictor
static Trajectory GenerateTrajectory (const std::vector< apollo::common::TrajectoryPoint > &points)
 Generate trajectory from trajectory points
 
- Protected 属性 继承自 apollo::prediction::Predictor
ObstacleConf::PredictorType predictor_type_
 

详细描述

在文件 interaction_predictor.h31 行定义.

构造及析构函数说明

◆ InteractionPredictor()

apollo::prediction::InteractionPredictor::InteractionPredictor ( )

Constructor

在文件 interaction_predictor.cc42 行定义.

◆ ~InteractionPredictor()

virtual apollo::prediction::InteractionPredictor::~InteractionPredictor ( )
virtualdefault

Destructor

成员函数说明

◆ Predict()

bool apollo::prediction::InteractionPredictor::Predict ( const ADCTrajectoryContainer adc_trajectory_container,
Obstacle obstacle,
ObstaclesContainer obstacles_container 
)
overridevirtual

Make prediction

参数
Obstaclepointer
Obstaclescontainer
返回
If predicted successfully

实现了 apollo::prediction::Predictor.

在文件 interaction_predictor.cc46 行定义.

48 {
49 Clear();
50 CHECK_NOTNULL(obstacle);
51 CHECK_GT(obstacle->history_size(), 0U);
52
53 BuildADCTrajectory(adc_trajectory_container,
54 FLAGS_collision_cost_time_resolution);
55
56 obstacle->SetPredictorType(predictor_type_);
57
58 Feature* feature_ptr = obstacle->mutable_latest_feature();
59
60 if (!feature_ptr->lane().has_lane_graph()) {
61 AERROR << "Obstacle [" << obstacle->id() << "] has no lane graph.";
62 return false;
63 }
64 auto* lane_graph = feature_ptr->mutable_lane()->mutable_lane_graph();
65
66 int num_lane_sequence = lane_graph->lane_sequence_size();
67 std::vector<double> best_lon_accelerations(num_lane_sequence, 0.0);
68 std::vector<double> candidate_lon_accelerations = {0.0, -0.5, -1.0, -1.5,
69 -2.0, -2.5, -3.0};
70 double smallest_cost = std::numeric_limits<double>::max();
71 std::vector<double> posteriors(num_lane_sequence, 0.0);
72 double posterior_sum = 0.0;
73 for (int i = 0; i < num_lane_sequence; ++i) {
74 const LaneSequence& lane_sequence = lane_graph->lane_sequence(i);
75 for (const double lon_acceleration : candidate_lon_accelerations) {
76 double cost = ComputeTrajectoryCost(
77 *obstacle, lane_sequence, lon_acceleration, adc_trajectory_container);
78 if (cost < smallest_cost) {
79 smallest_cost = cost;
80 best_lon_accelerations[i] = lon_acceleration;
81 }
82 }
83
84 double likelihood = ComputeLikelihood(smallest_cost);
85 double prior = lane_sequence.probability();
86 double posterior = ComputePosterior(prior, likelihood);
87 posteriors[i] = posterior;
88 posterior_sum += posterior;
89 }
90
91 int best_seq_idx = 0;
92 double largest_posterior = 0.0;
93 CHECK_EQ(posteriors.size(),
94 static_cast<size_t>(lane_graph->lane_sequence_size()));
95 for (int i = 0; i < num_lane_sequence; ++i) {
96 double normalized_posterior =
97 posteriors[i] / (posterior_sum + FLAGS_double_precision);
98 lane_graph->mutable_lane_sequence(i)->set_probability(normalized_posterior);
99 if (normalized_posterior > largest_posterior) {
100 largest_posterior = normalized_posterior;
101 best_seq_idx = i;
102 }
103 }
104
105 double probability_threshold = 0.5;
106 if (largest_posterior > probability_threshold) {
107 for (int i = 0; i < num_lane_sequence; ++i) {
108 const LaneSequence& lane_sequence = lane_graph->lane_sequence(i);
109 if (lane_sequence.probability() < probability_threshold) {
110 continue;
111 }
112 double best_lon_acceleration = best_lon_accelerations[i];
113 if (lane_sequence.has_stop_sign()) {
114 double stop_acceleration = 0.0;
115 double stop_distance = lane_sequence.stop_sign().lane_sequence_s() -
116 lane_sequence.lane_s();
117 SupposedToStop(*feature_ptr, stop_distance, &stop_acceleration);
118 best_lon_acceleration =
119 std::min(best_lon_acceleration, stop_acceleration);
120 }
121 std::vector<TrajectoryPoint> points;
122 DrawTrajectory(*obstacle, lane_sequence, best_lon_acceleration,
123 FLAGS_prediction_trajectory_time_length,
124 FLAGS_prediction_trajectory_time_resolution, &points);
125 Trajectory trajectory = GenerateTrajectory(points);
126 obstacle->mutable_latest_feature()->add_predicted_trajectory()->CopyFrom(
127 trajectory);
128 }
129 } else {
130 const LaneSequence& sequence = lane_graph->lane_sequence(best_seq_idx);
131 double best_lon_acceleration = best_lon_accelerations[best_seq_idx];
132 if (sequence.has_stop_sign()) {
133 double stop_distance =
134 sequence.stop_sign().lane_sequence_s() - sequence.lane_s();
135 SupposedToStop(*feature_ptr, stop_distance, &best_lon_acceleration);
136 }
137 std::vector<TrajectoryPoint> points;
138 DrawTrajectory(*obstacle, lane_graph->lane_sequence(best_seq_idx),
139 best_lon_acceleration,
140 FLAGS_prediction_trajectory_time_length,
141 FLAGS_prediction_trajectory_time_resolution, &points);
142 Trajectory trajectory = GenerateTrajectory(points);
143 obstacle->mutable_latest_feature()->add_predicted_trajectory()->CopyFrom(
144 trajectory);
145 }
146 return true;
147}
static Trajectory GenerateTrajectory(const std::vector< apollo::common::TrajectoryPoint > &points)
Generate trajectory from trajectory points
Definition predictor.cc:34
bool SupposedToStop(const Feature &feature, const double stop_distance, double *acceleration)
Determine if an obstacle is supposed to stop within a distance
Definition predictor.cc:125
#define AERROR
Definition log.h:44

该类的文档由以下文件生成: