【问题标题】:How to get Camera Pose from Aruco Pose in Unity?如何从 Unity 中的 Aruco Pose 获取相机姿势?
【发布时间】:2020-12-18 13:27:33
【问题描述】:

我有来自 Aruco Marker 的变换,我想使用该信息获取相机姿势。 如何仅使用来自 Aruco 标记的变换来更新相机姿势。

我想统一做出这个估计,但我不知道该怎么做。

【问题讨论】:

  • 使用 opencv 你可以使用solvePnp函数来获取物体相对于相机的姿态。要获得相对于对象的相机姿态,请使用逆结果。也许您必须在 Unity 和 openCV 中的不同坐标系之间进行转换

标签: opencv unity3d


【解决方案1】:

https://github.com/flankechen/ArUco_Unity

我曾经使用 Aruco for AR 为 Unity 制作插件。 Aruco 的模型视图矩阵足以满足相机姿势。在 c# 代码中,我在原生 Aruco 中获得左手变换,对于 opengl,将其变换为右手变换以用于 Unity,反转并获取位置和旋转以设置 Unity 相机。详情请查看https://github.com/flankechen/ArUco_Unity/blob/master/RenderingPluginExample52_ArUco_unity/UnityProject/Assets/UseRenderingPlugin.cs。 “酷”部分是从左手系统转换为右手系统。并非所有的“谷歌代码”都有效。

//reform a left handed system transform matrix from right handed
public static Matrix4x4 LHMatrixFromRHMatrix(Matrix4x4 rhm)
{
    Matrix4x4 lhm = new Matrix4x4();;
    
    // Column 0.
    lhm[0, 0] =  rhm[0, 0];
    lhm[1, 0] =  rhm[1, 0];
    lhm[2, 0] = -rhm[2, 0];
    lhm[3, 0] =  rhm[3, 0];
    
    // Column 1.
    lhm[0, 1] =  rhm[0, 1];
    lhm[1, 1] =  rhm[1, 1];
    lhm[2, 1] = -rhm[2, 1];
    lhm[3, 1] =  rhm[3, 1];
    
    // Column 2.
    lhm[0, 2] = -rhm[0, 2];
    lhm[1, 2] = -rhm[1, 2];
    lhm[2, 2] =  rhm[2, 2];
    lhm[3, 2] = -rhm[3, 2];
    
    // Column 3.
    lhm[0, 3] =  rhm[0, 3];
    lhm[1, 3] =  rhm[1, 3];
    lhm[2, 3] = -rhm[2, 3];
    lhm[3, 3] =  rhm[3, 3];
    
    return lhm;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2022-08-21
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2022-10-07
    • 2013-02-15
    相关资源
    最近更新 更多