NVIDIA英伟达嵌入式系统 · 6月24日 · 北京市

消除仿真与现实之间的差距:使用 NVIDIA Isaac Lab 训练 Spot 四足机器人运动

640.png
由于涉及复杂的动力学,为四足机器人制定有效的运动策略是机器人领域面临的重大挑战。在现实世界中训练四足机器人上下楼梯可能会损坏设备和环境,因此,在学习过程中,仿真器在确保安全和消除时间限制方面都发挥着关键作用。

利用深度强化学习(RL)在仿真环境中训练机器人,这样可以更有效、更安全地执行复杂任务。然而,这种方法带来了一个新的挑战:如何确保在仿真环境中训练的策略能够无缝地切换到现实世界。换句话说,我们如何缩小仿真与现实之间的差距?

要缩小仿真与现实之间的差距,需要一个高保真、基于物理的训练仿真器、一台高性能 AI 计算机(如 NVIDIA Jetson)以及一个具有关节级控制能力的机器人。强化学习研究工具包是波士顿动力公司、NVIDIA 和波士顿动力人工智能研究所合作开发的,它整合了上述能力,实现了四足机器人从虚拟世界到现实世界的无缝部署。它包括 Spot 四足机器人的关节级控制 API(用于控制机器人如何运动)、NVIDIA Jetson AGX Orin 有效载荷运行策略所需的安装硬件(AGX Orin 单独出售),以及在 NVIDIA Isaac Lab 中为 Spot 提供的仿真环境。

Isaac Lab 是一个基于 NVIDIA Isaac Sim 平台开发的轻量级参考应用程序,专为大规模机器人学习进行了优化。它利用 GPU 并行化进行大规模物理并行仿真,以提高最终的策略效果,并减少机器人强化学习的训练时间。凭借其高保真物理和域随机化功能,Isaac Lab 弥合了仿真与现实的差距,使经过训练的模型能够通过零样本无缝部署到物理机器人上。要了解更多信息,请参阅 NVIDIA Isaac Sim 4.0 和 NVIDIA Isaac Lab 为机器人工作流和仿真提供强大助力。

本文解释了如何在 Isaac Sim 和 Isaac Lab 中为 Spot 四足机器人创建运动强化学习策略,并使用强化学习研究工具包中的组件在硬件上部署。

在 Isaac Lab 中训练四足机器人运动

本章节介绍了如何在 Isaac Lab 中训练运动强化学习策略。

640.jpg
图 1. 从 Isaac Sim 到 Isaac Lab 的运动策略训练框架工作流

目标

训练 Spot 机器人在平地上走动时,去追踪目标 x、y 和偏航基本速度。

观察和行动空间

目标速度在每次重置时都会随机分配,并与图 1 所示的其他观察结果一起提供。行动空间仅包括 12 个自由度关节位置,这些位置作为参考关节位置传递给底层关节控制器。

域随机化

在关键训练阶段,对各种参数进行随机化处理,如随机化参数下的图 1 所示。这些随机化有助于模型确保现实世界部署的鲁棒性,这个过程被称为域随机化。

网络架构和强化学习算法的详情

运动策略被构建成一个具有三层的多层感知器(MLP),包含 [512、156、128] 个神经元,并使用 RSL-rl 的近端策略优化(PPO)算法进行训练,该算法针对 GPU 计算进行了优化。

必备条件

要想训练运动策略,您需要:

  • 配备 NVIDIA RTX GPU 的系统。详细的最低规格,请参阅 Isaac Sim 文档:

https://docs.omniverse.nvidia...

  • NVIDIA Isaac Sim、Isaac Lab 和 RSL-rl。

使用

本章节展示了如何训练策略、回放策略和检查结果。

训练一个策略

cd <path_to_isaac_lab>
./isaaclab.sh -p source/standalone/workflows/rsl_rl/train.py --task Isaac-Velocity-Flat-Spot-v0 --num_envs 4096 --headless --video --enable_cameras

--video--enable_cameras 参数记录了智能体在训练过程中的行为视频,它是可选的。

播放经过训练的策略

该步骤将播放经过训练的模型,并将 .pt 策略导出到日志目录下导出文件夹中的 .onnx 中。

cd <path_to_isaac_lab>
./isaaclab.sh -p source/standalone/workflows/rsl_rl/play.py --task Isaac-Velocity-Flat-Spot-v0 --num_envs 64

结果

视频 1 演示了在 Spot 机器人上执行经过训练的策略。机器人能够通过跟踪目标 x、y 和偏航速度在平地上行走。通过 4096 个环境和 15000 次迭代,相当于在 NVIDIA RTX GPU 上大约 4 小时的训练时间,我们实现了每秒 85000 到 95000 帧(FPS)的训练速度。

