#stack #league #size #robo-ime #robo-cup #roboime-next

roboime-next-protocol

RoboIME 为 RoboCup 小型组别提供的核心软件堆栈

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2016年9月5日

#19#league


roboime-next 中使用

440KB
9K SLoC

roboime-next

RoboIME 软件堆栈的下一代迭代,使用 Rust 编写。

Build Status Build Status Coverage Status MPL License

文档

开发

安装项目

cargo install roboime-next

运行 demo-ai 机器人

roboime-next-gui --blue="python demos/python2/demo.py"

这将解析、下载和编译依赖项,并以调试模式编译项目并运行。就是这样!真的!

有关更多演示,请参阅 CLI 说明书

注意:在不久的将来,将通过 cargo 安装 cli,因此只需 cargo install roboime-next-cli,而不是上述所有内容。

如果您想运行自己的机器人,只需生成一个符合游戏 I/O 部分中描述的协议的可执行文件,并使用它调用 roboime-next-gui

roboime-next-gui --blue="python demos/python2/demo.py"

注意:必须使 my-awesome-bot 文件可执行,只需确保它先于 cargo run 运行即可。

对于更多设置,例如发送到远程 grSim 或以不同颜色玩游戏

cargo run -- --help

注意:在 roboime-next/cli/target/debug/roboime-next-cli[.exe] 上生成可执行文件,可以直接使用。

编辑器/IDE

请,在您的编辑器/IDE 中设置 EditorConfig。此外,在编写代码时,请尽量遵守周围的样式约定。将来将添加代码 lints 以警告不符合我们偏好的样式,但目前这不是优先事项。

优化构建

cargo run --release

游戏 I/O

注意:线性(xy、场尺寸)单位为米,角度(w)为弧度,线性速度(vxvy)为米/秒,角度速度为弧度/秒。

初始化输入

第 1 行 版本数据

  • "ROBOIME_AI_PROTOCOL":字面字符串;
  • VERSION:一个整数,目前为 1,当进行不兼容更改时,将增加。

在下一条线之前,它将等待正确的初始化输出。

第 2 行 场数据

  • FIELD_LENGTH:一个浮点数。
  • FIELD_WIDTH:一个浮点数。
  • GOAL_WIDTH:一个浮点数。
  • CENTER_CIRCLE_RADIUS:一个浮点数。
  • DEFENSE RADIUS:一个浮点数。
  • DEFENSE STRETCH:一个浮点数。

初始化输出

目前期望以下行

  • COMPATIBLE 1

将来,可以使用以下内容来明确表示不兼容性

  • NOT_COMPATIBLE 1,假设1是最高兼容版本

一回合游戏的输入

第1行一般游戏数据

  • COUNTER:一个整数,接收到的数据包计数器
  • TIMESTAMP:一个浮点数,自游戏开始以来经过的时间
  • REFEREE_STATE:一个字符,指示裁判状态,以下之一
    • SSTOP,至少保持0.5米远离球
    • NNORMAL,尽情发挥,进球得分
    • AAVOID,尽情发挥,进球得分,但指示的机器人不得触球
    • pPRE_KICKOFF,回到你的场地,你将很快开球
    • kKICKOFF,你现在可以开球了
    • iINDIRECT,踢球恢复比赛,不允许双重触球或直接进球
    • dDIRECT,踢球恢复比赛,不允许双重触球
    • xPRE_PENALTY,让您的机器人站在“罚球线”后面,等待射击命令
    • yPENALTY,你现在可以射点球,最好能射进
    • POPPONENT_PRE_KICKOFF,回到你的场地,对方将很快开球
    • KOPPONENT_KICKOFF,对方被授权开球,你必须保持远离球,直到状态恢复正常
    • IOPPONENT_INDIRECT,对方必须踢球来恢复比赛,等待正常状态靠近球
    • DOPPONENT_DIRECT,对方必须踢球来恢复比赛,等待上述正常状态
    • XOPPONENT_PRE_PENALTY,准备你的机器人,对方将很快射点球
    • YOPPONENT_PENALTY,对方现在可以射球了,要守住它
  • REFEREE_MORE_INFO:一个整数,当REFEREE_STATEAVOID时,这是机器人的ID,在其他所有情况下为-1
  • SCORE_PLAYER:一个整数,你的团队得分
  • SCORE_OPPONENT:一个整数,对方团队得分
  • GOALIE_ID_PLAYER:一个整数,你的守门员ID(允许进入防守区域的机器人)
  • GOALIE_ID_OPPONENT:一个整数,对方团队守门员ID

第2行球的状态数据

  • BALL_X:一个浮点数,球x位置
  • BALL_Y:一个浮点数,球y位置
  • BALL_VX:一个浮点数,球x速度
  • BALL_VY:一个浮点数,球y速度

下一行:

  • ROBOT_COUNT_PLAYER:一个整数,你团队中的机器人数量

接下来的ROBOT_COUNT_PLAYER,机器人数据

  • ROBOT_ID:一个整数,机器人标识符
  • ROBOT_X:一个浮点数,机器人x位置
  • ROBOT_Y:一个浮点数,表示机器人的y坐标位置
  • ROBOT_W:一个浮点数,表示机器人的角位置
  • ROBOT_VX:一个浮点数,表示机器人在x方向上的速度
  • ROBOT_VY:一个浮点数,表示机器人在y方向上的速度
  • ROBOT_VW:一个浮点数,表示机器人的角速度

下一行:

  • ROBOT_COUNT_OPPONENT:一个整数,表示对手队伍中机器人的数量

接下来 ROBOT_COUNT_OPPONENT,机器人数据

  • ROBOT_ID:一个整数,机器人标识符
  • ROBOT_X:一个浮点数,机器人x位置
  • ROBOT_Y:一个浮点数,表示机器人的y坐标位置
  • ROBOT_W:一个浮点数,表示机器人的角位置
  • ROBOT_VX:一个浮点数,表示机器人在x方向上的速度
  • ROBOT_VY:一个浮点数,表示机器人在y方向上的速度
  • ROBOT_VW:一个浮点数,表示机器人的角速度

一回合的输出

第1行,命令计数器

  • COUNTER:一个整数,表示已发送的数据包数量;

接下来 ROBOT_COUNT_PLAYER,机器人命令

  • V_TANGENT:一个浮点数,表示机器人的切向速度
  • V_NORMAL:一个浮点数,表示机器人的法向速度
  • V_ANGULAR:一个浮点数,表示机器人的角速度
  • KICK_FORCE:一个浮点数,表示机器人的踢球力量(目前这代表射门速度)
  • CHIP_FORCE:一个浮点数,表示机器人的传中力量,类似于KICK_FORCE但以45度角射出
  • DRIBBLE:一个布尔值,如果控球器将被开启则为真(1),否则为假(0

注意:在任何给定时刻,只有KICK_FORCE、CHIP_FORCE和DRIBBLE中的一个将有效,将来可能会修改协议以使其更明确。

这些动作将按顺序应用于机器人。

约束条件

机器人直径始终为0.180,我们在这里称之为ROBOT_DIAM

  • 0 <= COUNTER < 1000000
  • 0 <= OUR_SCORE, OPPONENT_SCORE, <= 10
  • 0 <= ROBOT_ID <= 12
  • |ROBOT_X|, |BALL_X| <= FIELD_LENGTH / 2 + ROBOT_DIAM
  • |ROBOT_Y|, |BALL_Y| <= FIELD_WIDTH / 2 + ROBOT_DIAM
  • |ROBOT_W| <=π
  • ||ROBOT_VX, ROBOT_VY||, ||BALL_VX, BALL_VY|| <= 20.0
  • |ROBOT_VW| <= 10.0 *π

GUI

存在一个GUIroboime-next-gui

主要目标包括

  • 游戏状态的三维可视化
  • 配置两个队伍的子进程AI
  • 模拟游戏状态,包括裁判
  • 为AI提供一个基于stderr的API,以便在游戏状态上绘制

屏幕截图

许可证

此代码受Mozilla公共许可证2.0许可,其文本副本可在LICENSE.txt中找到。

您被允许并鼓励在RoboCup比赛中使用此软件。如果您这样做,请告知我们。

虽然这不是必需的,但我们认为共享改进对所有人最好。

依赖项

~1.5MB
~28K SLoC