机器人

缩小模拟现实的差距: NVIDIA Isaac 实验室的训练点四肢运动

由于四足动物的运动策略涉及复杂的动力学,对机器人技术提出了重大挑战。在现实世界中,训练四足动物上下楼梯可能会损坏设备和环境。因此,模拟器在学习过程中的安全和时间约束方面都发挥着关键作用。

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

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

Isaac Lab 是一款基于NVIDIA Isaac Sim平台的轻量级参考应用程序,专为大规模机器人学习而优化。它利用基于 GPU 的并行化进行基于物理的大规模并行模拟,以提高最终策略性能并减少机器人中 RL 的训练时间。凭借其高保真度物理和领域随机化功能,Isaac Lab 弥合了模拟与现实的差距,使经过训练的模型能够无缝部署到物理机器人零样本上。要了解更多信息,请参阅Supercharge Robotics Workflows with AI and Simulation Using NVIDIA Isaac Sim 4.0 and NVIDIA Isaac Lab

这篇文章解释了如何在 Isaac Sim 和 Isaac Lab 中为 Spot 创建移动 RL 策略,并使用 RL 研究人员工具包中的组件部署在硬件上。

Isaac 实验室中的四足动物运动训练

本节介绍如何在 Isaac 实验室中训练运动 RL 策略。

Flowchart describing the training framework from Isaac Sim to Isaac Lab. The observations consist of the robot’s state, a velocity command, and the previous actions. Different parameters are randomized, such as the robot’s mass, and friction. Additionally, the robot is disturbed by applying random pushes.
图 1。从 Isaac Sim 到 Isaac Lab 的运动策略培训框架的工作流程

目标

训练 Spot 机器人在平坦地形上行走时跟踪目标 x、y 和偏航基本速度。

观察和行动空间

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

域随机化

在关键训练阶段,各种参数被随机化,如图 1 所示的随机化参数。这些随机化有助于模型确保在真实世界部署中的稳健性,这个过程被称为领域随机化

网络架构和 RL 算法细节

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

先决条件

要训练运动策略,您需要以下内容:

以下是一些名称的示例:

本节显示如何训练策略、回放策略以及检查结果。

培训政策

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 策略导出到日志目录中导出文件夹中的.onx。

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 4090 GPU 上大约 4 小时的训练时间,我们实现了每秒 85000 到 95000 帧的训练速度。

视频 1。在 Isaac 实验室模拟中对 Spot 机器人进行了训练有素的策略测试

与 Jetson Orin 一起在 Spot 上部署经过培训的 RL 策略

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

图 2 显示了真实的 Spot 机器人框架策略部署,将策略神经网络加载到实际机器人上进行推理,使用 Boston Dynamics State API 计算与模拟中相同的观测值。

Flowchart describing how the policy was tested from collecting information from the sensors to deriving the right actions.
图 2:Real Spot 机器人框架策略部署

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

先决条件

部署需要以下内容:

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

Orin 的硬件和网络设置

  • 在外部 PC 上使用 Ubuntu 22.04 安装SDK Manager
  • 按照如何使用 SDK Manager 对 L4T BSP 进行闪存的说明,使用SDK Manager将 JetPack 6 与 Flash Jetson Orin 进行闪存,完成后重新启动。
  • 将 Jetson Orin 连接到显示端口、键盘和鼠标。
  • 使用步骤 2 中设置的用户名和密码登录 Jetson Orin。
  • 对于 Jetson Orin 和 Spot 之间的通信,请手动为 Jetson Orin 上的以太网端口设置有线网络配置,阅读有关选择 IP 地址的说明
    • 转到设置->网络->有线->+ 添加 IPv4(Routes):地址 – Jetson IP 地址(我们选择了 192.168.50.5),网掩码 – 255.255.255.0,默认网关 -192.168.50.3
Screenshot showing how to set the wired network IP address on Jetson Orin to communicate with Spot.
图 3。Spot 的 Jetson Orin 有线网络配置

Jetson 上的软件设置

首先,将模拟训练的策略从.pt 转换为.onx,并导出环境配置。这是在 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 和.onx 文件。

1. 在训练 PC 上,创建一个文件夹,然后将 params 文件夹中的 env.yaml 文件和训练日志目录的导出文件夹中的.onnx 文件复制到该文件夹中。

