整体介绍
对于没有参考线的非结构化场景,如泊车、倒车入库、靠边停车
task::
(1)确定可行驶区域
(2) 粗糙轨迹生成
第一步生成可行轨迹的点,因为混合A*生成的轨迹存在曲率突变,不能直接使用。
第二步对轨迹进行进一步平滑,满足控制需求。
(3)对轨迹进行分割
根据前进还是后退,对轨迹进行分割,根据自车位置来判断进行哪一条轨迹以及是否需要更换轨迹
(4)障碍物碰撞Fallback_Decider
如果检测与障碍物碰撞的轨迹需要fallback,重新规划一条
基于混合A*的路径规划
【A*需要对环境提前已知,基于高精地图,这本身就是已知的,所以环境就是已知环境】
A*:
搜索算法,将可行使的环境进行栅格化【栅格化!!!】,迭代搜索8个方位,对呀!!!栅格化呀,就是一个个的点???SUMO里面A*搜索也是A*搜索呀,所以那个生成的net.xml文件是一个栅格地图??---》》》去看SUMO里面那个带的A*算法的py文件证实研究一下,如果是这样的话,那可以参考一下A*别的py文件怎么画的图 ,SUMO中获取到了信息【这个信息的获取也没获取整明白哎!!!】
g(n) :: 从起点到当前节点的cost;h(n)::启发函数,从当前节点n到终点节点的预估cost
A*算法走出的路径时折线,曲率突变点,路径不满足运动学约束,根据车辆运动学模型,实际车辆航向和后轴中心方向是一致的,所以将车辆运动轨迹等效成车辆后轴中心根据不同转弯半径的
的弧线组成,通过前轮转角可以算出后轴中心的转弯半径,所以对前轮转角进行采样,从而变成下图所示,方位不止8个方位,搜索维度也从2维升为3维(x,y,theta航向角)
上述因为状态空间是连续的【???】,而搜索的点是离散的,固定的点不同的航向。
ReedSheep : : 固定直线连接圆弧的方法,但是其无法考虑障碍物,所以混合A*算法将障碍物路径过滤掉,
GenerateDPMap函数通过动态规划算法计算启发式函数。
上图结果图,在直线和圆弧的交界处拐点曲率突变需要平滑::
在凸优化中有约束的极值问题通常是不好研究的,所以通常将有条件的极值问题转换为无条件的极值问题进行研究。
Apollo对算法的改进:
之前采样时间是固定时间,所以是 t 时间到达终点,变时间采样乘以一个固定时间系数 t(k) ,可以缩短到达终点的时间,
基于DL_IAPS的规划算法
OBCA算法通过凸优化的强对偶性很好解决开放空间无碰撞约束,但是算法求解效率和鲁棒性较差,
改进点是OBCA是将整个轨迹进行平滑,但是DL_IAPS是分段进行平滑,保证平滑后的路径不会与障碍物碰撞, 并满足曲率最大的要求
算法实践
绘制过程图::
改变可视化区域的边界点。改了以后规划失败了,改回去了。修改了下面的sphi ---起始航向角