1. 指引线/参考线
人类司机驾驶车辆来录制行驶轨迹,再对原始轨迹进行平滑等处理,得到指引线;
reference Line 的作用:
- 替代routing 模块 输出导航路径, 给到决策规划,提供车道级别的导航
- 与视觉感知系统配合生成地图的基本信息,是生成相对地图的基准线
- 因为是人类驾驶员的驾驶轨迹,所以安全+舒适;
2. 相对地图
高清地图可以认为是静态地图,依赖离线采集;
感知模块提供实时的障碍物和地图信息;
感知提供的实时信息 + 高清地图 = 相对地图;
产生的地图数据三相对与车身坐标系,这就是命名的由来;在车身坐标下,车辆坐标永远在原点, 车头方向一直是0;
相对地图 会结合指引线和道路边界 将所有目标实时转化的车身坐标系下,实时(> 10hz)发给决策规划控制模块;
为什么说结合指引线呢? 因为比如车道线描述,有些是基于当前车道来描述的;
FLAGS_use_navigation_mode: 表示NaviMode导航模式, 与之对应的是StandardMode
rtk_mode | record replay |
||
navigation_mode | FLAGS_use_navigation_mode = 1 | relative_map | modules\map\relative_map\ NaviPlanning |
FLAGS_use_navigation_mode = 0 | OnLanePlanning | ||
standard_mode | hdmap | ||
2.
名称 | 加入版本 | 类型 | 说明 |
---|---|---|---|
RTKReplayPlanner | 1.0 | RTK | 根据录制的轨迹来规划(循迹)行车路线。 |
PublicRoadPlanner | 1.5 | PUBLIC_ROAD | 实现了EM算法的规划器 |
LatticePlanner | 2.5 | LATTICE | 基于网格算法的轨迹规划器, 路径和速度同时优化。 主要用于高速公路 |
NaviPlanner | 3.0 | NAVI | 基于实时相对地图的规划器。主要用于高速公路 |
OpenSpacePlanner | 3.5 | OPEN_SPACE | EMPlanner 变为PublicRoadPlanner; 算法源于论文:《Optimization-Based Collision Avoidance》 |
5.0 | 取消了SL 的DP (动态优化), 大概还是EM 思维 | ||
6.0 | |||
7.0 | 新增DeadEndTurnAround, 三点掉头 | ||
8.0 | 去掉了DeadEndTurnAround |
EM Planner | Lattice Planner |
---|---|
横向纵向分开求解 | 横向纵向同时求解 |
参数较多(DP/QP, Path/Speed) | 参数较少且统一 |
流程复杂 | 流程简单 |
单周期解空间受限 | 简单场景解空间较大 |
能适应复杂场景 | 适合简单场景 |
适合城市道路 | 适合高速场景 |
设计上,em适合解决复杂的城市道路,lattice适合解决相对简单的高速场景。
三种规划模式
OnLanePlanning | 车道规划,可用于城区及高速公路各种复杂道路 |
NaviPlanning | 导航规划,主要用于高速简单的公路 |
OpenSpacePlanning | 自主泊车和狭窄路段的掉头, 没有车道线场景 |
l‘ 一阶导是tan(heading angle)
l'' 二阶导是曲率相关
l'''三阶导就是曲率变化率相关
名称 | 说明 |
---|---|
EgoInfo 类 |
包含了自车信息,例如:当前位置点,车辆状态,外围Box等。 |
Frame 类 |
包含了一次Planning计算循环中的所有信息。 |
FrameManager 类 |
Frame的管理器,每个Frame会有一个整数型id。 |
LocalView 类 |
Planning计算需要的输入,包含再Frame中 |
Obstacle 类 |
描述一个特定的障碍物。障碍物会有一个唯一的id来区分。 |
PlanningContext 类 |
Planning全局相关的信息,例如:是否正在变道。这是一个单例。 |
ReferenceLineInfo 类 |
车辆行驶的参考线,下文会专门讲解。 |
path 文件夹 |
描述车辆路线信息。包含:PathData,DiscretizedPath,FrenetFramePath三个类。 |
speed 文件夹 |
描述车辆速度信息。包含SpeedData,STPoint,StBoundary三个类。 |
trajectory 文件夹 |
描述车辆轨迹信息。包含DiscretizedTrajectory,PublishableTrajectory,TrajectoryStitcher三个类。 |
planning_gflags.h |
定义了模块需要的许多常量,例如各个配置文件的路径。 |
3. 决策
利用分治(Divide and Conquer)思想来设计的基于规则的行为决策实现;事实上,如果能够用先进的软件工程实现结合交规和周边路况的行为决策,Deterministic的规则系统甚至可能在安全可靠性上优于基于概率模型的实现方式。
4. 规划
lateral boundary decide output:
fallback | 基于lane 和 自车位姿, 不借道 | |
regular/pullover | pullover scenario | GeneratePullOverPathBound |
regular/lanechange | GenerateLaneChangePathBound 这里没给左右标签 |
|
regular/ left-right-self/ forward-reverse-"" |
regular/left/forward regular/left/reverse regular/right/forward regular/right/reverse regular/self/ |
GenerateRegularPathBound 左右借道用来打灯 |
LaneBorrowInfo | ||
PathBound | ||
GetBoundaryFromStaticObstacles |
||
5. reference
Class Architecture and Overview -- Planning Module - github--Apollo
解析百度Apollo之决策规划模块
樊昊阳-规划控制-APOLLO-BIT
[论文解读]Baidu Apollo EM Motion Planner
张辉-决策规划-APOLLO-BIT
6.1 planning - Hello Apollo 自动驾驶公开课
6.2 Lattice - Hello Apollo 自动驾驶公开课
张雅嘉 - Apollo轨迹规划技术分享
张雅嘉QA - 百度 Apollo 轨迹规划技术
Piecewise Jerk Path Optimizer - cnblog
Path Bounds Decider - cnblog
Apollo自动驾驶论坛/Apollo规划模块算法解析/Apollo开发者社区
Hello Apollo - lattice planner - 许珂诚
Hello Apollo - Apollo 2.5自动驾驶规划控制- 朱帆
无人驾驶急需解决:规划控制和传感器价格高两大问题(附Apollo算法)
Apollo问答 | 关于Lattice Planner规划算法的若干问答
社群分享内容 | Lattice Planner规划算法
博客园 - 一起来看流行雨 - 智能驾驶专栏-lattice - 行为规划
信的札/王不二的路/ Lattice Planner csdn/知乎专栏
dig-into-apollo wiki
百度Apollo决策技术分享 - 蒋一飞 2019