跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

四足机器人强化学习项目架构详解

综述由AI生成基于强化学习的四足机器人控制训练系统。项目包含 Isaac Gym 物理仿真、Legged Gym 环境定义及 RSL-RL 算法实现三大核心模块。支持多种机器人模型与地形随机化,采用 PPO 算法进行策略训练,并实现了从仿真到实物的迁移学习。文中详细解析了执行器网络的作用及其与传统 PD 控制器的区别,展示了完整的训练流程与数据流交互。

灵魂伴侣发布于 2026/4/6更新于 2026/5/2224 浏览

四足机器人强化学习项目架构详解

一、项目总览

1.1 项目简介

本项目是一个基于强化学习(Reinforcement Learning, RL)的四足机器人控制训练系统,主要用于训练四足机器狗(如 GO2、ANYmal 等)在复杂地形上行走、翻越障碍物等任务。项目采用 NVIDIA Isaac Gym 作为物理仿真环境,使用 PPO(Proximal Policy Optimization)算法进行策略训练,实现了从仿真到实物的迁移学习(Sim-to-Real Transfer)。

1.2 项目目标

  • 主要任务:训练四足机器人在指定赛道上行走,使其能够翻越多种地形(包括梅花桩等复杂障碍)
  • 技术特点:
    • GPU 加速的并行仿真环境
    • 支持多种四足机器人模型(GO2、ANYmal、A1、Cassie 等)
    • 完整的强化学习训练流程
    • 支持自定义奖励函数和观测空间
    • 支持地形随机化和域随机化(Domain Randomization)

1.3 项目架构

项目由三个核心模块组成:

  1. isaacgym - NVIDIA Isaac Gym 物理仿真引擎
  2. legged_gym - 四足机器人环境定义和训练脚本
  3. rsl_rl - 强化学习算法实现(PPO)

二、isaacgym 文件夹详解

2.1 文件夹作用

isaacgym 是 NVIDIA 提供的 GPU 加速物理仿真引擎,为整个项目提供:

  • 物理仿真环境:基于 PhysX 的物理引擎,支持高精度刚体动力学仿真
  • 并行仿真能力:可在 GPU 上同时运行数千个仿真环境
  • Python API:提供 Python 接口,方便与 PyTorch 等深度学习框架集成
  • 渲染功能:支持实时可视化训练过程

2.2 主要文件结构

2.2.1 isaacgym/python/isaacgym/ - Python 包核心文件

__init__.py

  • 作用:包初始化文件,导入 gymapi 模块
  • 功能:使 isaacgym 可以作为 Python 包被导入

gymapi.py

  • 作用:Isaac Gym 的主要 API 接口封装
  • 功能:
    • 动态加载对应 Python 版本的 C++ 绑定库
    • 提供仿真环境创建、机器人加载、物理参数设置等核心 API
    • 管理仿真场景、Actor、传感器等对象

gymdeps.py

  • 作用:依赖管理模块
  • 功能:
    • 确保 PyTorch 在 isaacgym 模块之后导入(避免库冲突)
    • 预加载必要的系统库(如 PhysX、USD 等)
    • 处理平台相关的库路径问题

gymtorch.py

  • 作用:PyTorch 与 Isaac Gym 的互操作模块
  • 功能:
    • 提供 Tensor 包装器,实现 GPU 内存共享
    • 允许直接在 PyTorch 中访问仿真数据(位置、速度、力等)
    • 编译 C++ 扩展模块实现零拷贝数据传输

gymutil.py

  • 作用:工具函数集合
  • 功能:
    • 解析命令行参数(设备选择、渲染模式等)
    • 设备字符串解析(如 'cuda:0')
    • 提供常用的辅助函数

rlgpu.py

  • 作用:RLGPU 模块加载器
  • 功能:
    • 动态加载对应 Python 版本的 RLGPU 库(rlgpu_36.so, rlgpu_37.so, rlgpu_38.so)
    • 提供强化学习相关的 GPU 加速功能

