[release] 规范 ROS 2 三代目录并校准训练说明
This commit is contained in:
@@ -1,234 +1,153 @@
|
||||
# rc_mjlab
|
||||
|
||||
基于 [mjlab](https://github.com/google-deepmind/mjlab) 框架的四轮腿混合机器人强化学习训练与部署部署项目,面向机器人竞赛场景(如越障、匍匐、斜坡、台阶等复合任务)。
|
||||
基于 [mjlab](https://github.com/mujocolab/mjlab) 的 16DOF 串联轮足机器人强化学习、MuJoCo 验证与策略部署工程。
|
||||
|
||||
> 当前目录对应 `v0.8.1`:保留比赛训练架构、后期 MuJoCo/Sim2Sim 和比赛最终 Rough 策略,并补充导航地图、打点工具、路线迭代与抽样 PCD。`model_rough.pt` 仍作为早期参考权重保留。
|
||||
## 版本定位
|
||||
|
||||
---
|
||||
当前目录是多个里程碑累积后的工作树,不应整体写成“对应 `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 工具 |
|
||||
|
||||
本项目针对一台 **4 腿 × 3 关节 + 4 驱动轮(轮腿混合)** 的移动机器人,在 MuJoCo 物理引擎中利用 PPO 算法进行多任务运动控制策略训练。
|
||||
后续 ROS 2 真机版本没有把本目录重新定义为新的训练版本。要查看某个阶段的真实代码,请切换对应 Tag;当前训练主体以 `v0.6.0` 的 `best` 架构为基础,工具链累计到 `v0.8.1`。
|
||||
|
||||
系统设计特点包括:
|
||||
1. **高保真动力学步进**:物理仿真计算步长设为 **`2ms` (0.002s)**,为碰撞、地面力学传递提供极高的解算频宽与稳定性。
|
||||
2. **50Hz 控制决策循环**:通过在环境中设置 `decimation = 10`,策略决策周期为 `20ms` ($0.002\text{s} \times 10 = 0.02\text{s}$),即控制决策频率为 **`50Hz`**,完全对齐真机控制周期。
|
||||
3. **混合滤波执行器**:
|
||||
- 腿部 12 个位置控制关节采用位置 PD 伺服($K_p=40, K_d=1$),并叠加截止频率为 **`5Hz`** 的低通滤波器进行动作平滑,减小高频机械抖动。
|
||||
- 轮部 4 个速度驱动关节采用阻尼速度伺服($K_d=0.5$),叠加截止频率为 **`15Hz`** 的低通速度滤波器,保证转速响应的灵敏度。
|
||||
4. **大规模并行加速**:利用 GPU 并行(通过 Warp 和 MuJoCo GPU 物理管线),支持最多 $4096$ 环境同时训练,并包含对动作变化率、关节加速度的惩罚项以平抑噪声。
|
||||
## 目录说明
|
||||
|
||||
---
|
||||
|
||||
## 📦 项目结构
|
||||
|
||||
```
|
||||
```text
|
||||
rc_mjlab/
|
||||
├── src/robot/ # RL 训练任务包(主体代码)
|
||||
│ ├── __init__.py # 任务注册(Robot-Flat-v0 / Robot-Rough-v0 / Robot-Crawl-v0)
|
||||
│ ├── robot_cfg.py # 机器人物理参数(PD 增益、执行器上限、碰撞属性)
|
||||
│ ├── config/
|
||||
│ │ ├── env_cfgs.py # 三套环境完整配置(观测、奖励、事件、地形、终止条件)
|
||||
│ │ └── rl_cfg.py # PPO 超参数(网络结构、学习率、折扣因子等)
|
||||
│ ├── mdp/
|
||||
│ │ ├── rewards.py # 自定义奖励函数(速度追踪、姿态约束、接触、越障反射惩罚等)
|
||||
│ │ ├── curriculums.py # 地形关卡课程(严格速度约束版)+ 自适应速度范围
|
||||
│ │ ├── lowpass_actions.py # 低通滤波动作包装(腿 5 Hz / 轮 15 Hz IIR 滤波)
|
||||
│ │ ├── disturbances.py # 持续外力扰动(一阶低通滤波平滑随机外力/扭矩)
|
||||
│ │ ├── mode_command.py # 离散步态模式命令(保留扩展用)
|
||||
│ │ └── only_positive_rewards.py # HIMLoco 风格:每步总奖励截断为 ≥ 0,防止消极逃避
|
||||
│ └── terrains/
|
||||
│ └── competition_terrains.py # 竞赛自定义地形(高墙障碍、低杆障碍)
|
||||
├── sim2sim/ # Sim2Sim 物理部署与高精度交互回放工具
|
||||
│ ├── nav_sim2sim.py # 主程序:2D Pygame 交互面板 + 全自动多地形导航追踪
|
||||
│ ├── nav_route_sim2sim_check.py # ONNX 策略批量路线检查
|
||||
│ ├── ik_slalom_sim2sim.py # 纯 IK、路径跟踪与绕桩验证
|
||||
│ ├── ik_compensation_sweep.py # IK 补偿参数扫描
|
||||
│ ├── export_onnx.py # PT actor 导出与 ONNX 一致性检查
|
||||
│ ├── sim2sim.py # 简易版键盘调试工具
|
||||
│ ├── interface/
|
||||
│ │ └── mujoco_io.py # MuJoCo 输入输出与传感器、低通滤波器接口
|
||||
│ ├── tools/
|
||||
│ │ └── math_utils.py # 姿态重力等数学转换
|
||||
│ ├── policy/ # 保存的 pt 策略权重
|
||||
│ └── terrain/
|
||||
│ └── scene_terrain.xml # 完整越障比赛场地的物理 XML 定义
|
||||
├── mjcf/
|
||||
│ ├── wheelleg.xml # 机器人 MuJoCo 模型(含网格引用)
|
||||
│ ├── scene.xml # mjlab 场景入口文件
|
||||
│ └── meshes/ # STL/OBJ 碰撞与外观网格
|
||||
├── mujoco_sim/ # 姿态、IK、动力学和 MPC 独立工具
|
||||
├── tools/nav_tools/ # 地图/PCD/航点编辑、路线检查与比赛路线数据
|
||||
├── model_rough.pt # 早期 Rough 参考 checkpoint
|
||||
├── model_6800.onnx # 比赛最终 Rough 策略
|
||||
├── pyproject.toml # 项目依赖(uv 管理,含清华镜像源加速)
|
||||
└── uv.lock # 精确依赖锁定文件
|
||||
├─ 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 不能恢复完整训练日志。
|
||||
|
||||
## 🚀 常用命令
|
||||
## 已注册任务
|
||||
|
||||
### 1. 训练与回放
|
||||
| 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
|
||||
# 运行平地基础训练 (Robot-Flat-v0)
|
||||
uv sync
|
||||
|
||||
uv run train Robot-Flat-v0
|
||||
|
||||
# 运行多障碍复杂地形训练 (Robot-Rough-v0),可从 Flat 的Checkpoint热启动
|
||||
uv run train Robot-Rough-v0 --agent.resume True --agent.experiment-name robot_flat
|
||||
|
||||
# 运行爬坡与匍匐限高任务 (Robot-Crawl-v0)
|
||||
uv run train Robot-Rough-v0
|
||||
uv run train Robot-Crawl-v0
|
||||
|
||||
# 使用默认 20 个并行环境回放最新 checkpoint 效果
|
||||
uv run play Robot-Rough-v0
|
||||
```
|
||||
|
||||
### 2. 交互式 Sim2Sim 自动导航仪表盘
|
||||
GPU、CUDA、MuJoCo development wheel 和驱动要求见 [`DEPENDENCIES.md`](DEPENDENCIES.md)。恢复训练时需要明确 checkpoint/run 来源,不建议仅凭 README 猜测跨实验热启动参数。
|
||||
|
||||
我们提供了一个强大的 GUI 交互和全自动障碍赛追踪平台,位于 `sim2sim` 目录下:
|
||||
## Sim2Sim 与导航工具
|
||||
|
||||
```bash
|
||||
# 启动 2D 交互导航平台
|
||||
cd sim2sim
|
||||
uv run python nav_sim2sim.py
|
||||
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)。
|
||||
- 后期 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)
|
||||
|
||||
导航打点工具、路线快照和抽样点云说明见 [`tools/nav_tools/README.md`](tools/nav_tools/README.md)。
|
||||
## 复现边界
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ 交互式自动导航平台 (sim2sim/nav_sim2sim.py)
|
||||
|
||||
该平台包含一个 **Pygame 2D HUD 监控面板** 和一个 **实时 MuJoCo 3D 渲染器**,支持对仿真参数和任务执行的精细控制。
|
||||
|
||||
### 1. 按钮面板分区与布局
|
||||
|
||||
面板在垂直方向进行了高紧凑性排版,避免控件重叠,并在底端留有安全间距:
|
||||
* **【预设任务列表】**(按物理穿越顺序排列):
|
||||
- **S形绕杆 (Slalom)**:绕过红蓝两色障碍杆路径。
|
||||
- **限高下蹲 (Crawl)**:降低机身高度穿过低杆障碍。
|
||||
- **砂砾碎石 (Gravel)**:平稳低速通过多颗粒非结构碎石坑。
|
||||
- **高墙越障 (Wall)**:高速度冲向障碍高墙,利用前轮攀爬反射爬越。
|
||||
- **台阶攀爬 (Stairs)**:攀越分段式台阶。
|
||||
- **斜坡木桥 (Bridge)**:穿过A坡并稳健从B坡落地。
|
||||
- **障碍赛大满贯 (Grand)**:**科技紫**圆角高亮按钮。点击后,机器人将以**顺时针**方向,自动、连贯且闭环地一次性穿越上述全部 6 个核心比赛障碍,并在木桥落地后,通过安全通道直角返航至起终点。
|
||||
* **【系统与视图控制】**:
|
||||
- **清除与停止 (Stop)**:一键紧急停止并重置当前目标航点。
|
||||
- **视角居中 (Center)**:一键锁定相机随机器人机身移动。
|
||||
- **物理流速三联排 (倍速- / 标准 / 倍速+)**:在不破坏物理计算数值稳定性的前提下,实现对仿真总体时间的平滑加速与慢放(支持 `0.2x` ~ `5.0x`,可随时点击“标准”一键归位 `1.0x`)。
|
||||
* **【目标微调与命令终端】**:
|
||||
- 拥有高精度航点微调发令键。
|
||||
- 底部命令行支持输入 `speed <倍率>` 更改仿真速度,或者输入 `grand` 直接开启大满贯。
|
||||
|
||||
---
|
||||
|
||||
## 📊 机器人系统规格参数
|
||||
|
||||
### 1. 机器人本体参数
|
||||
|
||||
| 参数项 | 基准数值 | 说明 |
|
||||
|---|---|---|
|
||||
| **物理步长 ($dt_{physics}$)** | `0.002s` (2ms) | 底层 MuJoCo 求解器步长,物理精度极高 |
|
||||
| **控制决策频率 ($Freq_{ctrl}$)** | `50Hz` (20ms) | $decimation = 10$,环境每 10 个子步进行一次交互决策 |
|
||||
| **单轮仿真时长** | `30.0s` | 最大决策步数上限为 $30.0 / 0.02 = 1500$ 步 |
|
||||
| **腿部控制** | 位置 PD 伺服 | 目标关节角限幅 ±0.25 rad,叠加 **5Hz** 低通滤波器 |
|
||||
| **轮部控制** | 阻尼速度伺服 | 目标速度限幅 ±10.0 rad/s,叠加 **15Hz** 低通滤波器 |
|
||||
| **结构形式** | 4腿 × 3关节 + 4轮 | 腿:hip abduction, hip pitch, knee;轮半径 0.1m,左右轮距 0.32m |
|
||||
| **关节扭矩上限** | 17.0 Nm | 关节最大输出力矩(训练时含 80%~100% 随机缩放) |
|
||||
| **最大关节角速度** | 13.0 rad/s | 关节最大运动速度限制 |
|
||||
|
||||
### 2. 状态观测空间 (Actor Obs, 53维)
|
||||
|
||||
网络输入包含 $6$ 步历史数据,并在训练时注入均匀高斯噪声以提升泛化能力:
|
||||
|
||||
| 观测项目 | 维度 | 缩放比例 | 噪声范围 |
|
||||
|---|---|---|---|
|
||||
| 基座角速度 (ang_vel) | 3 | 0.25 | $[-0.2, 0.2]$ rad/s |
|
||||
| 投影重力向量 (projected_gravity) | 3 | 1.0 | $[-0.05, 0.05]$ |
|
||||
| 指令速度 (vx, vy, wz/heading) | 3 | 1.0 | — |
|
||||
| 腿部关节相对角度 (joint_pos_rel) | 12 | 1.0 | $[-0.01, 0.01]$ rad |
|
||||
| 腿部关节角速度 (joint_vel) | 12 | 0.05 | $[-1.5, 1.5]$ rad/s |
|
||||
| 轮子角速度 (wheel_vel) | 4 | 0.05 | $[-1.0, 1.0]$ rad/s |
|
||||
| 上一步动作缓存 (last_actions) | 16 | 1.0 | — |
|
||||
|
||||
> **Critic 附加观测**:包含高精度基座物理线速度、轮地实际接触状态、以及 $1.6\text{m} \times 1.0\text{m}$ 分辨率为 $0.08\text{m}$ 的高度雷达扫描网格,提供大范围越障感知。
|
||||
|
||||
---
|
||||
|
||||
## ⚖️ 奖惩体系设计 (Robot-Rough-v0)
|
||||
|
||||
复杂地形任务采用 **“仅正奖励截断”** 机制(即每步累加的总奖励若小于0则强制截断为0),防止机器人在困难关卡早期选择倒下自杀来规避负惩罚。
|
||||
|
||||
### 1. 运动追踪与状态惩罚
|
||||
|
||||
| 奖励/惩罚项 | 权重 (Weight) | 适用函数 / 物理意义 |
|
||||
|---|---|---|
|
||||
| **track_lin_vel** | `+4.5` | L1 范数水平线速度跟踪奖励,平缓高速漂移 |
|
||||
| **track_ang_vel** | `+2.0` | 偏航角速度指数跟踪奖励 |
|
||||
| **stand_still** | `-2.0` | 当速度指令为 0 时,严厉惩罚关节多余晃动,保持稳立 |
|
||||
| **joint_pos_penalty** | `-0.8` | 当速度指令为 0 时,惩罚关节角度偏离初始对齐姿态,维持高刚度 |
|
||||
| **roll_penalty** | `-1.0` | 机身横滚角 (Roll) 倾斜惩罚,抑制左右倾倒抖动 |
|
||||
| **pitch_penalty** | `-1.5` | 俯仰角 (Pitch) 死区惩罚,限制仰角不超过 29 度,抑制越障瞬间前轮翘头和后翻 |
|
||||
| **base_height_l2** | `-0.5` | 机身高度偏离 0.36m 惩罚(基于高度扫描均值,允许自适应高低) |
|
||||
|
||||
### 2. 能量正则与平滑惩罚 (平抑高频抖动)
|
||||
|
||||
| 奖励/惩罚项 | 权重 (Weight) | 适用函数 / 物理意义 |
|
||||
|---|---|---|
|
||||
| **action_rate_curriculum** | `-0.005` | 动作变化率 L2 惩罚,迫使连续两个决策步的输出动作变化平滑 |
|
||||
| **joint_torques** | `-1.0e-4` | 关节输出扭矩 L2 正则,降低电机总发热和冲击性载荷 |
|
||||
| **leg_joint_acc_l2** | `-2.5e-7` | 限制腿部 12 关节**角加速度**,直接抑制关节高频电磁和机械震荡 |
|
||||
| **wheel_joint_acc_l2** | `-2.5e-9` | 限制 4 个驱动轮的**角加速度**,平缓轮速切换,降低打滑振荡 |
|
||||
| **joint_pos_limits** | `-0.2` | 极度接近关节极限限位阻挡时的硬惩罚 |
|
||||
|
||||
### 3. 接触反射与安全约束
|
||||
|
||||
| 奖励/惩罚项 | 权重 (Weight) | 适用函数 / 物理意义 |
|
||||
|---|---|---|
|
||||
| **feet_contact_without_cmd** | `+0.1` | 当速度指令为 0 时,鼓励四轮保持稳定接地的正向收益 |
|
||||
| **body_collision** | `-1.0` | 腿部连杆(大腿、小腿)触地碰撞惩罚,迫使抬腿跨越障碍 |
|
||||
| **base_collision** | `-5.0` | 机身/底盘硬撞障碍物时的严厉惩罚,逼迫机器人学会抬起前轮支撑攀爬 |
|
||||
| **is_terminated** | `0.0` | 关闭越障任务的提早终止,允许机器人跌倒后自行挣扎起立,提高生存极限 |
|
||||
|
||||
---
|
||||
|
||||
## 🌀 域随机化 (Domain Randomization)
|
||||
|
||||
为了使训练的控制策略具有卓越的零样本真机部署能力,在环境重置及仿真运行中注入了高强度的域随机化参数:
|
||||
|
||||
| 随机化项目 | 扰动操作 | 随机范围 |
|
||||
|---|---|---|
|
||||
| **机身质心偏移 (base_com)** | 加法 | X, Y, Z 三轴分别随机偏置 `[-0.05, 0.05]` 米 |
|
||||
| **角度传感器零偏 (encoder_bias)** | 加法 | 关节传感器绝对偏置 `[-0.015, 0.015]` rad (约 $\pm 0.85^{\circ}$) |
|
||||
| **几何表面摩擦力 (body_friction)** | 绝对值 | 地面及机器人碰撞几何体摩擦力在 `[0.3, 1.2]` 均匀随机 |
|
||||
| **关节摩擦阻尼 (joint_friction)** | 乘法 | 所有旋转轴关节运动阻尼摩擦在原值的 `[0.7, 1.3]` 倍间随机 |
|
||||
| **关节传动刚度 (actuator_stiffness)** | 乘法 | Kp 刚度系数在原值的 `[0.9, 1.1]` 对数均匀范围内随机缩放 |
|
||||
| **关节传动阻尼 (actuator_damping)** | 乘法 | Kd 阻尼系数在原值的 `[0.9, 1.1]` 对数均匀范围内随机缩放 |
|
||||
| **力矩输出上限 (actuator_effort_limit)**| 乘法 | 最大输出扭矩极限随机在原值的 `[0.8, 1.0]` 倍均匀缩放 |
|
||||
| **负载质量 (payload_mass)** | 加法 | 在机身处添加载荷质量,扰动范围在 `[-1.0, 3.0]` kg |
|
||||
| **瞬时侧向推撞 (push_robot)** | 脉冲 | 每隔 `[5.0, 10.0]` 秒,瞬间施加 X/Y 轴 `[-0.5, 0.5]` m/s 冲击速度 |
|
||||
| **一阶低通持续风阻 (continuous_disturbance)** | 连续 | 机身持续叠加随机外力(±15N)与力矩(±10Nm),低通周期 0.5s |
|
||||
|
||||
---
|
||||
|
||||
## 🏆 多地形关卡难度控制 (Robot-Rough-v0)
|
||||
|
||||
共有 8 种子地形按照比例混合,通过自适应升级距离控制关卡难度的推进:
|
||||
|
||||
| 地形名称 | 混合比例 (Proportion) | 最大配置难度 |
|
||||
|---|---|---|
|
||||
| **平地 (flat)** | `5%` | 作为初始安定性恢复区域 |
|
||||
| **金字塔台阶 (pyramid_stairs)** | `25%` | 最大阶梯高度上限 `0.30` 米,级宽 0.30m |
|
||||
| **倒金字塔台阶 (pyramid_stairs_inv)** | `10%` | 最大倒台阶高度上限 `0.30` 米,级宽 0.30m |
|
||||
| **随机高度网格 (random_grid)** | `10%` | 最大网格方块起伏上限 `0.30` 米 |
|
||||
| **随机粗糙地形 (random_rough)** | `5%` | 地表最大颗粒随机噪声起伏 `0.06` 米 |
|
||||
| **柏林噪声地形 (perlin_noise)** | `5%` | 大范围高平缓起伏最大高度 `0.06` 米 |
|
||||
| **越障高墙地形 (rc_wall)** | `25%` | 自定义跳跃垂直高墙,最大墙高上限 `0.45` 米 |
|
||||
| **平台斜坡地形 (sloped_terrain)** | `15%` | 最大坡度限制 `0.325` (约 $18.5^{\circ}$) |
|
||||
|
||||
> **地形升级规则**:当机器人朝指令方向行进距离超过当前地块的一半(4米),且实际行进距离大于速度指令对应期望距离的 45% 时,该环境关卡等级 +1。
|
||||
> **地形降级规则**:当指令速度大于 0.1m/s 但实际行进距离小于期望距离的 25%,或者实际移动不足 2.0米时,环境难度等级 -1。
|
||||
- `uv.lock` 保存依赖解析结果,但仍需要匹配的 NVIDIA 驱动和 CUDA 环境。
|
||||
- TensorRT engine 属于真机部署环境,本目录以训练代码、PT/ONNX 和仿真验证为主。
|
||||
- 比赛最终真机工程位于 [`../../real/sim2real_ros2_v3`](../../real/sim2real_ros2_v3)。
|
||||
- 参数若与本文冲突,以当前 Tag 中的配置源码为准;不同 Tag 之间不要直接混用奖励权重、站姿和模型。
|
||||
|
||||
Reference in New Issue
Block a user