BodyFrame Class 作为 DifferentialInverseKinematicsIntegrator 的构造函数参数不兼容

BodyFrame Class incompatible as argument of constructor for DifferentialInverseKinematicsIntegrator

我正在使用 pydrake 和丰田 HSR 的 urdf。

我想使用 DifferentialInverseKinematicsIntegrator class。

当我尝试初始化求解器时,我传递了一个 BodyFrame class 作为构造函数的框架参数。

出现以下不兼容错误

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 作为 python 文档中指定的 frame_E: drake::multibody::Frame<double> 参数传递给构造函数。

据我了解,BodyFrame 是 Frame class 的子 class,因为您可以从 Frame 对象中获取 BodyFrame。

注意:我用plant.GetFrameByName('hand_palm_link')

的结果是一样的

我搜索了文档,但未能找到将 BodyFrame class 扩展为 Frame class

的方法

也可能是 pydrake.systems.framework.LeafContext_[float]pydrake.systems.framework.Context_[float] 不匹配,但我已经使用默认上下文进行了测试,错误仍然存​​在。

有没有人遇到过这个问题?我不太精通德雷克,不知道如何直接获取与特定 link 关联的 Frame 对象。任何帮助深表感谢。 :)

快速浏览一下(所以我可能会弄错),似乎 time_stepparams 的传递顺序错误。试试交换它们?