0. 简介

robot_lab是一个基于IsaacLab的机器人强化学习扩展库。它使您能够在一个独立的环境中进行开发,而无需依赖核心的Isaac Lab代码库。

1. robot_lab 项目结构与功能解析

根据提供的目录结构和代码片段,这是一个基于 Isaac Lab 强化学习框架的机器人控制项目,主要用于训练不同类型的机器人(四足、轮式、人形等)进行运动控制任务。

1.1 主要文件夹结构

1.1.1 robot_lab

主要源代码目录,包含以下结构:

  • robot_lab/ - 主要Python包

    • init.py - 包初始化文件,注册环境和UI扩展
    • ui_extension_example.py - UI扩展示例
    • assets/ - 资产配置
      • init.py - 定义数据路径等常量
      • unitree.py - Unitree系列机器人配置(A1、Go2、B2等)
      • fftai.py - FFTAI系列机器人配置
    • tasks/ - 任务实现
      • locomotion/velocity/ - 基于速度的运动控制任务
        • mdp/ - MDP(马尔可夫决策过程)组件
          • rewards.py - 奖励函数定义
          • commands.py - 命令生成器
          • events.py - 事件处理
          • observations.py - 观察空间定义
          • curriculums.py - 课程学习组件
        • config/ - 不同机器人配置
          • quadruped/ - 四足机器人配置
          • wheeled/ - 轮式机器人配置
          • humanoid/ - 人形机器人配置
    • third_party/ - 第三方工具和库
      • amp_utils/ - Adversarial Motion Priors工具
      • rsl_rl_amp/ - RSL RL AMP扩展
  • config/ - 扩展配置

    • extension.toml - 扩展元数据配置
  • data/ - 机器人数据

    • Robots/ - 机器人模型
      • Unitree/ - Unitree公司机器人
        • A1/, B2/, Go2/, B2W/, Go2W/ - 不同型号
      • FFTAI/ - FFTAI公司机器人

1.1.2 scripts

训练和工具脚本:

  • rsl_rl/ - RSL强化学习框架脚本

    • cli_args.py - 命令行参数处理
    • rsl_rl_utils.py - 工具函数
    • amp/ - AMP相关脚本
      • play.py - 播放训练模型
      • replay_amp_data.py - 重放AMP数据
      • train.py - 训练AMP模型
    • base/ - 基础RL训练脚本
      • play.py - 播放训练模型
      • train.py - 训练基础模型
  • tools/ - 工具脚本

    • clean_trash.py - 清理无用日志
    • convert_urdf.py - URDF转USD
    • list_envs.py - 列出可用环境
    • train_batch.py - 批量训练脚本

1.2 核心模块详解

1.2.1 MDP组件 (tasks/locomotion/velocity/mdp/)

这是项目的核心部分,定义了强化学习环境的关键组件:

rewards.py - 奖励函数

提供各种奖励函数,例如:

  • track_lin_vel_xy_exp - 奖励跟踪线性速度命令
  • track_ang_vel_z_exp - 奖励跟踪角速度命令
  • feet_air_time - 奖励足部在空中的时间
  • feet_slide - 惩罚足部滑动
  • joint_pos_penalty - 惩罚关节偏离默认位置
  • flat_orientation_l2 - 奖励保持平坦姿态
  • GaitReward - 步态奖励类

每个奖励函数针对机器人运动的特定方面,例如姿态稳定性、命令跟踪精度、能量效率等。

commands.py - 命令生成
  • UniformThresholdVelocityCommand - 从均匀分布生成带阈值的速度命令
  • DiscreteCommandController - 离散命令控制器

这些组件负责生成机器人控制命令,例如目标速度、方向等。

observations.py - 观察空间

定义观察空间函数:

  • joint_pos_rel_without_wheel - 获取非轮式关节相对位置
  • phase - 计算相位信息

这些函数提供强化学习策略所需的状态信息。

events.py - 事件处理

提供事件处理函数:

  • randomize_rigid_body_inertia - 随机化刚体惯性
  • randomize_com_positions - 随机化质心位置

这些函数用于环境域随机化,增强策略的鲁棒性。

curriculums.py - 课程学习
  • command_levels_vel - 基于表现逐步增加命令复杂度
  • terrain_levels_vel - 基于表现逐步增加地形复杂度

