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);

Отметим также, что, поскольку обе эти системы координат движутся (т.е. находятся в фиксированном положении по отношению к устройству и друг к другу), поза, полученная в результате этого вызова, не изменится при перемещении устройства.

Другие вопросы по тегам