足球机器人实验报告_第1页
足球机器人实验报告_第2页
足球机器人实验报告_第3页
足球机器人实验报告_第4页
足球机器人实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器人足球实验报告专业:课程名称:指导老师:学号:学生姓名:

计算机科学与技术足球机器人理论与实践刘钊200813137197顾伟.实验目的逐步掌握FIRA平台的使用掌握FIRA客户端智能体的编写达成指定的智能体功能与动作程序清单:#ifndef_AFX_NO_DAO_SUPPORT_5V5_PARAMETER#include<math.h>#definePI3.14159265typedefstruct{doublex,y,z;}Vector3D;typedefstruct{longleft,right,top,bottom;}Bounds;typedefstruct{Vector3Dpos;}Ball;typedefstruct{Vector3Dpos;doublerotation;}OpponentRobot;typedefstruct{Vector3Dpos;doublerotation,velocityLeft,velocityRight;}Robot;typedefstruct{Robothome[5];OpponentRobotopponent[5];BallcurrentBall,lastBall,predictedBall;BoundsfieldBound,goalBound;longgameState;longwhosBall;void*userData;}Environment;//基本数据办理函数组doubleangle(Vector3Dp,Vector3Dp0);doubleangle(doublex,doubley,doublex0,doubley0);doubleangle(Vector3Dp0,Vector3Dp);doubledist(doublex1,doubley1,doublex2,doubley2);doubledist(Vector3Dp1,Vector3Dp2);doublediffer_two_angle(doublea1,doublea2);Vector3Dturn_blue(Vector3Dp);Vector3Dturn_yellow(Vector3Dp);doubleturn_blue(doublerotate);doubleturn_yellow(doublerotate);//策略函数组voidact_v(intno,doublevl,doublevr,Environment*env);voidrotation_to(intpo,doublerotation,Environment*env);//po号机器人面向rotation角度,鉴于坐标变换后的角度值voidrun_to_pos(intpo,Vector3Dpos,Environment*env);//po号机器人跑到pos地点voidrun_to_pos2(intpo,Vector3Dpos,Environment*env);#endif3在stdfx.cpp中增添基础数据办理函数实现过程#include"math.h"doublediffer_two_angle(doublea1,doublea2){doublea=fabs(a1-a2);...if(a>180)a=360-a;returna;}Vector3Dturn_blue(Vector3Dp){Vector3Dpp;pp.x=p.y-41.8061;pp.y=93.4259-p.x;returnpp;}Vector3Dturn_yellow(Vector3Dp){Vector3Dpp;pp.x=41.8061-p.y;pp.y=p.x-6.8118;//6.8118FieldLeftxcoordinatereturnpp;}doubleturn_blue(doublerotate){if(rotate<0)rotate+=360;rotate-=90;if(rotate<0)rotate+=360;returnrotate;}doubleturn_yellow(doublerotate)//将系统的角度变换成黄队方坐标的角度{if(rotate<0)rotate+=360;//改正角度rotate+=90;if(rotate>=360)rotate-=360;//再次改正角度returnrotate;}doubleangle(Vector3Dp,Vector3Dp0){return(angle(p.x,p.y,p0.x,p0.y));}doubleangle(doublex,doubley,doublex0,doubley0)//x,y为目的点,x0,y0为源点{//(x,y)(x0,y0)两点连线与x轴的夹角doubledx,dy,dr;dx=x-x0;dy=y-y0;dr=dist(x,y,x0,y0);if(dr<0.0001)return0;...if(dy>=0)return(180*acos(dx/dr)/PI);//防止dy很小elsereturn(360-180*acos(dx/dr)/PI);}Vector3Dsub(Vector3Dp1,Vector3Dp2){Vector3Dp;p.x=p1.x-p2.x;p.y=p1.y-p2.y;returnp;}Vector3Dadd(Vector3Dp1,Vector3Dp2){Vector3Dp;p.x=p1.x+p2.x;p.y=p1.y+p2.y;returnp;}doubledist(Vector3Dp1,Vector3Dp2){returndist(p1.x,p1.y,p2.x,p2.y);}doubledist(doublex1,doubley1,doublex2,doubley2){//(x1,y1)和(x2,y2)两点间的距离doubler;r=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);return(sqrt(r));}boolis_in_rect(Boundsbd,Vector3Dp){if(p.x>=bd.left&&p.x<=bd.right&&p.y>=bd.bottom&&p.y<=bd.top)returntrue;elsereturnfalse;}4.增添dll文件入口函数和策略函数实现extern"C"voidCreate(Environment*env){}extern"C"voidStrategy(Environment*env){//获得地点方向信息与坐标变换;机器人面向到指定角度;机器人追球;intGame_Side=0;if(env->home[0].pos.x>50)Game_Side=RIGHT;elseGame_Side=LEFT;if(Game_Side==RIGHT){...for(inti=0;i<5;i++)//获得地点信息且达成坐标变换{env->home[i].pos=turn_blue(env->home[i].pos);env->home[i].rotation=turn_blue(env->home[i].rotation);env->opponent[i].pos=turn_blue(env->opponent[i].pos);env->opponent[i].rotation=turn_blue(env->opponent[i].rotation);env->currentBall.pos=turn_blue(env->currentBall.pos);}}else//LEFT{for(inti=0;i<5;i++)//获得地点信息且达成坐标变换{env->home[i].pos=turn_yellow(env->home[i].pos);env->home[i].rotation=turn_yellow(env->home[i].rotation);env->opponent[i].pos=turn_yellow(env->opponent[i].pos);env->opponent[i].rotation=turn_yellow(env->opponent[i].rotation);env->currentBall.pos=turn_yellow(env->currentBall.pos);}}//机器人面向到指定角度rotation_to(1,60,env);//转到指定角run_to_pos(2,env->currentBall.pos,env);//追逐球}extern"C"voidDestroy(Environment*env){}//策略组函数实现voidact_v(intno,doublevl,doublevr,Environment*env){if(vl>125)vl=125;if(vl<-125)vl=-125;if(vr>125)vr=125;if(vr<-125)vr=-125;env->home[no].velocityLeft=vl;env->home[no].velocityRight=vr;}voidrotation_to(intno,doublejiao,Environment*env)//po号机器人面向rotation角度,鉴于坐标变换后的角度值{doublevl,vr;intturn_left=jiao-env->home[no].rotation<=180?1:-1;doublecurr_ro=env->home[no].rotation;intqujian=0;doubler=5.5;doublejiaozhen_rot=jiao-env->home[no].rotation;...while(jiaozhen_rot>=90)jiaozhen_rot-=90;doublejiaozhen_v=jiaozhen_rot*r;staticdoublelast_add_r=env->home[no].velocityRight;staticdoublelast_add_l=env->home[no].velocityLeft;staticdoublelast_ro=curr_ro;doublek1=curr_ro-last_ro;if(k1>180)k1-=360;elseif(k1<-180)k1+=360;doublek2=last_add_r-last_add_l;doublek3=6.7*k1+0.7*k2;if(jiao-curr_ro>0&&jiao-curr_ro<=90)qujian=2;elseif(jiao-curr_ro>90&&jiao-curr_ro<=180)qujian=3;elseif(jiao-curr_ro>180&&jiao-curr_ro<=270)qujian=4;elsequjian=1;if(1==qujian||2==qujian)vl=-jiaozhen_v*turn_left+k3;elsevl=jiaozhen_v*turn_left+k3;vl*=1.5;vr=-vl;act_v(no,vl,vr,env);last_ro=curr_ro;//做好历史记录last_add_r=env->home[no].velocityRight;last_add_l=env->home[no].velocityLeft;}voidrun_to_pos(intno,Vector3Dpos,Environment*env)//po号机器人跑到pos地点{doublevl,vr;doublejiao=angle(pos,env->home[no].pos);intturn_left=jiao-env->home[no].rotation<=180?1:-1;doublecurr_ro=env->home[no].rotation;intqujian=0;doubler=5.5;doublejiaozhen_rot=jiao-env->home[no].rotation;...while(jiaozhen_rot>=90)jiaozhen_rot-=90;doublejiaozhen_v=jiaozhen_rot*r;staticdoublelast_add_r=env->home[no].velocityRight;staticdoublelast_add_l=env->home[no].velocityLeft;staticdoublelast_ro=curr_ro;doublek1=curr_ro-last_ro;if(k1>180)k1-=360;elseif(k1<-180)k1+=360;doublek2=last_add_r-last_add_l;doublek3=6.7*k1+0.7*k2;if(jiao-curr_ro>0&&jiao-curr_ro<=90)qujian=2;elseif(jiao-curr_ro>90&&jiao-curr_ro<=180)qujian=3;elseif(jiao-curr_ro>180&&jiao-curr_ro<=270)qujian=4;elsequjian=1;if(1==qujian||2==qujian)vl=-jiaozhen_v*turn_left+k3;elsevl=jiaozhen_v*turn_left+k3;vl*=1.5;vr=-vl;vl+=125*turn_left;vr+=125*turn_left;act_v(no,vl,vr,env);last_ro=curr_ro;//做好历史记录last_add_r=env->home[no].velocityRight;last_add_l=env->home[no].velocityLeft;}voidrun_to_pos2(intno,Vector3Dpos,Environment*env){}5:在Strategy.cpp里增添:extern"C"voidCreate(Environment*env){}extern"C"voidStrategy(Environment*env){}extern"C"voidDestroy(Environment*env){}编译,链接后便可生成相应的dll文件,在工程目录的DEBUG目录下,也能够改编译选项,将dll文件直接生成到指定目录下实验结果:......实验心得:经过本次实践,体验了足球机器人的开发流程,不单锻炼了我们编写代码的能力,也提高了我的计算机应用能力以及对计算机的学习兴趣。纸上谈来终觉浅,绝知此事要躬行,在实践过程中,我深深领会到这句话的含义,作为一名计算机专业的学生,不单要对本专业的知识娴熟运用,也要对某些硬件,比方马达等零件有很好的认识,也必须将所学的知识点汇聚成一个面,将方方面面的知识组成一个立体的知识体系,经过本次锻炼,培养了我解决问题的能力,和探索精神,对此后的学习有很大的帮助。...1、一般有哪些知识表示方法?足球机器人系统中,智能体一般用到哪些知识?答:常用的知识表示方法有逻辑表示法、产生式表示法、语义网络表示法和框架表示法等。在足球机器人系统中,必须表示、办理和应用大量的知识,并且一般用到下列各个层次的知识:1)球的尺寸与质量;2)球场尺寸;3)球、边界的反弹特性;4)球场的摩擦阻力特性;5)球员的尺寸和质量;6)球员的加快、减速、刹车模型;7)球员的视觉、听觉、触觉模型;8)队友、敌手的地点、姿态;9)各样角色模型(如射门者、传球者、带球者、防守者、后卫、守门员等);10)队员阵型(如334型、244型);11)队员配合方式;12)球的预测模型;13)球员的体力模型;14)比赛局势模型(如危机、危险、平衡、有利、及其有利等);15)敌手习惯模型(包括攻防队形、点球、带球、传球等习惯);16)比赛规则,等等。很好的成立正确、合适、有用的知识,并且合理的应用这些知识,是成立一个优异的足球机器人系统及其有利的条件。4.设计一种FIRA仿真比赛的决议子系统的决议框架(或程序工作流程)。决议子系统是一个典型的智能系统:1)获得信息2)剖析决议3)输出动作前锋:后卫:守门员:总框架:智能体的逻辑结构框图:周期开始坐标系的调整防守判断球在本方在对方:半场?进攻角色分派角色分派守门员主攻角色防守重点角色协助角色对动作进行规划机器人履行有关动作周期结束

