本文仅为个人学习笔记,文章参考请见参考资料部分,主要目的是进行多场景并行仿真测试,笔记中大部分内容都是针对于这个目标。
参考资料
https://github.com/isaac-sim/IsaacLab
一. Gym, Sim, Lab 之间的关系
Isaac Gym [MWG+21] 提供了一个高性能的基于GPU的机器人学习物理模拟器。它建立在 PhysX 之上,支持GPU加速的刚体模拟和用于直接访问物理模拟数据的Python API。通过端到端的GPU pipeline,相对于基于CPU的物理引擎,可以实现高帧率。该工具已成功应用于许多研究项目中,包括: 四足动物行走 [RHRH22] [RHBH22] 、手中操作 [HAM+22] [AML+22] 和工业装配 [NSA+22] 。
尽管Isaac Gym很成功,但它不是为机器人学习而设计的通用模拟器。例如,它不包括可变形和刚性对象之间的交互,高保真度渲染以及ROS的支持。该工具主要是作为预览版发布,以展示底层物理引擎的功能。随着 Isaac Sim 的发布,NVIDIA正在构建通用的机器人模拟器,并将Isaac Gym的功能集成到Isaac Sim中。
Isaac Sim 是一个构建在Omniverse之上的机器人模拟工具包,Omniverse是旨在统一复杂3D工作流的通用平台。Isaac Sim利用最新的图形和物理模拟技术,为机器人提供高保真度的模拟环境。它支持ROS/ROS2、各种传感器模拟、域随机化和合成数据创建工具。Isaac Sim中的分块渲染支持在环境中进行矢量化渲染,并支持使用 Isaac Automator 在云中运行。总的来说,它是机器人学家的一个强大工具,是机器人模拟领域的一个重要进步。
随着以上两个工具的发布,NVIDIA还发布了一个名为 IsaacGymEnvs 和 OmniIsaacGymEnvs 的开源环境集,它们是分别建立在Isaac Gym和Isaac Sim之上。这些环境旨在展示底层模拟器的功能,并为了解模拟器用于机器人学习的可能性提供了一个起点。这些环境可用于基准测试,但不适用于开发和测试定制环境和算法。这就是Isaac Lab的作用所在。
Isaac Lab建立在Isaac Sim之上,为机器人学习提供一个统一且灵活的框架,利用最新的模拟技术。它被设计成模块化和可扩展的,旨在简化机器人研究中常见的工作流程(如RL、基于演示的学习和运动规划)。尽管它包含一些预先构建的环境、传感器和任务,但它的主要目标是提供一个开源的、统一的、易于使用的界面,用于开发和测试定制环境和机器人学习算法。它不仅继承了Isaac Sim的功能,还添加了一些与机器人学习研究相关的新功能。例如,在模拟中包括执行器动力学、程序地形生成和支持从人类演示中收集数据。
Isaac Lab取代了以前的 IsaacGymEnvs 、 OmniIsaacGymEnvs 和 Orbit 框架,将成为Isaac Sim的单一机器人学习框架。之前发布的框架已被弃用,我们鼓励用户按照我们的 迁移指南 完成迁移工作。
Isaac Sim 为闭源状态,用户很难为模拟器做出贡献并构建一个共同的研究框架。Isaac Lab提供了一个开源平台,让社区能够以集中的努力推动进步,共同设计基准和机器人学习系统。这使我们能够重复使用现有的组件和算法,并在彼此的工作基础上进行开发。这样不仅节省了时间和精力,还让我们能够专注于研究的更重要方面。我们希望Isaac Lab成为机器人学习研究的事实标准平台,并成为一个利用Isaac Sim的环境 动物园 (即多样化的环境)。随着该框架的成熟,我们预见它将大量受益于NVIDIA内部和合作伙伴的最新仿真进展以及机器人技术领域的研究。
二. Isaac Lab 安装
我是远程服务器安装 lab ,因为这个docker是直接依赖于isaac sim docker的镜像,所以先安装 Isaac Sim 的 docker。
接下来找一个地方放 isaac lab 的文件
git clone https://github.com/isaac-sim/IsaacLab.git
这里我使用X11方式,X11 转发是一种机制,允许图形用户界面(GUI)应用程序在远程机器上运行,而显示在本地机器上。
安装的太大太慢可以加清华源或者找代理
vi ./docker/Dockerfile.base
在里面找到
RUN --mount=type=cache,target=${DOCKER_USER_HOME}/.cache/pip \
${ISAACLAB_PATH}/isaaclab.sh --install
后面加一个ENV+你的代理内容
指定安装 lab 4.1.0版本,因为我的 isaacsim 镜像的是4.1.0
ISAACSIM_BASE_IMAGE=nvcr.io/nvidia/isaac-sim ISAACSIM_VERSION=4.1.0 ./docker/container.py start
安装完成后输出以下类似内容:
测试后发现这种安装方式会导致一些东西安装失败,需要将刚刚加入的env内容删去再重新运行一遍,补充安装失败的部分
启动:
# Enter the container
# We pass 'base' explicitly, but if we hadn't it would default to 'base'
./docker/container.py enter base
python docker/container.py enter
测试:
isaaclab -p source/standalone/tutorials/00_sim/log_time.py --headless
停止:
# stop the container
./docker/container.py stop
三.Isaac Lab 使用
任务设计工作流
- 基于管理器的环境创建基于管理器的强化学习环境 — Isaac Lab 文档
- 直接式的环境创建直接工作流RL环境 — Isaac Lab 文档
关节系统/关节驱动
现实中常说的驱动,在仿真中可以等于驱动关节,也称为自由度(DOF)。在物理系统中,驱动通常通过主动组件进行,例如电动或液压马达,或通过被动组件,例如弹簧。这些组件可能会引入某些非线性特性,包括延迟或最大可产生的速度或扭矩。
在仿真中,关节可以是位置控制、速度控制或扭矩控制。对于位置和速度控制,物理引擎内部实现了一个弹簧-阻尼(PD)控制器,用于计算作用在执行关节上的扭矩。在扭矩控制中,命令直接设置为关节力。虽然这模拟了关节机制的理想行为,但并不能真实地模拟驱动器在现实世界中的工作方式。因此,我们提供了一个机制来注入外部模型,以计算关节命令,以代表物理机器人的行为。
3个自由度:指一个物体在空间中可以进行的三种独立运动。这些运动可以分为 线性运动 和 旋转运动,具体取决于所研究的系统和约束条件。
(线性三自由度)如果一个物体仅限于在三维空间中进行平移(没有旋转),则其自由度是三个,每个方向对应一个自由度:
- X 方向的平移:沿水平轴(左右方向)的运动。
- Y 方向的平移:沿垂直轴(前后方向)的运动。
- Z 方向的平移:沿深度轴(上下方向)的运动。
(旋转三自由度)如果一个物体固定在某点(如悬挂在一个固定点上),则它只能围绕该点旋转,具有三个旋转自由度:
- 绕 X 轴的旋转(滚动,Roll):物体绕水平轴旋转。
- 绕 Y 轴的旋转(俯仰,Pitch):物体绕垂直轴旋转。
- 绕 Z 轴的旋转(偏航,Yaw):物体绕深度轴旋转。
(组合三自由度)在某些情况下,三自由度可以是线性运动和旋转运动的组合。例如:
- 一个平面内的运动(如机器人臂末端在一个平面内移动)可能包含两个线性运动和一个旋转运动。
- 某些机械系统可能通过两平移加一旋转的方式实现三自由度。
传感器
每个传感器在 Isaac Lab 中都继承自 SensorBase
抽象类。这个 update_period
是以 “模拟” 秒为单位定义的,这意味着即使仿真中的时间流逝相对于现实世界有所延迟,传感器也会以适当的速率更新。
传感器类别中的光线投射传感器其实通俗意义上讲就是激光雷达的上层概括说法。单位是度。
坐标系转换器
坐标系转换:在任意欧几里得坐标系的基底下重写向量或四元数。在 Isaac Sim 和 USD 文件中有很多方式来进行坐标系转换,但在 Isaac Lab 的基于 GPU 的仿真和克隆环境中实现这些方法可能会显得繁琐。于是有了坐标系转换传感器,能够跟踪并计算场景中感兴趣的刚体的相对坐标系转换。
可用环境中没有轮式机器人呢。(操作臂、四足运动任务、宇树科技的机器人及机器狗、导航任务用的ANYmal C机器人、Crazyfie无人机、倒立摆问题测试机器人、还有一些综合环境等lab下载好了看看)
强化学习
有点感兴趣,但暂时用不到,等过一阵回来玩
多GPU、多节点进行强化学习训练多GPU和多节点训练 — Isaac Lab 文档
场景演示
创建和生成具有不同配置的程序生成地形
./isaaclab.sh -p source/standalone/demos/procedural_terrain.py
Hydra配置系统
以通过命令行参数修改任务的配置,这对于自动化实验和执行超参数调整非常有用。