MATLAB - 用MATLAB仿真機(jī)械控制系統(tǒng)

姓名:崔哲琪

學(xué)號:16040120090

轉(zhuǎn)載自https://zhuanlan.zhihu.com/p/25006094?

【嵌牛導(dǎo)讀】

仿真不是件容易的事,一方面可能要進(jìn)行繁瑣的公式推導(dǎo)和計(jì)算(而且特別容易出錯,錯了還不容易找出問題)。另一方面又需要寫大量的程序(特別是要有視覺效果的時候)。今天我來介紹一種工作流程來繞開這兩個麻煩,它特別適用于機(jī)械系統(tǒng)的控制和仿真。

【嵌牛鼻子】MATLAB,仿真,機(jī)械系統(tǒng),控制

【嵌牛提問】

用MATLAB怎么仿真機(jī)械控制系統(tǒng)呢?

【嵌牛正文】

仿真對于控制方向的研究和開發(fā)有多重要就不用強(qiáng)調(diào)了。不管是寫paper還是開會做presentation,有個看起來很cool的仿真都是有幫助的。如果能快速的搭建仿真,還能幫著在研究的前期快速驗(yàn)證idea是否可行。

然而進(jìn)行仿真總不是簡單的事情。一方面可能要進(jìn)行繁瑣的公式推導(dǎo)和計(jì)算(而且特別容易出錯,錯了還不容易找出問題)。另一方面又需要寫大量的程序(特別是要有視覺效果的時候)。今天我來介紹一種工作流程來繞開這兩個麻煩,它特別適用于機(jī)械系統(tǒng)的控制和仿真。這里需要用到的是Simscape multibody (以前叫Simmechanics) 和 Simulink Control Design工具箱。

為了簡單起見,起到拋磚引玉的作用,我們就制作一個最簡單的機(jī)械系統(tǒng) -- 倒立擺 -- 的仿真。特別注明我用的是MATLAB R2015b. 其它版本的MATLAB可能略有差異。

首先,打開一個新的Simulink模型,里面帶有一些常用的Simmechanics模塊。輸入如下命令

>> smnew

圖片發(fā)自簡書App

圖片發(fā)自簡書App

你會看到兩個彈出來的窗口。一個是空的模型,一個是Simmechanics的library.

我們現(xiàn)在來創(chuàng)建倒立擺的桿,為此,雙擊Solid模塊,修改一下它的長寬高. 注意單位我用的是厘米。

圖片發(fā)自簡書App

在初始的坐標(biāo)系下,整個環(huán)境的重力是作用在z軸的負(fù)方向上,現(xiàn)在我們要把它挪到y(tǒng)軸的負(fù)方向上。后面會解釋原因。為此,雙擊打開那個畫著扳手的Mechanism Configuration模塊,把重力加速度改成如下圖所示。

圖片發(fā)自簡書App

現(xiàn)在給系統(tǒng)添加一個Revolute Joint模塊,然后按下圖接起來。這樣桿就可以轉(zhuǎn)了。

圖片發(fā)自簡書App

Solid的??斓淖鴺?biāo)中心在它的幾何中心,可是我們希望桿不是圍著自己的中心轉(zhuǎn),而是繞著一端轉(zhuǎn)。因此上圖中Revolute關(guān)節(jié)和Solid之間被加上了一個Rigid Transform模塊(注意B和F不要搞反)。它可以用來把原來位于桿中心的坐標(biāo)原點(diǎn)平移到桿的一端。具體說來,我們可以設(shè)置Rigid Transform模塊的參數(shù)如下

圖片發(fā)自簡書App

對于Revolute Joint模塊,它是圍繞Z軸旋轉(zhuǎn)的,這就解釋了為什么剛才要把重力移動到y(tǒng)軸。(當(dāng)然了,也可以保持重力在Z軸不變,而通過額外的坐標(biāo)變換來旋轉(zhuǎn)Joint的坐標(biāo))?,F(xiàn)在打開Revolute Joint, 設(shè)定角度的初始值位0,讓桿正好處于倒立位置

圖片發(fā)自簡書App

好了,現(xiàn)在運(yùn)行Simulink模型,在Mechanics Explorers窗口里,我們能看到一根桿直立在那里。不一會兒,它就會倒下來蕩來蕩去的。

圖片發(fā)自簡書App

現(xiàn)在我們來對它設(shè)計(jì)控制器。

首先,再次雙擊Revolute Joint模塊, 創(chuàng)建一個力矩的輸入口,和兩個角度和角速度的測量口。

圖片發(fā)自簡書App

現(xiàn)在模塊應(yīng)該變成這樣了

