Мои исследования говорят, что кватернион формы (x, y, z, w) описывает вращение только в трехмерном пространстве. Как робот узнает, в какую позицию двигаться, если он получает только информацию о вращении?
Правильно, кватернион описывает ориентацию кадра только ; вам также нужно указать положение кадра, чтобы иметь позу complete . Quaternion - это просто другой способ описания ориентации тела, другой способ, как вы уже упоминали, использовать Углы Эйлера (Yaw, Pitch, Roll).
В вашем случае с вашим объектом pose_goal
вам нужно указать положение желаемой позы / позы робота, установив компоненты x
, y
и z
для pose_goal.position
(это позиция робота в трехмерном пространстве) а затем также укажите ориентацию желаемой позы робота / цели, используя нотации Quaternion w
, x
, y
и z
для установки компонентов pose_goal.orientation
(обратите внимание, что x
, y
и z
часть кватерниона не совпадает с вашим вектором позиции, это разные вещи). Как только вы определили и pose_goal.position
, и pose_goal.orientation
, все готово, у вас есть полная поза, которую вы можете отправить MoveIt! планировать и выполнять.
Можно ли преобразовать из (x, y, z, roll, pitch, yaw) в кватернион? Или они описывают две разные вещи?
Здесь, x, y, z
, это ваш вектор положения, который не имеет ничего общего с ориентацией (и, следовательно, с кватернионами), поэтому ваш вопрос действительно должен быть " Могу ли я преобразовать углы Эйлера (крен, тангаж, рыскание) в кватернион? " и ответ: да, вы можете преобразовать углы Эйлера в кватернион, но это может быть сложно. Если вы можете представить ориентацию с помощью кватерниона (то есть, если у вас уже есть эта информация), вы должны использовать ее, так как кватернионы являются более численно устойчивыми и не страдают от особенностей (например, углы Эйлера могут вызвать блокировку карданного подвеса, если под указанным c конфигурация вашей системы теряет степень свободы.)
Если у вас есть доступ к кватерниону, используйте его и забудьте об углах Эйлера, иначе вы можете попробовать преобразовать углы Эйлера в кватернион, используя следующую способ использования библиотеки tf
ROS:
from tf.transformations import quaternion_from_euler
# Pose Position
pose_goal.position.x = x_coordinate
pose_goal.position.y = y_coordinate
pose_goal.position.z = z_coordinate
# Pose Orientation
quaternion = quaternion_from_euler(roll_angle, pitch_angle, yaw_angle)
pose.orientation.x = quaternion[0]
pose.orientation.y = quaternion[1]
pose.orientation.z = quaternion[2]
pose.orientation.w = quaternion[3]
move_group.set_pose_target(pose_goal)
plan = move_group.go(wait=True)
См. tf.transformations.quaternion_from_euler(ai, aj, ak, axes='sxyz')
, где ai
, aj
, ak
- крен, шаг и рыскание соответственно и axes
параметр определяет порядок применения углов (что очень важно)
(сам не проверял, но может стоить усилий)
Может ли кто-нибудь предоставить непонятные термины объяснение описания вращения (3D) с кватернионом (4D)?
Кватернионы немного сложны, но я Вот отличное видео здесь , объясняющее их в интерактивной форме. В целом, и, по моему опыту, Quaternions вначале может быть немного разочаровывающим, и вам может показаться, что сначала трудно понять эту концепцию, так что имейте это в виду, изучая их, и наберитесь терпения!