百度Apollo规划决策模块学习记录-1 概述及基本算法
内容为百度技术学院apollo无人驾驶公开课的决策规划课程,资源在b站可以找到。
目录
Lecture 1
对规划问题的理解
规划问题的本质是搜索
-
寻找能够使f(x)最小化的x,即argmin f(x)
-
在车辆运动规划问题中,这个问题具体化为给定车辆现在的状态,找到怎么移动的最优解。
-
最优解如何定义:通过目标函数定义
对运动规划的理解
对Motion Planning,可以从以下角度/领域来理解:
-
Robotic Fields:机器人学,如何生成让机器人到达目标的轨迹
方法:RRT、A*、D*、Lattice Planning等
-
Control Theory:控制理论(控制与规划相结合)
方法:动态规划,MPC,LQC等
-
AI:直接端到端地产生状态到行为的映射
方法:强化学习等
从最简单的问题入手
对于运动规划的理解,可以从最简单的角度入手——Path Finding Problem,即不考虑时间维度,单考虑找到一条从起点到目标点的可行路径。这类问题有如下分类:
-
Non-informative/Informative Search
以搜索方式来分类,利用/不利用目标位置等信息
- BFS、DFS:不管是广度优先搜索还是深度优先搜索,都属于Non-informative Search
- A*:加入启发式成本,利用起点和目标点之间的信息,属于Informative Search
-
Fully/Partially Observed Environment
以所处环境来分类,环境全知/部分可知
-
A* 用于Global Routing,因为是Global Optimization,即要求对环境全知
-
当环境非全知时,可采用增量式搜索,如D*
-
仍需考虑的问题
- 车辆无法执行不平滑的路径,还需考虑运动学模型和动力学模型
- 环境不仅非全知,且有动态障碍物
- 车辆需要遵守交通规则,如何在模型中融入交通规则
- 实时性,要求无人车的反映时间0.2-0.3秒(人驾车时的反映时间0.4-0.5秒)
运动规划的几个层次
- 路径与轨迹的区别:“Trajectory = Path + Speed Profile”,即轨迹多了时间维度的描述
- 个人觉得可以分这样的层次:Route(路线)→ Path(路径) → Trajectory(轨迹)
- Motion Planning的层次
- Layer 1:Global Routing
- Layer 2:Motion Planning
参考资料
Lecture 2
对路径的约束
- Local Constraints 障碍物
- Differential Constraints 曲率
- Global Constraints 路径长度尽可能小
离散化Configuration
连续空间不宜解的问题先进行离散化,在离散化空间中尝试解决。将Configuration Space离散化的方式有以下几种:
-
Roadmap
这里特别提醒到,最优解常经过障碍物的顶点,在后面处理凸优化问题时候同理,最优解常常是贴着“Constraints”的。
-
Cell Decomposition
把Configuration Space离散一个个Cell去处理
-
Potential Field
Path Planning算法
-
PRM
在对环境全知的情况下“撒点”,用点和点之间的连通性表示可达性。
-
RRT
当环境非全知时,RRT的增量式搜索可以发挥作用,其思想和PRM相似,所以又称为增量式的PRM(An incremental search ver. of PRM)
RRT和PRM的解都是折线,折线显然不满足自动驾驶的平滑性要求,因为折线拐点处相当于没有曲率,也可以认为是曲率无限大。基于这样的缺陷,算法有如下改进:不再用直线去将点连接,用平滑的线连接。
但实际上这样的算法也有几个局限:
- 无法应对动态障碍物
- 最终解仍然不够平滑,是一种“扭来扭去”的形式
- 还是不太适合于structured road(即高速公路、马路等,对应unstructured road,如空地)
-
Lattice Sampling
状态格算法有如下优点:
- 限制采样点都是fixed,降低搜索难度,不再是指数级别的Sampling
- 走过的arc的长度可以记录下来-“记忆性”,便于后续计算时复用,减少重复计算-“动态规划”
- 在S-L坐标系下采样计算进一步提高了对structured road的适应性
处理高维问题的方式
运动规划有三个维度,x、y、t,同时处理三个问题十分困难,时间复杂度高。但可以用降维的思想,在一个维度上优化后再在另外一个维度上优化,比如先优化x-y,再优化s-t,不断迭代也可以收敛到一个Local Optimal,这样的局部最优解虽然不一定是全局最优解,但对无人车来说往往也够用了。找到Global Optimal是极其困难的,且处理要慢很多。
无人车问题不是凸问题
-
无人车问题不是凸问题
无人车问题不是凸问题,这给二次规划方法解决带来了难度。
这里给出了车行驶时前方单障碍物的情景说明非凸性,车可以左边nudge,也可以从右边绕,但是这两种解加起来–从中间走,显然不可行。这说明可行域,即search space非凸,自然不是凸优化问题。
-
如何将问题转化为凸问题?
根据经验,选出一个凸可行域,再在这个空间里凸优化。比如这个例子中,只搜索从左边nudge的范围。