【发布时间】:2020-12-18 13:27:33
【问题描述】:
我有来自 Aruco Marker 的变换,我想使用该信息获取相机姿势。 如何仅使用来自 Aruco 标记的变换来更新相机姿势。
我想统一做出这个估计,但我不知道该怎么做。
【问题讨论】:
-
使用 opencv 你可以使用solvePnp函数来获取物体相对于相机的姿态。要获得相对于对象的相机姿态,请使用逆结果。也许您必须在 Unity 和 openCV 中的不同坐标系之间进行转换
我有来自 Aruco Marker 的变换,我想使用该信息获取相机姿势。 如何仅使用来自 Aruco 标记的变换来更新相机姿势。
我想统一做出这个估计,但我不知道该怎么做。
【问题讨论】:
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;
}
【讨论】: