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

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

本文关键字:之间 旋转 变换 对应点 坐标系 何找 两个      更新时间:2023-10-16

我正在进行相机激光雷达校准,由于以下问题我被困了一段时间:

我用的是一个usb摄像头和一个二维激光雷达。我有激光雷达帧和相机帧中对应点的坐标(假设我有3个点和它们在激光雷达帧中的坐标,以及相机帧中相同3个点的坐标)

一点的示例:
lidar_pt1(xl,yl)
camera_pt1(xc,yc,zc)

已知

如果我对变换矩阵进行硬编码,我会得到一个预期的结果。现在我尝试不进行硬编码,而是使用已知的坐标值自动计算它。我在激光雷达帧中有3个2D坐标点,在相机帧中有精确的3个3D坐标点。正是在这里,我正在努力计算基于坐标值的旋转。有办法实现这种轮换吗

camera_pt1=TransformMat*lidarpt1
TransformMat=

我看到了一些使用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。您可以在齐次坐标中表示它们的顶点,如下所示:

.-       -.          .-       -.
| 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 |
'-          -'