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 行代码: ...

Completed Python · RoboCup 3D · Janus 把客户端感知、世界模型、决策和动作链路整理成队内入门指南。
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 来提高精度。 ...

Completed C++ · MuJoCo · RoboCup 3D 把仿真服务器、通信协议和物理循环梳理成源码阅读路线。
April 15, 2026 · 9 min

深度学习入门:PyTorch零基础到多任务联合微调

前言 该文章是基于我校 校科学技术协会 woc-python组题目个人解答过程的系统性回顾。 项目代码:NJUPT-SAST-Python-WoC-2025 本文主要记录学习和方法迭代的过程,详细代码实现请查阅代码库。 题目简介: 任务背景与目标 本项目旨在探索多任务学习 (Multi-Task Learning) 在计算机视觉中的应用。核心目标是通过联合网络的设计,实现底层视觉(图像重构)与高层视觉(语义理解)两个任务的相互促进 (Mutual Promotion)。 基础任务定义 (Single-Task Baselines) 网络需从零开始搭建与训练,完成以下两个独立任务: 1 2 3 4 5 6 7 Task 1:底层图像恢复 (Low-level Vision) 任务内容:任选一种退化图像修复场景(包括但不限于超分辨率、去噪、去雾、低光增强等)。 评估指标:PSNR 与 SSIM,需在验证集上具有合理表现。 Task 2:高层图像分类 (High-level Vision) 任务内容:基于 CIFAR 数据集的图像分类。 评估指标:Accuracy(最低要求界定为 60%)。 多任务联合优化约束 (Multi-Task Constraints) 在跑通单任务 Baseline 后,需构建多任务联合网络(例如 Task 1 辅助 Task 2,或反之),且必须满足以下硬性约束: 1 2 3 4 1.架构轻量化与一致性:多任务分支需与单任务网络结构保持高度一致,禁止大幅增加参数量。 2.鼓励采用参数共享 (Parameter Sharing) 或引入轻量的交互通信模块。 3.微调策略 (Fine-tuning):在单任务预训练的基础上,通过微调分支头或特征层来实现融合。 4.损失函数创新:鼓励设计具有创新性的互促损失函数 (Mutual-promoting Loss) 来平衡两个任务的梯度。 最终效果: 三种策略准确率对比:超分后再分类显著恢复了低分辨率图像的分类效果。 ...

Completed PyTorch · Computer Vision · Multi-task Learning 完成图像恢复与分类联合训练的个人实践复盘。
February 26, 2026 · 5 min