robot_lab之scripts篇------issac lab时代适合四足的强化学习框架
摘要 robot_lab是一个基于IsaacLab的机器人强化学习扩展库,提供独立开发环境。核心功能包括: 模块化架构: 支持多种机器人类型(四足/轮式/人形) 包含完整的MDP组件(奖励函数、命令生成、观测空间等) 提供课程学习机制 主要特性: 内置Unitree和FFTAI系列机器人配置 集成AMP工具和RSL RL框架 支持实时控制演示和模型导出 优势: 独立于IsaacLab核心代码库开发
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转USDlist_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)
…详情请参照古月居
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)