做一些简单的避障算法调研,对常见的避障算法原理和优缺点简单了解,便于之后选择合适的方法实现。
1.快速扩展随机树算法(RRT)
参考知乎:https://zhuanlan.zhihu.com/p/66047152
首先确定一张包含了障碍物信息的地图,从出发点开始向目标点生成一棵树,每个节点生长时都有一定的概率直接向终点生长、或朝地图内任意方向生长,以避免被障碍物阻拦生长。经过多次生长后,可以得到由起点到达终点的路径,最短路径的获取可以通过A*等算法实现。
这种方法简单直观,能适应很复杂的情况,但是需要提前知道障碍物的分布情况;生长结果与采样步长和数量相关,采样点过多会导致计算量大,过少可能无法得到理想路径。
2.概率路线图方法(PRM)
参考博客园:https://www.cnblogs.com/21207-iHome/p/7209954.html
与RRT类似,RRT通过树的生长寻找路径,在生长过程中采样点;PRM先在地图中采样,再通过采样点获取路径。
如果使用以上两种方法,需先获取障碍物分布信息,再通过航路点跟踪的方法到达指定目标。
3.人工势场法
参考知乎:https://zhuanlan.zhihu.com/p/66265861
构造人工势场,一种简单的构造方法为引力/斥力势函数,引力来源于目标点,斥力来源于障碍物。通过梯度下降算法,在人工势场中选取势最小的路径。
如果已知障碍物的分布,可以先获取人工势场,计算出最优路径,然后执行;如果未知障碍物的分布,可以尝试根据传感器检测信息实时构造周围势场,获取局部最优路径。缺点是可能陷入局部极小值,需进行改进。
4.Bug避障算法
参考博客园:https://www.cnblogs.com/21207-iHome/p/5998635.html
Bug1算法原理为,遇到障碍物后环绕障碍物一周,然后选择距离目标点最近的位置,并驶向该位置,然后继续前进;
Bug2算法原理为,遇到障碍物后环绕障碍物,在到达目标点与起始点的连线时,离开障碍物,沿该连线继续前进。
Bug1算法需环绕障碍物一周,用时较长;Bug2算法在大多数情况下优于Bug1算法,但复杂情况下可能用时更长。Bug算法原理非常简单,但用时较长、未考虑机器人/无人机的动力学限制,难以适应复杂的情况。
5.向量场直方图(VFH)
类似人工势场法,根据机器人/无人机周边环境,创建一个局部地图,使用极坐标直方图表示,选择值最小、宽度最大的方向前进。该算法改进自VFF算法,之后还有VFH+和VFH*等改进。在三维空间内,查到了3DVFH+的相关论文:《3DVFH+ Real-Time Three-Dimensional Obstacle Avoidance》
VFM算法原理较之前几种都复杂,考虑到的因素也更多,能适应实时环境。