Вопрос относительно текущего кода обратной кинематики Дрейка - PullRequest
2 голосов
/ 03 августа 2020

Я просматривал несколько статей по планированию обратной кинематики с предотвращением столкновений для руки робота c. Я нашел этот документ под названием «Глобальная обратная кинематика через смешанную-целочисленную выпуклую оптимизацию», в котором, как мне кажется, есть имена нескольких разработчиков Дрейка.

В этой статье говорится, что код уже является частью Drake . Однако, когда я его нашел, код был помещен в atti c. (https://github.com/RobotLocomotion/drake/blob/master/attic/multibody/global_inverse_kinematics.h)

В текущем примере руки kuka под move_iiwa_ee вместо этого используется код IK, называемый ConstraintRelaxingIk.

  1. Я бы хотел чтобы узнать, почему IK-код «Глобальная обратная кинематика через смешанно-целочисленную выпуклую оптимизацию» был отложен в сторону и возникли ли с ним какие-либо проблемы.

  2. Кроме того, я не уверен если текущий ConstraintRelaxingIk предотвращает столкновения. Может кто-нибудь прояснить это?

(И если да, есть ли какие-то дополнительные шаги, кроме вставки модели препятствия?)

Спасибо

1 Ответ

2 голосов
/ 03 августа 2020

Благодарим за интерес к нашей работе.

Глобальный код обратной кинематики находится в папке attic, потому что он использует RigidBodyTree, который скоро будет устаревшим. У меня пока нет времени переписывать код для использования нового MultibodyTree. На данный момент, если вы хотите опробовать подход в глобальной статье по IK, не могли бы вы использовать код из папки attic? Я попытаюсь переместить код из папки attic, чтобы использовать MultibodyTree.

ConstraintRelaxingIk не поддерживает предотвращение столкновений. С другой стороны, вы можете использовать класс InverseKinematics . Он формулирует IK как задачу нелинейной оптимизации и вызывает нелинейный решатель для поиска решения. В частности, для предотвращения столкновений вы можете использовать AddMinimumDistanceConstraint , чтобы наложить ограничение на минимальное расстояние между всеми парами геометрий. В качестве альтернативы вы можете вызвать AddDistanceConstraint , если вы хотите наложить ограничение расстояния между заданной парой c геометрий. Я бы на самом деле рекомендовал сначала попробовать класс InverseKinematics, прежде чем вы попробуете глобальный подход IK, поскольку InverseKinematics использует MultibodyPlant и обычно работает быстрее, чем глобальный подход.

Кстати, формулировка, используемая в InverseKinematics класс описан в разделах II.B и II. C данной бумаги

...