Autoware调试心得-关于A*避障调试的补充
2023-12-05 # 实用教程

本文

主要从一位完全小白的视角出发来理解和实现 A* 的实车避障。我估计很多人在调试时都遇到过避障避不了的情况,但却使劲在找 astar_avoid 这个节点的问题,这是头痛医头的错误行为。实际上在我所遇到的避不了障的情况,都不是 A* 节点本身导致的。所以关键还是没有理解其运行机制。

waypoint_planner

首先局部规划 waypoint_planner 模块包含两个节点 velocity_setastar_avoid,一个负责速度规划另一个负责路径规划。velocity_set 节点启动后可以在 Rviz 上看到一个个圆圈,这个是velocity_set基于全局路径点生成的,靠近路径点的深绿色圈用于检测需要停车的障碍物,检测到这个范围内有障碍物就会发出 /obstacle 和 /obstacle_waypoint 两个 topic 分别用于可视化和给到 astar_avoid 来避障。所以这个检测区域得设置是很重要的,如果他都没检测到障碍物那怎么给到 astar_avoid 来避障呢。
来结合实际看下图,这三张图都是我从实车上截下来的,为方便大家观察到速度规划节点的作用我把速度也显示出来了。

range

先看这张图,一个个圆圈就是 velocity_set 的检测区域。小圈对应的就是detection_range参数,这个圈里有障碍物就会显示红块;大圈对应的是deceleration_range这个参数,这个圈里有障碍物就会显示黄块。

dec_obs

然后我们具体到减速场景看下,最后一排标有7.2(km/h)的白线是矢量地图上我们规划的行驶速度,绿色的线是规划节点重新规划的速度。在遇到黄块后速度就减低为4.7。

stop_obs

当车辆前面出现红块时,红块前就会生成一面红色停止墙,到红块前的路径点速度都被规划成0了,然后这时候就会发出 /obstacle_waypoint 让 astar_avoid 节点帮助脱困。停障距离由stop_distance_obstacle这个参数控制的。

costmap_generator

这是提供栅格地图的节点,astar_avoid 节点就是在它提供的地图上规划的,地图上的黑块代表障碍物区域,白块代表 obsstacle free space, 所以它提供的服务质量直接决定了避障的质量。如果 veocity_set 节点能检测到红块,但是避障路径迟迟没有规划出来的话,那这时候你单独把 astar_avoid 运行的 log 打印出来的话大概率能看到 ‘can’t find goal’ 的 error,进到程序里去看你就会发现它其实已经在规划了但就是规划不出来.那这是为什么呢,大概率就是栅格地图出问题了,更确切地说是感知的问题。

points_ground

看上图,这时候请先确认车身周边是没有黑点的,也就是说车身点云是滤干净的。然后车身周围的地面点也是滤除干净的,有时候地面点没滤除干净就是这样一圈一圈的黑点,那怎么规划的出来嘛。

ray_ground_filter

那这时候该如何解决呢,如果使用的是 Autoware 自带的 ray_ground_filter 节点的话,要是车身没滤干净可以尝试把 min_point_distance 这个参数调大;如果是地面点没滤干净的话可以尝试把 local_max_slopegeneral_max_slope 这两个参数调大。可参考下图设置。

points_filter

补充资料

关于避障我还有画过两张与参数相关连的简易原理图,笔记本没带身边,这里预留个位置有空再更新下。