154 lines
7.1 KiB
Markdown
154 lines
7.1 KiB
Markdown
# 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` |
|
||
| 动作延迟 | 每个环境随机 `0~2` 个控制步 |
|
||
| 低通截止频率 | 腿 `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% | 阶高 `0~0.20 m` |
|
||
| 反向台阶 | 35% | 阶高 `0~0.20 m` |
|
||
| 随机网格 | 27% | 高度 `0~0.20 m` |
|
||
| 随机粗糙面 | 1% | 起伏 `0~0.06 m` |
|
||
| Perlin 噪声 | 1% | 起伏 `0~0.06 m` |
|
||
| 自定义高墙 | 15% | 高度 `0.10~0.35 m` |
|
||
| 金字塔坡面 | 1% | 坡度 `0.052~0.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 间歇推扰:每 `5~10 s` 设置一次 X/Y `[-0.5, 0.5] m/s` 速度扰动;
|
||
- 关节动作延迟:`0~2` 个策略步。
|
||
|
||
旧 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 之间不要直接混用奖励权重、站姿和模型。
|