Robocup2D入门笔记(5)——agent2d球队结构

2024-02-18 12:50

本文主要是介绍Robocup2D入门笔记(5)——agent2d球队结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇博客将重点介绍agent2d这个底层球队,agent2d本身也是当前最常用的一个底层球队,是helios团队开发出的底层球队,方便我们能够快速上手,将自己的想法付诸实践。点击进入下载地址,注意要先安装librcsc然后再安装agent2d的球队代码。

一、球队框架

agent2d的框架可以看下面这张图片:在这里插入图片描述
可以看到,agent2d总共有3个开始入口,分别是start.sh,start_offline.sh以及train.sh,分别对应普通模式开始,离线状态开始以及训练模式开始。

通过上面的脚本,开始运行main_player.cpp以及main_coach.cpp,这里面只用一个main函数,用于创建client并连线到服务器,从这里开始后面的一系列初始化的过程。

下一层级为samplePlayer以及sampleCoach,这个类可以认为是球员以及教练的大脑,球员类从这里衍生出了交流类(communication)、世界模型类(worldModel)、行为类(behavior)、策略类(strategy)、角色类(role)等,之后会详细介绍。

再往下是playerAgent类,这个类可以被认为是球员的身体类,它负责支配球员做出各种简单的动作,例如转身、踢球等。

最底层是soccerAgent以及basicClient类。soccerAgent类负责处理服务器发来的各种信息,例如比赛开始、比赛中止等;而basicClient类负责与服务器完成通信,从上层接收并发送指令到服务器,将服务器发来的信息上传到上层类。可以认为soccerAgent类就是介于底层通信类和上层抽象球员类之间的一个桥梁

二、交流类

这里的交流类指的是球员之间以及球员和教练之间的交流,可以主要分为三个部分,分别是信息类(xxxMessage)、信息处理类(xxxMessageParser)以及其他类;

在agent2d的球员交流之中,球员之间是用固定的信息模板来进行交流的,agent2d自带了一些固定的信息模板,例如要发送球的位置信息就得调用球的信息类来生成信息,生成一个带有固定前缀码(1个char)以及固定长度的信息,这里面就涉及信息的编码了;之后信息处理类先判断发送来的信息是否符合对应的要求(前缀码和长度),然后再对信息进行解码,获得信息并记录到memory类当中。

三、世界模型类

世界模型类(worldModel)是agent2d的一个非常重要的类,主要的功能就是记录球场的各种状态,例如球的位置,队友的位置,对手的位置,当然这里记录的信息是球员通过视觉或者听觉获得的,并不一定是正确的,会有一定的限制和偏差。

它下设了各种各样的object用于例如记录球以及队友对手的各种属性等等,而这些object类又是继承于AbstractObject类。

四、策略类

策略(strategy)在agnet2d中指的是球队层面的一些战术配合,例如阵型、角色分配等。

agent2d的阵型采用的是DT跑位,这里有必要多介绍一下跑位的相关知识。在Robocup2D的历史中,最开始是没有跑位的,这个时候球员基本都是追着球跑,没有什么战略性可言。之后随着项目的发展,出现了第一种跑位方式——SBSP,基于吸引子与排斥子的跑位,简单的说就是根据球的位置算出一个当前的跑位点,这样大家就不会一窝蜂的去追球了。之后继续发展,出现了DT跑位,通过delauny三角形先把球场划分开,然后以球在这些划分的三角形的交点处为情况设置阵型,而球不在交点的时候就采用三个交点的情形按比例计算出跑位点,具体可以看这篇文章。agent2d采用的是后一种办法。对应的类就是DTFFormation类,agent2d也封装了其他的跑位类,但是没有调用,而这些类都是基于SampleFormation继承而来的。

role类的话就是各种各样的球员角色了,例如守门员、前锋等,不同的角色会有不同的行为。

五、行为类

行为(behavior)在Robocup2D中可以认为是一系列动作(action)的组合,例如踢球是一个动作,但射门就是一个行为,因为射门需要首先确定踢球的角度力度等,踢这个动作只是简单的一环。

agent2d中封装好了许多动作和行为,行为类会调用对应的动作类。如果要修改推荐也是从行为上修改,修改动作相对来说效果并不会非常明显。

上一篇:Robocup2D入门笔记(4)——常见模型

下一篇:Robpcup 2D入门笔记(6)——总结及后续

这篇关于Robocup2D入门笔记(5)——agent2d球队结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/721199

相关文章

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP