2008年7月4日 星期五

Fuzzy Control on NXT motor

http://4rdp.blogspot.com/2008/07/fuzzy-control-on-nxt-motor.html


談論模糊控制前,須先知道模糊邏輯。傳統邏輯學,有非常明確的真假邏輯狀態,比如大於等於170為真 (True),反之為假 (False),但是模糊邏輯沒有明確的分界,比如說某人身高很高,那是180 cm 以上算高,還是 170 cm 以上才是高,這是個見人見智的問題。模糊邏輯利用歸屬函數 (Membership function) 將模糊的意念轉化為數值,以利電腦計算控制。

上圖為馬達轉速輸入歸屬函數 (Membership Function),包含三組規則 (Rule) Slow、Set、Fast,下圖為馬達出力歸屬函數,同樣也有 Accelerate、Keep、Decelerate 三組規則。為了說明簡單,輸入與輸出只各列三組規則,如果要更複雜的控制,可以再增列其他規則。

這三組規則可以表示為:
IF 轉速 = 慢 THEN 加速
IF 轉速 = 剛好 THEN 維持
IF 轉速 = 快 THEN 減速


希望轉速控制在500 °/sec,如果NXT馬達轉速比500 °/sec大,稱為快;比500 °/sec小,稱為慢。假設現在 NXT 馬達轉速為 450 °/sec,比設定的500 °/sec小,因此必需加速。

先看 Rule Slow,定義300 °/sec以下為100%僈,500 °/sec以上就不稱為慢,而中間逐步遞減。這就是模糊邏輯的精華所在,你可以自己定義這些數值,只要不太離譜馬達都可以控制。所以450 °/sec轉速可得 25% 歸屬度,再以此反查 Rule Accelerate,馬達應該增加約 Power +3 的能量。同理 Rule Set 75% 也可推得 Rule Keep 應增加 Power +3,但是 Rule Fast 0% 得 Power 0。最後,綜合這三條規則取最大值 Power +3,就可以讓馬達轉快一點接近500 °/sec。

了解這基本概念,NXT玩家趁暑假研究看看,如何寫出 Fuzzy control 程式讓 NXT馬達定速運轉,七月中我會公佈 source code。希望大家動動腦寫寫看,尤其是高中以上的同學,未來有志於研發工程師,更應該努力看看,不要等著看解答,能自己獨立完成挑戰的人,將會是優秀的研發工程師

沒有留言:

張貼留言