吴伟超
摘要:随着虚拟仿真技术的发展,虚拟机器人已走进了中小学课堂,给信息技术教学注入了新的活力。本文以智能快车虚拟机器人为例,简述了如何应用子程序高效地完成任务。
关键词:子程序 虚拟机器人 智能快车
在2009年中小学电脑竞赛中,广州市增加了“3D仿真虚拟机器人”比赛项目。2010年,广东省教育厅将虚拟机器人项目作为中小学电脑机器人竞赛活动项目。近几年,笔者辅导学生参加竞赛,取得了不错的成绩。接下来,笔者以智能快递虚拟机器人为例,结合小学生的特点,简述了如何应用子程序高效地完成任务。
一、子程序的含义
在程序设计和编写过程中,不同位置需使用一段完全相同的程序,而为了节约内存,避免多次出现同一段程序,人们将这段程序写成独立的程序片段,随意调用这段程序,执行完这段相同程序再返回原主程序继续运行,这样独立的程序段就称为子程序,而调用子程序的程序则称为主程序。由此可见,子程序的引入大大简化了程序结构,增加了程序的可读性,避免了重复性工作,缩短了整个程序。
在虚拟机器人程序设计中,由于经常用到一些重复的功能,这些功能相同的程序编成相同的代码,所以子程序思想可以运用到虚拟机器人程序设计中。在调用子程序时,我们要注意一个问题,即参数传送问题。在调用子程序时,主程序应先把有关参数放到某些约定的位置,当子程序运行时,我们可以从约定位置得到这些参数。另外,在虚拟机器人程序设计调用子程序时,我们要注意按规定的格式,在主程序中不能漏掉参数,否则程序就会出错,不能执行。
二、智能快车虚拟机器人竞赛任务分析
在智能快车综合任务分析中,对如何定义子程序,笔者与学生进行了模块的可视化编程,结合易时代3D仿真虚拟机器人软件的任务地图,把任务分解成可让机器人完成直行、转弯、避障、巡线、通过十字路口及收取快递等子任务。下面,笔者以直行与转弯为例,分别展示不同类型的子程序的结构和调用方法:第一,直行结构(让机器人直行1秒),如图1所示;第二,转弯结构(让机器人以一定的速度、角度进行转弯,在转弯过程中用应用指南针检测地图的角度,到达指定角度时直行出弯),如图2所示。
从这两个子程序的功能上不难看出,直行子程序运行的结果是单一的,转弯子程序运行的结果会根据指定的不同角度达到不同的目的。通过参数的应用,让原来同一段的程序更加灵活多变,进而简化、优化程序,所以我们要根据子程序的功能构建子程序。如果功能是单一的,子程序就不需要参数,否则我们要根据情况增加对应的参数。
三、应用子程序注意的问题
使用易时代3D仿真虚拟机器人软件定义子程序的过程中,我们要注意以下问题:首先,要确定子程序的命名,其命名不能使用与软件内部命令重复的单词。如要实现停车3秒的功能,子程序不能用“Stop”进行命名,否则会与内部命令发生冲突,导致编译失败。其次,只能在新建时定义子程序的参数,所以在定义子程序前,我们要考虑好参数的问题。最后,我们必须清楚子程序的从属关系。在多年的辅导中,笔者了解到学生在编写子程序的过程中,一般会出现如图3、图4、图5的情况:
图3是建立主程序“109”后定义一个子程序“GO”直行,学生一般不会出现什么问题。图4是建立主程序“109”后定义一个子程序“GO”直行,马上再定义另一个子程序“L”左转,学生很容易出现子程序的从属关系混乱。本来,“GO”和“L”都应该是“109”的子程序,因为软件里新建的子程序“L”是当前窗口程序的子程序,如果刚才是编写“GO”这个子程序,现在新建的子程序“L”就变成了“GO”的子程序。由于从属关系的错误,子程序“L”就不会在主程序“109”里出现。图5里的从属关系就更加复杂了。为此,在定义子程序的过程中,教师应要求学生定义完一个子程序,必须保存、关闭,然后再定义另一个子程序,以保证子程序跟主程序的正确从属关系。不仅如此,每定义一个子程序,学生都应在主程序中引用并進行编译,如果有误,只要检验最新定义的子程序即可,从而快速有效地校正程序。
四、应用子程序实例分析
下面,笔者以2017年广州市赛小学智能快递地图为例(如图6所示),说说如何应用子程序快速、高效完成任务。
第一,任务分析。图中有快递8件,根据布局可设计以下三种方案:方案一,成功收取快递①~⑥,并送达终点,可以得12000分+时间分;方案二,在方案①的基础上增加收取余下的⑦⑧两个快递,全部收取并送终点可以得到16000分+时间分;方案三,备用方案,当实行方案二因时间不够未能完成任务时,在方案一的基础上增加收取⑦一个快递,若成功,则得14000分+时间分。根据三个方案做出流程草图,在编写流程图时,教师需要标注子程序参数的参考数值(如表1所示)。另外,地图中没有障碍物,可以不用定义避障的子程序。
第二,根据分析,首先快速建立机器人模型,传感器配备光电传感器、远红外传感器、指南针,然后在桌面建立主程序,定义直行、左转、右转、巡线、抓取快递等5个子程序。其中,直行和巡线不需要预设参数,左转、右转和抓取快递都设置了一个参数。在定义子程序时,我们要注意根据任务,把相同作用的程序(动作)划分为一个个子程序,尤其在划分的时候要考虑可执行性强、兼容性强等特点,这样子程序应用起来才快捷方便。
第三,根据方案一的流程图进行主程序的编程。由于应用子程序进行编程的流程是线性的,所以第一步要巡线行走,引用巡线的子程序;第二步需要左转弯,引用左转弯的子程序……(如表1所示)
在编写程序的过程中,教师应要求学生每完成一个子程序的引用时,都要画“√”进行记录,以免错漏。通过对照流程图,一步一步应用已有的子程序进行编程,便于学生理解和运用。
第四,方案的检验与优化。已经编写好的程序经过编译就可以在仿真处进行验证,由于易时代3D仿真虚拟机器人软件引入了物理引擎和随机参数,所以仿真的结果会有微小的变化。又因为物理引擎的惯性作用,在优化程序的时候必须按顺序修改,不可以更改后面参数再修改前面的参数。这样一来,在惯性的作用下,后面的参数可能就无效了。在仿真检验中,方案一顺利通过后,教师可要求学生做好备份,然后用方案一的拷贝文件修改成方案二,如果成功,就以方案二做备份后进行最后优化并上交;如果方案二因时间不足,学生可以利用方案一进行备份,尝试修改成方案三,修改成功,则以方案三备份优化并上交;如果方案二和方案三都无法完成,那至少保证有方案一可以上交得分。
五、结语
在程序的编写过程中,子程序的引入大大简化了程序结构,增加了程序的可读性,避免了重复性工作,缩短了整个程序,并增强了程序的可移植性。一些常用的运算程序写成子程序形式,可以随时引用、参考。因为子程序的应用,学生可以从程序的顺序结构、分支结构、重复结构等复杂结构的思维方式回归到只有顺序结构的线性思维方式,方便学生学习和理解,从而有效提高任务的完成度。但是,子程序的应用也有不足的地方,如定义了的子程序功能单一,虽然参数的预设可以优化这方面的短板,但如果参数过多,在引用时也容易出现错漏。
参考文献:
[1]张嘉志,王同聚.让机器人走近学生——3D仿真虚拟机器人:普及机器人教育的新途径[J].中小学信息技术教育,2010,(6).
[2]龙丽嫦.虚拟机器人:让信息技术教育更丰盈[J].中国现代教育装备,2012,(18).
(作者单位:广州市南沙区金隆小学)