我正在做一个相机-激光雷达校准工作,我在以下问题上被困了一段时间:
我用的是usb摄像头和2D激光雷达。我在激光雷达帧和摄像机帧中都有对应点的坐标(假设我在激光雷达帧中有3个点,它们在激光雷达帧中的坐标,以及相机帧中相同的3个点的坐标)。
例如,有一点:
lidar_pt1(xl,yl)
camera_pt1(xc,yc,zc)
..。
都是已知的。
如果硬编码转换矩阵,就会得到预期的结果。现在,我试图不对它进行硬编码,而是使用已知的坐标值自动计算它。我有3个点在二维坐标在激光雷达框架和准确的3个点作为三维坐标在相机帧。在这里,我在数学上挣扎着,想要根据坐标值来计算旋转。有什么方法可以让你旋转吗?
camera_pt1 = TransformMat * lidarpt1
TransformMat =?
我看到了一些使用SVD (id=671)的例子,但我认为它们需要更大的数据集,而最少3分并不能给出最好的结果。
发布于 2017-11-03 14:39:39
如果你只从每个系统中取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 |
'- -'https://stackoverflow.com/questions/47096873
复制相似问题