You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从MakeManipulationStation()中获取MultibodyPlant对象

你调用的MakeManipulationStation()返回值是Diagram类型,并非ManipulationStation类实例,因此没有get_multibody_plant()成员方法,才会触发属性不存在的报错。


方法1:按子系统名称直接获取

默认创建的ManipulationStation Diagram里,MultibodyPlant的子系统名称为multibody_plant,可以直接通过GetSubsystemByName方法获取:

builder = DiagramBuilder()
station = builder.AddSystem(MakeManipulationStation())
plant = station.GetSubsystemByName("multibody_plant")

如果不确定当前子系统的命名,可以执行以下代码打印所有子系统名称核对:

for sub in station.GetSystems():
    print(sub.get_name())

方法2:修改MakeManipulationStation返回值(可选)

如果你可以修改MakeManipulationStation()的实现,可以调整函数逻辑,将构建好的Diagram和对应的plant同时返回:

# 修改后的MakeManipulationStation函数内部逻辑示例
def MakeManipulationStation(...):
    builder = DiagramBuilder()
    station = builder.AddSystem(ManipulationStation())
    station.SetupClutterClearingStation()
    station.Finalize()
    plant = station.get_multibody_plant()
    diagram = builder.Build()
    # 同时返回diagram和plant对象
    return diagram, plant

调用时直接拿到plant对象即可:

builder = DiagramBuilder()
station, plant = MakeManipulationStation()
builder.AddSystem(station)

注意事项

所有对MultibodyPlant的修改(加载URDF、添加碰撞属性等)都必须在Diagram Finalize之前完成,Diagram构建完成后无法再修改plant的配置。

内容的提问来源于stack exchange,提问作者Carlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:15:03