要在matlab环境下给NXT机器人编程,你必须拥有Matlab R2008以上版本,还必须安装德国亚琛大学开发的NXT Toolbox组件。我的版本Matlab 2009a32位的版本,64位版本的Matlab软件不支持亚琛大学的NXT工具包Toolbox。接着必须安装NXT Toolbox。至于Matlab的下载和安装这里就不说了,百度或google下就知道了,下面说说RWTH - Mindstorms NXT ToolboxRWTHMindstormsNXT)的安装,实际上RWTH(亚琛大学)的网站已经说明清楚了。

NXT Toolbox下载地址:https://www.mindstorms.rwth-aachen.de/trac/wiki/Download,目前最新的版本是4.04
亚琛大学的简介:亚琛工业大学(简称RWTH Aachen)位于北莱茵-威斯特法伦州,是德国最负盛名的理工科大学之一。大学成立于1870年,当时成立的宗旨在于促进手工业与经济的发展,当时叫做莱茵威斯特法伦皇家技术学校,刚成立时仅有29名教师。亚琛工业大学自成立以来,不断开拓理工科目新领域。现在仅机械制造专业就有15门初等学位后的专修科目以供选择。。亚琛工业大学在电工学、采矿以及一般的工程学科上独领风骚,不仅是德国规模最大的理工科学府之一,也是世界上顶尖的理工大学。
 
 
matlab环境下给NXT机器人编程步骤:

实验视频:

  

    这次实验用蓝牙适配器,来遥控具备蓝牙的NXT控制器,首先插入蓝牙适配器,用window XP自带蓝牙软件,建立PC机与NXT控制器的连接,生成虚拟串口。具体方法见博客文章:https://www.eefocus.com/zhang700309/blog/11-11/234292_3ca14.html

 

    在MATLABcommand 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,定义两个电机接在端口BC

mBC = NXTMotor('BC');

%如果没有按下触碰传感器,while结构里的程序就不断循环执行。

while GetSwitch(SENSOR_1)==false                                            

   %把超声波传感器读取的数据赋值给变量UltrasonicValue,同时

   %超声波传感器读取的数据显示在matlabcommand window 上。

   UltrasonicValue = GetUltrasonic(SENSOR_4)

   if  UltrasonicValue<20 %如果超声波传感器检测距离小于20cm

       %定义两个电机接在端口BC,功率为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控制器关机,然后再接通电源,即可联机成功了!

 

1、 确认NXT的固件为1.28或1.29,以1.29为佳,并且确认电脑已裝有NXT的驱动程序。
NXT固件下載:https://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,小车前进。