跳到主要内容基于 Isaac Lab 训练机器人行走实战指南 | 极客日志PythonAI算法
基于 Isaac Lab 训练机器人行走实战指南
Isaac Lab 环境搭建与机器人注册流程详解,涵盖 Ubuntu 系统配置、CUDA 驱动安装、PyTorch 及 Isaac Sim 部署。重点讲解如何自定义机器人 USD 文件、编写环境配置文件(含地形、传感器、奖励函数)、注册 Gym 环境以及使用 PPO 算法进行强化学习训练与测试。适合希望从零开始掌握机器人运动控制仿真的开发者。
战神9 浏览 Isaac Lab 环境配置
推荐配置
- 操作系统: Ubuntu 22.04 LTS
- 显卡: NVIDIA RTX 4080 或以上
Ubuntu 22.04 LTS 安装
建议参考官方文档进行系统安装,将 /home 与 /usr 的硬盘容量均预留不少于 200GB。若使用虚拟机,请确保开启虚拟化支持。
安装 NVIDIA 驱动
根据自身显卡型号选择对应的驱动版本,建议安装 550.xxx 系列。安装完成后在终端输入 nvidia-smi,若出现 GPU 信息列表则表示驱动成功:
Thu Jun 5 15:49:51 2025 +-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 CUDA Version: 12.4 |
+-----------------------------------------------------------------------------------------+
安装 CUDA 和 cuDNN
CUDA 安装
根据 nvidia-smi 显示的 CUDA 版本(例如 12.4),前往 NVIDIA 官网下载对应版本的 Toolkit。以 Ubuntu 22.04 为例,执行以下命令:
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.4.0/local_installers/cuda-repo-ubuntu2204-12-4-local_12.4.0-550.54.14-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-4-local_12.4.0-550.54.14-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4
安装后设置环境变量:
echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export CUDA_HOME=/usr/local/cuda-12.4' >> ~/.bashrc
source ~/.bashrc
验证安装:
nvcc --version
cuDNN 安装
下载与 CUDA 版本匹配的 cuDNN(如 CUDA 12.4 对应 cuDNN 8.9.2)。解压后执行:
sudo dpkg -i cudnn-local-repo-ubuntu2204-xxxxxxxxxxxxxx.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-9.10.1/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cudnn-cuda-12
安装 PyTorch 和 Anaconda
根据 CUDA 版本在 PyTorch 官网获取安装指令。推荐使用 Conda 管理环境:
conda create -n env_isaaclab python=3.10
conda activate env_isaaclab
pip install --upgrade pip
conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.4 -c pytorch -c nvidia
安装 Isaac Sim 和 Isaac Lab
参考官方文档进行 Isaac Sim 安装。简要步骤如下:
conda create -n env_isaaclab python=3.10
conda activate env_isaaclab
pip install 'isaacsim[all,extscache]==4.5.0' --extra-index-url https://pypi.nvidia.com
Do you accept the EULA? (Yes/No): Yes
下载 Isaac Sim 资产包(约 92GB)并替换默认资产目录路径。随后克隆 Isaac Lab 代码库:
git clone [email protected]:isaac-sim/IsaacLab.git
cd IsaacLab
./isaaclab.sh --install
./isaaclab.sh -p scripts/tutorials/00_sim/create_empty.py
机器人注册与配置
机器人 USD 文件获取
通过 SolidWorks 导出 URDF,在 Isaac Sim 中导入生成 USD 文件。注意检查 STL 路径格式,若 package://... 不可用,建议替换为相对或绝对路径。移动机器人需勾选可动基座。
创建机器人配置文件
进入 Isaac Lab 任务配置目录,复制现有机器人文件夹并重命名(例如 op3):
cd ~/isaaclab/source/isaaclab_tasks/isaaclab_tasks/manager_based/locomotion/velocity/config
import isaaclab.sim as sim_utils
from isaaclab.actuators import ImplicitActuatorCfg
from isaaclab.assets.articulation import ArticulationCfg
from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR
OP3_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path="xxx/op3.usd",
activate_contact_sensors=True,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False,
retain_accelerations=False,
linear_damping=0.0,
angular_damping=0.0,
max_linear_velocity=20.0,
max_angular_velocity=20.0,
max_depenetration_velocity=10.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=True,
solver_position_iteration_count=4,
solver_velocity_iteration_count=4,
),
),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0, 0.0, 0.28),
joint_pos={"head_pan": 0.0, "head_tilt": 0.0, ".*_hip_yaw": 0.0, ".*_hip_roll": 0.0, ".*_hip_pitch": 0.0, ".*_knee": 0.0, ".*_ank_pitch": 0.0, ".*_ank_roll": 0.0},
joint_vel={".*": 0.0},
),
soft_joint_pos_limit_factor=0.7,
actuators={
"legs": ImplicitActuatorCfg(
joint_names_expr=[".*_hip_yaw", ".*_hip_roll", ".*_hip_pitch", ".*_knee", ".*_ank_pitch", ".*_ank_roll"],
effort_limit_sim=20,
velocity_limit_sim=20.0,
stiffness={".*_hip_yaw": 100.0, ".*_hip_roll": 100.0, ".*_hip_pitch": 100.0, ".*_knee": 100.0, ".*_ank_pitch": 100.0, ".*_ank_roll": 100.0},
damping={".*_hip_yaw": 20.0, ".*_hip_roll": 20.0, ".*_hip_pitch": 20.0, ".*_knee": 20.0, ".*_ank_pitch": 20.0, ".*_ank_roll": 20.0},
)
},
)
检查机器人基座高度
编写 check_op3.py 验证落地高度,避免初始位置过低导致碰撞报错:
import argparse
import torch
from isaaclab.app import AppLauncher
from isaaclab.assets import Articulation
from isaaclab.sim import SimulationContext
from op3 import OP3_CFG
def design_scene(sim):
cfg = sim_utils.GroundPlaneCfg()
cfg.func("/World/defaultGroundPlane", cfg)
origins = torch.tensor([[0.0, 0.0, 0.0]]).to(device=sim.device)
robot = Articulation(OP3_CFG.replace(prim_path="/World/Robot"))
return [robot], origins
def run_simulator(sim, robots, origins):
sim_dt = sim.get_physics_dt()
while sim.is_running():
for robot in robots:
robot.write_joint_state_to_sim(robot.data.default_joint_pos, robot.data.default_joint_vel)
root_state = robot.data.default_root_state.clone()
root_state[:, :3] += origins[0]
robot.write_root_pose_to_sim(root_state[:, :7])
robot.reset()
robot.set_joint_position_target(robot.data.default_joint_pos.clone())
robot.write_data_to_sim()
sim.step()
robot.update(sim_dt)
print(f"Robot height (z): {robot.data.root_pos_w[:, 2].item():.3f}")
if __name__ == "__main__":
sim_cfg = sim_utils.SimulationCfg(dt=0.005, device="cuda", gravity=[0.0, 0.0, -9.81])
sim = SimulationContext(sim_cfg)
sim.set_camera_view(eye=[3.0, 0.0, 2.25], target=[0.0, 0.0, 1.0])
robots, origins = design_scene(sim)
sim.reset()
run_simulator(sim, robots, origins)
sim.close()
速度环境配置
修改 op3_velocity_env_cfg.py,主要关注地形、传感器和奖励项。例如将 height_scanner 的 prim_path 替换为实际机器人的 base_link 名称:
@configclass
class MySceneCfg(InteractiveSceneCfg):
terrain = TerrainImporterCfg(
prim_path="/World/ground",
terrain_type="generator",
terrain_generator=ROUGH_TERRAINS_CFG,
)
height_scanner = RayCasterCfg(
prim_path="{ENV_REGEX_NS}/Robot/base_link",
offset=RayCasterCfg.OffsetCfg(pos=(0.0, 0.0, 20.0)),
pattern_cfg=patterns.GridPatternCfg(resolution=0.1, size=[1.6, 1.0]),
)
contact_forces = ContactSensorCfg(
prim_path="{ENV_REGEX_NS}/Robot/.*",
history_length=3,
track_air_time=True
)
复杂地面与平地配置
分别创建 rough_env_cfg.py 和 flat_env_cfg.py。复杂地面用于正式训练,平地用于基础能力对比。注意调整奖励权重,例如在平地上关闭地形课程:
@configclass
class OP3FlatEnvCfg(OP3RoughEnvCfg):
def __post_init__(self):
super().__post_init__()
self.scene.terrain.terrain_type = "plane"
self.scene.terrain.terrain_generator = None
self.scene.height_scanner = None
self.rewards.feet_air_time.weight = 1.0
注册环境与训练参数
在 __init__.py 中注册 Gym 环境,区分 Train 和 Play 模式。Train 模式开启随机扰动和地形课程,Play 模式用于调试可视化。
修改 rsl_rl_ppo_cfg.py 调整网络结构,例如隐藏层维度:
@configclass
class OP3RoughPPORunnerCfg(RslRlOnPolicyRunnerCfg):
num_steps_per_env = 24
max_iterations = 3000
policy = RslRlPpoActorCriticCfg(
init_noise_std=1.0,
actor_hidden_dims=[512, 256, 128],
critic_hidden_dims=[512, 256, 128],
)
训练与测试
启动训练
进入 Isaac Lab 目录,执行训练命令。建议使用 headless 模式节省资源:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Flat-OP3-train --max_iterations 3000 --seed 42 --headless
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Flat-OP3-train -h
模型测试
训练完成后,在 logs/rsl_rl/ 目录下找到最新的 .pt 模型文件。使用 Play 模式加载模型进行测试:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/play.py --task Flat-OP3-Play --checkpoint ~/isaaclab/logs/rsl_rl/OP3_flat/model_2999.pt
注意调整 --checkpoint 路径指向实际保存位置。
相关免费在线工具
- 加密/解密文本
使用加密算法(如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