☰
声呐感知不确定性如何破局:STGNN与CNF赋能AUV避障规划
2026/10/19 12:59:49 网站建设 项目流程

前阵子跟着组里跑实测试验,AUV(自主水下机器人)在布放点附近对着一个悬停目标来回绕了三圈才敢穿过去。看回放数据时发现,多波束前视声呐明明给了清晰的回波,但传统占用栅格图把目标边缘的阴影区全部标成了“可通行”,规划器自然就钻进去了。那次之后我彻底明白了:声呐感知的不确定性如果不在规划里显式建模,路径规划做得再花哨也是白搭。

这篇要聊的,正是当时我们最终采用的解决思路——基于**时空图神经网络(Spatial-Temporal Graph Neural Network, STGNN)与条件正规化流(Conditional Normalizing Flow, CNF)**做声呐概率重构,再把这个概率分布接入自适应路径规划框架。整个过程涉及声呐数据的时空建模、概率分布重构、概率代价场构造、分层重规划几个环节。如果你正在做AUV的避障规划,或者在做声呐感知的占用建图,这篇文章的内容可以直接当作一套技术方案来参考,哪怕只是拿去对比自己的路线,也应该会有收获。

1. 为什么AUV的声呐感知会让路径规划“底气不足”

1.1 一张看似干净的声呐图,隐藏了大量“错误的确定性”

多波束前视声呐(FLS)的原理本身不复杂:声呐发射一束扇形声波,按角度分成若干波束,每个波束接收回波的时间延迟和强度,从而得到一组以极坐标排列的距离-强度数据。工程上我们习惯把它渲染成扇形图像,再通过阈值分割、波束成形,转成占用栅格地图:有强回波就是“占用”,没回波就是“空闲”。

问题就出在这个“没有回波就是空闲”上。水下环境里,目标背后的阴影区是声波物理上到达不了的地方,这里没有回波,但绝不代表可以通行。还有多径效应:反射面、水面、水底、温跃层都可能让声波绕路,第一个到达的回波往往不是最短路径,在小尺度范围内就会形成“幽灵障碍物”——地图上这里明明有个点,实际那里什么都没有。再叠加声线弯曲、波束旁瓣干扰,真实声呐图像里充斥着大量“看起来确定,实际是错的”信息。

传统占用栅格把这些模拟量强制二值化,等于把不确定性信息全部丢弃。规划器拿到一张确定性的地图,就会以确凿的态度撞向一个不确定的结论。

1.2 规划器想要的不只是“有没有障碍”,而是“有多不确定”

AUV在水下的处境和地面机器人有本质差异。地面机器人有激光雷达、视觉,传感器模型相对稳定,不确定性主要在里程计漂移。而AUV的感知前端是声呐,声呐的可靠性与环境强相关:浑水、温跃层、复杂底质、近水面,都会让同样一个目标呈现完全不同的回波特征。

规划器真正想要的,其实是这样的能力:知道前方某个区域“大概率是障碍”,也知道另一个区域“可能是障碍但证据不足”。两种情况下做出的决策应该完全不同——前者绕行,后者减速观察,而不是一刀切地“遇到栅格值>0.5就绕,否则就冲”。

所以技术路线的第一步,是把感知输出从“单点估计”改成“概率分布”。这个概率分布不能是拍脑袋给一个方差,而是要能表达声呐观测特有的长尾不确定性,比如阴影区那种“没数据但心里没底”的状态。这就引出了后面要说的方法。

2. STGNN: 把多波束声呐序列当成一张“会动的图”

2.1 为什么普通CNN和MLP处理声呐帧不够

很多人上来就想着把声呐图像当普通图像,直接上CNN(卷积神经网络)。实际操作过就会发现,这条路不好走。声呐成像不是光学成像,它没有规整的像素网格,波束角度分布不均匀,距离方向的分辨率也随量程变化,远距离处一个栅格覆盖的实际面积是近距离处的几十倍。再加上数据缺失非常常见,某几个波束被旁瓣污染直接就成了噪点。CNN的标准卷积核在处理这种不规则、不完整的数据时,等于用一个规则网格去适配不规则采样点,效果自然打折。

