Files

154 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# rc_mjlab
基于 [mjlab](https://github.com/mujocolab/mjlab) 的 16DOF 串联轮足机器人强化学习、MuJoCo 验证与策略部署工程。
## 版本定位
当前目录是多个里程碑累积后的工作树,不应整体写成“对应 `v0.8.1`”:
| Tag | 本目录中的主要变化 |
| --- | --- |
| `v0.4.0` | 第一份新 MJCF 与新 mjlab 训练基线(`uni_mjlab(1)` |
| `v0.5.0` | 随机化增强训练版本(`uni_mjlab_new` |
| `v0.6.0` | `best` 比赛训练架构:分轴速度奖励、自适应指令课程和障碍释放课程 |
| `v0.7.0` | 补充后期 `mujoco_sim` 姿态、IK、动力学和 MPC 工具 |
| `v0.8.0` | 补充后期 Sim2Sim、路线检查和比赛 Rough 策略 `model_6800.onnx` |
| `v0.8.1` | 补充导航打点、路线迭代与抽样 PCD 工具 |
后续 ROS 2 真机版本没有把本目录重新定义为新的训练版本。要查看某个阶段的真实代码,请切换对应 Tag;当前训练主体以 `v0.6.0``best` 架构为基础,工具链累计到 `v0.8.1`
## 目录说明
```text
rc_mjlab/
├─ src/robot/ # Robot-Flat/Rough/Crawl 任务、PPO 配置和本地 RSL-RL/HIM 代码
├─ mjcf/ # 机器人、场景与网格资源
├─ mjlab/ # 固定基准并带本地补丁的 mjlab 源码
├─ mujoco_sim/ # 姿态、IK、动力学、MPC 与 GUI 工具
├─ sim2sim/ # ONNX/PT 回放、比赛场景、IK 与路线检查
├─ tools/nav_tools/ # PCD、地图、航点和路线编辑工具
├─ model_rough.pt # 早期 Rough 参考 checkpoint
├─ model_6800.onnx # 比赛最终部署使用的 Rough 策略
├─ pyproject.toml # Python 包和依赖声明
├─ uv.lock # 历史环境的精确锁文件
└─ DEPENDENCIES.md # 上游基准、本地补丁和可选依赖说明
```
`model_6800.onnx` 是最终部署工件,不等于训练代码版本号。训练过程中存在基模、继续训练和 checkpoint 筛选,仅凭该 ONNX 不能恢复完整训练日志。
## 已注册任务
| Task ID | 用途 | 默认训练时长 |
| --- | --- | --- |
| `Robot-Flat-v0` | 平地基础运动 | 20 s/episode |
| `Robot-Rough-v0` | 粗糙地形、台阶、随机网格、高墙和坡面 | 20 s/episode |
| `Robot-Crawl-v0` | 低杆、低姿态和匍匐任务 | 30 s/episode |
任务入口由 [`src/robot/__init__.py`](src/robot/__init__.py) 注册;环境真值见 [`src/robot/config/env_cfgs.py`](src/robot/config/env_cfgs.py)PPO 真值见 [`src/robot/config/rl_cfg.py`](src/robot/config/rl_cfg.py)。
## 当前控制与模型参数
以下参数来自当前工作树源码,不代表所有历史 Tag:
| 项目 | 当前值 |
| --- | --- |
| MuJoCo 物理步长 | `0.005 s`200 Hz |
| 控制降采样 | `decimation = 4` |
| 策略周期 | `0.020 s`50 Hz |
| 默认并行环境 | 2048 |
| 腿部执行器 | 位置控制,`Kp=50.0``Kd=1.5`、力矩上限 `17 Nm` |
| 轮部执行器 | 速度控制,`Kd=1.0`、力矩上限 `17 Nm` |
| 关节速度参考常量 | `13 rad/s`;当前 Builtin actuator 构造未显式传入该常量 |
| 默认站姿 | hip pitch `0.550`、knee `-1.125`、机身高度 `0.42 m` |
| 外展关节动作缩放 | `0.125 rad` |
| 其余腿关节动作缩放 | `0.25 rad` |
| 轮速动作缩放 | `5.0 rad/s` |
| 动作延迟 | 每个环境随机 `02` 个控制步 |
| 低通截止频率 | 腿 `5 Hz`、轮 `15 Hz` |
README 原先写的 `0.002 s × decimation 10`、4096 环境、`Kp=40/Kd=1` 和轮部 `Kd=0.5` 均不对应当前代码,已删除。
## 观测与动作契约
Actor 单步观测为 53 维:
| 观测项 | 维度 |
| --- | ---: |
| 基座角速度 | 3 |
| 投影重力 | 3 |
| 速度/航向指令 | 3 |
| 12 个腿关节相对位置 | 12 |
| 12 个腿关节速度 | 12 |
| 4 个轮关节速度 | 4 |
| 上一步 16 维动作 | 16 |
动作共 16 维:12 个腿关节位置目标和 4 个轮关节速度目标。Critic 在 Actor 观测之外增加基座线速度、轮地接触和高度扫描等特权信息。
## Rough 当前配置摘要
`Robot-Rough-v0` 当前混合八类地形:
| 地形 | 比例 | 当前范围摘要 |
| --- | ---: | --- |
| 平地 | 15% | 8 m × 8 m |
| 正向台阶 | 5% | 阶高 `00.20 m` |
| 反向台阶 | 35% | 阶高 `00.20 m` |
| 随机网格 | 27% | 高度 `00.20 m` |
| 随机粗糙面 | 1% | 起伏 `00.06 m` |
| Perlin 噪声 | 1% | 起伏 `00.06 m` |
| 自定义高墙 | 15% | 高度 `0.100.35 m` |
| 金字塔坡面 | 1% | 坡度 `0.0520.325` |
课程学习从平地、粗糙面、Perlin、坡面和正向台阶开始,随后按训练步数释放随机网格、反向台阶和高墙。同时对 X、Y、Yaw 三个指令轴分别做自适应范围调整。
当前 Rough 奖励使用分轴 `vx/vy/yaw` 跟踪,并启用每步总奖励不低于 0 的截断,而不是旧 README 中的 `track_lin_vel=4.5``track_ang_vel=2.0`。它还包含动作变化率、扭矩/功率、腿轮加速度、关节限位、镜像姿态、静止姿态、接触力和非期望碰撞等约束;精确权重以 `rough_env_cfg()` 为准。
## 当前域随机化边界
基础配置实际启用的主要随机项包括:
- 基座质心三轴偏移:各 `[-0.05, 0.05] m`
- 碰撞几何摩擦:`[0.3, 1.0]`
- 执行器刚度、阻尼缩放:各 `[0.9, 1.1]`log-uniform
- 基座附加质量:`[-1.0, 3.0] kg`
- Rough 间歇推扰:每 `510 s` 设置一次 X/Y `[-0.5, 0.5] m/s` 速度扰动;
- 关节动作延迟:`02` 个策略步。
旧 README 中列出的 encoder bias、持续外力、关节摩擦和力矩上限随机化并非当前 Rough 配置的完整真实状态,因此不再作为“当前已启用项”陈述。历史随机化差异见 [`../../../01_doc/training_evolution.md`](../../../01_doc/training_evolution.md)。
## 环境安装与基本命令
在本目录执行:
```bash
uv sync
uv run train Robot-Flat-v0
uv run train Robot-Rough-v0
uv run train Robot-Crawl-v0
uv run play Robot-Rough-v0
```
GPU、CUDA、MuJoCo development wheel 和驱动要求见 [`DEPENDENCIES.md`](DEPENDENCIES.md)。恢复训练时需要明确 checkpoint/run 来源,不建议仅凭 README 猜测跨实验热启动参数。
## Sim2Sim 与导航工具
```bash
uv run --with-requirements sim2sim/requirements.txt python sim2sim/nav_sim2sim.py
uv run --with-requirements tools/nav_tools/requirements.txt python tools/nav_tools/nav_map_viewer.py
```
- 后期 Sim2Sim 入口和策略边界:[`sim2sim/README.md`](sim2sim/README.md)
- 导航打点与路线数据:[`tools/nav_tools/README.md`](tools/nav_tools/README.md)
- 训练版本演进:[`../../../01_doc/training_evolution.md`](../../../01_doc/training_evolution.md)
- 全项目版本历史:[`../../../01_doc/version_history.md`](../../../01_doc/version_history.md)
## 复现边界
- `uv.lock` 保存依赖解析结果,但仍需要匹配的 NVIDIA 驱动和 CUDA 环境。
- TensorRT engine 属于真机部署环境,本目录以训练代码、PT/ONNX 和仿真验证为主。
- 比赛最终真机工程位于 [`../../real/sim2real_ros2_v3`](../../real/sim2real_ros2_v3)。
- 参数若与本文冲突,以当前 Tag 中的配置源码为准;不同 Tag 之间不要直接混用奖励权重、站姿和模型。