乐高NXT机器人系统C++程序设计

2012-09-19 10:28薛清平李卫红
电子设计工程 2012年1期
关键词:乐高蓝牙对象

薛清平,李卫红

(平顶山市科技进修学校 河南 平顶山 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机器人系统的相关问题尤其是二次开发问题做进一步深入探讨、研究。

1 FantomSDK

作为一个开放式的扩展平台,乐高集团提供了进行乐高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设备的文件、模块信息。

2 程序应用

2.1 获取设备

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蓝牙设备地址。

2.2 获取模块

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地址空间。

2.3 获取文件

NXT系统包含.sys(系统文件)、.rxe(系统可执行文件,类似exe文件)、.rpg(NXT Program模块产生的程序文件)、.ric(图片 文 件 )、.rso (声 音 文 件 )、.rtm (Try Me 模块 文 件 ),iFileIterator对象用于遍历 NXT设备上的文件。createFileIterator方法产生一个实例,通过destroyFileIterator方法进行释放。列表显示NXT设备的文件信息的具体C++代码如下:

编译、运行后,列表显示相应NXT设备上的文件。通过getName(name)获取文件的名称,通过getSize获取文件大小,通过getAvailableSize获取可用文件空间。

2.4 设备控制

借助乐高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++代码如下:

3 结束语

利用乐高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.

猜你喜欢
乐高蓝牙对象
蓝牙音箱的直线之美
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
乐高2020年上半年财报:收入同比增长7%
简单、易用,可玩性强Q AcousticsBT3蓝牙音箱
乐高乐园
适合自己的才是最好的 德生(TECSUN) BT-50蓝牙耳机放大器
攻略对象的心思好难猜
紧急:蓝牙指尖陀螺自燃!安全隐患频出
基于熵的快速扫描法的FNEA初始对象的生成方法
乐高Ⓡ城市组