要在matlab环境下给NXT机器人编程,你必须拥有Matlab R2008以上版本,还必须安装德国亚琛大学开发的NXT Toolbox组件。我的版本Matlab 2009a,32位的版本,64位版本的Matlab软件不支持亚琛大学的NXT工具包Toolbox。接着必须安装NXT Toolbox。至于Matlab的下载和安装这里就不说了,百度或google下就知道了,下面说说RWTH - Mindstorms NXT Toolbox(RWTHMindstormsNXT)的安装,实际上RWTH(亚琛大学)的网站已经说明清楚了。
NXT Toolbox下载地址:http://www.mindstorms.rwth-aachen.de/trac/wiki/Download,目前最新的版本是4.04。
英文版入门教程网页:http://www.mindstorms.rwth-aachen.de/trac/wiki/Documentation
亚琛大学的简介:亚琛工业大学(简称RWTH Aachen)位于北莱茵-威斯特法伦州,是德国最负盛名的理工科大学之一。大学成立于1870年,当时成立的宗旨在于促进手工业与经济的发展,当时叫做莱茵威斯特法伦皇家技术学校,刚成立时仅有29名教师。亚琛工业大学自成立以来,不断开拓理工科目新领域。现在仅机械制造专业就有15门初等学位后的专修科目以供选择。。亚琛工业大学在电工学、采矿以及一般的工程学科上独领风骚,不仅是德国规模最大的理工科学府之一,也是世界上顶尖的理工大学。
在matlab环境下给NXT机器人编程步骤:
1、 确认NXT的固件为1.28或1.29,以1.29为佳,并且确认电脑已裝有NXT的驱动程序。
NXT固件下載:http://mindstorms.lego.com/en-us/support/files/Firmware.aspx,最新版本是1.31。
安装NXT-G软件,并且通过NXT-G软件下载固件升级到NXT控制器里。
2、 打开MATLAB,选择File》Set Path》Add Folder。
3、 选择刚刚解压完的资料夹RWTHMindstormsNXT后,按确定加入。
4、 再次选择Add Folder,选择RWTHMindstormsNXT资料夹里的tools子资料夹后,按确定加入。
5、 打开RWTHMindstormsNXT 资料夹,进入子资料夹tools->MotorControl,里面会有一个文件MotorControl22.rxe,利用NXT-G先將此文件下载到NXT控制器里,这是一个用NXC写成的文件,功能是对马达做精确的控制,每当使用精确的马达指令时都会呼叫此程序。
6、 到这里就大功告成了,请用USB线连接NXT控制器,进入MATLAB,在command window上输入指令:COM_OpenNXT
如果一切正常,则不会出现任何错误信息,且在command window中会出现NXT的相关信息,如下图所示。
我做了一个小实验,来测试下Matlab蓝牙遥控一个带超声波的小车,当超声波检测与障碍物小于20CM,小车后退,大于20CM,小车前进。
实验视频:
这次实验用蓝牙适配器,来遥控具备蓝牙的NXT控制器,首先插入蓝牙适配器,用window XP自带蓝牙软件,建立PC机与NXT控制器的连接,生成虚拟串口。具体方法见博客文章:http://blog.ednchina.com/zhang0309/2124906/message.aspx。
在MATLAB的command window窗口里,写COM_MakeBTConfigFile,出现下图对话框,把“SerialPort”栏里,填入window XP自带蓝牙软件的“COM端口”的虚拟输出端口的端口号,我这次实验用window XP自带蓝牙软件生成的串口号是COM4,所以我下图的“SerialPort”栏里,把默认的COM3改为COM4。如果蓝牙联机不成功,应该检查window XP自带蓝牙软件的虚拟端口号,是否发生变化,如果变化了,要重新写COM_MakeBTConfigFile,重新设置“SerialPort”栏里端口号。
实验用Matlab程序:
%初始化工作环境
clear all;
close all;
clc;
COM_CloseNXT all;
%搜寻NXT,建立通讯连接,先使用USB,若没有USB,则蓝牙连接。
hNXT=COM_OpenNXT('bluetooth.ini');
%设置已成功通讯连接的NXT,作为全局默认处理
COM_SetDefaultNXT(hNXT);
NXT_PlayTone(660,200);
pause(0.3);
%主程序
%开放触碰传感器,且传感器是接在端口1。
OpenSwitch(SENSOR_1);
%开放超声波传感器,且传感器是接在端口4。
OpenUltrasonic(SENSOR_4);
%创建NXT电机对象mBC,定义两个电机接在端口B、C。
mBC = NXTMotor('BC');
%如果没有按下触碰传感器,while结构里的程序就不断循环执行。
while GetSwitch(SENSOR_1)==false
%把超声波传感器读取的数据赋值给变量UltrasonicValue,同时
%超声波传感器读取的数据显示在matlab的command window 上。
UltrasonicValue = GetUltrasonic(SENSOR_4)
if UltrasonicValue<20 %如果超声波传感器检测距离小于20cm
%定义两个电机接在端口B、C,功率为50。
mBC = NXTMotor('BC', 'Power', 50);%电机驱动小车后退。
%发送命令给NXT。
mBC.SendToNXT();
pause(0.3);%等待0.3s。
elseif UltrasonicValue>20 %如果超声波传感器检测距离大于20cm
mBC = NXTMotor('BC', 'Power', -50); %电机驱动小车前进。
mBC.SendToNXT();
pause(0.3);
else
mBC.Stop('off');%NXT电机对象mBC,停止小车。
end
end
% 不要忘记当程序执行完后,清除对串口资源的占有。
COM_CloseNXT(hNXT);
上面程序有详细注释,注释前必须有“%”。不管程序是否简单或复杂,先试验成功一个例子是很重要,这样以后才有信心进一步研究。
程序中超声波传感器采集数据那个命令行,我打上阴影,要特别注意,你想在MATLAB 的 command window 窗口上,实时显示数据,这个命令行后面就不能加分号“;”,如果像其他命令行一样加“;”,则传感器的检测值就不会显示。这是MALAB的特色之一,即不加分号会显示运算过程,而加分号则是隐藏运算过程。
Matlab的逻辑程序在PC机中,并不在NXT控制器中,NXT控制器只是接受PC机的Matlab指令,然后直接执行,并没有逻辑能力。按下正在运行程序的NXT控制器的中间那个“橙色”按钮,程序运行结束,再重新执行Matlab程序,PC机与NXT控制器蓝牙可以蓝牙连接,并使NXT机器人运行。
估计很容易碰到程序运行时无法蓝牙联机的情况,这时你需要把NXT控制器关机,然后再接通电源,即可联机成功了!
用户377235 2015-3-28 19:06
用户377235 2012-12-4 03:44
用户377235 2012-11-7 16:50
飞言走笔 2011-9-25 21:43
用户202760 2009-6-23 15:37
用户165719 2009-1-14 16:53