Apollo 11.0
自动驾驶开放平台
apollo::planning::KeepClear类 参考

This class creates a virtual obstacle for each clear area region. 更多...

#include <keep_clear.h>

类 apollo::planning::KeepClear 继承关系图:
apollo::planning::KeepClear 的协作图:

Public 成员函数

bool Init (const std::string &name, const std::shared_ptr< DependencyInjector > &injector) override
 
virtual ~KeepClear ()=default
 
common::Status ApplyRule (Frame *const frame, ReferenceLineInfo *const reference_line_info)
 
void Reset () override
 
- Public 成员函数 继承自 apollo::planning::TrafficRule
 TrafficRule ()
 
virtual ~TrafficRule ()=default
 
std::string Getname ()
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::planning::TrafficRule
template<typename T >
bool LoadConfig (T *config)
 
- Protected 属性 继承自 apollo::planning::TrafficRule
std::shared_ptr< DependencyInjector > injector_
 
std::string config_path_
 
std::string name_
 

详细描述

This class creates a virtual obstacle for each clear area region.

在文件 keep_clear.h 第 35 行定义.

构造及析构函数说明

◆ ~KeepClear()

virtual apollo::planning::KeepClear::~KeepClear ( )
virtualdefault

成员函数说明

◆ ApplyRule()

Status apollo::planning::KeepClear::ApplyRule ( Frame *const  frame,
ReferenceLineInfo *const  reference_line_info 
)
virtual

实现了 apollo::planning::TrafficRule.

在文件 keep_clear.cc 第 47 行定义.

48 {
49 CHECK_NOTNULL(frame);
50 CHECK_NOTNULL(reference_line_info);
51
52 // keep_clear zone
53 if (config_.enable_keep_clear_zone()) {
54 const std::vector<PathOverlap>& keep_clear_overlaps =
55 reference_line_info->reference_line().map_path().clear_area_overlaps();
56 for (const auto& keep_clear_overlap : keep_clear_overlaps) {
57 const auto obstacle_id =
58 KEEP_CLEAR_VO_ID_PREFIX + keep_clear_overlap.object_id;
59
60 if (BuildKeepClearObstacle(frame, reference_line_info, obstacle_id,
61 keep_clear_overlap.start_s,
62 keep_clear_overlap.end_s)) {
63 ADEBUG << "KEEP_CLAER for keep_clear_zone["
64 << keep_clear_overlap.object_id << "] s["
65 << keep_clear_overlap.start_s << ", " << keep_clear_overlap.end_s
66 << "] BUILD";
67 }
68 }
69 }
70
71 // junction
72 if (config_.enable_junction()) {
73 hdmap::PathOverlap* crosswalk_overlap = nullptr;
74 hdmap::PathOverlap* stop_sign_overlap = nullptr;
75 hdmap::PathOverlap* traffic_light_overlap = nullptr;
76 hdmap::PathOverlap* pnc_junction_overlap = nullptr;
77
78 const auto& first_encountered_overlaps =
79 reference_line_info->FirstEncounteredOverlaps();
80 for (const auto& overlap : first_encountered_overlaps) {
81 ADEBUG << overlap.first << ", " << overlap.second.DebugString();
82 switch (overlap.first) {
84 ADEBUG << "CROSSWALK[" << overlap.second.object_id << "] s["
85 << overlap.second.start_s << ", " << overlap.second.end_s
86 << "]";
87 crosswalk_overlap = const_cast<PathOverlap*>(&overlap.second);
88 break;
90 ADEBUG << "STOP_SIGN[" << overlap.second.object_id << "] s["
91 << overlap.second.start_s << ", " << overlap.second.end_s
92 << "]";
93 stop_sign_overlap = const_cast<PathOverlap*>(&overlap.second);
94 break;
96 ADEBUG << "SIGNAL[" << overlap.second.object_id << "] s["
97 << overlap.second.start_s << ", " << overlap.second.end_s
98 << "]";
99 traffic_light_overlap = const_cast<PathOverlap*>(&overlap.second);
100 break;
102 ADEBUG << "PNC_JUNCTION[" << overlap.second.object_id << "] s["
103 << overlap.second.start_s << ", " << overlap.second.end_s
104 << "]";
105 pnc_junction_overlap = const_cast<PathOverlap*>(&overlap.second);
106 break;
107 default:
108 break;
109 }
110 }
111
112 if (pnc_junction_overlap != nullptr) {
113 const double adc_front_edge_s =
114 reference_line_info->AdcSlBoundary().end_s();
115 if (!IsCreeping(pnc_junction_overlap->start_s, adc_front_edge_s)) {
116 // adjust pnc_junction start_s to align with
117 // the start_s of other "stop type" overlaps
118 double pnc_junction_start_s = pnc_junction_overlap->start_s;
119 // traffic_light, stop_sign, and then crosswalk if neither
120 if (traffic_light_overlap != nullptr &&
121 std::fabs(pnc_junction_start_s - traffic_light_overlap->start_s) <=
123 ADEBUG << "adjust pnc_junction_start_s[" << pnc_junction_start_s
124 << "] to traffic_light_start_s"
125 << traffic_light_overlap->start_s << "]";
126 pnc_junction_start_s = traffic_light_overlap->start_s;
127 } else if (stop_sign_overlap != nullptr &&
128 std::fabs(pnc_junction_start_s -
129 stop_sign_overlap->start_s) <=
131 ADEBUG << "adjust pnc_junction_start_s[" << pnc_junction_start_s
132 << "] to stop_sign_start_s" << stop_sign_overlap->start_s
133 << "]";
134 pnc_junction_start_s = stop_sign_overlap->start_s;
135 } else if (crosswalk_overlap != nullptr &&
136 std::fabs(pnc_junction_start_s -
137 crosswalk_overlap->start_s) <=
139 ADEBUG << "adjust pnc_junction_start_s[" << pnc_junction_start_s
140 << "] to cross_walk_start_s" << crosswalk_overlap->start_s
141 << "]";
142 pnc_junction_start_s = crosswalk_overlap->start_s;
143 }
144
145 const auto obstacle_id =
146 KEEP_CLEAR_JUNCTION_VO_ID_PREFIX + pnc_junction_overlap->object_id;
147
148 if (BuildKeepClearObstacle(frame, reference_line_info, obstacle_id,
149 pnc_junction_start_s,
150 pnc_junction_overlap->end_s)) {
151 ADEBUG << "KEEP_CLAER for junction["
152 << pnc_junction_overlap->object_id << "] s["
153 << pnc_junction_start_s << ", " << pnc_junction_overlap->end_s
154 << "] BUILD";
155 }
156 }
157 }
158 }
159
160 return Status::OK();
161}
static Status OK()
generate a success status.
Definition status.h:60
#define ADEBUG
Definition log.h:41
optional double align_with_traffic_sign_tolerance

◆ Init()

bool apollo::planning::KeepClear::Init ( const std::string &  name,
const std::shared_ptr< DependencyInjector > &  injector 
)
overridevirtual

重载 apollo::planning::TrafficRule .

在文件 keep_clear.cc 第 38 行定义.

39 {
40 if (!TrafficRule::Init(name, injector)) {
41 return false;
42 }
43 // Load the config this task.
44 return TrafficRule::LoadConfig<KeepClearConfig>(&config_);
45}
virtual bool Init(const std::string &name, const std::shared_ptr< DependencyInjector > &injector)

◆ Reset()

void apollo::planning::KeepClear::Reset ( )
inlineoverridevirtual

实现了 apollo::planning::TrafficRule.

在文件 keep_clear.h 第 43 行定义.

43{}

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