2. amp/play.py

这段代码是一个用于在Isaac sim环境中运行预训练强化学习策略的演示脚本,支持实时控制、视频录制和模型导出

2.1 环境配置与初始化

2.1.1 配置解析

# 解析环境和智能体配置
env_cfg = parse_env_cfg(
    args_cli.task,                  # 任务名称(如"anymal_d"四足机器人行走)
    device=args_cli.device,         # 计算设备("cuda:0"/"cpu")
    num_envs=args_cli.num_envs,     # 并行环境数量
    use_fabric=not args_cli.disable_fabric  # 是否启用Fabric加速库
)
agent_cfg: RslRlOnPolicyRunnerCfg = cli_args.parse_rsl_rl_cfg(args_cli.task, args_cli)

2.1.2 环境参数调整

为了优化演示体验和计算资源,脚本调整了以下关键参数:

# 调整环境参数
env_cfg.scene.num_envs = 50  # 减少并行环境数量
env_cfg.scene.terrain.max_init_terrain_level = None  # 禁用地形难度课程学习
# 减少地形数量以节省内存
if env_cfg.scene.terrain.terrain_generator is not None:
    env_cfg.scene.terrain.terrain_generator.num_rows = 5
    env_cfg.scene.terrain.terrain_generator.num_cols = 5
    env_cfg.scene.terrain.terrain_generator.curriculum = False
# 禁用随机化和干扰
env_cfg.observations.policy.enable_corruption = False
env_cfg.events.randomize_apply_external_force_torque = None
env_cfg.events.push_robot = None

2.2 交互控制机制

2.2.1 键盘控制集成

当启用键盘控制模式时,脚本重新配置环境以支持实时用户输入:

if args_cli.keyboard:
    env_cfg.scene.num_envs = 1  # 仅创建一个环境实例
    env_cfg.terminations.time_out = None  # 禁用超时终止
    env_cfg.commands.base_velocity.debug_vis = False
    # 创建SE2平面控制器(前进/侧向/旋转)
    controller = Se2Keyboard(
        v_x_sensitivity=env_cfg.commands.base_velocity.ranges.lin_vel_x[1],
        v_y_sensitivity=env_cfg.commands.base_velocity.ranges.lin_vel_y[1],
        omega_z_sensitivity=env_cfg.commands.base_velocity.ranges.ang_vel_z[1],
    )
    # 将键盘输入注入到观测空间
    env_cfg.observations.policy.velocity_commands = ObsTerm(
        func=lambda env: torch.tensor(controller.advance(), dtype=torch.float32).unsqueeze(0).to(env.device),
    )

2.3 模型加载与恢复

2.3.1 检查点路径确定

系统支持三种模型加载方式,按优先级排序:

# 1. 使用预训练官方模型
if args_cli.use_pretrained_checkpoint:
    resume_path = get_published_pretrained_checkpoint("rsl_rl", args_cli.task)
    if not resume_path:
        print("[INFO] Unfortunately a pre-trained checkpoint is currently unavailable for this task.")
        return
# 2. 使用用户指定的模型路径
elif args_cli.checkpoint:
    resume_path = retrieve_file_path(args_cli.checkpoint)
# 3. 从训练日志中自动选择最新检查点
else:
    resume_path = get_checkpoint_path(log_root_path, agent_cfg.load_run, agent_cfg.load_checkpoint)

2.3.2 环境创建与包装

# 创建基础环境
env = gym.make(args_cli.task, cfg=env_cfg, render_mode="rgb_array" if args_cli.video else None)

# 多智能体转单智能体适配(如需要)
if isinstance(env.unwrapped, DirectMARLEnv):
    env = multi_agent_to_single_agent(env)

# 视频录制包装器
if args_cli.video:
    video_kwargs = {
        "video_folder": os.path.join(log_dir, "videos", "play"),
        "step_trigger": lambda step: step == 0,
        "video_length": args_cli.video_length,
        "disable_logger": True,
    }
    env = gym.wrappers.RecordVideo(env, **video_kwargs)

# RSL-RL专用环境适配器
env = RslRlVecEnvWrapper(env)

…详情请参照古月居

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