《機器人自動化:建模、仿真與控製》一一2.3仿真
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)
最後更新:2017-08-17 12:02:39
上一篇:
《機器人自動化:建模、仿真與控製》一一2.4習題
下一篇:
《程序員度量:改善軟件團隊的分析學》一案例分享:度量和懷疑論者
CentOS安裝使用vnc進行遠程桌麵登錄
關於Fintech的九個預言
雲上Docker的Spring Cloud微服務應用實踐分享
Tomcat啟動web項目報Bad version number in .class file (unable to load class ...)錯
android View中如何判斷長按事件
Ogre:Animation(Ogre中的動畫)
在32位Windows XP的VMWare裏安裝64位Ubuntu Linux/JDK1.6
曾鳴:為什麼要讓「聽得見炮火的士兵」做決定?| 幹貨
Universal Image Loader for Android 使用實例
Windows XP遠程桌麵多用戶登陸實現