机器人通常都会配备摄像头,设计数字孪生仿真时,在模拟环境中准确复制其性能十分重要。
为了确保仿真能够顺利进行,对运行仿真的工作站进行性能检查至关重要。本文将介绍在您的工作站上使用 NVIDIA Isaac Sim 设置和运行摄像头基准测试的各个步骤。
在开始之前,我们先来了解一下 Isaac Sim 是如何设计添加摄像头,以及如何导出用于 ROS 2 的输出结果。
NVIDIA Isaac Sim 可以仿真多种类型的传感器,包括激光雷达、超声波、通用测距传感器、接触传感器、IMU 和接近传感器等测距传感器。
摄像头传感器是 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 摄像头的更多详细信息,请查看文档: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 上的说明进行操作。
图 2. NVIDIA Omniverse、程序库页面和 NVIDIA Isaac Sim 下载按钮
选择该页面上的 NVIDIA Isaac Sim 2023.1.0 并下载。然后进入终端并运行脚本:
./run_camera_benchmark.sh
该脚本将自动启动最新版 NVIDIA Isaac Sim 并将仿真初始化。
在该仿真中,三个摄像头围绕一个小型虚拟仓库中的三个不同位置,以顺时针方向移动。同时,脚本会在终端上显示当前帧率和 ROS 2 平均频率输出结果。
图 3. 终端上的摄像头输出结果示例
FPS 输出结果可能因工作站配置和硬件设置而发生变化。
如要保存该基准测试的 ROS2 输出结果,请运行:
./ros2record.sh
图 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 输出结果中。
图 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]}
]
}
该输出结果将生成下图中所示的新基准。
图 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 脚本的示例。