我必须对模型腿的肌腱刚度进行优化。手动更改弹簧常数不会导致任何问题,并且物理模型似乎运行良好。当我尝试针对这些值进行优化时,问题就出现了。
由于这是一个优化问题,我必须运行模拟 1.5 秒,然后将机器人重置为其初始状态,弹簧常数略有不同。为此,我将机器人模型保存为“Robot.wbo”文件。在每次优化迭代结束时,我删除现有的机器人节点并使用“def importMFNode”创建一个新的机器人节点,从而创建处于初始状态的机器人。在每次新迭代开始时,我会设置新的弹簧常数,设置这些会导致模型出现意外行为。我已将问题归结为这两行。
knee_spring_constant.setSFFloat(int(x[2]))
heel_spring_constant.setSFFloat(int(x[3]))
这两条线所做的就是改变两个滑块接头的弹簧常数。如果我使用这两个命令执行此操作,模型将失败。如果我手动操作,它可以工作。
而不是模型表现正常,它只是表现不规律而不像它应该的那样。但是,如果我在主管代码导入机器人节点后立即手动制作它的新副本,并删除旧的,机器人会按预期运行。