Simulink 提供一個動態系统建構模擬和分析的環境,整合了許多
MATLAB 的工具箱,讓不同工具箱可在此圖形化介面上作連結,在這個環 境中,只要透過簡單的圖形方塊,利用滑鼠拖曳,即可以建構出控制系統,
如此一來使程式更一目了然,縮短了程式除錯的時間,有別於以往打指令 撰寫程式的方式。
圖 3.2 為一簡單範例,將正弦和餘弦波用模擬示波器(scope)顯示。
圖 3.2 Simulink 範例介紹圖 3.3 MATLAB – 模糊工具箱
在 MATLAB 命令視窗下輸入 fuzzy 即會顯示圖 3.3 圖形化介面視窗,
此為模糊控制主要架構(輸入、輸出、模糊推論、推論方法…等等)。
圖 3.3 fuzzy GUI 介面
滑鼠連點輸入圖案兩下或是鍵盤輸入(Ctrl+2)即可開啟建構輸入和輸出 歸屬函數的視窗,歸屬函數有許多種類可選擇,例如:三角形、鐘形、高 斯曲線、梯形…等等,如下圖所示,不同的歸屬函數有不同定義方式,定 義完成後按 close 按鈕,視窗即關閉且自動儲存定義參數。
接著是規則庫的建立,點選 Edit 裡的 Rules 或鍵盤輸入(Ctrl+3)即出現 編輯規則庫的圖形化視窗,如下圖所示,藉由專家經驗建立合適的規則以 IF-THEN 的方式進行推論,例如:IF input is…THEN output is…,在達到相 同需求下,規則數越少越好,所有設定完成後可在 View-->Rules 觀看結果。
3.4 MATLAB – 倒傳遞類神經網路
倒傳遞類神經網路屬於前饋型 (feedforward) 類神經網路,故使用 MATLAB 來實現倒傳遞類神經網路的指令為 newff,ff 即代表 feedforward。
newff 指令說明:
newff(PR,[S1 S2…SNi],{TF1 TF2...TFNi},BTF,BLF,PF) PR:R x 2 矩陣,R 為輸入個數,其值為各輸入的最小和最大值 若出現 out-of-memory error 請嘗試其他函數。
以下為其他訓練函數:
Slow trainlm:藉由設定 net.trainParam.mem_reduc 的值為 2 或更大,可減 少系統記憶體使用量。
trainbfg:學習速度較慢,但是記憶體使用效率優於 trainlm。
trainrp:學習速度較慢,但是記憶體使用效率優於 trainbfg。
修正權重與偏權值的函數有 learngd 和 learngdm。
輸出誤差函數種類有 mse 和 msereg。
由以上的指令說明(資料來源:MATLAB 工程軟體的「Help」資料庫) 得知只要有訓練樣本,確認並建立好架構、所有學習參數與函數設定,便 可立即學習,但未必每次學習結果都會收斂,若結果發散,此時要利用試 誤法和經驗公式不斷修改架構參數,例如:隱藏層層數、神經元個數、轉 移函數種類…等等。
四、研究內容與方法
以下為此三種架構的示意圖:
圖 4.1 平面(a)和空間(b) 三連桿手臂示意圖
圖 4.2 四足機器人 3D 圖(CIDM 實驗室設計圖)
4.2 Fuzzy 應用至平面三連桿手臂
本節使用模糊推論系統替代平面三連桿手臂正向運動學函數,比較模 糊推論輸出與運動學函數誤差大小,不斷以試誤法修改 Fuzzy 架構參數使 誤差收斂至更小,則表示此 Fuzzy 架構可近似於正向運動學函數,換句話 說,只要系統輸入和輸出為已知,便可靠經驗建立 Fuzzy 架構進而取代線 性或是非線性系統轉移函數。
1. 首先確認架構輸入與輸出,本節利用 Fuzzy 近似平面三連桿手臂正向運 動學,輸入為三個馬達角度(θ1、θ2、θ3)、輸出為(x、y 座標),歸屬函數 選用三角形(trimf),參考圖 4.3。
圖 4.3 三連桿手臂之 Fuzzy 架構圖
2. 建立輸出和輸入的歸屬函數,本文將 3 個輸入(θ1、θ2、θ3)的歸屬函數設 定皆使用 5 個三角形函數,角度範圍θ1 為-90 度到-60 度之間,θ2 和 θ3 範圍相同為-90 度到+90 度之間;因為桿長(L1=L2=10、L3=5)和角度隨機 搭配關係,輸出 x、y 座標的歸屬函數設定就大大不同,由工作空間可看 出 x 範圍為-15 到+20、y 範圍為-25 到+5 之間,參考圖 4.4、圖 4.5、圖 4.6、圖 4.7。
圖 4.4 工作空間
圖 4.5 輸入角度(θ1、θ2、θ3)歸屬函數
圖 4.6 x 座標歸屬函數
圖 4.7 y 座標歸屬函數
3. 將θ1、θ2、θ3 歸屬函數做隨機組合搭配,產生不同 x、y 座標,藉由觀
圖 4.8 Fuzzy 輸出結果 討論:
圖 4.8 說明當 Fuzzy 輸入為θ1=-81、θ2=53、θ3=-9 時,推論結果 x= 15、y=
-17.5 與理論值 x= 14.387、y= -17.58 比較得知,模糊控制近似線性或非線性 函數誤差較大,因其中有許多參數設定,只能依賴試誤法和經驗不斷嘗試,
而且模糊理論算是開路系統,沒有回授訊號可自行修正參數,所以參數調 整必須仰賴手動,故通常模糊控制被應用在輸出誤差的修正,輸出誤差的 修正是比較主觀、容易想像、推理的,而模糊邏輯正好是模擬大腦的推理 系統,因此使用模糊控制「修正誤差」是比用來「近似線性或非線性函數」
較容易的。
4.3 倒傳遞神經網路應用至空間三連桿手臂
本節將類神經網路應用至空間三連桿手臂,最大優點和模糊理論相同,
兩者皆可在不知道受控場轉移函數下,只要有輸入和其對應的輸出,便可 用來近似系統的轉移函數;另外類神經網路本身可自行調整參數,此方面 優於模糊控制,類神經理論就類似人類大腦行為,當人類在學習一新事件 時,大腦並不會去計算數學函式,而是藉由不斷學習最後便熟能生巧,倒 傳遞類神經網路應用至空間三連桿手臂流程如下:
圖 4.9 空間三連桿尺寸與座標圖
1. 在空間三連桿手臂(圖 4.9)上配合馬達起始位置建立座標系,使用 D-H 理 論建立 D-H 表和 D-H 矩陣,將 D-H 矩陣相乘後,第四行前三列即為正 向運動學公式。
表 4.1 空間三連桿手臂 D-H 表
z=-7*cos(C2)*cos(C3)+7*sin(C2)*sin(C3)-14/5-57/10*sin(C2) (4-1) 2. 利用(4-1)式正向運動學公式計算出倒傳遞網路學習樣本,以隨機的方式
產生 4000 組三個馬達的角度,代入正向運動學公式求得其對應的 4000 組 x、y、z 座標,其中 2000 組當作學習樣本,剩下 2000 組當作驗證樣
本,MATLAB 部分程式如下:
theda1=(-35:110) % 馬達一角度範圍 theda2=(-45:45) % 馬達二角度範圍 theda3=(-90:45) % 馬達三角度範圍 for j=1:4000 % 迴圈
c1(j)=theda1(round(rand*145)+1); %隨機選取-35~110之間的任意角度 c2(j)=theda2(round(rand*90)+1); %隨機選取-45~45之間的任意角度 c3(j)=theda3(round(rand*135)+1); %隨機選取-90~45之間的任意角度 C1=c1(j)*pi/180; C2=c2(j)*pi/180; C3=c3(j)*pi/180; % 弳度與度 換算 x(j)= -7*cos(C1)*sin(C2+C3) -0.9*sin(C1)+5.7*cos(C1)*cos(C2);
y(j)= -7*sin(C1)*sin(C2+C3) +0.9*cos(C1)+5.7*sin(C1)*cos(C2);
z(j)= -7*cos(C2+C3) -2.8-5.7*sin(C2);
end
表 4.2 中 N 值表示神經元個數,E1、E2、E3 分別表示θ1、θ2、θ3 類神
Logsig Tansig
N E1 E2 E3 E1 E2 E3
圖 4.11 轉移函數 logsig
5. 以隨機方式設定權重值(weight)和偏權值(bias),設定學習次數 300 次 6. 將輸入和輸出正規化後代入架構開始學習,式(4-2)為正規化公式。
(x-min(x)) / (max(x)-min(x)) (y-min(y)) / (max(y)-min(y))
(z-min(z)) / (max(z)-min(z)) (4-3) 7. 輸出誤差以「倒傳遞」的方式修正權重(weight)和偏權值(bias)
權重、偏權值修正公式:
Yj:參考輸出 Yjn:實際輸出 η:學習速率
Dj = Yjn * (1-Yjn) * (Yj – Yjn) 輸出層的誤差函數 (4.4) Dh = Neth * (1- Neth) * Σj Whj * Dj 隱藏層的誤差函數 (4.5)
△Whj = η* Dj * Neth △bj = -η* Dj 隱藏層與輸出層間神經元權重和 偏權值修正 (4.6)
△Wih= η* Dh * xi △bh = -η* Dh 隱藏層與輸入層間神經元權重和偏 權值修正 (4.7) 8. 直到輸出的平均誤差收斂時,此架構便可拿來應用。
E =Σj ∣( Yj – Yjn ) ∣/2000 Yj:參考輸出 Yjn:真實輸出 (4.8)
模擬結果:
圖 4.12 20 組驗證樣本與 BP 角度比較圖
討論:
其中歸屬函數和規則庫都可在學習中得到標準法則。
步驟如下:
1. 首先建立四足機器人右前腳圖 4.9 座標系,使用 D-H 理論求得 D-H 表 和 D-H 矩陣,此步驟與上一節倒傳遞類神經網路步驟 1 相同,目的是 比較不同理論應用到空間三連桿時,經由誤差觀察兩種理論的優缺點 2. 利用正向運動學公式以隨機的方式產生 4000 組三個馬達的角度,代入
正向運動學公式求得其對應的 4000 組 x、y、z 座標,其中 2000 組當作 學習樣本,剩下 2000 組當作驗證樣本,此步驟也與上一節倒傳遞類神 經網路步驟 2 相同。
3. 建立 ANFIS 架構,本文利用 3 個架構(圖 4.13)替代反向運動學函數,因 為從反向運動學角度而言,求解θ1 僅需用到 x、y 座標與 z 座標無關,
故 anfis1 的輸入只有兩個(x、y),如此一來簡化了 anfis1 架構,大量減 少了 anfis1 的程式學習時間,而θ2、θ3 與 x、y、z 相依,故 anfis2 和 anfis3 的輸入有三個(x、y、z)。
圖 4.13 ANFIS 訓練架構圖
使用 MATLAB 的「genfis1」和「anfis」兩個指令,「genfis1」以網格分 割(grid partiton)方式產生 ANFIS 前提部與推論部的初始參數值,「anfis」
會呼叫「genfis1」函數產生的初始參數來進行學習,本節以隨機方式產 生 4000 組樣本,其中 2000 組學習樣本、2000 組驗證樣本、學習次數 n=300、轉移函數為 gbellmf、gaussmf,其函數標準式為: 1
1+│x−ca │2b、
e
−(x−d)22σ2 ,圖 4.14 為不同 a、b、c、d、σ值時的圖形,可得知鐘形 函數 a 參數影響寬度、b 參數影響兩側斜率、c 參數影響 x 方向偏移量;而對於高斯函數 d 參數影響 x 方向偏移量、σ參數影響兩側斜率。
圖 4.14 不同 a、b、c、d、σ值時的 gbellmf 與 gaussm
MATLAB 部分程式如下:
n=300 % 學習次數
% anfis1
a=genfis1([x1' y1' c1'],[8 8], char('gaussmf','gaussmf'));
a=anfis([x1' y1' c1'],a,n);
% anfis2
b=genfis1([x1' y1' z1' c2'],[6 6 6], char('gbellmf','gbellmf','gbellmf'));
b=anfis([x1' y1' z1' c2'],b,n);
% anfis3
c=genfis1([x1' y1' z1' c3'],[6 6 6], char('gbellmf','gbellmf','gbellmf'));
c=anfis([x1' y1' z1' c3'],c,n);
代入 2000 組驗證樣本,比較 ANFIS 輸出與理論值
% anfis1
result1=evalfis([check_x1' check_y1'],anfis1);
compare1=[ check_c1' result1]
% anfis2
result2=evalfis([check_x1' check_y1' check_z1'],anfis2);
compare2=[ check_c2' result2];
% anfis3
result3=evalfis([check_x1' check_y1' check_z1'],anfis3);
compare3=[ check_c3' result3];
4. 若輸出誤差不理想,必須回到步驟 3,利用試誤法不斷嘗試修改參數(學 習樣本數、轉移函數種類、歸屬函數個數、學習次數…等等),直到輸 出誤差收斂至可接受時,此架構便能應用至實驗上。
本文使用誤差公式:
Error =Σ | ANFIS輸出-D-H理論值 | / 2000;
% anfis1
E1=abs([check_c1']-[result1]);
E1=(sum(E1)/(d/2))
% anfis2
E2=abs([check_c2']-[result2]);
E2=(sum(E2)/(d/2))
% anfis3
E3=abs([check_c3']-[result3]);
E3=(sum(E3)/(d/2))
2000 組驗證樣本的輸出平均誤差(E1、E2、E3)分別為 2.85 度、1.682 度、0.9404 度,圖 4.15、圖 4.16、圖 4.17 為學習完成後 anfis1、anfis2、
anfis3 輸入的歸屬函數。
圖 4.15 學習後 ANFIS1 輸入的歸屬函數
圖 4.16 學習後 ANFIS2 輸入的歸屬函數
圖 4.17 學習後 ANFIS3 輸入的歸屬函數
驗證樣本總共有2000組,表4.4為僅列出前20組驗證樣本與ANFIS輸出比較
圖 4.18 20 組驗證樣本與 ANFIS 角度比較圖 討論:
4.3節與4.4節主要是將倒傳遞類神經網路與ANFIS分別應用至空間三連 桿,因為兩者理論架構不同,所以無法將兩者理論設定在相同條件下比較 誤差,只能在相同的2000組學習樣本、2000組驗證樣本和學習300次情況下,
比較誤差;模擬時發現一個現象,BP在架構不改變時每次程式執行的結果 有時會發散,差異很大;但是ANFIS架構不改變時,不論程式執行多少次,
其輸出誤差皆差異不大,換句話說,ANFIS相對於BP是較穩定了。
4.5 運算時間比較
本節比較 ANFIS 與反向運動學應用於空間三連桿手臂的電腦程式 MATLAB 運算時間,比較流程如下:
1. 挑選 2000 組驗證樣本其中 10 組θ1、θ2、θ3,代入正向運動學產生 10 組 x、y、z 座標視為「比較樣本」。
2. 使用 D-H 理論求解反向運動學函數,給定馬達角度範圍,讓聯立方程式 恰有一組解。
( 0A1)−1 * 0A4 = 1A2*2A3 *3A4 (4-9) 比較(4-9)式左右兩矩陣的第四行 1~3 列,可得三個聯立方程式。
y*cos(θ1)- x*sin(θ1)=0.9 (4-10) 7*cos(θ2+θ3)+5.7*sin(θ2)=-2.8-z1 (4-11) -7*sin(θ2+θ3)+5.7*cos(θ2)=x1*cos(θ1)+y1*sin(θ1) (4-12) 3. 將 10 組 x、y、z 座標分別帶入反向運動學公式和 ANFIS,使用 MATLAB
程式計時指令「tic」和「toc」,比較 10 組比較樣本 MATLAB 運算的時 間和誤差,如圖 4.19 所示。
圖 4.19 ANFIS 和反向運動學之時間與誤差比較流程
模擬結果:
表 4.5 10 組比較樣本運算時間 Time(second)
samples Inverse kinematics ANFIS
1 3.7289 0.9111
4.6 中可看出雖然 ANFIS 輸出角度(θ1、θ2、θ3)會有些許誤差,但是對於本
圖 4.20 四足機器人座標系與步伐位置
如此一來可簡化12個自由度導致運動學公式太過複雜的問題,將
如此一來可簡化12個自由度導致運動學公式太過複雜的問題,將