计算机视觉/视频分析

借助 NVIDIA Isaac Sim 在工作站上对摄像头性能进行基准测试

 

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

但是,为了确保模拟平稳运行,必须检查运行模拟的工作站的性能。在这篇博客文章中,我们将探讨在 NVIDIA Isaac Sim 上的工作站上设置和运行摄像头基准测试的步骤。

在开始之前,我们将探索 Isaac Sim 如何添加摄像头,以及如何导出 ROS 2 的输出。

NVIDIA Isaac Sim 可以模拟多种类型的传感器,从激光雷达、超声波、通用范围传感器、接触传感器以及 IMU 力和接近传感器等距离传感器开始。

摄像头传感器是 Isaac Sim 中最先进的仿真技术,您可以使用用户界面快速添加此传感器。

A screenshot example of adding a camera to Isaac Sim
图 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 摄像头的更多详细信息,请查阅我们的 文档.

设置演示

要使用此基准测试,您需要配备 NVIDIA RTX GPU 和最新版 NVIDIA Isaac Sim 2023.1.0 的工作站。此演示仅兼容运行 Ubuntu 20.04 或 Ubuntu 22.04 的基于 Linux 的计算机。

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

安装和运行

克隆演示 isaac_camera_benchmark:

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

此资源库包含在屏幕上运行演示的所有脚本和文件,但在运行脚本之前,请记得下载 NVIDIA Isaac Sim.

如需指导,请参考NVIDIA Omniverse.

A screenshot of an NVIDIA Omniverse library page.
图 2. NVIDIA Omniverse 库页面和 NVIDIA Isaac Sim 下载按钮

在此页面中,选择 NVIDIA Isaac Sim 2023.1.0 并下载。然后前往终端并运行脚本:

./run_camera_benchmark.sh

此脚本将自动启动最新的 NVIDIA Isaac Sim 并初始化模拟。

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

A screenshot of an example camera output from Isaac Sim.
图 3.终端摄像头输出示例

FPS 输出可能会因工作站配置而异,并且可能与硬件设置不同。

要存储来自此基准测试的 ROS2 输出,请运行:

./ros2record.sh
A screenshot of the ros2record terminal script.
图 4.脚本记录所有已配置摄像头的输出

所有 ros2bag 文件均位于该文件夹中isaac_camera_benchmark/rosbag.

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

更改默认配置

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

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

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

加载环境后,添加在名为 config.json 或加载三个分辨率为 640 × 480 的摄像头。

此脚本会自动在环境中添加相机对象,还可以构建一个图形,用于读取来自 Isaac Sim 的输出、修复分辨率并在 ROS 2 输出上发布。

A screenshot of the generated graph from script.
图 5.生成的图表来自 camera_benchmark.py

同时,camera_benchmark.py 加载名为 benchmark_camera_node 的 ROS 2 节点,该节点从 ROS 2 摄像头输出连接,并测量主题频率平均值。

此脚本还可从 Isaac Sim 读取相机 fps,并在终端上发布输出。

要更改默认配置,您只需创建一个名为 config.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]}
   ]
}

此输出会生成如下图所示的新基准测试。

A screenshot showing the camera output from Isaac Sim.
图 6.输出摄像头和终端 FP ROS 主题以及 Isaac Sim fps 示例

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

  • 渲染器:选择渲染类型。默认值为光线追踪光照
  • 无外设:要在没有用户界面的情况下运行 Isaac Sim,您可以使用正确的命令行参数。

有关配置文件的另一个示例,请参阅以下内容。

{
   "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 脚本的示例。

 

Tags