基础框架#
MotrixLab 是一个机器人强化学习平台,这一节我们会介绍 MotrixLab 的框架设计以及各个组成部分之间的关系。如果您已经熟悉强化学习的内容,可以直接跳转至下一节,了解如何开发自己的训练环境。
MotrixLab 的框架设计#
MotrixLab 采用分层架构设计,将训练环境与训练逻辑进行了清晰拆分:
MotrixLab/
├── motrix_envs/ # 环境层:物理仿真和任务定义
│ ├── basic/ # 基础环境(cartpole、walker等)
│ ├── locomotion/ # 运动环境(GO1机器人等)
│ ├── np/ # NumPy仿真后端框架
│ ├── base.py # 环境基类
│ └── registry.py # 环境注册系统
├── motrix_rl/ # 训练层:RL算法和配置
│ ├── skrl/ # SKRL框架集成(JAX/PyTorch)
│ ├── rslrl/ # RSLRL框架集成(PyTorch)
│ ├── base.py # RL配置基类
│ └── registry.py # RL配置注册系统
└── scripts
├── train.py # 训练入口脚本
├── play.py # 测试入口脚本
└── view.py # 可视化脚本
核心组件架构#
┌─────────────────────────────────────────────────────────────────┐
│ 用户接口层 │
│ train.py │ play.py │ view.py │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 训练算法层 (SKRL / RSLRL) │
│ PPO训练器 │ 网络架构 │ 优化器 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 环境实现层 │
│ 环境配置(EnvCfg) │ 环境实现(Env) │ 奖励函数(Reward) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 物理仿真层 (MotrixSim) │
│ MJCF模型 │ 物理引擎 │ 碰撞检测 │
└─────────────────────────────────────────────────────────────────┘
核心组件详解#
1. 训练环境 (Training Environment)#
位置:环境实现层
训练环境是 MotrixLab 的核心组件,包含三个关键部分:
环境配置 (EnvCfg):定义物理仿真参数(模型文件、时间步长、episode 长度等)和任务特定参数
环境实现 (Env):继承基础环境类,实现具体的任务逻辑、物理仿真交互和终止条件检查
奖励函数 (Reward):在环境的 step 方法中实现,根据当前状态和动作计算奖励值
环境通过装饰器注册到系统中。
2. 奖励函数 (Reward Function)#
位置:配置管理层 + 环境实现层
奖励函数在 MotrixLab 中采用双重结构设计:
配置层面:在配置类中定义奖励权重、奖励组件类型和缩放参数
实现层面:在环境的
_compute_reward方法中根据配置参数计算具体奖励值
这种设计使得奖励函数既可以通过配置文件灵活调整,又能在代码中实现复杂的计算逻辑。
3. 配置参数 (Configuration Parameters)#
位置:配置管理层
配置参数采用分层管理结构:
环境配置 (EnvCfg):控制物理仿真和任务行为,包括仿真参数、重置噪声、时间限制等
训练配置 (RLCfg):控制强化学习算法,包括网络结构、学习率、批次大小、训练步数等
配置类支持继承、参数验证和运行时覆盖,确保参数的合理性和灵活性。
4. 注册系统 (Registry System)#
位置:连接各组件的枢纽
注册系统通过装饰器模式实现组件的自动注册:
环境配置类通过
@registry.envcfg()注册环境实现类通过
@registry.env()注册,支持多后端RL 配置类通过
@rlcfg()注册
注册系统实现了组件的解耦,使得新增环境或修改配置变得简单快捷。
数据流和工作流程#
训练流程概览#
用户命令 → 配置解析 → 环境创建 → 训练循环 → 模型保存
↓
train.py --env cartpole
↓
查找配置类 → 创建环境 → 启动PPO训练 → 保存模型
核心工作流程#
环境定义:在
/motrix_envs/中创建环境配置类和实现类自动注册:通过装饰器将组件注册到系统中
配置加载:命令行启动时,系统自动查找并加载对应的配置
环境创建:工厂模式创建环境实例,支持参数覆盖
训练执行:PPO 算法与环境交互,收集数据并更新策略
结果保存:定期保存检查点和最终模型
配置参数的作用#
配置参数在整个流程中起到关键的连接作用:
环境配置决定物理仿真行为(时间步长、模型文件、噪声等)
奖励配置影响学习信号(奖励权重、计算方式等)
训练配置控制算法行为(网络结构、学习率、批次大小等)
多框架支持#
MotrixLab 的分层设计天然支持多种 RL 框架:
仿真后端:MotrixSim(CPU)
训练框架:
SKRL:支持 JAX 和 PyTorch 后端,支持 GPU 加速
RSLRL:支持 PyTorch 后端,支持 GPU 加速
框架选择:使用
--rllib参数在skrl(默认)和rslrl之间选择
设计优势#
这种架构设计带来了以下核心优势:
模块解耦:环境开发与训练逻辑完全分离
配置灵活:支持分层配置和运行时参数覆盖
扩展性强:通过注册系统轻松添加新组件
多后端兼容:同一环境可使用不同仿真和训练后端
实验友好:配置可保存、比较,确保实验可重现
通过这个框架设计,MotrixLab 为机器人强化学习提供了一个清晰、灵活且易用的开发平台。