最近看到一篇非常好的关于自动驾驶规划方法的综述(A Review of Motion Planning Techniques for Automated Vehicles),写的非常好,总结了近几十年来总动驾驶规划的发展之路,引用了许多经典的文章。觉得可能对做规划的小伙伴会有帮助,所以分享出来。
这篇文章的一个观点非常好,他把自动驾驶的运动规划分成四大类:graph search 图搜索,采样,插值和数值优化。下面展开论述。
A. Graph search based planners
这种方法把状态空间表达成网格或者lattice的形式,然后在这些状态里面找到一个可达的path。这类方法主要有A* D* Dijkstra algorithm 算法。值得一提的还有state lattice算法,虽然这个图看起来和Apollo里面的lattice不一样,但是这个是爸爸,在这篇文章[1]里面提出了时空lattice,这个也就是后来Apollo算法里面用的。
B. Sampling based planners
这个主要介绍了RRT算法,嗯非常经典好用,如果有感兴趣的可以单独开讲。
C. Interpolating Curve Planners
这里介绍了几种曲线生成的方法,主要有羊角螺旋线(Clothoid Curves)多项式曲线(Polynomial Curves) 贝塞尔曲线(Be ́zier Curves)
分别介绍了这几类样条曲线在路径规划的优化过程中作用。
clothoid curves 是个比较神奇的曲线,天生适合车辆规划,因为它的曲率是线性变化的,又因为车辆运行轨迹的曲率和方向盘基本上成正比,也就是说这种线型出来的结果方向盘会非常顺滑。
贝塞尔曲线 计算简单 速度快。
多项式拟合也是一个比较好的方法。
D. Numerical Optimization:
数值优化的方法讲的比较粗略,基本上只是讲了下势能场法的应用。
在这一段的结束,作者给出了一个大的表格,比较不同方法的优劣,感觉这个比较强大,不是大佬很难总结的如此精辟。
各种规划算法的优劣对比
下面这幅图,作者阐述了不同项目/公司的motion planning的技术方案,从下面这个图可以看出来,各家公司很少会依赖单一的规划方法进行规划,而是根据使用场景,结合两个甚至更多种的规划方法来进行规划。比如斯坦福大学和合作机构采用了AL算法,基于优化的算法甚至用羊角螺旋线进行插值。
大多数企业采用了基于样条曲线,羊角螺旋线的方法,主要是考虑可以获取细致的道路信息。采用search 方法的主要原因是这样的速度快,在复杂场景下而且可以搜索到比较好的曲线。目前规划存在的挑战在于实时性,由于越来越多的障碍物,感知留给规划的时间窗口越来越小。下一步的motion planning的研究,应该考虑感知的不确定性以及控制的约束。这样会更加安全,舒适。