4. 视觉传感器建模与仿真

在飞控视觉HIL仿真中,视觉传感器建模决定了仿真图像能否真实反映真实相机在无人机上的成像行为。如果只把相机当作“输出一张图片的黑盒”,位姿估计、视觉惯性里程计、目标检测等算法的验证结果就会与实机差距很大。本节围绕五个关键环节展开:内参、外参、畸变、渲染管线、帧率与曝光,并给出典型工具的选择依据。

一、内参与外参:把三维点映射到像素

相机内参描述镜头与像面的几何关系,常用针孔模型表示为焦距 fx, fy、主点 cx, cy,以及可选的倾斜因子 s。其投影关系为:

u = fx * (Xc / Zc) + cx
v = fy * (Yc / Zc) + cy

其中 (Xc, Yc, Zc) 是相机坐标系下的点。相机坐标系约定为:Z 轴沿光轴向前,X 轴向右,Y 轴向下,符合 OpenCV 习惯。内参矩阵 K 写作:

K = [ fx   s  cx
       0  fy  cy
       0   0   1 ]

教学示例中,一台 1/2.3 英寸传感器、分辨率 1280×720、水平视场角约 70° 的相机,可估算 fx ≈ 640 / tan(35°) ≈ 914,若像元为方形则 fy ≈ 914,主点取图像中心 cx = 640, cy = 360。这些数值属于示例假设,实际应以标定结果为准。

外参描述相机相对无人机机体或世界坐标系的位姿,由旋转矩阵 R 和平移向量 t 组成。在 HIL 中,外参通常由飞控输出的机体位姿与相机安装矩阵共同决定。若相机相对机体有 15° 下倾安装角,则外参中的 R 必须包含该俯仰分量,否则仿真图像的地平线位置会与真实飞行不一致。内参决定“投影形状”,外参决定“看哪里”,两者缺一不可。

二、畸变模型:径向与切向修正

真实镜头存在径向畸变和切向畸变。OpenCV 常用 k1, k2, p1, p2, k3 五个系数描述。归一化坐标 (x, y) 先做畸变:

r² = x² + y²
x_dist = x(1 + k1r² + k2r⁴ + k3r⁶) + 2p1xy + p2(r² + 2x²)
y_dist = y(1 + k1r² + k2r⁴ + k3r⁶) + p1(r² + 2y²) + 2p2xy

然后乘以内参得到像素坐标。仿真中有两种用法:一是“加畸变”,把理想渲染图像按畸变模型重采样,模拟真实相机输出;二是“去畸变”,对输入图像先校正再送入算法。HIL 中若算法在实机上使用去畸变图像,仿真也应保持同一处理链,否则特征点位置分布会不同。鱼眼相机则需改用等距或等立体角模型,不能直接套用上述多项式。

视觉传感器仿真信号链与关键参数 世界/机体位姿 位置 + 姿态 飞控 HIL 输出 外参 R, t 安装位置 俯仰/偏航角 图像渲染管线 场景几何 + 纹理 光照 + 深度 内参 K + 畸变 fx, fy, cx, cy k1,k2,p1,p2,k3 仿真图像帧 RGB / 灰度 帧率与曝光模拟 曝光时间 / 运动模糊 / 时间戳对齐 视觉算法 VIO / 检测 / 跟踪 关键参数对仿真结果的影响 内参偏差 焦距偏大 → 视场变窄 主点偏移 → 投影中心错位 影响:深度估计尺度 外参偏差 俯仰角误差 → 地平线偏移 安装平移 → 视差变化 影响:VIO 一致性 畸变系数 k1 过大 → 边缘拉伸 切向项 → 图像倾斜 影响:特征点匹配 帧率与曝光 低帧率 → 跟踪丢失 长曝光 → 运动模糊 影响:时间同步精度

三、图像渲染管线:从场景到像素

仿真渲染管线一般包含场景图更新、几何变换、光栅化、着色、后处理五个阶段。在 HIL 中,场景图由无人机位姿驱动,几何变换把世界坐标点送入相机坐标系,光栅化生成深度与颜色缓冲,着色阶段叠加材质与光照,后处理再叠加畸变、噪声、运动模糊。若使用游戏引擎,通常通过相机组件设置 FOV、近远裁剪面和分辨率;若使用 Gazebo 或 AirSim,则通过传感器插件绑定相机模型。

需要特别注意的是渲染分辨率与算法输入分辨率的关系。若渲染为 1920×1080,而算法输入为 640×360,则需在管线中做缩放,缩放会改变等效内参。正确做法是:要么直接按算法分辨率渲染,要么在缩放后同步调整 fx, fy, cx, cy,否则投影关系会失配。

四、帧率与曝光模拟

帧率决定图像的时间采样间隔。若仿真步长为 1 ms,而相机帧率为 30 Hz,则每 33.3 ms 输出一帧,中间帧需保持或插值。曝光时间模拟则影响运动模糊:曝光时间越长,高速旋转或前飞时图像拖影越明显。教学示例中,若无人机以 5 m/s 前飞、曝光 10 ms,则单帧内位移约 5 cm,在 1 m 距离处对应约 0.05 rad 的角位移,足以造成明显模糊。仿真中可通过在曝光窗口内对多个子帧做平均来近似。

时间戳对齐同样关键。相机帧时间戳应取曝光中点,并与 IMU 时间戳统一到同一时钟源。若两者相差 5 ms,在 1 rad/s 角速度下会产生约 0.005 rad 的姿态误差,对 VIO 初始化影响不可忽略。

五、典型视觉仿真工具对比

工具渲染能力传感器模型适用场景
Gazebo + 相机插件基础光栅化,光照简单针孔+畸变可配快速验证、教学
AirSim / Unreal高保真光照与材质支持畸变、深度、语义感知算法、数据集生成
Unity + Perception高质量实时渲染可编程相机模型定制化 HIL、域随机化
Matlab/Simulink 3D中等,偏几何针孔模型为主控制回路联合仿真

选择时先看算法需要什么:若只验证几何投影,Gazebo 足够;若需要真实纹理和光照以训练检测网络,应选 AirSim 或 Unity;若要与 Simulink 飞控模型紧耦合,Matlab 3D 更省集成成本。无论选哪种,内参、外参、畸变、帧率、曝光五项参数都应在配置文件中显式记录,并与实机标定值保持一致,才能让 HIL 结果具备参考价值。

建议在仿真配置中固定一份“相机参数卡”,包含分辨率、fx、fy、cx、cy、畸变系数、帧率、曝光时间、安装角,每次实验前核对,避免因参数漂移导致算法表现忽好忽坏。