从避障到实时建图:机器学习如何让无人机更智能、更安全、更实用(附微型机载演示示例)

95 阅读6分钟

过去的无人机只是个飞行相机,如今它已成为一台飞行计算机。微型模型运行在微型芯片上,曾经只能传输视频的四轴飞行器摇身一变,成为现场助手:检测裂缝、统计作物、寻找失踪徒步者。说实话——"AI无人机"已不再是炒作,它已成为一套成熟的技术栈。

screenshot_2025-09-24_15-49-46.png

无人机"智能"的真正内涵

智能源于三个协同工作的循环:

  • 感知: 观察并分割世界(识别物体、地形、天气)。
  • 决策: 在约束条件下规划路径或选择行动。
  • 控制: 平稳执行动作,并在环境变化时进行恢复。

当然,你可以借助云端辅助。但关键部分必须在边缘设备上运行——那里的延迟是以电机转动周期来衡量的,而不是5G网络上的毫秒级延迟。

机载AI工具箱

  • 视觉模型(看清关键信息)
  • 目标检测(如人、车辆、塔架): 用于巡检和搜救。
  • 语义分割(如作物与杂草、屋顶与天窗): 用于精准作业。
  • 立体/单目深度估计: 用于避障和安全着陆。
  • 状态估计(知晓自身位置)
  • 视觉惯性里程计: 融合摄像头和IMU数据,在GPS信号不佳时估计位姿。
  • 即时定位与地图构建: 在飞行中实时建图,适用于室内或林冠下环境。
  • 规划与控制(决定如何行动)
  • 模型预测控制: 考虑动力学和电池约束。
  • 基于采样的规划器: 适用于复杂场景。
  • 学习辅助导航: 加速局部避障的策略。
  • 优化技巧(实现高效部署)
  • 量化与剪枝: 将模型压缩到低功耗SOC上。
  • 利用GPU/NPU加速
  • 感兴趣区域处理: 避免对每一帧都运行大模型。

在30帧/秒的帧率下,每帧有33毫秒处理时间。减去解码(4毫秒)、前后处理(6毫秒)、规划器周期(5毫秒)和控制(3毫秒)后,留给推理的时间仅剩约15毫秒。这个约束才是真正的产品经理。

智能无人机的应用领域(及回报)

  • 基础设施巡检: 模型标记腐蚀或缺失的紧固件,使人只需审查发现的问题,而非数小时的录像。某电力公司在将检测任务移至机载并仅流式传输"事件"后,输电塔的审查时间减少了约60%。
  • 精准农业: 分割模型绘制植物胁迫图;轻量级规划器实时调整喷洒速率,减少投入和漂移。
  • 搜索与救援: 热成像与可见光融合在黄昏时检测人体形状,并引导无人机执行能绕开风扰的"阶梯"搜索模式。首次接触时间至关重要。

技术栈如何协同工作

[ 传感器 ]         [ 机载计算 ]                     [ 地面站/云端 ]
摄像头/热成像/IMU --> 预处理 ---> 微型检测/分割模型 ----> 事件缓冲器 ----> 遥测/任务同步
|                           |                         ^
|                           v                         |
+--> VIO/SLAM <----- 局部规划器 <----- MPC控制器  +  
|       ^                                
v       |                             
安全规则/电子围栏

经验法则:只传输有用的信息(事件、裁剪图像、警报)。其他一切数据都保留在无人机上。

微型演示:机载检测循环(Python)

这是一个使用 OpenCV + ONNX Runtime 在边缘设备上运行量化检测器的简易示例(适用于Jetson, RPi 5, 迷你PC)。这不是生产代码,旨在展示核心循环。


# pip install onnxruntime opencv-python numpy
import cv2, numpy as np, onnxruntime as ort
from time import time
# 加载量化模型 (此类模型可在Coovally平台训练并优化导出)
sess = ort.InferenceSession("model-yolov5n-int8.onnx",
                            providers=["CPUExecutionProvider"])
cap = cv2.VideoCapture(0)  # 摄像头流
input_name = sess.get_inputs()[0].name
def preprocess(img, size=320):
    """图像预处理:调整大小、填充、归一化、转换通道"""
    h, w = img.shape[:2]
    scale = size / max(h, w)
    resized = cv2.resize(img, (int(w*scale), int(h*scale)))
    pad = np.full((size, size, 3), 114, dtype=np.uint8)
    pad[:resized.shape[0], :resized.shape[1]] = resized
    blob = pad[:, :, ::-1].transpose(2,0,1) / 255.0
    return np.expand_dims(blob.astype(np.float32), 0), scale
# 主循环
while True:
    ok, frame = cap.read()
    if not ok: break
    blob, scale = preprocess(frame, 320)
    t0 = time()
    # 执行推理 [N, 6]: x,y,w,h,score,class
    preds = sess.run(None, {input_name: blob})[0][0]
    inference_time_ms = (time() - t0) * 1000
    # 解析并绘制检测结果
    for x, y, w, h, score, class_id in preds:
        if score < 0.35: continue  # 置信度阈值
        # 将坐标缩放回原图尺寸
        x, y, w, h = (np.array([x, y, w, h]) / scale).astype(int)
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0,255,0), 2)
        cv2.putText(frame, f"{int(class_id)}:{score:.2f}", (x, y-6),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)
    # 显示推理时间
    cv2.putText(frame, f"{inference_time_ms:.1f} ms", (10, 25),
                cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 2)
    cv2.imshow("edge-detector", frame)
    if cv2.waitKey(1) == 27: break  # 按ESC退出
cap.release()
cv2.destroyAllWindows()

意义所在:即使这个简易循环也展示了约束下的协调芭蕾——调整大小、推理、绘制、循环——无需将原始视频流发送到云端。

安全第一:更智能 ≠ 更危险

  • 将硬性电子围栏内置于规划器中,而不仅仅是飞行员APP。
  • 检测到禁行类别(如人/车辆)默认触发悬停+警报行为。
  • 可解释的警报:存储检测目标周围的图像块,以便人工快速验证。
  • 故障恢复模式:如果感知置信度低于阈值,则回退到保守行为(减速、着陆、返航)。

你可能会想:"为什么不在云端处理所有事情?" 因为物理规律。链路会中断,风会骤起。在20米高空,唯一重要的服务等级协议是你在没有网络时也能遵守的那个。

无法忽视的权衡

  • 电池预算 vs 计算预算: 每增加一算力单位都会减少飞行时间。量化是你的朋友。
  • 模型大小 vs 召回率: 漏检一个人比误检更糟糕——需根据任务调整阈值。
  • 数据漂移: 季节、光照角度、镜头都会变化。应将模型再训练像设备维护一样定期进行。

未来总结

基于多传感器数据训练的基础模型式航空模型,实现鲁棒的全天候感知。

协作蜂群,无人机间共享稀疏特征而非视频——带宽需求低,地图信息丰富。

通过小样本适配器实现机载学习,使模型能针对特定田野、屋顶类型或森林进行个性化。

智能无人机并非魔术,而是管道工程。感知压缩现实,规划决定行动,控制顶风履约。当这些循环在边缘端运行——云端只起辅助作用时——你得到的是更快、更安全、且无疑更有用的系统。