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

如何在Diagram上下文正确获取修改后的机器人Body质量值?

修改连杆质量后在控制器中获取更新值的问题

我需要在每次试验中修改连杆(link)的质量,以此统计关节最大扭矩。

加载机器人模型后,执行以下代码获取默认质量:

m1 = plant.GetBodyByName('linear_slide').get_mass(plant_context)

得到预期的默认值 m1 = 1.66。

随后执行以下代码修改质量:

diagram = builder.Build()
diagram_context = diagram.CreateDefaultContext()
plant_context = diagram.GetMutableSubsystemContext(plant, diagram_context)

plant.GetBodyByName('linear_slide').SetMass(plant_context, 10)

此时检查该Body的质量,确认已更新为设定的10。

我的控制器类直接接收系统并从中提取所有组件,但不知道如何从系统上下文中提取上述修改后的质量。例如执行以下代码:

pp = diagram.GetSubsystemByName('plant')
cc = diagram.CreateDefaultContext()

pp.GetBodyByName('linear_slide').get_mass(cc)

无法获取更新后的值,这是因为调用的是默认上下文而非修改后的可变上下文。

我尝试过使用 diagram.GetMyMutableContextFromRoot(),但该方法需要根上下文,而根上下文仍是默认上下文。

请问:

  • 是否存在修改Plant中Body质量并使其在系统上下文中生效的方法?
  • 另一种解决办法是在系统传入控制器后作为子步骤修改质量,但这不属于控制器类的职责,有没有更合理的方式?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:17:35