使用 Jetson Orin 在 Spot 机器人上部署经过训练的强化学习策略

将经过仿真训练的模型部署到机器人应用的现实世界中会带来一些挑战,包括实时控制、安全约束和其他现实世界的条件。Isaac Lab 具有精确的物理和域随机化功能,使其能够将仿真环境中训练的策略部署到基于 Jetson Orin 零样本的真实 Spot 机器人上,从而在虚拟和现实世界中实现类似的性能。

图 2 显示了真实的 Spot 机器人框架策略部署,将策略神经网络加载到实际机器人上并进行推理。与仿真中相同的观察结果是使用波士顿动力的 State API 来计算的。

640 (1).jpg
图 2. 真实 Spot 机器人框架策略部署

将训练好的模型转移到 Spot 机器人需要将模型部署到边缘,并低延迟、高频率地控制机器人。NVIDIA Jetson AGX Orin 的高性能计算能力和低延迟 AI 处理确保了快速的推理和响应,这对现实世界的机器人应用至关重要。仿真的策略可以直接部署并进行推理,简化了部署流程。

必备条件

部署时需要:

  • Spot 机器人与 Jetson Orin 连接,并配置为使用以太网端口、电源线和安装支架的自定义有效载荷,按照所提供的安装说明进行操作。
  • Spot 强化学习研究工具包中的部署代码和 Spot Python SDK。
  • 通过蓝牙连接到 Jetson Orin 的 PS4 游戏手柄控制器。
  • 外部 PC 通过 SSH 进入 Jetson 并运行代码。
  • 来自 Isaac Lab 的经过训练的模型和配置文件。

Jetson Orin 上的硬件和网络设置

  • 在配备 Ubuntu 22.04 的外部 PC 上安装 SDK Manager。
  • 按照“如何使用 SDK Manager 对 L4T BSP 进行刷新”的说明,使用 SDK Manager,将配备 JetPack 6 的 Jetson Orin 进行刷新。完成后重新启动。
  • 把 Jetson Orin 连接到显示器端口、键盘和鼠标。
  • 使用步骤 2 中设置的用户名和密码登录 Jetson Orin。
  • 为了实现 Jetson Orin 和 Spot 之间的通信,请手动设置 Jetson Orin 上以太网端口的有线网络配置,并阅读有关选择 IP 地址的说明。

a) 进入 Settings -> Network -> Wired -> + 在 IPv4(Routes)下添加信息:地址 – Jetson IP 地址(选择 192.168.50.5)、 网络掩码 – 255.255.255.0,和默认网关 -192.168.50.3。

b) 点击“Add”按钮。

640 (1).png
图 3. Spot 的 Jetson Orin 有线网络配置

Jetson 上的软件设置

首先,将仿真中的训练策略从 .pt 转换为 .onnx 格式,并导出环境配置。这是在训练 PC 上完成的。

cd <path_to_isaac_lab>
./isaac_lab.sh -p source/standalone/workflows/rsl_rl/play.py --task Isaac-Velocity-Flat-Spot-v0 

