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

#include <yield_sign_scenario.h>

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

Public 成员函数

bool Init (std::shared_ptr< DependencyInjector > injector, const std::string &name) override
 
YieldSignContext * GetContext () override
 Get the scenario context.
 
bool IsTransferable (const Scenario *const other_scenario, const Frame &frame) override
 Each scenario should define its own transfer condition, i.e., when it should allow to transfer from other scenario to itself.
 
bool Exit (Frame *frame) override
 
bool Enter (Frame *frame) override
 
- Public 成员函数 继承自 apollo::planning::Scenario
 Scenario ()
 
virtual ~Scenario ()=default
 
virtual ScenarioResult Process (const common::TrajectoryPoint &planning_init_point, Frame *frame)
 
std::shared_ptr< Stage > CreateStage (const StagePipeline &stage_pipeline)
 Each scenario should define its own stages object's creation scenario will call stage's Stage::Process function following a configured order, The return value of Stage::Process function determines the transition from one stage to another.
 
const ScenarioStatusType & GetStatus () const
 
const std::string GetStage () const
 
const std::string & GetMsg () const
 
const std::string & Name () const
 
void Reset ()
 Reset the scenario, used before entering the scenario.
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::planning::Scenario
template<typename T >
bool LoadConfig (T *config)
 
- Protected 属性 继承自 apollo::planning::Scenario
ScenarioResult scenario_result_
 
std::shared_ptr< Stage > current_stage_
 
std::unordered_map< std::string, const StagePipeline * > stage_pipeline_map_
 
std::string msg_
 
std::shared_ptr< DependencyInjector > injector_
 
std::string config_path_
 
std::string config_dir_
 
std::string name_
 
ScenarioPipeline scenario_pipeline_config_
 

详细描述

在文件 yield_sign_scenario.h 第 45 行定义.

成员函数说明

◆ Enter()

bool apollo::planning::YieldSignScenario::Enter ( Frame *  frame)
overridevirtual

重载 apollo::planning::Scenario .

在文件 yield_sign_scenario.cc 第 99 行定义.

99 {
100 // get first_encountered yield_sign
101 const auto& reference_line_info = frame->reference_line_info().front();
102 std::string current_yield_sign_overlap_id;
103 const auto& overlaps = reference_line_info.FirstEncounteredOverlaps();
104 for (auto overlap : overlaps) {
105 if (overlap.first == ReferenceLineInfo::YIELD_SIGN) {
106 current_yield_sign_overlap_id = overlap.second.object_id;
107 break;
108 }
109 }
110
111 if (current_yield_sign_overlap_id.empty()) {
112 injector_->planning_context()
113 ->mutable_planning_status()
114 ->mutable_yield_sign()
115 ->Clear();
116 AERROR << "Can not find yield sign overlap in reference line!";
117 return false;
118 }
119
120 // find all the yield_sign at/within the same location/group
121 const std::vector<hdmap::PathOverlap>& yield_sign_overlaps =
122 reference_line_info.reference_line().map_path().yield_sign_overlaps();
123 auto yield_sign_overlap_itr = std::find_if(
124 yield_sign_overlaps.begin(), yield_sign_overlaps.end(),
125 [&current_yield_sign_overlap_id](const hdmap::PathOverlap& overlap) {
126 return overlap.object_id == current_yield_sign_overlap_id;
127 });
128 if (yield_sign_overlap_itr == yield_sign_overlaps.end()) {
129 injector_->planning_context()
130 ->mutable_planning_status()
131 ->mutable_yield_sign()
132 ->Clear();
133 AERROR << "Can not find yield sign overlap "
134 << current_yield_sign_overlap_id;
135 return false;
136 }
137
138 static constexpr double kTrafficLightGroupingMaxDist = 2.0; // unit: m
139 const double current_yield_sign_overlap_start_s =
140 yield_sign_overlap_itr->start_s;
141 context_.current_yield_sign_overlap_ids.clear();
142 for (const auto& yield_sign_overlap : yield_sign_overlaps) {
143 const double dist =
144 yield_sign_overlap.start_s - current_yield_sign_overlap_start_s;
145 if (fabs(dist) <= kTrafficLightGroupingMaxDist) {
146 injector_->planning_context()
147 ->mutable_planning_status()
148 ->mutable_yield_sign()
149 ->add_current_yield_sign_overlap_id(yield_sign_overlap.object_id);
150 ADEBUG << "Update PlanningContext with first_encountered yield_sign["
151 << yield_sign_overlap.object_id << "] start_s["
152 << yield_sign_overlap.start_s << "]";
153 context_.current_yield_sign_overlap_ids.push_back(
154 yield_sign_overlap.object_id);
155 }
156 }
157 return true;
158}
std::shared_ptr< DependencyInjector > injector_
Definition scenario.h:113
#define ADEBUG
Definition log.h:41
#define AERROR
Definition log.h:44
std::vector< std::string > current_yield_sign_overlap_ids

