欠驱动系统逆动力学控制器使用及Drake双plant配置问题咨询
报错原因说明
- 直接原因是方法名拼写错误,你代码中写的
RegsterAsSourceForSceneGraph漏了字母i,正确方法名为RegisterAsSourceForSceneGraph,该方法在Drake Python绑定中完全可用,修正拼写即可解决该属性不存在报错。 - 额外隐藏问题:你定义的
register_plant_with_scene_graph函数未将builder作为参数传入,内部直接调用全局builder会存在作用域风险,建议同步修正函数参数列表。 - 修正后的代码参考:
def register_plant_with_scene_graph(builder, scene_graph, plant): plant.RegisterAsSourceForSceneGraph(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(builder, scene_graph, plant_1) plant_2 = builder.AddSystem(MultibodyPlant(time_step=0.0)) register_plant_with_scene_graph(builder, scene_graph, plant_2) # 两个plant完成模型加载后必须调用Finalize完成初始化 # plant_1.Finalize() # plant_2.Finalize()
浮动基逆动力学方案合理性说明
- 该方案是当前Drake下实现浮动基机械臂逆动力学控制的标准可行方案。
- 实现逻辑为拆分两个MultibodyPlant的职责:
- 第一个plant构建带浮动基的真实欠驱动机器人模型,用于状态采集、仿真/硬件交互
- 第二个plant构建固定基座的同构型全驱动机器人模型,专门用于逆动力学解算,规避原生逆动力学控制器不支持欠驱动系统的限制
- 实现注意事项:两个plant的运动学、动力学参数必须完全一致,逆动力学解算得到的扭矩仅需要作用于真实plant的主动关节即可,忽略浮动基虚拟自由度对应的输出扭矩。
内容的提问来源于stack exchange,提问作者Amy
相关产品推荐
相关产品推荐

