ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Ubuntu系统从零搭建legged_gym与rsl_rl机器人强化学习仿真环境全攻略

2026/9/2 13:42:00 拓冰建站 浏览量
Ubuntu系统从零搭建legged_gym与rsl_rl机器人强化学习仿真环境全攻略 想用强化学习让机器人学会走路、奔跑甚至后空翻但刚打开GitHub就被满屏的C、CUDA、ROS和复杂的依赖关系劝退你不是一个人。从理论到实践强化学习与机器人控制的结合一直是AI领域最具挑战也最令人兴奋的方向之一。然而当新手满怀热情地打开像legged_gym一个专注于足式机器人仿真的强化学习训练环境和rsl_rl一个高效的机器人强化学习库这样的明星项目时迎接他们的往往不是智能体在虚拟世界中奔跑的喜悦而是编译错误、版本冲突和依赖地狱。环境配置这个看似简单的第一步成了无数人探索机器人强化学习的第一道高墙。这篇文章的目的很明确帮你跨过这道墙真正跑起来。我们不空谈算法原理而是聚焦于最实际的问题——如何在一个干净的Ubuntu系统上从零开始成功搭建legged_gym和rsl_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_gym和rsl_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可用空间。GPUNVIDIA GPU显存4GB以上用于训练需要更大显存并已安装对应版本的驱动。网络稳定的网络连接用于下载安装包和源码。2.2 核心组件角色解析为了避免混淆我们先厘清几个关键仓库的作用rsl_rl一个轻量级、高效的机器人强化学习库由苏黎世联邦理工学院ETH Zurich的机器人系统实验室开发。它核心实现了PPO算法并针对机器人控制问题进行了高度优化如观察值归一化、优势估计等。它提供的是训练算法。legged_gym同样来自ETH Zurich这是一个用于足式机器人强化学习训练的仿真环境。它定义了训练任务如行走、奔跑、奖励函数、观测空间和动作空间并封装了与物理仿真器如Isaac Gym的交互。它提供的是训练环境和任务。Isaac GymNVIDIA开发的高性能GPU加速物理仿真器。legged_gym默认使用它来获得极快的仿真速度数千个环境并行。它是底层的物理引擎。简单关系rsl_rl(算法) -legged_gym(环境/任务) -Isaac Gym(物理引擎)。2.3 为什么选择这个组合对于机器人运动控制入门这个组合优势明显高性能Isaac Gym的GPU并行仿真比传统CPU仿真快几个数量级极大缩短训练时间。经过验证已被多篇顶级论文如Learning to Walk in the Wild)使用代码质量高。聚焦核心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-venv3.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 wheel4. 核心组件安装Isaac Gym, rsl_rl, legged_gym现在开始安装核心三件套。请严格按照顺序操作。4.1 安装PyTorch根据你的CUDA版本从 PyTorch官网 获取安装命令。例如对于CUDA 12.1pip 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_namespecific_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.yaml5.2 理解并修改配置文件用文本编辑器如nano或vim打开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 # 日志打印间隔 ...对于第一次运行为了确保成功并快速看到效果建议做以下修改将num_envs从4096改为1024或2048取决于你的GPU显存8GB显存建议1024。确认terrain.mesh_type为plane平面地形最简单。确认algorithm.runner_settings.max_iterations为一个较小的值如500以便快速完成一次训练。5.3 启动训练脚本在legged_gym目录下运行训练命令# 确保在虚拟环境中并且在legged_gym目录下 cd ~/legged_gym source ~/legrl_env/bin/activate # 如果已激活可省略 # 运行训练脚本指定配置文件 python scripts/train.py --taskanymal_c_flat --headless --num_envs1024参数解释--taskanymal_c_flat: 指定任务名称对应配置。--headless:无头模式不启动图形界面。这对于服务器训练至关重要。第一次运行时强烈建议加上可以避免图形界面可能带来的问题。--num_envs1024: 覆盖配置文件中num_envs参数。如果一切顺利你将看到终端开始滚动输出日志显示迭代次数、平均奖励、策略损失、值函数损失等信息。5.4 监控训练过程训练开始后除了看终端日志还可以使用TensorBoard可视化训练曲线。# 打开一个新的终端窗口 cd ~/legged_gym source ~/legrl_env/bin/activate tensorboard --logdir logs/train/然后在浏览器中打开http://localhost:6006你可以看到奖励reward等指标随训练迭代的变化曲线。如果奖励曲线总体呈上升趋势说明智能体正在学习6. 运行结果验证与可视化训练一段时间比如100-200次迭代后你可以暂停CtrlC或等待训练达到设定的最大迭代次数。接下来我们测试训练好的策略。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 --taskanymal_c_flat --checkpointlogs/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. 确保terrain是plane开始。pip install -e .时版本冲突不同库对同一个依赖的版本要求冲突。查看错误信息明确是哪个包冲突。1. 尝试按顺序安装先装Isaac Gym再装rsl_rl最后legged_gym。2. 使用pip install package_namex.x.x手动指定兼容版本。3. 终极方案为每个项目创建独立的虚拟环境通过环境变量PYTHONPATH关联。关于依赖冲突的特别提醒机器人强化学习栈的依赖管理确实复杂。如果遇到难以解决的pip冲突可以考虑使用conda环境因为它能更好地处理二进制依赖。但本文为保持简洁使用了venv。8. 最佳实践与进阶配置建议成功运行第一个例子只是开始。以下建议能帮助你更高效、更稳定地进行研究和开发。8.1 工程与协作最佳实践版本控制将你的配置文件YAML、自定义环境代码、训练脚本纳入Git管理。模型文件.pt通常较大使用.gitignore排除或使用Git LFS。实验管理每次训练都使用唯一的运行名称或目录。可以在训练命令中添加--run_namemy_exp_001这样日志和模型会保存到以该名字命名的子文件夹中便于区分。配置管理不要直接修改scripts/cfg/下的原始配置文件。将其复制到你的实验目录如logs/train/my_exp/再修改。这样原始配置得以保留也方便回溯。代码注释与探索花时间阅读legged_gym和rsl_rl的源码特别是tasks/、rewards/和algorithms/下的文件。理解奖励函数如何编写、网络结构如何定义是进阶的关键。8.2 性能调优建议最大化GPU利用率在显存允许的范围内尽可能增大num_envs。Isaac Gym的并行优势正在于此。监控nvidia-smi确保GPU利用率接近100%。调整算法超参数learning_rate: 最常见需要调整的参数。如果训练不稳定尝试降低它如从1e-3降到5e-4。batch_size和num_mini_batches: 共同决定了每次参数更新时使用的数据量。一般保持batch_size num_envs * episode_length / num_mini_batches。gamma和lam: 分别控制未来奖励的折扣和GAE(lambda)的优势估计通常0.99和0.95是很好的起点。利用课程学习对于复杂任务如崎岖地形行走在配置中启用commands.curriculum和terrain.curriculum让智能体从简单任务开始逐步增加难度。8.3 扩展与自定义创建自己的机器人在resources/robots/下放置你的URDF模型文件并在配置文件中修改robot.asset.file路径。设计新的奖励函数在legged_gym/legged_gym/envs/base/下的任务类中修改_reward_开头的函数。奖励函数是强化学习的“指挥棒”其设计直接决定了学习到的行为。修改观测与动作空间在任务类的_get_obs()和_get_actions()方法中调整。例如为机器人增加关节扭矩传感器观测。尝试其他算法rsl_rl主要实现了PPO。你可以将其替换为其他库如Stable-Baselines3但这需要修改legged_gym的训练循环接口。从在平面蹒跚学步到在复杂地形上健步如飞你与智能体共同学习的旅程已经迈出了最坚实的第一步。环境配置的完成意味着你已成功搭建了机器人强化学习领域最前沿的“实验台”。这个过程中遇到的每一个错误解决的每一个依赖冲突都让你对这套技术栈的理解加深了一层——它不仅仅是几个Python包而是一个融合了物理仿真、并行计算、深度学习和控制理论的复杂系统工程。接下来真正的探索才刚刚开始。建议你以修改奖励函数为第一个实践目标尝试调整anymal_c_flat.yaml中rewards模块下各项的权重观察机器人行为如何随之变化。例如增大“脚在空中时间”的惩罚看看它是否会走得更稳、步频更快。这种直观的“因果实验”是理解强化学习最有效的方式。当你对默认环境游刃有余后挑战便接踵而至如何让机器人在随机生成的粗糙台阶上行走如何实现小跑、踱步等不同的步态如何从仿真迁移到真实机器人每一个问题背后都连接着机器人学与强化学习深层次的研究课题。这份配置指南和排错手册希望能成为你探索这些未知领域时手边一份可靠的“地图”。