terrain_utils.py

  • 作用:地形生成工具
  • 功能:
    • 提供各种地形生成函数(平面、粗糙地形、台阶等)
    • 支持程序化地形生成
    • 地形高度图处理

torch_utils.py

  • 作用:PyTorch 工具函数
  • 功能:
    • 提供与 PyTorch 相关的辅助函数
    • Tensor 操作工具

_bindings/ 目录

  • 作用:包含编译好的 C++ 扩展库
  • 内容:
    • linux-x86_64/:Linux 平台的二进制库文件
      • gym_*.so:不同 Python 版本的 Gym API 绑定
      • rlgpu_*.so:不同 Python 版本的 RLGPU 库
      • 各种依赖库(PhysX、USD、Boost 等)
    • src/gymtorch/:gymtorch C++ 扩展源代码
2.2.2 isaacgym/python/examples/ - 示例程序

包含 27 个示例程序,展示 Isaac Gym 的各种功能:

  • 1080_balls_of_solitude.py:大规模并行仿真示例
  • terrain_creation.py:地形创建示例
  • dof_controls.py:关节控制示例
  • domain_randomization.py:域随机化示例
  • 等等…
2.2.3 isaacgym/assets/ - 资源文件

urdf/ - 机器人模型文件

  • 包含各种机器人的 URDF 描述文件
  • 如:anymal_b、franka、kuka_allegro 等

mjcf/ - MuJoCo 格式模型

  • 包含 MuJoCo XML 格式的机器人模型

textures/ - 纹理文件

  • 用于渲染的地面纹理图片
2.2.4 isaacgym/python/setup.py
  • 作用:Isaac Gym Python 包的安装脚本
  • 功能:配置包信息、依赖项、平台特定的二进制文件

三、legged_gym 文件夹详解

3.1 文件夹作用

legged_gym 是四足机器人强化学习环境的核心模块,提供:

  • 环境定义:各种四足机器人的仿真环境(GO2、ANYmal、A1、Cassie 等)
  • 奖励函数:预定义的奖励函数集合,支持自定义扩展
  • 观测空间:定义机器人的观测信息(关节角度、速度、地形高度等)
  • 训练脚本:训练和测试脚本
  • 工具函数:地形生成、任务注册、参数解析等

3.2 主要文件结构

3.2.1 legged_gym/legged_gym/ - 核心代码目录

__init__.py

  • 作用:包初始化文件
  • 功能:定义项目根目录路径和环境目录路径常量

envs/ - 环境定义目录

envs/__init__.py

  • 作用:环境注册文件
  • 功能:
    • 导入所有机器人环境类
    • 使用 task_registry 注册所有可用任务
    • 注册的任务包括:anymal_c_rough、anymal_c_flat、anymal_b、a1、cassie、go2

envs/base/ - 基础环境类

base/legged_robot.py

  • 作用:四足机器人的基础环境类
  • 功能:
    • 实现通用的四足机器人仿真环境
    • 定义基本的状态更新、奖励计算、观测生成流程
    • 提供可被继承的接口,供具体机器人环境使用

base/legged_robot_config.py

  • 作用:基础环境配置类
  • 功能:
    • 定义环境参数配置类 LeggedRobotCfg(机器人参数、地形参数、奖励函数权重等)
    • 定义训练参数配置类 LeggedRobotCfgPPO(学习率、网络结构、训练超参数等)
    • 提供配置的默认值

base/base_task.py

  • 作用:基础任务类(可能用于更通用的任务定义)

base/base_config.py

  • 作用:基础配置类(可能用于更通用的配置定义)

envs/go2/ - GO2 机器人环境

go2/go2_robot.py

  • 作用:GO2 机器人的具体环境实现
  • 功能:
    • 继承自基础环境类
    • 实现 GO2 特定的奖励函数(如 _reward_tracking_goal_vel、_reward_reach_all_goal 等)
    • 定义 GO2 的观测空间
    • 处理 GO2 的初始化和重置逻辑