◆ Exit()

bool apollo::planning::YieldSignScenario::Exit ( Frame *  frame)
overridevirtual

重载 apollo::planning::Scenario .

在文件 yield_sign_scenario.cc 第 91 行定义.

91 {
92 injector_->planning_context()
93 ->mutable_planning_status()
94 ->mutable_yield_sign()
95 ->Clear();
96 return true;
97}

◆ GetContext()

YieldSignContext * apollo::planning::YieldSignScenario::GetContext ( )
inlineoverridevirtual

Get the scenario context.

实现了 apollo::planning::Scenario.

在文件 yield_sign_scenario.h 第 53 行定义.

53{ return &context_; }

◆ Init()

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

重载 apollo::planning::Scenario .

在文件 yield_sign_scenario.cc 第 42 行定义.

43 {
44 if (!Scenario::Init(injector, name)) {
45 AERROR << "failed to init scenario" << Name();
46 return false;
47 }
48
49 if (!Scenario::LoadConfig<ScenarioYieldSignConfig>(
50 &context_.scenario_config)) {
51 AERROR << "fail to get config of scenario" << Name();
52 return false;
53 }
54 return true;
55}
virtual bool Init(std::shared_ptr< DependencyInjector > injector, const std::string &name)
Definition scenario.cc:43
const std::string & Name() const
Definition scenario.h:98
ScenarioYieldSignConfig scenario_config

◆ IsTransferable()

bool apollo::planning::YieldSignScenario::IsTransferable ( const Scenario *const  other_scenario,
const Frame &  frame 
)
overridevirtual

Each scenario should define its own transfer condition, i.e., when it should allow to transfer from other scenario to itself.

重载 apollo::planning::Scenario .

在文件 yield_sign_scenario.cc 第 57 行定义.

58 {
59 if (!frame.local_view().planning_command->has_lane_follow_command()) {
60 return false;
61 }
62 if (other_scenario == nullptr || frame.reference_line_info().empty()) {
63 return false;
64 }
65 const auto& reference_line_info = frame.reference_line_info().front();
66 const auto& first_encountered_overlaps =
67 reference_line_info.FirstEncounteredOverlaps();
68 hdmap::PathOverlap* yield_sign_overlap = nullptr;
69 for (const auto& overlap : first_encountered_overlaps) {
70 if (overlap.first == ReferenceLineInfo::SIGNAL ||
71 overlap.first == ReferenceLineInfo::STOP_SIGN) {
72 return false;
73 } else if (overlap.first == ReferenceLineInfo::YIELD_SIGN) {
74 yield_sign_overlap = const_cast<hdmap::PathOverlap*>(&overlap.second);
75 break;
76 }
77 }
78 if (yield_sign_overlap == nullptr) {
79 return false;
80 }
81 const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s();
82 const double adc_distance_to_yield_sign =
83 yield_sign_overlap->start_s - adc_front_edge_s;
84 const bool yield_sign_scenario =
85 (adc_distance_to_yield_sign > 0.0 &&
86 adc_distance_to_yield_sign <=
88 return yield_sign_scenario;
89}

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