Application of distributed consensus algorithm for flow field estimation with underwater vehicles
0 引 言 海洋流场信息在海洋气候预测、渔业、污染物扩散推算和水下机器人学等领域发挥了重要作用,充分了解海洋流场可提高水下机器人作业时的能量效率与导航性能[1-2]。
近年来,水下滑翔机和自主水下航行器因其高可靠性和灵活性,在海洋流场感知领域发挥着重要作用。这些设备被广泛用于提高在GPS信号覆盖不到的区域进行洋流近似估计和水下航行器定位的精度[3-4]。然而,直接流速测量往往难以实施,这促使研究者们开始探索在不直接测量流速的情况下估计流场的方法[5]。例如,一些研究采用了期望最大化算法,以处理稀疏的GPS数据和航迹推算轨迹,从而估计海流[6]。
在没有直接流速测量的情况下,一种名为运动层析成像(MT)的方法被提出,用于估计特定深度处的平均流场[7]。这种方法将流场估计问题视作一个非线性逆问题,即通过航行器的轨迹来推断流场。尽管如此,由于仅依靠航行器上浮位置的信息来重建流场,这通常导致测量数据的数量不足以估计流场参数,使得问题成为一个欠定问题。为了解决这一挑战,Shi等[8]提出一种迭代算法,通过考虑航行器实际和预测的相对位置偏差,来求解未知流场参数的非线性方程组,将欠定问题转化为确定性问题。
此外,一些集中式框架的研究工作也存在局限性,尤其在航行器通信拓扑发生变化时。为了克服这些限制,He等[9]引入了基于树的分布式方法来处理非线性合作流场估计问题,但这种方法依赖于固定的通信拓扑,可能不适用于通信网络动态变化的情况。本文的研究正是在这一背景下,针对无直接流速测量情况下的流场估计问题进行的探索。
本文提出一种新的面向多水下航行器的分布式流场估计算法,用于解决非线性逆问题。与文献[9]相比,本方法既不限制通信拓扑结构,又可在航行器通信网络变化时仍然适用。
1 预备知识和问题阐述 1.1 流场和航行器模型 本文使用离散网格流场来近似实际的连续流场。将某个深度$ D\subset {\mathit{R}}^{2} $的水平区域划分为$ P=A\times B $个网格单元。设$ D(a,b) $表示第$ (a,b) $个单元,其中 $ a\in \{\mathrm{1,2},...,A\} $,$ b\in \{\mathrm{1,2},...,B\} $。定义索引$ \iota :=(a-1)B+b $,那么$ {D}^{\iota }\equiv D(a,b) $,$ \iota \in \{\mathrm{1,2},...,P\} $。网格单元$ {D}^{\iota } $中的流速被视为恒定的,记作$ {\mathit{f}}^{\iota }:={\left[{f}_{x}^{\iota },{f}_{y}^{\iota }\right]}^{{\mathrm{T}} } $,其中 $ {f}_{x}^{\iota } $ 和 $ {f}_{y}^{\iota } $ 分别表示$ {f}^{\iota } $的x和y分量。将所有网格单元的流速堆叠起来,定义$ \mathit{f}= {\left[{\mathit{f}}_{x}^{{\mathrm{T}} },{\mathit{f}}_{y}^{{\mathrm{T}} }\right]}^{{\mathrm{T}} } $,其中$ {\mathit{f}}_{x}={\left[{f}_{x}^{1},{f}_{x}^{2},...,{f}_{x}^{P}\right]}^{{\mathrm{T}} } $和$ {\mathit{f}}_{y}= {\left[{f}_{y}^{1}, {f}_{y}^{2},...,{f}_{y}^{P}\right]}^{{\mathrm{T}} } $。设 $ {\mathit{f}}^{\star }\in {\mathit{R}}^{2P} $ 表示离散到网格中的实际流场,则流场估计的目的是估计未知向量 $ {\mathit{f}}^{\star } $。
考虑有$ N $个航行器,记作$ \mathcal{V}=\{{v}_{1},...,{v}_{N}\} $,部署在$ D $中。设$ t\in [0,\infty ) $表示时间,$ {\mathcal{I}}_{i}:=[0,{{T}}_{i}] $ 表示航行器$ {v}_{i} $的观测时间间隔。设$ {\mathit{r}}_{i}\left(t\right):={\left[{r}_{i,x}\left(t\right),{r}_{i,y}\left(t\right)\right]}^{{\mathrm{T}} }\in D $表示航行器$ {v}_{i} $的实际位置,$ {\mathit{r}}_{ij}\left(t\right):={\mathit{r}}_{j}\left(t\right)-{\mathit{r}}_{i}\left(t\right) $ 表示航行器$ {v}_{i} $和$ {v}_{j} $之间的实际相对位置,如图1所示,其中实线表示航行器的实际轨迹,虚线是估计轨迹。点线箭头表示相对位置测量。当航行器在水下导航时,$ {\mathit{r}}_{ij}\left(t\right) $可以通过声学定位系统进行测量,例如超短基线(USBL)定位系统。由于水下无法使用GPS信号,因此无法获得$ {v}_{i} $的实际轨迹。但是在$ t=0 $和$ t={{T}}_{i} $时,可以测量航行器$ {v}_{i} $的实际位置$ {\mathit{r}}_{i}\left(t\right) $,因为此时航行器在水面上,可以获得GPS信号。航行器$ {v}_{i} $的连续时间运动模型,考虑实际流场的影响,由下式给出:
$ {\dot{\mathit{r}}}_{i}\left(t\right)={\mathit{\nu }}_{i}\left(t\right)+{\mathit{f}}^{\star }\left({\mathit{r}}_{i}\left(t\right)\right) 。$
|
(1) |
式中:$ {\mathit{f}}^{\star }\left({\mathit{r}}_{i}\left(t\right)\right) $为位置$ {\mathit{r}}_{i} $处的实际流速;$ {\mathit{\nu }}_{i}\left(t\right)\in {\mathit{R}}^{2} $为航行器相对于水的速度,表示为:
$ {\mathit{\nu }}_{i}\left(t\right)=\left[\begin{array}{c}{\nu }_{i,x}\left(t\right)\\ {\nu }_{i,y}\left(t\right)\end{array}\right]={\nu }_{i}\left(t\right)\left[\begin{array}{c}\mathrm{cos}{\theta }_{i}\left(t\right)\\ \mathrm{sin}{\theta }_{i}\left(t\right)\end{array}\right] 。$
|
(2) |
式中:$ {\theta }_{i}\left(t\right) $为航行器$ {v}_{i} $的偏航角,可以通过航行器配备的姿态传感器测量;$ {\nu }_{i}\left(t\right)\in \mathit{R} $为航行器$ {v}_{i} $的对水速率,可以通过与螺旋桨速度的相关性来确定。给定一个估计的流场$ \mathit{f}={\left[{\mathit{f}}_{x}^{{\mathrm{T}} },{\mathit{f}}_{y}^{{\mathrm{T}} }\right]}^{{\mathrm{T}} } $,可以计算航行器$ {v}_{i} $的估计轨迹,记作$ {\mathit{r}}^{i}\left(t\right) $,由下式给出:
$ {\dot{\hat{\mathit{r}}}}_{i}\left(t\right)={\mathit{\nu }}_{i}\left(t\right)+\mathit{f}\left({\hat{\mathit{r}}}_{i}\left(t\right)\right) 。$
|
(3) |
式中:$ \mathit{f}\left(\hat{\mathit{r}}\right) $为在估计位置$ \hat{\mathit{r}} $处的估计流速。相应地,定义估计的相对位置$ {\hat{\mathit{r}}}_{ij}\left(t\right):={\hat{\mathit{r}}}_{j}\left(t\right)-{\hat{\mathit{r}}}_{i}\left(t\right) $。
1.2 绝对和相对运动积分误差 $ {\mathit{f}}^{\star }\left(\mathit{r}\right) $和$ \mathit{f}\left(\hat{\mathit{r}}\right) $之间的差异导致航行器的实际和估计轨迹之间的偏差,从而引起绝对和相对运动积分误差。对于观测时间间隔$ {\mathcal{I}}_{i} $上的绝对运动积分误差$ {\mathit{d}}_{i}={\left[{d}_{i,x},{d}_{i,y}\right]}^{{\mathrm{T}} }\in {\mathit{R}}^{2} $,定义为:
$ {\mathit{d}}_{i}\mathrm{}:={\mathit{r}}_{i}\mathrm{}\left({T}_{i}\mathrm{}\right)-{\hat{\mathit{r}}}_{i}\mathrm{}\left({T}_{i}\mathrm{}\right)。$
|
(4) |
同样,在$ \mathcal{I}:=[0,t]\subset {\mathcal{I}}_{i}\cap {\mathcal{I}}_{j} $期间,航行器$ {v}_{i} $和$ {v}_{j}\mathrm{}\in {\mathcal{M}}_{i} $之间的相对运动积分误差$ {\mathit{\mu }}_{ij}\left(t\right)\in {{R}}^{2} $定义为:
$ {\mathit{\mu }}_{ij}\mathrm{}\left(t\right):={\mathit{r}}_{ij}\left(t\right)-{\hat{\mathit{r}}}_{ij}\left(t\right) 。$
|
(5) |
这里,$ {\mathcal{M}}_{i} $表示航行器$ {v}_{i} $在水下导航时测量了相对位置的航行器集合。注意$ {\mathcal{M}}_{i} $可能是空集。根据式(4),绝对运动积分误差$ {\mathit{d}}_{i} $实际上是由GPS直接获得的$ {v}_{i} $的实际上浮位置与根据给定估计流场$ \mathit{f}\left(\hat{\mathit{r}}\left(t\right)\right) $ 计算出的估计上浮位置之间的偏差。类似地,相对运动积分误差$ {\mathit{\mu }}_{ij}\mathrm{}\left(t\right) $是实际相对位置测量$ {\mathit{r}}_{ij}\left(t\right) $和基于$ \mathit{f}\left(\hat{\mathit{r}}\left(t\right)\right) $确定的估计相对位置$ {\hat{\mathit{r}}}_{ij}\left(t\right) $之间的偏差。直观地说,如果$ \mathit{f} $=$ {\mathit{f}}^{\star } $,则绝对和相对运动积分误差都将为0。随后,使用绝对和相对运动积分误差以分布式框架的形式构建与流场相关的非线性误差约束。航行器$ {v}_{i} $的绝对运动积分误差约束通过设置$ {\mathit{d}}_{i}\mathrm{}=0 $获得。根据式(3)和式(4),有:
$ {\int }_{0}^{{T}_{i}}\displaystyle\left[{\mathit{\nu }}_{i}\left(t\right)+\mathit{f}\left({\hat{\mathit{r}}}_{i}\left(t\right)\right)\right]\mathrm{d}t+{\mathit{r}}_{i}\mathrm{}\left(0\mathrm{}\right)-{\mathit{r}}_{\mathrm{i}}\mathrm{}\left({\mathrm{T}}_{i}\mathrm{}\right)=0 。$
|
(6) |
继续构建相对运动积分误差约束:设$ {t}_{ij}^{s}\in {{T}}_{ij} $表示航行器$ {v}_{i} $测量到航行器$ {v}_{j}\in {\mathcal{M}}_{i} $的实际相对位置的时间,其中$ {{T}}_{ij}:=\{{t}_{ij}^{1},...,{t}_{ij}^{s},...,{t}_{ij}^{{S}_{ij}}\} $,$ s=\mathrm{1,2},...,{S}_{ij} $,$ {S}_{ij} $表示航行器$ {v}_{i} $测量到航行器$ {v}_{j} $的相对位置的总次数。类似地,通过设置$ {\mathit{\mu }}_{ij}\left({t}_{ij}^{s}\right)=0 $,可以推导出相对运动积分误差约束,即:
$ {\mathit{r}}_{ij}\left({t}_{ij}^{s}\right)-{\hat{\mathit{r}}}_{j}\left({t}_{ij}^{s}\right)+{\hat{\mathit{r}}}_{i}\left({t}_{ij}^{s}\right)=0。$
|
(7) |
航行器通过分布式估计$ \mathit{f} $来使约束方程成立。然而,由于$ {v}_{i} $缺乏对$ {v}_{j} $的初始位置和对水速度的了解,无法独立获得式(7)。为解决问题,进一步将式(7)重写为:
$ {\mathit{R}}_{ij}^{s}\mathrm{}\mathrm{}\left(\mathit{f}\right)-{\mathit{Q}}_{ij}^{s}\mathrm{}\mathrm{}\left(\mathit{f}\right)=0。$
|
(8) |
其中,
$ {\mathit{R}}_{ij}^{s}\mathrm{}\mathrm{}\left(\mathit{f}\right)={\int }_{0}^{{t}_{ij}^{s}}\left[{\mathit{\nu }}_{i}\mathrm{}\left(t\right)+\mathit{f}\left({\mathit{r}}^{i\mathrm{}}\left(t\right)\right)\right]\mathrm{d}t\mathrm{}\mathrm{}\mathrm{}+{\mathit{r}}_{i}\mathrm{}\left(0\right)+{\mathit{r}}_{ij}\mathrm{}\left({t}_{ij}^{s}\mathrm{}\mathrm{}\right),$
|
(9) |
$ {\mathit{Q}}_{ij}^{s}\mathrm{}\mathrm{}\left(\mathit{f}\right)={\int }_{0}^{{t}_{ij}^{s}}\left[{\mathit{\nu }}_{j}\mathrm{}\left(t\right)+\mathit{f}\left({\hat{\mathit{r}}}_{j}\mathrm{}\left(t\right)\right)\right]\mathrm{d}t\mathrm{}\mathrm{}\mathrm{}+{\mathit{r}}_{j}\mathrm{}\left(0\right) 。$
|
(10) |
由于$ {\mathit{r}}_{ij}\mathrm{}\left({t}_{ij}^{s}\mathrm{}\mathrm{}\right) $是航行器$ {v}_{i} $在时间$ {t}_{ij}^{s} $处测量的实际相对位置,$ {\mathit{R}}_{ij}^{s}\mathrm{}\mathrm{}\left(\mathit{f}\right) $可以由$ {v}_{i} $本地计算。此外,配备提供的时间$ {t}_{ij}^{s} $和当前估计$ \mathit{f} $,航行器$ {v}_{j} $可以本地确定$ {\mathit{Q}}_{ij}^{s}\left(\mathit{f}\right) $。随后,通过航行器间的通信,可以建立式(8)。
分布式合作流场估计问题。对于航行器$ {v}_{i} $,使用局部运动积分误差约束式(6)和式(8),给定流场的初始估计$ {\mathit{f}}_{i}^{0} $,设计一个迭代算法,航行器$ {v}_{i} $根据该算法生成流场估计序列,即$ \left\{{\mathit{f}}_{i}^{0},{\mathit{f}}_{i}^{1},{\mathit{f}}_{i}^{2},...,{\mathit{f}}_{i}^{k}\right\} $,使得当$ k\to \infty $时,$ \underset{k\to \infty }{\mathrm{lim}}{\mathit{f}}_{i}^{k}={\mathit{f}}^{\star } $。
2 分布式合作流场估计算法 2.1 航行器网络的图表示 当一航行器完成水下导航并浮出水面时,会在其通信范围内搜索其他航行器,并与邻居航行器建立通信链路。设有向图$ \mathcal{G}=(\mathcal{V},\mathcal{E}) $表示航行器之间的最终通信网络。如果航行器$ {v}_{i} $和$ {v}_{j} $可以双向通信,则存在有向边$ (i,j)\in \mathcal{E} $和$ \left(j,i\right)\in \mathcal{E} $,其中$ (i,j) $是从顶点$ i $到顶点$ j $的边。注意,图$ \mathcal{G} $通过合并所有航行器的通信链路建立。但在分布式框架中,各航行器只知道自己的通信邻居。设$ {\mathcal{C}}_{i}:=\left\{{v}_{i}\right\}\cup \left\{{v}_{j}\in \mathcal{V}\mid\left(i,j\right)\in \mathcal{E}\right\} $ 表示$ \mathcal{G} $中$ {v}_{i} $的邻居。进一步定义图$ \mathcal{G} $的非负权重邻接矩阵$ W= {\left[{w}_{ij}\right]}_{N\times N} $,其中 $ {w}_{ij} $是$ W $的第$ (i,j) $个元素,当$ {v}_{j}\in {\mathcal{C}}_{i} $时$ {w}_{ij}\ne 0 $。
2.2 分布式合作估计算法 首先,约束式 (6) 和式 (8) 中的$ x $和$ y $分量都有助于流场的估计。更具体地说,在分布式框架中,航行器$ {v}_{i} $通过解决以下非线性方程来估计流场:
$ \left\{\begin{aligned}
&{h}_{i,\mathrm{*}}\left(f\right)=0,\\ &{h}_{ij\mathrm{},\mathrm{*}}^{s}\left(\mathit{f}\right)=0,如果{\mathcal{N}}_{i}\ne \varnothing 。\end{aligned}\right. $
|
(11) |
其中,
$ \begin{array}{*{20}{c}}{h}_{i,*}\left(\mathit{f}\right):={\int }_{0}^{{{T}}_{i}}\left[{\nu }_{i,*}\left(t\right)+{f}_{*}\left({\hat{\mathit{r}}}_{i}\left(t\right)\right)\right]\mathrm{d}t+{r}_{i,*}\left(0\right)-{r}_{i,*}\left({{T}}_{i}\right),\\\\{h}_{ij}^{s},*\left(\mathit{f}\right):={R}_{ij,*}^{s}\left(\mathit{f}\right)-{Q}_{ij,*}^{s}\left(\mathit{f}\right)。\end{array}$
其中$ *=x $或$ y $,$ {v}_{j}\in {\mathcal{N}}_{i} $,$ {\mathcal{N}}_{i}=Mi\cup Ci $ 并且$ s\in \left\{\mathrm{1,2},...,{S}_{ij}\right\} $。因此,航行器$ {v}_{i} $实际上在本地拥有$ {K}_{i}=2\times (1+{\sum }_{j\in {\mathcal{N}}_{i}}{S}_{ij}) $个约束方程。本文提出了分布式合作流场估计算法1。在第$ k $次迭代中,水下航行器$ {v}_{i} $首先从其邻居$ {v}_{j}\in {\mathcal{C}}_{i} $接收当前估计,并计算:
$ {\mathit{f}}_{i}^{k,0}={\sum }_{j}{w}_{ij}{\mathit{f}}_{j}^{k} 。$
|
(12) |
其中$ {\mathit{f}}_{j}^{k} $是$ {v}_{j} $在第$ k-1 $次迭代结束和第$ k $次迭代开始时的本地估计。然后类似于[9],$ {v}_{i} $通过依次将当前估计$ {\mathit{f}}_{i}^{k,n} $投影到式 (11) 中的每个约束上来进行更新:
$ {\mathit{f}}_{i}^{k,n+1}={\mathit{f}}_{i}^{k,n}-{\lambda }_{i}^{k,n}\displaystyle\frac{{h}_{i,*}\left({\mathit{f}}_{i}^{k,n}\right)}{{\parallel\nabla {h}_{i,*}\left({\mathit{f}}_{i}^{k,n}\right)\parallel}^{2}}\nabla {h}_{i,*}\left({\mathit{f}}_{i}^{k,n}\right) ,$
|
(13) |
或
$ {\mathit{f}}_{i}^{k,n+1}={\mathit{f}}_{i}^{k,n}-{\lambda }_{i}^{k,n}\displaystyle\frac{{h}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right)}{{\parallel\nabla {h}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right)\parallel}^{2}}\nabla {h}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right)。$
|
(14) |
通过此方式,$ {v}_{i} $依次计算$ {\mathit{f}}_{i}^{k,n} $,其中$ n=\mathrm{1,2},..., {K}_{i} $。设$ {\mathit{f}}_{i}^{k+1}={\mathit{f}}_{i}^{k,{K}_{i}} $,则第$ k $次迭代完成。在式(13) 和式 (14) 中,松弛参数$ {\lambda }_{i}^{k,n}\in \left(\mathrm{0,2}\right) $,梯度$ \nabla {h}_{i,*}\left({\mathit{f}}_{i}^{k,n}\right)\in {\mathbb{R}}^{2P} $可以由$ {v}_{i} $使用本地信息计算。对于梯度 $ \nabla {h}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right) $,有:
$ \nabla {h}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right)=\nabla {R}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right)-\nabla {Q}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right)。$
|
(15) |
可以类似于式 (8) 以类似的方式恢复。
本文设计了一个迭代算法,该算法允许各水下航行器通过共享和更新本地流场估计来合作估计整个流场。具体的算法迭代步骤描述如下:
步骤1 对于每个航行器 $ {v}_{i} $,已知初始位置$ {\mathit{r}}_{i}\mathit{}\left(0\right) $,上浮位置$ {\mathit{r}}_{i}\mathit{}\left({{T}}_{i}\mathit{}\right) $,相对位置测量$ {\mathit{r}}_{ij}\mathit{}\left({t}_{ij}^{s}\mathit{}\mathit{}\right) $,初始化流场估计向量 $ {\mathit{f}}_{i}^{0} $。
步骤2 对于每次迭代$ k $,每个航行器$ {v}_{i} $执行以下操作:1) 与邻居 $ {v}_{j}\in {\mathcal{C}}_{i} $共享本地估计 $ {\mathit{f}}_{i}^{k} $,并根据式 (12) 计算$ {\mathit{f}}_{i}^{k,0} $。2) 循环:对于每个约束方程执行以下操作:使用式 (13) 更新$ {\mathit{f}}_{i}^{k,n} $,并设置$ n=n+1 $。3) 循环:对于$ {v}_{j}\in {\mathcal{N}}_{i} $,$ s=1:{S}_{ij} $,$ *=x $和$ y $执行以下操作:发送 $ {\mathit{f}}_{i}^{k,n} $和$ {t}_{ij}^{s} $给$ {v}_{j} $,然后等待$ {v}_{j} $返回 $ {Q}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right) $ 和$ \nabla {Q}_{ij,*}^{s}\left({\mathit{f}}_{i}^{k,n}\right) $。4) 使用式 (14) 更新$ {\mathit{f}}_{i}^{k,n} $,设置$ n=n+1 $。5) 设置$ {\mathit{f}}_{i}^{k+1}={\mathit{f}}_{i}^{k,n} $,$ k=k+1 $。
步骤3 检查是否满足停止条件,如迭代次数达到 $ {k}_{\mathrm{m}\mathrm{a}\mathrm{x}} $或估计值的变化低于阈值。如果满足,则停止迭代;否则,返回步骤 2 继续迭代。
3 仿 真 3.1 示例1:模拟流场 在1200 m×1200 m的区域内模拟了一个涡旋流场(见图2(a)),其中$ P=9\times 9 $,最大流速为0.1m/s。18个航行器($ N=18 $)被部署在该区域内(图2(b)),其对水速度$ {\nu }_{i}\left(t\right) $固定在0.45 m/s,并且在运动期间运动方向保持与x轴或y轴平行。如果两航行器$ {v}_{i} $和$ {v}_{j} $间存在相对位置测量,设置其${T_{ij}}\left[ s \right] = {\rm{ }}\left\{ {{\rm{100}},{\rm{400}},{\rm{700}},{\rm{100}}\;{\rm{0}},} \right.$$ \left. {130\;0,160\;0,190\;0,220\;0} \right\} $。各航行器的$ {\mathcal{C}}_{i} $和$ {\mathcal{M}}_{i} $列在表1中。选择停止条件为$ {k}_{\mathrm{m}\mathrm{a}\mathrm{x}}=3\;000 $,松弛参数$ {\lambda }_{i}^{k,n}=1 $。
表 1(Tab. 1)
表 1 各航行器的通信邻居集$ {\mathcal{C}}_{\mathit{i}} $和相对位置测量集$ {\mathcal{M}}_{\mathit{i}} $
Tab. 1 $ {\mathcal{C}}_{\mathit{i}} $ and $ {\mathcal{M}}_{\mathit{i}} $ for each vehicle
$ i $ |
$ 1 $ |
$ 2 $ |
$ 3 $ |
$ {\mathcal{C}}_{i} $ |
$ \{1,2,5,10\} $ |
$ \{1, 2, 3, 11, 13\} $ |
$ \{2,3,4,8,11\} $ |
$ {\mathcal{M}}_{i} $ |
$ \left\{2\right\} $ |
$ \left\{1\right\} $ |
$ \left\{4\right\} $ |
|
|
|
|
$ i $ |
4 |
5 |
6 |
$ {\mathcal{C}}_{i} $ |
$ \{3, 4, 5, 7, 14\} $ |
$ \{1, 4, 5, 6\} $ |
$ \{5, 6, 7, 9, 12\} $ |
$ {\mathcal{M}}_{i} $ |
$ \left\{5\right\} $ |
$ \left\{1\right\} $ |
$ \{5, 9, 12\} $ |
|
|
|
|
$ i $ |
$ 7 $ |
$ 8 $ |
$ 9 $ |
$ C\_i $ |
$ \{4, 6, 7, 8, 15, 17\} $ |
$ \{3, 7, 8, 9\} $ |
$ \{6, 8, 9, 10, 14, 18\} $ |
$ M\_i $ |
$ \varnothing $ |
$ \varnothing $ |
$ \{6, 10, 18\} $ |
|
|
|
|
$ i $ |
$ 10 $ |
$ 11 $ |
$ 12 $ |
$ {\mathcal{C}}_{i} $ |
$ \{1, 9, 10, 11, 12\} $ |
$ \{2, 3, 10, 11, 12\} $ |
$ \{6, 10, 11, 12, 13\} $ |
$ {\mathcal{M}}_{i} $ |
$ \{9, 12\} $ |
$ \left\{12\right\} $ |
$ \{6, 10\} $ |
|
|
|
|
$ i $ |
$ 13 $ |
$ 14 $ |
$ 15 $ |
$ {\mathcal{C}}_{i} $ |
$ \{2, 12, 13, 14, 17\} $ |
$ \{4, 9, 13, 14, 15\} $ |
$ \{7, 14, 15, 16\} $ |
$ {\mathcal{M}}_{i} $ |
$ \left\{17\right\} $ |
$ \left\{15\right\} $ |
$ \left\{16\right\} $ |
|
|
|
|
$ i $ |
$ 16 $ |
$ 17 $ |
$ 18 $ |
$ {\mathcal{C}}_{i} $ |
$ \{14, 15, 16, 17, 18\} $ |
$ \{7, 13, 16, 17, 18\} $ |
$ \{9, 16, 17, 18\} $ |
$ {\mathcal{M}}_{i} $ |
$ \{15, 18\} $ |
$ \varnothing $ |
$ \{9, 16, 17\} $ |
|
表 1 各航行器的通信邻居集$ {\mathcal{C}}_{\mathit{i}} $和相对位置测量集$ {\mathcal{M}}_{\mathit{i}} $
Tab.1 $ {\mathcal{C}}_{\mathit{i}} $ and $ {\mathcal{M}}_{\mathit{i}} $ for each vehicle
|
由于没有流场的先验知识,为各航行器设置初始估计值$ {\mathit{f}}_{i}^{0}=0 $。最终估计的流场和航行器轨迹显示在图2(c)和图2(d)中。可以看到实际和估计的轨迹几乎重合,表明流场估计的准确性。流场估计的准确性在没有航行器通过的区域将不可避免地退化。在实践中,可以通过插值获得这些区域的流速。为了更好地说明所提出分布式算法的准确性,计算估计误差时不考虑没有航行器通过的网格单元。作为比较,在相同的仿真设置下使用文献[9]中的基于树的分布式方法估计相同的流场。表2显示了2种方法的估计误差,其中RMS 表示均方根误差,VAR表示方差,STD 表示标准差。
表 2(Tab. 2)
表 2 本文提出方法与文献[9]算法估计误差的比较
Tab. 2 Comparison of the estimation error by the proposed and ref. [9]'s algorithm in the simulation
方法 |
RMS/(m·s−1) |
VAR/(m2·s−2) |
STD/(m·s−1) |
提出的方法 |
0.001012 |
0.000001 |
0.000971 |
文献[9]的方法 |
0.000940 |
0.000001 |
0.000936 |
|
表 2 本文提出方法与文献[9]算法估计误差的比较
Tab.2 Comparison of the estimation error by the proposed and ref. [9]'s algorithm in the simulation
|
进一步定义相对误差为$ \left|\left|\mathit{f}-{\mathit{f}}^{\star }\right|\right|/\Vert {\mathit{f}}^{\star }\Vert \times 100\text{%} $,本文提出的方法和文献[9]中的方法的最终的相对误差分别为3.113% 和 2.893%。可以看到,2种方法相当。而本文方法不需要航行器之间先建立起树形通信网络,降低了对航行器间通信条件的要求。为了进一步探索所提出的分布式算法,进行了4个对比仿真(案例1~案例4),在这些案例中,逐渐增加了各航行器的通信邻居数量(见表3),即增加 $ \left|{\mathcal{C}}_{i}\right| $。在4种情况下,保持其他仿真设置与上述仿真相同。值得注意的是,保证在每种情况下$ {\mathcal{M}}_{i}\subset {\mathcal{C}}_{i} $,以便流场估计使用的总约束方程在4种情况下保持相同。设置$ {k}_{\mathrm{m}\mathrm{a}\mathrm{x}}=500 $,图3显示了4种情况下的相对估计误差曲线。结果符合物理上的直觉,即拥有更多的邻居可以加速多航行器系统中估计流场的传输,从而加快$ {\mathit{f}}_{i}^{k} $的收敛。
表 3(Tab. 3)
表 3 案例1至案例4中各航行器的通信邻居数量$ \left|{\mathcal{C}}_{\mathit{i}}\right| $
Tab. 3 $ \left|{\mathcal{C}}_{\mathit{i}}\right| $ for each vehicle in cases 1~4
$ i $ |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
案例1 | 3 | 3 | 3 | 3 | 4 | 5 | 3 | 3 | 5 | 案例2 | 4 | 5 | 5 | 5 | 4 | 5 | 6 | 4 | 6 | 案例3 | 6 | 6 | 7 | 6 | 6 | 5 | 7 | 6 | 9 | 案例4 | 18 | 18 | 18 | 18 | 18 | 18 | 18 | 18 | 18 | | | | | | | | | | | $ i $ | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 案例1 | 4 | 3 | 5 | 4 | 4 | 3 | 4 | 4 | 4 | 案例2 | 5 | 5 | 5 | 5 | 5 | 4 | 5 | 5 | 4 | 案例3 | 7 | 5 | 7 | 6 | 7 | 6 | 7 | 5 | 6 | 案例4 | 18 | 18 | 18 | 18 | 18 | 18 | 18 | 18 | 18 |
|
表 3 案例1至案例4中各航行器的通信邻居数量$ \left|{\mathcal{C}}_{\mathit{i}}\right| $
Tab.3 $ \left|{\mathcal{C}}_{\mathit{i}}\right| $ for each vehicle in cases 1~4
|
3.2 示例2:时变网络 本示例研究在航行器网络变化的情况下所提出算法的有效性。
图4(a)显示要估计的流场,其中$ P=4\times 4 $,流速的x分量从0增加到0.05 m/s,而y分量从0.05减少到0 m/s。8个航行器被部署在该区域内(图4(b)),对水速度恒定在0.35 m/s,$ {{T}}_{ij}\left[{s}\right] = \{297,593, 888, 118\;4, 148\;0\} $。设置$ {k}_{\mathrm{m}\mathrm{a}\mathrm{x}}=100 $,$ {\lambda }_{i}^{k,n}=1 $,初始猜测$ {\mathit{f}}_{i}^{0}=0 $。
考虑航行器的通信网络会随着迭代轮数的变化而变化,其中图5(a)和图5(b)中的网络并不满足连通性,其中实线条表示双向通信,虚线箭头表示航行器之间的相对位置测量。基于上述仿真设置,执行了3个仿真实验来估计图4(a)所示的流场:1)网络1和网络2交替使用,即第$ k $次迭代中使用网络$ \mathrm{m}\mathrm{o}\mathrm{d}(k, 2)+1 $;2)网络1,网络1和网络3交替使用,即每三次迭代中使用2次网络1和1次网络3;3)网络1和网络3交替使用。图6 显示了上述3个实验在航行器通信网络变化时的相对估计误差曲线。可以看到,即使在网络变化的情况下,所提出的算法仍然能够成功估计流场。特别是,当多航行器系统的通信网络在网络1和网络2之间交替变化时,航行器之间无法在任何时候建立连通网络,导致无法形成树状结构网络。在这种情况下,文献[9]中的基于树的方法显然无法正常工作,而本文提出的分布式方法仍然能够正常工作。
4 结 语 本文提出了一种分布式一致性算法,用于在水下环境中估计流场,这一环境通常因GPS信号的缺失而难以直接测量流速。该算法允许多个水下航行器在没有直接流速测量的情况下,通过合作来估计流场。本文通过一系列仿真实验验证了算法的有效性,实验结果表明,即使在航行器之间的通信网络发生动态变化的情况下,所提出的算法也能够准确地估计流场。这一成果为水下无人航行器在复杂海洋环境中的操作提供了一种新的技术手段,增强了在执行任务时的自主性和适应性。