NVIDIA英伟达嵌入式系统 · 2月23日 · 北京市

利用 NVIDIA Isaac Sim 对工作站的摄像头性能进行基准测试

头图.png

机器人通常都会配备摄像头,设计数字孪生仿真时,在模拟环境中准确复制其性能十分重要。

为了确保仿真能够顺利进行,对运行仿真的工作站进行性能检查至关重要。本文将介绍在您的工作站上使用 NVIDIA Isaac Sim 设置和运行摄像头基准测试的各个步骤。

在开始之前,我们先来了解一下 Isaac Sim 是如何设计添加摄像头,以及如何导出用于 ROS 2 的输出结果。

NVIDIA Isaac Sim 可以仿真多种类型的传感器,包括激光雷达、超声波、通用测距传感器、接触传感器、IMU 和接近传感器等测距传感器。

摄像头传感器是 Isaac Sim 中最先进的仿真传感器,您可在用户界面上快速添加该传感器。

图一.png

图 1. 在 NVIDIA Isaac Sim 上添加摄像头并选择配置和输出的示例

此外,如下面的示例所示,您还可以使用 Python 脚本加载摄像头或一个Python 对象中的多个摄像头:

camera = Camera(
    prim_path="/World/camera",
    position=np.array([0.0, 0.0, 25.0]),
    frequency=20,
    resolution=(256, 256),
    orientation=rot_utils.euler_angles_to_quats(np.array([0, 90, 0]), degrees=True),
)

关于 NVIDIA Isaac Sim 摄像头的更多详细信息,请查看文档:https://docs.omniverse.nvidia...

设置 Demo

您需要一台配备 NVIDIA RTX GPU 并安装了最新版本 NVIDIA Isaac Sim 2023.1.0 的工作站才能运行此基准测试。本 demo 仅与运行 Ubuntu 20.04 或 Ubuntu 22.04 的 Linux 机器兼容。

该脚本无需用户界面即可运行 Isaac Sim,可以通过终端完成。该脚本将启动模拟器、加载所有需要的摄像头,并在终端中显示输出结果。

安装和运行

克隆 isaac_camera_benchmark demo:

git clone https://github.com/nvidia_iot/isaac_camera_benchmark.git
cd isaac_camera_benchmark

该资源库包含在您的屏幕上运行 demo 的所有脚本和文件,但在运行脚本之前,请务必下载 NVIDIA Isaac Sim。

请按照 NVIDIA Omniverse 上的说明进行操作。

图二.png

图 2. NVIDIA Omniverse、程序库页面和 NVIDIA Isaac Sim 下载按钮

选择该页面上的 NVIDIA Isaac Sim 2023.1.0 并下载。然后进入终端并运行脚本:

./run_camera_benchmark.sh

该脚本将自动启动最新版 NVIDIA Isaac Sim 并将仿真初始化。

在该仿真中,三个摄像头围绕一个小型虚拟仓库中的三个不同位置,以顺时针方向移动。同时,脚本会在终端上显示当前帧率和 ROS 2 平均频率输出结果。

图三.png

图 3. 终端上的摄像头输出结果示例

FPS 输出结果可能因工作站配置和硬件设置而发生变化。

如要保存该基准测试的 ROS2 输出结果,请运行:

./ros2record.sh

图四.jpg
图 4. 记录所有已配置摄像头输出结果的脚本

所有 ros2bag 文件都在 isaac_camera_benchmark/rosbag 文件夹中。

下一章将解释该脚本的内部工作原理,以及如何通过更改其配置来测试多个摄像头或使用不同的分辨率。

更改默认配置

共有三个主要文件,您可以通过编写一个配置文件来设计自己的配置。

第一个脚本是 run_camera_benchmark.sh,它加载 Isaac Sim 的最新版本、传递一个包含所有配置的脚本并运行此 demo。

该资源库的主要脚本是 camera_benchmark.py,该脚本仅使用 ROS2_bridge 扩展运行 Isaac Sim,并在默认情况下加载 warehouse_with_forklifts.usd 环境,其中包含一个带有两辆叉车的小型虚拟仓库。该仿真将在光线追踪照明下运行。

加载环境后,添加在名为 config.json 的文件中配置的每个摄像头,或者加载三个分辨率为 640 × 480 的摄像头。

该脚本会自动在环境中添加一个摄像头对象,同时构建一个图形,用于读取来自 Isaac Sim 的输出结果、修复分辨率,并发布于 ROS 2 输出结果中。

图五.png

图 5. 从 camera_benchmar.py 中生成的图形

同时,camera_benchmar.py 会加载一个名为 benchmark_camera_node 的 ROS 2 节点,该节点与 ROS 2 摄像头输出结果相连,并测量主题频率平均值。

该脚本还从 Isaac Sim 读取摄像头帧率,并在终端上发布输出结果。

如要更改默认配置,只需新建一个名为 config.json 的 JSON 文件即可。该文件必须包含摄像头的配置。您可以设置不同的选项:

  • 平移:摄像头在环境中的位置,该变量必须是一个三坐标向量,如 [0.0 0.0 0.0]。
  • 分辨率:摄像头输出分辨率是一个整数向量,包含摄像头的分辨率(如 640 × 480)。建议的分辨率包括:

640 × 480

1024 × 768

1920 × 1080 (FHD)

2560 × 1440 (2K)

3840 × 2160 (4K)

以下是新建 config.json 的示例。

{
   "camera": [
       {"translate": [0.0, 0.0, 3.0], "resolution": [640,480]}
       {"translate": [-1.0, 0.0, 6.0], "resolution": [1024,768]}
   ]
}

该输出结果将生成下图中所示的新基准。

图六.png

图 6. 示例:输出摄像头以及终端上的

FPs ros 主题和 Isaac Sim fps 示例

您可以在 config.json 文件中添加配置,指定要在 Isaac Sim 上启动的仿真类型。

  • renderer(渲染器):选择渲染器类型。默认为 RayTracedLighting
  • headless(无头):要在没有用户界面的情况下运行 Isaac Sim,可以将此布尔变量改为 True

另一个配置文件示例如下。

{
   "simulation": {"renderer": "RayTracedLighting", "headless": true},
   "camera": [
       {"translate": [0.0, 0.0, 3.0], "resolution": [640,480]},
       {"translate": [-1.0, 0.0, 6.0], "resolution": [1024,768]}
   ]
}

总结

通过该脚本,您可以在工作站上监控摄像头的输出结果和 ROS 主题的性能。它还提供了一个如何使用 ROS 2 创建新 Isaac Sim 脚本的示例。

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