Tag Archives: ev3

140117 古亭Otto2 EV3機器人課程:彈珠檯

兩位小朋友各組彈珠檯的半邊,再組起來對戰,好玩吧。

使用兩個觸碰感測器分別控制左右的彈片,再加一個超音波感測器來偵測進球,只要進球就會發出音效。

程式架構很簡單,但是要考慮的地方很多,例如兩個彈片會不會打架?球會不會跑出去?洞口的大小?彈片揮動的速度等等,同學都要一一記下來,讓下一次的修正更好!

2014-01-17 20.23.19 2014-01-17 20.23.14

開始對戰的時候當然是最開心啦!

2014-01-17 20.29.51

2014-01-17 20.44.20

CAVE 的小朋友當然要用CAVE 自編的教材來上課 

2014-01-17 19.21.08

2014-01-17 19.18.12

[樂高EV3機器人教學] 藍牙控制(雙馬達作為搖桿之比例控制)

http://lab.cavedu.com/ev3_tankcontrol <- 程式碼由此下載
上一篇 [樂高EV3機器人 – 藍牙控制(雙觸碰感測器)] 中,機器人藉由兩個觸碰感測器的狀態組合,只有四種動作,無法做到細微的操控。因此我們將EV3的馬達角度變化當成搖桿,這樣就能讓機器人有更多變化了。程式碼請由頁面下方下載,分為 Joystick 與 Car 兩個程式,您需將這兩個程式分別下載到兩台EV3主機上。先來看影片吧。
[youtube=http://youtube.com/watch?v=Lv9cO9EpZv0]
在執行程式之前,您需先將兩台 EV3 主機進行藍牙配對,執行時請先啟動 Car程式,再啟動 Joystick 程式。因為 Car 會被動接收來自 Joystick 的指令。
 
Handle:
 
兩個獨立的無窮迴圈,以上面的迴圈來說,是將把手端的左側馬達(B馬達)的角度變化,使用 Messaging 指令以數值形態發送出去。另一個迴圈也是相同的概念。在 Messaging 指令我們還可以設定這個 message 的 title,以上面的迴圈來說就是 [left],下面則是 [right]。這樣一來等於是兩條獨立的線,不會搞混。
 
請注意進入迴圈之前,我們先將馬達的角度值歸零,這時會以馬達當下的位置為0度。這個好習慣要養成喲,程式才不會把先前的累計角度值直接丟給機器人,這樣就會亂跑啦。
 
馬達的電力範圍為-100~100,我們是將馬達的角度變化直接指定為馬達電力,也就是說,JoyStick的馬達往前推70度,Car的左輪就會以電力70正轉。下圖中您看到我們有乘以 -1 ,這和您的機器人組裝有關,您說不定無需乘以 -1。
您也可以將角度變化乘以2之後再丟出去,也就是說JoyStick的馬達往後拉25度,Car的左輪就會以電力50反轉。這樣就是比例控制的最基本概念:被控端與控制端呈一個簡單比例關係(y = a * x + b)。
 
另外由Messaging指令中可看到我們指定的接收端是一台名為「EVA」的EV3主機。
 
注意:您可以在 loop 後面加一個 Wait 時間,例如等候個 0.3 秒左右,因為事實上我們不需要這麼頻繁地發送藍牙訊息,有可能會造成當機。這個數字可以自由調整來取得平衡。

手把的範例,您可隨意設計,拿得順手就好

Car:使用一般雙馬達車體即可。
 
使用一個無窮迴圈,分別把 right 與 left 接收到的內容指定給 Move Tank 指令的左右馬達轉速即可。
 


[樂高EV3機器人教學] 藍牙配對步驟

http://lab.cavedu.com/ev3_btpair

本頁說明兩台EV3主機之間的藍牙配對步驟,兩台主機的名稱為 EVA-13 與 EVA-02(您可在EV3軟體中自由修改主機名稱)。
 
STEP1:進到設定(扳手)頁面, 找到 Bluetooth 選項,點選後將藍牙開啟,開啟之後會在螢幕左上角看到藍牙符號。
 
   
 
STEP2:接著進入 Connections 選單,會先列出已配對的藍牙裝置(RK-HP),請點選 Search。
 
   
STEP3:Search一段時間後,螢幕上會顯示本主機周圍可找到的藍牙主機,可能為電腦、手機、EV3主機或任何支援藍牙通訊的裝置 (Arduino)。在此要連線的是 EVA-02 這台主機。點選它並按 [Connect]。
   
STEP4:Sea會再次詢問您是否要連接 EVA-02,請選[V]。接著設定 passkey 配對金鑰,預設為1234。就用這一組號碼就好。
 
   
 
STEP5:這時請看到 EVA-02 這台主機,當收到外部的藍牙配對要求時,會顯示畫面詢問您是否要允許本要求。點選[V] 之後,要輸入 passkey,這時直接按 [V]  就可以了。畫面顯示 Connected! 就代表配對完成了。
 
      
 
STEP5:配對完成之後,在EVA-13 的 Connections選單中就會看到 EVA-02了。
 



 
 






 
 


 
 

[樂高EV3機器人教學] 藍牙控制(雙觸碰感測器)

http://lab.cavedu.com/ev3_btbutton <- 程式碼由此下載

本篇是將 [雙觸碰感應器線控車 Switch 與 Multi-task 兩種寫法] 擴充成為藍牙遙控版本。程式碼請由以上頁面下載,分為 Handle 與 Car 兩個程式,您需將這兩個程式分別下載到兩台EV3主機上。先來看影片吧

[youtube=http://youtube.com/watch?v=nTTilwrme3Y] 
 
在執行程式之前,您需先將兩台 EV3 主機進行藍牙配對,執行時請先啟動 Car程式,再啟動 Handle程式。因為 Car 會被動接收來自 Car 的指令。
 
Handle:
 
兩個獨立的無窮迴圈,以左邊的迴圈來說,按下2號觸碰感測器之後會使用 Messaging 指令發送一個 TRUE(資料形態為 Logic,就是Boolean),反之則送出 FALSE。另一個迴圈也是相同的概念。在 Messaging 指令我們還可以設定這個 message 的 title,以左邊的迴圈來說就是 [right],右邊則是 [left],這樣一來同樣是送出 TRUE,但是 Car 就能藉由 title 來判斷要給誰來用了,不會搞混。
 
另外由Messaging指令中可看到我們指定的接收端是一台名為「EVA」的EV3主機。
 
注意:您可以在 Switch 後面加一個 Wait 時間,例如等候個 0.3 秒左右,因為事實上我們不需要這麼頻繁地發送藍牙訊息,有可能會造成當機。

 
手把的範例,您可隨意設計,拿得順手就好
 



Car:使用一般雙馬達車體即可。
 
一樣是兩個無窮迴圈,以左邊的來說,使用判斷條件為 Messaging / Compare / Logic 的 Switch,接收的 title 為 [right],如果接收到的內容為 TRUE,則要B馬達全速運轉,反之則停止。另一個迴圈則是去看 [left] 來控制 C 馬達轉動。
 



[樂高EV3機器人教學] 雙觸碰感應器線控車 Switch 與 Multi-task 兩種寫法

http://lab.cavedu.com/ev3_2touch <- 程式碼由此下載


本範例要使用兩個觸碰感測器來分別控制馬達轉動與否,在此設定#1觸碰感測器按下時,B馬達會轉動,放開就停止。另一組#4觸碰感測器與C馬達也是一樣。非常趣味的小遊戲,小朋友一定會喜歡!
 

 

While + Switch 的寫法:

無窮迴圈中先加入一個Switch:判斷 1號觸碰感測器是否被壓下,並分別在成立與不成立的 Case 中接續判斷4號觸碰感測器是否被壓下。

在此我們使用 Move Steering指令,您可以修改 Steering參數來調整轉彎的效果,或改用 Move Tank 指令。
兩個都壓下:直走
1壓下,3放開:右轉
3壓下,1放開:左轉
兩個觸碰感測器都放開:停止

 
Multi-tasking 多工的寫法:
 
使用兩個 Start 指令後面接無窮迴圈,01迴圈中使用一個 Switch :根據 1號觸碰感測器是否被壓下來控制B馬達。另一組也是一樣的概念。是不是很簡單呢?
 



[樂高EV3機器人教學] 自定義指令(My Blocks)

http://lab.cavedu.com/ev3_myblocks <- 程式碼請由此下載
本範例將介紹如何在 EV3 中自定指令(My Blocks),並可自由匯入(Import)與匯出(Export)。概念相當於 LabVIEW 的 SubVI。讓我們開始吧!
 
STEP1:首先先寫以下程式。本範例的功能是將行走距離(cm)換算為馬達角度(degree),方便我們更直覺地來控制機器人運動距離。計算式:  X * 450 / ( 7 * PI )。這是搭配 EV3 直徑56mm 的輪胎。這是約分後的結果,原式為 X * 360 / ( 2.8 * PI ) 。您可以自行算算看~
注意:EV3目前沒有 PI(π)常數可使用,本範例使用 3.1415926。
STEP2:將這三個指令選起來,接著點選工具列 Tools -> My Block Builder。會跳出以下視窗
 
請注意在包 MyBlocks的時候,不可以連 Start指令一起打包,
STEP3:進到 My Block Builder 頁面,選定 Icon,選自己喜歡的吧。也要幫這個 Block 取名字並加入相關敘述。在此將本指令取名為 CMtoDegree。

 

 
STEP4:設定輸入輸出欄位,請點選 [+] 號就可以增加欄位。並將畫面中間的標籤切換到 Parameter Setup 來設定這個欄位的屬性。
在此將第一個欄位設定為 Input,資料形態為 Number,預設值為1(cm)。
 
 
STEP5:設定 Output 欄位名稱為 Degree_Output,資料形態為 Number。
 
STEP6:完成了!您可在 My Blocks指令區看到這個指令,並新增出來使用。直接設定 x 再把 y 丟出去給馬達的 Degree 欄位就可以了。
 
小挑戰:如何新增欄位來調整 [輪胎直徑] 這個參數呢?
    
 
最後您可在本專案的設定頁面中的 Exportable Itmes 標籤中看到這個程式,點選畫面最下方的 Export 指令就可將其匯出到指定位置,可以分享給朋友或是讓其他的 EV3 專案使用。
 




[樂高EV3機器人教學] Brick Light 隨機燈光(Random隨機整數)

https://lab.cavedu.com/ev3_randombricklight <- 程式碼請由此下載

小挑戰:Random指令只能產生隨機整數,那如何讓Wait指令來等候隨機時間(例如1.33秒或 3.82秒?)

延續上一篇的[[樂高EV3機器人教學] Brick Light 跑馬燈 – Variable變數], 今天改用隨機指令讓EV3 主機隨機閃爍不童的顏色,算是應景的耶誕樹囉~

整體程式架構是無窮迴圈搭配 Switch 結構。請注意我們使用了 Random 指令,它可以在指定範圍之內隨機產生整數,在此我們將下限設為1, 上限設為3。並將輸出結果丟給 Switch 結構(判斷條件請改為 Numeric)。每次燈光閃爍的時間為1秒鐘。

001

Switch結構預設是 Boolean,因此只有兩個 case,請點選左上角的 [+] 符號新增更多 Case, 並將其號碼改為1, 2, 3,就是 Random 指令所產生的結果。這樣就能用 Random指令來控制 Switch結構囉!Case 1 2 3分別再放入不同顏色的 Brick Light指令就完成了。

002

如果要更進階的話,可以再多一個 Random指令來隨機指定每次燈光閃爍的時間

003

 

 

[樂高EV3機器人教學] Brick Light 跑馬燈 – Variable變數

http://lab.cavedu.com/ev3_bricklightswitching <- 程式碼請由此下載

本文將介紹如何運用變數來控制 EV3主機上的按鈕燈光,Ev3主機的按鈕燈光共有綠色,橘色與紅色三種顏色,分別以數字0, 1 ,2 來代表。

今天就是要利用變數的累加來控制按鈕燈光,每次進到無限迴圈之後,會先將變數值加 1(就是常見的 x++;)之後,接著進入一個邏輯 Switch分岔結構(判斷條件為 x>2),這樣當 x累加到 3的時候,就會進到 Switch分岔結構的上半,在此會先將變數 x 歸零,再去指定Brick Light 的顏色。反之如果 x 小於等於2的時候,就會直接根據變數x的數值來指定顏色。

螢幕快照 2013-12-23 下午4.20.35

程式可分為以下幾段

1. 初始化變數

螢幕快照 2013-12-23 下午4.20.35 4

 

2. 變數值累加 1

這裡說真的是圖形化程式比較笨的地方,就一個 x++ 要寫這麼長…   先讀出 x 的值之後,使用四則運算指令來加 1 ,再將計算結果指定為 x 的新值。

螢幕快照 2013-12-23 下午4.20.35

3. 根據變數值來控制Switch分岔結構

讀出 x 的值之後,使用 Compare指令來比較是否大於2,如果是則執行上段:先將變數 x 歸零,再去指定Brick Light 的顏色。反之則執行下段:直接根據變數x的數值來指定顏色。

請將Switch分岔結構的判斷條件改為 Logic,也就是根據所接收到的邏輯值來決定要執行哪一段程式。

螢幕快照 2013-12-23 下午4.20.35 3

4. 等候一秒

等候一秒來控制燈光持續的時間,您可以調整時間的長短來控制燈光效果。

螢幕快照 2013-12-23 下午4.20.35 2

另外在每一個 EV3 專題中都會有一個設定頁面(畫面左上角的扳手圖案),在此您可管理專案中的程式,圖像,聲音檔,自定指令(My BLocks),變數以及可輸出的項目(一般來說也是程式)。

由下圖可看到我們新增了一張EV3主機圖案作為專案的代表圖,另外本程式中有一個名為 x 的數值變數。

螢幕快照 2013-12-23 下午4.24.12

[新書出版]機器人程式超簡單-LEGO® MINDSTORMS® EV3動手作

992216_10201797249947094_1473981901_n

(點封面到本書官方網站,可下載所有程式碼與組裝範例LDD檔)

 

作者:曾吉弘、盧玟攸、翁子麟、薛皓云、蔡雨錡
出版社:馥林文化
出版日期:2013年12月16日
定價:480元
語言:繁體中文
ISBN:9789866076800

台灣第一本公開發行的樂高EV3機器人教學書籍!

◎樂高EV3機器人上市了!更強更快的控制核心與感測器,搭配簡單易用的圖形化程式環境,馬上就能完成您的第一台機器人。

◎搭配樂高各種不同的零件,您的機器人可以完成各種複雜的動作功能,在實作中理解各種機械與物理原理。

◎本書內含數十個程式範例,包含機器人行為設計、感測器、燈光音效以及多個整合式機器人專題。

◎您可藉由本書進入樂高機器人的世界,本書適合各級教學單位使用,也可用來作為初入機器人領域的新手參考書。

目錄:
Ch1 樂高機器人發展史與零件介紹
Ch2 EV3主機介紹
Ch3 EV3程式介紹
Ch4 機器人動起來
Ch5 機器人運動模式
Ch6 迷宮機器人
Ch7 追送報生的狗
Ch8 顏色鋼琴
Ch9 循跡機器人
Ch10 指南機器人
Ch11 垃圾車
Ch12 猜拳機器人
附錄A   範例機器人組裝說明
附錄B   如何匯入非官方指令模組到EV3環境
附錄C   其他EV3感測器指令介紹
附錄D   參考資源
附錄E   如何重新安裝EV3主機韌體

EV3體驗活動s

 

活動說明:
光是看書不夠過癮嗎?
憑本書書腰,就可以到全台各地的機器人教室預約免費體驗一次EV3機器人課程。親身體驗透過EV3創作的樂趣。
一般建議國小三年級(含)以上的同學比較適合參加本課程,可洽詢各教室安排最合適的課程規劃。
注意:
※教室保留是否受理報名與開課時間的權力。
※亦不得要求將本書腰活動,折讓為現金或是其他商品。
※體驗課程期限至2014年7月31日。

EV3機器人體驗課程教室的聯絡資料:

EV3資料擷取功能 – 10_列印實驗結果

開啟實驗,然後從文件選單選出您想列印的實驗,您也可以在Windows上使用快捷鍵ctrl+p或在Mac上選擇Command+P來選取資料。
 
開啟列印對話框,如下面例子所示


設置

1.顯示配置選項板(Show Configuration Palette):將連同目前的配置選項板(實驗配置、資料集合表、資料集計算或曲線圖設計)一併列印出。

2.隱藏配置選項板(Hide Configuration Palette):只列印曲線圖區域。

3.顯示說明(Show Legend):輸出時將包括每個資料集的說明指示

4.隱藏說明(Hide Legend):在列印輸出將不包括說明。

5.標準(Normal):使用影印機預設的的的頁面方向。

6.強制景觀(Force Landscape):強制將列印方向設為橫向。


選擇您想要的設定後點擊列印。

 

本文件部分係翻譯自LEGO MindStorms EV3 軟體中的說明頁面,一切資訊皆以此樂高公司官方資訊為準。

本團隊基於教學與分享,並無侵權之意,如有直接或間接損害他人權益行為,請不吝通知我們,我們將立刻移除有疑慮的文件,特此聲明

EV3資料擷取功能 – 09_圖形化設計

圖形化設計能讓您的機器人依據實驗區紀錄的資料執行動作。1. 圖型化設計選項

2. 選擇感測器

3. 顯示/隱藏臨界值區

4. 臨界值區圖示

5. 開發區設計面板

建立臨界值區是使用圖形化設計的關鍵。開發區設計面板用於創造在感測器數值於特定的開發區內時執行的程式方塊時,透過臨界值可以分隔出各個開發區,並透過上下拖曳調整臨界值,或者在臨界值中鍵入一個特定的數字。

範例1:門口招待員

您的機器人測量門口的距離,當有人走過,超音波感測器量測到的距離較近,機器人會撥放「早安」的聲音檔

選擇星型標誌區及矩形標誌區以建立兩個開發區,調整開發區臨界值以檢測是否有人走過門口,在這案例中,我們選擇30公分,當感測器數值在星型區(即高於30公分),機器人將執行與星型區相關的設計塊,當感測器數值在矩形區(即低於30公分),機器人將執行與矩形區相關的設計塊。

1. 星型區

2. 矩形區

3. 臨界值

4. 臨界值選擇區

於矩形區域到圖形設計選項版,拖曳一個聲音塊到設計區,並選擇「早安」的聲音檔。

這會怎麼運作呢?如果您的機器人檢測到你走過門口,它會跟你打招呼說「早安」。

範例2 溫室控制器

您有一個小溫室與溫度感測器,馬達A連接到一個排風扇與馬達B連接到一個熱風扇。

在這個範例中我們使用三個區:星型、矩形、圓形,臨界值設在攝氏20和30度,

●星型區:溫度在攝氏30度以上,打開馬達A10秒(排風扇)。

●矩形區:溫度在攝氏20度和30度之間,什麼也不做(這在理想溫度範圍內)。

●圓形區:溫度低於在攝氏20度,打開馬達B10秒(熱風扇)。

這會怎麼運作呢?當溫度低於特定臨界值,熱風扇開啟溫暖溫室,如果溫度高於另一個臨界值,排風扇會開啟排除熱空氣。

多個感測器

當使用多個感測器時,每個感測器最多可已有三個臨界值區與設計塊到特定的區,點即選擇感測器區域來查看或編輯感測器的臨界值區。

本文件部分係翻譯自LEGO MindStorms EV3 軟體中的說明頁面,一切資訊皆以此樂高公司官方資訊為準。

本團隊基於教學與分享,並無侵權之意,如有直接或間接損害他人權益行為,請不吝通知我們,我們將立刻移除有疑慮的文件,特此聲明

EV3資料擷取功能 – 08_資料集計算

透過資料集計算功能,可以由來現有的資料集取得新的資料集。

例如您可能想取得下列這些新的資料集:

車輪的行走距離=車輪圓周*馬達旋轉圈數

平均光強度=(顏色感測器1的環境光強度+顏色感測器2的環境光強度)/2

最接近的對象=從{超音波感測器1、超音波感測器2、超音波感測器3}中取最小值

在以上每種情況下,您拿一個或多個現有的資料集執行數學函數建立一個新的資料集,參考公式區域得到更多訊息。

您可以透過點擊資料集計算選項開啟資料集計算

 

1. 資料集計算選項

2. 公式區域

3. 計算資料集名稱

4. 計算資料集單位

5. 計算

6. 函數列表

7. 資料集

>公式區域

公式區域被用來建立一個方程式來生成新的資料集,你收集的資料集可能有不同的名稱。

下表為上述例子中的公式:

 
新資料集公式
車輪的行走距離(假設圓周17.5公分)Motor_Rotation _pB *17.5
平均兩個顏色感測器的光強度Avg(Color_Sensor_p3; Color_Sensor_p2) 或
(Color_Sensor_p3 + Color_Sensor_p2) / 2
最接近的對象Min(Ultrasonic_Sensor_pB;
Ultrasonic_Sensor_pC; Ultrasonic_Sensor_pD)

>計算資料集名稱

這是您的資料集ID,您可以重新給予其一個更有意義的名稱。

>計算資料集單位

給您的新資料集測量單位,例如移動的距離可能為公分。

>計算

一旦在公式區域建立了一個公式,點擊計算生成一個新的資料集,並將它放在曲線圖區域,此資料即將有自己的Y軸,您可以使用資料集合表選項更改顏色和圖型樣式。

>函數列表

函數可以使用於執行計算你的資料集。

函數名稱函數術語定義
+加一個常數或資料集到原來的資料集
減一個常數或資料集到原來的資料集
*資料集乘以一個常數或資料集
\資料集除以一個常數或資料集
絕對值Abs傳回指定數字的絕對值
平均Avg傳回所有指定資料集的平均值
最低值Floor傳回最大整數小於或等於指定數字
最高值Ceil傳回最小整數大於或等於指定數值
最小值Min傳回指定的一組數字中最小者
最大值Max傳回指定的一組數字中最大者
最接近值Round傳回最接近指定數字者
平方根Sqrt傳回指定數字的平方根植
正弦Sin傳回指定數字的正弦
餘弦Cos傳回指定數字的餘弦
正切Tan傳回指定數字的正切
反正切2Atan2傳回該的角度是兩個指定數字的正切商數
自然對數Ln傳回指定數字的自然對數
常對數Log傳回以10為基數的指定數字
導數Slope測量如何指定功能變化為輸入變化

平均、最小值、最大值函數可以接受多個資料集,如下所示:

Avg(資料集1;資料集2;資料集3)

●提示和訣竅
函數的計算是重複使用Y軸數值(s)於每個X軸點,這建立了一組新的Y軸數值(計算資料集),看下面的範例。

 

範例

如果你有兩個資料集,測量馬達旋轉於馬達端口B和端口C 30秒內每10秒所產生的資料,資料即可能包含以下資料:

 0秒10秒20秒30秒
馬達旋轉,端口B0134
馬達旋轉,端口C0157

 

對兩個資料集使用平均、加、乘的函數,會產生以下計算資料集:

 0秒10秒20秒30秒
平均馬達旋轉01.545.5
麻達旋轉,端口B+端口C03811
馬達旋轉,端口B*1.501.54.56

 

>資料集

此列表顯示可以使用資料集計算的資料集,點擊列表上的資料集自動將其插入到公式區域。 

本文件部分係翻譯自LEGO MindStorms EV3 軟體中的說明頁面,一切資訊皆以此樂高公司官方資訊為準。

本團隊基於教學與分享,並無侵權之意,如有直接或間接損害他人權益行為,請不吝通知我們,我們將立刻移除有疑慮的文件,特此聲明

EV3程式教室 雙顏色感測器循跡

 
循跡對於機器人來說是非常基本的控制要求,因為機器人在有限的感測器之下,可說是無法在沒有標的物走到指定的位置。因此軌跡線、定位點或是高級一點的GPS或是室內定位裝置等。其中最簡單也是最重要的就是循線前進(line follow)。
 
在軌跡線無交叉的情況下,機器人只要一個光感測器就能沿著軌跡線的左側或右側前進,但也因為這個前提,機器人是無法經過十字交叉口的。
 
由下圖可看到,軌跡線是有交叉的,因此我們需要使用第二個光感測器來夾住這條軌跡線。
 
 
如此就會有四種狀況:(假設左邊的顏色感測器接在#1輸入端,右邊的顏色感測器接在#1輸入端),我們用 EV3程式來寫就是這樣的架構 (本範例無馬達指定,僅示範架構):
 
1. 左黑右白:機器人偏右,向左修正 (下圖中,下方V區塊)
 
2. 左白右黑:機器人偏左,向右修正 (下圖中,上方X區塊)
3. 兩者皆白:軌跡線位於兩個感測器中央,前進!(下圖中,上方V區塊)
4. 兩者皆黑:十字路口,前進  (下圖中,下方X區塊)
 

對應到Arduino 或任何文字式程式語言就是 while(true) + switch 或是巢狀的 if/else架構,如以下 NXC 範例:

 
#define pwr 40
#define line 35
task main()
{
    SetSensorLight(S1);
    SetSensorLight(S2);
    while(true)
    {
         if(Sensor(S1)>Light && Sensor(S2)>Light) //1白2白 -> 直走
         {
             OnFwdSync(OUT_AC,pwr,0);
         }//if
         else if(Sensor(S1)>Light && Sensor(S2)<Light) //1白2黑 -> 右前方修正
         {
            OnFwd(OUT_A,pwr);
            OnFwd(OUT_C,10);
         }//else if
        else if(Sensor(S1)<Light && Sensor(S2)>Light) //1黑2白 -> 左前方修正
        {
            OnFwd(OUT_A,10);
            OnFwd(OUT_C,pwr);
        }//else if
        else //1黑2黑 -> 直走
        {
            OnFwdSync(OUT_AC,pwr,0);
        }//else
}//while
}//main

 

  

 

[溫故知新] 實做比例控制方法之循跡機器人

比例(proportional)控制方法是一種控制理論,可用來讓一個自動控制系統能夠對不同的環境狀況做出不同的反應,誤差愈大時,修正幅度也愈大,反之則只要小幅度修正即可,盡量讓。當然 P控制不是萬能,所以還有後續的積分(Integral)與微分(Differential)控制法,但本文先不介紹。

一般來說, 我們都是機器人循跡這個範例中來應用比例控制方法,對於學生來說是個非常好的練習,可以充分體會理論與現實狀況的差異(ㄎㄎ)

本文內容是發想自[A PID Controller For Lego Mindstorms Robots] 一文,歡迎延伸閱讀,本文中的示意圖也是引用自該網頁,您也可以參考維基百科對於 PID 控制器的定義

傳統的循線方法一言以蔽之就是二分法:向右前方移動,直到偵測到黑線之後向左修正。(白場地黑線,機器人置於左邊)

Basic_bot.

從這裡我們可以看出許多理想性的假設:

1. 每次修正都要能夠回到白色場地,這就是為什麼當軌跡曲率變化太大(例如許多左彎後接一個右彎、髮夾彎甚至直角灣)時,都會在此陣亡…

2. 機器人根本不會直走,因為我們的程式就是這樣寫的,左前方右前方一直重複移動。這樣會造成明明是大直線,但是機器人還在那邊左右左右修正,太慢了。

3. 機器人不知道彎道的變化程度,每次修正的動作皆相同,傳統的兩分法是取黑色軌跡線與白色場地的光值之中間值作為判斷邊界,例如 (30+50) / 2 = 40。小於40視為偵測到黑線,反之則代表在白色場地上。如果光值是46或47,代表此時只有偏離一點點,應該進行小幅度修正就好。但是二分法就是無法作到。

4. 黑就是均勻的黑,白就是均勻的白,怎麼可能嘛!這要考慮到光照,桌面乾淨程度等等…  實際上是不可能有均勻顏色這種事的。

所以由此可以延伸出非常多東西可以深入去玩,您的機器人也會愈來愈聰明:

1. 導入比例控制方法,讓機器人碰到劇烈彎道時可以修正得更快速

2. 導入比例控制方法,當誤差為零時,機器人就是直走!

3. 導入比例控制方法,以本文的設定來說,光值會在30~50之間連續變化,誤差產生時會影響機器人的馬達轉速。以髮夾彎來說,機器人一定會瞬間切入黑色軌跡線較深,這時光值會下降比較多,機器人便是藉由這種方法來得知彎道的曲率,作出更適合的修正。

4. 每次都重新更新判斷邊界值,機器人對於環境的適應力會更高

下圖中我們可以看到二分法就是很簡單的 if / else,機器人只有兩個動作。

到了中間的三階段之後,我們設計一個區間(光值43~47),這時代表機器人略偏但是不算太偏,所以還是直走。直到光值小於43或是大於47代表篇很多了才進行修正。

有三階段就有四階段五階段,最後這麼多階段就會變成一條直線,比例控制方法的比例事實上就是這條線的斜率。斜率愈大代表機器人對於誤差愈敏感,修正幅度也愈大。這在程式中我們是用一個參數 kp 來調整。kp 不是愈大愈好唷!kp過大會讓機器人變得神經兮兮,一點點誤差也一直在修正反而效果不好。這裡都需要反覆地調整,請加油~

light_number_line_3

簡單用 EV3 程式寫一個來玩玩看,請於CAVE實驗室下載唷!

ev3

阿吉老師在淡江電機所開的[機器人程式模擬與開發],就是使用 leJOS Java程式語言來控制樂高NXT機器人,歡迎跟著我們的教學網站一同學習! http://lejosrobot2013.cavedu.com/。以下是上周四的 P控制機器人上課影片與照片

[youtube=https://www.youtube.com/watch?v=lwlzGSxJzak]

2013-10-24 11.15.56 2013-10-24 12.33.34

這是我們另一個使用 NXC 寫的雙光感測器循跡程式,是不是有如刀切豆腐一樣順暢呢?

[youtube=http://youtu.be/0ZMz-CS0bPY]

附上NXC程式碼:

//我是p控制
task main()
{
SetSensorLight(S3);
int kp=2; //比例參數
int light_initial = Sensor(S3); //程式啟動時先抓一次光值,這時請將光感測器所投射出的光圈擺在黑線左測一半處
int light_realtime;                      //即時光值
int vl,vr;                                         //左右輪速
while(true)
{
light_realtime = Sensor(S3);    //更新即時光值
vl = 40 + kp*(light_realtime-light_initial);    //計算左輪速,40 是基礎速度,代表當誤差為0時,機器人將以此速度直走
vr = 40 + kp*(light_realtime+light_initial); //計算右輪速, +/- 是代表進彎時的修正方向,可根據實際狀況修改
OnFwd(OUT_B,vl);                      //出發!
OnFwd(OUT_C,vr);
}

}