#ai #ssl #robocup #roboime #soccer

bin+lib roboime-next

RoboCup 小型机器人联赛的 RoboIME 核心软件栈

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2016年9月5日

#38#ssl

MPL-2.0 许可证

390KB
5K SLoC

Rust 4K SLoC // 0.1% comments C 417 SLoC // 0.0% comments C++ 274 SLoC // 0.1% comments Python 126 SLoC // 0.1% comments Java 92 SLoC // 0.1% comments GLSL 83 SLoC // 0.3% comments Lua 64 SLoC // 0.1% comments

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。此外,在编写代码时,请尽量遵守周围的风格约定。将来,将添加代码检查来警告关于偏离我们偏好的风格,但目前这不是优先事项。

优化构建

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:一个浮点数。

初始化输出

目前预期以下行

  • 兼容 1

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

  • NOT_COMPATIBLE 1,因为 1 是最高兼容版本

一局游戏的输入

第1行 一般游戏数据

  • COUNTER:一个整数,表示接收到的数据包计数器
  • TIMESTAMP:一个浮点数,表示自游戏开始以来经过的时间
  • REFEREE_STATE:一个字符,表示裁判状态,以下之一
    • S停止,至少保持0.5米距离于球
    • N正常,自由活动,得分
    • A避免,自由活动,得分,但指定的机器人不能碰球
    • p准备开球,返回你的场地,你将很快开球
    • k开球,你现在有权开球
    • i间接开球,踢球以恢复比赛,不允许双重触碰或直接得分
    • d直接开球,踢球以恢复比赛,不允许双重触碰
    • x准备点球,让你的机器人站在“点球线”后,等待射击命令
    • y点球,你现在可以射门,最好得分
    • P对手准备开球,返回你的场地,对手将很快开球
    • K对手开球,对手有权开球,你必须保持距离球至少直到状态恢复正常
    • I对手间接开球,对手必须踢球以恢复比赛,等待恢复正常状态接近球
    • D对手直接开球,对手必须踢球以恢复比赛,等待恢复正常状态如上所述
    • X对手准备点球,让机器人准备,对手将很快射门
    • Y对手点球,对手现在可以射门,最好防守住
  • REFEREE_MORE_INFO:一个整数,当 REFEREE_STATE避免 时,这是机器人的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:一个布尔值,如果控制球器将被开启则返回true(1),否则返回false(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

主要目标包括

  • 游戏状态的3D可视化
  • 配置两队的子进程AI
  • 模拟游戏状态,包括裁判
  • 提供基于stderr的API供AI在游戏状态上绘制

屏幕截图

许可证

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

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

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

依赖关系

~8.5MB
~189K SLoC