Category Archives: MATLAB 程式設計

[MATLAB] 讀取感應器的值-程式說明

上次我們放上了一個 MATLAB 的程式,可以讀取光感應器的值,現在讓我們來說明一下這個程式吧!

%Initialize the working environment
clear all;
close all;
clc;
COM_CloseNXT all;

%Search for NXT and get the NXT profile

hNXT=COM_OpenNXT();

%Set the connected NXT as default handle
                                    
COM_SetDefaultNXT(hNXT);                               
NXT_PlayTone(660,200);
pause(0.3);

%task main

OpenLight(SENSOR_1, 'ACTIVE');                        
OpenSwitch(SENSOR_2);                                

while GetSwitch(SENSOR_2)==false                                          
   LightValue = GetLight(SENSOR_1)*0.09775
end

前面幾行是建立程式的工作環境,在上一篇已經有詳細的介紹,這裡就不多做說明。在 pause(0.3) 後,進入主程式,即註解 task main 以下的程式碼。(注意:在 MATLAB 中,註解是以%表示,因此%後面的字元不會被編譯)

以下對主程式進行說明:

OpenLight(SENSOR_1, 'ACTIVE');  
開啟光感應器,感應器接在1號輸入端,且打開LED燈。

OpenSwitch(SENSOR_2);  
開啟觸碰感應器,且感應器是接在2號輸入端。

while GetSwitch(SENSOR_2)==false                                          
   LightValue = GetLight(SENSOR_1)*0.09775
end
進入 while 迴圈,跳出的條件是觸碰感應器壓下。若是觸碰感應器沒壓下,則不斷讀取光感應器的值(GetLight),由於值的範圍是 raw data,即 0~1023,因此乘上 0.09775 以使其範圍在 0~100。另外記得迴圈要加end表示結束。

感應器的值會顯示在 MATLAB 的  command window 上。若是在讀取感應器值的那行程式加上分號,就不會顯示了。這是 MATLAB 的特色之一,即不加分號會顯示運算過程,而加分號則是隱藏運算過程。

鼓勵有 MATLAB 的朋友們試試看囉!

[MATLAB] 第一個程式-建立程式工作環境

上次介紹了如何安裝 NXT toolbox 到MATLAB上,這次讓我們來建立程式工作環境並寫一個簡單的程式。

由於toolbox已經安裝好了,所以基本的工作環境其實已經準備好了,現在我們要建立的是程式的工作環境。請看下面範例:

COM_CloseNXT('all')
close all
clear all
clc % clear old messages from command line
hNXT = COM_OpenNXT(); % look for USB devices

COM_SetDefaultNXT(hNXT); % sets global default handle
% now we don't have to use hNXT anymore!
NXT_PlayTone(440, 300);
pause(0.3);
NXT_PlayTone(440, 300);
% but never forget to clean up after your work!!!
COM_CloseNXT(hNXT);

程式一開始先執行 COM_CloseNXT('all') 指令清除可能存在之 NXT 與電腦的連線以免程式錯誤,接下來三行是 MATLAB 本身的指令,close all 會關閉所有視窗,clear all 則是清除所有變數,clc則是清空 command window 的內容。

接下來執行 hNXT = COM_OpenNXT(); 指令,此指令會尋找使用 USB 線與電腦連接的 NXT ,若是要使用藍芽的話則只要在括號內加上 'bluetooth.ini' 即可,非常簡單,當然電腦與 NXT 的連線要先建好。此指令並會回傳一個代碼(handle)代表找到的NXT,我們把它存在變數 hNXT 裡,之後所有 NXT 指令在使用時都必須要輸入特定的代碼。當然,這樣會非常麻煩,於是在下一行的 COM_SetDefaultNXT(hNXT); 將 hNXT 設為全域的預設代碼,之後就不需要在指令後再輸入代碼了。

接下來的指令就非常簡單明瞭了,NXT_PlayTone(440, 300); 代表播放一個頻率440Hz的聲音0.3秒,pause(0.3)暫停0.3秒,最後 COM_CloseNXT(hNXT); 關閉連線。

最後提醒一下,在MATLAB裡分號是可有可無的,若是沒打分號的話,該指令相關的訊息會顯示在command window上,例如 COM_OpenNXT() 若是沒打分號,在連線建立後command window就會顯示一推 NXT 的資訊,如下圖所示:

 

[MATLAB] 如何在MATLAB安裝NXT Toolbox

之前我們陸續發過一些使用MATLAB控制NXT的文章,其內容從簡單的介紹到一些稍微進階的應用。今天讓我們回歸到基本的問題:

要如何在MATLAB下安裝NXT Toolbox?

雖然在RWTH的網站已經有詳細說明如何安裝NXT Toolbox,不過我們還是在此介紹一下,一來翻譯一下網站內容,二來則是留著做一個紀錄。

請跟著以下的步驟完成NXT Toolbox的安裝:

 

1. 要安裝NXT Toolbox首先您必須確認您擁有MATLAB R2008b(含)以上的版本,並且為32位元的版本,64位元版本是不支援NXT Toolbox的。(註: 最新的 NXT toolbox v4.07 已可支援64-bit 的 MATLAB)

 

2. 到RWTH的網站下載最新的NXT Toolbox,目前最新的版本是4.04。

