2.3仿真
本节介绍用积分法对下述状态方程描述的非线性系统进行计算机仿真:
该方法是一种近似法,但容易理解,并且对于描述大多数机器人系统的行为是足够的。
2.3.1欧拉法
令dt表示对于系统时间常数而言很小的数值,对应欧拉法的采样周期(例如dt=001),演化方程可以由下式近似表示:
x(t+dt)-x(t)dt≈f(x(t),u(t))
换言之:
x(t+dt)≈x(t)+f(x(t),u(t))·dt
该方程可以理解为1阶泰勒公式,由此可以推导仿真算法(称为欧拉法):
定时器周期性地每隔dt秒产生一个中断,因此如果计算机足够快,可以以实际的物理系统速度进行仿真,这称为实时仿真。有些情况下,我们希望以最短的时间获得仿真结果(例如,为了预测一个系统的未来行为)。在这种情况下,不需要为了与物理时间同步而减慢计算机的速度。
局部误差可以表示为:
et=‖x(t+dt)-x∧(t+dt)‖, 其中, x(t)=x∧(t)
式中,x(t+dt)是微分方程x·=f(x,u)的精确解,x∧(t+dt)是积分法中用到的状态向量的近似值。对于欧拉法而言,et是1阶的,即et=o(dt)。
2.3.2龙格库塔法
有更为有效的积分法,其局部误差是二阶或更高阶,如二阶龙格库塔法,只需要把x∧(t+dt):=x∧(t)+fx∧(t),u(t)·dt替换为:
x∧(t+dt)=x∧(t)+dt·14·f(x∧(t),u(t))
+34·f(x∧(t)+23dt·f(x∧(t), u(t)),x∧
Et+23dtut+23dt)
注意,在该表达式中,x∧Et+23dt可以理解为用欧拉法在时间t+23dt进行积分得到的值。方括号内是f(x(t),u(t))的估计值和fx∧t+23dt, ut+23dt的估计值的平均值。其局部误差et是二阶的,因此该积分法具有更好的精度。本节不会讨论比二阶更高阶数的龙格库塔法。
233泰勒法
欧拉法(实际上是1阶泰勒法)可以扩展到更高的阶数。在不失普遍性的前提下,让我们来看看如何扩展到二阶。我们有:
x(t+dt)=x(t)+x·(t)·dt+x··(t)·dt2+o(dt2)
但:
x·(t)=f(x(t),u(t))
x··(t)=fx(x(t),u(t))·x·(t)+fu(x(t),u(t))·u·(t)
因此,积分方法变为:
x∧(t+dt)=x∧(t)+dt·f(x∧(t),u(t))+
dt2·fx(x∧(t),u(t))·f(x∧(t),u(t))+fu(x∧(t),u(t))·u·(t)