Google Tango - получение данных позы с IMU в качестве базового кадра
Я работаю с Google Project Tango и попробовал базовый пример с получением данных позы:
TangoCoordinateFramePair pair;
pair.base = TANGO_COORDINATE_FRAME_START_OF_SERVICE;
pair.target = TANGO_COORDINATE_FRAME_CAMERA_COLOR;
base = TANGO_SUPPORT_ENGINE_OPENGL;
target = TANGO_SUPPORT_ENGINE_OPENGL;
error = TangoSupport_getPoseAtTime(poseTimestamp, pair.base, pair.target, base, target, ROTATION_0, &pose);
Это дает TANGO_SUCCESS.
Тем не менее, если я только изменить базу на это
pair.base = TANGO_COORDINATE_FRAME_IMU;
... Я продолжаю получать TANGO_INVALID.
Я пытался использовать C API и Unity SDK, и у обоих одинаковый неверный результат.
Это почему? Почему я не могу использовать TANGO_COORDINATE_FRAME_IMU?
Я пытаюсь исправить смещение камеры, как указано здесь:
Смещение камеры | Проект Танго
но безуспешно...
1 ответ
TangoSupport_getPoseAtTime
работает только для получения позы между фиксированной системой координат и движущейся системой координат. TANGO_INVALID
ошибка возникает из-за того, что TANGO_COORDINATE_FRAME_CAMERA_COLOR
а также TANGO_COORDINATE_FRAME_IMU
оба движущихся координатных кадров.
Чтобы найти смещение между TANGO_COORDINATE_FRAME_IMU
а также TANGO_COORDINATE_FRAME_CAMERA_COLOR
(или между любой парой движущихся координатных рамок), вам нужно использовать TangoService_getPoseAtTime
вместо.
Этот фрагмент кода должен дать вам преобразование, которое вы ищете:
TangoCoordinateFramePair pair;
pair.base = TANGO_COORDINATE_FRAME_IMU;
pair.target = TANGO_COORDINATE_FRAME_CAMERA_COLOR;
TangoPoseData pose;
TangoErrorType result = TangoService_getPoseAtTime(0.0, pair, &pose);
Отметим также, что, поскольку обе эти системы координат движутся (т.е. находятся в фиксированном положении по отношению к устройству и друг к другу), поза, полученная в результате этого вызова, не изменится при перемещении устройства.