apollo planning module

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\
relative_map.cc

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

你可能感兴趣的:(无人驾驶,自动驾驶)