结果将在该模型的训练日志目录中的导出文件夹中,该文件夹包含 env_cfg.json 和 .onnx 文件。

  1. 在训练 PC 上创建一个文件夹,并将 env.yaml 文件和 .onnx 文件复制到该文件夹中。请注意:env.yaml 在 params 文件夹中,.onnx 文件在训练日志目录的导出文件夹中。
  1. 在训练 PC 上使用 SSH,将步骤 1 中的文件夹复制到 Jetson Orin。确保 PC 和 Jetson 处在同一网络,比如 Spot 本地 wifi。在 PC 的终端上运行以下命令:

    scp -P 20022 -r /path/to/folder/* orinusername@network_IP:<path_to_copy_files>
  2. 接下来,在 Orin 的终端上从主目录运行以下命令:
mkdir spot-rl-deployment && cd spot-rl-deployment && mkdir models 
git clone https://github.com/boston-dynamics/spot-rl-example.git 
cd spot-rl-example && mkdir external && cd external && mkdir spot_python_sdk
  1. 下载具有联合级 API 的 Spot Python SDK,并将内容解压缩到步骤 3 中的 spot_python_sdk 文件夹中。
  1. 安装部署代码需要的东西:
cd ~/spot-rl-deployment/spot-rl-example
sudo apt update
sudo apt install python3-pip
cd external/spot_python_sdk/prebuilt
pip3 install bosdyn_api-4.0.0-py3-none-any.whl
pip3 install bosdyn_core-4.0.0-py3-none-any.whl
pip3 install bosdyn_client-4.0.0-py3-none-any.whl
pip3 install pygame
pip3 install pyPS4Controller
pip3 install spatialmath-python
pip3 install onnxruntime
  1. 把 env.yaml 文件转换为 env_cfg.json 文件:
cd ~/spot-rl-deployment/spot-rl-example/python/utils/
python env_convert.py 
#input the path to the .yaml file e.g ~/env.yaml
#The file outputs a env_cfg.json file in the same directory as the .yaml file
  1. 将步骤 6 中的 env_cfg.json 和步骤 2 中经过训练的模型 policy.onnx 文件移动到 models 文件夹中:
mv env_cfg.json policy.onnx ~/spot-rl-deployment/models

运行策略

  1. 启动 Spot,然后按下机器人背面的电机锁定按钮,并确保 Jetson Orin 已通电。

640 (2).png
图 4. Spot 的背面

  1. 在 Spot 平板电脑控制器上打开 Spot 应用。选择一个机器人,按照提示登录并操作 Spot。确保从平板电脑解除控制以运行策略:打开“Motor Status”菜单(电源图标),导航到高级设置,然后选择“Release Control”。
  1. 将 PC 连接到 Spot 本地 wifi,并从终端通过 SSH 连接到 Orin。Spot 将端口 20022 转发到其有效载荷,以便可以打开与 Spot IP 和该端口的 SSH 连接来访问 Orin。IPv4 地址 192.168.50.3 是 Spot 的 IP 地址。
ssh <jetson_username>@<spot_ip> -p 20022 
e.g
ssh <jetson_username>@192.168.50.3 -p 20022
  1. 使用 bluetoothctl 把无线游戏手柄连接到 Orin:
bluetoothctl
scan on  // wait for devices populate ~5s
scan off
devices

在列出的设备中找到游戏手柄的 Mac 地址。将游戏手柄置于配对模式,按住“Select”和“PlayStation”按钮约 5 秒,然后继续使用 bluetoothctl。如果在完成后续步骤之前退出了配对模式,您可能需要重复此过程。

trust {MAC} 
pair {MAC} 
connect {MAC} 
exit
  1. 运行强化学习策略:
cd ~/spot-rl-deployment/spot-rl-example/python
python spot_rl_demo.py <spot_ip> ~/spot-rl-deployment/models --gamepad-config ./gamepad_config.json

根据提示输入 Spot 的用户名和密码。Spot 将保持不变,但在按下回车键之前,策略不会控制它。现在,您可以使用游戏手柄驱动机器人。再次按下回车键,让 Spot 关闭并退出。

  1. 使用 PS4 游戏手柄进行控制。

640 (3).png
图 5. 用户可以使用游戏手柄控制 Spot 机器人

如游戏手柄图所示,使用左操纵杆进行 x、y 移动,使用右操纵杆进行旋转。请注意,使用另一个游戏手柄(如 PS5 手柄)将需要不同的轴映射。axis_mapping 是指基于 pygame 的轴索引。来自 ~/spot-rl-deployment/spot-rl-example/python/utils/test_controller.py 的脚本 test_controller.py 可用来打印每个轴的值,以确定不同手柄的恰当映射。

  1. 使用游戏手柄配置选项来运行策略:
python spot_rl_demo.py ~/spot-rl-deployment/models --gamepad-config /home/gamepad_config.json

开始开发您的自定义应用

Spot 强化学习研究套件中提供的代码库是您在仿真环境中创建自定义强化学习任务并将其部署到硬件上的起点。为了开发自定义应用,您可以通过添加自己的机器人模型、环境、奖励函数、课程学习、域随机化等,来修改和扩展当前的代码库。

请参阅文档了解有关如何使用 Isaac Lab 为特定任务训练策略的详细指导。在其他机器人上部署经过训练的策略是专属于该机器人架构的;但是,如果应用需要进行额外的观察,Spot 用户则可以修改当前的部署代码:

https://isaac-sim.github.io/I...

获取强化学习研究套件和 Spot 机器人,即刻开始开发您的自定义应用:

https://bostondynamics.com/re...

详细了解更多基于 Isaac Sim 构建的 Isaac Lab 的信息。查看以下论文,了解更多灵感和任务描述:

加入 NVIDIA 机器人开发者论坛,通过有关 Isaac ROS 和 Isaac Sim 的自学培训和网络研讨会了解更多信息:

https://forums.developer.nvid...

推荐阅读
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息