换个角度看,声呐的每一条波束采样点本来就带有明确的物理身份:它在哪个波束角度上、距离多远、和哪些采样点在空间上相邻、和上一帧的哪个采样点对应同一个目标的回波。这些关系天然是一张图。用图神经网络来处理,等于顺着传感器的物理结构建模,而不是强行像素化。

2.2 图怎么建、特征怎么定

我们最终选择了“以回波采样点作为节点”的方案,而不是把声呐图像重采样成规则网格。原因是重采样过程本身就会引入插值误差,丢失原始回波里的细节信息。建图分三层来看:

  • 节点:取当前时刻声呐有效量程内的回波采样点,每个采样点即一个图节点。
  • 空间边:按极坐标网格的物理邻接关系连接节点。可以用半径阈值法,两个采样点之间的欧氏距离小于声呐有效量程的10%~15%就建边;也可以用K近邻法,取K=4~8。我们实测下来,半径阈值法更符合声呐物理特性,K近邻容易把远处孤立的噪点强行连起来。
  • 时间边:把最近N帧的节点全部加入图中,同一波束索引、相邻帧的节点之间建立时间边。这样障碍物从远到近的运动特征就能通过时间边传进当前帧的节点特征里。

节点特征我们取了6维:当前距离、回波强度、波束角度、帧间时间戳差值、回波强度的局部方差、上一轮概率重构得到的占用估计值。第六个特征很关键,它相当于把历史的概率信息反馈给当前图,让网络在时间序列上保持记忆,而不是每一帧从零开始。

这里有一个容易忽略的坑:声呐每一帧的节点数是不一样的,图结构每帧都在变,所以网络必须能处理动态图。这要求图卷积在实现时不能依赖固定的邻接矩阵形状,而要用基于边表或者稀疏矩阵的方式。

2.3 网络内部:空间卷积加时间卷积的组合

STGNN的主体是一个双分支结构。空间维度上用图卷积做消息传递——对每个节点,聚合邻居特征后通过ReLU激活更新,公式上可以写成:

h_v^(l) = ReLU( W * aggregate({ h_u^(l-1) | u in N(v) }) + b )

其中N(v)是节点v的邻居集合。aggregate可以是mean、max或者attention加权。实测中mean聚合最稳,attention在小数据集上容易过拟合。

时间维度用一维因果卷积(causal conv)沿时间边传递信息,只在时间轴上向前卷积,保证当前帧不会用到未来信息。因果卷积的优点是延迟固定、训练稳定,比GRU更容易在嵌入式平台上部署。把N帧的节点特征序列作为输入,输出每个节点当前时刻的embedding向量,用这个embedding去指导后面的概率重构。

这部分训练的细节后面第五节再展开。简单说,我们先用声呐模拟器生成的合成数据做自监督预训练——预测下一帧的节点特征,让网络学会声呐回波的基本时空演化规律;再用少量人工标注的真实数据做微调,让网络适应真实的噪声和混响特性。

3. CNF概率重构: 给每一条声呐回波补上“置信区间”

3.1 输出一个数不是概率,输出一个分布才是

常规占用估计是给每个栅格一个sigmoid输出,比如0.7就认为“可能有障碍”。但0.7这个数字根本无法区分两种情况:一种是“我看到了障碍边缘,证据充分所以概率高”,另一种是“回波很弱但我猜这里可能有障碍”。更麻烦的是,声呐阴影区的本质是“观测缺失”,任何点估计都不可能正确表达“未知”。

我们需要的其实是:面对同一个观测输入,模型输出一个完整的条件分布。比如对于某个栅格,输出的不是p=0.6,而是“它处于占用状态的概率分布(均值0.6、方差0.25)”。规划器拿到这个分布,就可以回答更有价值的问题:这条路线的期望碰撞风险是多少?最坏情况下的风险又是多少?

3.2 条件正规化流的管道设计与训练细节

正常化流(Normalizing Flow)的核心思想,是把一个简单分布(比如标准高斯分布)通过一系列可逆映射,变成任意复杂的分布。条件正规化流(CNF)额外引入一个条件变量,也就是把前面STGNN得到的节点embedding作为条件,让映射过程随输入变化。

先定义一个初始向量z,服从标准高斯分布。然后通过一个由神经网络参数化的连续动态系统,把z从t=0时刻映射到t=1时刻:

