Как получить позу камеры из Aruco Pose в Unity?

#opencv #unity3d

#opencv #unity3d

Вопрос:

У меня есть преобразование из маркера Aruco, и я хотел бы получить позу камеры, используя эту информацию. Как я могу обновить позу камеры, используя только преобразование из маркера Aruco.

Я хотел бы сделать эту оценку в Unity, но я не уверен, как это сделать.

Комментарии:

1. с opencv вы можете использовать функцию solvePnP, чтобы получить позу объекта относительно камеры. Чтобы получить позу камеры относительно объекта, используйте обратный результат. Возможно, вам придется выполнять преобразование между разными системами координат в Unity и OpenCV

Ответ №1:

https://github.com/flankechen/ArUco_Unity

Раньше я делал plungin для Unity, используя Aruco для AR. Матрицы просмотра модели из Aruco достаточно для позы камеры. В коде c # я получаю левостороннюю трансформацию в родном Aruco для opengl, преобразую ее в правостороннюю для Unity, инвертирую и получаю положение и поворот для установки камеры Unity. проверьте https://github.com/flankechen/ArUco_Unity/blob/master/RenderingPluginExample52_ArUco_unity/UnityProject/Assets/UseRenderingPlugin.cs подробнее. «Крутая» часть — это перенос с левой системы на правую. не весь «код Google» работает.

 //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;
}