在 PyFMI 中将手推车问题模拟为 FMU 时,我得到不同的结果,给出相同的输入,具体取决于我是使用“模型交换”还是“协同模拟”。ME结果是正确的,CS结果似乎完全不正确。
模型交换结果
model = load_fmu(fmu='CartPole.fmu',
kind='ME')
model.set('theta_0', 0)
model.set('m_cart', 20)
model.set('m_pole', 5)
model.set('length', 2)
model.set('poleCartConnection.density', 0)
model.set('f', 0)
res = model.simulate(start_time=0, final_time=10)
plt.plot(res['f'])
plt.plot(res['x'])
plt.plot(res['x_dot'])
plt.plot(res['theta'])
plt.plot(res['theta_dot'])
plt.legend(['f', 'x', 'x_dot', 'theta', 'theta_dot'])
plt.show()
相比(即完全相同,但使用 CS 而不是 ME)
model = load_fmu(fmu='CartPole.fmu',
kind='CS')
model.set('theta_0', 0)
model.set('m_cart', 20)
model.set('m_pole', 5)
model.set('length', 2)
model.set('poleCartConnection.density', 0)
model.set('f', 0)
res = model.simulate(start_time=0, final_time=10)
plt.plot(res['f'])
plt.plot(res['x'])
plt.plot(res['x_dot'])
plt.plot(res['theta'])
plt.plot(res['theta_dot'])
plt.legend(['f', 'x', 'x_dot', 'theta', 'theta_dot'])
plt.show()
使用默认 ncp 的联合仿真结果
我怀疑它是由于求解器设置,但这些不能在 CS 案例中设置?当我将“ncp”设置为非常高的数字时,错误会减少。非常感谢您的回复!
具有高 ncp 的联合仿真结果
干杯