# DreamWaQ 使用手册

## 环境切换

通过环境变量 `DREAMWAQ_TERRAIN` 选择地形场景：

| 值 | 场景 | 描述 |
|----|------|------|
| `flat` (默认) | 无限平面 | 学习基础行走 |
| `pyramid` | 10×20 混合地形 | hfield + mesh 楼梯 |
| `flat_stairs` | 2 级 flat+stairs | 简易楼梯测试 |
| `stairs` | 纯楼梯 | stair box 场景 |

```bash
# 金字塔地形训练
DREAMWAQ_TERRAIN=pyramid uv run scripts/train.py --env go1-dreamwaq-walk --rllib rslrl

# 平坦地形训练
uv run scripts/train.py --env go1-dreamwaq-walk --rllib rslrl
```

## 地形生成

```bash
# 完整 10×20 地形（生成 PNG + OBJ + XML）
uv run python3 scripts/gen_dreamwaq_terrain.py

# 仅前 N 个难度级别（测试用）
uv run python3 scripts/gen_dreamwaq_terrain.py --max-level 3

# 仅平坦（不生成楼梯）
uv run python3 scripts/gen_dreamwaq_terrain.py --flat-only
```

## 可视化

```bash
# 查看金字塔地形（随机动作）
uv run scripts/view_dreamwaq.py

# 平坦地形 + 单机器人 + 固定难度
uv run scripts/view_dreamwaq.py --flat --num-envs 1 --level 5

# 持续前进（不站立）
uv run scripts/view_dreamwaq.py --no-stand --vx 0.8
```

## 训练

```bash
# 启动训练
uv run scripts/train.py --env go1-dreamwaq-walk --rllib rslrl

# 指定环境数量
uv run scripts/train.py --env go1-dreamwaq-walk --rllib rslrl --num-envs 4096
```

训练结果保存在 `runs/go1-dreamwaq-walk/rslrl/` 下，TensorBoard 日志自动记录：
- `value_loss`, `surrogate_loss` — 标准 PPO 损失
- `autoenc_loss` — CENet VAE 自编码器损失

```bash
# 查看训练曲线
uv run tensorboard --logdir runs/go1-dreamwaq-walk
```

## Play（评估）

```bash
# 自动发现最新 checkpoint
uv run scripts/play_dreamwaq_rsl.py

# 指定 checkpoint + 命令
uv run scripts/play_dreamwaq_rsl.py --checkpoint runs/go1-dreamwaq-walk/rslrl/.../model_1000.pt --vx 0.5

# 固定地形级别查看
uv run scripts/play_dreamwaq_rsl.py --terrain --level 5 --num-envs 1
```
