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

类别:软件工程 点击:0 评论:0 推荐:

机器人策略程序设计框架

       当欧洲足球联赛踢的漫天飞舞的时候,当国人又为国足难过的时候,机器人足球比赛也在热火朝天的举行着,这是考虑的一个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结构

 

 

 

本文地址:http://com.8s8s.com/it/it36709.htm