Ubuntu系统从零搭建legged_gym与rsl_rl机器人强化学习仿真环境全攻略
2026/9/20 4:14:26 网站建设 项目流程

想用强化学习让机器人学会走路、奔跑甚至后空翻,但刚打开GitHub就被满屏的C++、CUDA、ROS和复杂的依赖关系劝退?你不是一个人。

从理论到实践,强化学习与机器人控制的结合一直是AI领域最具挑战也最令人兴奋的方向之一。然而,当新手满怀热情地打开像legged_gym(一个专注于足式机器人仿真的强化学习训练环境)和rsl_rl(一个高效的机器人强化学习库)这样的明星项目时,迎接他们的往往不是智能体在虚拟世界中奔跑的喜悦,而是编译错误、版本冲突和依赖地狱。环境配置,这个看似简单的第一步,成了无数人探索机器人强化学习的第一道高墙。

这篇文章的目的很明确:帮你跨过这道墙,真正跑起来。我们不空谈算法原理,而是聚焦于最实际的问题——如何在一个干净的Ubuntu系统上,从零开始,成功搭建legged_gymrsl_rl的联合仿真训练环境。我会带你一步步走通整个流程,并重点剖析那些官方文档可能一笔带过、但实际操作中几乎必然遇到的“坑”。读完本文,你将获得一份可复现的配置清单、一套行之有效的排错方法,以及对机器人强化学习仿真栈的初步理解。

1. 为什么环境配置是机器人强化学习的第一道坎?

在开始敲命令之前,我们需要理解为什么这个环境如此“棘手”。这并非项目设计不佳,而是由其技术栈和目标决定的。

1.1 技术栈的复杂性机器人强化学习仿真是一个典型的“交叉领域”工程,它至少涉及以下几个层面:

  • 物理仿真引擎:如Isaac Gym、PyBullet或MuJoCo,用于高保真地模拟机器人与环境的物理交互。这通常需要C++底层库和Python接口。
  • 强化学习框架:如rsl_rl(本文焦点)、Stable-Baselines3、Ray RLlib等,提供算法实现和训练循环。
  • 机器人模型与控制接口:定义机器人的URDF/SDF模型,并实现底层的控制器(如PD控制、MPC)与仿真环境通信。
  • 深度学习框架:通常是PyTorch,用于构建和训练神经网络策略。
  • 系统依赖:包括特定版本的CUDA(用于GPU加速)、gcc/g++编译器、CMake等。

legged_gymrsl_rl的组合,正是将上述几层紧密耦合的一个典范。legged_gym提供了仿真的“舞台”(基于Isaac Gym或PyBullet)和“演员”(如ANYmal、Aliengo等机器人模型),而rsl_rl则提供了“导演”(PPO等算法)来训练“演员”如何表演(运动)。

1.2 环境配置的核心挑战

  • 版本地狱:CUDA版本、PyTorch版本、Python版本、gcc版本之间存在着严格的兼容性矩阵。一个版本不匹配就可能导致编译失败或运行时崩溃。
  • 依赖深度:许多依赖项本身又有复杂的依赖,手动安装极易遗漏。
  • 系统特异性:在Ubuntu上可行的步骤,在Windows或macOS上可能完全不同。本文聚焦于Ubuntu 20.04/22.04 LTS,这是机器人开发最主流、兼容性最好的环境。
  • 硬件要求:GPU(尤其是NVIDIA GPU)几乎是必须的,用于加速物理仿真和神经网络训练。

理解了这些,我们就知道,配置过程本质上是在搭建一个精密的、环环相扣的技术栈。下面,我们开始动手。

2. 基础环境与核心概念澄清

在开始安装前,请确保你的系统满足以下基础条件,并了解关键组件。

2.1 最低系统要求

  • 操作系统:Ubuntu 20.04 LTS 或 22.04 LTS(强烈推荐,本文以22.04为例)。
  • 内存:建议16GB以上。
  • 存储:至少50GB可用空间。
  • GPU:NVIDIA GPU(显存4GB以上,用于训练需要更大显存),并已安装对应版本的驱动。
  • 网络:稳定的网络连接,用于下载安装包和源码。

2.2 核心组件角色解析为了避免混淆,我们先厘清几个关键仓库的作用:

  • rsl_rl:一个轻量级、高效的机器人强化学习库,由苏黎世联邦理工学院(ETH Zurich)的机器人系统实验室开发。它核心实现了PPO算法,并针对机器人控制问题进行了高度优化(如观察值归一化、优势估计等)。它提供的是训练算法。
  • legged_gym:同样来自ETH Zurich,这是一个用于足式机器人强化学习训练的仿真环境。它定义了训练任务(如行走、奔跑)、奖励函数、观测空间和动作空间,并封装了与物理仿真器(如Isaac Gym)的交互。它提供的是训练环境和任务。
  • Isaac Gym:NVIDIA开发的高性能GPU加速物理仿真器。legged_gym默认使用它来获得极快的仿真速度(数千个环境并行)。它是底层的物理引擎。

