Janus 客户端入门指南

面向零基础队员。读完这篇文档,你将理解 Janus 客户端的每一个模块在做什么,以及它们如何协同工作。 前置阅读:建议先读完 RCSSServerMJ 入门指南,了解仿真服务器和通信协议的基础概念。 代码声明:Janus 为南邮 Apollo 战队开源代码,如需交流或获取相关信息,请通过 About 页邮箱联系。 快速阅读路线 10 分钟速读:先看“第一章:Janus 是什么”“第二章:主循环”和“第十三章:完整数据流”,抓住客户端每帧的输入、决策和输出。 30 分钟入门:按服务器通信、感知解析、世界模型、决策系统、技能系统这条线读,把 server.py、world_parser.py、decision_maker.py 串起来。 深入阅读:重点读 Walk、Keyframe、GetUp 和工具函数几章,再回到“代码对应关系一览”,对照源码逐个文件看。 第一章:Janus 是什么 Janus 是一个 RoboCup 3D 足球仿真客户端。它不负责物理仿真(那是服务器的事),它只做一件事: 收到服务器发来的感知 → 做决策 → 把动作发回去 类比:如果服务器是"足球场 + 裁判",那 Janus 就是"球员的大脑"。每 20ms,大脑从眼睛和身体收到信息(感知),想好下一步做什么(决策),然后命令肌肉动起来(动作)。 代码在哪 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Janus_main/Janus3D/ ├── run_player.py ← 入口:启动一个球员 ├── start.sh / start3v3.sh ← 脚本:启动整支队伍 ├── kill.sh ← 脚本:杀掉所有球员进程 ├── build_binary.sh ← 脚本:打包成比赛用的二进制 ├── pyproject.toml ← 依赖配置 └── mujococodebase/ ← 所有核心代码 ├── agent.py ← 主控:把所有模块串起来 ├── server.py ← 网络:和服务器的 TCP 通信 ├── world_parser.py ← 感知解析:S-expression → Python 数据 ├── robot.py ← 机器人模型:23 个电机的控制 ├── decision_maker.py ← 决策:该干什么 ├── world/ ← 世界模型:球、球员、场地、比赛状态 ├── skills/ ← 技能系统:走路、起身、站立 └── utils/ ← 工具:坐标变换、神经网络加载 第二章:主循环 — Agent 每帧在做什么 打开 agent.py,整个客户端的核心就是 Agent.run() 里的 4 行代码: ...

April 16, 2026 · 11 min

RCSSServerMJ 入门指南

面向零基础读者。读完这篇文档,你将理解仿真服务器的核心概念,并能开始阅读 RCSSServerMJ 的源码。 源代码地址:robocup-sim/rcssservermj 后续阅读:理解服务器之后,可以继续读 Janus 客户端入门指南,看客户端如何接收感知、做决策并发送动作。 快速阅读路线 10 分钟速读:先看“第一章:什么是物理仿真”“第二章:Client-Server 架构”和“第八章:完整数据流”,建立服务器整体图景。 30 分钟入门:按网络通信、消息协议、仿真主循环、感知与动作这条线读,理解服务器和客户端每 20ms 如何交换信息。 深入阅读:再看 PlayMode、Beam、场地规格和“服务端 ↔ 客户端代码对应关系”,适合准备对照源码调试比赛逻辑。 第一章:什么是物理仿真 物理引擎 (Physics Engine) 是什么 想象一个虚拟世界——里面有地面、一个足球、一个机器人。你把球推一下,它会滚动、减速、停下;机器人抬脚,重心会偏移、可能摔倒。 物理引擎就是负责计算这些的程序。它模拟真实世界的: 重力:物体会往下掉 碰撞:球碰到脚会弹开 摩擦:球在草地上会慢慢停下 关节约束:机器人的膝盖只能在一定范围内弯曲 你可能在游戏中见过物理引擎(比如 Unity 的 PhysX)。RoboCup 用的 MuJoCo(Multi-Joint dynamics with Contact)是一个专门用于机器人和控制研究的高精度物理引擎,由 DeepMind 维护。 仿真步进 (Simulation Step) 物理引擎不是连续运算的,而是离散地推进时间: 1 时刻 0.000s → 计算 → 时刻 0.020s → 计算 → 时刻 0.040s → ... 每一"步"(step),引擎会: 读取所有物体当前的位置、速度 读取施加在物体上的力(比如电机的扭矩) 根据牛顿力学算出 0.020 秒后所有物体的新位置、新速度 这个时间间隔越小,仿真越精确,但计算量越大。RCSSServerMJ 默认每步 20ms,内部还会细分为多个 substep 来提高精度。 ...

April 15, 2026 · 9 min