Apollo 10.0
自动驾驶开放平台
apollo::planning::DecisionData类 参考

#include <decision_data.h>

apollo::planning::DecisionData 的协作图:

Public 成员函数

 DecisionData (const prediction::PredictionObstacles &prediction_obstacles, const ReferenceLine &reference_line)
 
 ~DecisionData ()=default
 
Obstacle * GetObstacleById (const std::string &id)
 
std::vector< Obstacle * > GetObstacleByType (const VirtualObjectType &type)
 
std::unordered_set< std::string > GetObstacleIdByType (const VirtualObjectType &type)
 
const std::vector< Obstacle * > & GetStaticObstacle () const
 
const std::vector< Obstacle * > & GetDynamicObstacle () const
 
const std::vector< Obstacle * > & GetVirtualObstacle () const
 
const std::vector< Obstacle * > & GetPracticalObstacle () const
 
const std::vector< Obstacle * > & GetAllObstacle () const
 
bool CreateVirtualObstacle (const ReferencePoint &point, const VirtualObjectType &type, std::string *const id)
 
bool CreateVirtualObstacle (const double point_s, const VirtualObjectType &type, std::string *const id)
 

详细描述

在文件 decision_data.h 第 44 行定义.

构造及析构函数说明

◆ DecisionData()

apollo::planning::DecisionData::DecisionData ( const prediction::PredictionObstacles &  prediction_obstacles,
const ReferenceLine &  reference_line 
)

在文件 decision_data.cc 第 48 行定义.

51 : reference_line_(reference_line) {
52 for (const auto& prediction_obstacle :
53 prediction_obstacles.prediction_obstacle()) {
54 const std::string perception_id =
55 std::to_string(prediction_obstacle.perception_obstacle().id());
56 if (prediction_obstacle.trajectory().empty()) {
57 obstacles_.emplace_back(new Obstacle(
58 perception_id, prediction_obstacle.perception_obstacle()));
59 all_obstacle_.emplace_back(obstacles_.back().get());
60 practical_obstacle_.emplace_back(obstacles_.back().get());
61 static_obstacle_.emplace_back(obstacles_.back().get());
62 obstacle_map_[perception_id] = obstacles_.back().get();
63 continue;
64 }
65 int trajectory_index = 0;
66 for (const auto& trajectory : prediction_obstacle.trajectory()) {
67 if (!IsValidTrajectory(trajectory)) {
68 AERROR << "obj:" << perception_id;
69 continue;
70 }
71 const std::string obstacle_id =
72 absl::StrCat(perception_id, "_", trajectory_index);
73 obstacles_.emplace_back(new Obstacle(
74 obstacle_id, prediction_obstacle.perception_obstacle(), trajectory));
75 all_obstacle_.emplace_back(obstacles_.back().get());
76 practical_obstacle_.emplace_back(obstacles_.back().get());
77 dynamic_obstacle_.emplace_back(obstacles_.back().get());
78 obstacle_map_[obstacle_id] = obstacles_.back().get();
79 ++trajectory_index;
80 }
81 }
82}
#define AERROR
Definition log.h:44

◆ ~DecisionData()

apollo::planning::DecisionData::~DecisionData ( )
default

成员函数说明

◆ CreateVirtualObstacle() [1/2]

bool apollo::planning::DecisionData::CreateVirtualObstacle ( const double  point_s,
const VirtualObjectType &  type,
std::string *const  id 
)

在文件 decision_data.cc 第 154 行定义.

156 {
157 // should build different box by type;
158 const double box_center_s = point_s + FLAGS_virtual_stop_wall_length / 2.0;
159 auto box_center = reference_line_.GetReferencePoint(box_center_s);
160 double heading = reference_line_.GetReferencePoint(point_s).heading();
161 double lane_left_width = 0.0;
162 double lane_right_width = 0.0;
163 reference_line_.GetLaneWidth(point_s, &lane_left_width, &lane_right_width);
164 common::math::Box2d box(box_center, heading, FLAGS_virtual_stop_wall_length,
165 lane_left_width + lane_right_width);
166 return CreateVirtualObstacle(box, type, id);
167}
double heading() const
Definition path.h:118
bool CreateVirtualObstacle(const ReferencePoint &point, const VirtualObjectType &type, std::string *const id)
ReferencePoint GetReferencePoint(const double s) const
bool GetLaneWidth(const double s, double *const lane_left_width, double *const lane_right_width) const

