• 在ReferenceLine之外,在common目录下还有一个结构:ReferenceLineInfo,ReferenceLineInfo用于存储参考线信息。ReferenceLineInfo结构才是各个模块实际用到数据结构,它其中包含了ReferenceLine,但还有其他更详细的数据。
  • 所谓的参考线其实是一条驾驶路径,因此参考线信息实际上就是一条驾驶路径所需的各种信息,包括车辆状态,当前轨迹点,路径数据,速度数据…
  • 定义在/planning/common/reference_line_info.h

成员变量

数据类型 成员变量名 说明
static std::unordered_map<std::string, bool> junction_right_of_way_map_;
  • junection和路权的映射表
const common::VehicleState vehicle_state_;
  • 车辆状态类信息
  • 从其他地方获取的车辆状态,不可以修改
const common::TrajectoryPoint adc_planning_point_;
  • 规划起始点
  • 从其他地方获取的规划点,不可以修改
ReferenceLine reference_line_;
  • 参考线
  • 从其他地方获取的参考线,不可以修改
double cost_ = 0.0;
  • 参考线代价,越小越好
bool is_drivable_ = true;
  • 表示参考线是否能够驾驶(是否规划成功)
PathDecision path_decision_;
  • 路径决策类,包含障碍物( 表示当前参考线是否有障碍物)和决策信息
Obstacle* blocking_obstacle_;
  • 车道内的障碍物<
std::vector< PathBoundary> candidate_path_boundaries_;
  • 候选路径边界
std::vector< PathData> candidate_path_data_;
  • 候选路径数据
PathData path_data_;
  • 路径数据
  • 存储参考线包含的路径对象
PathData fallback_path_data_;
  • 回退路径数据,规划失败时使用
SpeedData speed_data_;
  • 速度规划数据
  • 存储参考线包含的速度信息
DiscretizedTrajectory discretized_trajectory_;
  • 离散化轨迹类对象
  • 存储参考线的离散化轨迹点集
RSSInfo rss_info_;
  • planning.proto中的敏感性安全信息
SLBoundary adc_sl_boundary_;
  • 参考线的sl边界
  • 存储参考线的边界信息
planning_internal::Debug debug_;
  • 调试信息
LatencyStats latency_stats_;
  • 延迟统计
  • 存储参考线包含的隐藏状态,包括总时长(ms)、控制器时长(ms)。
hdmap::RouteSegments lanes_;
  • 高精地图的路由信息
  • 存储参考线的车道片段集
bool is_on_reference_line_ = false;
  • 自车是否在参考线上
bool is_path_lane_borrow_ = false;
  • 借道标志位,临时强占路权
ADCTrajectory::RightOfWayStatus status_ = ADCTrajectory::UNPROTECTED;
  • 路权状态
double offset_to_other_reference_line_ = 0.0;
  • 相对于相邻参考线的偏移
double priority_cost_ = 0.0;
  • 优先代价
PlanningTarget planning_target_;
  • 包括终止点,巡航速度等
ADCTrajectory::TrajectoryType trajectory_type_ = ADCTrajectory::UNKNOWN;
  • 轨迹类型
std::vector<std::pair<OverlapType, hdmap::PathOverlap>> first_encounter_overlaps_;
  • 通过排序获得最先遇到的overlap
StGraphData st_graph_data_;
  • st图
common::VehicleSignal vehicle_signal_;
  • 自车的信号灯,转向,双闪灯
double cruise_speed_ = 0.0;
  • 巡航速度
bool path_reusable_ = false;
  • 是否可以reuse,比如用于fallback

成员函数

该类主要包含以下重要成员函数:AddObstacles、IsStartFrom、IsChangeLanePath、CombinePathAndSpeedProfile、ExportTurnSignal、ExportDecision、ReachedDestination,其他函数是辅助函数

AddObstacles

  • 作用:在当前参考线中加入障碍,让参考线更加接近实际的驾驶路径

