导入robot后更改弹簧常数会导致问题

2024-05-29 10:39:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须对一只模拟腿的肌腱刚度进行优化。手动更改弹簧常数不会引起任何问题,物理模型似乎工作得很好。当我试图优化这些值时,问题就出现了

由于这是一个优化问题,我必须运行模拟1.5秒,然后将机器人重置为初始状态,弹簧常数略有不同。为此,我将机器人模型保存为“robot.wbo”文件。在每次优化迭代结束时,我移除现有的robot节点,并使用“def importMFNode”创建一个新的robot节点,该节点在初始状态下创建robot。在每个新的迭代开始时,我会设置新的spring常量,设置这些常量会导致模型的行为出人意料。我已经把这个问题限制在这两条线上了

knee_spring_constant.setSFFloat(int(x[2]))
heel_spring_constant.setSFFloat(int(x[3]))

这两条线所做的就是改变两个滑块关节的弹簧常数。如果我使用这两个命令,模型就会失败。如果我手动操作,它就会工作

模型的行为不是正常的,而是不稳定的,不像它应该的那样。但是,如果我在robot节点被supervisor代码导入后立即手动创建一个新的副本,并删除旧的副本,robot的行为将与预期的一样


Tags: 模型节点副本常数机器人robot手动弹簧
1条回答
网友
1楼 · 发布于 2024-05-29 10:39:12

我不知道为什么这不起作用,可能是global physics reset丢失了

但可以肯定的是,你的方法卸载/重新加载机器人是沉重的,可以很容易地简化。 有几种方法可以重置一个机器人,它们更简单,因此可能工作得更好

  1. 您可以在迭代结束时reset the robot position and its physics。在调用物理重置函数之前更改弹簧常数似乎是一个安全的想法
  2. 您可以reset the entire simulation并更改弹簧常数
  3. 您可以保持方法的原样,但是在加载Robot.wbo之前更改它内部的弹簧(使用基本模板引擎,简单的搜索和替换就可以完成这项工作)

相关问题 更多 >

    热门问题