Apollo:参考线信息类ReferenceLineInfo
- 在ReferenceLine之外,在common目录下还有一个结构:ReferenceLineInfo,ReferenceLineInfo用于存储参考线信息。ReferenceLineInfo结构才是各个模块实际用到数据结构,它其中包含了ReferenceLine,但还有其他更详细的数据。
- 所谓的参考线其实是一条驾驶路径,因此参考线信息实际上就是一条驾驶路径所需的各种信息,包括车辆状态,当前轨迹点,路径数据,速度数据…
- 定义在/planning/common/reference_line_info.h
成员变量
数据类型 | 成员变量名 | 说明 |
---|---|---|
static std::unordered_map<std::string, bool> | junction_right_of_way_map_; |
|
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_; |
|
SLBoundary | adc_sl_boundary_; |
|
planning_internal::Debug | debug_; |
|
LatencyStats | latency_stats_; |
|
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_; |
|
StGraphData | st_graph_data_; |
|
common::VehicleSignal | vehicle_signal_; |
|
double | cruise_speed_ = 0.0; |
|
bool | path_reusable_ = false; |
|
成员函数
该类主要包含以下重要成员函数: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相关推荐
- fir滤波器c++程序_电气信息类专业课程之matlab系统仿真 第三章 滤波器的种类(1)...
在讲解滤波器的种类之前,必须先讲解滤波器实现滤波的过程.怎么实现?matlab中是可以用filter函数,那总不能在单片机或者FPGA中也调用filter函数吧.可能吗? 不可能! 那怎么实现滤波过程 ...
- matlab中的方波信号图片_电气信息类专业课程之matlab系统仿真 第十章 DBPSK调制解调器(9)...
继续展示程序!好东西总是慢慢的吃才有味道!当然对于本科阶段的学习而言,本章知识的难度已经不算小了. 函数化编程的概念应该刻在脑子里! 误码性能的展示!!! 工程经验:看误码率就能大概知晓程序是否有问题 ...
- 大数据统计分析毕业设计_基于大数据分析的电子信息类专业毕业设计成绩影响因素研究...
基于大数据分析的电子信息类专业毕业设计成绩影响因素 研究 温芳琴 [期刊名称] <佳木斯教育学院学报> [年 ( 卷 ), 期] 2019(000)011 [摘要] 通过收集苏州科技大学天 ...
- java 配置信息_[Java教程]java 配置信息类 Properties 的简单使用
[Java教程]java 配置信息类 Properties 的简单使用 0 2016-12-08 09:00:09 Properties :(配置信息类) 是一个表示持久性的集合 ,继承 Hashta ...
- 在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable。
在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable. ...
- 信息类产品检测培训讲义-EN55024
一,信息类产品CE认证测试标准 EN55022 , EN55024 , EN60950 二,定义 ITE (INFORMATION TECHNOLOGY EQUIPMENT)信息技术设备 A,能对数据 ...
- 自适应滤波器在matlab仿真的程序_电气信息类专业课程之matlab系统仿真 第五章 BPSK通信系统(3)...
继续讲解! 上一篇文章提出了那么多问题, 不知道大家是否能回答上来啊? 如果回答不了, 有没有去问问度娘呢? 程序写完了,回想了一下辅导2017届学生毕业设计的过程,那是真累.我要求他们在现有程序基础 ...
- C#读取EXIF信息类
[转]C#读取EXIF信息类 ExifWorks using System; using System.Collections.Generic; using System.Text; namespac ...
- 清华大学成立人工智能学堂班,土木类、电子信息类实行全程大类培养
高考在即,5月18日,清华大学一年一度的校园开放日暨招生信息交流会如期举行.人工智能.大类贯通培养和专业认知,是本次校园开放日的关键词. 关键词1:人工智能 清华大学成立人工智能学堂班 开放日当天,清 ...
最新文章
- MIMIC 以太坊医疗项目开发(5)truffle部署智能合约
- 抗锯齿_最好的抗锯齿,画质保留提升帧数
- html里的value什么含义,HTML input value属性表示什么
- 疯狂的机器学习实战-银行营销预测
- PHP实现敏感词过滤系统
- linux脚本格式模板,Linux Shell 常见的命令行格式简明总结
- linux之ssh使用与配置
- USACO 4.3.1 Buy Low, Buy Lower
- 拓端tecdat|R语言基于ARCH模型股价波动率建模分析
- Atitit uke证件编码规范与范本
- C# html日期选择控件,C#实现日期选择
- blastn、blastp、blastx、tblastn和tblastx的区别与用法
- 硬核讲习,10名“悟道”核心成员,剖析大模型
- 【题解】【中国大学MOOC】(北京大学)人工智能与信息社会考试——期末考试
- 杭州车牌摇号规则详细内容
- MPEG-2与MPEG-4
- c语言五子棋最简单的ai,C++简单五子棋的AI设计实现
- 怎么找到当地供应商_微商怎么找一手货源供货商(微商新手必看教程)
- MetaCoMET----核心微生物组分析在线工具
- Linux命令大全总结(看这一篇就够了)