# 二维步行机器人

二维步行机器人（Walker2D）是 DeepMind Control Suite 中的经典双足行走任务。其目标是训练一个模拟的双足机器人，通过控制其关节力矩，实现站立、行走和奔跑。

```{video} /_static/videos/dm_walker.mp4
:poster: _static/images/poster/dm_walker.jpg
:nocontrols:
:autoplay:
:playsinline:
:muted:
:loop:
:width: 100%
```

## 任务描述

Walker2D 是一个二维平面的双足机器人任务。由多个身体部位组成，拥有多个受控关节，智能体通过向这些关节施加扭矩作为动作，让机器人实现站立平衡、向前行走或快速奔跑。该任务要求协调的双足步态和平衡控制能力。

---

## 动作空间（Action Space）

| 项目     | 详细信息                        |
| -------- | ------------------------------- |
| **类型** | `Box(-1.0, 1.0, (6,), float32)` |
| **维度** | 6                               |

动作对应如下：

| 序号 | 动作含义（施加在关节的力矩） | 最小值 | 最大值 | 对应 XML 中名称 |
| ---: | ---------------------------- | :----: | :----: | :-------------: |
|    0 | 右大腿关节驱动扭矩           |   -1   |   1    |  `right_thigh`  |
|    1 | 右小腿关节驱动扭矩           |   -1   |   1    |   `right_leg`   |
|    2 | 右脚关节驱动扭矩             |   -1   |   1    |  `right_foot`   |
|    3 | 左大腿关节驱动扭矩           |   -1   |   1    |  `left_thigh`   |
|    4 | 左小腿关节驱动扭矩           |   -1   |   1    |   `left_leg`    |
|    5 | 左脚关节驱动扭矩             |   -1   |   1    |   `left_foot`   |

---

## 观察空间

| 项目     | 详细信息                         |
| -------- | -------------------------------- |
| **类型** | `Box(-inf, inf, (17,), float32)` |
| **维度** | 17                               |

Walker2D 环境的观测空间由以下部分组成（按顺序）：

| 部分     | 内容说明                   | 维度 | 备注                 |
| -------- | -------------------------- | ---- | -------------------- |
| **qpos** | 各身体关节与根部的位置信息 | 9    | 包括躯干高度和角度   |
| **qvel** | 各身体关节与根部的速度信息 | 8    | 所有关节及躯干的速度 |

---

## 奖励函数设计

walker 的奖励函数由以下几个部分组成：

### 基础站立奖励

```python
# 高度奖励：保持躯干在目标高度
# 直立奖励：保持躯干直立
# 总奖励 = 高度奖励 + 直立奖励
```

### 移动奖励（行走和奔跑任务）

```python
# 速度奖励：追踪目标前进速度
# 站立奖励：保持躯干在目标高度
# 直立奖励：保持躯干直立
# 总奖励 = 速度奖励 + 站立奖励 + 直立奖励
```

---

## 初始状态

-   重置所有有限关节角度到其允许范围内的随机值
-   保持无限幅度关节默认状态

## Episode 终止条件

-   机器人的状态观测值出现异常数值（NaN）
-   机器人躯干接触地面（跌倒）

---

## 使用指南

### 1. 环境预览

```bash
uv run scripts/view.py --env dm-stander
uv run scripts/view.py --env dm-walker
uv run scripts/view.py --env dm-runner
```

### 2. 开始训练

```bash
uv run scripts/train.py --env dm-stander
uv run scripts/train.py --env dm-walker
uv run scripts/train.py --env dm-runner
```

### 3. 查看训练进度

```bash
uv run tensorboard --logdir runs/dm-walker
```

### 4. 测试训练结果

```bash
uv run scripts/play.py --env dm-stander
uv run scripts/play.py --env dm-walker
uv run scripts/play.py --env dm-runner
```

---

## 预期训练结果

### 站立任务 (dm-stander)

1. 躯干高度保持在 1.0-1.4m 范围
2. 躯干直立角度偏差小于 15 度
3. 能够稳定站立不倒

### 行走任务 (dm-walker)

1. 实际行走速度接近 1.0 m/s
2. 步态协调，无明显摔倒
3. 能够持续稳定行走

### 奔跑任务 (dm-runner)

1. 奔跑速度达到 4.0-5.0 m/s
2. 出现飞行相（双脚同时离地）
3. 步态协调稳定
