Isaac Lab 入门与机器人训练实战
环境配置
推荐配置
- 操作系统: Ubuntu 22.04 LTS
- 显卡: NVIDIA RTX 4080 或以上
系统安装
Ubuntu 22.04 LTS 是官方推荐版本。建议 /home 与 /usr 分区容量均不少于 200GB,为后续资产和缓存预留空间。
驱动与 CUDA
根据显卡型号选择对应的 NVIDIA 驱动,建议版本 550.xxx。安装完成后在终端输入 nvidia-smi 验证,若能看到 GPU 信息表则说明成功。
接着安装 CUDA Toolkit。根据驱动支持的 CUDA 版本(如 12.4),从 NVIDIA 官网下载对应安装包。以 deb 包为例:
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 版本匹配(CUDA 12.4 对应 cuDNN 8.9.2)。下载 deb 包后执行类似命令安装即可。
Python 环境与 PyTorch
推荐使用 Anaconda 管理环境。创建虚拟环境后,根据 CUDA 版本在 PyTorch 官网获取安装指令。例如 CUDA 12.4 对应 PyTorch 2.4.0:
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 4.5 版本是 Isaac Lab 的基础。通过 pip 安装时注意指定 extra-index-url:
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
首次运行会提示接受 EULA,输入 Yes 即可。随后拉取 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。
机器人注册
模型导入
将 SolidWorks 导出的 URDF 文件在 Isaac Sim 中通过 File -> Import -> Import URDF 转换。生成 USD 文件后保存至指定目录。若是移动机器人,务必勾选可动基座选项。若导入卡住,检查 STL 路径格式,建议将 package://... 替换为绝对或相对路径。
参数配置
进入 Isaac Lab 任务配置目录,复制现有机器人配置(如 H1)并重命名为你的机器人名称(例如 OP3)。需要修改的核心文件包括机器人定义、环境配置及训练参数。
机器人参数文件 (op3.py)
这里定义了机器人的物理属性、初始状态及关节限制。注意替换为你的 USD 路径,并根据实际 URDF 调整关节名称表达式。
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=f"xxx/op3.usd", # 替换为你前面导出的机器人 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), # 机器人初始位置,具体高度可由脚本 check_op3.py 查看
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,
".*_sho_pitch": 0.0,
".*_sho_roll": 0.0,
".*_el": 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,},
),
"arms": ImplicitActuatorCfg(
joint_names_expr=[".*_sho_pitch", ".*_sho_roll", ".*_el"],
effort_limit_sim=20,
velocity_limit_sim=20.0,
stiffness={"._sho_pitch": 100.0, ".*_sho_roll": 100.0, ".*_el": 100.0,},
damping={"._sho_pitch": 20.0, ".*_sho_roll": 20.0, ".*_el": 20.0,},
),
"head": ImplicitActuatorCfg(
joint_names_expr=["head_pan", "head_tilt"],
effort_limit_sim=20,
velocity_limit_sim=20.0,
stiffness={"head_pan": 100.0, "head_tilt": 100.0,},
damping={"head_pan": 20.0, "head_tilt": 20.0,},
),
},
)
基座高度检查脚本 (check_op3.py)
在正式训练前,建议先运行此脚本观察机器人落地后的实际高度,以便调整 init_state 中的 Z 轴坐标。
环境配置
速度跟踪任务主要涉及两个配置文件:复杂地形 (rough_env_cfg.py) 和平地 (flat_env_cfg.py)。
复杂地面环境 在此配置中,我们启用了地形生成器和随机化事件(如推搡、质量扰动),这能显著提升策略的鲁棒性。重点在于奖励函数的设计,鼓励步态交替飞行时间,惩罚脚部滑动和关节极限。
# rough_env_cfg.py 核心片段示例
@configclass
class OP3Rewards(RewardsCfg):
termination_penalty = RewTerm(func=mdp.is_terminated, weight=-200.0)
track_lin_vel_xy_exp = RewTerm(func=mdp.track_lin_vel_xy_yaw_frame_exp, weight=1.0, params={"command_name":"base_velocity","std":0.5})
feet_air_time = RewTerm(func=mdp.feet_air_time_positive_biped, weight=0.25, params={"command_name":"base_velocity","sensor_cfg": SceneEntityCfg("contact_forces", body_names=".*ank_roll_link"),"threshold":0.4,})
平地环境 简化了地形和观测,适合快速验证基础运动能力。只需继承复杂地形配置并关闭地形生成器即可。
训练环境注册
在 __init__.py 中注册 Gym 环境 ID,区分训练模式 (train) 和测试模式 (Play)。训练模式开启多环境并行和课程学习,测试模式则关闭随机扰动便于调试。
gym.register(id="Rough-OP3-train", entry_point="isaaclab.envs:ManagerBasedRLEnv", disable_env_checker=True, kwargs={"env_cfg_entry_point":f"{__name__}.rough_env_cfg:OP3RoughEnvCfg", ...})
训练与测试
启动训练
完成所有配置后,进入 Isaac Lab 根目录执行训练命令。这里以 RSL-RL 框架为例,针对平地环境训练 3000 轮:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Flat-OP3-train --max_iterations 3000 --seed 42 --headless
如需查看可用参数,可添加 -h 标志。训练日志默认保存在 logs/rsl_rl/ 目录下。
模型测试
训练结束后,在日志文件夹中找到最新的 .pt 权重文件。使用 Play 模式加载该权重进行可视化测试:
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/play.py --task Flat-OP3-Play --checkpoint /path/to/model_2999.pt
此时应能看到机器人在仿真环境中稳定行走。如果表现不佳,可尝试调整奖励权重或增加训练迭代次数。


