1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2016年9月5日 |
---|
#38 在 #ssl
390KB
5K SLoC
roboime-next
RoboIME 软件栈的下一代迭代,使用 Rust 编写。
开发
安装项目
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
注意:线性(x
、y
、场地尺寸)单位是米,角度(w
)是弧度,线性速度(vx
、vy
)是每秒米,角度速度是每秒弧度。
初始化输入
第 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,其他情况下为-1SCORE_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
存在一个 GUI: roboime-next-gui
。
主要目标包括
- 游戏状态的3D可视化
- 配置两队的子进程AI
- 模拟游戏状态,包括裁判
- 提供基于stderr的API供AI在游戏状态上绘制
屏幕截图
许可证
本代码根据 Mozilla公共许可证2.0 许可,其文本副本可在 LICENSE.txt 中找到。
您被允许并鼓励在RoboCup竞赛中使用此软件。如果您这样做,请告知我们。
虽然这不是必需的,但我们认为最好共享改进。
依赖关系
~8.5MB
~189K SLoC