3. 视觉避障任务定义

无人机视觉避障不是一个单一模型能够完成的任务,而是一条由感知到决策的多任务信号链。机载相机采集图像后,系统需要依次回答五个问题:前方有没有障碍物?障碍物离我多远?它是什么类型、是否可穿越?我和它之间的相对运动如何?最终应该执行什么飞行动作?这五个问题分别对应障碍物检测、深度估计、语义分割、光流与运动估计、避障决策输出五类任务。理解它们的输入输出边界与耦合关系,是后续网络设计、数据标注和机载部署的前提。

视觉避障五类任务的信号链与输出关系 机载相机 RGB / 双目 / 事件 障碍物检测 bbox / 置信度 / 类别 “有没有、在哪里” 深度估计 深度图 / 距离值 “离我多远” 语义分割 像素级掩码 / 类别 “是什么、可否穿越” 光流与运动估计 光流场 / 位姿增量 “相对运动趋势” 避障决策输出 速度 / 航向 / 悬停 “下一步怎么飞” 融合与决策要素 障碍距离 + 类别 → 可通行代价 光流膨胀 → 碰撞时间 TTC 语义掩码 → 禁飞/可穿越区域 安全距离阈值 + 飞控约束 输出:速度指令 / 航向修正 / 悬停

一、五类任务的输入输出定义

从工程视角看,每个任务都必须明确输入张量、输出张量、监督信号和评价指标,否则网络无法训练、也无法与飞控对接。下表给出五类任务的标准定义,可作为项目接口文档的起点。

任务 输入 输出 典型监督 评价指标
障碍物检测 单帧 RGB 边界框 + 类别 + 置信度 标注框、类别 mAP、召回率
深度估计 单目 / 双目图像 逐像素深度图 LiDAR、双目视差 AbsRel、δ<1.25
语义分割 单帧 RGB 逐像素类别掩码 像素级标注 mIoU、类别精度
光流与运动估计 连续两帧图像 光流场 / 位姿增量 光流真值、IMU EPE、位姿误差
避障决策输出 上述感知结果 速度、航向、悬停指令 专家策略 / 强化学习奖励 碰撞率、任务成功率

二、核心原理:从像素到动作的映射

五类任务并非简单串联。检测与分割共享主干特征,深度估计与光流都依赖帧间或双目几何关系,决策模块则把几何量转化为代价地图。一个常见的融合方式是:先用检测框锁定感兴趣区域,再在框内估计深度,得到障碍物的三维位置;同时用语义分割判断该区域是“墙”还是“草丛”,从而决定是绕行还是穿越。

光流与运动估计提供的是时间维度的信息。当障碍物在图像中快速膨胀,即使深度估计有误差,也能通过光流散度判断碰撞时间(TTC)。这种“几何+运动”的双通道冗余,是无人机在高速飞行中避免漏检的关键。

核心公式:碰撞时间 TTC ≈ 障碍物尺度 / 尺度变化率。当 TTC 小于安全阈值(如 1.5 秒)时,决策模块必须触发减速或转向。

三、方法流程与工程落地

在机载部署时,五类任务通常被组织为“共享主干 + 多任务头”的结构。以下是一个典型的推理流程伪代码,展示了从图像到决策的调用顺序:

# 输入:当前帧 img_t,上一帧 img_t-1
feat = backbone(img_t)                 # 共享特征
boxes = detect_head(feat)              # 障碍物检测
depth = depth_head(feat)               # 深度估计
mask  = seg_head(feat)                 # 语义分割
flow  = flow_head(img_t, img_t-1)      # 光流估计

# 融合:将深度投影到鸟瞰图,结合语义生成代价地图
costmap = build_costmap(depth, mask, boxes)
ttc = compute_ttc(flow, depth)

# 决策:若 TTC 低于阈值或代价地图前方高代价,则输出避障指令
if ttc < TTC_SAFE or costmap.front > COST_LIMIT:
    cmd = planner.avoid(costmap, ttc)
else:
    cmd = planner.cruise()

实际工程中,深度估计和光流往往二选一或降频运行,以节省算力。例如在低速室内场景,深度估计足以支撑避障;而在高速前飞时,光流对运动变化的敏感度更高,可作为主要触发信号。

四、案例场景:走廊飞行中的多任务协同

假设无人机在一条有行人、纸箱和玻璃门的走廊中飞行。检测模块发现前方有“人”和“纸箱”两个目标;深度估计给出人的距离为 4 米、纸箱为 2.5 米;语义分割将玻璃门标记为“可穿越但需谨慎”,将墙壁标记为“禁飞”;光流显示纸箱在图像中快速膨胀,TTC 约为 1.2 秒。决策模块综合后输出:向左偏航 15 度并减速至 1 m/s,从纸箱左侧绕行,同时保持与行人的安全距离。

这个案例说明,单一任务无法支撑安全避障。只有检测没有深度,就不知道距离;只有深度没有语义,就可能把玻璃门当成墙而过度避让;只有语义没有光流,就难以判断动态目标的威胁程度。

工程建议:在项目初期就定义好各任务输出的坐标系、单位、时间戳和置信度格式,避免后期融合时出现“米/厘米”“相机系/机体系”混用的问题。

五、常见误区与复盘

  • 误区一:把检测当避障。检测框只说明“有东西”,不说明距离和可穿越性,直接用它做决策容易撞上透明或细小障碍。
  • 误区二:深度估计精度越高越好。避障更关注相对距离和趋势,绝对精度要求可适当放宽,但必须保证近处(0.5~5 米)的稳定性。
  • 误区三:忽略时间同步。光流依赖连续帧,若图像与 IMU 时间戳未对齐,运动估计会严重漂移。
  • 误区四:决策输出没有安全兜底。当所有感知置信度都低时,系统应默认悬停或减速,而不是继续按原速度飞行。
复盘要点:每次避障失败后,应按“检测是否漏检 → 深度是否偏差 → 语义是否误判 → 光流是否异常 → 决策阈值是否合理”的顺序逐级排查,定位到底是哪一类任务出了问题,而不是笼统地归因于“模型不行”。

总结来看,视觉避障的任务定义本质上是在构建一条从像素到动作的可靠映射链。障碍物检测回答“有没有”,深度估计回答“多远”,语义分割回答“是什么”,光流与运动估计回答“怎么动”,避障决策输出回答“怎么办”。五者各司其职又相互校验,共同构成无人机安全飞行的感知决策闭环。