一、Scenario
我们同样先看下"scenarios"的目录结构:
.
├── bare_intersection
├── common
├── dead_end
├── emergency
├── lane_follow // 车道线保持
├── narrow_street_u_turn // 狭窄掉头
├── learning_model
├── park // 泊车
├── park_and_go
├── stop_sign // 停止
├── traffic_light // 红绿灯
├── util
├── yield_sign
├── BUILD
├── scenario.cc
├── scenario.h
├── scenario_manager.cc
├── scenario_manager.h
├── stage.cc
├── stage.h
Scenario_manager负责管理场景,每个场景分为一个或者多个阶段(stage),每个阶段又由不同的任务(task)组成。
1.1 场景生成及转换
场景管理类"scenario_manager.cc"实现了场景注册、创建、初始化和更新场景的功能。
bool ScenarioManager::Init(const PlanningConfig& planning_config) {
// 注册场景
RegisterScenarios();
default_scenario_type_ = ScenarioConfig::LANE_FOLLOW;
// 创建场景,默认为lane_follow
current_scenario_ = CreateScenario(default_scenario_type_);
return true;
}
// 更新场景
void ScenarioManager::Update(const common::TrajectoryPoint& ego_point, const Frame& frame) {
ACHECK(!frame.reference_line_info().empty());
// 保留当前帧
Observe(frame);
// 场景分发
ScenarioDispatch(frame);
}
// 场景分发
void ScenarioManager::ScenarioDi