3. 外参标定问题建模:最小二乘问题、目标函数构建、优化变量

好,咱们进入正题。

外参标定,说白了就是解一个数学问题。你拿着传感器数据,知道它们之间应该有什么关系,但实际测出来总有偏差。怎么办?把它变成一个优化问题,让计算机自己去算。

我个人习惯,先把问题拆成三块:目标函数、优化变量、求解方法。今天咱们重点聊前两块,顺带说说最小二乘这个老朋友。

3.1 为什么是最小二乘?

你想想看,传感器测量总有噪声。你测100次,每次结果都不一样。如果硬要找一个完美的解,让所有方程都精确成立,那基本不可能。

所以,我们换个思路:找一个解,让所有误差的平方和最小。这就是最小二乘的核心思想。

我在项目中遇到过一位同事,非要用解线性方程组的方法硬算,结果噪声一上来,解出来的外参完全不能用。后来换成最小二乘,效果立竿见影。为什么?因为最小二乘天然对噪声有抑制作用——平方项让大误差被放大,优化器会优先去压平那些离谱的偏差。

核心公式:
min ∑ || r_i(x) ||²

其中 r_i(x) 是第 i 个观测的残差,x 是待优化的外参。

3.2 目标函数怎么构建?

目标函数,就是你要最小化的那个东西。它由一堆残差项组成。每个残差项,代表一个测量约束的违反程度。

3.2.1 点云匹配残差

这是最常用的。比如激光雷达和相机标定,你找一个标定板,激光扫出点云,相机拍出图像。理论上,点云上的点投影到图像上,应该落在对应的像素位置。

残差就是:投影点位置 - 实际观测到的像素位置。

我的经验: 别只用单个点。用一块区域内的多个点,取平均残差,能有效降低单点噪声的影响。我曾经因为一个离群点,让优化跑了半天没收敛,后来加了鲁棒核函数才搞定。

3.2.2 重投影误差

这个在视觉-惯性标定里很常见。你把3D点投影到图像上,和实际检测到的特征点位置做差。

公式长这样:

e = p_observed - project(T * P_3D)

其中 T 是外参矩阵,P_3D 是3D点坐标,project 是相机投影函数。

3.2.3 相对位姿约束

有时候你不需要绝对位置,只需要两个传感器之间的相对关系。比如IMU和相机,你通过积分IMU数据得到一段运动,相机通过视觉里程计也得到一段运动。这两段运动之间的差异,就是残差。

残差类型 适用场景 典型传感器对
点云匹配残差 有共同观测目标 激光雷达-相机
重投影误差 有3D-2D对应关系 相机-IMU
相对位姿约束 有运动轨迹 IMU-轮速计

3.3 优化变量是什么?

优化变量,就是你要调整的那些参数。外参标定里,通常包括:

  • 旋转矩阵 R:3个自由度(比如欧拉角或四元数)
  • 平移向量 t:3个自由度(x, y, z)
  • 时间偏移 Δt:1个自由度(传感器时间戳不同步的问题)

一共7个自由度。但注意,旋转矩阵如果用欧拉角表示,会有万向锁问题。我建议用四元数,虽然多了一个维度(4个参数),但避免了奇异性。

避坑指南: 我曾经在标定一个多线激光雷达和相机时,忘了优化时间偏移。结果外参怎么调都对不上,后来发现是激光雷达和相机的时间戳差了20毫秒。加上时间偏移变量后,一次就收敛了。

3.4 知识体系结构图

下面这张图,把整个建模过程串起来了。你看一眼,心里就有数了。

外参标定问题建模 最小二乘问题 min Σ ||r_i||² 目标函数构建 残差项组合 优化变量 R, t, Δt 噪声抑制 鲁棒核函数 点云匹配残差 重投影误差 相对位姿约束 旋转 R(四元数) 平移 t(x,y,z) 时间偏移 Δt 核心思路 将标定问题转化为优化问题,用最小二乘求解

3.5 实际建模中的几个坑

嗯,这里要注意几个容易翻车的地方。

  1. 参数化选择:旋转矩阵用四元数还是李代数?我建议用李代数,因为它在优化时没有约束,梯度计算也方便。四元数虽然直观,但需要归一化约束,处理起来麻烦一点。
  2. 权重设置:不同残差项的尺度可能差很多。比如点云残差是米级,重投影残差是像素级。如果不加权重,优化器会优先压平数值大的项。我一般先做一次预标定,统计各残差的方差,然后用逆方差作为权重。
  3. 初始化:最小二乘是局部优化,初始值不好会掉进局部最优。我的习惯是先用闭式解法(比如P3P)算一个粗略值,再扔给优化器精调。
一个小技巧: 如果你发现优化不收敛,先固定旋转只优化平移,或者反过来。分步优化往往比一次性全优化更稳定。我在标定一个双目相机时,就是这么干的,效果很好。

好了,建模这块就聊到这儿。你只要记住:目标函数是你要优化的东西,优化变量是你能调的东西,最小二乘是帮你找到最优解的工具。这三者搞清楚了,外参标定就成功了一半。

可可精品资料库