ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Apollo自动驾驶虚拟仿真赛笔记[5]-dreamview操作技巧及planning目录分析(未完待续)

2022-06-04 02:02:03  阅读:425  来源: 互联网

标签:dreamview scenario config 场景 task 未完待续 planning type ptr


dreamview操作技巧及planning目录分析

dreamview操作技巧

route editing在地图上右键拖动可以拖动地图

route editng中滚轮可以放大缩小地图

/data/core中的文件貌似是垃圾文件

watch -n 1 nvidia-smi可以查看GPU使用情况

apollo_map场景标注

image

场景注册

场景管理类"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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有