go2/go2_config.py

  • 作用:GO2 环境的配置类
  • 功能:
    • 定义 GO2 机器人的 URDF 路径
    • 设置关节名称、默认位置、PD 控制参数
    • 配置奖励函数权重
    • 配置观测空间维度
    • 定义训练超参数

envs/anymal_c/ - ANYmal-C 机器人环境

anymal_c/anymal.py

  • 作用:ANYmal-C 机器人的环境实现

anymal_c/flat/anymal_c_flat_config.py

  • 作用:ANYmal-C 在平地上的训练配置

anymal_c/mixed_terrains/anymal_c_rough_config.py

  • 作用:ANYmal-C 在粗糙地形上的训练配置

envs/anymal_b/ - ANYmal-B 机器人环境

anymal_b/anymal_b_config.py

  • 作用:ANYmal-B 机器人的配置

envs/a1/ - A1 机器人环境

a1/a1_config.py

  • 作用:A1 机器人的配置

envs/cassie/ - Cassie 机器人环境

cassie/cassie.py

  • 作用:Cassie 机器人的环境实现

cassie/cassie_config.py

  • 作用:Cassie 机器人的配置

scripts/ - 训练和测试脚本

scripts/train.py

  • 作用:训练脚本主入口
  • 功能:
    • 解析命令行参数
    • 创建环境和训练器
    • 启动强化学习训练循环
    • 保存训练好的模型

scripts/play.py

  • 作用:测试/演示脚本
  • 功能:
    • 加载训练好的模型
    • 在仿真环境中运行策略
    • 可视化机器人行为

utils/ - 工具函数目录

utils/task_registry.py

  • 作用:任务注册表
  • 功能:
    • 管理所有注册的环境类、配置类
    • 提供 make_env() 方法创建环境
    • 提供 make_alg_runner() 方法创建训练器
    • 支持从注册名称或配置文件创建对象

utils/helpers.py

  • 作用:辅助函数集合
  • 功能:
    • get_args():解析命令行参数
    • update_cfg_from_args():用命令行参数更新配置
    • class_to_dict():将配置类转换为字典
    • get_load_path():获取模型加载路径
    • set_seed():设置随机种子
    • parse_sim_params():解析仿真参数

utils/terrain.py

  • 作用:地形生成模块
  • 功能:
    • 生成各种类型的地形(平面、粗糙地形、台阶、斜坡等)
    • 支持程序化地形生成
    • 地形高度图处理
    • 支持地形随机化

utils/math.py

  • 作用:数学工具函数
  • 功能:提供常用的数学计算函数(如四元数转换、角度归一化等)

utils/logger.py

  • 作用:日志记录工具
  • 功能:提供训练过程的日志记录功能

tests/ - 测试文件

tests/test_env.py

  • 作用:环境测试脚本
  • 功能:测试环境的基本功能是否正常

resources/ - 资源文件目录

resources/robots/

  • 作用:存储机器人模型文件
  • 内容:各种机器人的 URDF 文件、网格文件、纹理文件等

resources/actuator_nets/

  • 作用:存储执行器网络模型
  • 内容:用于 Sim-to-Real 迁移的执行器神经网络模型(.pt 文件)

执行器网络详解:anydrive_v3_lstm.pt

1. 什么是执行器网络?

执行器网络(Actuator Network)是一个预训练的神经网络模型,用于在仿真中更准确地模拟真实机器人的执行器(电机)动态特性。它替代了传统的 PD(比例 - 微分)控制器,能够更好地模拟真实执行器的非线性行为、延迟、摩擦等特性。

