大家好,我是橙子,今天给大家分享的是混合A星算法——自动泊车路径规划算法,在开发落地过程中有哪些优化方法和策略?全程干货,全部是实战的经验总结,相信看过的朋友一定能有收获!
了解混合A星的朋友都知道,混合A星是基于一种空间搜索的规划算法,既然是基于空间,在车辆周围的空间方向就会有很多,前后左右x前进后退,通过最大前轮转角离散后,会产生n种组合,不经过仔细的推导,很难确定最终的一条轨迹是什么样子的,同一个位置,环境的稍微变化,前后两次的轨迹就会有很大区别,但是仔细分析每次的轨迹,都一定能找出为什么这样规划的原因。
关键词:自动驾驶,智能泊车、路径规划、算法优化,Hybrid、Reeds-Shepp
1. 轨迹拟人化问题
混合A星的拟人化问题相信是每个做规划的同学都会遇到的,不拟人化简单来说就是跟老司机的开车风格不一致,比如车位明明在车位前方,老司机可能2把就能停进去,混合A星可能4把或者6把甚至更多揉库才能停进去,中间白白多了无效的揉库,领导和客户见了都直摇头,心里默默念叨“什么垃圾玩意”。
混合A星的非拟人化问题,本质是混合A星搜索空间的自由性问题引起的,需要通过一些策略来降低这种混合A星搜索的自由性。
策略1. 动态的搜索方向优先级设定
如一个车位在自车的正前方,很简单直行往前开就可以到达目的地,但是如果A星扩展时如果扩展方向是优先向后扩展再使用RS曲线拼接终点就会导致一个问题,车辆先先直直后退再直直前进,可能会有同学问,为什么会有正前方的一个车位呢?感知会释放的吗?但确实有,如用户自定义车位等。
策略2. 虚拟障碍物的动态设定
虚拟障碍物即为感知未识别的到,实际不存在的障碍物,规划模坊自己通过模拟的障碍物BBox或者其它类型。
- 规划自构建障碍物BBox叠加至感知障碍物列表中,输入到障碍物碰撞检测中。
- 车位正下方防止轨迹穿过车位后方,如果轨迹穿过车位后方,或者车辆行驶穿过压轮档都是不可被接受的,领导看了又要不高兴了
- 车位侧方车辆泊入过程中,车位两侧车辆可能存在剐蹭风险,一般依据实际障碍物的有无,在车位侧方增加虚拟障碍物,保证安全。
- 车位正前方车辆泊入过车程中,感知可能识别路沿不准或者无法识别,这时需要确保车辆不上路沿,在车位正前方添加虚拟障碍物
- 泊入车位轮档处泊车过程中一个重要的指标就是是否撞轮档,撞轮档有很多因素,规划层面就需要避免车辆轨迹导致车辆泊入撞轮档甚至越过轮档,一般采用将车辆模型和轮胎模型和轮档模型分别建模,确保车身可以通过轮档,而车轮不可以通过轮档。
2. 规划耗时问题
使用混合A星的同学都知道,搜索方法一定会有耗时,如何将耗时控制在合理可接受范围内就显得至关重要,避免车技提示,路径规划中....的尴尬
策略1. 突破传统规划方式
研究和试验表面,混合A星的反向搜索,比正向搜索在搜索效率上更快,扩展的节点上更少,尤其在狭小空间内差异更加明显,很多小伙伴可能会想,为啥不用双向搜索索呢?其实工程落地时就会发现很多问题,1.资源消耗更多,2.轨迹不一定更优,3.搜索存在发散的无闭合风险,导致超时
策略2. 动态搜索步长
这里的动态步长,指的是一次规划中采用不同的移动步长,依据当前最小代价点所处的位置及搜索状况,动态调节搜索的移动步长,可达到快速脱离陷入局部最优的列死循环
策略3. 碰撞检测优化
碰撞检测有的使用占据栅格的方式检测,有的采用AABB/SAT方式做碰撞检测,依据项目方案,选择合适的碰撞检测方案,并对碰撞检测范围做一定优化,会达到到很好的效果。
策略4. 优化启发函数
通过对启发函数的优化,也能提高规划的速度,如使用RS的频率,因为每一个RS的长度都将被检测,如惩罚函数代价系数采用连乘而非加法。
策略5. 预规划
在车辆搜索车位时,即开启推荐车位的实时规划,体验华为系车日时,发现了这个方法,同时发现一个取巧的方式,将规划提前到确认泊车之前,为规划争取了不少时间,如用户确认泊车之前就开始规划,避免点了确认泊车,规划才开始计算。
3. 轨迹段数优化
混合A星的一个很大的问题就是容易出现短轨迹,这种短轨迹无意意义还浪费时间,针对这种情况有以下几种应对方法:
策略1. 轨迹后处理
轨迹搜索完成了,针对规划的轨迹进行后处理优化,如检测总轨迹中存在是否存在短轨迹,对轨迹的首末端点确定航向是否在可优化范围,直接去掉中间短轨迹,再使用E样条或贝塞尔曲线优化或者混合A星复用来局部规划一段连接前后轨迹段。
策略2. 轨迹寻优
轨迹搜索还未完成,在轨迹搜索完成第一条轨迹时,即对该轨迹进行短轨迹检测,若存在短轨迹,即开始继续搜索新的轨迹,确保新的轨迹与旧的轨迹比较,长度又短段数又少。
策略3. 分层规划
分层规划/实时规划:如果由于空间问题,采用分层规划会有很好的效果,第一次规划称为前规划,在车辆泊入过车中开启实时规划,实时检测当前位置是否能够规划出比当前更好的轨迹,如果有则进行轨迹更新。既能达到动态规划的避障的效果,还能优化轨迹段数。
策略4. 动态 RS 半径
增加可变半径的 RS 曲线,在特定情况轨迹段数可以有效降低
4. 障碍物/车位信息变化
在车辆入库过车中,往往存在一些特殊的情况,如车位被障碍物临时占据或者车位信息检测与起始检测变化过大或者动态变化,这时候可以使用混合A星规划+Reeds-Shepp一段或者两段入库轨迹,保证效率并保证泊入精度。
5. 规划与超声波矛盾
准确来说混合A星是一套理论算法,算法中未考虑超声波的影响,实际工程应用中会存在混合A星认为以当前的车辆尺寸可以通过,但是实际上车辆却应为超声波卡死在车位入口。原因是因为A星只考虑空间未考虑超声波制动影响,反复规划入库轨迹,然而超声波缺一直制动,解决方式有如下方式:
- 增加势场图,以模拟目标点引力和障碍物斥力,构建一张安全行驶远离障碍物的规划网格,但这并不总是有效,如控制开穿也有可能导致问题。
- 不同位姿限制RS起步的轨迹方向,如卡死在车位入口,限制RS起步向车位外即可。
相信做混合A星开发过程中,都会遇到以上类似的问题,欢迎评论区留言说出您认为还有哪些优化方案?如果有想进一步了解详细策略实现的,或者算法优化的同学,点赞 + 关注,可以私聊哦~