2.motion panning with autonomous driving
上一节讲了自动驾驶一些基本的硬件框架以及软件框架,还有一些路径规划的基本概念以及需要考虑的问题,比如路径平滑、交通规则等。本节将讲述自动驾驶中常用的路径规划的方法,约束问题的抽象表达以及路径的平滑等问题。
motion planning常用的方法有:
上面这些方法考虑的都是质点模型,车辆是一个刚体,规划过程中,需要考虑刚体与刚体会相交,质点是不会相交,同时,刚体还需要考虑heading等因素
constraint(约束条件)的类型有:障碍物,车辆的转弯半径-曲率,以及最短路径等
在连续空间中,求最短路径不好求,解决办法就是先离散化,然后在离散空间中求最优解,然后扩展到连续空间。
离散以后,就可以利用A star等路径规划的方法求解了。
现在常用的离散方法有:
现在主要的离散化方法使用potential field,用微分的方法直接去处理。
RRT:随机撒点
RRT节点之间用折线连接,在节点出不够平滑
Lattice利用网格化来离散,利用动态规划来简化运算。
轨迹规划中不仅要将路径离散化,同时也要将时间离散化,当考虑时间以后,动态规划就不好做了,比如,你以1m/s的速度行驶会有一个车辆相遇,当你以2m/s行驶时,情况就不一样了。
上图把车辆运动分为沿着道路走的横向运动以及纵向运动。
高维空间的优化问题,就先降维处理,分为path和speed分开最优化,如下图所示节点与节点之间用螺旋线链接。
Convex optimization凸优化空间。凸优化在图空间里面有唯一解。
从平滑性的角度出发,先生成一些spline,然后再从贝塞尔曲线找这些点,上图是先优化再平滑。
但是这样仍旧有问题:用越高阶的函数去平滑优化后的路径,则平滑后的曲线与优化的路径相差会越大,这样车辆在行驶过程中,如何能保证安全性,比如不撞到障碍物。
总结:
离散求约束条件下的轨迹方法有:
第一个就是网格化,通过动态规划的方法将他降维成一个polynomial,polynomial也是一种quadratic programming.
第二个三维空间的search,需要考虑几何形状,路径里面需要包括车的heading,以及bounded model,整个车至少需要当成一个刚体考虑,三位空间的优化方法包括直接在三维空间里面优化,或者是path speed iterative,降维以后处理每个子问题,然后通过不断迭代的方式去寻找最优解,先生成最优的path,然后再生成最优path下的speed,然后根据最优的speed,再生成最优的path,但这种迭代的方式收敛到的不是最优解,可能是一个local 最优。
第三个就是利用动态规划来简化运算,简化那些需要重复计算的。
第四个是一个二次优化问题,在空间中速度非常快,可以找到一个最优解,但是要求空间是凸的,
Smooth spline以及spiral path这些都是连接两个点能够光滑连接的一个方法,贝塞尔曲线是另一种处理方法,贝塞尔就是先生成一些离散的点,然后再平滑,但是平滑曲线阶数高了以后,安全性不好保证。