2. 为什么需要执行器网络?

  • 传统 PD 控制器的局限性:
    • 简单的 PD 控制器假设执行器是理想的,能够瞬间响应命令
    • 无法模拟真实电机的动态特性(如惯性、阻尼、非线性摩擦等)
    • 这导致仿真和真实环境之间存在'仿真到现实差距'(Sim-to-Real Gap)
  • 执行器网络的优势:
    • 通过神经网络学习真实执行器的输入 - 输出映射关系
    • 使用 LSTM 结构能够记忆历史状态,更好地模拟执行器的动态响应
    • 在仿真中使用执行器网络训练的策略,更容易迁移到真实机器人上

3. 模型的具体作用

anydrive_v3_lstm.pt 是一个 LSTM 神经网络模型,它的功能是:

  • 输入:
    • 位置误差:(目标位置 - 当前位置)
    • 当前速度:当前关节速度
    • 历史隐藏状态:LSTM 的 hidden state 和 cell state
  • 输出:
    • 关节扭矩:直接输出应该施加到关节上的扭矩值
    • 更新后的隐藏状态:用于下一次计算

4. 是否需要自己训练?

不需要! 这个模型是预训练的,由项目维护者(ETH Zurich 的 Robotic Systems Lab)提供。它是基于真实 ANYmal 机器人的执行器数据训练得到的,已经能够很好地模拟真实执行器的行为。

5. 哪些文件调用了这个模型?

根据代码分析,以下文件使用了 anydrive_v3_lstm.pt:

  • 配置文件中指定了使用执行器网络,并设置模型文件路径:
  • 在 __init__ 方法中加载模型:
  • 在 _compute_torques 方法中使用模型计算扭矩:

legged_gym/legged_gym/envs/anymal_c/anymal.py(第 51-54 行,第 71-78 行)

if self.cfg.control.use_actuator_network:
    actuator_network_path = self.cfg.control.actuator_net_file.format(LEGGED_GYM_ROOT_DIR=LEGGED_GYM_ROOT_DIR)
    self.actuator_network = torch.jit.load(actuator_network_path).to(self.device)
if self.cfg.control.use_actuator_network:
    # 准备输入:位置误差和速度
    self.sea_input[:,0,0]=(actions * self.cfg.control.action_scale + self.default_dof_pos - self.dof_pos).flatten()
    self.sea_input[:,0,1]= self.dof_vel.flatten()
    # 调用执行器网络计算扭矩
    torques,(self.sea_hidden_state[:], self.sea_cell_state[:])= self.actuator_network(
        self.sea_input,(self.sea_hidden_state, self.sea_cell_state))
    return torques
else:
    # 否则使用传统的 PD 控制器
    return super()._compute_torques(actions)

legged_gym/legged_gym/envs/anymal_c/mixed_terrains/anymal_c_rough_config.py(第 68-69 行)

use_actuator_network = True
actuator_net_file = "{LEGGED_GYM_ROOT_DIR}/resources/actuator_nets/anydrive_v3_lstm.pt"

6. 使用场景

  • 当前使用:仅在 anymal_c_rough 任务中使用(粗糙地形训练)
  • 其他机器人:GO2、A1、Cassie 等其他机器人环境默认使用 PD 控制器
  • 如何启用:在对应机器人的配置文件中设置 use_actuator_network = True 并指定模型文件路径

7. 工作原理对比

控制方式输入计算方式输出
PD 控制器目标位置、当前位置、当前速度线性公式:τ = Kp*(θ_target - θ) - Kd*θ_dot扭矩
执行器网络位置误差、速度、历史状态LSTM 神经网络前向传播扭矩

执行器网络能够学习更复杂的非线性映射,从而更准确地模拟真实执行器的行为。

setup.py

  • 作用:legged_gym 包的安装脚本
  • 功能:定义包依赖(isaacgym、rsl-rl、matplotlib)

四、rsl_rl 文件夹详解

4.1 文件夹作用

rsl_rl 是一个快速、简洁的强化学习算法实现库,专门设计为在 GPU 上完全运行。目前主要实现了 PPO(Proximal Policy Optimization) 算法。

4.2 主要文件结构

4.2.1 rsl_rl/rsl_rl/ - 核心代码目录

