3. AI识别结果概述

在PX4飞控与AI视觉联动系统中,AI识别结果并非抽象的“感知结论”,而是一组具有明确数据结构、坐标系定义和置信度语义的数值输出。这些输出将直接决定飞控系统是否切换模式(如从定点悬停切换至目标跟踪)、是否触发安全动作(如紧急降落或返航),以及如何生成期望速度指令。因此,理解AI视觉任务的输出格式及其在无人机场景中的映射关系,是构建可靠联动逻辑的第一道门槛。本章将系统梳理目标检测、图像分类、实例分割与语义分割四大类任务的输出规范,并结合PX4联动场景给出典型应用范式。

AI视觉任务输出 → 飞控联动映射关系 机载相机图像 640×480 / 1280×720 目标检测 边界框 + 类别 + 置信度 图像分类 全局标签 + 置信度 实例分割 掩码 + 类别 + 置信度 语义分割 像素级类别标签 [x1,y1,x2,y2,cls,conf] 归一化或像素坐标 [cls_id, conf] 单标签或多标签 [mask, cls, conf] 二值掩码 + 类别 [H×W 类别索引] 逐像素分类 PX4模式切换 OFFBOARD / AUTO / RTL 安全动作触发 紧急降落 / 避障 / 失联保护 期望速度/位置指令 MAVLink SET_POSITION_TARGET 坐标需经相机内参/外参转换至机体坐标系或NED坐标系后,方可被PX4位置控制器使用

3.1 目标检测:边界框、类别与置信度的结构化输出

3.1.1 核心原理:从图像到结构化对象描述

目标检测(Object Detection)的任务是在图像中定位感兴趣的目标,并同时给出目标的类别标签和位置范围。其输出通常以边界框(Bounding Box)为核心载体,辅以类别ID和置信度分数。在无人机场景中,边界框的坐标表示方式有两种主流约定:像素坐标(以图像左上角为原点,单位像素)和归一化坐标(取值范围0~1,以图像宽高为基准)。PX4联动程序通常更倾向于归一化坐标,因为它不随图像分辨率变化而改变,便于在不同相机配置间迁移。

一个典型的目标检测输出结构如下:

// YOLO系列输出格式(归一化)
[center_x, center_y, width, height, class_id, confidence]

// 或COCO数据集常用格式(像素坐标)
[x_top_left, y_top_left, box_width, box_height, class_id, confidence]

// 实际MAVLink传输时,通常转换为:
// 目标在图像中的方位角(azimuth)和俯仰角(elevation)
// 以及目标尺寸占比(用于估算距离)

3.1.2 判断方法与操作流程:从检测框到飞控指令

在PX4联动中,目标检测结果不能直接用于飞控,必须经过一系列坐标变换和语义映射。标准处理流程如下:

  1. 置信度过滤:设定阈值(如0.5),低于阈值的检测框直接丢弃,避免误检触发错误动作。
  2. 坐标归一化:将像素坐标除以图像宽高,得到0~1范围的归一化坐标。
  3. 视场角映射:利用相机水平视场角(HFOV)和垂直视场角(VFOV),将归一化坐标转换为相对于相机光轴的方位角和俯仰角。
  4. 坐标系转换:结合云台角度(若云台可动)和机体姿态(四元数),将相机坐标系下的目标方位转换到机体坐标系(Body Frame)或NED导航坐标系。
  5. 生成期望指令:根据目标方位和尺寸,生成期望的机体角速度或速度指令,通过MAVLink的SET_POSITION_TARGET_LOCAL_NED消息发送给PX4。
关键参数示例:假设使用DJI XT2热成像相机,分辨率640×512,HFOV=57°,VFOV=43°。若检测到目标边界框中心在像素坐标(320, 256)处,归一化后为(0.5, 0.5),则方位角≈0°,俯仰角≈0°,即目标位于图像正中央。若中心在(480, 256),归一化为(0.75, 0.5),则方位角≈(0.75-0.5)×57°≈14.25°。

3.1.3 案例拆解:电力巡检中的绝缘子检测

场景背景:某电力巡检无人机需自动识别输电线路上的绝缘子缺陷。机载NVIDIA Jetson Xavier NX运行YOLOv5s模型,输入图像尺寸640×640,检测类别为“正常绝缘子”和“缺陷绝缘子”。

初始现象:无人机在距离绝缘子约15米处悬停,检测到缺陷绝缘子置信度0.82,边界框归一化坐标为(0.45, 0.38, 0.12, 0.15)(中心点x, 中心点y, 宽度, 高度)。

分析判断过程:

  • 置信度0.82 > 0.5阈值,判定为有效检测。
  • 目标中心偏离图像中心(0.5, 0.5),水平偏差-0.05,垂直偏差-0.12。
  • 目标尺寸占比约0.12×0.15=1.8%,结合已知绝缘子实际尺寸约0.5m,估算距离约15m,与悬停距离吻合。

