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

描述

 

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

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

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

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

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

IMU

▲ 图 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),
)

1

设置 Demo

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

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

2

安装和运行

克隆 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 上的说明进行操作。

IMU

▲ 图 2 NVIDIA Omniverse、程序库页面

和 NVIDIA Isaac Sim 下载按钮

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

 

./run_camera_benchmark.sh

 

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

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

IMU

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

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

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

 

./ros2record.sh
IMU

 

▲ 图 4 记录所有已配置摄像头

输出结果的脚本

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

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

3

更改默认配置

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

第一个脚本是 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 输出结果中。

IMU

▲ 图 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]}
   ]
}

 

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

IMU

▲ 图 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]}
   ]
}

 

4

总结

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




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分