我正在进行相机 - 激光雷达校准,我在以下问题上停留了一段时间:
我正在使用USB摄像头和2D激光雷达。我有激光雷达框架和相机框架中相应点的坐标(假设我在激光雷达框架中有3个点和它们的坐标以及相机框架中相同3个点的坐标)。
一点的例子:
lidar_pt1(xl,yl)
camera_pt1(xc,yc,zc)
...
众所周知。
如果我对转换矩阵进行硬编码,我会得到预期的结果。现在我试图不对其进行硬编码,而是使用已知的坐标值自动计算它。我所拥有的是激光雷达框架中的2D坐标中的3个点以及相机框架中的3D坐标中的精确3个点。在这里,我正在努力学习数学,以某种方式根据我的坐标值计算旋转。有没有办法获得轮换?
camera_pt1 = TransformMat * lidarpt1
TransformMat =?
我看到了一些使用SVD(http://nghiaho.com/?page_id=671)的例子,但我认为它们需要更大的数据集,而最少3点不会得到最好的结果。
答案 0 :(得分:1)
如果你只从每个系统中取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 |
'- -'