2015年10月13日 星期二

[EV3]PID循跡控制

光感測器校準

利用EV3套件中的顏色感測器作為光感測器,所以我們選擇反射光(Reflected Light Lintensity)模式,我們將存放兩個變數,黑色與白色兩個顏色,該反射光的值僅僅是一個介於0100的光感測器讀取的值
校準流程圖

在這邊添加了一個觸碰感測器,讓機器人可以記錄光值,將他放在白色表面,按下觸碰感測器記錄此讀值,黑色也重複動作記錄下數值,每次啟動機器人都要先進行校準,因為在不同的環境或光線下使用,在黑色和白色表面上的數值會有差異,所以每次到新的環境就必須先進行光感測值的校正
光感測值校正程式圖

基本循跡控制

        當我們有了校準後的數值後,我們可以先從最簡單的方式循線,在該路徑上行走的機器人會得到一個數值,如果低於中間數值,我們就移動到一側,反之亦然
基本循跡控制流程圖

        這個概念非常簡單,只是讓一邊車輪轉動的比另一邊快,可以發現缺乏直線的概念,當走直線時會開始圍繞著震盪,因為我們只設定的兩種狀態,左轉與右轉,我們必須要能夠辨別更多的狀態與數值的差異
基本循跡控制程式圖

循跡控制結合P Controller

      如果只是基本的控制左右轉彎啟動會相當的不協調,在這邊我們加上了比例的概念,使其接受的改變數值越大,轉彎的程度和給予馬達的功率就越大,馬達的馬力設為常數使用Move Steering模式可直接控制左右轉幅度設為Ms
      其中Kp是一個常數,幫我們調整P控制器。Kp大時轉彎處越可能發生錯誤,Kp值如果太大會發現機器反應過度,並且難以控制 
P控制流程圖

在程式裡,與基本控制相異不大,只做了參數上的調整與校正
P控制程式圖
        剛開始設定Kp=1去做測試,如果機器人不能跟著即時轉彎表示Kp值不夠,再增加其值,相反的,如果機器人過於震盪就必須減低Kp值,因此Kp值需要測試出最適合的值。

PID Controller

        PID控制器又在加上了兩個控制參數,積分以及微分部分
 PID控制圖
        PID控制的基本概念是把微小誤差加進去,在互為作用的過程中,期望誤差必須趨近於零,EErrorKil為最後一次Ki
        最後一個部份是微分,在控制器裡增加儲存器的概念,嘗試猜測之前的錯誤經驗, El為最後一次的Error

PID控制流程圖

依據PID控制理論可以計算出下列變量,馬達旋轉量(Turn) = Kp * (現在的偏差量) + Ki * (過去的偏差量) + Kd * (未來的偏差量),最後使用Ziegler-Nichols Method,來調整PID的每個參數。

2015年10月11日 星期日

[EV3]PID循跡控制理論

 EV3循跡機器人

在工廠,要儲存或提取一些貨物時,若是由一個個工人慢慢搬,這樣為未免太浪費資源與資金,所以不太可能吧,通常是以機器人代替人去做的,而循跡機器人在工廠可以快速且高效率運送大量的貨物和訊息。將來我們會看到公路上有公車沿著磁力線跑,和循跡機器人的原理差不多,只是把有形的黑線變成無形的磁力線。而循跡機器人在沿著線跑時,必須不斷修正行徑的軌跡,以免跑到線外

循跡機器人

基本控制理論

      紅外線感測模組可以藉由讀取到不同比例的紅外線反射量來判別是否為黑線,以數字來舉例,當紅外線感測器放在完全黑色的線上面,感測器讀取到40,而當放在完全白色物件的時候,感測器讀取到50,而當有一半看到黑色,有一半看到白色的時候則會讀取到45,因為讀取進來的紅外線反射量恰好是白色反射和黑色反射的平均值

紅外線感測範圍示意圖

經過簡單的測量知道,當數字越接近40則表示車子越靠右(黑線區域),當數字越大越接近50時,則表示車子越靠近左(白線區域),而當車子偏左時,得下指令給車子向右邊走,反之亦然,這邊使用簡單的二分法來決定偏左或是偏右,就是黑白平均值為45,這個數值我們稱為Offset,當紅外線小於45則我要讓車子左轉,大於的時候要右轉

數值二段法圖

