【问题标题】:Estimate the camera pose in the reference system using one marker with ARUCO使用带有 ARUCO 的一个标记估计参考系统中的相机位姿
【发布时间】:2022-01-03 14:11:39
【问题描述】:

我目前正在使用 ARUCO 的一个标记进行相机姿态估计项目。

我使用 Aruco 的 Marker Detector 来检测标记并获取标记的 Rvec 和 Tvec。我知道这两个向量代表了从标记到相机的转换,这是标记在相机上的姿势。我使用这两个向量形成了一个名为 T_marker_camera 的 4 x 4 矩阵。

然后,我设置了一个世界框架(左手)并得到了标记的世界姿势,这是一个 4 x 4 变换矩阵。

我想计算相机 w.r.t 世界框架的位姿,我使用以下公式计算它: T_camera_world = T_marker_world * T_marker_camera_inv

在执行上述公式之前,我将 OpenCV 坐标转换为左手坐标(翻转 x 轴的符号)。

但是,我没有得到正确的 x、y、z 相机 w.r.t 世界框架。

为了得到正确答案,我错过了什么?

谢谢

【问题讨论】:

    标签: c++ opencv aruco


    【解决方案1】:

    您给出的一个等式看起来是正确的,所以问题可能出在您没有显示/描述的某个地方。

    您的符号中的修正将有助于澄清。

    在右侧(输入)写入姿势/源帧,在左侧(输出)写入参考/目标帧。然后你的矩阵像多米诺骨牌一样“匹配”。

    rvec 和 tvec 产生一个应该称为 T_cam_marker 的矩阵。

    如果你想要你的相机在世界框架中的姿势,那就是

    T_world_cam = T_world_marker * T_marker_cam
    T_world_cam = T_world_marker * inv(T_cam_marker)
    

    (相当于你写的,但是多米诺骨牌)

    请确保您执行 matrix 乘法,而不是 元素-wise 乘法。

    要在左手坐标系和右手坐标系之间移动,请插入一个相应地映射坐标的矩阵。框架:

    • OpenCV 摄像头/屏幕:右手,{X 右,Y 下,Z 远}
    • ARUCO(无论如何在 OpenCV 中):右手,{X right, Y far, Z up},第一个角是左上角(-X+Y 象限)
    • 无论你有什么左边框,比如说 {X right, Y up, Z far},它是一个屏幕或其他东西

    屏幕上典型帧的换手矩阵是一个标识,但 Y 的条目是 -1。我不知道你为什么要翻转 X,但这是“等效的”,忽略任何旋转。

    【讨论】:

      猜你喜欢
      • 2019-03-20
      • 2018-07-25
      • 1970-01-01
      • 2017-04-27
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多