1. 外参标定基础:坐标系定义、刚体变换、李群与李代数基础

大家好,我是你们的老朋友。今天咱们开始聊外参标定。说实话,这玩意儿我刚开始接触的时候也觉得头大,一堆坐标系转来转去,稍不留神就搞混了。但后来我发现,只要把几个核心概念吃透,后面就顺了。

外参标定,说白了就是搞清楚两个传感器之间的“相对位置和朝向”。比如你的相机和激光雷达装在一起,它们各自看到的世界,怎么才能对齐?这就是外参要解决的问题。

1.1 坐标系定义:你得先知道自己在哪

做SLAM和标定,坐标系是绕不开的坎。我个人习惯把坐标系分成三类:

  • 世界坐标系:固定不动的大地基准。你放个棋盘格在地上,那个棋盘格就是世界坐标系的一部分。
  • 传感器坐标系:相机、激光雷达、IMU各自的原点。比如相机光心就是相机坐标系的原点。
  • 车体/机器人坐标系:通常定义在车辆中心或后轴中心。外参标定的目标,就是把传感器坐标系和车体坐标系对齐。

嗯,这里要注意一个坑:不同厂家对坐标轴的定义可能不一样。比如有的相机Z轴朝前,有的Z轴朝上。我在项目中遇到过,两个传感器明明物理上装好了,但标定出来的结果就是不对。后来一查,原来是坐标系定义没统一。所以,动手之前,先把每个传感器的坐标系定义文档翻出来看清楚。

核心原则:所有坐标变换,必须明确“从哪个坐标系到哪个坐标系”。写代码时,我习惯在变量名里带上坐标系后缀,比如 p_cam 表示相机坐标系下的点,p_world 表示世界坐标系下的点。这招帮我避免了很多低级错误。

1.2 刚体变换:旋转和平移,缺一不可

两个坐标系之间的关系,可以用一个刚体变换来描述。它包含两部分:

  • 旋转:用旋转矩阵 R 表示,3x3 的正交矩阵,行列式为 +1。
  • 平移:用平移向量 t 表示,3x1 的向量。

一个点从坐标系 A 变换到坐标系 B,公式很简单:

p_b = R * p_a + t

但实际工程中,我们更喜欢用齐次坐标,把旋转和平移合并成一个 4x4 的变换矩阵 T:

| R  t |
| 0  1 |

这样,连续变换就可以直接矩阵相乘了。比如从激光雷达到相机,再到世界坐标系:

T_world_cam = T_world_lidar * T_lidar_cam

你看,是不是清爽多了?

小技巧:写代码时,我习惯用 Eigen 或 Sophus 库来管理变换矩阵。手写矩阵乘法?别闹了,容易出错。我曾经手写过一个旋转矩阵,结果符号搞反了,标定出来的外参直接把点云映射到了地底下……嗯,从那以后我再也不敢手撸了。

1.3 李群与李代数基础:为什么需要它?

你可能会问:旋转矩阵 R 不是挺好的吗?为什么还要搞什么李群李代数?

原因很简单:优化问题需要求导。旋转矩阵 R 是正交矩阵,有约束条件(R^T R = I),直接对它求导非常麻烦。而李代数是一个无约束的向量空间,求导就方便多了。

说白了,李群和李代数就是一对“好基友”:

  • 李群 SO(3):三维旋转矩阵的集合。它是一个流形,不是线性空间。
  • 李代数 so(3):三维旋转向量的集合。它是一个线性空间,对应 SO(3) 在单位元处的切空间。

它们之间通过指数映射和对数映射相互转换:

R = exp(φ^)    // 从李代数到李群
φ = log(R)     // 从李群到李代数

其中 φ 是一个三维向量,φ^ 是它的反对称矩阵。这个映射关系,我在做图优化的时候几乎天天用。

避坑指南:我曾经在优化外参时,直接对旋转矩阵的9个元素做优化,结果优化出来的矩阵根本不是正交矩阵,导致后续计算全崩了。后来改用李代数参数化,问题迎刃而解。记住:优化旋转,永远用李代数。

1.4 知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图:

外参标定基础:知识体系 坐标系定义 • 世界坐标系 • 传感器坐标系 • 车体坐标系 核心:明确“从哪到哪” 变量名加后缀防坑 刚体变换 • 旋转矩阵 R (3x3) • 平移向量 t (3x1) • 齐次变换矩阵 T (4x4) 公式:p_b = R * p_a + t 推荐用 Eigen/Sophus 库 李群与李代数 • SO(3):旋转矩阵群 • so(3):旋转向量空间 • 指数/对数映射 优化旋转必用李代数 无约束求导,真香 三者结合:坐标系定义 → 刚体变换描述 → 李代数优化

这张图把本章的三个核心模块串起来了。你想想看,坐标系定义是基础,刚体变换是工具,李群李代数是优化手段。三者缺一不可。

1.5 实战中的一点体会

最后,我想分享一点个人经验。很多初学者喜欢一上来就调代码、跑标定程序,结果出了问题根本不知道错在哪。我的建议是:先把坐标系画出来。

拿张纸,画出你的传感器安装位置,标出每个坐标系的原点和轴方向。然后手动推导一下变换关系。这一步虽然看起来“土”,但能帮你理清思路。我在做多传感器融合项目时,每次都会先画这个图,哪怕只是草稿。

好了,这一章的内容就到这里。记住:坐标系是根,变换是干,优化是枝叶。根扎稳了,后面的标定工作才能枝繁叶茂。

本章要点回顾:

  • 明确三种坐标系:世界、传感器、车体
  • 刚体变换 = 旋转 + 平移,用齐次矩阵统一表示
  • 李群 SO(3) 和李代数 so(3) 通过指数/对数映射转换
  • 优化旋转参数时,务必使用李代数,避免约束问题

可可精品资料库