上述稱為二段循跡法,車子走動時呈Z字型的運動軌跡,遇到黑線就朝另一個方向避開,遠離黑線則朝黑線靠近,行動時只有左轉或右轉兩個動作,因在轉彎時會停下另一邊的馬達,所以會慢慢前行。此循跡法在行動時會大幅度的左右搖擺,浪費時間與電池電量,但是只需要簡單的材料、程式,就可以使用,非常適合初學者練習使用

二段法光感值與行徑方向關係圖

程式流程圖

        大部分都是在直線的部份,二段法在直線在行走直線時,耗費了太多的不必要位移,一直抖動,因此將直線獨立出來,設定光感值靠近45的狀態大,都屬於直走。三段循跡法在直走偵測到黑、白的中間值時,會向前行走,直到偏離黑、白的中間區域,在走直線時會比較迅速,抖動變小了,為此優點,但在轉彎方面卻無突破如。

 數值三段法圖

三段法光感值與行徑方向關係圖

由於是為了沿著黑線前進,關於馬達該下什麼樣的指令,不同的馬達有不同的方式,這邊使用馬達的動力百分比來表示轉速,當使用這種方式走直線的時候盡可能讓車子走的不要太快,要走的緩慢一點,否則會有衝出去黑線的情況常常發生。
車子要直走很簡單,只要讓馬達都往前旋轉即可,轉彎的部分,兩輪平台又和我們一般的車子不同,沒有方向盤這種東西,可以去帶動轉向機構,然而這樣的機器車平台,比較像是坦克車,只有兩條履帶,但是卻能夠前後左右甚至原地旋轉,以向左轉為例,將右邊的輪子給予50% Power,左邊則是給予20% Power,此刻車子就會慢慢向左邊前進,或是右邊給30%,左邊給0%,車子就會轉左邊靠近,但不太會往前,後者就是相對於前著更緩慢的走法,更不容易跑出去黑線之外,上述是循機車的基本架構理論。

P control

        依此類推,切割越多穩定性就越高,這就是PID中的P (Proportion),比例循跡法是按照光的強度,來決定轉彎的程度,讓車子保持行走的順暢,看起來就像在溜直排輪一樣的移動方式,在轉彎與直走方面都很滑順,程式較複雜
比例法光感值與行徑方向關係圖

將本來的4050減去他們的平均值45,則變成-55,而轉換成這樣之後,將X軸的數值稱為Error,也就是誤差量,Y軸的部分將設定成轉速差百分比(100% = 1),因此剛剛的斜率公
Y=m*X
變成轉動角度的大小
Turn=m*Error
               
比例循跡法

m的計算方式就是(Y軸每單位變化)/(X軸每單位變化)m是一個很重要的比例常數(proportionality constant),之後將感測器所讀取到的的資料轉換成Error之後就可以藉由這個比例常數將Error直接轉換成Turn,這是一個很大的重點因素,而這個mPID控制理論裡面有一個特別的名字,稱為Kp,是constant的簡稱,在之後我們還會有另外兩個K也會加進來這個PID控制裡面,K這個數值是一個轉換值,可以讓輸入進來的數據轉換成Turn
PID裡面還有一件關於P很重要的事情,就是P的範圍大小(proportional range) ,就是線性範圍,舉例來說,紅外線感測器的proportional range 40~50,而馬達我們是假設從-100~100,而從proportional range 可以探討兩個部份。
第一部份,proportional range 越大越好,從剛剛的2-Level3-Level那邊可以知道,如果可以讓proportional range 越大,則表示我們可以有越多種的速度變化,假如現在車子稍微遠離黑線,他可以稍微修正回來,假如非常嚴重遠離黑線,他就會相對應地強烈的修正回來,因此能夠有越多變化的話,就能夠讓車子適應更多種的變化,也就是說不怕曲率大的轉彎。
第二部份,如果超出了proportional range ,大致上車子走的方向不會錯,但是計算出來的Turn就不一定正確了,因此我們必須限制車子不要超出proportional range
經過紅外線感測器並且經過一連串的運算取得了Turn,那麼他要怎麼轉成馬達用的Power,首先先定義一個新名詞,Tp (Target Power Level) 目標馬力,簡單來說,這個就是直走的時候的速度,接下來將一顆馬達的速度設定為 Tp + Turn 和另外一顆設定為 Tp - Turn,因為有時候馬達再設定正反轉的時候會有相反的狀況發生,如果出現這樣的情況,把 Tp ± Turn的正負號倒過來試試看。計算我們剛剛說的斜率,也就是K,在這邊的K是表示proportiona,因此稱之為Kp,為了測試我們先粗估Error和馬達的Power,當Error0-5的時候,希望馬達可以從50%10%