简单关系:rsl_rl(算法) <->legged_gym(环境/任务) <->Isaac Gym(物理引擎)。

2.3 为什么选择这个组合?对于机器人运动控制入门,这个组合优势明显:

  1. 高性能:Isaac Gym的GPU并行仿真比传统CPU仿真快几个数量级,极大缩短训练时间。
  2. 经过验证:已被多篇顶级论文(如Learning to Walk in the Wild)使用,代码质量高。
  3. 聚焦核心rsl_rl代码简洁,专注于PPO,适合学习算法细节;legged_gym提供了完整的机器人控制问题定义。

3. 环境准备:从系统到驱动

让我们从最底层开始,搭建一个稳固的基础。

3.1 系统更新与基础工具安装打开终端,执行以下命令:

# 更新软件包列表并升级现有软件包 sudo apt update && sudo apt upgrade -y # 安装编译、构建和开发必备工具 sudo apt install -y build-essential cmake git wget curl software-properties-common sudo apt install -y libopenblas-dev liblapack-dev libatlas-base-dev sudo apt install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev sudo apt install -y pkg-config libssl-dev libffi-dev sudo apt install -y python3-dev python3-pip python3-venv

3.2 NVIDIA驱动与CUDA安装(关键步骤)这是最容易出错的环节。请严格按照顺序操作。

  • 步骤1:检查并安装NVIDIA驱动

    # 查看推荐的驱动版本 ubuntu-drivers devices # 通常会推荐一个以`nvidia-driver-5xx`或`nvidia-driver-5xx-server`格式的版本。选择推荐版本安装。 # 例如,如果推荐的是525 sudo apt install -y nvidia-driver-525 # 安装完成后,重启系统 sudo reboot # 重启后验证驱动安装成功 nvidia-smi

    你应该能看到GPU信息表格,顶部显示CUDA版本(如CUDA Version: 12.2)。记下这个CUDA版本,下一步需要与之匹配。

  • 步骤2:安装CUDA Toolkit前往NVIDIA官网的 CUDA Toolkit Archive ,根据你nvidia-smi显示的CUDA版本,选择对应的CUDA Toolkit版本。例如,显示12.2,则选择CUDA Toolkit 12.2.x。 按照官网针对Ubuntu的安装指南操作。通常类似以下命令(请务必使用官网提供的正确命令):

    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2204-12-2-local_12.2.2-535.104.05-1_amd64.deb sudo cp /var/cuda-repo-ubuntu2204-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install cuda-toolkit-12-2

    安装后,将CUDA加入环境变量(通常安装脚本会自动添加,但建议检查):

    echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc # 验证CUDA安装 nvcc --version
  • 步骤3:安装cuDNNcuDNN是深度神经网络GPU加速库。你需要注册NVIDIA开发者账号,从官网下载与CUDA版本匹配的cuDNN。 例如,对于CUDA 12.x,下载Local Installer for Ubuntu22.04 x86_64 (Deb)格式的cuDNN 8.x。 下载后,按照官方说明安装,通常是使用dpkg命令。

3.3 创建并激活Python虚拟环境强烈建议使用虚拟环境隔离项目依赖。

# 创建名为`legrl`的虚拟环境(名字可自定) python3 -m venv ~/legrl_env # 激活虚拟环境 source ~/legrl_env/bin/activate # 你的命令行提示符前应该会出现`(legrl_env)`字样 # 升级pip和setuptools pip install --upgrade pip setuptools wheel

4. 核心组件安装:Isaac Gym, rsl_rl, legged_gym

现在开始安装核心三件套。请严格按照顺序操作

4.1 安装PyTorch根据你的CUDA版本,从 PyTorch官网 获取安装命令。例如,对于CUDA 12.1:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

验证安装:

python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"

应输出PyTorch版本和True

4.2 安装Isaac Gym这是最复杂的一步,因为涉及从源码构建。

# 1. 克隆Isaac Gym仓库(建议克隆到home目录下) cd ~ git clone https://github.com/NVIDIA-Omniverse/IsaacGymEnvs.git # 注意:官方推荐使用这个`IsaacGymEnvs`仓库,它包含了Isaac Gym的预览版和示例。 cd IsaacGymEnvs # 2. 安装Isaac Gym的Python依赖 pip install -e . # 3. 运行一个简单测试来验证Isaac Gym安装成功 cd ~/IsaacGymEnvs python examples/1080_balls_of_solitude.py

