1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2016年9月5日 |
---|
#19 在 #league
在 roboime-next 中使用
440KB
9K 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。此外,在编写代码时,请尽量遵守周围的样式约定。将来将添加代码 lints 以警告不符合我们偏好的样式,但目前这不是优先事项。
优化构建
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
:一个浮点数。
初始化输出
目前期望以下行
COMPATIBLE 1
将来,可以使用以下内容来明确表示不兼容性
NOT_COMPATIBLE 1
,假设1
是最高兼容版本
一回合游戏的输入
第1行一般游戏数据
COUNTER
:一个整数,接收到的数据包计数器TIMESTAMP
:一个浮点数,自游戏开始以来经过的时间REFEREE_STATE
:一个字符,指示裁判状态,以下之一S
:STOP,至少保持0.5米远离球N
:NORMAL,尽情发挥,进球得分A
:AVOID,尽情发挥,进球得分,但指示的机器人不得触球p
:PRE_KICKOFF,回到你的场地,你将很快开球k
:KICKOFF,你现在可以开球了i
:INDIRECT,踢球恢复比赛,不允许双重触球或直接进球d
:DIRECT,踢球恢复比赛,不允许双重触球x
:PRE_PENALTY,让您的机器人站在“罚球线”后面,等待射击命令y
:PENALTY,你现在可以射点球,最好能射进P
:OPPONENT_PRE_KICKOFF,回到你的场地,对方将很快开球K
:OPPONENT_KICKOFF,对方被授权开球,你必须保持远离球,直到状态恢复正常I
:OPPONENT_INDIRECT,对方必须踢球来恢复比赛,等待正常状态靠近球D
:OPPONENT_DIRECT,对方必须踢球来恢复比赛,等待上述正常状态X
:OPPONENT_PRE_PENALTY,准备你的机器人,对方将很快射点球Y
:OPPONENT_PENALTY,对方现在可以射球了,要守住它
REFEREE_MORE_INFO
:一个整数,当REFEREE_STATE
是AVOID时,这是机器人的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
:一个布尔值,如果控球器将被开启则为真(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
存在一个GUI:roboime-next-gui
。
主要目标包括
- 游戏状态的三维可视化
- 配置两个队伍的子进程AI
- 模拟游戏状态,包括裁判
- 为AI提供一个基于stderr的API,以便在游戏状态上绘制
屏幕截图
许可证
此代码受Mozilla公共许可证2.0许可,其文本副本可在LICENSE.txt中找到。
您被允许并鼓励在RoboCup比赛中使用此软件。如果您这样做,请告知我们。
虽然这不是必需的,但我们认为共享改进对所有人最好。
依赖项
~1.5MB
~28K SLoC