机器人策略程序设计(1)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

机器人策略程序设计框架

当欧洲足球联赛踢的漫天飞舞的时候,当国人又为国足难过的时候,机器人足球比赛也在热火朝天的举行着,这是考虑的一个3对3机器人的策略!

建立一个机器人群体类,该类实现机器人群体对球场形式的感知和提炼,综合形式决定战略目标,角色分配和各机器人的运动规划;用基本动作实现当前运动规划。总之,机器人群体完成了形式分析――判断和决定――行动的三阶段任务,最终由动作控制命令实现整体意图。其作用时把策略库组织成一个自包容的参数,方法库,模拟一个智能群体的全部功能:感知――决定――行动

1.机器人群体类的头文件:

CRobot

{

//预处理数据

RAWDATA rawData;//原始数据(当前机器人 球的方向)

NXTDATA nxtData;;//预测的后几个时刻机器人和球的方位

REFDATA refData; //提炼的决策依据

//预处理函数

Void GerRawData();//从VisionView.cpp获取当前全局数据 设置rawData

Void Predict();//根据当前和以前的机器人,球方位预测 预测器

Void SetRefData();//预处理器 一次调用三个预处理函数

//协调层数据

#define KICK_OFF 10 //标准形式化

#define PENALTY_KICK 11

#define FREE_KICK 12

#define FREE_BALL 13

#define GOALIE_LICK 14

#define DEFENS15

#define GoalieDefend 0 //禁区防守,120阵型

#define DoubleDefend 1 //重叠防守,120阵型

#define PassiveAttack 2//保守进攻,111阵型

#define ActiveAttack 3 //积极进攻,102阵型

Int nSituation;//形式,取以上4种值之一

Int attacker1;//主攻角色

Int attacker2;//协攻角色

Int defender1;//主守角色

Int defender2;//协守角色

//协调层函数

Void JudgeSituation();//依据refData判断形式,对nSituation赋值

Void InitRole();//根据形势和refData分配角色,即各角色赋值相应机器人ID

//运动规划层数据

#define Shoot 100 //单人射门技术动作

#define ………….. //其它战术动作

#define 2pass1 200 //2过1战术动作

#define ………….. //其它战术动作

#define Move 00 //直走基本动作

#define Angle 01 //转角基本动作

#define Position 02 //移动基本动作

#define …………. //其它基本动作

PATH path; //规划路径结构(链表30)-2个机器人

BOOL bIfChange;//是否维持原路径

Int nTechAct;.//技术动作代号

Int nCorAct;//战术动作代号 不包含具体参数

ACT act; //当前动作结构(包含int nBaseAct1,double x1,y1,&1,v1

// int nBaseAct2,double x1,y1, &2,v2

// int nBaseAct3,x3,y3, &3,v3)

//运动规划层函数

Void Makedecision(); //根据形式,角色和refData规划路径,确定2个机器人的技术动作

Void IfchangeDecision();//是否改变当前路径

MakeDecision 的工作原理

No IfchangeDecision() Yes 形式判断

禁区防守 重叠防守 保守防守 积极进攻 用switch-case语句

分别根据角色 refData决定战术动作序号

决定3个机器人的战术动作序号

决定3个机器人的技术动作序号

决定3个机器人的当前基本动作,存入act结构

//动作控制层函数;

Void Velocity(whichrobot,Vl,Vr);

Move(whichrobot,v) //左右轮速度相同

Void Angle(whichrobot,cur_&,desired_&); 反馈控制机制精确控制

Void Position(whichrobot,x,y, &,dx,dy,d&);

Void MakeAction();

{

Switch act.nBaseAct1

{

Case Move:

Move(Home1,v1);

Break;

Case Angle:

Case Position:

}

Switch act.nBaseAct2

{

Case ……….

}

Switch act.nBaseAct2

{

Case ……….

}

}

说明:MakeActions()的输入是act结构

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航