如果看到一个弹窗,里面有许多小球在物理仿真中弹跳,说明Isaac Gym安装成功。如果这一步失败,请务必解决后再继续,因为它是legged_gym运行的基础。常见问题包括缺少图形库、权限问题等。

4.3 安装rsl_rl

# 克隆rsl_rl仓库 cd ~ git clone https://github.com/leggedrobotics/rsl_rl.git cd rsl_rl # 使用pip从本地源码安装 pip install -e .

-e参数代表“可编辑模式”,方便你后续查看或修改源码。

4.4 安装legged_gym

# 克隆legged_gym仓库 cd ~ git clone https://github.com/leggedrobotics/legged_gym.git cd legged_gym # 安装其Python依赖 pip install -e .

注意:legged_gym的安装过程会尝试安装一些依赖,它可能会与已有环境产生轻微冲突。如果遇到依赖版本问题,通常可以根据错误提示,使用pip install package_name==specific_version来调整。

5. 运行你的第一个训练:让ANYmal机器人站起来

环境搭建完毕,现在让我们启动第一个训练任务,验证整个流程是否通畅。

5.1 准备配置文件与数据legged_gym的训练配置通过YAML文件管理。我们先创建一个工作目录并复制示例配置。

# 在legged_gym目录下进行操作 cd ~/legged_gym # 创建用于存放训练输出的目录 mkdir -p logs/train # 复制示例配置文件(例如训练ANYmal机器人在平坦地形行走) cp scripts/cfg/train/legged_robot/anymal_c_flat.yaml logs/train/my_first_run.yaml

5.2 理解并修改配置文件用文本编辑器(如nanovim)打开logs/train/my_first_run.yaml。我们不需要修改太多,但可以了解几个关键参数,以便后续调试:

# my_first_run.yaml 关键部分解读 task: env: num_envs: 4096 # 并行环境数量。越大训练越快,但需要更多GPU显存。初次运行可调小,如1024。 env_spacing: 3.0 # 环境之间的间距 episode_length_s: 20 # 每个episode的最大时长(秒) robot: asset: file: "{LEGGED_GYM_ROOT_DIR}/resources/robots/anymal_c/urdf/anymal_c.urdf" # 机器人URDF模型文件路径 terrain: mesh_type: 'plane' # 地形类型,'plane'是平面,'trimesh'是随机粗糙地形 # 如果是平面,可以注释或删除下面的`terrain`相关复杂配置 commands: curriculum: false # 课程学习,开始时可以设为false简化任务 resampling_time: 10.0 rewards: # 奖励函数配置,定义了机器人为了什么而学习 # 这里有很多项,如线速度跟踪、角速度跟踪、姿态惩罚、动作平滑度惩罚等 # 初次运行不建议修改 normalization: clip_observations: 10.0 clip_actions: 1.0 algorithm: # rsl_rl算法配置 runner: policy_class_name: "ActorCritic" # 策略网络结构 algorithm_class_name: "PPO" # 使用PPO算法 num_learning_epochs: 5 # 每次数据收集后,参数更新的轮数 num_mini_batches: 4 # 小批量数量 ppo: # PPO超参数 clip_param: 0.2 gamma: 0.99 lam: 0.95 ... policy: init_noise_std: 1.0 # 初始探索噪声 runner_settings: max_iterations: 3000 # 最大训练迭代次数 save_interval: 500 # 每隔多少迭代保存一次模型 log_interval: 10 # 日志打印间隔 ...

对于第一次运行,为了确保成功并快速看到效果,建议做以下修改:

  1. num_envs4096改为10242048(取决于你的GPU显存,8GB显存建议1024)。
  2. 确认terrain.mesh_type'plane'(平面地形,最简单)。
  3. 确认algorithm.runner_settings.max_iterations为一个较小的值,如500,以便快速完成一次训练。

5.3 启动训练脚本legged_gym目录下,运行训练命令:

# 确保在虚拟环境中,并且在legged_gym目录下 cd ~/legged_gym source ~/legrl_env/bin/activate # 如果已激活可省略 # 运行训练脚本,指定配置文件 python scripts/train.py --task=anymal_c_flat --headless --num_envs=1024

参数解释:

  • --task=anymal_c_flat: 指定任务名称,对应配置。
  • --headless:无头模式,不启动图形界面。这对于服务器训练至关重要。第一次运行时强烈建议加上,可以避免图形界面可能带来的问题。
  • --num_envs=1024: 覆盖配置文件中num_envs参数。

