如何找到两个不同坐标系中对应点之间的旋转和平移(变换矩阵)

How to find rotation and translation (transformation matrix) between corresponding points in two different coorinate systens

我正在研究相机-激光雷达校准,我在以下问题上卡住了一段时间:

我正在使用 USB 摄像头和 2D 激光雷达。我在激光雷达框架和相机框架中都有对应点的坐标(可以说我在激光雷达框架中有 3 个点及其坐标,在相机框架中有相同 3 个点的坐标)。

一分举例:
lidar_pt1(xl, yl)
camera_pt1(xc, yc, zc)
...
众所周知。

如果我对变换矩阵进行硬编码,我会得到预期的结果。现在我尝试不对其进行硬编码,而是使用已知的坐标值自动计算它。我所拥有的是激光雷达框架中 2D 坐标中的 3 个点和相机框架中 3D 坐标中的精确 3 个点。正是在这里,我正在努力根据我拥有的坐标值以某种方式计算旋转。有没有办法获得这种轮换?

camera_pt1 = TransformMat * lidarpt1
变换矩阵 = ?

我看到了一些使用 SVD (http://nghiaho.com/?page_id=671) 的示例,但我认为它们需要更大的数据集并且最少 3 个点不会给出最佳结果。

如果你只从每个系统中取 3 对坐标,那么数学就很简单了。这是一个简单的例子:

    |
  4 |                      (R)
    |                       : ',
    |                       :   ',
    |                       :     ',
  3 |                       :      (P)
    |                       :     ,'
    |                       :   ,'
    |                       : ,'
  2 |      (A).....(B)     (Q)
    |       :     ,'
    |       :   ,'
    |       : ,'
  1 |      (C)
    |
    |
    |
  0 +-------------------------------------
    0       1       2       3       4

假设您有一个三角形 ABC 映射到另一个三角形 PQR。您可以在 homogeneous coordinates 中表示它们的顶点,如下所示:

      .-       -.          .-       -.
      | 1  2  1 |          | 4  3  1 |
ABC = | 2  2  1 |    PQR = | 3  2  1 |
      | 1  1  1 |          | 3  4  1 |
      '-       -'          '-       -'

您需要找到一个矩阵 M,将 ABC 映射到 PQR(即 ABC × M = PQR)。为此,只需将 PQR 乘以 ABC 的倒数:

if    ABC × M  =  PQR,
then  ABC⁻¹ × ABC × M  =  ABC⁻¹ × PQR
so    M  =  ABC⁻¹ × PQR

有很多关于如何求逆 3×3 矩阵的参考资料。这应该会给您以下结果:

    .-          -.
    | -1  -1   0 |
M = |  1  -1   0 |
    |  3   6   1 |
    '-          -'