如何在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
相关产品推荐
相关产品推荐

