基于NAO机器人的《数据结构实验》教学辅助系统设计与实现
2018-04-03华中师范大学计算机学院庄章璐黄世亮许思慧
华中师范大学计算机学院 庄章璐 彭 熙 黄世亮 许思慧 艾 晶
1 引言
NAO机器人是一款由软银(Softbank)公司研发并生产的双足类人机器人。它拥有25个自由度,以及包括超声波、惯性、压力等多种传感器,同时也有着讨人喜欢的外观。该机器人可在Windows、Mac、Linux操作系统下运行,可用C++、Python、MATLAB等语言进行编程与操作[1]。在世界范围内,已有50多个国家的550多所高校和实验室购买此款机器人作为研究工具[2]。NAO机器人是在学术研究领域运用最广泛的类人机器人之一。近年来,很多高校在机器人教学改革中取得了一些成果[3],利用NAO机器人进行教学是一个很好的选择[8]。使用NAO机器人教学可以使教学过程更加生动有趣,更能激发学生的想象力、培养学生的动手能力[7]。本文以数据结构实验为课堂案例进行教学实践,将传统与创新相结合,实践教学设计贯彻趣味性、实用性、系统性的原则[4]。
2 系统设计与实现
2.1 编程语言的选择
本系统综合利用C++与C#的交互实现软件的各个功能。本校数据结构实验教学采用的是C语言,NAO机器人官方提供的SDK为C++语言,C++语言兼容C语言,故本系统采用C++语言作为主要编程语言。此外,系统使用Microsoft Visual Studio中的C#语言进行软件界面的设计,C#是由C和C++衍生出来的面向对象的编程语言[5],在继承C和C++强大功能的同时去掉了它们的一些复杂特性[9]。
2.2 系统的功能结构
本系统可供学生学习《数据结构实验》以及教师了解学生的学习情况,系统的功能结构如图1所示。系统包括四个模块:(1)登录模块,账号分为学生、教师两个身份;(2)信息查询模块,教师登录后可查询学生信息以及学生的学习情况;(3)学习功能模块,包括体验学习、基础测试和进阶测试三个功能;(4)机器人交互模块,在相应界面输入IP地址可连接机器人,学生学习时输入不同的数据,机器人做出相应的反应。该系统可用于课堂上的编程教学,使用机器人来讲解程序;老师可以使用该系统查看学生的学习情况;学生也可以通过该系统与机器人进行代码上的交流。
图1 系统功能结构
2.2.1登录模块设计
在初次进入软件登录界面时,用户点击“注册”按钮填写相关信息进行注册,用户身份分为学生和教师两种,这两种身份账号登录后进入的界面以及实现的功能不同。例如,学生用户登录后可进行自主学习,教师用户登录后可查询学生信息及学习情况。注册后,每次登录时通过将相应用户名、密码与数据库中信息相匹配,匹配成功则进入系统。
图2 学生体验主界面
2.2.2信息查询模块设计
教师登录系统后,通过输入学生的姓名或专业名称,进而查看学生们近期的学习情况及相应学生的详细信息;同样,教师也可以通过为教师界面预留的接口进入学生界面进一步体验。学生体验主界面如图2所示。
2.2.3学习功能模块设计
学习模式分为体验学习、基础测试、进阶测试三个模块,在每一个模块下又有一些相应的具体实例。学习模式框架如图3所示。
图3 学习模式框架
体验学习的主要功能是让学生体验相应的数据结构算法,深入理解数据结构课程的教学内容。它以体验为目的,让学生自行输入数据,机器人进行播报结果并进行相应讲解。基础测试是通过给定的算法代码描述和输入的数据,学生填写输出结果,机器人对学生输入的答案进行判断,并给出肯定或否定的结论。进阶测试是给定输入、输出及部分代码,学生对空缺的关键代码进行填空,NAO机器人同样会对学生填入的信息进行判断并在肢体上或语言上做出相应的反应。
2.2.4机器人交互模块设计
学生登录后,即可通过局域网连接机器人并进行相应的《数据结构实验》学习。机器人连接成功后,用户可以调节机器人说话的音量大小,实现在学习过程中与机器人进行交互。
图4 机器人交互过程流程图
机器人交互过程流程如图4所示。机器人交互控制主要基于NAO机器人自身的NAOqi操作系统所提供的C++ SDK进行二次开发。因为NAOqi系统涉及多语言开发,所以在二次开发的过程中需要使用qibuild、cmake等工具进行交叉编译。PC端发送的代码在NAOqi系统中交叉编译成功后,即可调用C++ SDK API接口中的相应方法控制机器人的对应模块。
在使用系统的主要学习功能时,学生登录后,输入实验数据,C#调用C++程序编译后的动态链接库中相应的dll文件[12],运行代码得到结果,再将结果发送给机器人[10]。NAO机器人经过交叉编译调用相关方法后,语音播报结果,完成实验。除此之外,系统利用MySQL数据库存储数据,C#代码实现数据库的基本功能,从而实现软件中登录、注册、查询等操作。系统所涉及的主要数据流如图5所示。
图5 系统数据流动图
系统利用NAOqi操作系统中的C++ SDK提供的API接口进行机器人控制。以控制机器人说话为例,采取调用NAOqi_C++_SDK中ALAnimatedSpeechProxy类中say方法来实现。关键代码如下:
因为此函数只是作为外部函数使用[13],所以以extern进行修饰并将其编译为dll动态链接,然后在主程序中添加生成的dll位置进行使用[11]。调用时的关键代码如下:
3 实验教学实例
系统设计完成后,在实验教学中进行了测试。将NAO机器人应用于《数据结构实验》课堂,这是一个全新的尝试。以“冒泡排序”为例,体验学习为新课学习阶段,学生输入任意常规数据,机器人报出结果,点击“讲解”,机器人会讲解代码实现过程。基础测试为复习巩固阶段,对应题型“程序分析题”,根据代码和输入填写结果,检测学生是否读懂代码。进阶测试为提高学习阶段,对应题型“程序填空题”,将已有代码补写完整实现其功能,培养学生编程能力。
以“体验学习”功能为例,实验过程如图6所示。学生输入用户名及密码登录系统即进入主界面,点击“连接”图标,输入IP地址连接机器人。连接机器人成功后,点击“模式”图标,选择“体验学习”功能,再选中“冒泡排序”实例,进入功能子界面。在指定位置输入数据,如图7所示。点击“确定”后,系统运行代码,将结果传输给机器人,机器人播报结果。如图8所示,系统界面上也相应地显示实验结果。
图6 实验过程流程图
图7 学生输入数据
图8 代码运行后结果
4 结束语
NAO机器人是一款人形智能机器人,有着讨人喜欢的外形,具备有一定水平的人工智能,能够与人亲切互动。本文综合利用C++与C#语言,设计并实现了《数据结构实验》教学辅助系统。该系统充分发挥NAO机器人的特点,让学生利用已学的数据结构知识控制机器人的模块,将学生感到比较枯燥的数据结构实验变得有趣起来,提高了学生对数据结构实验的感性认识,加深其对数据结构知识的理解,增强了编程实验对学生的吸引力[6]。使用本系统,不仅学生能享受更加丰富有趣的课堂教学,教师也能利用NAO机器人作为教学工具。该系统在实际教学中已投入应用,取得了较好的教学效果。
[1]Robotics Banks[EBOL].https://www.ald.softbankrobotics.com/en/robots/nao.
[2]Nao 机器人-百度百科[EBOL].https://baike.baidu.com/item/NAO/18025769.
[3]王振,张星.NAO机器人平台的创新实验设计与实现[J].实验室研究与探索,2016,35(12):156-159.
[4]王韦伟,巩雪洁.基于机器人的实践教学改革[J].中国教育技术装备,2017,16(92):55-57.
[5]C#-百度百科[EBOL].https://baike.baidu.com/item/c%23/195147?fr=aladdin.
[6]张仁彦,刘孟茹,孔凡超,等.基于Python的Nao机器人实验系统设计[J].中国现代教育装备,2017(257):4-6.
[7]王晓军,王宇嘉,陈剑雪,等.NAO机器人在《运动控制概论》实验教学中的应用[J].课程教育研究,2015,10(上旬刊):210.
[8]刘小峰,周旭,汪建明,等.大学生创新技能培养的NAO机器人交互平台[J].实验室研究与探索,2016,35(3):147-151.
[9]王欣,黎峰.新型的面向对象的编程语言——C#[J].计算机工程与技术,2004,25(6):929-931.
[10]赵旸.多媒体教学平台与C#程序设计[J].中国科教创新导刊,2011(4):93-94.
[11]李伟.C#调用VC++动态链接库的研究[J].测控技术,2013,3(25):105-108.
[12]彭四伟,蒋尚秀.一种用C++动态扩展C#程序的方法[J].微计算机信息,2010,26(4-3):15-18.
[13]彭召意,赵菁菁.C++中类的构造函数探究和使用[J].企业科技与发展,2016,(420):50-53.