原创 用Matlab软件为乐高NXT机器人编程

2011-9-25 18:42 9595 7 11 分类: MCU/ 嵌入式

要在matlab环境下给NXT机器人编程,你必须拥有Matlab R2008以上版本,还必须安装德国亚琛大学开发的NXT Toolbox组件。我的版本Matlab 2009a32位的版本,64位版本的Matlab软件不支持亚琛大学的NXT工具包Toolbox。接着必须安装NXT Toolbox。至于Matlab的下载和安装这里就不说了,百度或google下就知道了,下面说说RWTH - Mindstorms NXT ToolboxRWTHMindstormsNXT)的安装,实际上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门初等学位后的专修科目以供选择。。亚琛工业大学在电工学、采矿以及一般的工程学科上独领风骚,不仅是德国规模最大的理工科学府之一,也是世界上顶尖的理工大学。

 

20110925181824805.jpg

matlab环境下给NXT机器人编程步骤:

1、  确认NXT的固件为1.281.29,以1.29为佳,并且确认电脑已裝有NXT的驱动程序。

NXT固件下載:http://mindstorms.lego.com/en-us/support/files/Firmware.aspx,最新版本是1.31

安装NXT-G软件,并且通过NXT-G软件下载固件升级到NXT控制器里。

20110925182010980.jpg

2、  打开MATLAB,选择FileSet PathAdd 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的相关信息,如下图所示。

20110925182030480.jpg

我做了一个小实验,来测试下Matlab蓝牙遥控一个带超声波的小车,当超声波检测与障碍物小于20CM,小车后退,大于20CM,小车前进。

20110925182050195.jpg

   实验视频:

 

    这次实验用蓝牙适配器,来遥控具备蓝牙的NXT控制器,首先插入蓝牙适配器,用window XP自带蓝牙软件,建立PC机与NXT控制器的连接,生成虚拟串口。具体方法见博客文章:http://blog.ednchina.com/zhang0309/2124906/message.aspx

20110925182111474.jpg

MATLABcommand window窗口里,写COM_MakeBTConfigFile,出现下图对话框,把“SerialPort”栏里,填入window XP自带蓝牙软件的“COM端口”的虚拟输出端口的端口号,我这次实验用window XP自带蓝牙软件生成的串口号是COM4,所以我下图的SerialPort”栏里,把默认的COM3改为COM4。如果蓝牙联机不成功,应该检查window XP自带蓝牙软件的虚拟端口号,是否发生变化,如果变化了,要重新写COM_MakeBTConfigFile,重新设置“SerialPort”栏里端口号。

20110925182132681.jpg

实验用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控制器关机,然后再接通电源,即可联机成功了!

 

文章评论4条评论)

登录后参与讨论

用户377235 2015-3-28 19:06

为什么让它走右边它却走在边

用户377235 2012-12-4 03:44

咋转弯阿,我现在要做个跟着黑带走然后遇到障碍物绕行的。。。。

用户377235 2012-11-7 16:50

感觉只是Matlab通过蓝牙给NXT通信呀 真正的程序并没有固化到NXT中啊?Matlab就是这样给乐高编程的吗?

飞言走笔 2011-9-25 21:43

good~~

用户202760 2009-6-23 15:37

我手头正好有个Tektronix示波器,量了下地是通的,不过没什么奇怪的啊,应该是通的。为什么测量时不将夹子接在待测设备地上?不过经验还是比较宝贵!

用户165719 2009-1-14 16:53

好文章,可以顶一下呀,谢谢!
相关推荐阅读
用户374501 2011-10-22 21:38
用LabVIEW前面板遥控乐高NXT机械手车
乐高NXT套件自带的软件是NXT-G软件,它是以国家仪器公司的LabVIEW软件为核心架构的,NXT-G软件界面简单易懂,但要进行复杂功能的程序开发,还需采用更高阶的开发平台,如NI公司的LabVI...
用户374501 2011-10-18 17:20
键盘遥控NXT机器人的LabVIEW编程详解
键盘遥控乐高NXT机器人:图1 基于LabVIEW的键盘遥控NXT机器人示意图视频请观看:  程序下载:键盘遥控labview程序.rar      要用键盘遥控乐高NXT机器人,首先需把键盘的按键...
用户374501 2011-10-09 11:39
乐高Technic伐木车8049驾驶部分电控改造
    最近我购买了乐高Technic伐木车8049套件,大多数买乐高科技套件的LEGO爱好者,到不是为了照着搭建手册体验下套件的魅力,主要还是为了套件里的零件,“零件”圈里人的说法是“肉”,也就是说...
用户374501 2011-08-29 20:40
开博周年,用微软机器人软件MSRS编程实例来纪念
去年,大概这个时间段,我开始在EDN写博客,其实在这以前我也在其他论坛和博客网写些东西,后来我想还是找个技术博客大站来长期保留我的文章,同时也可以分享些东西给其他同仁,于是选择了EDN,哈哈,我的选择...
用户374501 2011-08-27 17:23
用微软机器人软件MSRS给NXT控制器编程
Microsoft Robotics Studio可以使你在PC机上创建程序来远程控制机器人,在这个软件所支持众多公司的机器人控制器中,当然也支持乐高迷手头的NXT控制器。所以赶快去安装免费的微软...
我要评论
4
7
关闭 站长推荐上一条 /2 下一条