chore: release v0.0.1

This commit is contained in:
motphys-developers
2025-11-20 08:57:48 +00:00
commit 5133830b5a
105 changed files with 8789 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
# 倒立摆训练示例
倒立摆CartPole是强化学习中的经典控制任务目标是通过控制小车左右移动来保持杆子平衡。
![cartpole](/_static/images/poster/cartpole.jpg)
## 任务描述
- **状态空间**:小车位置、小车速度、杆子角度、杆子角速度
- **动作空间**:向左或向右施加力
- **奖励函数**:每一步保持杆子不倒下获得+1 奖励
- **终止条件**:杆子角度超过 ±15 度或 episode 长度超过 10 秒
## 快速开始
### 1. 环境预览
```bash
uv run scripts/view.py --env cartpole
```
### 2. 开始训练
```bash
# 使用默认参数训练
uv run scripts/train.py --env cartpole
# 自定义环境数量
uv run scripts/train.py --env cartpole --num-envs 1024
# 启用渲染(训练时可视化)
uv run scripts/train.py --env cartpole --render
```
### 3. 查看训练进度
```bash
uv run tensorboard --logdir runs/cartpole
```
### 4. 测试训练结果
```bash
# 自动寻找最佳策略测试(推荐)
uv run scripts/play.py --env cartpole
# 手动指定策略文件测试
uv run scripts/play.py --env cartpole --policy runs/cartpole/nn/best_agent.pickle
```
> **提示**:系统会自动在 `runs/cartpole/` 目录下寻找最新、最佳的策略文件进行测试。您也可以通过 `--policy` 参数手动指定特定的策略文件。
## 配置参数
倒立摆环境的主要配置参数:
```python
@dataclass
class CartPoleEnvCfg(EnvCfg):
model_file: str = "path/to/inverted_pendulum.xml" # MJCF模型文件
reset_noise_scale: float = 0.01 # 重置噪声
max_episode_seconds: float = 10.0 # 最大episode长度
```
训练配置参数:
```python
@dataclass
class CartPoleRLCfg(BaseRLCfg):
num_envs: int = 2048 # 并行环境数量
learning_rate: float = 3e-4 # 学习率
batch_size: int = 2048 # 批大小
max_epochs: int = 500 # 最大训练轮数
```
## 自定义训练
您可以通过命令行参数覆盖默认配置:
```bash
uv run scripts/train.py --env cartpole \
--num-envs 1024 \
--train-backend jax \
--sim-backend np
```
## 预期结果
- 杆子角度大部分时间保持在 ±5 度以内
- 小车位移范围适中
## 故障排除
如果训练效果不佳,可以尝试:
1. 调整学习率(尝试 1e-4 到 1e-3
2. 增加环境数量(更多并行训练)
3. 调整奖励函数权重
4. 检查物理参数设置是否合理

View File

@@ -0,0 +1,102 @@
# 二维步行机器人训练示例
二维步行机器人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 是一个二维平面的双足机器人,具有多个关节和执行器:
- **状态空间**:包括机器人各部位的旋转角度、角速度、躯干高度和速度等
- **动作空间**:控制各个关节的力矩
- **奖励函数**:主要由保持站立、前进速度等组成
- **终止条件**:机器人摔倒或关节达到极限位置
### 三种任务模式
1. **dm-stander**: 静止站立任务 (move_speed = 0.0)
```bash
uv run scripts/train.py --env dm-stander
```
2. **dm-walker**: 行走任务 (move_speed = 1.0)
```bash
uv run scripts/train.py --env dm-walker
```
3. **dm-runner**: 奔跑任务 (move_speed = 5.0)
```bash
uv run scripts/train.py --env dm-runner
```
## 配置参数
### 环境配置
```python
@dataclass
class WalkerEnvCfg(EnvCfg):
model_file: str = "walker.xml" # MJCF模型文件
max_episode_seconds: float = 25.0 # 最大episode长度
sim_dt: float = 0.0125 # 仿真时间步
ctrl_dt: float = 0.025 # 控制时间步
move_speed: float = 1.0 # 目标移动速度
stand_height: float = 1.2 # 目标站立高度
```
### 训练配置
```python
@dataclass
class WalkerRLCfg(BaseRLCfg):
num_envs: int = 512 # 并行环境数量
learning_rate: float = 3e-4 # 学习率
batch_size: int = 512 # 批大小
max_epochs: int = 1000 # 最大训练轮数
```
## 奖励函数设计
Walker2D 的奖励函数由以下几个部分组成:
### 基础站立奖励
```python
# 高度奖励:保持躯干在目标高度
# 直立奖励:保持躯干直立
```
### 移动奖励(行走和奔跑任务)
```python
# 速度奖励:追踪目标速度
# 总奖励 = 站立奖励 * 移动权重
```
## 预期结果
1. **dm-stander**
- 躯干高度保持在 1.0-1.4m 范围
- 躯干直立角度偏差小于 15 度
2. **dm-walker**
- 实际行走速度接近 1.0 m/s
- 步态协调,无明显摔倒
3. **dm-runner**
- 奔跑速度达到 4.0-5.0 m/s
- 出现飞行相(双脚同时离地)

View File

@@ -0,0 +1,139 @@
# Unitree GO1 机器人行走训练示例
Unitree GO1 是一个四足机器人平台,本示例展示了如何训练 GO1 在平坦地形上实现稳定的步态行走。
```{video} /_static/videos/go1_walk.mp4
:poster: _static/images/poster/go1_walk.jpg
:nocontrols:
:autoplay:
:playsinline:
:muted:
:loop:
:width: 100%
```
## 任务描述
GO1 四足机器人具有 12 个自由度(每条腿 3 个关节),需要通过深度强化学习学习协调的步态控制:
- **状态空间**48 维,包含机器人线速度、角速度、姿态、关节角度、关节速度、动作和命令等
- **动作空间**12 维,控制各个关节的目标位置(通过 PD 控制器转换为力矩)
- **奖励函数**:复合奖励,包含速度跟踪、姿态稳定、能量效率等多个组件
- **终止条件**:机器人躯干接触地面或其他不稳定状态
### 训练任务
```bash
uv run scripts/train.py --env go1-flat-terrain-walk
```
## 配置参数
### 环境配置
```python
@dataclass
class Go1WalkNpEnvCfg(EnvCfg):
max_episode_seconds: float = 20.0 # 最大episode长度
model_file: str = "scene_motor_actuator.xml"
sim_dt: float = 0.01 # 仿真时间步
ctrl_dt: float = 0.01 # 控制时间步
```
### 控制配置
```python
@dataclass
class ControlConfig:
stiffness = 80 # PD 控制器刚度 [N*m/rad]
damping = 1 # PD 控制器阻尼 [N*m*s/rad]
action_scale = 0.05 # 动作缩放因子
```
### 初始关节角度
```python
default_joint_angles = {
"FL_hip": 0.0, # 前左髋关节
"RL_hip": 0.0, # 后左髋关节
"FR_hip": -0.0, # 前右髋关节
"RR_hip": -0.0, # 后右髋关节
"FL_thigh": 0.9, # 前左大腿
"RL_thigh": 0.9, # 后左大腿
"FR_thigh": 0.9, # 前右大腿
"RR_thigh": 0.9, # 后右大腿
"FL_calf": -1.8, # 前左小腿
"RL_calf": -1.8, # 后左小腿
"FR_calf": -1.8, # 前右小腿
"RR_calf": -1.8, # 后右小腿
}
```
## 奖励函数设计
GO1 的奖励函数是一个复杂的复合函数,包含多个组件:
### 主要奖励组件
```python
reward_config.scales = {
"tracking_lin_vel": 1.0, # 线速度跟踪奖励
"tracking_ang_vel": 0.5, # 角速度跟踪奖励
"feet_air_time": 1.0, # 足部空中时间奖励
"lin_vel_z": -2.0, # Z轴线速度惩罚
"ang_vel_xy": -0.05, # XY轴角速度惩罚
"orientation": -0.0, # 姿态偏离惩罚
"torques": -0.00001, # 力矩消耗惩罚
"dof_acc": -2.5e-7, # 关节加速度惩罚
"action_rate": -0.001, # 动作变化率惩罚
"hip_pos": -1, # 髋关节位置惩罚
"calf_pos": -0.3, # 腿关节位置惩罚
}
```
### 关键奖励函数
#### 速度跟踪奖励
```python
# 跟踪线速度命令xy平面
def _reward_tracking_lin_vel(self, data, commands):
# 跟踪角速度命令(偏航)
def _reward_tracking_ang_vel(self, data, commands):
```
#### 足部空中时间奖励
```python
def _reward_feet_air_time(self, commands, info):
```
## 观察空间构成
GO1 的观察空间为 48 维,包含以下信息:
```python
obs = np.hstack([
noisy_linvel, # 3维局部坐标系线速度
noisy_gyro, # 3维陀螺仪数据
local_gravity, # 3维局部重力方向
noisy_joint_angle, # 12维关节角度相对于默认值
noisy_joint_vel, # 12维关节速度
last_actions, # 12维上一帧动作
command, # 3维速度命令 [vx, vy, vyaw]
])
```
## 运动速度命令生成
训练过程中随机生成速度命令,确保智能体能够跟踪不同的移动速度:
```python
def resample_commands(self, num_envs: int):
```
## 预期训练结果
1. 稳定的四足步态
2. 良好的速度跟踪