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

#include <park_and_go_scenario.h>

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

Public 成员函数

bool Init (std::shared_ptr< DependencyInjector > injector, const std::string &name) override
 
ParkAndGoContext * 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.
 
- Public 成员函数 继承自 apollo::planning::Scenario
 Scenario ()
 
virtual ~Scenario ()=default
 
virtual ScenarioResult Process (const common::TrajectoryPoint &planning_init_point, Frame *frame)
 
virtual bool Exit (Frame *frame)
 
virtual bool Enter (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_
 

详细描述

在文件 park_and_go_scenario.h 第 32 行定义.

成员函数说明

◆ GetContext()

ParkAndGoContext * apollo::planning::ParkAndGoScenario::GetContext ( )
inlineoverridevirtual

Get the scenario context.

实现了 apollo::planning::Scenario.

在文件 park_and_go_scenario.h 第 40 行定义.

40{ return &context_; }

◆ Init()

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

重载 apollo::planning::Scenario .

在文件 park_and_go_scenario.cc 第 32 行定义.

33 {
34 if (init_) {
35 return true;
36 }
37
38 if (!Scenario::Init(injector, name)) {
39 AERROR << "failed to init scenario" << Name();
40 return false;
41 }
42
43 if (!Scenario::LoadConfig<apollo::planning::ScenarioParkAndGoConfig>(
44 &context_.scenario_config)) {
45 AERROR << "fail to get config of scenario" << Name();
46 return false;
47 }
48
49 init_ = true;
50 return true;
51}
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
#define AERROR
Definition log.h:44
apollo::planning::ScenarioParkAndGoConfig scenario_config
Definition context.h:29

◆ IsTransferable()

bool apollo::planning::ParkAndGoScenario::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 .

在文件 park_and_go_scenario.cc 第 53 行定义.

54 {
55 if (!frame.local_view().planning_command->has_lane_follow_command()) {
56 AINFO << "PARK_AND_GO: Don't has lane follow command!";
57 return false;
58 }
59 if (other_scenario == nullptr || frame.reference_line_info().empty()) {
60 AINFO << "PARK_AND_GO: Don't has reference line info or other scenario!";
61 return false;
62 }
63 bool park_and_go = false;
64 const auto& scenario_config = context_.scenario_config;
65 const auto vehicle_state_provider = injector_->vehicle_state();
66 common::VehicleState vehicle_state = vehicle_state_provider->vehicle_state();
67 auto adc_point = common::util::PointFactory::ToPointENU(vehicle_state);
68 // TODO(SHU) might consider gear == GEAR_PARKING
69 double adc_speed = vehicle_state_provider->linear_velocity();
70 double s = 0.0;
71 double l = 0.0;
72 const double max_abs_speed_when_stopped =
73 common::VehicleConfigHelper::Instance()
74 ->GetConfig()
75 .vehicle_param()
76 .max_abs_speed_when_stopped();
77
79
80 // check ego vehicle distance to destination
81 const auto routing_end = frame.local_view().end_lane_way_point;
82 if (nullptr == routing_end) {
83 AINFO << "PARK_AND_GO: Don't has end lane way point!";
84 return false;
85 }
86 common::SLPoint dest_sl;
87 const auto& reference_line_info = frame.reference_line_info().front();
88 const auto& reference_line = reference_line_info.reference_line();
89 reference_line.XYToSL(routing_end->pose(), &dest_sl);
90 const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s();
91
92 bool is_ego_on_lane = false;
93 bool is_lane_type_city_driving = false;
95 adc_point, 5.0, &lane, &s, &l);
96 if (lane != nullptr && lane->IsOnLane({adc_point.x(), adc_point.y()})) {
97 is_ego_on_lane = true;
98 if (lane->lane().type() == hdmap::Lane::CITY_DRIVING) {
99 is_lane_type_city_driving = true;
100 }
101 }
102
103 const double adc_distance_to_dest = dest_sl.s() - adc_front_edge_s;
104 ADEBUG << "adc_distance_to_dest:" << adc_distance_to_dest;
105 bool is_vehicle_static = (std::fabs(adc_speed) < max_abs_speed_when_stopped);
106 bool is_distance_far_enough =
107 (adc_distance_to_dest > scenario_config.min_dist_to_dest());
108 AINFO << "PARK_AND_GO: " << is_vehicle_static << "," << is_distance_far_enough
109 << "," << is_ego_on_lane << "," << is_lane_type_city_driving;
110 // if vehicle is static, far enough to destination and (off-lane or not on
111 // city_driving lane)
112 if (std::fabs(adc_speed) < max_abs_speed_when_stopped &&
113 adc_distance_to_dest > scenario_config.min_dist_to_dest() &&
114 (!is_ego_on_lane || !is_lane_type_city_driving)) {
115 park_and_go = true;
116 }
117 return park_and_go;
118}
static PointENU ToPointENU(const double x, const double y, const double z=0)
static const HDMap & BaseMap()
int GetNearestLaneWithDistance(const apollo::common::PointENU &point, const double distance, LaneInfoConstPtr *nearest_lane, double *nearest_s, double *nearest_l) const
get nearest lane from target point with search radius,
Definition hdmap.cc:161
std::shared_ptr< DependencyInjector > injector_
Definition scenario.h:113
#define ADEBUG
Definition log.h:41
#define AINFO
Definition log.h:42
std::shared_ptr< const LaneInfo > LaneInfoConstPtr

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