HTML
-
当派遣无人艇(USV)执行危险任务时,由于操作人员的参与程度低,人员受伤的风险可大幅降低[1-2]。进行环境监控时,在高度污染的湖泊中,可以通过无人艇来收集水样和采集数据,避免将人暴露于有害元素之中。执行灾后场所的搜救任务时,采用无人艇可以有效缩短响应时间,增加救援任务的成功率[3]。简单有效的航迹规划算法是提高任务成功率的重要保证,目前,常用的航迹规划算法主要有A*算法[4-7]、粒子群算法[8-11]、人工势场算法[12]和蚁群算法[13-14]等。
A*算法作为启发式搜索算法之一,能够快速搜索出路径,但当存在多个最小值时,不能保证搜索的路径最优。粒子群优化算法具有参数较少、容易实现等优点,但存在着收敛精度低、搜索停滞等缺点。传统人工势场法存在局部最优和目标不可达的问题。蚁群算法受起止点位置和障碍分布的影响,环境复杂时容易陷入不可行点,甚至出现路径迂回和死锁的情况。
本文将在研究一般路径算法的过程中,针对传统路径算法的思路和现有缺陷,在保证最短路径和快速搜索的前提下,结合2D扫描思想,寻求一种新型路径规划方法。在起点和终点之间存在障碍物的情况下,通过扫描获取周围障碍物信息,以获取最短路径。利用LabView2017平台编写仿真程序,以验证规划算法的可靠性。
-
在规划无人艇的全局路径时,首先针对已知信息进行环境空间建模[15],然后,根据建模结果获得包含障碍物信息的搜索空间,利用具体的算法对搜索空间进行搜索。本文采用栅格法模拟障碍物。将计划搜索区域划分为相同大小的网格,原始障碍物标记为不可行区域,剩余的网格则为正常条件下的可行区域。
在利用栅格法进行空间环境建模的过程中,栅格粒度的确定影响着路径规划的准确性[16]。栅格粒度的取值如果过小,会造成环境空间的信息量过大,使系统负担过重;而栅格粒度的取值如果过大,当障碍物较多时,会导致无法找到有效路径。因此,需通过环境中障碍物的疏密度来确定栅格粒度。在计算障碍物面积时,对于不是矩形的障碍区域,对障碍物边缘进行扩充,以构成矩形区域,并将扩充部分一并算为障碍物进行考虑。
通过将障碍物矩形化来确定和计算障碍物的面积。然后利用障碍物总面积所占栅格空间总面积的比例,来确定栅格粒度l。
-
首先,在系统内设定起点
$S({x_{\rm{s}}},{y_{\rm{s}}})$ 和目标点$T({x_{\rm{t}}},{y_{\rm{t}}})$ 。由起点向目标点发射射线,射线若被障碍物阻挡,则判断起点与目标点之间存在障碍物。然后,以起点为中心向Y轴正方向发射射线,被障碍物或地图边缘阻挡后,开始顺时针进行360°扫描。此时,通过式(3)计算起点$S({x_{\rm{s}}},{y_{\rm{s}}})$ 至当前扫描点$F({x_{\rm{f}}},{y_{\rm{f}}})$ 的距离(也即扫描射线的长度)${D_{\rm{f}}}({g_{\rm{f}}},{g_{\rm{s}}})$ 。${D_{\rm{f}}}({g_{\rm{f}}},{g_{\rm{s}}}) $ 随扫描方向的变化而不断变化。${D_{{\rm{fp}}}}({g_{{\rm{fp}}}},{g_{\rm{s}}})$ 为扫描射线长度值${D_{\rm{f}}}({g_{\rm{f}}},{g_{\rm{s}}})$ 前一时刻扫描点$p({x_{{\rm{fp}}}},{y_{{\rm{fp}}}})$ 至起点$S({x_{\rm{s}}},{y_{\rm{s}}})$ 的扫描射线长度。扫描射线长度计算公式为
$${D_{\rm{f}}}({g_{\rm{f}}},{g_{\rm{s}}}) = \sqrt {{{({x_{\rm{f}}} - {x_{\rm{s}}})}^2} + {{({y_{\rm{f}}} - {y_{\rm{s}}})}^2}} $$ (1) 扫描射线前一扫描点的长度计算公式为
$${D_{{\rm{fp}}}}({g_{{\rm{fp}}}},{g_{\rm{s}}}) = \sqrt {{{({x_{{\rm{fp}}}} - {x_{\rm{s}}})}^2} + {{({y_{{\rm{fp}}}} - {y_{\rm{s}}})}^2}} $$ (2) 扫描射线长度变化值计算公式为
$$M = {D_{\rm{f}}}({g_{\rm{f}}},{g_{\rm{s}}}) - {D_{{\rm{fp}}}}({g_{{\rm{fp}}}},{g_{\rm{s}}})$$ (3) 当
$M \geqslant l$ 时,判断射线扫描超出障碍物阻挡范围,在最后阻挡的栅格向扫描变化方向的下一个栅格建立子节点;当$ - l < M < l$ 时,继续扫描;当$M \leqslant - l$ 时,判断射线扫描到新的障碍物阻挡区域,在被阻挡栅格向扫描变化反方向的下一个栅格建立子节点。通过起点扫描,获得第1代子节点集合
${N_1} = \left\{ {C_{\rm{n}}^1(x_{\rm{n}}^1,y_{\rm{n}}^1)} \right\}$ 。首先,判断第1代各子节点到目标点$T({x_{\rm{t}}},{y_{\rm{t}}})$ 是否存在障碍物阻挡。当判断全部第1代子节点到目标点$T({x_{\rm{t}}},{y_{\rm{t}}})$ 均存在障碍物后,通过代价函数P计算第1代子节点代价值。代价函数由子节点到起点的距离平方$G$ 和到目标点的距离平方H得出。从中,判断出代价值最小的第1代子节点$C_{\rm{n}}^1(x_{\min }^1,\;y_{\min }^1)$ 。代价函数为:
$$G = {(x_{\rm{n}}^1 - {x_{\rm{s}}})^2} + {(y_{\rm{n}}^1 - {y_{\rm{s}}})^2}$$ (4) $$H = {(x_{\rm{n}}^1 - {x_{\rm{t}}})^2} + {(y_{\rm{n}}^1 - {y_{\rm{t}}})^2}$$ (5) $$\begin{split} & {P_{}} = G + H = {(x_{\rm{n}}^1 - {x_{\rm{s}}})^2} + {(y_{\rm{n}}^1 - {y_{\rm{s}}})^2} +\\& \qquad\quad{(x_{\rm{n}}^1 - {x_{\rm{t}}})^2} + {(y_{\rm{n}}^1 - {y_{\rm{t}}})^2} \end{split}$$ (6) $$\begin{split} & \quad\min P = \min \left[ {{{(x_{\rm{n}}^1 - {x_{\rm{s}}})}^2} + {{(y_{\rm{n}}^1 - {y_{\rm{s}}})}^2} +}\right.\\&\left.{ {{(x_{\rm{n}}^1 - {x_{\rm{t}}})}^2} + {{(y_{\rm{n}}^1 - {y_{\rm{t}}})}^2}} \right] \to C_{\rm{n}}^1(x_{\min }^1,y_{\min }^1) \end{split}$$ (7) 若通过比较
$\min P$ 发现存在2个或多个最小代价值点,则比较这几个点的$\min H$ 。若比较$\min H$ 之后仍存在2个或多个点,则暂时随机选取其中一个。确立第1代最优子节点后,以此点为中心向Y轴正方向发射射线,被障碍物或地图边缘阻挡后,开始顺时针360°扫描。通过扫描射线长度计算公式判断出下一代子节点集合
${N_2} = \left\{ {C_{\rm{n}}^2(x_{\rm{n}}^2,y_{\rm{n}}^2)} \right\}$ 。之前已经被定义为子节点的栅格将不再被定义为子节点,也不会再次出现在下一代子节点集合中。判断第2代各个子节点到目标点$T({x_{\rm{t}}},{y_{\rm{t}}})$ 是否存在障碍物阻挡。当判断全部第2代子节点到目标点$T({x_{\rm{t}}},{y_{\rm{t}}})$ 均存在障碍物后,通过$P$ 计算各第2代子节点的代价值。此时的代价函数变为由第2代子节点到第1代最优点的距离平方$G$ 和到目标点的距离平方H得出。从中判断代价值最优的第2代子节点$C_{\rm{n}}^2(x_{\min }^2,y_{\min }^2)$ 。代价函数为:
$$G = {(x_{\rm{n}}^2 - x_{\min }^1)^2} + {(y_{\rm{n}}^2 - y_{\min }^1)^2}$$ (8) $$H = {(x_{\rm{n}}^2 - {x_{\rm{t}}})^2} + {(y_{\rm{n}}^2 - {y_{\rm{t}}})^2}$$ (9) $$\begin{split} & {P_{}} = G + H = {(x_{\rm{n}}^2 - x_{\min }^1)^2} + {(y_{\rm{n}}^2 - y_{\min }^1)^2} + \\& \qquad\qquad{(x_{\rm{n}}^2 - {x_{\rm{t}}})^2} + {(y_{\rm{n}}^2 - {y_{\rm{t}}})^2} \end{split}$$ (10) $$\begin{split} & \min P = \min \left[ {{{(x_{\rm{n}}^2 - x_{\min }^1)}^2} + {{(y_{\rm{n}}^2 - y_{\min }^1)}^2} +}\right.\\&\left.{ {{(x_{\rm{n}}^2 - {x_{\rm{t}}})}^2} + {{(y_{\rm{n}}^2 - {y_{\rm{t}}})}^2}} \right] \to C_{\rm{n}}^2(x_{\min }^2,y_{\min }^2) \end{split}$$ (11) 由此扫描出各代子节点,并确定出各代的最优点。当某一代子节点集合
${N_{\rm{n}}} = \left\{ {C_{\rm{n}}^{\rm{n}}(x_{\rm{n}}^{\rm{n}},y_{\rm{n}}^{\rm{n}})} \right\}$ 为空集时,就将上一代最优子节点加入到关闭集合中,重新确定上一代最优子节点并进行扫描。加入到关闭集合的点,将不再被定义。当某代子节点向目标点发射射线,射线未被障碍物阻挡,则判断扫描到终点,扫描结束。若最后一代子节点中,存在2个或多个点可直接扫描到目标点,则比较
$\min P$ 选取最小代价值点。若还存在多个点,则比较$\min H$ ,确定最终路径。最终确定的路径为
$$\begin{split} & S({x_{\rm{s}}},{y_{\rm{s}}}) \to C_{\rm{n}}^1(x_{\min }^1,y_{\min }^1) \to C_{\rm{n}}^2(x_{\min }^2,y_{\min }^2) \\&\qquad \to \cdots \to C_{\rm{n}}^{{n}}(x_{\min }^{{n}},y_{\min }^{{n}}) \to T({x_{\rm{t}}},{y_{\rm{t}}}) \end{split}$$ (12) -
1) 建立环境模型,确定栅格粒度,设置障碍栅格、可行栅格、起始栅格和目标栅格;
2) 从起点向终点方向进行搜索,判断扫描路径上是否有障碍;
3) 碰到障碍物后,以起点为中心进行360度扫描;
4) 扫描过程中,当产生的扫描新向量比旧向量长度差超过1个格子长度时,立即判断此处有缺口;
5) 在判断为缺口的位置,将被阻挡的格子,在搜索射线方向或反方向的下一个格子上建立子起点;
6) 以起点为中心扫描出第1代子节点,并判断第1代各子节点到目标点是否存在障碍物阻挡;
7) 判断子节点到目标点均有障碍物后,通过代价函数得出第1代最优子节点;
8) 在第1代最优子节点的基础上,按以上步骤扫描出第2代子节点;
9) 按上述方法,直至扫描到终点,扫描过程结束,寻路完成(图1)。
-
通过上述分析可以看出,搜索扫描算法可以顺利规划出可行路径。但在某些情况下,存在可优化空间。在多次实验中发现,算法所规划的路径中某些栅格可以略过,以达到减少路径长度的目的。具体优化方法:从路径第1个栅格开始,向每个中间栅格扫描,判断是否穿过障碍物。在未穿过障碍物的前提下,计算直线路径与原始路径的长度。当直线路径长度小于原始路径长度时,将直线路径代替原始路径。以此类推,直至目标点栅格。
另外,当比较
$\min P$ 后,若发现存在2个或多个最小代价值点,则比较这几个点的$\min H$ 。若比较$\min H$ 之后仍存在2个或多个点,暂时随机选取其中一个,则在某些情况下将会得出不同的路径。通过算法随路径进行多次规划,并通过路径长度比较出最短路径。在此基础上,进行下一轮规划,至相邻两轮规划的路径完全一样,则判断结果为最佳路径(图2)。改进算法后,开始分析规划次数与所用时间的关系,以及路径长度随规划次数的走势。可以看出,前期所用时间随规划次数的增多升高较快。在规划次数超过15次之后,所用时间呈稳定增长的趋势(图3)。路径长度从第3次开始收敛,之后趋于稳定(图4)。
-
为了验证搜索扫描算法的正确性,利用LabView 2017开发环境编写仿真程序。将开发的航迹规划程序与无人艇岸基站控制软件相连接,通过软件环境模拟和无人艇实地检验验证程序的可行性。将理工湖地形图导入仿真程序进行测试,仿真软件主界面如图5所示,理工湖仿真试验如图6所示。
图中红点是路径规划的起点和目标。可以看出,在理工湖仿真测试中,规划的路径避开了障碍物,得到了平稳和较短的路径。
为方便使用,在软件内部转换GPS坐标和栅格模型的序号,因此软件的输入和输出是GPS坐标。无需用户手动输入目标所在网格的起点和坐标。在实际情况下,无人艇的航程往往达数公里至数十公里。为了比较搜索扫描算法在远距离条件下的性能,相较蚁群算法在湖中进行了远程路径规划仿真。仿真实验中,算法的起点和目标是相同的(图7)。从图中可以看出,搜索扫描路径规划算法的表现较优。
为了验证搜索扫描算法的实地应用能力,分别在理工湖和渤海湾进行了实地测试。在理工湖测试(图8)中,无人艇能够根据软件规划的路径顺利到达终点。在渤海湾测试(图9)中,无人艇在PID控制系统的辅助下,能够在风浪中按规划路径稳定前进。
-
本文针对海上无人艇执行任务的特点及存在的问题,通过仿真程序对几十种不同地形图进行了仿真实验,实验结果表明,所提的搜索扫描算法能避开障碍物,在环境模拟场所规划的路径安全可行,并能提高生成路径的质量。
该改进算法主要有以下特点:1)建立了一种新的程序思路用于生成路径;2)对算法中未能实现最短路径的情况提出了新的自适应更新策略;3)通过仿真实验,验证了本文所提射线搜索算法在进一步提高二维空间中生成路径解质量的有效性。
对于无人艇的导航问题,路径规划虽不可或缺,但也不是问题的全部。路径规划为无人艇提供航线,具体如何航行还需要导航避障系统和控制器协作配合完成。本文所研究的路径规划算法仅在该领域进行了初步探讨。