我正试图在带有浮动底座的手臂上使用Drake的逆动力学控制器,基于这一讨论,似乎最简单的方法是使用两个独立的设备,因为控制器只支持全驱动系统。
在pyDrake中将两个植物添加到场景图时出现Python绑定错误后,我尝试使用以下代码创建两个植物:
def register_plant_with_scene_graph(scene_graph, plant):
plant.RegsterAsSourceForSceneGraph(scene_graph)
builder.Connect(
plant.get_geometry_poses_output_port(),
scene_graph.get_source_pose_port(plant.get_source_id()),
)
builder.Connect(
scene_graph.get_query_output_port(),
plant.get_geometry_query_input_port(),
)
builder = DiagramBuilder()
scene_graph = builder.AddSystem(SceneGraph())
plant_1 = builder.AddSystem(MultibodyPlant(time_step=0.0))
register_plant_with_scene_graph(scene_graph, plant_1)
plant_2 = builder.AddSystem(MultibodyPlant(time_step=0.0))
register_plant_with_scene_graph(scene_graph, plant_2)
产生错误
AttributeError: 'MultibodyPlant_[float]' object has no attribute 'RegsterAsSourceForSceneGraph'
这似乎很奇怪,因为根据文档,函数应该存在。
这个函数在drake的python绑定中可用吗?此外,更广泛地说,这是在自由浮动机械手上使用逆动力学控制器的正确方法吗?
反向动力学获取所需的位置、速度和加速度,并计算所需的扭矩。如果你的机器人有一个浮动底座,那么你就不能接受任意的加速命令。例如,你的机器人的总质心将根据重力下降;任何不满足这一要求的加速度都不具有逆动力学的可行解。我认为,关于你的问题表述,我们还需要了解更多的东西。
通常,当人们问这个问题时,他们想到的是一个机器人,它除了依靠广义的力/力矩外,还依靠接触力来实现所需的加速度。在这种情况下,问题也需要将这些接触力作为决策变量。由于接触力具有单向约束(例如,脚不能在地面上拉动(和摩擦锥约束,因此该逆动力学问题几乎总是被公式化为二次规划。例如,如本文所述。我们目前没有在Drake中提供QP公式,但针对MathematicalProgram
接口编写它并不困难。我们确实有一些从Drake中删除的旧代码(因为它没有被积极开发(,如果有帮助的话,我们可以向您指出。