Apollo自动驾驶虚拟仿真赛笔记[5]-dreamview操作技巧及planning目录分析(未完待续)
作者:互联网
dreamview操作技巧及planning目录分析
dreamview操作技巧
route editing在地图上右键拖动可以拖动地图
route editng中滚轮可以放大缩小地图
/data/core中的文件貌似是垃圾文件
watch -n 1 nvidia-smi可以查看GPU使用情况
apollo_map场景标注
场景注册
场景管理类"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::ScenarioDispatch(const Frame& frame) {
...
ScenarioConfig::ScenarioType scenario_type;
...
if (...) {
scenario_type = ScenarioDispatchLearning();
} else {
// 每次切换场景都是从默认场景(LANE_FOLLOW)开始,即每次场景切换之后都会回到默认场景
scenario_type = ScenarioDispatchNonLearning(frame);
}
...
// update PlanningContext
UpdatePlanningContext(frame, scenario_type);
if (current_scenario_->scenario_type() != scenario_type) {
// 创建场景,此处的场景已经为具体场景,如ValetParkingScenario
current_scenario_ = CreateScenario(scenario_type);
}
}
// 创建场景
std::unique_ptr<Scenario> ScenarioManager::CreateScenario(
ScenarioConfig::ScenarioType scenario_type) {
std::unique_ptr<Scenario> ptr;
// 根据type创建场景,以valet_parking场景为例
switch (scenario_type) {
...
case ScenarioConfig::VALET_PARKING:
ptr.reset(new scenario::valet_parking::ValetParkingScenario(
config_map_[scenario_type], &scenario_context_, injector_));
break;
...
default:
return nullptr;
}
if (ptr != nullptr) {
// 具体场景初始化
ptr->Init();
}
return ptr;
}
此外需要注意,在RegisterStages时,Stage在构造函数中完成Task的创建:
Stage::Stage(const ScenarioConfig::StageConfig& config,
const std::shared_ptr<DependencyInjector>& injector)
: config_(config), injector_(injector) {
...
name_ = ScenarioConfig::StageType_Name(config_.stage_type());
next_stage_ = config_.stage_type();
std::unordered_map<TaskConfig::TaskType, const TaskConfig*, std::hash<int>> config_map;
for (const auto& task_config : config_.task_config()) {
config_map[task_config.task_type()] = &task_config;
}
for (int i = 0; i < config_.task_type_size(); ++i) {
auto task_type = config_.task_type(i);
...
auto iter = tasks_.find(task_type);
if (iter == tasks_.end()) {
// 创建Task
auto ptr = TaskFactory::CreateTask(*config_map[task_type], injector_);
task_list_.push_back(ptr.get());
tasks_[task_type] = std::move(ptr);
} else {
task_list_.push_back(iter->second.get());
}
}
}
[https://blog.csdn.net/whuzhang16/article/details/122544972]
modules/planning目录分析
逻辑层次为"场景-阶段-任务"
modules/planning/conf主要是各个参数文件
modules/planning/conf/scenario 主要是场景的参数文件(名称大致与下面对应)
modules/planning/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
调用传感器数据
用protobuf协议获取/apollo/modules/canbus/proto的文件可以获取车辆底盘信息
/apollo/modules/perception/proto的文件可以获取视觉、雷达传感器数据
标签:dreamview,scenario,config,场景,task,未完待续,planning,type,ptr 来源: https://www.cnblogs.com/qsbye/p/16341145.html