I control

最簡單的積分,就是將每次的錯誤加起來,利用下圖舉例說明。在這裡取得五個數值,分別為-1,-4,5,3,-2,把他們全部加起來就是所謂的 I control的誤差,(-1) + (-4) + 5 + 3 + (-2) = 1 Error就是這個算出來的1  
積分誤差樣本圖

如果用程式語言的方式來表達,如下公式
Integral = Integral + Error
這樣表示我們將每一次的誤差量都記錄在Integral這個變數裡面,藉由這個Integral來作為PI control的判斷,下列是一個最基本的PI control 的式子,如同 P control一樣,Error會乘上一個Kp值,而Integral也會乘上一個 Ki
 Turn = Kp*(Error) + Ki*(Integral)
假如車子使用P control已經很靠近了黑白線的交錯區,但是還是有一點點的些微誤差,例如Error總是1,那麼我們的Integral就會不斷的增加,進而增加 Turn 的數量,那麼我們就可以在把這樣的微小誤差給修正回來,Integral就是為了這樣的目的而加進來的。
Integral是為了微小誤差而存在的,但是事情總是優點缺點共存,他可以記起來以前所有的錯誤,同時表示微小的誤差將會大大的影響我們的 Turn,即使我們早就走在正確的黑白交錯區了,還是會受到之前的影響而開始走偏。
Integral的前面乘上一個小於1的分數,這樣一來之前的記憶就會不斷地變小,就可以稍微減輕剛剛說的那種效應的產生囉,當然,相對的得犧牲本來的integral的反應速度了。在程式方面可以這樣來表示

D control

        利用微分的方式,可以預測數值接下來的發展,物體的位移函數利用微分可以求得速度和加速度,利用趨勢等於現在的偏差值減去過去的偏差值,也就是未來的偏差值等於趨勢加上現在的偏差值,將此DPID控制裡面的稱呼方式來說的話,稱之為KdPID控制可表現下列公式。

馬達旋轉量(Turn) = Kp * (現在的偏差量) + Ki * (過去的偏差量) + Kd * (未來的偏差量)

2015年10月8日 星期四

[EV3]EV3智慧型可程式主機

        EV3機器人主機採用Linux系統作為OS,表示之後對於主機程式開發人員或周邊設備的開發廠商來說,可以在公開原始碼的環境下來開發EV3,也可製作相容的指令的模組,還可自身研發客製化的套件。目前可以控制EV3的語言有leJOS(Java)LabVIEW RobotCApp Inventor等語言平台等。
        EV3主機前後分別有4個輸入埠與4個輸出埠,比前一代NXT多一個輸出埠,在硬體的架構以及馬達操作操作度上都會來的更加自由。傳輸程式則可透過USB、藍牙與無線網路(需外接Wi-Fi網路卡),將程式或檔案在EV3主機與電腦之間互相傳輸,而使用USB最方便

 EV3主機輸入與輸出埠

EV3主機USB輸入埠與micro SD記憶卡插槽

        操作上,EV3機器人主機保持著樂高原有的直覺性操作,在EV3主機上共有六個功能鍵:按下中間的確認鍵也同時是開機鈕,左上方的取消鍵則是回上一步或是消除原有步驟,四個方向選擇鍵則是用來在直覺性選擇選項中移動

 EV3主機按鈕說明

EV3主機規格表
處理器
ARM9 300MHz
記憶體
16MB快閃記憶體
64MB RAM
作業系統
Linux Base
顯示器
178*128像素
輸出埠
4個輸出埠
輸入埠
4個輸入埠
支援類比通訊
數位通訊460.8Kbit/
USB傳輸速度
480Mbit/
USB介面
可使用USB線串聯最多四台EV3
可外接Wi-Fi網路卡就能無線上網
SD卡插槽
支援最高32GB micro SD記憶卡
支援智慧型手持裝置
iOS/Android/Windows
使用者介面
6個按鈕
程式碼大小(以循跡程式為例)
0.950KB
感測器通訊能力
1,000筆資料/
資料擷取速度
最高可到1,000筆資料/
藍牙通訊
最多可與7個被控端連接
測試程式的大小與運作速度
2KB
60秒內約可執行10,000次迴圈
電力供應
可充電電池或6AA電池

        EV3具有自動識別(Auto-ID)的功能,EV3主機會自動讀取所使用的連接埠以及連接模組,如此可以減低設計程式者的除錯工作,例如將馬達接在2號輸出埠,但在程式中卻設為3號,可自動識別。