如果一切顺利,你将看到终端开始滚动输出日志,显示迭代次数、平均奖励、策略损失、值函数损失等信息。

5.4 监控训练过程训练开始后,除了看终端日志,还可以使用TensorBoard可视化训练曲线。

# 打开一个新的终端窗口 cd ~/legged_gym source ~/legrl_env/bin/activate tensorboard --logdir logs/train/

然后在浏览器中打开http://localhost:6006,你可以看到奖励(reward)等指标随训练迭代的变化曲线。如果奖励曲线总体呈上升趋势,说明智能体正在学习!

6. 运行结果验证与可视化

训练一段时间(比如100-200次迭代)后,你可以暂停(Ctrl+C)或等待训练达到设定的最大迭代次数。接下来,我们测试训练好的策略。

6.1 使用训练好的策略进行推理(测试)首先,找到保存的模型文件。它们通常位于~/legged_gym/logs/train/[任务名]/[日期时间]/model_[迭代次数].pt

假设你的模型路径是~/legged_gym/logs/train/anymal_c_flat/May01_12-30-00/model_500.pt

运行推理脚本:

cd ~/legged_gym source ~/legrl_env/bin/activate # 运行推理,展示训练结果 python scripts/play.py --task=anymal_c_flat --checkpoint=logs/train/anymal_c_flat/May01_12-30-00/model_500.pt

这次不要加--headless参数。如果环境配置正确,你应该会看到一个图形窗口,里面的ANYmal机器人尝试在平面上站立和行走。初期训练的策略可能表现笨拙,但你应该能看到它试图保持平衡。

6.2 理解输出与日志

  • 终端输出:在训练和推理时,关注Average Episodic Return(平均回合总奖励),这是衡量智能体表现的核心指标。
  • TensorBoard图表
    • train/mean_reward: 平均奖励。
    • train/episode_length: 回合长度。
    • losses/policy_loss: 策略损失。
    • losses/value_loss: 值函数损失。
  • 保存的文件
    • model_[iteration].pt: 策略模型参数。
    • cfg.yaml: 训练使用的配置文件副本。
    • log.txt: 详细的训练日志。

7. 常见问题与深度排错指南

以下是配置和运行过程中最常见的问题及其解决方案。

问题现象可能原因排查方式解决方案
import isaacgym失败1. Isaac Gym未正确安装或构建。
2. Python路径问题。
3. 缺少动态链接库。
1. 确认在IsaacGymEnvs目录下运行过pip install -e .
2. 在Python中尝试import isaacgym,看具体错误信息。
3. 运行ldd检查.so文件。
1. 重新执行Isaac Gym安装步骤,仔细阅读终端输出。
2. 确保在正确的虚拟环境中操作。
3. 安装缺失的系统库:sudo apt install libpython3.8-dev(版本号对应你的Python)。
torch.cuda.is_available()返回 False1. PyTorch与CUDA版本不匹配。
2. NVIDIA驱动未正确安装。
3. 虚拟环境中的PyTorch是CPU版本。
1. 分别检查nvidia-smi中的CUDA版本和python -c "import torch; print(torch.version.cuda)"的输出是否一致。
2. 检查nvidia-smi命令是否能正常显示GPU信息。
1. 根据nvidia-smi显示的CUDA版本,重新安装对应版本的PyTorch。
2. 重装NVIDIA驱动。
3. 在虚拟环境中卸载torch,重新安装GPU版本。
训练时出现CUDA out of memoryGPU显存不足。使用nvidia-smi监控显存占用。1. 减少配置文件中的num_envs(并行环境数)。
2. 减少algorithm.runner.mini_batch_size
3. 使用更小的神经网络(修改policy配置)。
4. 升级GPU硬件。
运行play.py无图形显示或黑屏1. 在无图形界面的服务器上运行且未设置显示转发。
2. 缺少OpenGL相关库。
3. 使用了--headless参数。
1. 检查是否通过SSH连接且未设置X11 forwarding
2. 检查错误日志中是否有GLX相关错误。
1. 对于本地机器,确保未使用--headless
2. 对于远程服务器,需要配置X11 forwarding或使用VNC。
3. 安装OpenGL库:sudo apt install mesa-utils libgl1-mesa-glx
训练奖励曲线不上升或震荡剧烈1. 超参数设置不当。
2. 奖励函数设计问题(对于初学者,先用默认)。
3. 环境或任务过于复杂。
1. 观察TensorBoard中各项损失和奖励曲线。
2. 检查配置文件中rewards权重是否极端。
3. 尝试更简单的任务(如平面站立)。
1. 调整学习率(algorithm.ppo.learning_rate),通常调小。
2. 增加algorithm.runner.num_learning_epochs
3. 启用课程学习(commands.curriculum: true),让任务由易到难。
4. 确保terrainplane开始。
pip install -e .时版本冲突不同库对同一个依赖的版本要求冲突。查看错误信息,明确是哪个包冲突。1. 尝试按顺序安装:先装Isaac Gym,再装rsl_rl,最后legged_gym。
2. 使用pip install package_name==x.x.x手动指定兼容版本。
3. 终极方案:为每个项目创建独立的虚拟环境,通过环境变量PYTHONPATH关联。