2.在训练 PC 上,使用 SSH 将步骤 1 中的文件夹复制到 Jetson Orin。确保电脑和 Jetson 在同一个网络上,比如 spot 本地 wifi。在 PC 的终端上,运行以下命令:

scp -P 20022 -r /path/to/folder/* orinusername@network_IP:<path_to_copy_files>

3.接下来,在 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

4. 使用联合级别 API 下载Spot Python SDK,并将内容从步骤 3 解压到 spot_python_sdk 文件夹中

5.安装部署代码依赖项:

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

6.将 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

7.将步骤 6 中的 env_cfg.json 和步骤 2 中经过训练的 model policy.onnx 文件移动到 models 文件夹中:

mv env_cfg.json policy.onnx ~/spot-rl-deployment/models

运行策略

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

Photo of back panels of the Spot robot.
图 4。Spot 的后拼接

2. 在 Spot 平板电脑控制器上打开 Spot 应用程序,选择一个机器人并按照提示登录并操作 Spot。确保释放平板电脑的控制权以运行策略:打开“电机状态”菜单(电源图标),导航到高级设置,然后选择“释放控制”。

3.从终端将 PC 连接到 Spot 本地 Wi-Fi,并从终端使用 SSH 连接到 Orin。Spot 将端口 20022 转发到其有效负载,因此 Orin 可以通过打开与 Spot IP 和该端口的 SSH 连接来访问。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

4.使用将无线游戏板连接到 Orinbluetoothctl:

bluetoothctl
scan on  // wait for devices populate ~5s
scan off
devices

在列出的设备中查找游戏板的 Mac 地址,将游戏板置于配对模式,按住“选择”和“PlayStation”按钮约 5 秒,然后在bluetoothctl中继续。如果在完成下一步操作之前退出配对模式,您可能需要重复此过程。

trust {MAC} 
pair {MAC} 
connect {MAC} 
exit

5.运行 RL 策略:

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 将站起来,但策略不会控制它,直到您按下 enter 键。现在,您可以使用 Gamepad 驱动机器人。再次按下 enter 键,将 Spot 干净地坐下并退出。

6.使用 PS4 游戏板进行控制。

Image of a gaming controller with text boxes on the toggles that map to directions.
图 5。用户可以使用游戏板控制器来驱动 Spot

如 Gamepad 图所示,使用左操纵杆进行 x、y 移动,使用右操纵杆进行旋转。请注意,使用另一个 Gamepad(如 PS5 控制器)将需要不同的轴映射。The axis_mapping是指根据 pygame 的轴索引。The script test_controller.py from ~/spot-rl-deployment/spot-rl-example/python/utils/test_controller.py 可用于打印每个轴的值,以确定不同控制器的正确映射。

7.使用游戏板配置选项运行策略:

python spot_rl_demo.py ~/spot-rl-deployment/models --gamepad-config /home/gamepad_config.json

视频 2 展示了真实的 Spot 机器人在经过模拟训练后的动作。

视频 2。Spot 机器人使用 NVIDIA Isaac 实验室的训练行走

开始开发您自己的自定义应用程序

Spot RL Researcher Kit 中提供的代码库是模拟中创建您自己的自定义 RL 任务然后将其部署到硬件的起点。为了构建您自己的自定义应用程序,您可以修改和扩展当前的代码库,通过添加您自己的机器人模型、环境、奖励函数、课程学习、领域随机化等。

有关如何使用 Isaac Lab 为您的特定任务培训策略的详细指导,请参阅文档。在其他机器人上部署经过训练的策略是特定于机器人架构的;Spot 用户可以根据应用程序的需要修改当前的部署代码以获取额外的观察结果。

获取你的 强化学习研究工具包和 Spot 机器人,然后开始开发您的自定义应用程序。

了解更多关于Isaac Lab的信息,该实验室建立在Isaac Sim的基础上。查看以下论文,了解更多灵感和任务描述:

LinkedInInstagramXFacebook上保持最新信息。浏览NVIDIA 文档YouTube频道,并加入NVIDIA 开发者机器人论坛。通过自定进度培训Isaac ROSIsaac Sim的网络研讨会了解更多信息。

鸣谢 

我们要感谢人工智能研究所的 Farbod Farshidian、Adam Miller、Fangzhou Yu 和 Michael Brauckmann,为 Spot 提供了基于 Isaac Lab 的培训环境,并为部署经过培训的政策提供了支持。

Tags