1. 课程导入

无人机自主降落是飞行控制中风险最高、也最能体现感知—决策—控制闭环能力的环节。GPS 在室内、林下、城市峡谷或强电磁干扰环境中往往失效,气压计与 IMU 又会随时间漂移,仅靠惯性无法把降落误差收敛到厘米级。视觉定位提供了一条不依赖外部基础设施的解决路径:用机载相机观测地面合作标志,通过图像几何关系反解无人机相对标志的位置与姿态,再交给飞控完成精确对准与缓降。

本课程围绕 AprilTag 这一成熟、轻量、鲁棒的合作视觉标志展开,目标是让学习者能够独立完成从相机标定、标签检测、位姿解算、坐标变换,到与 PX4/ArduPilot 飞控联调、最终实现自动降落的完整链路。学完本课程,你应当能够回答三个问题:无人机现在相对降落点在哪里?它正以什么姿态接近?如何把视觉结果安全地变成飞控能执行的指令?

本课程的核心主线:相机成像 → AprilTag 检测 → 位姿解算 → 坐标系对齐 → 飞控控制 → 降落判定。任何一环的误差都会在最后几厘米被放大,因此每一环都要可观测、可验证、可复现。

为什么选择 AprilTag 作为视觉定位标志

AprilTag 是一种基于二维条形码思想的基准标志系统,由密歇根大学 APRIL 实验室提出。它由黑色边框和内部二进制编码构成,检测算法利用四边形边缘拟合与编码校验,能在低分辨率、运动模糊、部分遮挡和倾斜视角下稳定识别。相比 ArUco,AprilTag 的家族设计(Tag36h11、Tag25h9、Tag16h45 等)在误检率与识别距离之间提供了更清晰的取舍;相比二维码,它不依赖纠错冗余,解码更快,更适合实时闭环。

对无人机降落而言,AprilTag 的价值在于三点:其一,单目即可解算 6DoF 位姿,硬件成本低;其二,标签 ID 唯一,可支持多降落点切换与编队降落;其三,尺寸已知,可直接把像素尺度换算为米制尺度,便于与飞控的 NED/ENU 坐标对接。

课程知识框架

课程按“感知—解算—控制—验证”四层递进组织,共 30 章。前段打基础,中段做实现,后段做系统集成与实战复盘。

模块 核心内容 关键产出
视觉基础 针孔模型、内参、畸变、标定 可用相机内参与去畸变图像
标签检测 边缘拟合、编码校验、ID 解析 稳定输出的角点像素坐标
位姿解算 PnP、IPPE、重投影误差 相机系下的 R、t
坐标变换 相机—机体—世界坐标对齐 飞控可用的位置与偏航
控制与降落 位置环、速度限幅、降落状态机 自动对准与缓降逻辑
仿真与实飞 Gazebo、真机调参、故障复盘 可复现的降落实验报告

核心原理一图看懂

下图给出本课程最关键的信号链:从相机成像到飞控执行,每一级都标注了实际使用的对象与参数。请把它当作整门课的“地图”,后续章节会逐段展开。

AprilTag 视觉定位与自动降落信号链 地面 AprilTag Tag36h11 边长 0.16 m 机载相机 内参 fx fy cx cy 去畸变图像 标签检测 四角点像素坐标 ID 与置信度 位姿解算 solvePnP / IPPE R、t 与重投影误差 飞控执行 位置/速度指令 降落状态机 坐标变换:相机系 → 机体系 → 世界系 R_cam2body、R_body2world、偏航对齐 输出:相对降落点的 x、y、z 与 yaw 控制与降落判定 水平误差 < 0.15 m,下降速度 ≤ 0.3 m/s 关键可观测指标 • 重投影误差 < 1.5 px • 检测帧率 ≥ 20 FPS • 位姿延迟 < 80 ms • 标签像素边长 > 40 px • 水平误差收敛曲线 • 降落触地判定标志

方法流程:从一帧图像到一条降落指令

为了让抽象链路可落地,下面给出最小可运行的处理流程。它既是课程实验的骨架,也是你调试时的检查顺序。

  1. 采集:相机以固定分辨率与曝光采集图像,避免运动模糊导致角点漂移。
  2. 去畸变:用标定得到的内参与畸变系数校正图像,保证像素与角度关系正确。
  3. 检测:在灰度图上做自适应阈值、边缘拟合与编码校验,输出标签 ID 与四角点。
  4. 解算:以标签物理边长为已知量,调用 PnP 求相机系下的旋转与平移。
  5. 变换:按相机安装角把结果转到机体系,再转到世界系,得到相对降落点偏差。
  6. 控制:将偏差送入位置环,限幅后输出速度或位置设定值,进入降落状态机。
  7. 判定:当水平误差与下降速度同时满足阈值,且触地检测触发,结束降落。
# 典型检测与解算参数(示例)
tag_family   = "tag36h11"
tag_size     = 0.16          # 米
camera_matrix = [[620.3, 0, 320.1],
                 [0, 619.8, 240.5],
                 [0, 0, 1]]
dist_coeffs  = [-0.31, 0.12, 0.001, -0.002, 0.0]
detect_quad_decimate = 2.0   # 远距离可增大以提速
reproj_err_threshold = 1.5   # 像素

案例与场景

设想一个典型任务:无人机在室外起飞,飞至 8 米高度后收到“返航降落”指令,此时 GPS 被干扰,只能依靠下视相机寻找地面 0.16 米边长的 Tag36h11 标签。初始时标签在画面中仅约 30 像素,检测不稳定;随着无人机下降,标签逐渐增大到 120 像素以上,位姿解算精度显著提升。控制器先做水平对准,把标签中心拉到画面主点附近,再以 0.3 m/s 缓降;当高度低于 0.5 米时切换为垂直下降,最终触地。

这个场景揭示了两个工程事实:第一,视觉精度随距离变化,远距离时不要急于相信位姿,应结合滤波与限幅;第二,降落是状态切换问题,不是单一控制问题,必须设计清晰的进入与退出条件。

建议在仿真中先固定标签位置,只让无人机做水平对准,观察误差收敛曲线;确认稳定后再加入下降与触地判定。分阶段验证比一次性联调更容易定位问题。

常见误区与复盘要点

  • 误区一:忽略相机标定。 用出厂参数直接解算,会导致远距离系统性偏差,降落点整体偏移。
  • 误区二:混淆坐标系。 相机光轴、机体前向、世界北向三者不一致,是“越飞越偏”的最常见原因。
  • 误区三:只看检测成功,不看重投影误差。 误检标签会产生跳变位姿,必须用误差阈值与连续性校验过滤。
  • 误区四:下降速度过快。 低空时视觉更新延迟被放大,容易触发触地误判或硬着陆。
安全提示:所有实飞实验必须设置手动接管开关与最低高度保护。视觉定位失效时,飞控应能自动悬停或执行预设的保守降落策略,而不是继续盲降。

本课程后续将沿着上面这张信号链逐段深入:先解决“看得见、算得准”,再解决“对得齐、降得稳”。当你能够独立复现整条链路,并用数据证明每一级的误差都在可控范围内,你就真正掌握了无人机视觉定位与降落的核心能力。