#drake
#drake
Вопрос:
Я использую pydrake с urdf HSR от Toyota.
Я хочу использовать класс DifferentialInverseKinematicsIntegrator.
Когда я попытался инициализировать решатель, я передал класс BodyFrame в качестве параметра frame конструктора.
Выдает следующую ошибку несовместимости
TypeError: __init__(): incompatible constructor arguments. The following argument types are supported:
1. pydrake.manipulation.planner.DifferentialInverseKinematicsIntegrator(robot: pydrake.multibody.plant.MultibodyPlant_[float], frame_E: pydrake.multibody.tree.Frame_[float], time_step: float, parameters: pydrake.manipulation.planner.DifferentialInverseKinematicsParameters, robot_context: pydrake.systems.framework.Context_[float] = None, log_only_when_result_state_changes: bool = True)
Invoked with: <pydrake.multibody.plant.MultibodyPlant_[float] object at 0x7f0633be88b0>, <BodyFrame_[float] name='hand_palm_link' index=31 model_instance=2>, <pydrake.manipulation.planner.DifferentialInverseKinematicsParameters object at 0x7f0633be8630>, 0.01, <pydrake.systems.framework.LeafContext_[float] object at 0x7f0633be84b0>, True
Как я приобрел BodyFrame:
gripper = plant.GetBodyByName('hand_palm_link')
gripper_frame = gripper.body_frame()
и gripper_frame
был передан в конструктор в качестве frame_E: drake::multibody::Frame<double>
аргумента, указанного в документе python.
Насколько я понимаю, BodyFrame является дочерним классом класса Frame, поскольку вы можете получить BodyFrame из объекта Frame.
примечание: результат тот же, когда я использовал plant.GetFrameByName('hand_palm_link')
Я искал документ и не смог найти способ расширить класс BodyFrame в класс Frame
Это также может быть pydrake.systems.framework.LeafContext_[float]
несоответствие, pydrake.systems.framework.Context_[float]
но я уже тестировал с контекстом по умолчанию, и ошибка сохранялась.
Кто-нибудь сталкивался с этой проблемой раньше? Я недостаточно хорошо разбираюсь в drake, чтобы знать, как получить объект фрейма, связанный напрямую с определенной ссылкой. Любая помощь очень ценится. 🙂
Ответ №1:
При беглом взгляде (так что я могу ошибаться) он выглядит time_step
и params
передается в неправильном порядке. Попробуйте поменять их местами?