调用入口

创建ReferenceLineInfo:Frame::CreateReferenceLineInfo

  • ReferenceLineInfo由Frame根据ReferenceLine和RouteSegments创建得到。
  • 在每个Planning计算循环的开始,都会创建和初始化一个新的Frame,而Frame初始化的时候就会创建ReferenceLineInfo。当有多个ReferenceLine的时候,则意味着需要变道。
bool Frame::CreateReferenceLineInfo(const std::list<ReferenceLine> &reference_lines,const std::list<hdmap::RouteSegments> &segments) {reference_line_info_.clear();auto ref_line_iter = reference_lines.begin();auto segments_iter = segments.begin();while (ref_line_iter != reference_lines.end()) {if (segments_iter->StopForDestination()) {is_near_destination_ = true;}reference_line_info_.emplace_back(vehicle_state_, planning_start_point_,*ref_line_iter, *segments_iter);++ref_line_iter;++segments_iter;}if (FLAGS_enable_change_lane_decider &&!change_lane_decider_.Apply(&reference_line_info_)) {AERROR << "Failed to apply change lane decider";return false;}...
}

ReferenceLine主要是静态数据(路径点和限速)的存储,而ReferenceLineInfo中会包含动态信息(障碍物)和更多逻辑。

操作ReferenceLineInfo

主要有下面两个地方会操作ReferenceLineInfo:

  • /modules/planning/traffic_rules:该目录下是交通规则的实现。不同Rule会向ReferenceLineInfo添加不同的数据,例如:障碍物,红绿灯等等。
  • /modules/planning/tasks:该目录下是许多的决策器和优化器,这是Apollo EM Planner算法的核心。

交通规则的应用是在TrafficDecider::Execute方法中执行的。

每个交通规则都会实现下面这个方法来完成其逻辑:

common::Status ApplyRule(Frame* const frame,ReferenceLineInfo* const reference_line_info) = 0;

这里的指针类型的参数就意味着方法实现可能会修改参数的值。

对于ReferenceLineInfo的操作,主要是修改该类的以下三个字段:

  • PathData path_data_:包含了路径相关的数据,逻辑实现位于modules/planning/common/path/中。
  • SpeedData speed_data_:包含了速度相关的数据,逻辑实现位于modules/planning/common/speed/。路径和速度最终将组合起来使用,以生成行车轨迹(见下文)。
  • PathDecision path_decision_:这个字段中包含了障碍物的决策信息。

障碍物在Planning模块中通过apollo::planning::Obstacle描述。

障碍物分为横向障碍物和纵向障碍物。横向障碍物将可能导致车辆的nudge行为。而纵向障碍物可能导致车辆出现:stop,yield,follow,overtake行为。这几个行为的优先级从左到右依次递减。

预测模块对于同一个障碍物可能会有多个预测轨迹。此时在Planning模块中,会多个apollo::planning::Obstacle对象分别对应每一个轨迹。

