3.4.1 相机标定与外参估计
机器人要「看得懂世界」,第一步就是让相机的像素坐标与真实世界的几何量建立严格对应关系。这件事在工程上拆成三块:相机内参标定 、外参(姿态)估计,以及对于机载相机尤为关键的** 手眼标定**。
[图 3.4-1:相机坐标系、机器人基座坐标系、末端坐标系以及标定板坐标系的相对位置示意图]
3.4.1.1 相机内参标定
1)内参是什么,为什么要标定?
在 3.3 中已经介绍了针孔相机模型,这里从工程角度再做一次简要回顾。理想情况下,3D 点在相机坐标系 \(\displaystyle (X, Y, Z)\) 下投影到图像平面 \(\displaystyle (u, v)\) 的关系可写为:
\[ s \begin{bmatrix} u \ v \ 1 \end{bmatrix} = \mathbf{K} \begin{bmatrix} \frac{X}{Z} \ \frac{Y}{Z} \ 1 \end{bmatrix}, \quad \mathbf{K} = \begin{bmatrix} f_x & 0 & c_x\ 0 & f_y & c_y\ 0 & 0 & 1 \end{bmatrix} \]
这里的 \(\mathbf{K}\) 就是相机内参矩阵:\((f_x, f_y)\) 是横纵向焦距(以像素为单位),\((c_x, c_y)\) 是主点坐标。实际镜头还会引入径向、切向畸变,需要用若干畸变系数 \(k_1, k_2, p_1, p_2, \dots\) 建模。(cs280-berkeley.github.io)
对机器人而言,内参的作用很直接:
- 将像素单位(px)转换成角度和长度的约束;
- 为后续外参估计、PnP 位姿求解、三角测量提供基础;
- 畸变校正后,几何关系才严格满足针孔模型假设。
2)典型标定方法(以棋盘格 + Zhang 方法为例)
在工程实践中,使用平面棋盘格进行标定是最常见的方案。Zhang 提出的平面标定方法只需要在不同姿态下拍摄若干张棋盘格图像,即可同时估计内参和畸变,被广泛集成到 OpenCV、ROS 等工具中。(ResearchGate)
核心流程可以概括为:
- 准备标定板
- 一块已知尺寸的棋盘格或圆点格(例如 8×6 内角点,每个格子 25 mm)。
- 在标定程序中配置每个格子的真实尺寸。
- 采集多视角图像
- 将棋盘格在相机视野中以不同距离和姿态摆放:近、远;左、右;倾斜、旋转等。
- 要让角点尽量覆盖整个图像平面,以便估计畸变和主点位置。
- 一般建议采集 10–20 张以上有代表性的图像。
- 角点检测与匹配
- 使用亚像素精度角点检测(如 OpenCV
findChessboardCorners与cornerSubPix)提取每张图像的角点坐标。 - 将角点与平面标定板上的 3D 点坐标建立对应(Z=0 的平面)。
- 使用亚像素精度角点检测(如 OpenCV
- 线性求解 + 非线性优化
- 先通过线性方法估计一个初始内参矩阵与畸变参数;
- 再使用非线性最小二乘(如 Levenberg–Marquardt)优化全部参数,最小化所有图像上角点的重投影误差。
- 评估与保存结果
- 查看重投影误差的均值与方差(通常 RMS 在 0.1–0.5 像素级即相当不错);
- 将内参、畸变系数存入配置文件或 ROS 参数服务器,供后续去畸变和三角测量使用。
[图 3.4-2:棋盘格标定过程示意,包括多视角图像、角点检测结果和重投影误差可视化]
3)工程实践中的细节与坑
- 曝光与清晰度:图像过曝或模糊会严重影响角点检测质量;建议使用自动曝光锁定或手动曝光。
- 温度与变焦:变焦镜头在调整焦距/对焦后,内参会明显变化;部分工业相机在温度变化较大时内参也会轻微漂移。需要在最终使用配置(焦距、对焦、安装姿态)下完成标定。(MDPI)
- 分辨率变化:若相机分辨率配置改变(例如从 1920×1080 改为 1280×720),内参需要按比例缩放或重新标定。
- RAW vs ISP 输出:若直接在 RAW 域上做几何感知,内参应针对 RAW 分辨率标定;若使用 ISP 后的裁剪/缩放输出,则必须在最终输出分辨率下标定。
3.4.1.2 外参(相机姿态)估计
1)外参的定义
相机外参描述的是相机坐标系 相对于某个参考坐标系(例如世界坐标系、机器人基座坐标系)的位姿,即旋转矩阵 \(\mathbf{R}\) 与平移向量 \(\mathbf{t}\)。通常用一个齐次变换写成:
\[ \mathbf{T}_{\text{world}}^{\text{cam}} = \begin{bmatrix} \mathbf{R} & \mathbf{t}\ 0 & 1 \end{bmatrix} \]
有了外参,就可以把图像中的点反投影到世界或机器人坐标系,从而实现「看见桌面上的目标 → 指挥机械臂去抓」。(cs280-berkeley.github.io)
2)基于 PnP 的外参求解
在内参已知的情况下,如果我们知道一组 3D 点在世界坐标系中的位置 \({\mathbf{X}_i}\),以及这些点在图像中的像素坐标 \({\mathbf{u}_i}\),就可以通过位姿估计(PnP,Perspective-n-Point) 求解相机姿态。 典型工程流程:
- 在世界中固定一个带已知几何结构的标定物体(棋盘格、ArUco 标志板、定制标定架等);
- 记录该标定物体在世界坐标系中的 3D 坐标;
- 拍摄标定物体,提取图像上的角点或标志点像素坐标;
- 使用如 OpenCV
solvePnP之类的算法求解 \(\mathbf{R}, \mathbf{t}\)。
为了提高鲁棒性,常见做法是采集多张图像,对每张求得的位姿进行非线性联合优化(bundle adjustment),从而减小噪声影响。
3)固定相机的标定策略
对于安装在环境中的固定相机(如俯视桌面的顶置相机),一般做法是:
- 在机械臂可达区域内放置标定板或精密标记;
- 使用测量工具确定标定板在机器人基座坐标系中的精确位置;
- 拍摄多张标定板图像,通过 PnP 估计 \(\mathbf{T}_{\text{world}}^{\text{cam}}\);
- 将世界坐标系选为机器人基座坐标系,则可直接得到 \(\mathbf{T}_{\text{base}}^{\text{cam}}\)。
这样,后续任何在图像中检测到的 3D 点或平面,都可以转换到机器人基座下,用于规划运动。
3.4.1.3 手眼标定
1)Eye-in-hand vs Eye-to-hand
- Eye-in-hand(手眼相机):相机安装在机械臂末端或接近末端的位置,随着机械臂一起运动。
- Eye-to-hand(外部相机):相机固定在环境中,从外部观察机器人和工作区。(Department of Computer Science)
手眼标定要解决的问题是:
已知机器人末端在机器人基座坐标系下的位姿、以及相机看到的标定物体在相机坐标系下的位姿,求相机与末端之间的刚体变换。
简单说,就是求出「相机相对于机械臂手的精确位置和朝向」。
2)AX = XB 形式化
经典手眼标定可写成矩阵方程:
\[ \mathbf{A}_i \mathbf{X} = \mathbf{X} \mathbf{B}_i \]
其中:
- \(\mathbf{A}_i\):机械臂从姿态 \(\displaystyle i\) 到姿态 \(\displaystyle j\) 的运动(末端在基座坐标系下的相对变换);
- \(\mathbf{B}_i\):相机从姿态 \(\displaystyle i\) 到姿态 \(\displaystyle j\) 的运动(标定物体在相机坐标系下位姿的相对变换);
- \(\mathbf{X}\):我们要寻找的「手到眼」刚体变换(相机相对于末端的位姿)。(IARJSET)
通过采集多组不同姿态的 \(\mathbf{A}_i, \mathbf{B}_i\) 对,便可用线性方法求得一个初始解,再用非线性优化细化。
[图 3.4-3:Eye-in-hand 几何关系示意图,显示基座、末端、相机、标定板四个坐标系,以及 AX = XB 中各矩阵对应的运动箭头]
3)数据采集与求解流程
- 固定一个标定板或标志(如带 ArUco 的平面板)在世界中不动;
- 控制机械臂末端携带相机,绕标定板做多次不同姿态的运动(尽量覆盖不同位置和朝向);
- 记录每个姿态下:
- 机械臂末端相对于基座的位姿 \(\mathbf{T}_{\text{base}}^{\text{ee}}\);
- 标定板相对于相机的位姿 \(\mathbf{T}_{\text{cam}}^{\text{target}}\);
- 从这些姿态对构造 \(\mathbf{A}_i, \mathbf{B}_i\),求解 AX=XB 问题,得到 \(\mathbf{X} = \mathbf{T}_{\text{ee}}^{\text{cam}}\);
- 可进一步引入非线性最小二乘,最小化所有姿态下标定板重投影误差和几何误差。
4)误差评估与常见问题
- 重投影误差:将世界中已知的标定点,通过「基座 → 末端 → 相机」链路投到图像,再与真实像素位置比较,均方误差越小越好。
- 抓取精度测试:在桌面上放置若干已知位置的小目标,让机器人根据视觉估计去抓取,统计抓取位置误差和成功率。(develop.realman-robotics.com)
常见坑包括:
- 姿态采样不够丰富(都在一个平面附近),导致解病态;
- 相机或末端在采集中产生微小滑动,但未被模型考虑;
- 标定板精度不足或标记尺寸测量不准。
3.4.2 图像处理链路:从传感器到模型输入
本小节关注的是「从光子到张量」的工程过程:相机如何把光信号转成数字图像,图像又如何变成深度学习模型可以接受的张量。这条链路任何细节处理不当,都可能直接影响模型在机器人上的表现。
[图 3.4-4:典型数字相机 ISP + 深度学习预处理的流水线图:光学 → 传感器(RAW)→ ISP(demosaic/降噪/白平衡/gamma)→ RGB 图像 → 尺度调整/裁剪 → 归一化 → Tensor]
3.4.2.1 传感器输出
1)RAW 数据与 Bayer 阵列
大部分 CMOS 图像传感器本质上是单色传感器,前面覆盖了一个彩色滤波阵列(CFA),最常见的是 Bayer 模式(RGGB)。每个像素只测量 R、G 或 B 中的一种分量,输出的是一个 RAW 灰度图像,但每个像素有不同颜色含义。(e-con Systems)
RAW 域通常具有以下特点:
- 响应近似线性(曝光强度与数值基本成正比);
- 动态范围大,但包含噪声、坏点等;
- 尚未进行白平衡、降噪、锐化等处理。
2)ISP(Image Signal Processing)管线
在绝大多数工业/消费级相机中,RAW 数据会先进入 ISP,再输出常见的 RGB 或 YUV 图像。典型 ISP 包含:(ResearchGate)
- 黑电平校正、响应线性化;
- 白平衡(调整不同颜色通道增益);
- Demosaicing:从 Bayer CFA 重建完整的 RGB 像素;
- 降噪、去坏点、锐化;
- 颜色校正(传感器色域 → 标准 RGB 空间,如 sRGB);
- Gamma 矫正、对比度增强、色调映射等。
对于机器人视觉,有两种常见策略:
- 直接使用相机输出的 RGB 图像,让 ISP 完成大部分处理;
- 利用可编程相机/RAW 接口,手动实现简化 ISP,以获得更稳定、更可控的图像风格,为后续模型训练带来一致性。
3)与控制闭环的关系
ISP 的复杂度直接影响感知延迟 。在一些高帧率、低延迟要求的场景(如高速飞行器避障),会刻意选择简化 ISP,甚至直接使用灰度或近 RAW 数据,以换取更低延迟。(rpg.ifi.uzh.ch)
3.4.2.2 尺度调整与裁剪
大多数视觉模型要求固定大小的输入(例如 224×224 或 480×480)。原始图像往往分辨率较高、纵横比不规则,需要进行缩放和裁剪 。
1)缩放(Resize)的策略
- 保持纵横比缩放:按长边或短边缩放到目标尺寸,再在较短边上填充或裁剪。该策略可避免非均匀拉伸,减小几何畸变对检测、位姿估计的影响。
- 直接拉伸到目标尺寸:简单粗暴,但会扭曲几何关系,尤其对需要精确几何信息(抓取点预测、姿态估计)任务不利。
- 插值方式上,常用双线性、双三次插值;过于激进的插值会模糊边缘。
2)裁剪(Crop)与 ROI 选择
- 对于固定工作区(如实验桌面),可以直接裁剪出桌面区域,减少无关背景。
- 对于多任务场景,可以先用轻量级检测网络找出感兴趣区域,再裁剪出 ROI 输入到精细模型。
- 注意:裁剪会改变对象相对于图像坐标系的位置,对后续几何计算(如像素坐标归一化、PnP)必须做一致处理。
3)与内参与外参的一致性
如果标定是在原始全分辨率下完成的,而后续对图像进行缩放或裁剪,则需要对内参进行相同的线性变换:
- 缩放:\((f_x, f_y, c_x, c_y)\) 按比例缩放;
- 裁剪:主点 \((c_x, c_y)\) 需要减去裁剪偏移。
这是很多工程系统中容易忽略但会直接降低精度的细节。
3.4.2.3 归一化与张量转换
走到这一步,我们已经有了一张「看着还不错」的 RGB 图像,但深度学习模型需要的是一个数值张量。
1)归一化(Normalization)
典型的预处理包括:
- 将像素从 0–255 线性缩放到 0–1 或 -1–1 区间;
- 按通道减去均值、除以标准差(例如 ImageNet 标准均值/方差);
- 对深度图或灰度图,可能需要做 log 变换或裁剪到物理合理范围。
关键要求是:训练时使用的归一化方式必须在推理时严格一致 。否则模型学到的统计分布会在部署时完全失配,导致性能大幅下降。
2)张量格式与内存布局
- 通常深度学习框架使用 NCHW(batch,通道,高度,宽度)格式;
- 来自相机或图像库的数据往往是 HWC(高度,宽度,通道)格式,需要转换维度顺序;
- 对实时系统,数据拷贝和排列本身也会引入延迟,因此实际工程会尽量减少多余格式转换。
3)多模态输入的对齐
在机器人场景中,模型输入可能包括:
- RGB 图像、深度图;
- 机器人关节状态、末端位姿;
- 历史动作序列。
这些张量需要在时间戳 上对齐(参见第 7 章的数据采集部分),以免模型把错位的感知和动作拼在一起,导致训练出的策略在真实世界表现异常。
3.4.3 延迟、噪声与帧率对控制的影响
视觉只是机器人控制闭环中的一环:从场景发生变化,到相机采集、ISP 处理、模型推理,再到控制器下发关节指令,中间会不可避免地引入时间延迟;图像本身则存在各种** 噪声与不确定性**;而** 帧率**则决定了系统感知世界的时间分辨率。这三者直接决定了视觉控制的上限性能。
[图 3.4-5:视觉控制闭环时间轴示意图,从真实世界事件发生到机器人执行动作的各个延迟环节;附带不同噪声源的示意]
3.4.3.1 延迟
1)延迟的类型
- 感知延迟:从真实场景变化到相机输出图像的时间,包含曝光时间、传感器读出时间、ISP 处理时间、数据传输时间。(ScienceDirect)
- 计算延迟:图像预处理、模型推理、后处理(如 NMS、轨迹规划)的时间。
- 执行延迟:从控制命令发出到机器人关节产生实际运动的时间,包括通信延迟、电机响应等。
整体延迟可简单理解为:机器人看到的是几帧之前的世界 。在静态环境下这还好,在高速运动场景(如无人机避障)中则非常致命。
研究表明,在给定障碍密度和反应能力的前提下,感知延迟会对可安全行驶的最大速度形成硬性上限。(rpg.ifi.uzh.ch)
2)测量与建模
- 实验上可以通过让场景中出现一个在已知时间变化的视觉事件(如 LED 灯突然点亮),测量从事件发生到控制器检测到的时间,即感知+计算延迟。(ScienceDirect)
- 在控制算法层面,可以把延迟作为一个固定时滞或随机时滞进行建模,用离散时间视觉伺服控制、预测控制等方法进行补偿。(MDPI)
3)工程上的缓解策略
- 降低复杂度:简化图像分辨率、模型大小,牺牲部分精度换取更低延迟;
- 管线并行:将图像采集、推理、控制执行做成流水线,而非完全串行;
- 预测补偿:用上一时刻速度估计目标或机器人自身在当前时刻的位置,将控制量作用到「预测状态」上;
- 速度约束:直接在规划层限制最大线速度和角速度,使系统在给定延迟下仍能保证安全距离。
3.4.3.2 噪声
1)噪声的来源
- 传感器层面:读出噪声、光子噪声(shot noise)、热噪声;
- ISP 处理:压缩、锐化、降噪算法可能引入纹理变化和伪影;
- 环境因素:光照变化、反光、高动态范围场景导致局部过曝或欠曝。(ResearchGate)
这些噪声会直接影响:
- 特征检测与匹配的稳定性(角点、特征点抖动);
- 深度估计与点云的精度(视差误差放大为深度误差);
- 物体检测和姿态估计模型的置信度。
2)滤波与多帧融合
典型工程手段包括:
- 空间滤波(Gaussian、bilateral filter)去除高频噪声;
- 时间滤波(指数滑动平均)稳定目标位置估计,但会引入额外滞后;
- 多帧融合与超分辨技术,利用多帧观测提高信噪比。
3)在模型和数据层面的应对
- 数据增强时加入高斯噪声、压缩伪影、光照扰动,使模型对噪声更鲁棒;
- 通过鲁棒损失(如 Huber loss)减弱少数极端噪声样本对参数估计的影响;
- 利用原始 RAW 或线性域数据训练模型,避免 ISP 的不可控风格差异。(arXiv)
3.4.3.3 帧率
1)帧率与时间分辨率
帧率(FPS)决定了系统每秒能够获取多少张新图像。帧率越高,系统对环境变化越敏感,能更快发现和响应变化;帧率越低,则容易错过短暂事件或造成控制指令不连贯。
在视觉伺服中,常见的控制频率是相机帧率的整数倍或约数,例如相机 30 FPS、控制循环 30 Hz 或 60 Hz。若控制频率远高于视觉更新频率,后续控制循环只能基于旧图像反复更新,实际价值有限。(faculty.cc.gatech.edu)
2)高帧率的代价
- 采集和传输带宽需求增大(尤其是高分辨率图像);
- ISP 和模型推理要在更短时间内完成,否则会堆积延迟;
- 嵌入式平台(如 Jetson)上,高帧率往往意味着更高功耗和温度。
因此,在工程上通常要做系统级预算:图像分辨率、帧率、模型大小、硬件性能 必须同时考虑,找到一个满足任务需求的折中点。
3)帧率、延迟与噪声的联合作用
三者之间存在天然的联系:
- 提高帧率需要缩短曝光时间,可能降低信噪比,使图像更暗更「粗糙」;
- 过强的降噪又可能引入更多处理时间,增加延迟;
- 降低帧率虽可提高单帧质量,但控制回路响应变慢。
在机器人工程中,合理的做法不是单独追求某一指标极致,而是根据任务(慢速操作 vs 高速运动)选取合适的参数组合。
3.4.4 单目 / 双目 / 手眼相机的差异与适用场景
从「看」这个动作本身来说,相机可以有多种布置方式。不同布置在成本、深度感知能力、遮挡情况和标定复杂度上都有截然不同的特性。本小节主要对比三种典型配置:单目相机、双目相机、手眼相机与外部固定相机 。
[图 3.4-6:单目相机、双目相机、Eye-in-hand 与 Eye-to-hand 四种典型配置的示意图,标出各自视野范围和与机器人坐标系的关系]
3.4.4.1 单目相机
1)特点
- 硬件简单、成本最低,安装灵活(机载、固定、头戴式等均可);
- 无法直接从单帧图像恢复真实尺度的深度,只能得到相对结构或借助先验;
- 适合做 2D 检测、语义分割、场景理解等任务。
2)单目深度与结构推理
虽然单目本身不具备几何尺度,但可以利用:
- 相机运动多帧(结构从运动,SfM / VO);
- 几何先验(物体尺寸、平面假设);
- 学习方法(单目深度估计网络)。
这些方法在机器人场景中可以提供「相对深度」或近似距离信息,但其精度与鲁棒性通常不如真正的立体或深度传感器。
3)适用场景
- 低成本移动机器人导航(配合激光雷达或超声波避障);
- 对绝对距离要求不高的拾取放置任务(如高度固定的桌面、物体尺寸已知);
- 需要利用大视野和语义信息的任务(如房间场景分析、目标搜索)。
3.4.4.2 双目相机
1)立体几何与深度
双目相机由两台内参相同、外参已知的相机组成,通过视差恢复深度:
- 同一空间点在左右图像上的像素位置存在水平偏移,称为视差;
- 视差与深度成反比,基线越大、分辨率越高,估计精度越好。
在 3.3 已经介绍过基础三角测量原理,这里强调其工程意义:双目提供了稠密或半稠密的深度图,能让机器人在单次观测中获得完整的 3D 信息,而无需相机移动。
2)工程挑战
- 双目标定需要同时估计两台相机的内参和相互外参,对棋盘格姿态和数据质量要求更高;
- 立体匹配算法复杂度较高,对弱纹理区域、反光面表现不佳;
- 两路相机需要精确同步,否则会在快速运动时产生伪视差。
3)适用场景
- 模拟人眼视觉的服务机器人、移动平台导航;
- 抓取与操作任务中的深度感知(如堆叠物体高度估计、障碍物高度判断);
- 对成本敏感,但又需要一定深度信息的场景,是 RGB-D 相机(结构光/ToF)的一种替代方案。
3.4.4.3 手眼相机 vs 外部固定相机
1)Eye-in-hand(手眼相机)的特点
- 相机固定在末端执行器或机械臂手腕上,视野随机器人运动而改变;
- 可以近距离观察目标,获得高分辨率局部细节,尤其适合精细操作(插入、拧螺丝、检查焊点等);
- 遮挡问题更容易控制:机器人可以主动移动相机绕过遮挡。
缺点是:
- 手眼标定较复杂,需要解决 AX=XB 问题并维持长期稳定;(Department of Computer Science)
- 视野有限,很难同时观察整个工作区,需要配合路径规划确保相机视线不被自身或环境遮挡;
- 在机械臂高速运动时,图像更容易模糊,对曝光和帧率要求更高。
2)Eye-to-hand(外部固定相机)的特点
- 相机安装在环境中,如俯视工作台的顶置相机、墙角相机;
- 可以一次性覆盖较大的工作区域,方便做全局任务规划与监控;
- 外参标定相对简单,只需对固定标定板做 PnP 标定,且只要不移动相机,参数可以长期保持稳定。
但它也有明显局限:
- 容易被机械臂本体或其他物体遮挡;
- 对小物体或精细操作细节分辨率不足,远处目标角度变化导致姿态估计精度下降;
- 对于多机器人协作,需要复杂的多视角配置和坐标对齐。
3)组合使用与趋势
在较复杂的机器人系统中,常见的做法是:
- 使用一到多台外部相机提供全局感知(物体分布、障碍物、其它机器人位置);
- 使用手眼相机提供局部精细感知(抓取对准、接触前微调);
- 通过统一的坐标标定(手眼标定、相机间外参)将多视角信息进行融合。(Robotics Stack Exchange)
这种「全局 + 局部」的配置,也为后续 VLA 模型和世界模型提供了丰富多样的视觉输入基础——在后续章节中,我们会看到如何在这个基础上进一步利用语言、历史轨迹,将几何感知提升为智能行为决策。