Чего я пытаюсь достичь
Я пытаюсь определить координаты автомобиля (x, y) и его угол поворота тета, как показано на рисунке выше. (Рисунок представляет очень простую модель автомобиля, как видно из приведенного выше). Я прикреплю свой телефон к верхней части автомобиля, и с помощью маркеров ArUco я бы хотел определить позу своего автомобиля / телефона относительно мира, чтобы я мог извлечь X и трансляции Y, и вращение Z, которое должно соответствовать тета .
Мне удалось перейти от системы координат камеры к системе координат маркера, используя ответ на этот вопрос: Pose of камера из позы маркера
Вот результат: Первый результат 'new rVe c' и 'new tVe c' представляют вектор вращения и перемещения в системе координат маркера. На этой картинке все хорошо. Мой вектор поворота хорош, так как я сейчас держу свой телефон под углом> 90 градусов (1,57 рад) на X, а вектор перевода соответствует расстояниям. С помощью метода drawAxis, представленного в библиотеке ArUco, я также вижу, что маркер обнаружен правильно, поэтому я ожидал, что результаты будут хорошими.
Однако здесь: Второй результат Я повернулся мой телефон на 90 градусов влево (по оси Z) и переместил телефон вправо, чтобы я мог зафиксировать маркер на картинке. Вектор трансляции и drawAxis дают мне хорошие результаты, но вектор вращения не тот, который я ожидал. Я ожидал, что вращение по оси Z совпадет с моим углом тета, который должен был составлять около 1,57 эквивалента пи / 2. У меня также есть некоторый поворот на X и Y, что было неожиданным, так как я думал, что у меня должен быть только угол> 90 градусов на Y и угол 0 градусов на X (противоположность предыдущему рисунку).
Я также заметил другое странное поведение. Вот видео, которое я сделал и которое показывает мои проблемы: Устранение неисправностей вращения ArUco
Я вижу 2 проблемы: 1) Маркер повернут на угол 180 градусов, но вектор вращения z не не близко к 3,14 (пи). 2) Я намеренно двигаю камеру, поворачивая ее по оси X. По некоторым причинам это движение также изменяет вращение Z и Y.
Моя основная идея состояла в том, чтобы получить вращение камеры относительно системы координат маркера и извлечь вращение Z. Разве вращение по Z не должно совпадать с углом тета, указанным на первом рисунке? Я также могу предоставить код для оценки позы, но я не думаю, что это необходимо, поскольку результаты метода drawAxis кажутся идеальными.
Кроме того, если есть какие-либо более простые или лучшие способы определения угла тета с помощью камеры прилагается к машине, пожалуйста, дайте мне знать!