買書捐殘盟

2011年8月8日 星期一

Matlab for NXT,陀螺儀測試偏移值

本程式碼用以測試陀螺儀(Hitechnic Gyro)之偏移值(offset),將機器人扶正靜待1秒鐘,即可完成檢測。
程式碼如下:
% 測試陀螺儀元件

clear all
clc
% 設定陀螺儀參數
port = SENSOR_3;

COM_CloseNXT('all');
hNXT=COM_OpenNXT();
COM_SetDefaultNXT(hNXT);

OpenGyro(port);
offset = CalibrateGyro(port,'AUTO');

disp(sprintf('Gyro Sensor offset = %d ',offset));

COM_CloseNXT(hNXT);

Matlab For NXT,本程式測試讀取MotorA轉角,並回傳數值至電腦

[程式碼]
clear all

clc

COM_CloseNXT('all');

hNXT=COM_OpenNXT(); %此指令會尋找使用 USB 線與電腦連接的 NXT,若是要使用藍芽的話則只要在括號內加上 'bluetooth.ini' 即可
COM_SetDefaultNXT(hNXT); %將 hNXT 設為全域的預設代碼,之後就不需要在指令後再輸入代碼了

force=50;
Dist=360;

MyMotor = NXTMotor(MOTOR_A,'Power',force, 'TachoLimit', Dist);
MyMotor.ResetPosition();

MyMotor.SendToNXT();
data=MyMotor.ReadFromNXT();

while(data.Position < Dist)
data=MyMotor.ReadFromNXT();
disp(sprintf('Current Position of Motor A: %d', data.Position));
end

COM_CloseNXT(hNXT);

Matlab for NXT,馬達正轉與反轉測試

將馬達接在port A,C,進行正反轉測試
[程式碼]
%測試A,C馬達正轉與反轉
clear all

clc

COM_CloseNXT('all');

hNXT=COM_OpenNXT(); %此指令會尋找使用 USB 線與電腦連接的 NXT,若是要使用藍芽的話則只要在括號內加上 'bluetooth.ini' 即可
COM_SetDefaultNXT(hNXT); %將 hNXT 設為全域的預設代碼,之後就不需要在指令後再輸入代碼了

LeftWheel=MOTOR_A;
RightWheel=MOTOR_C;
BothWheel=[LeftWheel;RightWheel];
Force=50; %馬達動力
Dist=360; %馬達轉動的角度

MotorForward = NXTMotor(BothWheel,'Power',Force, 'TachoLimit', Dist);
MotorReverse = MotorForward; %設定MotorReverse結構與MotorForward相同
MotorReverse.Power= -Force; %個別修改Power屬性

MotorForward.SendToNXT(); %送出正轉指令
MotorForward.WaitFor(); %等待執行完畢

MotorReverse.SendToNXT(); %送出反轉指令
MotorReverse.WaitFor();

COM_CloseNXT(hNXT);

2011年8月7日 星期日

RWTH- MindStorms NXT Toolbox Documents

這個網站完整記錄Matlab 編輯NXT 控制,對於感測器、馬達等元件的語法說明。
http://www.mindstorms.rwth-aachen.de/trac/wiki/Documentation

2011年8月6日 星期六

Matlab for NXT,搭配LightSensor與TouchSensor之測試實驗

以前接觸Brixcc或lejos,TouchSensor就叫做TouchSensor,但Matlab的Toolbox命名為Switch。

以程式碼解說實際的簡單應用:
[程式碼]

%觸碰感知器(TouchSensor)、光感知器(LightSensor)測試

clear all
clc

COM_CloseNXT('all');

hNXT=COM_OpenNXT(); %此指令會尋找使用 USB 線與電腦連接的 NXT,若是要使用藍芽的話則只要在括號內加上 'bluetooth.ini' 即可
COM_SetDefaultNXT(hNXT); %將 hNXT 設為全域的預設代碼,之後就不需要在指令後再輸入代碼了

OpenSwitch(Sensor_1);
OpenLight(Sensor_2,'ACTIVE');

cnt=1;
while (GetSwitch(Sensor_1)==false)
LightValue(cnt)=GetLight(Sensor_2)*0.09775;
cnt=cnt+1;
end

plot(LightValue)
COM_CloseNXT(hNXT);


解說:
1.這個程式利用OpenLight()指令、OpenSwitch()指令分別初始光感知器、觸碰感知器,指令的應用,請在Matlab command提示字元下,輸入help OpenLight、help OpenSwitch查閱
2.OpenLight()指令,參數使用ACTIVE,告知初始即點亮LightSensor
3.GetSwitch()用以取得觸碰感知器觸碰與否,有則回傳true,反之則以false
4.GetLight()指令用以取得光感知器的讀值,乘以0.09775轉換為我們較為了解的光感值
5.程式判斷觸碰感知器未被按下時,記錄光感知器的讀值於LightValue陣列,並於觸碰感知器被按下後,將結果plot出來。

Matlab for NXT,程式碼的外殼template

紅色文字顏色套用自程式碼中。

[程式碼]
clear all
clc
COM_CloseNXT('all');

%此指令會尋找使用 USB 線與電腦連接的 NXT,若是要使用藍芽的話則只要在括號內加上 'bluetooth.ini' 即可
hNXT=COM_OpenNXT();

%將 hNXT 設為全域的預設代碼,之後就不需要在指令後再輸入代碼了
COM_SetDefaultNXT(hNXT);

:
:
程式區
:
:



COM_CloseNXT(hNXT);

Matlab for NXT,安裝ToolBox套件

筆者過去接觸Matlab多半用於自動控制設計,對於NXT的操作算是頭一遭。如有謬誤,請指教。

環境說明:
1.使用Matlab版本為R2008b
2.作業系統OS為win7
3.NXT_Driver for win7
(1) 32bit: http://www.robotc.net/files/NXT_32bit_driver.zip
(2) 64bit: http://www.robotc.net/files/NXT_64bit_driver.zip
4. NXT Firmware: LEGO_MINDSTORMS_NXT_Firrmware_V1.29.rfw
5. RWTH Mindstorms NXT toolbox

安裝toolbox步驟說明
1.到RWTH網站下載最新toolbox

2.更新NXT firmware韌體程式至最新

3.打開matlab,點選[File/Set Path/Add Folder],並指定[RWTHMindstormsNXT]資料夾所在位置,選擇後按[save]

4.再次選擇[Add Folder],並指定[RWTHMindstormsNXT/tools]之資料夾加入,按[save]

5.打開RWTHMindstormsNXT 資料夾,進入子資料夾tools->MotorControl,裡面會有一個檔案MotorControl22.rxe,利用NXT-G或Brixcc將該檔案傳到NXT主機上
(所有傳呼控制都會執行此檔案,務必上傳)

6.
接上NXT,進入MATLAB,在command window上輸入指令: COM_OpenNXT
如果畫面正常,將出現NXT連線後的相關資訊。