4. 无人机视觉传感器与相机标定
在无人机视觉AI部署中,传感器选型与相机标定是决定后续算法上限的“地基”。Jetson平台算力再强,如果图像源头选错或标定不准,检测、测距、避障都会出现系统性偏差。本章围绕RGB相机、深度相机、红外相机的选型逻辑,以及内参标定、畸变校正与图像采集流程展开,帮助你把“看得见”变成“看得准”。
一、三类相机的核心差异与选型依据
无人机上常见的视觉传感器可分为三类:RGB相机负责纹理与颜色,是目标检测、语义分割的主力;深度相机(结构光、双目、ToF)直接输出距离信息,适合避障、三维重建与降落引导;红外相机(热成像)感知温度分布,用于夜间搜救、电力巡检与火点识别。选型时不能只看分辨率,而要同时考虑帧率、视场角、重量、功耗、接口带宽以及与Jetson的对接方式。
RGB相机通常通过MIPI CSI-2或USB接入Jetson,CSI带宽高、延迟低,适合高帧率推理;USB相机部署简单,但受总线带宽限制。深度相机中,双目依赖纹理,弱纹理场景易失效;结构光在强光下受干扰;ToF在远距离精度下降。红外相机分辨率普遍偏低,但温度灵敏度是关键指标。选型本质是“任务需求—环境约束—平台接口”三者的匹配。
二、内参标定的原理与实操
相机内参描述的是像素坐标与相机坐标之间的映射关系,核心是焦距(fx、fy)、主点(cx、cy)以及畸变系数(k1、k2、p1、p2、k3)。标定过程本质是求解这些参数,使三维空间点投影到图像上的位置与实际观测一致。常用方法是张正友标定法:用已知尺寸的棋盘格,从多个角度拍摄,提取角点,通过最小化重投影误差求解内参和畸变系数。
在Jetson上,可以用OpenCV完成标定。典型流程是:采集15~25张不同姿态的棋盘格图像,检测角点,调用cv2.calibrateCamera求解,再用cv2.undistort或cv2.initUndistortRectifyMap做校正。标定质量看重投影误差,一般要求小于0.3像素;若大于0.5像素,说明图像质量差、角点检测不准或姿态覆盖不足。
import cv2, numpy as np, glob
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((6*9, 3), np.float32)
objp[:, :2] = np.mgrid[0:9, 0:6].T.reshape(-1, 2)
objpoints, imgpoints = [], []
for f in glob.glob("calib/*.jpg"):
img = cv2.imread(f)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ok, corners = cv2.findChessboardCorners(gray, (9, 6), None)
if ok:
corners = cv2.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria)
objpoints.append(objp)
imgpoints.append(corners)
ret, K, D, rvecs, tvecs = cv2.calibrateCamera(
objpoints, imgpoints, gray.shape[::-1], None, None)
print("重投影误差:", ret)
print("内参 K:\n", K)
print("畸变 D:", D.ravel())
三、畸变校正与图像采集流程
无人机常用广角镜头,桶形畸变明显,边缘直线会弯曲。畸变校正分两步:先标定得到畸变系数,再对每帧图像做去畸变。实时场景中,推荐预先计算映射表,用cv2.remap做查找表映射,比每帧调用undistort更快。若使用CSI相机,可借助Jetson的硬件ISP或GStreamer插件完成部分校正,降低CPU占用。
图像采集流程要与推理节拍匹配。建议固定曝光和白平衡,避免自动模式导致帧间亮度跳变;为每帧打上时间戳,便于与IMU、飞控数据融合;采集线程与推理线程分离,用环形缓冲区避免丢帧。对于深度相机,还要注意深度图与RGB图的对齐(align),否则测距会错位。
四、选型对比与常见误区
| 维度 | RGB相机 | 深度相机 | 红外相机 |
|---|---|---|---|
| 主要输出 | 彩色图像 | 深度图 + RGB | 热成像灰度/伪彩 |
| 典型接口 | CSI-2 / USB | USB / GMSL | USB / SPI |
| 强光表现 | 好 | 结构光易受干扰 | 不受可见光影响 |
| 弱纹理表现 | 好 | 双目易失效 | 依赖温差 |
| 标定重点 | 内参 + 畸变 | 内参 + 深度对齐 | 内参 + 非均匀性 |
| 典型任务 | 检测、分割 | 避障、重建 | 搜救、巡检 |
常见误区有三个:一是只看分辨率不看帧率,导致推理端等图;二是标定用自动曝光,角点亮度不一致,误差偏大;三是深度相机不做RGB对齐,直接把深度值当目标距离,结果偏差几十厘米。复盘时建议记录标定时的温度、镜头型号和重投影误差,形成可追溯的标定档案。
getOptimalNewCameraMatrix的alpha参数:alpha=0保留全部像素但引入黑边,alpha=1裁掉黑边但丢失边缘信息,需按任务权衡。