队形确定队形1及队形变换...队形m队形既定队形环境感知模型角色集1传感器信息交融角色分派...信息预办理及角色集m角色变换特点状态提取队形的角色集角色1......角色n动动作选择作动作1......动作N动作A......动作An层图6-5:足球机器人系统四层决议推理模型示意图...4、设目前机器人地点已知(在A点,静止),球地点已知(在B点),球速度矢量已知(为V)。目标已知。赶快上前,经过一次击球,球以最大速度到C点。怎样设计智能体达成该动作?剖析:确定击球可能发生的时间是问题的重点。原理:在A点与B点连线的中点,作垂线,与目的方向BC交与X点,则射线AX为目前小车的前进的方向;动向地追踪点X,即能够达成任务(抵达B点,方向大概为BC)。搜寻方法1(确定步伐):尝试:1s,2s,3s,之,后,球员是否能够恰好抵达合适的地点。改变步伐算法描绘:①step初值设置,一般为1;②如果要改变方向,step=step/2;③如果不要改变方向,step=step*2;④如果满意则达成,否则,转②.5、怎样设计FIRA半自主机器人的视觉系统,使之能辨别机器人的方向?辨别算法的设计如下:1)搜寻队标地区,求得中心点O;2)搜寻球员色标1地区,求得中心点O1;3)搜寻球员色标2地区,求得中心点O2;4)计算球员的地点、角度。某颜色的圆形地区的辨别算法的设计如下:8.搜寻该颜色,获得该颜色的种子;9.横向扩展搜寻,获得x方向的弦;10.求得该弦的中点;11.重该中点,沿y轴,想上下两方向扩展搜寻,获得y方向的弦;12.求得该弦中点;13.从该中点,沿x轴,向左右两方向扩展搜寻,获得x方向的弦;14.求得该弦中点,该点即为圆形地区的中心。人工智能研究的基本内容:1、认知模型。2、机器感知。3、机器思维。4、机器学习。5、机器行为人工智能的研究途径与方法:1、鉴于结构模拟的神经计算法,以模拟的神经计算法就是根据人脑的生理结构和工作机理实现计算机的智能2、鉴于功能模拟的符号推演法:以人脑的心理模型,将问题或只是表示成某种逻辑思维网络3、鉴于行为模拟的控制化法*知识的层次结构:1数据2、信息3、知识:经过加工、整理、解释和变换的信息4、元知识:是有关知识的知识,是知识库中的高层知识,包括怎样使用规则、解释规则、校验规则、解释程序等结构的知识*对知识表示的要求:1、表示能力:a.知识表示范围的宽泛性b.领域知识表示的高效性c.对非稳定性知识表示的支持程度2、可利用性:包括对推理的适应性和对高效算法的支持性3、可组织性与可维护性:知识的可组织性是指把有关知识按照某种方式组成一种知识结构4、可实现性5、自然性与可理解性语义网络的表示由以下4个有关部分组成:a.语法部分:决定表示词汇表中允许那些符号,他波及各个节点和弧线;b.结构部分:表达符号排列的拘束条件,指定各弧线连结的节点对c.过程部分:说明接见古城,这些过程能用来成立和修证的描绘d.回答有关问题的语义部分:确定于描绘有关的意义和方法,及确定有关节点的排列及其占有物和对应弧线*推理方法及分类:1.演绎推理2.概括推理3.默认推理...正向推理:是一种从已知事实出发,正向使用推理规则的推理方式,也称为数据驱动推理或向前链推理*算法描绘:1、把用户提供的初始凭证放入综合数据库2、检查综合数据库中是否包含了问题的解,若已包含,侧求解结束,并成功退出,否则转53、检查知识库中是否有可用知识,若有,形成目前可用知识集,履行下一步;否则转54、按照某种矛盾消解策略,从可用知识会合中选出一条知识进行推理,并将推理的新事实加入综合数据库中然后转25、询问用户是否能够进一步补充新的事实,若可补充,则将新事实加入综合数据库中,然后转3,否则推理失败退出。逆向推理:是一种以某个假定目标作为出发点的推理方法,也称为目标驱动推理或逆向链推理*算法描绘:1、将要求证的目标组成一个假定集2、从假定集中选出一个假定,检查该假定是否在综合数据库中,若在,则该假定成立,此时,若假定集为空,则成功退出,否则仍履行2,若该假定不再数据库中,则履行下一步3、检查该假定是否可由知识库的某个知识导出4、将知识库中能够导出该假定的所有知识组成一个可用知识集5、检查可用知识集是否为空若为空,则推理失败,否则履行下一步6、按照矛盾消解策略从可用知识集中取

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论