各位同學大家好在這一小節裡面
我們要介紹倒單擺的模糊控制
這是一個非常經典的自動控制研究題目
因為倒單擺是一個高度非線性的問題
而我們小時候都玩過
如果你想要讓一支筷子在你手中能夠維持不墜不下落
這是非常困難的
因此在倒單擺的模糊控制裡面
我們利用模糊的推論系統來設計
可以輕易的完成這個倒單擺的控制
這一小節我們要介紹倒單擺的模糊控制
一個倒單擺如圖所示
在畫面中我們可以看到這個倒單擺它的質量是m
而它位於一台滑車M上面
如果我們希望這個倒單擺能夠直立起來
也就是在畫面中它跟垂直軸的夾角θ等於0
則我們知道如果這個倒單擺是向右傾斜的
則我們需要給這個滑車一個向右的推力
同樣的如果這個倒單擺是向左傾斜
則我們需要給這個滑車向左的一個推力
使得這個倒單擺能夠維持平衡
也就是它能夠垂直站立
當然這是一個不容易的事情
所以在自動控制裡面
這也是一個很典型的控制問題
如何控制滑車移動的力量
使得我們的倒單擺能夠垂直站立起來
而倒單擺在自動控制裡面也有很多應用
比方說機器手臂的控制
根據上圖中倒單擺的位置以及力的平衡方程式
我們可以推得下面的兩個狀態方程式
第一個是x1的微分會等於x2
這邊的x1指的是倒單擺與水平軸的夾角也就是θ
而x2的微分會等於gsin of x1減掉amlx2的平方
乘上sin of 2x1除上2減掉a乘上cos of x1乘上u
再除上3分之4l減掉aml乘上cos平方 of x1
這邊的x2就是倒單擺它傾斜的轉速
也就是x1θ的微分
而這邊的g指的就是重力加速度9.8
上面的兩個狀態方程式其中參數所代表的意義分別如下
x1就是我們倒單擺與水平軸的夾角也就是θ
而x2就是這個夾角的角速度也就是θ的微分
而m是我們倒單擺的質量
M則是滑車的質量
2l則是倒單擺的長度
而a代表的是1除上倒單擺的質量加上滑車的質量
而u代表我們的控制訊號
也就是在這邊代表的是我們給滑車的一個外力
也就是force
由上面的方程式我們可以得知
它是一個高度非線性的動態方程式
因此如果用傳統的線性控制來設計
則控制器是非常不容易設計
也就是說並不容易使得倒單擺能夠垂直站立
因此我們在這邊嘗試用模糊控制來控制這個倒單擺
而matlab提供了一個Simulink檔案
指導大家如何利用模糊控制器來設計倒單擺的控制系統
這個檔名叫做slcp
也就是畫面上大家所看到的一個Simulink的模型
畫面上最左邊的是我們的輸入訊號
而中間就是我們倒單擺的動態方程式
也就是大家剛剛所看到的一個高度非線性的方程式
而下面的就是我們要設計的模糊邏輯控制器
右上角則是我們可以把這個動態響應做成動畫
而可以觀賞到倒單擺受到模糊控制器所移動的動態
而最後則是示波器可以把倒單擺所受到
模糊邏輯控制器的輸出響應能夠顯示出來
接著我們來介紹如何設計我們的模糊控制器
來控制這個倒單擺
首先我們也是要在matlab的環境之下
也就是Command Window輸入Fuzzy這個指令
這樣子我們就可以把模糊邏輯推論系統給呼叫出來
模糊推論系統的圖形使用者介面被呼叫出來以後
接著我們就可以開始設定模糊邏輯控制器中的輸入變數
我們在這邊它允許我們設定多個輸入變數
首先我們看到畫面上的模糊邏輯推論系統的圖形介面
在上方有一個Edit的選項
所以我們用滑鼠點選Edit
則畫面上會出現Add Variable這個選單
我們再用滑鼠點選
這邊我們要選擇的是輸入變數
在這個倒單擺的例子裡面我們總共設定了四個輸入變數
分別是倒單擺的角度以及倒單擺的轉速
還有我們設定的命令與滑車水平位置的誤差
最後一個則是滑車水平移動的速度
接著我們要設定模糊邏輯控制器中
這四個輸入變數的模糊歸屬函數
首先在畫面上看到我們已經設定了四個輸入變數
首先我們針對第一個輸入變數
也就是input1我們用滑鼠點選
接著我們設定這個模糊歸屬函數的範圍
分別是介於負0.3到0.3之間
這個模糊歸屬函數我們也可以改變它的名稱
而且我們也可以更改模糊歸屬函數的形狀
在這邊我們是選用鐘形
而其中的參數設定分別是0.3 2 以及負0.3
接著設定第一個輸入變數也就是倒單擺的角度
它的第二個模糊歸屬函數
首先也是用滑鼠點選第一個輸入變數
接著我們可以設定第二個模糊歸屬函數的範圍
這邊我們是設定是負0.3到0.3之間
同樣的我們可以更改這個模糊歸屬函數的名稱
以及它的形狀
這邊我們也是選用鐘形
而參數的設定分別是負0.3 2以及0.3
接著我們來設定模糊邏輯控制器中第二個輸入變數
也就是倒單擺的轉速的模糊歸屬函數
同樣的我們用滑鼠來點選如畫面中的第二個
模糊歸屬函數也就是input2
這邊我們也是設定它的範圍分別是負1到1之間
接著我們可以更改這個模糊歸屬函數的名稱
以及它的形狀
在這邊我們也是使用鐘形
而參數的設定分別是1 2以及負1
接著我們來設定
第二個輸入變數的第二個模糊歸屬函數
同樣的我們也是在畫面中
先用滑鼠點選第二個輸入變數
接著我們再設定第二個模糊歸屬函數的範圍
在這邊我們是選定負1到1
同樣的我們也可以更改這個歸屬函數的名稱
以及它的形狀
這邊我們是選用鐘形
而參數我們設定為負1 2以及1
接著我們來設定模糊邏輯控制器中
第三個輸入變數的模糊歸屬函數
而這邊的第三個變數
就是我們在倒單擺控制中滑車水平移動的位置
與我們參考命令之間的誤差
同樣的我們在第三個輸入變數之中
我們用滑鼠來點選
我們設定它的範圍是負3到3
我們也可以更改這個模糊歸屬函數的名稱以及它的形狀
這邊我們也是選用鐘形
而參數我們是設定為3 2以及負3
接著我們來設定第三個輸入變數
也就是誤差的第二個模糊歸屬函數
類似的我們也是在第三個輸入變數之中
用滑鼠來點選如畫面所示
而這邊我們就可以設定它的範圍分別是負3到3之間
接著我們可以更改這個模糊歸屬函數的名稱
以及它的形狀
在這邊我們也是使用鐘形
而參數的設定分別是負3 2以及3
最後我們要設定模糊邏輯控制器中第四個輸入變數
也就是滑車水平移動的速度
而它的歸屬函數設定與前面三個是大同小異
也就是我們首先用滑鼠點選第四個輸入變數
接著我們再設定它的範圍分別是負3到3之間
同樣的我們可以更改這個模糊歸屬函數的名稱
以及模糊歸屬函數的形狀
這邊我們也是使用鐘形
而參數的設定分別是3 2以及負3
最後我們來設定模糊邏輯控制器中
第四個輸入變數的第二個模糊歸屬函數
也就是我們用滑鼠點選第四個輸入變數
接著設定它的範圍
這邊我們是選用負3到3之間
而且我們可以更改它的名稱還有歸屬函數的形狀
這邊我們一樣的是選用鐘形
而參數的設定分別是負3 2以及3
接著我們來設定模糊邏輯控制器中的輸出
也就是我們要給予倒單擺所施以的外力f
在這邊由於我們是使用sugeno的模糊模型
因此輸出都是一個單值的函數
所以我們點選模糊歸屬函數以後
接著我們可以設定它的範圍分別是負10到10之間
同樣的我們可以更改這個模糊歸屬函數的名稱
以及它的形狀或者是種類
在這邊我們是使用線性
當然我們也可以選擇使用常數
設定完第一個輸出以後接下來我們可以如法炮製
設定其他總共16個模糊控制器的輸出
接著我們要設定模糊邏輯控制器中的模糊規則
首先我們用滑鼠Double click
點選畫面中粉紅色的部份
這個就是我們的模糊規則編輯器
進入到模糊編輯器的畫面後
接下來我們就可以設定我們的模糊規則
以第一個模糊規則為例
如果第一個輸入是第一個模糊歸屬函數
第二個輸入是第二個模糊歸屬函數
以及第三個輸入是第三個模糊歸屬函數
以及第四個輸入是第四個模糊歸屬函數
則我們的輸出就是outputmf1
所以我們第一步選擇in1mf1 in2mf1 in3mf1以及in4mf1
選擇這四個模糊歸屬函數
第二步我們再選擇and表示
這四個前鑑部是用and來連接
接著我們選擇outputmf1代表我們的第一個
模糊輸出歸屬函數
最後我們再用滑鼠點選增加規則Add rule
當我們將模糊邏輯控制器設計好以後
接著我們就可以進行倒單擺的模擬
從畫面上我們可以看到
這是一個模擬的動態情形
透過我們的模糊邏輯控制器
我們可以看到倒單擺一直維持在水平的位置
也就是θ角幾乎等於0
不管它的重心移動到哪裡
同樣的我們也可以點選Show Trails
來觀看倒單擺移動的軌跡
模擬的結果我們可以透過畫面上的圖形來顯現
紅色的是我們所下的指令
而藍色的部份就是倒單擺它移動的水平位置
我們可以看到倒單擺它移動的水平位置
跟我們下的指令是符合的
接著在這一小節裡面我們也介紹了
利用模糊推論系統來設計一個倒單擺的控制
而且我們也介紹了倒單擺系統的模糊模型
如何利用Matlab現有的這個模型來設計倒單擺
最後我們也解釋了如何設計
倒單擺模糊控制的模糊規則
最後我們利用Matlab的軟體
來進行倒單擺的電腦模擬
電腦模擬結果也顯示了
利用模糊推論系統來設計控制器
尤其是這種高度非線性的控制系統
是非常這個容易實現而且會成功的
這個就是我們這一小節的總結
