4. 标定问题建模:外参标定的数学定义、旋转矩阵与平移向量、李群李代数基础

好,咱们进入正题。

前面几章我们把传感器原理、数据同步、时间戳对齐这些「硬骨头」啃了一遍。现在终于到了最核心的部分——标定问题建模

说白了,标定就是求解一个数学问题。你得知道你要解什么,用什么工具解,解出来长什么样。这一章,我就带你把这些东西彻底理清楚。

4.1 外参标定的数学定义

先问个问题:什么是外参?

外参就是两个传感器坐标系之间的刚体变换。一个旋转,一个平移。就这么简单。

数学上,我们这样定义:

目标:求解从激光雷达坐标系 L 到 IMU 坐标系 I 的变换矩阵 TIL

使得对于任意空间点 P,有:

PI = RIL · PL + tIL

其中:

  • RIL 是 3×3 的旋转矩阵,描述姿态差异
  • tIL 是 3×1 的平移向量,描述位置偏移

我在项目里见过不少新手,上来就问「外参是不是就是几个角度?」。嗯,角度只是旋转的一种表示方式。真正干活的时候,我们用的是矩阵。为什么?因为矩阵可以直接做乘法、求逆、插值,角度不行。

我的习惯:在代码里永远用齐次变换矩阵 T (4×4) 来存储外参。旋转矩阵 + 平移向量塞进去,一步到位。别拆开存,容易搞混。

4.2 旋转矩阵:不只是数学符号

旋转矩阵 R 有三个重要性质:

  1. 正交性:RTR = I,R-1 = RT
  2. 行列式为 +1:保证是刚体旋转,不是镜像
  3. 9个元素,3个自由度:所以一定有冗余约束

你想想看,9个数字描述3个角度,这本身就是个「浪费」。但正是这种冗余,让旋转矩阵在数值计算中非常稳定。我踩过坑——用欧拉角做插值,结果出现了万向锁,IMU数据直接飞了。从那以后,我再也不敢在优化过程中直接用欧拉角了。

我曾经踩过的坑:在标定优化时,直接优化旋转矩阵的9个元素。结果矩阵不满足正交性,优化出来的东西根本不能当旋转矩阵用。后来老老实实用了李代数参数化。

4.3 平移向量:简单但容易忽略的细节

平移向量 t 就是三维空间里的位移。看起来简单,对吧?

但这里有个细节:平移向量的单位必须统一。激光雷达给的是米,IMU给的是米每秒平方,那没问题。但如果激光雷达给的是毫米,IMU给的是米……嗯,你懂的。

另外,平移向量的精度直接影响标定结果。我记得有一次,一个同事标定出来的外参旋转部分很准,但平移总是差几厘米。查了半天,发现是IMU的安装位置测量错了。所以,物理测量和数学求解要互相验证

4.4 李群与李代数:为什么需要它?

好,现在问题来了。

我们要优化外参,也就是要优化 R 和 t。但 R 有正交约束,不能随便加减。你给 R 加一个小量 ΔR,结果可能就不是旋转矩阵了。

怎么办?

答案就是李群和李代数

简单说:

  • 李群 SO(3):旋转矩阵的集合,构成一个群。满足封闭性、结合律、单位元、逆元。
  • 李代数 so(3):旋转矩阵的「切空间」,是一个向量空间。没有约束,可以随便加减。

优化的时候,我们在李代数上做增量更新,然后通过指数映射回到李群。这样既保证了旋转矩阵的正交性,又可以用常规的优化算法。

核心公式:

R = exp(φ)

其中 φ 是 so(3) 上的三维向量,φ 是它的反对称矩阵。

更新时:R ← R · exp(Δφ)

说白了,就是把有约束的优化问题,变成无约束的优化问题。这是现代SLAM和标定系统的基石。

4.5 知识体系总览

为了让你看得更清楚,我画了一张图,把这一章的核心逻辑串起来:

标定问题建模知识体系 外参标定数学定义 旋转矩阵 R (SO(3)) 平移向量 t (R³) 问题:有正交约束,不能直接优化 问题:单位需统一,物理测量需验证 李群 SO(3) ↔ 李代数 so(3):无约束优化

4.6 代码实现:李代数更新示例

光说不练假把式。我给你看一段实际代码,演示怎么用李代数做旋转更新:

#include <Eigen/Core>
#include <Eigen/Geometry>
#include <sophus/so3.hpp>

// 当前外参旋转矩阵
Eigen::Matrix3d R_current;
// 优化得到的增量(李代数 so(3) 上的向量)
Eigen::Vector3d delta_phi;

// 构造李代数增量
Sophus::SO3d delta_SO3 = Sophus::SO3d::exp(delta_phi);

// 更新旋转矩阵
Sophus::SO3d R_new = Sophus::SO3d(R_current) * delta_SO3;

// 提取更新后的旋转矩阵
Eigen::Matrix3d R_updated = R_new.matrix();

你看,代码就这么几行。但背后的数学原理,就是上面讲的那一套。

我的建议:刚开始接触李代数时,别被「群」「代数」这些词吓到。你就记住一句话:李代数就是旋转的「增量」表示,可以随便加减;李群就是旋转的「绝对」表示,有约束。优化时用李代数,更新完再映射回李群。

4.7 本章小结

这一章我们干了三件事:

  • 明确了外参标定的数学定义:R 和 t
  • 理解了旋转矩阵的性质和约束
  • 引入了李群李代数,解决了有约束优化的问题

这些是后面所有标定算法的基础。你如果能把这一章吃透,后面的联合优化、图优化、因子图,理解起来会轻松很多。

嗯,今天就到这里。下一章我们开始讲具体的标定方法——手眼标定和基于运动的标定。到时候我会把实际项目中的坑一个一个给你拆开讲。


专注资料整理