__init__.py

  • 作用:包初始化文件
  • 功能:定义包的版本和基本信息

algorithms/ - 算法实现目录

algorithms/ppo.py

  • 作用:PPO 算法实现
  • 功能:
    • 实现 PPO 的核心算法逻辑
    • 包括策略更新、价值函数更新
    • 支持 GAE(Generalized Advantage Estimation)
    • 实现 clipped surrogate objective
    • 支持梯度裁剪

algorithms/__init__.py

  • 作用:算法模块初始化
  • 功能:导出 PPO 类

modules/ - 神经网络模块目录

modules/actor_critic.py

  • 作用:Actor-Critic 网络结构
  • 功能:
    • 定义策略网络(Actor)和价值网络(Critic)
    • 实现前向传播
    • 支持共享特征提取层
    • 输出动作分布参数(均值和标准差)和价值估计

modules/actor_critic_recurrent.py

  • 作用:带循环结构的 Actor-Critic 网络
  • 功能:
    • 在 Actor-Critic 基础上添加 RNN/LSTM 层
    • 支持处理序列数据
    • 用于需要记忆历史信息的环境

modules/__init__.py

  • 作用:模块初始化
  • 功能:导出 ActorCritic 和 ActorCriticRecurrent 类

runners/ - 训练运行器目录

runners/on_policy_runner.py

  • 作用:On-Policy 算法训练运行器

(注:PPO 是一个 on-policy 算法,虽然它在实现上借鉴了一些 off-policy 的技巧。)

  • 功能:
    • 管理整个训练循环
    • 协调环境交互、数据收集、模型更新
    • 处理模型保存和加载
    • 集成 TensorBoard 日志记录
    • 管理训练迭代和检查点

runners/__init__.py

  • 作用:运行器模块初始化
  • 功能:导出 OnPolicyRunner 类

storage/ - 数据存储目录

storage/rollout_storage.py

  • 作用:经验回放缓冲区
  • 功能:
    • 存储环境交互数据(观测、动作、奖励、done 标志等)
    • 计算优势函数(Advantage)和回报(Return)
    • 支持批量数据采样
    • 管理经验数据的生命周期

storage/__init__.py

  • 作用:存储模块初始化
  • 功能:导出 RolloutStorage 类

env/ - 环境接口目录

env/vec_env.py

  • 作用:向量化环境接口
  • 功能:
    • 定义环境的标准接口
    • 支持批量环境交互
    • 提供 step()、reset() 等方法
    • 所有环境类需要实现此接口

继承关系

VecEnv (接口/抽象基类)
↑ (实现接口,但不显式继承)
BaseTask (基础任务类)
↑ (继承)
LeggedRobot (四足机器人基类)
↑ (继承)
Go2Robot (GO2 机器人具体实现)

训练时的调用流程

OnPolicyRunner.learn()
↓ env.step(actions) # 期望 VecEnv 接口
↓ Go2Robot.step() # 实际调用
↓ LeggedRobot.step() # 如果 Go2Robot 没有重写,调用父类
↓ BaseTask.step() # 如果 LeggedRobot 没有重写,调用父类

这是一个典型的适配器模式(Adapter Pattern):

  • VecEnv 定义了标准接口
  • BaseTask 及其子类实现了这个接口
  • 使得 legged_gym 的环境可以与 rsl_rl 的训练框架无缝集成

env/__init__.py

  • 作用:环境模块初始化
  • 功能:导出 VecEnv 基类

utils/ - 工具函数目录

utils/utils.py

  • 作用:工具函数集合
  • 功能:
    • 提供网络初始化函数
    • 提供激活函数选择
    • 其他辅助函数

utils/__init__.py

  • 作用:工具模块初始化

setup.py

  • 作用:rsl_rl 包的安装脚本
  • 功能:定义包依赖(torch、numpy)

五、项目工作流程