实际操作步骤:

  1. 飞控程序读取检测结果,计算方位角偏差:水平角=-0.05×57°≈-2.85°,垂直角=-0.12×43°≈-5.16°。
  2. 生成速度指令:水平方向速度=Kp×(-2.85°),垂直方向速度=Kp×(-5.16°),Kp取0.5 m/s/°。
  3. 通过MAVLink发送速度指令,使无人机缓慢调整位置,将目标移至图像中心。
  4. 当目标中心与图像中心偏差小于0.02(约1°)时,触发拍照指令并记录GPS坐标。

结果对比:采用联动后,巡检效率提升40%,漏检率从人工飞行的12%降至3%。风险与代价:在强风环境下,速度环响应可能滞后,需增加PID前馈补偿;同时,检测模型在逆光场景下置信度下降至0.4以下,需增加图像增强预处理。

常见误区:直接将像素坐标作为飞控输入。像素坐标依赖图像分辨率,不同相机切换后需重新标定;且像素坐标未考虑相机畸变,广角镜头边缘误差可达数十像素。务必先进行畸变校正和归一化处理。

3.2 图像分类:全局标签与置信度在场景判断中的应用

3.2.1 核心原理:单帧图像的语义判断

图像分类(Image Classification)输出的是整张图像属于某个或某几个类别的概率分布。与目标检测不同,分类不提供目标的空间位置信息,只提供“这是什么场景”或“图像中是否存在某类目标”的全局判断。在无人机场景中,分类结果常用于场景切换(如从城市飞行切换至森林飞行)、安全状态判断(如检测到烟雾、火灾)或飞行区域合法性判断(如检测到禁飞区标志)。

分类输出格式通常为:

// 单标签分类(Softmax输出)
[class_0_prob, class_1_prob, ..., class_N_prob]
// 取最大值对应的类别作为最终结果

// 多标签分类(Sigmoid输出)
[class_0_prob, class_1_prob, ..., class_N_prob]
// 每个类别独立判断,概率大于阈值则视为存在

3.2.2 判断方法与操作流程:分类结果如何驱动飞控逻辑

分类结果在PX4联动中通常作为状态机切换条件,而非连续控制信号。典型流程如下:

  1. 类别映射:将分类类别ID映射为飞控状态机的状态枚举值。例如,类别0=“正常飞行区域”,类别1=“禁飞区域”,类别2=“紧急降落区域”。
  2. 置信度平滑:为避免单帧误判,采用滑动窗口滤波,连续N帧(如5帧)分类结果一致才触发状态切换。
  3. 动作绑定:根据状态机定义,执行相应动作。例如,检测到“禁飞区域”时,自动切换至RTL(返航)模式;检测到“紧急降落区域”时,切换至LAND模式。
经验提醒:分类模型的置信度校准至关重要。实际部署中,Softmax输出的概率往往过于自信(如0.99),但实际准确率可能只有85%。建议使用温度缩放(Temperature Scaling)或基于验证集的置信度阈值调整,确保触发动作的置信度阈值与实际准确率匹配。

3.2.3 案例拆解:森林防火中的烟雾分类

场景背景:森林巡逻无人机需实时判断视野内是否出现烟雾,以便及时报警并切换至盘旋观察模式。采用MobileNetV3-Small模型,输入224×224图像,二分类输出:无烟雾/有烟雾。

初始现象:无人机在80米高度巡航,模型输出“有烟雾”概率0.78,“无烟雾”概率0.22。单帧结果未达0.9的切换阈值。

分析判断过程:连续采集5帧,概率分别为0.78, 0.82, 0.75, 0.85, 0.80,平均0.80,仍低于0.9阈值。但观察发现,烟雾区域在图像中持续存在且位置相对固定,而云朵的干扰通常位置漂移。进一步分析,模型对“有烟雾”的召回率在0.8阈值时为0.92,但误报率也达到0.15。

实际操作步骤:

  1. 将阈值从0.9下调至0.75,同时增加“烟雾区域稳定性”判断:连续10帧中,至少8帧分类为“有烟雾”且烟雾区域中心位置偏移小于图像宽度的10%。
  2. 当满足条件时,飞控切换至AUTO模式下的盘旋航线,同时通过数传发送报警信息。
  3. 若烟雾区域在图像中占比超过30%,则进一步降低飞行高度至50米,获取更清晰图像。

结果对比:调整后,误报率从0.15降至0.03,漏报率维持在0.05以内。复盘经验:分类模型在动态场景中,单帧判断不可靠,必须结合时间序列信息;同时,阈值设定需基于任务对误报和漏报的代价权衡——森林防火中漏报代价远高于误报,因此阈值应偏向于提高召回率。