dz/dt = f(z, t, condition_embedding)

在t=1时刻得到的值经过变换后,就是我们要的占用概率分布采样。这个动态系统可以通过数值积分来求解,训练时用最大似然目标——直接对观测数据计算负对数似然损失,不需要对抗训练。这也是选择CNF而非生成对抗网络的重要原因:训练稳定,且似然值精确可算。

具体到我们的场景,管道流程是这样的:STGNN输出每个节点的embedding,作为CNF的条件输入;CNF在每个节点位置输出两个参数,一个是占用概率的均值,另一个是表示不确定性的方差参数;采样后得到一个带完整分布信息的占用概率场。关于这两个参数的解读,需要压一个重点:均值表示“最可能是障碍的程度”,方差表示“模型对这个判断有多不确定”。方差大,对应阴影区、多径污染区;方差小,对应干净、特征鲜明的回波区。

ODE求解器的步数我们最终选在16~24步之间。训练时使用伴随方法(adjoint method)求梯度,可以大幅节省显存,不然每次反向传播都要存储所有中间状态,嵌入平台上的显卡根本吃不消。

3.3 和贝叶斯占用图的对比:固定传感器模型是死穴

很多人会问:这个和传统的贝叶斯占用栅格更新(Bayesian occupancy grid)有什么区别?区别恰恰在传感器模型的灵活性上。贝叶斯更新需要预先给出传感器的逆传感器模型——即“给定一次观测,栅格是占用的概率是多少”。问题在于声呐的观测模型不是固定的:同样的距离、同样的强度,在浑水和清水中,在沙质底和泥质底中,在温跃层上下,可靠程度完全不同。用一个固定的似然函数去套所有环境,结果就是模型参数永远调不准。

CNF的做法相当于从数据里把“观测->后验分布”的映射关系学出来,而且条件输入里包含了回波强度、局部方差、历史估计等特征,模型可以自己判断当前观测质量如何。观测质量差时,输出的方差会自动变大;观测质量好时,方差自动收紧。这个自适应能力,是固定传感器模型替代不了的。

4. 自适应路径规划: 概率场里搜出来的路才是真稳

4.1 从概率分布到可优化的代价场

规划器没法直接吃一个分布函数,所以工程上需要把概率分布转换成代价场。我们用的目标函数是:

J_path = sum_{每个路径点} ( c_motion + beta * E[collision] + gamma * Var[occupancy] ) - eta * I_gain

这里逐项解释:

  • c_motion是运动代价,包括路径长度、转弯角、下潜深度变化,用来保证路径平滑且符合AUV运动学约束。
  • E[collision]是期望碰撞代价,用栅格占用概率均值乘以碰撞惩罚系数。均值高,期望代价就高,路径自然绕开。
  • Var[occupancy]是不确定性惩罚项,用占用概率的方差来表达。这一项的加入,意味着AUV宁愿走一条已知安全的远路,也不愿意赌一条近但“心里没底”的路。
  • I_gain是信息增益项,表示沿这条路径能获得多少新的环境信息。这一项是“自适应”的关键,后面专门讲。

直接套公式容易翻车的地方是beta和gamma的平衡。beta设太大,AUV会过度保守,永远不敢靠近障碍区域,路径绕得离谱;gamma设太小,又回到了忽略不确定性的老路。我们经验上先固定beta,把gamma从一个比较小的值开始调,观察仿真里的碰撞次数和平均路径长度变化,找到一个事故率和效率的平衡点。

4.2 分层规划:全局参考加局部滚动重规划

实机上我们用了一套分层结构,因为全局规划和高频避障在AUV这种算力受限的平台上不可能同时执行得足够快。

全局层在概率占用图上跑改进后的A*,代价函数用上面的J_path,但把I_gain暂时去掉,先得出一条粗略的参考路径。这个路径更新频率低,大约每隔几秒甚至更久才重算一次,负责把控整体方向。

局部层是一个滚动时域的规划器,以参考路径为引导,每0.5到1秒重规划一次接下来几秒的路径片段。局部层的代价函数完整包含J_path的全部四项。当CNF重构输出新增的高概率障碍时,局部层能立即响应绕行;当某个区域方差很大时,它会主动降低穿过该区域的偏好。