Apollo:参考线信息类ReferenceLineInfo相关推荐

  1. fir滤波器c++程序_电气信息类专业课程之matlab系统仿真 第三章 滤波器的种类(1)...

    在讲解滤波器的种类之前,必须先讲解滤波器实现滤波的过程.怎么实现?matlab中是可以用filter函数,那总不能在单片机或者FPGA中也调用filter函数吧.可能吗? 不可能! 那怎么实现滤波过程 ...

  2. matlab中的方波信号图片_电气信息类专业课程之matlab系统仿真 第十章 DBPSK调制解调器(9)...

    继续展示程序!好东西总是慢慢的吃才有味道!当然对于本科阶段的学习而言,本章知识的难度已经不算小了. 函数化编程的概念应该刻在脑子里! 误码性能的展示!!! 工程经验:看误码率就能大概知晓程序是否有问题 ...

  3. 大数据统计分析毕业设计_基于大数据分析的电子信息类专业毕业设计成绩影响因素研究...

    基于大数据分析的电子信息类专业毕业设计成绩影响因素 研究 温芳琴 [期刊名称] <佳木斯教育学院学报> [年 ( 卷 ), 期] 2019(000)011 [摘要] 通过收集苏州科技大学天 ...

  4. java 配置信息_[Java教程]java 配置信息类 Properties 的简单使用

    [Java教程]java 配置信息类 Properties 的简单使用 0 2016-12-08 09:00:09 Properties :(配置信息类) 是一个表示持久性的集合 ,继承 Hashta ...

  5. 在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable。

      在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable. ...

  6. 信息类产品检测培训讲义-EN55024

    一,信息类产品CE认证测试标准 EN55022 , EN55024 , EN60950 二,定义 ITE (INFORMATION TECHNOLOGY EQUIPMENT)信息技术设备 A,能对数据 ...

  7. 自适应滤波器在matlab仿真的程序_电气信息类专业课程之matlab系统仿真 第五章 BPSK通信系统(3)...

    继续讲解! 上一篇文章提出了那么多问题, 不知道大家是否能回答上来啊? 如果回答不了, 有没有去问问度娘呢? 程序写完了,回想了一下辅导2017届学生毕业设计的过程,那是真累.我要求他们在现有程序基础 ...

  8. C#读取EXIF信息类

    [转]C#读取EXIF信息类 ExifWorks using System; using System.Collections.Generic; using System.Text; namespac ...

  9. 清华大学成立人工智能学堂班,土木类、电子信息类实行全程大类培养

    高考在即,5月18日,清华大学一年一度的校园开放日暨招生信息交流会如期举行.人工智能.大类贯通培养和专业认知,是本次校园开放日的关键词. 关键词1:人工智能 清华大学成立人工智能学堂班 开放日当天,清 ...

最新文章

  1. MIMIC 以太坊医疗项目开发(5)truffle部署智能合约
  2. 抗锯齿_最好的抗锯齿,画质保留提升帧数
  3. html里的value什么含义,HTML input value属性表示什么
  4. 疯狂的机器学习实战-银行营销预测
  5. PHP实现敏感词过滤系统
  6. linux脚本格式模板,Linux Shell 常见的命令行格式简明总结
  7. linux之ssh使用与配置
  8. USACO 4.3.1 Buy Low, Buy Lower
  9. 拓端tecdat|R语言基于ARCH模型股价波动率建模分析
  10. Atitit uke证件编码规范与范本
  11. C# html日期选择控件,C#实现日期选择
  12. blastn、blastp、blastx、tblastn和tblastx的区别与用法
  13. 硬核讲习,10名“悟道”核心成员,剖析大模型
  14. 【题解】【中国大学MOOC】(北京大学)人工智能与信息社会考试——期末考试
  15. 杭州车牌摇号规则详细内容
  16. MPEG-2与MPEG-4
  17. c语言五子棋最简单的ai,C++简单五子棋的AI设计实现
  18. 怎么找到当地供应商_微商怎么找一手货源供货商(微商新手必看教程)
  19. MetaCoMET----核心微生物组分析在线工具
  20. Linux命令大全总结(看这一篇就够了)

热门文章

  1. Html基本标签与CSS样式基本使用
  2. 微型计算机电路基础第四版答案,微型计算机电路基础期末试卷2B
  3. 黏菌优化算法SMA与算术优化算法AOA及其联合改进
  4. PTA练习题1027 打印沙漏 (20分)
  5. 钉钉自定义机器人配合SVN钩子事件进行消息的推送实践
  6. OSSH免费版华为Portal系统ISO镜像版发布
  7. WinXP SP3 系统
  8. 迁移学习二——JDA
  9. js Date类型相关(二)——获取时间、格式化时间以及当前月第一天、最后一天
  10. http status code 404 使用陷阱