导入机器人后更改弹簧常数会导致问题

时间:2019-07-16 17:14:24

标签: python webots

我必须对模型腿的肌腱刚度进行优化。手动更改弹簧常数不会造成任何问题,并且物理模型似乎运行良好。当我尝试针对这些值进行优化时,就会出现问题。

由于这是一个优化问题,因此我必须运行仿真1.5秒钟,然后将机器人重置为初始状态,并且弹簧常数略有不同。为此,我将机器人模型保存为“ Robot.wbo”文件。在每次优化迭代的最后,我将删除现有的机器人节点,并使用“ def importMFNode”创建一个新的机器人节点,该节点将在初始状态下创建该机器人。在每次新迭代的开始,我都会设置新的弹簧常数,并设置这些常数会导致模型异常运行。我已将问题固定在这两行。

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

这两条线的全部作用是更改两个滑块接头的弹簧常数。如果使用这两个命令执行此操作,则模型将失败。如果我手动执行此操作,那么它将起作用。

它不是模型的正常运行,而是行为失常,而不是应有的行为。但是,如果我在由主管代码导入后立即手动制作机器人节点的新副本,并删除了旧节点,则机器人的行为应与预期相同。

1 个答案:

答案 0 :(得分:2)

我不确定为什么这行不通,也许缺少global physics reset

但是可以肯定的是,您卸载/重新加载机器人的方法很繁琐,可以轻松简化。 有多种重置机器人的解决方案,它们更简单,因此可能会更好地工作。

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