2021.1.17-Robocup 2D学习日志

环境平台

比赛平台server和monitor

比赛平台包括两个主要程序soccerserver和soccermonitor。Soccerserver作为一个服务器程序模拟所有球员、球的移动、球员通信以及根据比赛规则控制比赛进程。Soccermonitor功能是将从Soccerserver中获得的信息显示到一个虚拟场地上,并且可以开多个Soccermonitor链接到Soccerserver上。
Soccermonitor相当于一台显示器,通过端口号6000与server链接,目前官方提供了两种monitor:rcssmonitor和rcssmonitor_classic。
Soccerserver由球场仿真模块、裁判模块和消息板模块三个部分组成。
球场仿真模块计算场上对象的移动,检测他们之间的碰撞。因为球场上的对象(如22名球员、球)都有大小、位置、速度、加速度等属性,因此仿真模块要实时计算各个对象的状态,每个周期(默认100ms)都要进行更新。
裁判模块用于根据规则控制比赛进程,由于仿真比赛环境具有动态、实时、不确定性、多主体对抗等特点,因此需要裁判进行判决一些形式(如进球、界外球、越位等)。
消息板模块负责客户端之间的通信,每个客户端通过使用基于UDP/IP协议的socket来与server(Soccerserver)进行全双工通信。通过socket,client可以发送命令控制球员,也可以接收球员的感知信息。
Soccerserver采用离散化模式运行,即所有程序运行都是在仿真周期simulatior_step(缺省为100ms)结束前,server收集所有球员程序的行为请求,并在每个周期末尾才统一更新场上信息。每个周期只能发送一条独立信息。

球员客户端client

每队球员有12个,包括1守门员、10球员、1教练。
一个球员client通过udp链接到server上,发送命令来控制球员的行为(如踢球、转身、跑动等),随后server处理这些命令请求,并相应地更新场上的比赛状态,此外server向client提供这名球员的感知信息(比如视觉信息、球员自身状态),球员必须在一个仿真周期内作出决策并将及时将请求发送给server。
球员之间进行通信通过say和hear命令实现,say命令有一定的范围限制,并且频率不能过高。
每个球员有体力值,体力值随跑动衰减,每个周期可以自动恢复一些。

coach不直接参与踢球,但是他可以获得更多的信息,并通过发送给教练coach,从而帮助其他球员比赛。教练分为offline和online两种,在线教练可以在正规比赛中使用,他在比赛过程中获得全局无噪信息,可以进行高层次的分析,通过某些方式给场上球员提供更多信息和建议;offline coach也称为trainer,他比online coach更多控制比赛的能力,不能在正式比赛中使用,主要用于球队程序额训练、调试。使用offline coach可以改变比赛状态、给球员广播各种信息、移动球和球员到任何位置,并可以赋予他们一定的速度和方向等,这些在进行球员程序的自动学习和自动管理比赛起到重要作用。

比赛规则

自动裁判

中场开球kick-off

进球goal

守门员发球goalie free kick

出界out of field

越位offside

回传 backpasses

发球违例free kick fault

扑球违例catch fault

球员清除 player clearance

比赛状态控制play-mode control

半场half-time和中场time-up

人为干预

故意包围球

故意使用过多的球员堵住球门

在限定周期内没有让球投入比赛

故意挡住其他球员的移动

守门员滥发catch指令

大量消息堵塞比赛平台的通讯信道

不适当的行为

基本的资料

world_model
World_model 即世界模型
作用:可以获取球场上的各种信息(例如:球的位置以及速度,球员的位置以及速度(包括我方球员以及对方球员),球员的体力值之类的,所有的基本信息都可以从世界模型里面获取)
代码中的使用:
const WorldModel & wm = agent->world();
获取球员的体力值 wm.self().stamina();
还有许多其他的作用,代码中都有体现
代码中的变量的含义基本可以通过其命名推断出来(这是一种比较好的变量的命名习惯)
代码框架相关的资料
第一部分:各个模块代码的作用
(可以从代码文件的命名来判断代码的作用)
高层中代码分为两种类型主要为 bhv开头 以及 role开头的
两种区别之处:
Bhv开头的是 高层中比较基础类型的代码
Role开头的是 比bhv要高层点的代码 bhv有时被role调用
但是两者的关系并不绝对。
两种代码的简介
Bhv开头的
一些例子
bhv_basic_move.cpp bhv_basic_move.h 基本跑位
bhv_attackers_move.cpp bhv_attackers_move.h 进攻性质的跑位
bhv_goalie_basic_move.cpp bhv_goalie_basic_move.h 守门员的基本跑位
bhv_set_play_kick_off.cpp bhv_set_play_kick_off.h 开球时候的动作(bhv_set开头主要是在不同比赛模式下面的行为,比如自由球,我方开球等。具体作用看文件名就行)
role开头的
role主要实现的是不同角色的行为动作(11个球员被分为不同的角色)
role_center_back.cpp role_center_back.h (后卫) 2号以及3号的代码
role_center_forward.cpp role_center_forward.h (前锋) 11号的代码
role_offensive_half.cpp role_offensive_half.h 7号以及8号的代码
role_defensive_half.cpp role_defensive_half.h 6号的代码
role_side_back.cpp role_side_back.h(边后卫) 4号以及5号的代码
role_side_forward.cpp role_side_forward.h(边前卫) 9号以及10号的代码

role开头的代码除了上述的代码之外还有后缀是move,根据名字就知道是控制跑位的,不同角色会有不同的跑位,前缀用来区别是哪一个角色的跑位。

第二部分:主要是讲明各个模块的组织关系,即每个球员的代码的架构关系
(以11号球员为例子,其他的类似)

球场区域的划分见之前发的培训资料。

第三部分:一些建议
1.推荐看的代码(当然全部看会更好)
Bhv开头里面的大部分代码(文档所列出的例子是基础)
Role里面至少要看一个前场球员以及一个后场球员
2.代码目前的是比较成熟的了,所以要会从已知的代码中来学习以及借鉴编程一些思想。所以要多看代码。
3.修改代码的时候首先要明确求改的目的,比如要修改11号球员在中场附近的跑位,
然后定位到相关代码的的位置,仔细的去理解之前的代码,然后进行改进。不要盲目的修改,改完也不清楚如何判断修改的质量

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值