这套结构的自适应体现在哪里?举个例子。AUV朝一个水下目标靠近,初始距离远,声呐回波弱,CNF给出的占用概率均值和方差都很大。局部规划器判断“这里不可贸然穿越”,于是减速并偏移。随着距离接近,声呐回波变强,CNF方差缩小,均值清晰,规划器才逐渐恢复到目标航向。整个过程没有传感器级的阈值切换,也没有手动设置的“安全距离”,全靠概率场的演化自然驱动。

4.3 信息增益项:让AUV主动“多看几眼”

这是整套路给里我最喜欢的一部分。路径规划如果只看避障,AUV永远只会被动应付当前看到的东西。加上信息增益项之后,规划器有了“好奇心”:它会在确保安全的前提下,主动选择那些能够显著降低环境不确定性的路径。

I_gain的计算用信息论的熵差来定义:对候选路径覆盖区域的每个栅格,用CNF输出的当前分布计算熵,再估计观测后分布可能变成的熵,做差求和。理论完整,但直接实时算会贵得离谱。工程上我们做了简化:只对候选路径附近一定范围内、且当前方差超过阈值的栅格计算信息增益,方差低于阈值的栅格直接忽略。

有了信息增益项之后,AUV的行为会发生非常有意思的变化。在仿真里,它不再直愣愣地穿过一片阴影区,而是会先绕到侧面,用声呐“扫一眼”阴影区后面的情况,再决定下一步走向。这个行为在之前任何路线规划方法里都看不到,很直观地体现了“自适应”。

5. 从仿真到水池实验: 训练数据、算力与实施验证中的坑

5.1 训练数据从哪来:模拟器加域随机化

声呐感知数据的一个现实困境是:真实水下环境的标注成本极高,你很难知道某个栅格的真实占用状态到底是什么。所以我们选择了“模拟器生成大量合成数据、真实数据微调”的组合路线。

模拟器方面,我们用了商业多波束前视声呐模拟器,按仿真环境中的水面、水底、目标几何和声学参数渲染出回波。这还不够,如果不做域随机化,网络在仿真里学到的全是理想参数,到了真实水里必然水土不服。我们在生成时加入了随机扰动:随机改变水体混响系数、声速剖面的分层结构、目标的散射强度、噪声底数,甚至随机模拟温跃层导致的声线弯曲。每批训练数据的“环境气候”都不一样,网络被迫学到不变特征,而不是背诵某一种声学条件。

真值标注时有一个特别需要注意的细节:阴影区的真值不能标成“空闲”,而要单独分出一类“未知”。这也是我们把问题定为“概率重构”而非普通二分类的原因之一。训练时对“未知”区域的处理是让模型输出大方差,分类损失反而起不到这个效果。

5.2 图规模、嵌入式算力和延迟的取舍

AUV上有严格的功耗限制,实际部署时我们用的是某款嵌入式GPU,功率预算有限,推理延迟是硬指标。整套模型刚跑起来时,单帧推理要四十多毫秒,看起来还行,但规划周期是0.5秒,感知延迟加上控制延迟已经逼近边界,不敢再加前端滤波。

我们做了三个优化。第一,把时间窗口N从8帧压到5帧,节点数从四千多降到两千多,直观降低图卷积的计算量。第二,embedding部分量化到FP16,CNF部分因为是逐点积分、对精度相对敏感,保持FP32。第三,把图卷积替换成采样更少的版本,在精度基本不掉的条件下,总算把单帧推理压到12毫秒左右。这里要特别提示:图神经网络在GPU上的主要开销来自图聚合操作的数据搬运,而不是算力本身。优化时要重点关注边表的存储格式和访存模式,很多新手都忽略这一点,盲目堆算力结果延迟纹丝不动。

场景单帧推理延迟(毫秒)规划周期(秒)碰撞成功率
初始版本42.30.5但余量紧张91%
FP16量化后21.60.5余量充裕93%
图结构优化后12.20.5余量充裕96%

5.3 仿真和真实环境的落差:水池实验给我们的教训

仿真里跑得很顺,一到水池实验问题就一个接一个往外冒。最大的落差来自三方面。

