规划的本质是搜索。
基于目标函数,找到一个安全舒适的行驶轨迹。
机器学习的话,其实是一个寻找mapping的过程,state to action 的mapping
搜索是寻找action去optimize objective function 的过程。
可以通过BFS, DFS进行搜索,不过效率不高,他们都是Non-informative search。
A*为代表的方法使用了目标的信息,属于informative search,效率会高些。
对于 RL, prioritize search目标的时候是通过目前的cost加上heuristic cost,就是value function,对于RL,怎么设计和找到这个value function是个关键点。
A*算法对于无人车的路径规划有多远?
对于无人车而言,周围是个Partially observed dynamics environment,这种情况下,A*是有局限性的,A*本身是个Global Optimization,要求对整个环境全知,部分了解就会出问题。因此A*现在只应用在Global routing。
对于Partially observed dynamics environment,可以用贪心算法,表现出来就是Incremental search。
无人车还要考虑车辆自己的运动模型,让平滑规划的轨迹,使其可以行驶。
dubin path对于无人车来说是不可以的。因为curvature不是连续的。
PRM 全空间撒点
要求对环境全知,很难实现。
通过partial observed 的环境,在一个半径内撒点,找新散布的点里那些距离原来的点较近。
MIT提出了改进,用平滑线去sampling, 但也有问题:动态障碍物和曲线不够平滑,主要原因是随机的撒点。
局限性,不够平滑。
curvature连续的曲线。
方格,没有人实际这么开车。
规则话的sampling,指数级的加点。computational intractable
改进,先撒点,然后再用平滑曲线去连接。重复计算简化下来------动态规划
说的简单点,最开始的Lattice Planning是不长记性的,动态规划是长记性的。
继续改进,用SL坐标系。
路径迭代算法,可以找到一个局部最优解,但是不是全局最优,有时会出问题。
把曲线funtional话,l=f(s),优化function的objective。上面用到的方法是Quadratic Programming 凸优化,convex programming,在凸空间里,可以用二次规划很快找到最优解。
最开始的 Lattice Planner, exponential exploration时间复杂度 太慢,是N的指数,优化后的DP,把相似的计算结果存储,复杂度是polynomial time,再进一步, 把目标函数处理成凸函数,Quadratic Programming,用牛顿法优化,二次迭代, double exponential,通过几次迭代就可以得到解, 比binary Search还要快。QP的问题是,QP要求目标函数是凸的,并且 Search Space 也是凸的。QP没法处理非凸的问题,但是速度快。
Graph search based planners: Dijkstra algorithm,A-star algorithm (A*),State Lattice;
traverse a state space to get from point A to point B. This state space is often represented as an occupancy grid or lattice that depicts where objects are in the environment.
Sampling based planners: Probabilistic Road Maps (PRM) ,Rapidly-exploring Random Tree (RRT);
Interpolating Curve Planners:Lines,Circles,Clothoid,Polynomial,Bezier,Spline;
Numerical Optimization: Function Optimization.
参考资料:
[1] Apollo 进阶课程
[2] A Review of Motion Planning Techniques for Automated Vehicles