2015-05-13 8 views
1

Я хочу преобразовать позу вокруг источника. Поза у меня содержит положение [x, y, z] и ориентацию [x, y, z, w], представленную как кватернион. У меня есть матрица преобразования 4x4, которую я использую для перевода и поворота положения позы вокруг источника.3D Вращение позы вокруг источника

np.dot(transforma_mat, np.transpose(np.append(pose.position, 1))) 

Итак, как происхождение движется и вращается, начальная точка позы также перемещается и поворачивается. Однако я не уверен, как я могу повернуть ориентацию позы.

Я могу преобразовать кватернион в углы Эйлера и матрицу вращения (и наоборот), используя this library.

История: Объект, который перемещается и вращается. Конечный эффектор робота имеет позу перед тем, как объект движется и вращается. Я хочу обновить позу конечного эффектора таким образом, чтобы он перемещался и вращался вместе с объектом.

+0

Не могли бы вы подробнее рассказать? Я полагаю, что существует «внешняя» система координат и система координат «робот». У вас есть вектор, который отделяет происхождение от этих двух систем координат и матрицу вращения, которая выравнивает две системы координат, как только их происхождение будет соответствовать. Что именно вам нужна помощь оттуда? – wflynny

+0

Я написал рассказ. Можно предположить, что существует только одна система координат. – Rouhollah

ответ

0

Общий способ перевода объекта по отношению к движению другого объекта может быть найден here.

Попробуйте преобразовать вращения в матрицы. Углы Эйлера не работали для меня.

1

Я не уверен, как это сделать с кватернионами, однако вы можете определить свою ориентацию как два ортогональных вектора (соблюдая правильное или левое правило).

После этого вы можете просто умножить эти векторы в своей системе координат на свои матрицы преобразования, чтобы получить преобразованную ориентацию.

+0

Спасибо. Как определить ориентацию как 2 ортогональных вектора? – Rouhollah

+0

Ваша ориентация может быть определена любым способом. Вы можете определить вектор Z как направление «look», а Y - как «вверх». Вы определяете эти векторы по отношению к исходной системе координат. Затем вы можете преобразовать оба из них с помощью матриц вращения. –

+1

Это часто делается в 3d-графике. Возможно, это поможет: http://ogldev.atspace.co.uk/www/tutorial13/tutorial13.html –

Смежные вопросы