专注人工智能在金融领域的应用

球队流程概述及改进方向——Robocup3D机器人足球

 1 球队流程

1.1 上层决策

     soccerskill.h ,  soccerskill.cpp,soccerskill_chx.cpp,soccerskill_cgb.cpp ,soccerskill_gl.cpp

     通过一些因素评估角色和动作,具体如下:

// ATT — Attacker,进攻者

// DEF — Deffender,防守者

 enum ESkillStatus 

 {

  // 以下是进攻者的动作

  ATT1_TURNTO_BALL, // 转向球

  ATT1_GOTO_BALL,   // 走向球

  ATT1_ROUND_BALL,  // 绕球 

  ATT2_TURNTO_HELP, // 转身(助攻)

  ATT2_GOTO_HELP,   // 走到某点(助攻)

  ATT2_TURNTO_GATE, // 转向球门

 // 一下是防守者的动作

  DEF1_TURNTO_BLOCK,// 转身(卡位防止对方进攻) 

  DEF1_GOTO_BLOCK,  // 走向卡位点

  DEF1_TURNTO_BALL, // 转向球

  DEF1_TURNTO_GATE, // 转向球门

  DEF1_GOTO_BALL,   // 走向球

  DEF2_TURNTO_ORIG, // 转向本位点

  DEF2_GOTO_ORIG,   // 走向本位点

  DEF2_TURNTO_GATE, // 转向球门

 };

 enum RoleType

 {

  RoleNone,             // 无角色

  RoleMainAttacker,     // 主攻

  RoleHelpAttacker,     // 辅攻  

  RolePositiveDefender, // 积极防守,去卡位

  RoleNegativeDefender, // 消极防守,到自己球门附近

  RoleGoalie,           // 守门员

  RoleMax               

 };



SoccerSkill中以下几个函数是连接中间层的,里面直接调用RobotTrace中相应的函数。

 // 执行转身动作

 void ExecuteTurn(float angleError); 

 // 执行前进动作

 void ExecuteWalk(float angleError,float distError);

 // 执行绕球动作

 void ExecuteRound(float faceBallError,float distBallError,float roundError);

 // 执行停止动作

 void ExecuteStop();

 

1.2 中间决策

    trace.h ,trace.cpp中的代码。

    定义了底层动作类型,配置文件config/footstep.cfg中有动作的间的过渡关系,及每个动作的关键帧数据。

    执行具体动作时,会关键帧的插值,比如,直走时的插值为了使机器人走的更直。

1.3 底层,逆运动学

    model.h, model.cpp,给出双脚位姿和重心地面投影,算出每个关节的角度。

2 改进方向

2.1 上层决策有bug,有些参数值不合理,比如进攻者去截球时,动作容易切换。

2.2 中间层的插值函数,绕球的插值函数还有点问题。

2.3 添加新动作,如后退,侧移,以及相应的过渡动作。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>