3.3 实例分割与语义分割:像素级输出的精细化应用

3.3.1 核心原理:从“框”到“轮廓”的精度跃迁

实例分割(Instance Segmentation)同时输出每个目标的边界框、类别、置信度以及逐像素的掩码(Mask)。语义分割(Semantic Segmentation)则对图像中每个像素进行分类,输出与输入图像同尺寸的类别索引图。两者的核心区别在于:实例分割区分同一类别的不同个体(如两架不同的无人机),而语义分割将同一类别的所有像素视为整体(如所有“地面”像素)。

输出格式对比:

任务类型输出结构数据量典型模型无人机应用场景
实例分割每个实例:mask(H×W二值) + bbox + cls + conf大(每实例约H×W bit)Mask R-CNN, YOLOv8-seg精准避障(识别障碍物轮廓)、目标姿态估计
语义分割类别索引图(H×W),每个像素值为类别ID中(H×W×log2(N) bit)DeepLabV3+, UNet可通行区域检测、地形分类、着陆区选择

3.3.2 判断方法与操作流程:掩码数据如何转化为飞控指令

像素级输出在PX4联动中的处理逻辑与目标检测有本质不同:

  • 可通行区域检测:语义分割输出“地面/障碍物/水域”等类别,飞控将地面像素投影到地面平面,生成2D栅格地图,用于路径规划。
  • 精准着陆:实例分割识别着陆平台轮廓,计算掩码的几何中心(质心)和最小外接矩形,引导无人机对准着陆点。
  • 动态避障:对实例掩码进行膨胀处理(Dilation),生成安全距离缓冲区,将障碍物轮廓转换为速度障碍(Velocity Obstacle)约束。
// 实例分割掩码处理伪代码
mask = instance_segmentation(image)  // 二值掩码
contour = find_contours(mask)        // 提取轮廓
centroid = compute_centroid(contour) // 计算质心
distance = estimate_distance(mask_area, known_size) // 基于面积估算距离
// 将质心坐标转换为机体坐标系下的方位角
azimuth = (centroid.x / image_width - 0.5) * HFOV
elevation = (centroid.y / image_height - 0.5) * VFOV

3.3.3 案例拆解:精准农业中的作物行检测与跟踪

场景背景:农业植保无人机需沿作物行自动飞行喷洒农药。采用UNet语义分割模型,输入512×512图像,输出“作物行/土壤/杂草”三类分割图。

初始现象:无人机在3米高度飞行,分割结果显示作物行方向与当前航向偏差约8°。作物行中心线在图像中的位置为x=280像素(图像宽度512),即偏离图像中心24像素。

分析判断过程:

  • 作物行中心线偏移量24像素,对应方位角偏差=(280/512-0.5)×HFOV(约70°)=0.047×70°≈3.3°。
  • 但实际航向偏差8°,说明无人机不仅需要调整偏航角,还需要修正横向位置。
  • 分割结果中,土壤区域占比35%,杂草区域占比10%,作物行占比55%,表明作物生长密度正常。

实际操作步骤:

  1. 提取作物行掩码,使用霍夫变换或PCA主成分分析提取作物行方向角。
  2. 计算作物行中心线与图像垂直中线的横向偏差,生成横向速度指令:Vx = Kp × 偏差像素。
  3. 计算作物行方向与当前航向的夹角,生成偏航角速度指令:ω = Kd × 夹角。
  4. 将Vx和ω通过MAVLink发送至PX4,同时保持前向速度Vy=2m/s。
  5. 当横向偏差小于5像素且夹角小于1°时,认为已对准作物行,切换至全自主喷洒模式。

结果对比:采用分割引导后,喷洒重叠率从人工飞行的±15%降至±3%,农药节省22%。风险与代价:分割模型在强光照或阴影下性能下降,需在图像预处理中加入光照归一化;同时,分割计算量较大,Jetson Nano上推理速度约8FPS,需降低输入分辨率或使用TensorRT加速。

常见误区:将分割掩码直接作为避障地图使用。分割结果是图像平面上的像素分类,未考虑相机投影模型和深度信息。直接映射到3D空间会导致距离估计严重偏差。必须结合深度估计(如双目视觉或激光雷达)或假设地面平坦进行逆透视变换(IPM),才能生成可用于飞控的占据栅格地图。

3.4 输出格式与PX4数据接口的适配

3.4.1 核心原理:从AI输出到MAVLink消息的转换

PX4飞控本身不直接理解AI输出格式,需要通过MAVLink协议进行数据交互。常用的MAVLink消息包括:

MAVLink消息用途关键字段适用AI任务
SET_POSITION_TARGET_LOCAL_NED发送期望位置/速度/加速度type_mask, x/y/z, vx/vy/vz目标检测、实例分割
SET_ATTITUDE_TARGET发送期望姿态/角速度type_mask, q[4], body_yaw_rate目标检测(云台跟踪)
DISTANCE_SENSOR发送测距数据current_distance, orientation语义分割(距离估算)
VISION_POSITION_ESTIMATE发送视觉定位结果x/y/z, roll/pitch/yaw语义分割(视觉里程计)
COMMAND_LONG发送模式切换指令command, param1/param2图像分类(场景判断)

3.4.2 判断方法与操作流程:数据适配的工程实践

在编写PX4联动程序时,需遵循以下步骤:

  1. 定义数据结构:在ROS2或MAVSDK中定义AI输出结构体,包含类别、置信度、坐标、掩码等字段。
  2. 坐标变换模块:实现相机坐标系→机体坐标系→NED坐标系的转换,需输入相机安装角度、云台角度、IMU姿态四元数。
  3. 时间同步:AI推理耗时(如50ms)与飞控控制周期(如10ms)不同步,需使用时间戳对齐,或采用预测补偿。
  4. 安全冗余:当AI输出异常(如置信度持续低于阈值、检测框数量突变)时,应触发安全模式,如悬停或返航。
工程实践要点:在PX4的Offboard模式下,飞控完全信任外部指令。因此,AI联动程序必须实现看门狗机制——若AI程序崩溃或通信中断超过500ms,应自动切换至Hold模式或RTL模式,防止无人机失控。

3.4.3 案例拆解:多任务融合的复杂场景

场景背景:城市安防无人机需同时执行目标检测(识别可疑人员)、语义分割(判断可通行道路)和图像分类(判断区域安全等级)。三个模型并行运行在Jetson Orin NX上。

初始现象:目标检测发现一名可疑人员(置信度0.88),语义分割显示其位于道路区域,图像分类判定当前区域安全等级为“中等风险”。

分析判断过程:

  • 可疑人员边界框中心在图像(400, 300),归一化(0.625, 0.469),对应方位角约7.1°,俯仰角约-1.3°。
  • 语义分割显示该像素属于“道路”类别,说明人员位于可通行区域,无人机可低空跟踪。
  • 安全等级“中等风险”意味着需保持至少10米距离,不能过于接近。

实际操作步骤:

  1. 飞控程序综合三个模型输出,生成跟踪指令:期望位置为目标前方10米、高度5米处。
  2. 同时,语义分割结果用于实时避障——若前方道路被障碍物阻断,则自动规划绕行路径。
  3. 图像分类结果作为状态机条件:若安全等级变为“高风险”,则自动切换至RTL模式并报警。

结果对比:多任务融合后,无人机能在复杂城市环境中稳定跟踪目标,误跟率从单一目标检测的18%降至5%。复盘经验:多模型融合时,需定义清晰的优先级——安全相关任务(避障)优先级最高,其次是任务相关(目标跟踪),最后是辅助判断(场景分类)。

经验提醒:在PX4联动中,AI输出的“置信度”不应仅作为过滤阈值,还应作为控制增益的调节因子。例如,当目标检测置信度从0.9降至0.6时,应降低跟踪速度增益,避免在低置信度下产生激进控制动作。

3.5 常见误区与总结复盘

3.5.1 误区清单

  • 误区一:忽略相机畸变。未对图像进行畸变校正,导致边界框坐标在图像边缘产生非线性偏移,进而引起目标方位角计算错误。
  • 误区二:混淆坐标系。将图像坐标系下的像素坐标直接当作机体坐标系下的方位角,未考虑相机安装角度和云台角度。
  • 误区三:单帧决策。仅依赖单帧AI输出触发飞控动作,未进行时间滤波,导致误检引发误动作。
  • 误区四:忽略推理延迟。AI推理耗时50ms,而飞控控制周期10ms,未进行延迟补偿,导致控制滞后。
  • 误区五:置信度阈值固定。在不同光照、天气条件下,模型置信度分布变化显著,固定阈值导致漏检或误报。

3.5.2 总结复盘

AI识别结果到PX4飞控的联动,本质上是将感知数据转换为可执行的控制指令。这一过程涉及三个关键层次:数据层(输出格式解析与标准化)、语义层(类别与场景的语义映射)、控制层(坐标变换与指令生成)。在实际工程中,建议采用模块化设计,将AI输出解析、坐标变换、安全监控、指令生成分离为独立模块,便于调试和替换。同时,务必建立完善的日志系统,记录每一帧的AI输出、坐标变换结果和飞控指令,以便事后分析和故障排查。

安全提示:任何AI联动功能在首次部署时,必须在仿真环境(如Gazebo + PX4 SITL)中充分验证,并设置“AI失效保护”——当AI输出异常或通信中断时,自动切换至安全模式。切勿在未经验证的情况下直接进行真机测试。