5.1 训练流程

  1. 环境创建:使用 task_registry.make_env() 创建仿真环境
  2. 训练器创建:使用 task_registry.make_alg_runner() 创建 PPO 训练器
  3. 训练循环:
    • 环境交互:收集经验数据
    • 数据存储:将数据存入 RolloutStorage
    • 策略更新:使用 PPO 算法更新策略网络
    • 日志记录:记录训练指标到 TensorBoard
    • 模型保存:定期保存检查点

5.2 数据流

环境 (legged_gym)
↓ 观测、奖励
PPO 算法 (rsl_rl)
↓ 动作
Isaac Gym 仿真引擎
↓ 物理状态
环境 (legged_gym)

5.3 关键组件交互

  • Isaac Gym 提供物理仿真和 GPU 加速
  • legged_gym 定义任务、奖励函数、观测空间
  • rsl_rl 实现强化学习算法和训练流程

六、总结

本项目是一个完整的四足机器人强化学习训练框架,通过三个核心模块的协作:

  1. isaacgym:提供高性能的物理仿真环境
  2. legged_gym:定义具体的机器人任务和环境
  3. rsl_rl:实现强化学习算法和训练流程

整个系统支持:

  • 多种四足机器人模型
  • 自定义奖励函数和观测空间
  • GPU 加速的并行训练
  • 从仿真到实物的迁移学习

目录

  1. 四足机器人强化学习项目架构详解
  2. 一、项目总览
  3. 1.1 项目简介
  4. 1.2 项目目标
  5. 1.3 项目架构
  6. 二、isaacgym 文件夹详解
  7. 2.1 文件夹作用
  8. 2.2 主要文件结构
  9. 2.2.1 isaacgym/python/isaacgym/ - Python 包核心文件
  10. 2.2.2 isaacgym/python/examples/ - 示例程序
  11. 2.2.3 isaacgym/assets/ - 资源文件
  12. 2.2.4 isaacgym/python/setup.py
  13. 三、legged_gym 文件夹详解
  14. 3.1 文件夹作用
  15. 3.2 主要文件结构
  16. 3.2.1 leggedgym/leggedgym/ - 核心代码目录
  17. 四、rsl_rl 文件夹详解
  18. 4.1 文件夹作用
  19. 4.2 主要文件结构
  20. 4.2.1 rslrl/rslrl/ - 核心代码目录
  21. 五、项目工作流程
  22. 5.1 训练流程
  23. 5.2 数据流
  24. 5.3 关键组件交互
  25. 六、总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Mac鼠标滚轮救星:Mos让外接鼠标重获新生
  • Java 使用 Spire.Doc 实现 HTML 转 XML 与 XPS
  • Python 从零构建简易串口上位机软件
  • CppSharp 完全指南:5 步实现 C++ 到.NET 的自动化绑定
  • 链表分割:以指定值 x 为基准划分链表
  • 前端面试复盘:从八股文到场景题的转变与应对策略
  • Haversine 距离算法详解
  • Java Set 集合:HashSet、LinkedHashSet 与 TreeSet 核心解析
  • CMS 模板注入导致前台 RCE 漏洞挖掘与修复分析
  • PRIDE-PPPAR 安装与配置完整指南
  • 算法刷题:替换所有问号与提莫攻击
  • 二叉搜索树:概念、性能与实现
  • LFM2-1.2B 多语言开源边缘高效混合模型解析
  • 基于 Ocelot+Nacos+WebAPI 的网关鉴权实现
  • mPLUG-Owl3-2B 图文交互工具实测:100 张测试图平均准确率 86.7%
  • 树莓派 4B 连接大疆 M300 无人机开发指南
  • Go 语言实现 Natural Sort 自然排序算法源码
  • 大疆无人机开发实战指南:MSDK/PSDK/上云 API 集成
  • VS Code 与 Android Studio 配合 Copilot 高效分析 Android 源码
  • DeerFlow 2.0:字节跳动开源的超级智能体编排框架

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online