( NXT Toolbox下載網址:http://www.mindstorms.rwth-aachen.de/trac/wiki/Download )

 

3. 下載完後,將檔案解壓縮到任一位置,只要確保不會被刪掉即可。

 

4. 確認NXT的韌體為1.28或1.29,以1.29為佳,並且確認電腦已裝有NXT的驅動程式。

( NXT 韌體下載:http://mindstorms.lego.com/en-us/support/files/Firmware.aspx )

 

5. 打開MATLAB,選擇 File->Set Path->Add Folder。

 

6. 選擇剛剛解壓縮完的資料夾 RWTHMindstormsNXT 後按確定加入

 

7. 再次選取Add Folder,選擇 RWTHMindstormsNXT 資料夾裡的 tools 子資料夾後按確定加入。

 

8.打開RWTHMindstormsNXT 資料夾,進入子資料夾tools->MotorControl,裡面會有一個檔案MotorControl22.rxe,請利用NXT-G或BricxCC將此檔案下載到NXT裡,這是一個用NXC寫成的程式,功能為對馬達做精確的控制,每當使用精準的馬達指令時都會呼叫此程式。

 

到這裡就大功告成了,請接上XNT,進入MATLAB,在command window上輸入指令:   COM_OpenNXT

若是一切正常,則不會出現任何錯誤訊息,且在command window中會出現NXT的相關資訊,如下圖所示:

MATLAB 學習資源

之前幾週我們曾討論過利用MATLAB控制NXT,然而,若您是MATLAB的初學者,還是要先從基本的程式設計開始,熟悉一些常用語法後,再來嘗試一些NXT指令。

在這裡推薦大家一個非常有用的學習資源:台大生物機電系方煒教授的"MATLAB之工程應用"的教學網頁,裡面有課程投影片可以下載,內容非常詳盡,對有心學習MATLAB的朋友們會非常有幫助。

方煒教授網頁連結

[MATLAB] 讀取感應器的值

又到了一周一回的MATLAB NXT程式篇了。

由於最近實在太忙 先放上程式碼 詳請請待下回分解,有興趣的朋友們可以先自行摸索,參照NXC或LeJOS的寫法以及本程式的註解,很容易就可以看懂喔~

%Initialize the working environment
clear all;
close all;
clc;
COM_CloseNXT all;

%Search for NXT and get the NXT profile

hNXT=COM_OpenNXT();

%Set the connected NXT as default handle

COM_SetDefaultNXT(hNXT);
NXT_PlayTone(660,200);
pause(0.3);

%task main
%Initialize light sensor with active light
%Initialize touch sensor

OpenLight(SENSOR_1, ‘ACTIVE’);
OpenSwitch(SENSOR_2);

while GetSwitch(SENSOR_2)==false
LightValue = GetLight(SENSOR_1)*0.09775
end

[MATLAB] 轉動馬達

最近開始嘗試使用MATLAB來控制NXT(舊文章請點我),要使用MATLAB控制NXT,需要使用由德國 RWTH Aachen University 所開發的工具箱,基本上只要從RWTH的網站上(連結請點我)下載MATLAB工具箱並照著網站上所提示的步驟即可順利地使用(MATLAB版本需2008以上),上手可說是非常容易。

使用MATLAB控制NXT就如同LabVIEW下的Direct mode一樣,也就是說NXT跟電腦必須透過USB或藍芽連結,才可執行程式,如此主要的計算都在電腦端,NXT機器人就相當於電腦的延伸,這樣做的優點在於使用者可以結合MATLAB最完整的功能來控制NXT,而不用受到NXT本身硬體效能的限制,缺點當然就在於機器人變得比較沒有行動能力。若要讓NXT可以自主執行程式,就要使用MATLAB的附屬軟體-Simulink來撰寫程式,這個我們日後再作介紹。

現在讓我們來看看第一個MATLAB程式,這是一個會讓AB馬達以全速轉三秒的程式:

%Initialize the working environment
clear all;
close all;
clc
COM_CloseNXT all;
hNXT=COM_OpenNXT();               %Search for NXT
COM_SetDefaultNXT(hNXT);        %Set the connected NXT as default handle
NXT_PlayTone(660,200);

%task main
Motor_AB =NXTMotor('AB','Power',100)
Motor_AB.SendToNXT
pause(3)
Motor_AB.Stop('brake')

%Close all handles
COM_CloseNXT(hNXT);

對於有使用NXC或JAVA的朋友們,相信以上的程式對您而言並不是全然的陌生,有興趣歡迎提問囉!

[MATLAB] MATLAB for NXT

MATLAB 是一個功能強大的數學運算軟體,是一種可用於演算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和互動式環境。除了矩陣運算(MATLAN就是從矩陣運算起家)、繪製函數/數據圖像等常用功能外,MATLAB還可以用來創建用戶界面及與調用其它語言(包括C,C++和FORTRAN)編寫的程序。

儘管MATLAB主要用於數值運算,但它也有為數眾多的附加工具箱(Toolbox),因此也適合不同領域的應用,例如控制系統設計與分析、影像處理、信號處理與通訊、金融建模和分析等。另外還有一個配套軟體包Simulink,提供了一個可視化開發環境,常用於系統模擬、動態/嵌入式系統開發等方面。

由於Lego Mindstorms NXT是目前普遍被全世界使用的教育性機器人平台,MATLAB也有可以控制NXT的ToolBox,而此ToolBox是一個由德國RWTH Aachen University所開發的計畫。目前CAVE正開始研究使用MATLAB控制NXT。使用MATLAB控制NXT最大的優點在於可以輕易的做到數值分析以及運算,若是要利用NXT實作一個簡單的控制系統(像是軌跡車),MATLAB就可以讓我們用最簡單的方式來分析數據。

之後若是有任何心得,再隨時跟各位分享囉!

若是您已經有MATLAB,並對使用MATLAB控制NXT有興趣,請從這裡開始。

利用MATLAB繪製的函數圖形