SimMechanics/Second Generation倒立摆模型建立及初步仿真学习
? ? 筆者最近搗鼓Simulink,發(fā)現(xiàn)MATLAB的仿真模塊真的十分強(qiáng)大,以前只是在命令窗口敲點(diǎn)代碼,直到不小心敲入simulink,就一發(fā)不可收拾。話說(shuō)simulink的模塊化建模確實(shí)方便,只要拖拽框框然后雙擊設(shè)置屬性就可以慢慢堆建自己的模型,這一點(diǎn)我很中意(*^__^*) 。
? ? 最近在學(xué)習(xí)一些控制理論,發(fā)現(xiàn)倒立擺是個(gè)不錯(cuò)的學(xué)習(xí)平臺(tái),開(kāi)始學(xué)習(xí)肯定需要機(jī)構(gòu)上面的運(yùn)動(dòng)學(xué)及動(dòng)力學(xué)建模,一直習(xí)慣Adams進(jìn)行運(yùn)動(dòng)仿真,但Adams安裝比較繁瑣。。。便想利用MATLAB代替仿真,順便學(xué)習(xí)了解下傳說(shuō)的simulink,直接搜查閱資料。發(fā)現(xiàn)Simscape里面的simmechanics就是運(yùn)動(dòng)仿真模塊。于是趕緊打開(kāi)俺的MATLAB2015b,敲入simulink再用力敲打回車(chē),就出現(xiàn)如下窗口。。。
一.新建一個(gè)模型New Model
?
? ? 新建模型將出現(xiàn)空白界面,所有建模要用的block都必須拖到該界面進(jìn)行設(shè)置和連接,因?yàn)槟K庫(kù)里Block特別的多,一個(gè)一個(gè)找真的特別麻煩,強(qiáng)烈建議記下常用block的名字,比如示波器scope,時(shí)鐘clock,階躍信號(hào)step等等等等,今后可以直接在模型空白處敲入字符,自動(dòng)檢索,真的是方便感人,如圖。
二.SimMechanics/First Generation模型
? ? 需要注意的是,SimMechanics庫(kù)分為First Generation和Second Generation,即第一代和第二代。
其實(shí)MATLAB幫助文檔里面很多demo值得學(xué)習(xí)理解,我簡(jiǎn)單了解了第一代模塊,跟著說(shuō)明建立了一個(gè)平面四連桿機(jī)構(gòu)模型,模塊框圖和仿真界面如下:
?
?
?難點(diǎn)就是body block的屬性設(shè)置,必須清楚了解坐標(biāo)系的建立,新建的CS(coordinate system)相對(duì)哪個(gè)坐標(biāo)平移,又相對(duì)哪個(gè)坐標(biāo)旋轉(zhuǎn)。其中World坐標(biāo)系是世界坐標(biāo)系,也就是絕對(duì)坐標(biāo)系,所有的坐標(biāo)系都是相對(duì)它而言的,所以說(shuō)這個(gè)模塊必不可少。
? ? 總之,模型的建立順序一般如圖,除了機(jī)械環(huán)境Env,其它的block連接都是坐標(biāo)系與坐標(biāo)系之間的連接,但body與body之間不能直接連接,必須通過(guò)joints確定兩者之間的連接副。最后的body與地面連接就形成閉環(huán)機(jī)構(gòu),也可以只出現(xiàn)一個(gè)Ground,即懸空機(jī)構(gòu),像單擺運(yùn)動(dòng),機(jī)械臂等只有基座與地面連接。當(dāng)然也可以body與body之間形成閉環(huán)。Joint/Body Actuator 是連接副和機(jī)構(gòu)驅(qū)動(dòng)器,發(fā)送信號(hào)可以向Joint或者body添加動(dòng)力或運(yùn)動(dòng);同理有Joint和Body的Sensor,即傳感器,可以利用scope示波器觀察Joint和body的受力情況和運(yùn)動(dòng)規(guī)律。
三.SimMechanics/Second Generation模型
?第二代模型比較直觀,可以直接建立幾何特征,solid代替了一代的body,可以直接從中設(shè)置很多屬性。參考MATLAB的demo模型,在使用 second generation建立機(jī)構(gòu)模型時(shí),必須添加的模塊有
1) ?solver configuration求解器配置塊,是進(jìn)行求解的必須模塊,雙擊可以配置具體求解方式。
2) ?world frame 世界坐標(biāo)系,其它一切坐標(biāo)系都要直接或間接與其連接。
3)mechanism configuration 機(jī)構(gòu)配置塊,雙擊打開(kāi)可以修改重力的大小和方向等。
?
? 為了建立倒立擺,我打算添加兩個(gè)構(gòu)件,一個(gè)是小車(chē)構(gòu)件,記為cart,質(zhì)量設(shè)置在重心處,與地面(世界坐標(biāo)系)為滑塊連接(移動(dòng)副),幾何外形簡(jiǎn)化為為長(zhǎng)方體;另一個(gè)是倒立桿構(gòu)件,記為pole,質(zhì)量在最高處,與小車(chē)進(jìn)行旋轉(zhuǎn)副連接,外形簡(jiǎn)化為圓柱體。
幾何體的建立模塊為solid,如下圖,參數(shù)編輯窗口分為Description和Properties兩欄,描述的內(nèi)容十分有閱讀價(jià)值,了解其屬性才能設(shè)置好具體參數(shù),以下是小車(chē)機(jī)構(gòu)的屬性設(shè)置:
?
? ? 小車(chē)構(gòu)件新建了一個(gè)Frames,在第二代SIMmechanics里面坐標(biāo)系用Frames表示,一個(gè)零件可以添加多個(gè)Frame,并且兩個(gè)Frame之間可以直接連線進(jìn)行剛性連接,中間可以不用joint進(jìn)行連接,如下圖,我把倒立桿的外形潤(rùn)色了一下:
現(xiàn)在的模塊窗口有以下Block,直接連接的話就是和World Frame作剛性連接,那么整個(gè)機(jī)構(gòu)將是靜止不動(dòng)的,所以接下來(lái)是Joint block的添加。
接下來(lái)是比較重要的連接模塊,即連接副的選擇,如下是庫(kù)里面提供的連接副:
?
單級(jí)直線倒立擺的機(jī)構(gòu)只需兩個(gè)連接副,即revolute joint(平面旋轉(zhuǎn)副)和prismatic joint(柱形滑塊副),將其拖入窗口進(jìn)行屬性設(shè)置和連接。屬性設(shè)置窗口如下:
如上圖所示,兩個(gè)副的設(shè)置窗口比較復(fù)雜,必須仔細(xì)閱讀Description里面的內(nèi)容,本模型設(shè)計(jì)了阻尼系數(shù),并且打開(kāi)了Sensing接口,這樣可以通過(guò)采集兩個(gè)副的位置,速度,加速度等運(yùn)動(dòng)參數(shù)。最后方框圖如下:
連接模塊直接進(jìn)行仿真的話會(huì)彈出如下窗口,重力的默認(rèn)方向是world frame的-z方向,所以模擬會(huì)發(fā)生異常,圖示整個(gè)機(jī)構(gòu)會(huì)自由落體向下。。。。
? ? 所以必須引入?yún)⒖枷的K,如下圖。這個(gè)才是設(shè)置難點(diǎn),因?yàn)槊總€(gè)坐標(biāo)系的連接和參考都不同,為了找到合適的方向和位移,必須記牢每個(gè)坐標(biāo)系關(guān)于世界坐標(biāo)系的方位,也可能是英語(yǔ)看的人頭疼,我在這里設(shè)置了好久。第一個(gè)rigid transform是讓移動(dòng)副相對(duì)world frame的+y方向旋轉(zhuǎn)90度,第二個(gè)rigid transform的引入是可以改變擺桿的初始位置。
?
?
連接后的模型框圖為
?
仿真界面如下
為了顯示運(yùn)動(dòng)參數(shù),可以添加示波器,不過(guò)示波器顯示的是信號(hào)量,必須將運(yùn)動(dòng)副的sensor接口連接到PS-Simulink Converter轉(zhuǎn)為信號(hào)量,如下圖:
?
?
?
仿真結(jié)果為
?
因?yàn)樵O(shè)置的初始角度為豎直向上,所以裝置靜止,信號(hào)穩(wěn)定輸出為水平線,所以接下來(lái)添加外力模塊如圖,同理需要將方波信號(hào)轉(zhuǎn)為物理信號(hào),模擬在一秒時(shí)給擺桿質(zhì)心一個(gè)推力,推力設(shè)置為x方向。
最后模型框圖為:
?
仿真結(jié)果如下:
?
?
?? ?由圖中可以得知,在1s時(shí)擺桿頂部球心處受到100N沿世界坐標(biāo)系+x持續(xù)0.5S的推力,產(chǎn)生的各種運(yùn)動(dòng)參數(shù)曲線可以直接在示波器中看到,因?yàn)闆](méi)有控制力的引入,擺桿會(huì)直接倒下。此時(shí)為了實(shí)現(xiàn)倒立擺的平衡,會(huì)在小車(chē)x方向添加一個(gè)控制力來(lái)保持平衡,接下來(lái)便是控制器的設(shè)計(jì),倒立擺的控制算法有很多,從經(jīng)典控制理論(傳遞函數(shù)),現(xiàn)代控制理論(狀態(tài)空間),一直到智能控制理論。每一個(gè)理論都可以用來(lái)控制倒立擺,可見(jiàn)倒立擺的控制實(shí)驗(yàn)是學(xué)習(xí)控制理論的最有效平臺(tái)。。。
? ? 為了初步設(shè)計(jì)控制器輸出控制力的信號(hào),我了解了自控理論最經(jīng)典的PID控制算法,得知其控制理念是直接采集被控變量進(jìn)行對(duì)比然后處理輸出(如下圖),只是參數(shù)的整定比較繁瑣,不過(guò)卻可以進(jìn)行初步的實(shí)驗(yàn)仿真,激發(fā)自己的學(xué)習(xí)興趣。PID控制器參考https://www.cnblogs.com/shangdawei/p/4825259.html。文中說(shuō)的很詳細(xì)。里面有程序流程圖教你寫(xiě)最簡(jiǎn)單的控制程序,筆者手頭剛好有12xs128的MCU、普通有刷直流電機(jī)和光電編碼器。根據(jù)流程,設(shè)計(jì)了電機(jī)的穩(wěn)定轉(zhuǎn)速控制器,不過(guò)難度依舊是參數(shù)的整定。好在MATLAB里關(guān)于PID的工具十分強(qiáng)大,里面的可視化工具包pidTuner,命令工具TuningGoal,systune等對(duì)于控制器的設(shè)計(jì)十分有幫助,最近一直在理解這幾個(gè)函數(shù)指令,自己也從中受益頗深,尤其考驗(yàn)對(duì)自控原理的理解掌握。。。理解后PID算法后,就可以在simulink下開(kāi)始控制倒立擺的平衡了,由于筆者整定參數(shù)還不太利索,經(jīng)歷多次嘗試后,擺桿還是會(huì)倒下。。。。慚愧啊。
以下是運(yùn)動(dòng)規(guī)律:
?
?
不過(guò)之后我發(fā)現(xiàn)MATLAB里面自帶了一個(gè)demo模型,在MATLAB命令窗口鍵入?InvertedPendulumExample即可打開(kāi)如下界面。可見(jiàn),此模型的控制方法是PID Controller和傳遞函數(shù)控制器綜合輸出為控制力F(其實(shí)角度控制也能用PID調(diào)節(jié),只要響應(yīng)夠快就能實(shí)現(xiàn)擺桿的平衡)。不過(guò)想要更好的控制倒立擺還是需要?jiǎng)恿Ψ治?#xff0c;將傳遞函數(shù)寫(xiě)出,進(jìn)行根軌跡找出極點(diǎn),確定好平衡位置。
?? ?
? ? 總之,Simulink對(duì)倒立擺的控制學(xué)習(xí)也提供了可視化的模擬。之后我打算以此模型為基礎(chǔ),添加不同控制器,學(xué)習(xí)基本控制理念。今后的大致框圖將擴(kuò)展成如下幾個(gè)區(qū)域(當(dāng)然可以整成一個(gè)subsystem):
(1)直線倒立擺模型
(2)干擾信號(hào)發(fā)生器
(3)參數(shù)采集顯示器
(4)不同控制調(diào)節(jié)器
?
轉(zhuǎn)載于:https://www.cnblogs.com/PHH5201314/p/8325657.html
總結(jié)
以上是生活随笔為你收集整理的SimMechanics/Second Generation倒立摆模型建立及初步仿真学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php时间操作函数总结,基于php常用函
- 下一篇: su室内插件_sketchup模型库+S