python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)

Hybird A*算法保证生成的路径是车辆可实际行驶的,但它仍然包含很多不必要的车辆转向操作,我们可以对其进行进一步的平滑和优化。

Objective Function

对于Hybird A*生成的车辆轨迹序列:

,论文【1】中提出如下的目标优化函数(Objective Function):

该优化函数是Voronoi Term、Obstacle Term、Curvature Term和Smoothness Term四个部分的加权平均:第一个部分引导车辆尽可能的避开障碍物区域;第二个部分惩罚车辆与障碍物的碰撞行为;第三部分约束规划的每个点的最大曲率,并提供车辆非完整约束的保证;第四个部分是轨迹的平滑性约束。

分别是这四个部分的权重因子。

1、Voronoi Term

Voronoi Term中引入了Voronoi Field的概念,Voronoi Field是机器人Motion Planning领域两种经典算法Voronoi Diagram和Potential Field的结合。

半杯茶的小酒杯:自动驾驶路径规划-Voronoi Planner​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第1张图片
半杯茶的小酒杯:路径规划-人工势场法(Artificial Potential Field)​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第2张图片

此处采用Voronoi Field的定义如下:

其中

分别是路径点(x,y)到最近障碍物的距离和到最近Voronoi Diagram的边的距离。越靠近障碍物,
的值越大,越接近1;越靠近Voronoi Edge,
的值越接近0。

python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第3张图片

上图图左一为Voronoi Field的实际效果,上图右一是标准Potential Field的实际效果。可以看到,Voronoi Field对狭窄通道的效果要明显优于Potential Field。

python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第4张图片

2、Obstacle Term

Obstacle Term中

是路径点坐标位置,
是附近障碍物的位置,
是决定Obstacle Term是否影响路径Cost的阈值。当路径点距离障碍物的距离小于
时,Obstacle Term才会对轨迹的Cost进行惩罚。距离障碍物越近,
的值越小,Obstacle Term的值就越大,整个轨迹的Cost也就越大。这样就达到了使得平滑后的路径远离障碍物的效果。

这里

一般使用二次函数。即:

3、Curvature Term

对于一系列的点

,即为规划路径的方向向量;
为路径点的方向角变化。

处的曲率。与Obstacle Term类似,Curvature Term也设置了一个最大允许的路径曲率
,当曲率大于
时,Curvature Term才会对路径的Cost施加惩罚。

4、Smoothness Term

平滑项利用当前点前后两个方向向量的差值来衡量,方向向量既可以衡量方向的改变,也可以体现轨迹点的分布变换。

5、梯度下降

确定Objective Function函数之后,就可以利用Conjugate Gradient(CG,共轭梯度法)或者Gradient Descent求解最优路径。

python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第5张图片

代码参见:

https://github.com/teddyluo/hybrid-a-star-annotation/blob/master/src/smoother.cpp

平滑后的路径如下:

python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第6张图片

Non-Parametric Interpolation

对路径进行非线性优化后,我们得到一条比Hybird A*算法路线更加平滑的路径,但是这条路径仍然由一段段的折线组成。在论文【1】中提到在它们的实现中组成路径的折线大约在0.5m-1m,这些折线仍然会导致车辆会出现非常生硬的转向,所以需要使用插值算法进一步平滑路径。

参数化的插值算法对噪声非常敏感,比如当路径中两个顶点非常接近时,三次样条曲线(Cubic Spline)算法的输出就会产生非常大的震荡。

【1】中提出通过固定原始路径顶点,然后在固定顶点之间插入新的顶点,最后使用Conjugate Gradient(CG,共轭梯度法)最小化曲率的非参数插值(Non-Parametric Interpolation)方法对曲线进一步平滑,平滑效果如下:

python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第7张图片

参考资料

1、Practical Search Techniques in Path Planning for Autonomous Driving。Dmitri Dolgov,Sebastian Thrun,Michael Montemerlo,James Diebel.

2、Path Planning in Unstructured Environments, A Real-time Hybrid A* Implementation for Fast and Deterministic Path Generation for the KTH Research Concept Vehicle.

注:本文首发于微信公众号【半杯茶的小酒杯】,转载请注明出处,谢谢!


推荐阅读:

半杯茶的小酒杯:自动驾驶运动规划-Hybird A*算法​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第8张图片
半杯茶的小酒杯:机器人动态规划(Dynamic Programming)入门​zhuanlan.zhihu.com
c31262d4ab29968373d7fb2defb57ea4.png
半杯茶的小酒杯:自动驾驶路径规划-Voronoi Planner​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第9张图片
半杯茶的小酒杯:基于采样的运动规划算法-RRT(Rapidly-exploring Random Trees)​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第10张图片
半杯茶的小酒杯:自动驾驶路径规划-Graph Based的BFS最短路径规划​zhuanlan.zhihu.com
4b864b6bee390e9e422e9432876d1729.png
半杯茶的小酒杯:自动驾驶运动规划-Dubins曲线​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第11张图片
半杯茶的小酒杯:未知环境下的Lidar概率占位栅格图(Occupancy Grid Map) Python代码实现​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第12张图片
半杯茶的小酒杯:自动驾驶Mapping-占位栅格图(Occupancy Grid Map)​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第13张图片
半杯茶的小酒杯:自动驾驶中的车辆运动学模型​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第14张图片
半杯茶的小酒杯:自动驾驶定位算法(十五)基于多传感器融合的状态估计(muti-Sensors Fusion)​zhuanlan.zhihu.com
python 非线性规划_自动驾驶运动规划-Hybird A*算法(续)_第15张图片
自动驾驶路径规划器-Lattice Planner详解​www.banbeichadexiaojiubei.com

你可能感兴趣的:(python,非线性规划)