第二章、初识Isaac sim及Isaac lab(1)

第二章、初识Isaac sim及Isaac lab(1)

0 前言

官方网址:https://docs.isaacsim.omniverse.nvidia.com/latest/isaac_lab_tutorials/tutorial_policy_deployment.html#robot-setup
上一章已经安装了isaacsim及isaaclab,并初步运行了isaacsim及isaaclab中的部分demo。本章简单介绍isaacsim如何使用,以及isaaclab机器人学习框架。
注:该章旨在从大方向上了解框架,能做什么,并不对细节做叙述。

1 Isaac sim

我们仅了解Isaac sim的资产及机器人示例

Isaac sim的资产

1、进入Isaac sim的文件夹中,打开终端运行如下代码行:

./isaac-sim.sh

默认界面如下所示:
在这里插入图片描述
2、点击下图中红色框线位置可以看到Isaac sim中的资产信息(绿色框),单击资产(需要等待一会儿,请耐心~),右侧会弹出资产的详细信息,点击load as referenceopen file可以打开资产,前者是连接形式,后者是直接打开文件,此时可以通过file->save as...将资产保存到本地。
在这里插入图片描述在这里插入图片描述
Isaac sim的机器人示例

1、首先需要先把这部分功能显示窗调出来(其他的相关功能也在这里),点击Window->Examples->Robotics Examples 点击后会在下方绿色框
在这里插入图片描述2、按照下述1、2、3、4标号,依次点击就可以加载机器人示例,此处以一个简单示例为主,你可以尝试更多操作
在这里插入图片描述

2 Isaac lab

本文只叙述到环境参数文件部分后续内容将在 第二章、初识Isaac sim及Isaac lab(2)中继续
简介:Isaac Lab 是 Isaac Sim 的官方机器人学习框架,提供了API、强化学习、模仿学习等示例。该框架提供了在不同工作流程中设计任务的能力,包括模块化设计,可轻松高效地在模拟功能下创建机器人学习环境。

因此如果我们要用强化学习训练机器人运动,整个流程如下:

  • 基于平坦地形的运动策略控制宇树H1 人型机器人波士顿动力学Spot 四足机器人的demo(实际上是给出一个案例,这个案例表示我们如果有一个训练好的策略那么可以通过isaacsim+isaaclab做相关的演示)
  • 在Isaac lab中怎么训练及导出策略
  • 从Isaac lab读取环境参数文件
  • 机器人定义类
  • 位置到扭矩的转换
  • 如何进行调试
  • sim to real

1、基于Isaac sim演示,训练好的运动策略控制宇树H1 人型机器人波士顿动力学Spot 四足机器人运动。

宇树H1 人型机器人:Window->Examples->Robotics Examples 后从下方弹出窗口中Robotics Examples->POLICY->Humanoid->LOAD

注:与上面内容中的Isaac sim的机器人示例操作相同,如遇到问题可以看上面的叙述。

完成上述操作后界面中会出现一个人型机器人,此时你可以通过键盘操作机器人运动,具体按键如下:

  • 前进:向上箭头/数字键 8
  • 左转:左箭头/数字 4
  • 右转:右箭头/数字 6

在这里插入图片描述
波士顿动力学Spot 四足机器人:Window->Examples->Robotics Examples 后从下方弹出窗口中Robotics Examples->POLICY->Quadruped->LOAD

完成上述操作后界面中会出现一个四足机器人,此时你可以通过键盘操作机器人运动,具体按键如下:

  • 前进:向上箭头/数字键 8
  • 后退:后退箭头/数字 2
  • 向左移动:左箭头/数字 4
  • 向右移动:右箭头/数字 6
  • 左转:N / NUM 7
  • 右转:M / NUM 9
    在这里插入图片描述

2、在Isaac lab中怎么训练及导出策略

训练
从 Isaac Lab 训练策略是部署策略的第一步。后续会有 Isaac Lab 教程可以训练现有的demo或自定义策略网络。

上述示例中使用的训练策略是针对 Unitree H1 人形机器人的Isaac-Velocity-Flat-H1-v0和针对波士顿动力 Spot 机器人的Isaac-Velocity-Flat-Spot-v0 。

以宇树的人型机器人为例,进入到你的Isaac lab文件夹下,打开终端,在终端中运行下述代码:

# 进入虚拟环境
conda activate env_isaaclab
# 配置一下ISAACSIM环境
source /{你的路径}/IsaacLab/_isaac_sim/setup_conda_env.sh
# 运行代码
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Isaac-Velocity-Flat-H1-v0 --headless

