智能足球攻防战— AI-RCJ使用浅例(1)

来源:互联网 发布:软件开发 部门分类 编辑:程序博客网 时间:2024/05/16 04:51
前言】
   我国的信息技术教育是随着信息技术的进步,由原来单一的计算机教学逐渐发展到今天的。智能教育机器人作为信息技术教育的崭新载体,以它在教学中激起“寓教于乐”和“寓学于做”的效应,越来越得到广大学校、老师、学生和家长的关注和认可。
   程序设计作为中小学校信息技术学科教育的重要内容,在培养学生分析问题、解决问题的能力和培养学生创造性思维上起着非常重要的作用。程序是智能机器人的灵魂。通过为智能机器人编程竞技来学习程序设计,可以屏除传统程序设计教学中表象单一、枯燥乏味的弊病,不失为程序设计教育的一个新方法。
   本文以AI-RCJ智能足球虚拟机器人教学系统为基本平台,通过两个简单的例子,探讨程序设计教学,借以抛砖引玉。
  AI-RCJ在广州中鸣数码科技有限公司的网站上提供了免费版的下载,具体的网上下载地址为:http://www.robotplayer.com/download/list.asp?id=155,其安装过程和图形化编程的具体操作可以参考软件的帮助文档,本文不再累述)
课题:进攻犀利的射手
教学目标:
1.知识目标:懂得进攻位置范围的计算、懂得数学函数在射手控制程序中的应用。
2.技能目标:会操作图形化编程的有关模块。能初步对简单的任务进行数学建模和画流程图。
3.情感目标:培养学生对程序编写的兴趣。
重点难点
重点:对机器人快车的图形化编程环境操作加深理解。
难点:如何把具体任务通过抽象思维进行数学建模。
教学过程:
一、新课引入
在前面的学习中,我们基本掌握了简单的程序设计以及机器人控制方法,但是大多机器人都没有较好的比赛能力。今天的学习里我们要让机器人拥有在足球比赛中最需要的能力——射门。
二、新课讲授
、任务分析、数学建摸
         我们以前在运行环境AI-Robot中已经举行过很多次比赛了,我们发现了在AI-RCJ足球平台中,机器人和足球都是什么形状的?(球形、圆形)。所以我们能够发现机器人撞球实际上就是两个(球体)的碰撞。
因此我们可以用撞球的思路来设计射门方法。(画射门草图)


引导学生继续分析表中goalX,goalY和撞球的具体位置,不难得出,还需要格外的三个变量:
 

画出简易流程图

具体分析三步过程:

shootHeading可以在机器人快车中通过“数学模块”中的得到,而它对应的正弦值和余弦值可以通过 算出。
综合以上三步,可以让学生分小组合作完成完整的流程图。
、让学生动手操作,在图形化编程环境“机器人快车”中完成并编译该射门机器人程序,在AIROBOT中新建一个该程序的比赛。
打开“机器人快车”新建机器人shooter,保存在包“MyRobot”中。

对照变量表新建变量、按照流程图完成程序


 
3 机器人图形化程序和自动生成的C代码程序
“编译”程序、运行比赛
选择“机器人快车”的“工具”菜单中的“编译”命令,完成程序编译;然后执行“运行AI-RCJ”操作,在AIROBOT中“新建”比赛选中包“MyRobot”中的“shoot”和其他包中的任意机器人举行比赛,查看比赛效果。

4 机器人快车中编译程序                                            5  打开运行环境AIROBOT

6 AIROBOT中用本课机器人新建比赛
比赛截图如下:

、课堂练习
在自己机器上用本课机器人同以前的机器人进行比赛,观察运行情况,总结是哪些语句起的作用。
小组合作:观察本课机器人在比赛过程中还有哪些不足?引起这些问题的原因是什么?如何改进程序避免这些问题?(灵活性不够;运用“向某点移动”模块达到的撞球效果不明显;自己编写一个控制机器人进行撞球的自定义模块,可参考编写一个类似软件例子机器人samples.exp.shooter中的moveTowardsG.rcu的控制函数。)
、课堂小结
在本节课中,我们通过编写一个进攻型的足球机器人,进一步加深理解了AI-RCJ中虚拟机器人的运行方式,通过对射门问题的理解和分析,学会了运用数学函数来计算运动方式,并用流程形式逐步实现算法,并能够用图形化编程方式把算法表示出来。在比赛的观察中,发现现有运动方式还存在机器人运动灵活性方面的不足,希望同学们在下来的时间里通过小组合作的方式,把这节课的足球机器人程序补充得更加完善。

 
第一步:进攻方向attackHeading、球场宽度courtWidth和球场高度courtHeight都可以通过“机器人快车”
自带的模块库中的探测函数获得,它们对应的模块图标分别是“探测自身模块”中的、“探测环境模块”中的


第二步:通过第一步中得到的courtHeight已经可以得出goalY的值,即goalY=courtHeight/2;所以接下来,只需要求出goalX,就知道进攻球门中心的位置了。究竟是把球射向左边的球门还是右边的,这就涉及到“自己进攻方向”,而“自己进攻方向”正好我们已经在第一步得到了。所以我们只需要经过一个条件判断就可以计算出正确的goalX的值了。学生在这里可能对“自己进攻方向”的返回值感到迷惑,可以引导他们查看该图标的说明来解释,具体操作是把鼠标移到该图标上方就可以看到以下文字:
所以,如果attackHeading<0,那么goalX=0,反之goalX=courtWidth
第三步:得出射门位置是程序算法的关键。通过以前的学习,学生们已经能够知道撞球是一个不断循环的过程,只是对射门位置的准确计算可能会显得比较困惑。这需要我们再次回顾“图1”。


P点坐标我们已经在第二步中得到,即(goalX,goalY)。在以前的学习中,学生已经掌握如何利用探测函数图标得到A点坐标和B点坐标。所以撞球问题的关键在于如何利用现有的条件计算出C点的坐标。
根据观察,我们知道C处于P点和B点连线方向的延长线上,CB的距离正好是球员半径30和足球半径20的和,即20+30=50。为便于理解,可以把这个图的关键部分展开,如下:
 
通过上图,不难得知,要得到C的坐标,必须知道B点坐标和∠ß对应的正弦值和余弦值。通过B点坐标和P点坐标算出C点到P点的连线方向,通过这个方向,可以得出∠ßsin值和cos值。即有:
nextX = ballX - cosß * 50
nextY = ballY - sinaß * 50
所以在这一步中我们在原有变量的基础上,还需要下面三个变量。

对照图形讲解:假设当前机器人在A点,足球在B点,对方球门在P点,那么我们需要给球一个往球门方向的一个撞击力,因此从PB联机上取一点C使得自己机器人运动到C点的时候刚好撞到PB联机延长线与足球边缘相交的Q点上,C点就是我们要运动过去的点。如果我们让自己机器人快速往C点移动过去,直至撞到B点的足球,足球就会被碰撞到对方大门里面。
、变量分析、画出流程图
变量分析
对照图1,由学生分析需要的变量,不难完成下表: