Robocup2D入门笔记(3)——比赛运行逻辑简介
在前面的几篇博客中我们成功在自己的电脑上把比赛跑起来了,但具体怎么跑起来的我们还是不太清楚,这一篇博客就简要介绍比赛是如何跑起来的。
一场Robocup2D的比赛主要分为server、monitor和client三个部分。
在server启动之后,会开放一个端口(一般是6000)用于本地的球队连接上去,如果是联机比赛那就是走一个ip地址+端口。之后我们利用脚本(start.sh)就可以快速启动我们的球队生成12个进程(1个教练+11个球员),这些进程就能通过预先设置好的端口连接到服务器上,连接成功之后就会执行后面的代码,将球员放置到场上准备比赛,当双方都连接好之后,在server下达一个开球的指令(crtl+k)就会开启比赛。
在比赛的过程中,我们看起来连续的图像实际上是离散的,1秒钟被分成了10个周期(也就是100ms一个周期),因为周期时间很短所以看起来就是一个连续的过程。在每个周期中,服务器都会发送信息到各个进程中,例如当前球员所能看到的听到的东西等;而每个进程也需要发送指令到服务器端,例如转动脖子,向前冲,踢球等,发送到server的指令会被server先检查一次,而且一个周期仅能发送一定数量的指令,防止恶意堵塞信道。如此循环下去直到6000个周期跑完比赛结束。
而monitor则是在每个周期中把server模拟出来的场上的信息进行可视化,例如某个球员在哪,球在哪,离散的点因为周期很短所以看起来也会是连续的。
而在client中区分出了coach和player,coach这个client并不会显示在场上,也不会参与移动、踢球等指令,但是它可以发送信息给球员,而这个信息是不会受到球场噪音的干扰的(关于球场噪音可以看下一篇),但是会受到发送频率的限制。同时client也可以获得完整的球场信息,相当于一个拥有上帝视角的client,他可以审时度势做出球队整体的策略。