注:现在已经开始训练模型了,你将会在同文件夹中看到一个新的文件夹名为logs,在logs/rsl_rl/<task_name>/<time>该地址下可以找到训练好的模型,以及智能体的策略网络,训练方法及环境参数(logs/rsl_rl/<task_name>/<time>/params/文件夹中)等信息。

导出
可以使用 Isaac Lab 工作区内的/scripts/reinforcement_learning/rsl_rl/play.py运行训练导出的策略。生成一个ONNX/pt文件。

# 进入虚拟环境
conda activate env_isaaclab
# 配置一下ISAACSIM环境
source /{你的路径}/IsaacLab/_isaac_sim/setup_conda_env.sh
# 运行代码
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/play.py --task Isaac-Velocity-Flat-H1-v0 --num_envs 32

3、从Isaac lab读取环境参数文件

在前述内容中我们已经了解到参数文件在logs/rsl_rl/<task_name>/<time>/params/文件夹中,接下来将简单分析该文件加下红色框标记中的文件内容。
(注:在该部分我们需要对)
在这里插入图片描述1、agent.yaml

2、env.yaml

Simulation Setup (模拟环境的描述)

sim:
physics_prim_path: /physicsScene
# 指定物理场景在isaac sim中物理属性(PhysicsScene)的Prim Path
# Prim Path 在 USD 场景树中的唯一路径标识
# 格式:/根节点/子节点/子子节点
# 以 / 开头表示绝对路径(从场景根目录开始)
# 示例:/World/PhysicsScene/Robot/Arm 表示一个机器人的手臂部件。
dt: 0.005
# 设置物理仿真步长(时间增量):
#1、单位:秒
#2、每 0.005 秒进行一次物理计算
#3、对应 200 Hz 的物理更新频率 (1/0.005 = 200)
render_interval: 4
# 控制渲染帧率与物理更新的比例关系
gravity: !!python/tuple
- 0.0
- 0.0
- -9.81
#设置三维重力加速度向量:
#1、格式:(X, Y, Z) 单位:m/s²
#2、此处 (0, 0, -9.81) 表示标准地球重力(垂直向下)
#3、设置为 (0,0,0) 可模拟无重力环境
enable_scene_query_support: false
# 是否启用场景查询功能
#1、场景查询用于射线检测、碰撞检测等
#2、禁用此功能可提升性能,但会失去物理场景的查询能力
use_fabric: true
# 是否使用fabric物理系统
#1、启用后支持布料、柔性体等软体物理模拟
#2、需要与物理材质(Physics Material)配合使用
disable_contact_processing: true
# 是否禁用接触力处理
#1、禁用后不会计算物体间的接触力
#2、适用于仅需碰撞检测但不需要力反馈的场景
#3、可显著提升性能
use_gpu_pipeline: true
# 是否启用 GPU 加速
device: cuda:0
# 指定物理计算使用的硬件设备:cuda:0 表示使用第 1 块 NVIDIA GPU

Robot Setup(机器人的相关设定)
1、scene:robot:init_state描述了机器人的初始位置、方向、速度以及默认的关节位置和速度。

init_state:
  pos: !!python/tuple
  - 0.0
  - 0.0
  - 1.05
  # 设置实体在世界坐标系中的初始位置。
  #1、格式:(X, Y, Z),单位:米(m)
  #2、[0.0, 0.0, 1.05] 表示实体初始位于 X=0, Y=0, Z=1.05 处(通常为站立高度)
  rot: &id003 !!python/tuple
  - 1.0
  - 0.0
  - 0.0
  - 0.0
  # 设置实体的初始旋转姿态(四元数表示)
  #1、格式:(w, x, y, z),单位:无(标准化四元数)
  #2、[1.0, 0.0, 0.0, 0.0] 表示 无旋转(默认朝向)
  #3、若需调整姿态,可修改为其他四元数(如绕 Z 轴旋转 90°:[0.707, 0.0, 0.0, 0.707])
  lin_vel: &id001 !!python/tuple
  - 0.0
  - 0.0
  - 0.0
  # 设置初始线速度。
  #1、格式:(Vx, Vy, Vz),单位:米/秒(m/s)
  #2、[0.0, 0.0, 0.0] 表示初始静止
  ang_vel: *id001
  # 设置初始角速度。
  #1、格式:(ωx, ωy, ωz),单位:弧度/秒(rad/s)
  #2、*id001 是 YAML 锚点引用,等价于 [0.0, 0.0, 0.0](对应lin_vel: &id001 的值)
  #3、若需初始旋转,可单独设置(如 [0.0, 0.0, 1.0] 表示绕 Z 轴旋转)
  joint_pos:
    .*_hip_yaw: 0.0            # 髋关节偏航角(左右旋转)
    .*_hip_roll: 0.0           # 髋关节横滚角(侧倾)
    .*_hip_pitch: -0.28        # 髋关节俯仰角(前后摆动,-0.28弧度≈-16°)
    .*_knee: 0.79              # 膝关节角度(0.79弧度≈45°)
    .*_ankle: -0.52            # 踝关节角度(-0.52弧度≈-30°)
    torso: 0.0                 # 躯干关节(无动作)
    .*_shoulder_pitch: 0.28    # 肩部俯仰角(0.28弧度≈16°)
    .*_shoulder_roll: 0.0      # 肩部横滚角
    .*_shoulder_yaw: 0.0       # 肩部偏航角
    .*_elbow: 0.52             # 肘关节角度(0.52弧度≈30°)
  # 设置关节的初始位置(角度或线性位移)。
  #1、.* 是通配符,匹配左右对称关节(如 left_hip_yaw 和 right_hip_yaw)
  #2、单位:弧度(rad),正负号表示方向
  joint_vel:
    .*: 0.0
  # 设置所有关节的初始速度。
  #1、.*: 0.0 使用通配符将所有关节速度设为 0
  #2、单位:弧度/秒(rad/s)或 米/秒(m/s,线性关节)

2、scene:robot:init_state:actuators描述了机器人关节的特性,例如力度和速度限制、刚度和阻尼。(注:想详细了解该部分内容可以看PID控制)

actuators:
  legs:
    class_type: omni.isaac.lab.actuators.actuator_pd:ImplicitActuator
    joint_names_expr:
    - .*_hip_yaw
    - .*_hip_roll
    - .*_hip_pitch
    - .*_knee
    - torso
    # 通过正则表达式匹配目标关节。
    #1、.*_hip_yaw 匹配所有以 _hip_yaw 结尾的关节(如 left_hip_yaw, right_hip_yaw)。
    #2、torso 直接匹配名为 "torso" 的关节。
    effort_limit: 300
    # 关节最大输出力矩/力。
    #1、牛·米(Nm,旋转关节)或 牛(N,线性关节)。
    velocity_limit: 100.0
    # 关节最大允许速度。
    #1、弧度/秒(rad/s,旋转关节)或 米/秒(m/s,线性关节)。
    stiffness:
      .*_hip_yaw: 150.0
      .*_hip_roll: 150.0
      .*_hip_pitch: 200.0
      .*_knee: 200.0
      torso: 200.0
    damping:
      .*_hip_yaw: 5.0
      .*_hip_roll: 5.0
      .*_hip_pitch: 5.0
      .*_knee: 5.0
      torso: 5.0
    # 定义 PD 控制的比例(刚度)和微分(阻尼)系数。
    armature: null
    # 电枢惯性补偿(通常指电机转子惯性)。
    friction: null
    # 关节摩擦系数(静态+动态摩擦)。

Observations Parameters(观测参数)
该配置定义了强化学习策略网络(Policy)输入观测数据的 构建规则,包括特征提取方式、噪声注入策略和数据后处理方法。

observations:
    policy:
        concatenate_terms: true
        # 是否将所有观测项拼接为单一向量。
        #1、true:将多个观测项(如 base_lin_vel、关节角度等)合并为一个一维张量,作为策略输入
        #2、false:保持观测项为字典结构,需策略网络自行处理多模态输入。
        enable_corruption: true
        # 是否对观测数据添加噪声或扰动。
        #1、true:在训练时注入噪声,提升策略鲁棒性(类似 域随机化)。
        #2、false:使用原始观测数据,适合确定性环境验证。
        base_lin_vel:
        func: omni.isaac.lab.envs.mdp.observations:base_lin_vel
        params: {}
        # 定义如何获取基础线速度观测值。
        #1、func:指定数据提取函数:base_lin_vel 函数通常返回机器人基座在 世界坐标系 中的线速度 (vx, vy, vz)。
        #2、params: {}:函数调用时的额外参数(此处为空表示使用默认参数)。
        noise:
            func: omni.isaac.lab.utils.noise.noise_model:uniform_noise
            operation: add
            n_min: -0.1
            n_max: 0.1
        # 为观测值添加均匀分布噪声。
        #1、func:噪声生成函数,此处为均匀分布噪声。
        #2、operation:噪声施加方式:
        #          add:加法噪声 obsnoisy=obs+noiseobsnoisy​=obs+noise
        #          multiply:乘法噪声 obsnoisy=obs×(1+noise)obsnoisy​=obs×(1+noise)
        #3、n_min 与 n_max:均匀分布的上下界,此处为 ±0.1 m/s。
        clip: null
        # 限制观测值的取值范围。
        #1、clip: [-5.0, 5.0]:将观测值裁剪到 [-5, 5] 区间。
        #2、null:不进行裁剪。
        scale: null
        # 对观测值进行缩放。
        #1、scale: 0.1:将观测值乘以 0.1(缩小 10 倍)。
        #2、null:保持原始数值范围。

Actions Parameters(动作参数)
该部分代码定义了一个关节位置动作(JointPositionAction),用于控制机器人(robot)的关节运动。

actions:
    joint_pos:
        class_type: omni.isaac.lab.envs.mdp.actions.joint_actions:JointPositionAction
        # 指定了动作的类型为 JointPositionAction,这是一个用于控制关节位置的动作类。
        # 它来自 omni.isaac.lab.envs.mdp.actions.joint_actions 模块。
        asset_name: robot
        # 指定了该动作应用于名为 robot 的资产(即机器人)。这意味着该动作将控制 robot 的关节。
        debug_vis: false
        # 设置是否启用调试可视化。false 表示不启用调试可视化功能。如果设置为 true,可能会在仿真中显示关节运动的可视化信息,用于调试。
        joint_names:
        - .*
        # 指定了要控制的关节名称列表。这里使用正则表达式 .* 表示匹配所有关节。这意味着该动作将控制 robot 的所有关节。
        scale: 0.5
        # 设置动作的缩放因子。0.5 表示动作的输出值会被缩放为原来的 50%。例如,如果动作的输出值为 1.0,经过缩放后实际应用的值为 0.5。
        offset: 0.0
        # 设置动作的偏移量。0.0 表示没有额外的偏移量。如果设置为其他值,动作的输出值会加上该偏移量。
        use_default_offset: true
        # 设置是否使用默认的关节偏移量。true 表示使用默认的关节偏移量。默认偏移量通常是关节的初始位置或中性位置。
        # 如果设置为 false,则忽略默认偏移量,仅使用 offset 参数指定的值。

Commands Parameters(命令参数)
该配置定义了机器人 基座速度命令 的生成方式,包括线速度、角速度及朝向控制参数。这些命令通常用于强化学习任务中的 目标设定 或 运动控制。

commands:
    base_velocity:
        class_type: omni.isaac.lab.envs.mdp.commands.velocity_command:UniformVelocityCommand
        # 指定速度命令生成器的类型为UniformVelocityCommand。
        #1、UniformVelocityCommand:从均匀分布中随机生成速度命令。
        #2、适用于训练机器人适应不同速度需求的任务(如导航、避障)。
        #3、其他类型:FixedVelocityCommand(固定速度)、WaypointCommand(路径点跟踪)。
        resampling_time_range: !!python/tuple
        - 10.0
        - 10.0
        # 定义速度命令的 重采样时间间隔。
        #1、格式:(min_time, max_time),单位:秒(s)。
        #2、[10.0, 10.0] 表示每 10 秒 重新生成一次速度命令。
        #3、若需动态调整,可设为范围(如 [5.0, 15.0])。
        debug_vis: true
        # 是否启用命令的 可视化调试。
        #1、true:在仿真环境中显示目标速度向量或朝向箭头。
        asset_name: robot
        # 指定速度命令应用的机器人对象。
        heading_command: true
        # 是否启用朝向控制。
        #1、true:生成目标朝向角(yaw),机器人需调整姿态以匹配。
        #2、false:仅控制线速度和角速度。
        heading_control_stiffness: 0.5
        # 朝向控制的刚度系数。
        #1、值越大,机器人朝向调整越快
        rel_standing_envs: 0.02
        # 设置静止状态 的环境比例。
        #1、0.02 表示 2% 的环境生成零速度命令(机器人保持静止)。
        #2、用于训练机器人从静止状态启动的能力。
        rel_heading_envs: 1.0
        # 设置 启用朝向控制 的环境比例。
        #1、1.0 表示所有环境均启用朝向控制。
        #2、若设为 0.5,则 50% 的环境仅控制速度,不调整朝向。
        ranges:
            lin_vel_x: !!python/tuple                 # X 轴线速度范围
            - 0.0
            - 1.0
            lin_vel_y: *id006                         # Y 轴线速度范围(引用其他值)
            ang_vel_z: !!python/tuple                 # Z 轴角速度范围
            - -1.0
            - 1.0
            heading: !!python/tuple                   # 目标朝向角范围
            - -3.141592653589793
            - 3.141592653589793
         # 定义速度命令的随机生成范围。
         #1、lin_vel_x:X 轴线速度(前进/后退),单位:m/s。
         #2、lin_vel_y:Y 轴线速度(侧向移动),单位:m/s。
         #3、ang_vel_z:Z 轴角速度(旋转),单位:rad/s。
         #4、heading:目标朝向角(yaw),单位:rad,范围 [-π, π]。
<think>好的,我现在需要处理用户关于安装IsaacLab的查询。首先,用户提供了系统级指令,要求用中文回答,并生成相关问题。用户还提到了引用标识,所以要注意引用来源。用户的问题集中在安装教程或设置指南上,他们可能遇到了安装过程中的常见问题,需要详细的步骤说明。 首先,我要回顾用户提供的引用内容。引用[1]提到了克隆GitHub仓库、安装cmake和build-essential,然后运行安装脚本。我需要确保这些步骤正确无误,并且按照逻辑顺序排列。同时,用户可能需要更多的细节,比如如何验证安装是否成功,或者如何处理可能的错误。 接下来,我需要检查是否有遗漏的步骤。例如,用户可能需要先安装Git才能克隆仓库,或者安装其他依赖项。不过根据引用内容,安装cmake和build-essential可能已经足够,但可能需要确认这些依赖是否覆盖所有必要组件。另外,运行脚本时可能需要权限,所以使用sudo的可能性也要提及。 用户的问题可能还涉及环境配置,比如Python虚拟环境或者CUDA支持,尤其是如果IsaacLab需要GPU的话。不过引用中没有提到这些,可能需要根据常识补充,但如果没有明确的信息,可能需要避免假设,或者建议用户参考官方文档。 生成相关问题方面,应该围绕安装过程中可能遇到的常见问题,比如依赖项安装失败、脚本执行权限、网络问题导致克隆失败,以及如何验证安装成功。此外,用户可能对系统要求或后续的使用示例感兴趣。 需要确保回答结构清晰,分步骤说明,每个步骤都有对应的命令和解释。例如,第一步克隆仓库,第二步安装依赖,第三步运行安装脚本。可能还需要提醒用户检查系统版本,如Ubuntu的版本是否符合要求,或者是否有足够的存储空间。 另外,用户可能遇到权限问题,比如运行脚本时是否需要sudo,或者在安装依赖时是否需要更新包列表。需要指出这些细节,帮助用户顺利执行命令。 最后,要确保所有LaTeX格式正确,虽然安装步骤中可能不涉及数学公式,但如果有版本号或其他需要强调的地方,可能需要使用行内格式。例如,提及Python版本时用$Python 3.8$,但这里可能不需要,保持自然即可。 总结步骤: 1. 克隆GitHub仓库:确保用户安装了Git,或者指导如何安装。 2. 安装依赖项:确认cmake和build-essential的安装命令正确,是否需要sudo权限。 3. 运行安装脚本:说明脚本的位置和执行方式,是否需要添加可执行权限。 4. 验证安装:如何检查是否安装成功,例如运行示例或查看输出信息。 5. 常见问题处理:如遇到错误如何解决,例如依赖缺失、网络问题等。 生成的问题要围绕安装过程的问题、依赖项、验证方法、系统要求等,帮助用户进一步解决可能遇到的困难。</think>### IsaacLab 安装教程 以下是基于引用内容的安装步骤: 1. **克隆仓库** 打开终端并执行: ```bash git clone https://github.com/isaac-sim/IsaacLab.git ``` 此命令会将仓库下载到本地当前目录[^1]。 2. **安装系统依赖** 安装编译工具链: ```bash sudo apt update sudo apt install cmake build-essential ``` `build-essential` 包含 GCC/G++ 等编译工具,`cmake` 用于构建项目[^1]。 3. **执行安装脚本** 进入仓库目录并运行安装脚本: ```bash cd IsaacLab ./isaaclab.sh --install ``` 如果脚本无执行权限,需先添加权限: ```bash chmod +x isaaclab.sh ``` 4. **验证安装** 安装完成后,可通过运行示例程序或检查输出日志确认是否成功。若脚本未报错且生成`build`目录,通常表示安装完成。 --- ### 常见问题解答 **Q1: 安装时提示缺少依赖项怎么办?** 确保已执行 `sudo apt update` 更新软件包列表,并检查是否遗漏 `cmake` 或 `build-essential`。 **Q2: 克隆仓库速度慢或失败?** 可尝试更换 Git 远程地址为 HTTPS 代理,或使用 SSH 方式克隆: ```bash git clone git@github.com:isaac-sim/IsaacLab.git ``` **Q3: 安装脚本权限被拒绝?** 通过 `chmod +x isaaclab.sh` 赋予脚本可执行权限后再运行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值