圖片發(fā)自簡書App

我們把PS-Simulink Converter復(fù)制一個,把示波器刪了,然后按下圖接起來。這幾個PS-S和S-PS模塊的作用是把Simulink的信號和Simscape的物理信號進(jìn)行轉(zhuǎn)化。這樣在Simulink層面我們就可以設(shè)計(jì)控制器了。其實(shí)現(xiàn)在要設(shè)計(jì)的控制器就是下圖中Gain模塊的參數(shù)K.

圖片發(fā)自簡書App

Gain模塊先這樣設(shè)置。

圖片發(fā)自簡書App

為了設(shè)計(jì)控制器,我們首先需要知道系統(tǒng)的動態(tài)是什么。如果沒有任何工具的情況下,只能通過手算進(jìn)行推導(dǎo)和建模。對于這樣小的系統(tǒng)也許可以,但是如果問題很復(fù)雜,那計(jì)算和推導(dǎo)過程就變得非常繁瑣了。

當(dāng)然,如果你明智的購買和安裝了Simulink Control Design工具箱,那一切都會非常的簡單。這個工具箱的使用流程大致如下

第一步,在模型上標(biāo)記輸入和輸出。右鍵點(diǎn)擊Gain左邊的信號,然后如下選擇。

圖片發(fā)自簡書App

類似的,把Gain后邊的信號標(biāo)記為Output measurement。設(shè)置好以后看起來是這樣的

圖片發(fā)自簡書App

第二步,我們來把模型保存一下,存成BeamAndBall15b.slx. 然后回到MATLAB命令行,輸入

>> k = [0 0];

>> mdl = 'BeamAndBall15b';

>> sys = linearize(mdl, getlinio(mdl))

然后一個線性化的狀態(tài)空間模型就得到了。這里可以看出linearize是一個非常強(qiáng)大的函數(shù),關(guān)于它的更多信息請參考文檔:Linear approximation of Simulink model or subsystem

另外注意到Linearize取的是一個開環(huán)的狀態(tài)空間模型,因?yàn)槲覀儤?biāo)記的輸入是一個openloop input. 這些標(biāo)記對于仿真沒有影響,只對于分析有影響。

接著,我們來設(shè)計(jì)一個簡單的LQR控制器好了。在命令行輸入

>> k = -lqr(sys.A, sys.B, diag([1 1]),1);

然后,就可以運(yùn)行模型了。這根桿現(xiàn)在會一直保持直立。為了驗(yàn)證控制效果,我們可以把初值的位置偏移一下再仿真

圖片發(fā)自簡書App

你會看到桿子逐漸直立了起來。除了從動畫看效果,還能打開Simscape的viewer來查看仿真軌跡。Viewer可以從這里打開

圖片發(fā)自簡書App

仿真之后會彈出這樣一個窗口

圖片發(fā)自簡書App

好了,以上就是最基本的使用Simulink Control Design 工具箱和Simscape Multibody (以前叫Simmechanics)進(jìn)行控制器設(shè)計(jì)和仿真的最基本過程了。

在此可以稍稍總結(jié)一下用Simscape Multibody (SM) 和Simulink Control Design (SCD) 進(jìn)行仿真的幾個好處。

從建模方面看,用SM可以很方便的組裝出一個復(fù)雜的機(jī)械系統(tǒng)。而且組裝的過程中只要知道部件之間的相對坐標(biāo)即可,不需要去計(jì)算每個狀態(tài)的絕對坐標(biāo)是多少。換句話說,可以不用像傳統(tǒng)的控制仿真,不需要寫出整個系統(tǒng)的微分方程模型。

從控制器設(shè)計(jì)方面看, 設(shè)計(jì)控制參數(shù)只用了兩條MATLAB語句。沒有進(jìn)行什么直接的數(shù)值計(jì)算。

從整體上看,當(dāng)模型某個部件需要修改,或者模型整體需要改動的時候,不會影響這個工作流程的其它環(huán)節(jié)。只需要方便的重新運(yùn)行一下代碼即可。這樣做大大加速了仿真的設(shè)計(jì)和修改的效率?;鞠巳斯び?jì)算可能出現(xiàn)的各種誤差。

現(xiàn)在,你可以使用它來做一些更復(fù)雜的東西了,比如我做了一個如下的球棒平衡系統(tǒng)。是不是很好玩。哈哈。

圖片發(fā)自簡書App

然后也可以看看SM自帶的一些例子,比如這個

>> sm_backhoe

就是一個相對復(fù)雜些的控制系統(tǒng)。

圖片發(fā)自簡書App

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容