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

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(