首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在两个不同的共轨系统中求对应点之间的旋转和平移(变换矩阵)

如何在两个不同的共轨系统中求对应点之间的旋转和平移(变换矩阵)
EN

Stack Overflow用户
提问于 2017-11-03 13:25:54
回答 1查看 2K关注 0票数 0

我正在做一个相机-激光雷达校准工作,我在以下问题上被困了一段时间:

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

例如,有一点:

lidar_pt1(xl,yl)

camera_pt1(xc,yc,zc)

..。

都是已知的。

如果硬编码转换矩阵,就会得到预期的结果。现在,我试图不对它进行硬编码,而是使用已知的坐标值自动计算它。我有3个点在二维坐标在激光雷达框架和准确的3个点作为三维坐标在相机帧。在这里,我在数学上挣扎着,想要根据坐标值来计算旋转。有什么方法可以让你旋转吗?

camera_pt1 = TransformMat * lidarpt1

TransformMat =?

我看到了一些使用SVD (id=671)的例子,但我认为它们需要更大的数据集,而最少3分并不能给出最好的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 14:39:39

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

代码语言:javascript
运行
复制
    |
  4 |                      (R)
    |                       : ',
    |                       :   ',
    |                       :     ',
  3 |                       :      (P)
    |                       :     ,'
    |                       :   ,'
    |                       : ,'
  2 |      (A).....(B)     (Q)
    |       :     ,'
    |       :   ,'
    |       : ,'
  1 |      (C)
    |
    |
    |
  0 +-------------------------------------
    0       1       2       3       4

假设您有一个三角形ABC,它映射到另一个三角形PQR。您可以用齐次坐标表示它们的顶点,如下所示:

代码语言:javascript
运行
复制
      .-       -.          .-       -.
      | 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的逆

代码语言:javascript
运行
复制
if    ABC × M  =  PQR,
then  ABC⁻¹ × ABC × M  =  ABC⁻¹ × PQR
so    M  =  ABC⁻¹ × PQR

关于如何反演3×3矩阵,有大量的参考文献。这将给您以下结果:

代码语言:javascript
运行
复制
    .-          -.
    | -1  -1   0 |
M = |  1  -1   0 |
    |  3   6   1 |
    '-          -'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47096873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档