关于依赖冲突的特别提醒:机器人强化学习栈的依赖管理确实复杂。如果遇到难以解决的pip冲突,可以考虑使用conda环境,因为它能更好地处理二进制依赖。但本文为保持简洁,使用了venv

8. 最佳实践与进阶配置建议

成功运行第一个例子只是开始。以下建议能帮助你更高效、更稳定地进行研究和开发。

8.1 工程与协作最佳实践

  1. 版本控制:将你的配置文件(YAML)、自定义环境代码、训练脚本纳入Git管理。模型文件(.pt)通常较大,使用.gitignore排除,或使用Git LFS。
  2. 实验管理:每次训练都使用唯一的运行名称或目录。可以在训练命令中添加--run_name=my_exp_001,这样日志和模型会保存到以该名字命名的子文件夹中,便于区分。
  3. 配置管理:不要直接修改scripts/cfg/下的原始配置文件。将其复制到你的实验目录(如logs/train/my_exp/)再修改。这样原始配置得以保留,也方便回溯。
  4. 代码注释与探索:花时间阅读legged_gymrsl_rl的源码,特别是tasks/rewards/algorithms/下的文件。理解奖励函数如何编写、网络结构如何定义,是进阶的关键。

8.2 性能调优建议

  1. 最大化GPU利用率:在显存允许的范围内,尽可能增大num_envs。Isaac Gym的并行优势正在于此。监控nvidia-smi,确保GPU利用率接近100%。
  2. 调整算法超参数
    • learning_rate: 最常见需要调整的参数。如果训练不稳定,尝试降低它(如从1e-3降到5e-4)。
    • batch_sizenum_mini_batches: 共同决定了每次参数更新时使用的数据量。一般保持batch_size = num_envs * episode_length / num_mini_batches
    • gammalam: 分别控制未来奖励的折扣和GAE(lambda)的优势估计,通常0.99和0.95是很好的起点。
  3. 利用课程学习:对于复杂任务(如崎岖地形行走),在配置中启用commands.curriculumterrain.curriculum,让智能体从简单任务开始,逐步增加难度。

8.3 扩展与自定义

  1. 创建自己的机器人:在resources/robots/下放置你的URDF模型文件,并在配置文件中修改robot.asset.file路径。
  2. 设计新的奖励函数:在legged_gym/legged_gym/envs/base/下的任务类中,修改_reward_开头的函数。奖励函数是强化学习的“指挥棒”,其设计直接决定了学习到的行为。
  3. 修改观测与动作空间:在任务类的_get_obs()_get_actions()方法中调整。例如,为机器人增加关节扭矩传感器观测。
  4. 尝试其他算法rsl_rl主要实现了PPO。你可以将其替换为其他库(如Stable-Baselines3),但这需要修改legged_gym的训练循环接口。

从在平面蹒跚学步,到在复杂地形上健步如飞,你与智能体共同学习的旅程已经迈出了最坚实的第一步。环境配置的完成,意味着你已成功搭建了机器人强化学习领域最前沿的“实验台”。这个过程中遇到的每一个错误,解决的每一个依赖冲突,都让你对这套技术栈的理解加深了一层——它不仅仅是几个Python包,而是一个融合了物理仿真、并行计算、深度学习和控制理论的复杂系统工程。

接下来,真正的探索才刚刚开始。建议你以修改奖励函数为第一个实践目标:尝试调整anymal_c_flat.yamlrewards模块下各项的权重,观察机器人行为如何随之变化。例如,增大“脚在空中时间”的惩罚,看看它是否会走得更稳、步频更快。这种直观的“因果实验”,是理解强化学习最有效的方式。

当你对默认环境游刃有余后,挑战便接踵而至:如何让机器人在随机生成的粗糙台阶上行走?如何实现小跑、踱步等不同的步态?如何从仿真迁移到真实机器人?每一个问题背后,都连接着机器人学与强化学习深层次的研究课题。这份配置指南和排错手册,希望能成为你探索这些未知领域时,手边一份可靠的“地图”。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询