◆ CreateVirtualObstacle() [2/2]

bool apollo::planning::DecisionData::CreateVirtualObstacle ( const ReferencePoint &  point,
const VirtualObjectType &  type,
std::string *const  id 
)

在文件 decision_data.cc 第 134 行定义.

136 {
137 // should build different box by type;
138 common::SLPoint sl_point;
139 if (!reference_line_.XYToSL(point, &sl_point)) {
140 return false;
141 }
142 double obstacle_s = sl_point.s();
143 const double box_center_s = obstacle_s + FLAGS_virtual_stop_wall_length / 2.0;
144 auto box_center = reference_line_.GetReferencePoint(box_center_s);
145 double heading = reference_line_.GetReferencePoint(obstacle_s).heading();
146 double lane_left_width = 0.0;
147 double lane_right_width = 0.0;
148 reference_line_.GetLaneWidth(obstacle_s, &lane_left_width, &lane_right_width);
149 common::math::Box2d box(box_center, heading, FLAGS_virtual_stop_wall_length,
150 lane_left_width + lane_right_width);
151 return CreateVirtualObstacle(box, type, id);
152}
bool XYToSL(const common::math::Vec2d &xy_point, common::SLPoint *const sl_point, double warm_start_s=-1.0) const
Transvert Cartesian coordinates to Frenet.

◆ GetAllObstacle()

const std::vector< Obstacle * > & apollo::planning::DecisionData::GetAllObstacle ( ) const

在文件 decision_data.cc 第 130 行定义.

130 {
131 return all_obstacle_;
132}

◆ GetDynamicObstacle()

const std::vector< Obstacle * > & apollo::planning::DecisionData::GetDynamicObstacle ( ) const

在文件 decision_data.cc 第 118 行定义.

118 {
119 return dynamic_obstacle_;
120}

◆ GetObstacleById()

Obstacle * apollo::planning::DecisionData::GetObstacleById ( const std::string &  id)

在文件 decision_data.cc 第 84 行定义.

84 {
85 std::lock_guard<std::mutex> lock(mutex_);
86 return common::util::FindPtrOrNull(obstacle_map_, id);
87}

◆ GetObstacleByType()

std::vector< Obstacle * > apollo::planning::DecisionData::GetObstacleByType ( const VirtualObjectType &  type)

在文件 decision_data.cc 第 89 行定义.

90 {
91 std::lock_guard<std::mutex> lock(transaction_mutex_);
92
93 std::unordered_set<std::string> ids = GetObstacleIdByType(type);
94 if (ids.empty()) {
95 return std::vector<Obstacle*>();
96 }
97 std::vector<Obstacle*> ret;
98 for (const std::string& id : ids) {
99 ret.emplace_back(GetObstacleById(id));
100 if (ret.back() == nullptr) {
101 AERROR << "Ignore. can't find obstacle by id: " << id;
102 ret.pop_back();
103 }
104 }
105 return ret;
106}
Obstacle * GetObstacleById(const std::string &id)
std::unordered_set< std::string > GetObstacleIdByType(const VirtualObjectType &type)

◆ GetObstacleIdByType()

std::unordered_set< std::string > apollo::planning::DecisionData::GetObstacleIdByType ( const VirtualObjectType &  type)

在文件 decision_data.cc 第 108 行定义.

109 {
110 std::lock_guard<std::mutex> lock(mutex_);
111 return common::util::FindWithDefault(virtual_obstacle_id_map_, type, {});
112}

◆ GetPracticalObstacle()

const std::vector< Obstacle * > & apollo::planning::DecisionData::GetPracticalObstacle ( ) const

在文件 decision_data.cc 第 126 行定义.

126 {
127 return practical_obstacle_;
128}

◆ GetStaticObstacle()

const std::vector< Obstacle * > & apollo::planning::DecisionData::GetStaticObstacle ( ) const

在文件 decision_data.cc 第 114 行定义.

114 {
115 return static_obstacle_;
116}

◆ GetVirtualObstacle()

const std::vector< Obstacle * > & apollo::planning::DecisionData::GetVirtualObstacle ( ) const

在文件 decision_data.cc 第 122 行定义.

122 {
123 return virtual_obstacle_;
124}

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