薛清平,李卫红
(平顶山市科技进修学校 河南 平顶山 467000)
NXT-G、RoboLab 2.9都是乐高公司提供的乐高 LEGO MINDSTORMS NXT机器人系统的图形化的编程工具,除此以 外 , 还 有 Bricx Command Center、RobotC、NI LabVIEW Toolkit、leJOS NXJ、pbLua等第三方提供的编程工具。随着2010年教育部与乐高集团合作的“技术教育创新人才培养计划”项目的开展,乐高LEGO MINDSTORMS NXT机器人系统在各地中小学的推广速度也将加快[1],服务于此,有必要对乐高LEGO MINDSTORMS NXT机器人系统的相关问题尤其是二次开发问题做进一步深入探讨、研究。
作为一个开放式的扩展平台,乐高集团提供了进行乐高LEGO MINDSTORMS NXT系统二次开发所需要的LEGO MINDSTORMS NXT Hardware Developer Kit[2]、LEGO MINDSTORMS NXT Direct Commands[3]、LEGO MINDSTORMS NXT Bluetooth Developer Kit[4]、LEGO MINDSTORMS NXT Communication protocol[5]、Mobile Application Software[6]以 及 作为二次开发不可或缺的SDK文件FantomSDK[7]的非常详尽的资料。
FantomSDK支持C++及NI Labview开发环境,可运行于Windows或MAC系统。乐高LEGO MINDSTORMS NXT机器人系统可通过USB或蓝牙两种方式与PC系统进行连接、通信,对 USB方式,LEGO提供的驱动程序Fantom.sys与NXT设备直接通信;对蓝牙方式,则是把NXT设备映射到一个COM端口,然后通过Win32文件访问端口进行通信。USB和蓝牙两种连接、通信方式,均得到FantomSDK的支持。
FantomSDK提供了Fantom的头文件、Labview的vi支持库以及基本封装类型的使用帮助。iNXTIterator对象用于遍历注册到系统上的 NXT设备,获得iNXT对象,iFileIterator对象、iModuleIterator对象用于获得NXT设备的文件、模块信息。
NXTIterator对象用于搜索注册到系统上的 NXT设备,获得iNXT对象。createNXTIterator方法产生一个NXT实例,使用后,通过destroy方法进行释放。createNXTIterator(ViBoolean,ViUInt32,tStatus)方法中 ViBoolean 参数为 true,则搜索通过USB、蓝牙连接的所有NXT设备。若ViBoolean参数为false,则仅搜索通过USB连接的NXT设备。获取NXT设备的具体C++代码如下:
编译、运行后,如果成功搜索到系统上的 NXT设备,通过 getDeviceInfo获 得 NXT 设 备 名 称 (name), 通 过getFirmwareVersion获得系统的通讯协议版本(protocolVersion)、固 件版 本 (firmwareVersion)、Flash 剩 余空间(availableFlash)信息。
将 ViBoolean参 数 设 置 为 true, 通 过 nxtPtr->getDeviceInfo方法获取蓝牙连接NXT设备的6位16进制bluetoothAddress蓝牙设备地址。
NXT 的固件系统(Firmware),包含输入(Input module)、输 出 (Output module)、 显 示 (Display module)、 声 音 (Sound module)、按钮(Button module)等模块,用于对各种外设提供支持。搜索到NXT设备后,通过iModuleIterator对象遍历相应的模块。createModuleIterator方法产生一个实例,通过destroyModuleIterator方法进行释放。列表显示NXT设备的模块信息的具体C++代码如下:
编译、运行后,遍历相应的模块,通过 getName(name)获取模块的名称,通过getModuleID获取模块编号,通过getModuleSize获取模块大小,通过getModuleIOMapSize获取模块映射的I/O地址空间。
NXT系统包含.sys(系统文件)、.rxe(系统可执行文件,类似exe文件)、.rpg(NXT Program模块产生的程序文件)、.ric(图片 文 件 )、.rso (声 音 文 件 )、.rtm (Try Me 模块 文 件 ),iFileIterator对象用于遍历 NXT设备上的文件。createFileIterator方法产生一个实例,通过destroyFileIterator方法进行释放。列表显示NXT设备的文件信息的具体C++代码如下:
编译、运行后,列表显示相应NXT设备上的文件。通过getName(name)获取文件的名称,通过getSize获取文件大小,通过getAvailableSize获取可用文件空间。
借助乐高LEGO MINDSTORMS NXT机器人系统的SDK文件FantomSDK,除可连接NXT设备,进行模块及文件的查看、删除、读写操作外,还可结合Appendix 1-LEGO MINDSTORMS NXT Communication protocol.pdf、Appendix 2-LEGO MINDSTORMS NXT Directcommands.pdf、LEGO MINDSTORMS NXT Bluetooth Developer Kit.pdf等LEGO MINDSTORMS NXT Bluetooth Developer Kit文件,通过nxtPtr->sendDirectCommand方法,对NXT设备的传感器、马达等输入输出设备及声音文件进行控制,实现NXT-G、RoboLab能够完成的全部任务。运行d.rxe程序,播放r.rso声音文件的C++代码如下:
利用乐高LEGO MINDSTORMS NXT机器人系统的SDK文件 FantomSDK,借助 C++编程,结合 LEGO MINDSTORMS NXT Bluetooth Developer Kit文件, 代替 NXT-G、RoboLab 软件,完成NXT设备的全部控制任务,为青少年、科技教师运用乐高NXT机器人系统进行科技创新提供帮助与支持。
[1]李卫红.基于B/S的乐高NXT中文固件系统的研究及实现[J].价值工程,2011(4):146-147.
LI Wei-hong.Research and implement of chinese firmware of LEGO NXT system based on B/S[J].Value Engineering,2011(4):146-147.
[2]The LEGO Group.LEGO MINDSTORMS NXT Hardware DeveloperKit.pdf[EB/OL].(2006-07-24)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[3]The LEGO Group.LEGO MINDSTORMS NXT Direct Commands.pdf.[EB/OL]. (2006 -07 -26)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[4]The LEGO Group.LEGO MINDSTORMS NXT Bluetooth Developer Kit.pdf.[EB/OL].(2006-07-24)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[5]The LEGO Group.Appendix 1-LEGO MINDSTORMS NXT Communication protocol.pdf.[EB/OL].(2006-11-02)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[6]The LEGO Group.LEGO MINDSTORMS NXT Mobile Application.pdf.[EB/OL].(2006 -11 -02)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[7]The LEGO Group.LEGO MINDSTORMS NXT FantomSDK[EB/OL].(2006-07-21)http://mindstorms.lego.com/en-us/support/files/default.aspx.