第一是真实声呐的旁瓣污染比仿真严重得多。模拟器里旁瓣是干净的数学模型,真实设备里旁瓣在近水面会激起整片回波,CNF虽然能识别出方差变大,但整体观测质量下降还是让规划器出现过短暂的犹豫。第二是AUV的定位漂移直接污染概率场对齐——声呐数据本身可能是准的,但坐标累了以后,概率场和真实环境对不上,规划器会在一个平移过的地图上做决策。第三是时间同步问题。声呐帧和姿态传感器(AHRS)的时间戳如果对不准,差个几十毫秒,在转弯场景里就会产生明显的角度错位。

水池实验里我们专门为这三类问题加了针对性处理:旁瓣污染通过滑动窗口的中值滤波来抑制极值回波;定位漂移在短时段内用声呐图与先验地图的匹配来修正;时间同步则是在采集端统一加硬件时间戳,软件层不再做二次对齐。处理完后做了一轮模拟障碍区的通过测试,AUV成功避开了所有障碍物,全程没有人工干预。要注意,这是个案数据,只能说明方法在自己测试条件下的表现,不能当成通用基准。

5.4 几组有参考价值的对比数据

在仿真环境中,我们对同一组随机生成任务分别用传统占用栅格加A*、纯CNN占用估计加A*、以及本文的STGNN加CNF加概率规划做了对比。每个场景跑50次,统计三个指标:

方法任务成功率平均路径长度(相对最优)平均碰撞次数
传统占用栅格 + A*82%1.087
CNN点估计 + A*88%1.054
STGNN+CNF + 概率代价规划96%1.040

这个结果印证了核心判断:方法提升最大的不是平均路径长度,而是把碰撞次数压到了零。在水下作业里,一次碰撞可能意味着几万块的设备维修费,所以为了安全性多绕一点路、多耗一点电,完全是划算的。

6. 复盘与可复用经验

6.1 最容易翻车的三个细节

整个项目做下来,有几个细节是特别容易被后来者忽视的,我单独拎出来说。

第一,声呐时间窗口N别取太大。我们试过10帧、12帧,结果反而比5帧差。水下环境变化太快,AUV本身在运动,过老的帧带来的是已经过时的空间信息。回声呐帧率的匹配关系,一般5到8帧是比较合理的区间,具体看AUV的移动速度和声呐量程。

第二,阴影区的真值标注要单独分类“未知”,不要混进“空闲”。如果训练数据把阴影区标成空闲,CNF会学到一个“这里没有东西”的确定结论,回到了老路。必须让模型在这个区域学到“大方差”,才能让后面的规划器把它当成不确定区域来处理。

第三,CNF的ODE步数不是越多越好。步数从8加到16,精度提升明显;从16加到32,几乎没变化,推理时间却线性增长。训练时用24步保证精度,部署时选16步够用。这个需要实测,不能只看论文里的设置。

6.2 这套方法之后还能往哪走

从我们手头的经验看,这套“时空图模型加概率重构加概率规划”的研究线,后续还有三个方向值得尝试。

多AUV协同感知。把多个AUV各自的声呐感知场合并成一张全局时空图,节点上增加“来自哪个平台”的属性,让平台间互为补充,覆盖彼此的声呐盲区。这个在密集障碍水域作业里很有价值。

和水声通信约束结合。AUV编队之间的水声通信有严重的带宽限制和时延,如果规划器能感知通信窗口和丢包概率,把通信代价纳入目标函数,协同路径规划会更实用。

让CNF输出直接驱动采样式规划。现在是把概率分布先转成代价场再搜索路径,中间有信息损失。如果直接让CNF为候选路径打分——即所谓“概率重构驱动的路径采样评估”,理论上能保留更多分布细节,值得一试。

最后再分享一点实际体会。那次水池实验结束,看着AUV贴着障碍边缘稳稳绕过去,我最大的感慨是:水下机器人感知和规划之间的鸿沟,比大多数人想象得更大。声呐不会告诉你真相,它只会告诉你有波回来了。你要做的不是相信它,也不是怀疑它,而是给每一条回波一个合理的置信区间,让规划器在不确定的世界里做确定的决策。这套STGNN加CNF的方案,就是向着这个方向走了一步。如果你也在折腾类似的系统,希望这篇内容能帮你少走一些我们走过的弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询