Robocup 2D比赛代码导读(agent底层代码指导)

2023-05-16

相信刚开始接触Robocup 2D比赛的萌新,都清楚agent的代码看起来是很痛苦的,而且不知道从何看起。

我个人观点看代码先看bhv和role这部分的代码。bhv行为动作的类的代码涉及到球员的进攻、跑位、防守、铲球等决策。role角色类会调用bhv中的部分函数。

为了帮助萌新们更好的入门,我将我所看了的agent2d的代码添加了注释,有需要的去我的资源里面自取

以bhv_basic_move.cpp为例

//agent代表一个智能体 球员
bool
Bhv_BasicMove::execute( PlayerAgent * agent )//执行函数  判断BasicMove是否执行
{
    /*Logger类:为了输出玩家代理的动作内容,特别是有关决策的记录,
    通过使用Logger,可以在比赛时间的同时将任意消息输出到外部文件可以设置日志级别(具体看开发文档)*/
        
    //dlog是logger.{h,cpp}中宣布的全局变量,是Logger类的实体。addText()的第一参数中指定了日志级别的Id
    dlog.addText( Logger::TEAM,
                  __FILE__": Bhv_BasicMove" );//输出TEAM的日志信息

    //-----------------------------------------------
    // tackle拦截(铲球)
    if ( Bhv_BasicTackle( 0.8, 80.0 ).execute( agent ) )
    {
        return true;
    }

    const WorldModel & wm = agent->world();
    /*--------------------------------------------------------*/
    // chase ball 追球-->拦截
    //InterceptTable类是根据保存在World Model内的信息来预测各玩家捕捉球所需的循环数,并将其结果保存起来的
    const int self_min = wm.interceptTable()->selfReachCycle();//SelfObject(播放器代理自身)的预测球捕捉周期数。(自己到达球的周期)
    const int mate_min = wm.interceptTable()->teammateReachCycle();//我方玩家的预测球捕捉周期数中最小的值。(队友到达球的周期)
    const int opp_min = wm.interceptTable()->opponentReachCycle();//敌玩家的预测球捕捉周期数中最小的值。(对手到达球的周期)

    if ( ! wm.existKickableTeammate()//bool existKickableTeammate() const;如果队里估计有一个可以踢球的玩家,返回真。
         && ( self_min <= 3
              || ( self_min <= mate_min
                   && self_min < opp_min + 3 )
              )
         )
    {
        
        dlog.addText( Logger::TEAM,
                      __FILE__": intercept" );
        Body_Intercept().execute( agent );//执行 球员去追逐(截断)球
        agent->setNeckAction( new Neck_OffensiveInterceptNeck() );//转向函数,猜测是拦截成功后调整转向为进攻方向

        return true;
    }

    const Vector2D target_point = Strategy::i().getPosition( wm.self().unum() );//获取目标点(球)的位置
    const double dash_power = Strategy::get_normal_dash_power( wm );//获取冲刺力(冲刺功率)

    double dist_thr = wm.ball().distFromSelf() * 0.1;//运球时与球的距离
    if ( dist_thr < 1.0 ) dist_thr = 1.0;//调节球与球员之间的距离

    dlog.addText( Logger::TEAM,
                  __FILE__": Bhv_BasicMove target=(%.1f %.1f) dist_thr=%.2f",
                  target_point.x, target_point.y,
                  dist_thr );
    //debugClient类 会向调试服务器发送信息作为第一个客户端功能的实现
    agent->debugClient().addMessage( "BasicMove%.0f", dash_power );//添加球员信息
    agent->debugClient().setTarget( target_point );//设定球员行动目标位置.一个周期只能使用一次。
    agent->debugClient().addCircle( target_point, dist_thr );//

    if ( ! Body_GoToPoint( target_point, dist_thr, dash_power
                           ).execute( agent ) )
    {
        Body_TurnToBall().execute( agent );//身体转向球可以联系设置的体力直接冲向球(动作执行)
    }

    if ( wm.existKickableOpponent()
         && wm.ball().distFromSelf() < 18.0 )
    {
        agent->setNeckAction( new Neck_TurnToBall() );//Neck_TurnToBall是将视角对向球,把视线投向下一个循环的预测球位置。
    }
    else
    {
        agent->setNeckAction( new Neck_TurnToBallOrScan() );
        //Neck_TurnToBallOrScan是将视角对向球或者进行扫描球的位置,也就是说并不清楚球的位置。
        //当球信息不可靠时,将视线转向下一个循环的预测球位置。当球信息可靠性高时,环视周围。如果存在可以踢除自己以外的球的玩家,则考虑球移动的范围,决定是否注意球。
    }

    return true;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Robocup 2D比赛代码导读(agent底层代码指导) 的相关文章

  • 关于java数组,形参的改变,会改变实参的值

    当java数组调用一个方法 xff0c 将数组传进去 public static void main String args int arr 61 6 1 2 3 4 5 sort arr arr length for int i 61 0
  • C++迭代器(iterator)

    什么是迭代器 xff08 iterator xff09 迭代器 xff08 iterator xff09 是一种可以遍历容器元素的数据类型 迭代器是一个变量 xff0c 相当于容器和操纵容器的算法之间的中介 C 43 43 更趋向于使用迭代
  • 理解lightdm.conf

    Before you do anything to your lightdm conf file you should make a backup simply run sudo cp etc lightdm lightdm conf et
  • selenium自动化测试

    目录 第一节 xff1a selenium概述 第二节 xff1a 在PyCharm中使用selenium 第三节 xff1a 使用selenium自动控制浏览器 第四节 xff1a selenium在大数据的使用 第一节 xff1a se
  • HTTP | HTTP报文

    01概述 客户端与服务器端之间的通信 xff0c 通过HTTP协议 xff0c 以HTTP报文的形式来实现数据的交互 HTTP报文是HTTP通信时发送的数据块 xff0c 本文主要从以下几个方面介绍HTTP报文 xff1a HTTP报文结构
  • k8s赋予用户进入容器以及向容器中拷贝文件的权限

    在k8s中集群中赋予用户进入容器以及向容器中拷贝文件的权限 xff0c 自定义clusterrole如下 xff1a span class token key atrule apiVersion span span class token
  • 翔仪 垂直起降固定翼 操作流程

    翔仪 垂直起降固定翼 操作流程 垂直起降固定翼 操作流程 01 地面站采用的是翔仪飞控软件 02 奥维互动定位平台 上规划飞行区域 长方形 为佳 覆盖作业范围200米以上 xff08 防止漏拍发生 xff09 导出KML格式 地图切换里面
  • 一、初识FreeRTOS之FreeRTOS简介

    目录 一 什么是FreeRTOS xff1f 二 为什么选择FreeRTOS xff1f 三 FreeRTOS的特点 四 FreeRTOS资料与源码下载 五 FreeRTOS源码文件介绍 一 什么是FreeRTOS xff1f Free即免
  • Hbase使用scan(get)过滤器查询封装(java)

    在hbase上使用过滤器查询 xff1a 指定参数 xff0c 指定返回字段 xff0c 指定对象 xff0c 指定单 xff08 多 xff09 版本 Collection lt E gt 详情见以下 xff1a Map lt K V g
  • 单片机12864带字库汇编使用教程

    一丶引脚说明 Lcd12864 xff08 带字库版本 xff0c ST7920为主芯片驱动 xff09 xff08 正面 xff09 xff08 反面 xff09 由于是带字库版本 xff0c 与不带字库版本有出入 xff0c 其部分引脚
  • Jetson Xavier NX学习笔记(三)系统烧录+开机教程+YOLOv7环境搭建+错误总结(详细版)

    Jetson Xavier NX 系统烧录 43 开机教程 43 YOLOv7环境搭建 43 错误总结 xff08 详细版 xff09 文章目录 Jetson Xavier NX 系统烧录 43 开机教程 43 YOLOv7环境搭建 43
  • UDP网络编程

    一 UDP的概念 1 1 UDP 面向无连接 xff08 无连接 xff0c 是因为UDP里有了对方的地址 xff0c 直接发就好 xff09 特点 xff1a 1 邮件系统服务模式的抽象 2 每个分组都携带完整的目的地址 3 不能保证分组
  • 全网最详细SUMO仿真软件教程——入门篇

    目录 SUMO下载前提知识使用netedit创建路网需求生成SUMO GUI可视化 SUMO下载 SUMO官网 SUMO下载链接 配置SUMO HOME系统变量 xff0c 后续引入包需要 前提知识 sumo仿真器跑起来需要有三个文件 xf
  • 遥感图像场景分类常用数据集

    1 UC Merced Land Use Data Set 图像像素大小为256 256 xff0c 总包含21类场景图像 xff0c 每一类有100张 xff0c 共2100张 下载地址 xff1a http weegee vision
  • 用vs code连接虚拟机(夜神模拟器)

    手机模拟器设置 打开夜神模拟器的bin目录 xff08 右键夜神模拟器 xff0c 打开文件所在位置 xff09 xff0c 如果是windows10 xff0c 就在文件夹下输入 nox adb exe connect 127 0 0 1
  • 数字加减---多线程案例

    package wzr thread test1 经典的多线程开发操作 xff0c 程序中需要考虑的核心是 xff1a 加一个 xff0c 减一个 xff0c 只在0 1之间 public class Test public static
  • mysql下载安装,详细流程

    下载 https dev mysql com 在水平导航栏点击download 点击MySQL Community GPL Downloads 进入后点击MySQL Installer for Windows 下载安装包是32bit的 xf
  • spring5——2.webflux,响应式编程,执行流程及核心API

    什么是响应式编程 在计算机中 xff0c 响应式编程或反应式编程 xff08 英语 xff1a Reactive programming xff09 是一种面向数据流和变化传播的编程范式 这意味着可以在编程语言中很方便地表达静态或动态的数据
  • springboot——测试时bean无法注入的问题

    问题描述 xff1a 当我在test测试类中测试无法注入 64 Dao类时 xff0c 我去main java下测试 xff0c 是否可以使用这个Dao类 xff0c 结果成功调用 于是我定位到这个问题就是测试时无法注入 猜测可能是 64
  • springboot——跨域(nginx,cors)

    跨域访问 xff0c 是指从一个域名的网页去请求另一个域名的资源 比如从www baidu com 页面去请求 www google com 的资源 但是一般情况下不能这么做跨域访问 xff0c 因为有浏览器的 同源策略 存在 xff0c

随机推荐

  • Python 三大神器:pip,virtualenv(virtualenvwrapper),fabric

    pip用来管理包 文档 xff1a https pip pypa io en latest installing html 介绍 xff1a pip 是 Python 包管理工具 xff0c 该工具提供了对Python 包的查找 下载 安装
  • git命令 本地

    目录 基础命令提交分支合并合并 创造线性的提交历史 高级命令分离HEAD相对引用撤销变更 自由移动提交记录 96 git rebase i 96 的使用说明 提交的技巧里程碑的使用 基础命令 提交 提交git commit 提交 包含信息g
  • git命令大全

    文章目录 仓库配置增加 删除文件代码提交分支标签查看信息远程同步撤销其他 仓库 在当前目录新建一个Git代码库 git init 新建一个目录 xff0c 将其初始化为Git代码库 git init project name 下载一个项目和
  • git命令 远程

    文章目录 pull amp push Git仓库克隆远程仓库 96 git clone 96 远程分支从远程仓库获取数据 96 git fetch 96 从远程仓库获取数据 96 git pull 96 上传数据到远程仓库 96 git p
  • 遥感图像场景分类方法总结

    遥感图像场景分类一般假定相同类别的场景应该共享相似的特征信息 xff0c 基于此 xff0c 遥感图像场景分类方法可以分为三大类 xff1a 基于底层视觉特征 xff0c 基于中层视觉表达 xff0c 基于高层视觉信息 底层视觉特征 xff
  • 香橙派如何扩容升级内存?超简单迁移系统到新的SD卡,树莓派也适用

    香橙派扩容迁移系统到新的SD卡 前言迁移系统新系统测试 本文博客地址 xff1a 香橙派迁移系统到新的 SD 卡 前言 刚开始用香橙派的时候 xff0c 用的是一个 16G 的 SD 卡 xff0c 但随着系统上装的软件越来越多 xff0c
  • 博途(TIA)软件安装教程;博途软件安装常见问题解决办法

    博途软件安装教程 xff0c 这里有两位前辈写的非常不错 xff0c 但在具体细节不够充分 xff0c 对于第一次接触此类软件的小伙伴来说不太友好 xff0c 于是在此进行补充 xff0c 并对安装中常见的问题进行一个汇总 建议 安装时主要
  • zabbix 监控源代码安装

    实验环境 192 168 0 108 server端 192 168 0 109 agent端 步骤一 配置两台虚拟机确保ip能连网 配置l两台主机名 vim etc hostname 配置两台主机hosts文件 cat etc hosts
  • exec函数与fork函数的配合使用

    1 实现功能 当父进程检测到输入为1的时候 xff0c 创建子进程把配置文件的字段值 LENG 61 1修改为LENG 61 6 修改掉 代码如下 xff1a 将该修改配置文件通过gcc o 编译生成可执行文件changeData xff0
  • java中的Arrays.sort()的几种用法

    目录 1 第一种2 第二种方法3 第三种方法4 额外补充 for each的语法结构 直奔主题 Arrays sort 有三种用法 1 第一种 Arrays sort int a 查看源码 span class token keyword
  • Maven:导出war包时报错Failed to execute goal org.apache.maven.plugins:maven-war-plugin解决方法(全)

    出现如下问题的时候 是因为在target文件夹下没有生成war文件 Failed to execute goal org apache maven plugins maven war plugin 2 2 war default war o
  • java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

    目录 前言1 学习路线2 学习方法 前言 这篇文章主要总结我之前所学过的框架以及学习路线 从实打实的零基础到框架再到项目 之后实习工作 也在这篇博客中记录我的学习笔记 以及在笔记中遇到的配置安装 代码bug等错误 都从零开始摸索并且记录了下
  • Java抽象类和接口的详细区别(全)

    目录 前言1 抽象类2 接口3 两者结合4 面试总结 前言 这两者经常在笔试以及面试中经常问及 xff0c 甚至在项目实战中还在纠结用哪一种类型 今天就此问题详细剖析一下 以往我的文章中也有稍微提及 xff1a java框架零基础从入门到精
  • Python 通过ImageDraw.rectangle 画矩形框

    目录 1 函数讲解2 示例代码3 补充cv2 rectangle 1 函数讲解 源代码如下 xff1a ImageDraw rectangle xy fill 61 None outline 61 None width 61 1 主要的参数
  • 基于迁移深度学习的遥感图像场景分类

    前述 根据语义特征对遥感图像场景进行分类是一项具有挑战性的任务 因为遥感图像场景的类内变化较大 xff0c 而类间变化有时却较小 不同的物体会以不同的尺度和方向出现在同一类场景中 xff0c 而同样的物体也可能出现在不同的场景里 理论上 x
  • reStructuredText文档图片表格等自动编号以及名称修改

    number figures 61 True numfig 61 True numfig secnum depth 61 1 numfig format 61 39 figure 39 39 图 s 39 39 code block 39
  • Robocup 2D仿真足球机器人环境搭建(Ubuntu 16.04)

    现在很多高校的学生都在搞RoboCup2D仿真足球机器人 xff0c 而平台的搭建便是一大问题 本人也在搭建环境中遇到各种奇奇怪怪的问题 xff0c 有些找了许多网页 xff0c 下面是我对环境搭建 中遇到的问题以及解决方法的总结 希望能帮
  • Robocup 2D仿真足球机器人环境搭建快速搭建

    虽然之前已经写了Robocup 2D仿真足球机器人环境搭建 xff0c 但是后面我找到了更快搭建环境的方法 而且现在很多团队都是在agent底层代码的基础上编写的 之前的方法配置的环境运行agent球队代码会出现错误 通过找资料得知是有些软
  • Robocup 2D新手导读(入门总结)

    目前 xff0c 我们团队接触Robocup 2D比赛也有好几个月了 xff0c 不得不说 这个比赛也有一定难度 尤其是对于第一次接触这个比赛的我们来 说 下面是我的一些总结 xff0c 希望能够帮助你们 1 Robocup 2D的比赛基本
  • Robocup 2D比赛代码导读(agent底层代码指导)

    相信刚开始接触Robocup 2D比赛的萌新 xff0c 都清楚agent的代码看起来是很痛苦的 xff0c 而且不知道从何看起 我个人观点看代码先看bhv和role这部分的代码 bhv行为动作的类的代码涉及到球员的进攻 跑位 防守 铲球等