Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入robot后更改弹簧常数会导致问题_Python_Webots - Fatal编程技术网

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

Python 导入robot后更改弹簧常数会导致问题,python,webots,Python,Webots,我必须对模拟腿部的肌腱刚度进行优化。手动更改弹簧常数不会导致任何问题,物理模型似乎运行良好。当我尝试优化这些值时,问题就出现了 由于这是一个优化问题,我必须运行模拟1.5秒,然后用稍微不同的弹簧常数将机器人重置为初始状态。为此,我将机器人模型保存为“robot.wbo”文件。在每次优化迭代结束时,我删除现有的robot节点,并使用“def importMFNode”创建一个新的robot节点,该节点在初始状态下创建robot。在每个新迭代开始时,我会设置新的spring常量,设置这些常量会导致模

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

由于这是一个优化问题,我必须运行模拟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节点后立即手动创建一个新副本,并删除旧副本,则robot的行为将与预期的一样。

我不确定这为什么不起作用,可能是缺少一个

但是可以肯定的是,你卸载/重新装载机器人的方法很重,而且很容易简化。 有几种重置机器人的解决方案更简单,因此可能工作得更好

  • 您可以在迭代结束时使用。在调用物理重置函数之前更改弹簧常数似乎是一个安全的想法
  • 您可以修改和更改弹簧常数
  • 您可以保持方法的原样,但在加载之前更改Robot.wbo中的弹簧(使用基本模板引擎,只需简单的搜索和替换即可)

  • 我不知道为什么这不起作用,也许是因为缺少了一个

    但是可以肯定的是,你卸载/重新装载机器人的方法很重,而且很容易简化。 有几种重置机器人的解决方案更简单,因此可能工作得更好

  • 您可以在迭代结束时使用。在调用物理重置函数之前更改弹簧常数似乎是一个安全的想法
  • 您可以修改和更改弹簧常数
  • 您可以保持方法的原样,但在加载之前更改Robot.wbo中的弹簧(使用基本模板引擎,只需简单的搜索和替换即可)

  • 谢谢在Robot.wbo内更换弹簧修复了该问题!谢谢在Robot.wbo内更换弹簧修复了该问题!