mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-04 03:57:46 +08:00
Refactor benchmark documentation and tools
This commit is contained in:
@@ -253,9 +253,9 @@
|
||||
|
||||
#### 固件与后端
|
||||
* **`upgrade_firmware`**
|
||||
* 输入参数为固件路径。新版本建议使用独立工具 `firmware_update_tool` 进行固件升级,参考 [firmware_update_tool 工具](../5_advanced_guide/configuration/firmware_update_tool.md)。
|
||||
* 输入参数为固件路径。新版本建议使用独立工具 `firmware_update_tool` 进行固件升级,参考 [firmware_update_tool 工具](../6_benchmark/firmware_update_tool.md)。
|
||||
* **`preset_firmware_path`**
|
||||
* 输入参数为预设固件路径。如果输入多个路径,每个路径需要用 `,` 分隔,最多可输入3个固件路径。新版本建议使用独立工具烧录 preset,参考 [firmware_update_tool 工具](../5_advanced_guide/configuration/firmware_update_tool.md)。
|
||||
* 输入参数为预设固件路径。如果输入多个路径,每个路径需要用 `,` 分隔,最多可输入3个固件路径。新版本建议使用独立工具烧录 preset,参考 [firmware_update_tool 工具](../6_benchmark/firmware_update_tool.md)。
|
||||
* **`uvc_backend`**
|
||||
* 可选值:`v4l2`、`libuvc`。低 CPU 场景建议参考 [降低 CPU 使用率](../5_advanced_guide/performance/lower_cpu_usage.md)。
|
||||
* **`connection_delay`**
|
||||
|
||||
@@ -40,5 +40,4 @@
|
||||
configuration/disparity_search_offset.md
|
||||
configuration/interleave_ae_mode.md
|
||||
configuration/predefined_presets.md
|
||||
configuration/firmware_update_tool.md
|
||||
configuration/net_camera.md
|
||||
|
||||
@@ -44,98 +44,9 @@ ros2 launch orbbec_camera femto_mega.launch.py enumerate_net_device:=false net_d
|
||||
ros2 launch orbbec_camera multi_net_camera.launch.py
|
||||
```
|
||||
|
||||
可以使用 `list_devices_node` 查看当前连接设备。v2.8.x 之后,该工具会额外输出固件版本、preset 列表、preset 版本、网口设备本地网卡名和 IP 来源类型(`NONE`、`LLA`、`DHCP`、`PERSISTENT`)。当某个设备枚举失败时,工具会继续枚举其他设备。
|
||||
可以使用 `list_devices_node` 查看当前连接设备。该工具的输出字段和运行方式见 [设备查询与基础维护工具](../../6_benchmark/device_query_tools.md#list_devices_node)。
|
||||
|
||||
如需开启 SDK 和固件日志,可添加 `--sdk_log_level debug`:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_devices_node -- --sdk_log_level debug
|
||||
```
|
||||
|
||||
## ip_config_tool 工具
|
||||
|
||||
**`ip_config_tool`** 可执行文件允许您直接从 ROS 2 配置网络相机的 IP 设置,包括 DHCP、静态 IP、Force IP 和 DHCP 分配 IP 超时时间。这对于快速分配或更新 IP 地址而无需修改启动文件非常有用。
|
||||
|
||||
> **注意:** 通过 `set_ip` 应用的 DHCP / persistent IP 配置会写入设备。`force_ip` 是临时强制 IP,设备断电或重启后需要重新应用。
|
||||
> **兼容说明**:`set_device_ip` 仍作为兼容别名保留,实际调用 `ip_config_tool`。旧参数 `old_ip` 已更名为 `current_ip`。
|
||||
|
||||
**示例用法**
|
||||
|
||||
查看帮助:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- --help
|
||||
```
|
||||
|
||||
开启 DHCP:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
set_ip \
|
||||
--current_ip 192.168.1.10 \
|
||||
--enable_dhcp true \
|
||||
--enable_persistent_ip false
|
||||
```
|
||||
|
||||
关闭 DHCP 并设置 persistent IP:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
set_ip \
|
||||
--current_ip 192.168.1.10 \
|
||||
--enable_dhcp false \
|
||||
--enable_persistent_ip true \
|
||||
--new_ip 192.168.1.11 \
|
||||
--mask 255.255.255.0 \
|
||||
--gateway 192.168.1.1
|
||||
```
|
||||
|
||||
同时开启 DHCP 和 persistent IP(仅支持 IP 配置 V2 的设备/固件):
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
set_ip \
|
||||
--current_ip 192.168.1.10 \
|
||||
--enable_dhcp true \
|
||||
--enable_persistent_ip true \
|
||||
--new_ip 192.168.1.11 \
|
||||
--mask 255.255.255.0 \
|
||||
--gateway 192.168.1.1
|
||||
```
|
||||
|
||||
通过 MAC 地址 Force IP:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
force_ip \
|
||||
--force_ip_mac 54:14:FD:06:07:DA \
|
||||
--new_ip 192.168.1.50 \
|
||||
--mask 255.255.255.0 \
|
||||
--gateway 192.168.1.1
|
||||
```
|
||||
|
||||
设置 DHCP 分配 IP 超时时间:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
set_dhcp_timeout \
|
||||
--current_ip 192.168.1.10 \
|
||||
--timeout 10
|
||||
```
|
||||
|
||||
**参数**
|
||||
|
||||
- **`current_ip`** – 设备的当前 IP 地址。
|
||||
- **`enable_dhcp`** – 在 `set_ip` 或 `force_ip` 子命令中设置是否启用 DHCP。
|
||||
- **`enable_persistent_ip`** – 在 `set_ip` 子命令中设置是否启用 persistent IP。
|
||||
- **`new_ip`** – 要分配的 persistent IP 或 Force IP 地址。
|
||||
- **`mask`** – 新 IP 的子网掩码。
|
||||
- **`gateway`** – 新 IP 的网关地址。
|
||||
- **`force_ip_mac`** – Force IP 目标设备 MAC 地址。
|
||||
- **`timeout`** / **`dhcp_assign_ip_timeout`** – DHCP 分配 IP 超时时间,单位为秒。
|
||||
- **`sdk_log_level`** – SDK 文件日志级别,可选值:`debug`、`info`、`warn`、`error`、`fatal`、`off`。非 `off` 时会同时尝试开启固件日志。
|
||||
|
||||
> **版本说明**:`LLA` 开关仅 Gemini 335Le 固件 `1.7.05` 及以上、Gemini 435Le 固件 `1.3.17` 及以上支持。
|
||||
如需直接修改网络相机的 DHCP、persistent IP、Force IP 或 DHCP 分配 IP 超时时间,请使用第 6 章的 [网络配置工具](../../6_benchmark/network_config_tools.md)。
|
||||
|
||||
## 强制 IP 功能
|
||||
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
性能基准测试
|
||||
工具
|
||||
======================================================
|
||||
|
||||
本章介绍如何使用性能基准测试工具来测试不同相机的性能。
|
||||
本章汇总 OrbbecSDK_ROS2 提供的设备查询、维护、网络配置、性能诊断、多相机和调试辅助工具。
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
introduction.md
|
||||
benchmark_usage.md
|
||||
othertools.md
|
||||
tools.md
|
||||
device_query_tools.md
|
||||
network_config_tools.md
|
||||
firmware_update_tool.md
|
||||
benchmark_tools.md
|
||||
diagnostic_tools.md
|
||||
multi_camera_tools.md
|
||||
|
||||
@@ -0,0 +1,214 @@
|
||||
# 性能基准测试工具
|
||||
|
||||
本节介绍性能基准测试工具,解释其目的、功能以及它可以帮助您测量的内容。
|
||||
|
||||
## common_benchmark_node.py
|
||||
|
||||
`common_benchmark_node.py` 是一个用于监控在 ROS 环境中运行的 Orbbec 相机性能的工具。它实时收集和记录关键相机指标,如帧率、延迟、系统资源使用和丢包率,帮助用户评估相机节点的稳定性和性能(每秒更新一次)。
|
||||
|
||||
功能:
|
||||
|
||||
- 测量发布的图像帧率和延迟(当前、最小、最大、平均)。
|
||||
- 监控相机节点的 CPU/ARM 使用率(当前、最小、最大、平均)。
|
||||
- 跟踪丢帧率(发布者)和丢包率(订阅者)。
|
||||
- 将实时统计信息(1 Hz)打印到终端并将结果保存到 CSV 文件。
|
||||
- 支持可配置的运行时长和 CSV 输出路径。
|
||||
|
||||
在 ROS1 中,可以测量丢帧率和丢包率,而在 ROS2 中,header 缺少 `seq` 字段,因此仅计算发布者端的丢帧率。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
运行示例:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera common_benchmark_node.py \
|
||||
--run_time 2h \
|
||||
--csv_file /path/to/log.csv
|
||||
```
|
||||
|
||||
参数:
|
||||
|
||||
- `--run_time`:监控持续时间,指定为时间字符串,如 `"10s"`、`"5m"`、`"1h"`、`"2d"`。默认为 10 秒。
|
||||
- `--csv_file`:输出 CSV 文件的路径。默认情况下,它保存在工作空间目录中,名称为 `camera_monitor_log.csv`。
|
||||
|
||||
多相机监控示例:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera common_benchmark_node.py \
|
||||
--run_time 1h \
|
||||
--csv_file /tmp/cam_log.csv \
|
||||
--camera_names camera_01,camera_02
|
||||
```
|
||||
|
||||
## service_benchmark_node.py
|
||||
|
||||
`service_benchmark_node` 工具用于监控服务调用的性能。它可以测量服务调用的成功率和执行服务所需的时间。
|
||||
|
||||
功能:
|
||||
|
||||
- 对单个服务调用进行基准测试,测量延迟和成功率。
|
||||
- 对 YAML 配置文件中定义的多个服务进行基准测试。
|
||||
- 可选择将基准测试结果保存到 CSV 文件。
|
||||
|
||||

|
||||
|
||||
当您需要收集多个服务的数据时,建议使用 CSV 文件进行分析。
|
||||
|
||||
### ROS2 C++
|
||||
|
||||
单个服务基准测试:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera service_benchmark_node \
|
||||
--ros-args \
|
||||
-p service_name:=/camera/get_depth_gain \
|
||||
-p service_type:=orbbec_camera_msgs/srv/GetInt32 \
|
||||
-p count:=10
|
||||
```
|
||||
|
||||
多个服务基准测试(YAML 配置):
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera service_benchmark_node \
|
||||
--ros-args \
|
||||
-p yaml_file:=/path/to/default_service.yaml
|
||||
```
|
||||
|
||||
### ROS2 Python
|
||||
|
||||
单个服务基准测试:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera service_benchmark_node.py --service /camera/get_depth_gain --count 10
|
||||
```
|
||||
|
||||
多个服务基准测试(YAML 配置):
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera service_benchmark_node.py --yaml_file /path/to/default_service.yaml
|
||||
```
|
||||
|
||||
示例 YAML 配置位于 `orbbec_camera/scripts/default_service.yaml`:
|
||||
|
||||
```yaml
|
||||
default_count: 10
|
||||
|
||||
services:
|
||||
- name: /camera/get_auto_white_balance
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_color_exposure
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_color_gain
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_depth_exposure
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_depth_gain
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_device_info
|
||||
type: orbbec_camera_msgs/srv/GetDeviceInfo
|
||||
- name: /camera/send_software_trigger
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_auto_white_balance
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_color_ae_roi
|
||||
type: orbbec_camera_msgs/srv/SetArrays
|
||||
request: {data_param: [0,1279,0,719]}
|
||||
- name: /camera/set_color_auto_exposure
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_color_exposure
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 30}
|
||||
- name: /camera/set_color_flip
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_color_gain
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 20}
|
||||
- name: /camera/set_color_mirror
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_color_rotation
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 90}
|
||||
- name: /camera/set_depth_ae_roi
|
||||
type: orbbec_camera_msgs/srv/SetArrays
|
||||
request: {data_param: [0,1279,0,719]}
|
||||
- name: /camera/set_depth_auto_exposure
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_depth_exposure
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 3000}
|
||||
- name: /camera/set_depth_flip
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_depth_gain
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 200}
|
||||
```
|
||||
|
||||
## ob_benchmark_node
|
||||
|
||||
> 此工具的目标是对各种 OrbbecSDK_ROS2 相机配置的性能进行基准测试。基准测试结果取决于使用的相机和设置。(目前仅适用于 ROS2 Humble)
|
||||
|
||||
您可以在 [example](https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples) 中找到示例使用代码。
|
||||
|
||||
### 工具配置
|
||||
|
||||
配置文件为 `orbbec_camera/config/tools/startbenchmark/start_benchmark_params.json`。
|
||||
|
||||
```json
|
||||
{
|
||||
"start_benchmark_params": {
|
||||
"camera_name": [
|
||||
"camera_01",
|
||||
"camera_02",
|
||||
"camera_03",
|
||||
"camera_04"
|
||||
],
|
||||
"process_name": "component_conta",
|
||||
"switch_cycle": 300,
|
||||
"test_cycle": 1,
|
||||
"skip_number": 30
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `camera_name`:要配置的相机名称。例如:`"camera_01"`、`"camera_02"` 等。
|
||||
- `process_name`:要监控的进程名称。例如,`"component_conta"` 将监控容器进程的数据。
|
||||
- `switch_cycle`:切换配置的周期时间,以秒为单位。例如,设置为 `300` 意味着配置将每 300 秒切换一次。
|
||||
- `test_cycle`:测试周期,以秒为单位。例如,设置为 `1` 意味着工具将每 1 秒收集一次监控进程的数据。
|
||||
- `skip_number`:要跳过的数据点数量。例如,设置为 `30` 意味着将忽略前 30 个数据点。
|
||||
|
||||
### 相机配置(启动文件)
|
||||
|
||||
在 launch 文件夹中,有多个 .launch.py 文件(`ob_benchmark_0.launch.py`、`ob_benchmark_1.launch.py`、...、`ob_benchmark_19.launch.py`)。每个文件对应不同的相机配置。
|
||||
|
||||
### 运行 ob_benchmark 工具
|
||||
|
||||
要运行该工具,请使用以下命令:
|
||||
|
||||
```bash
|
||||
source install/setup.bash
|
||||
ros2 run orbbec_camera ob_benchmark_node
|
||||
```
|
||||
|
||||
### 输出数据文件
|
||||
|
||||
输出数据文件将存储在 ob_benchmark 文件夹中,文件名如 `0.csv`、`1.csv`、...、19.csv。例如:
|
||||
|
||||
- `0.csv` 包含来自 `ob_benchmark_0.launch.py` 配置的数据。
|
||||
- `1.csv` 包含来自 `ob_benchmark_1.launch.py` 配置的数据。
|
||||
|
||||
## start_benchmark_node
|
||||
|
||||
`start_benchmark_node` 是 benchmark 流程中的订阅端,会按 `start_benchmark_params.json` 中的 `camera_name` 订阅多相机 color、depth、IR 和 point cloud topic。它通常与 benchmark launch 配合使用。
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera start_benchmark_node
|
||||
```
|
||||
@@ -1,115 +0,0 @@
|
||||
# 性能基准测试使用
|
||||
|
||||
本节介绍如何在 C++ 和 Python 中使用性能基准测试工具,并提供示例 YAML 配置文件。
|
||||
|
||||
## 使用通用基准测试节点
|
||||
|
||||
```
|
||||
ros2 run orbbec_camera common_benchmark_node.py \
|
||||
--run_time 2h \
|
||||
--csv_file /path/to/log.csv
|
||||
```
|
||||
|
||||
* **参数**
|
||||
* **--run_time**:监控持续时间,指定为时间字符串,如 `"10s"`、`"5m"`、`"1h"`、`"2d"`。默认为 10 秒。
|
||||
* **--csv_file**:输出 CSV 文件的路径。默认情况下,它保存在工作空间目录中,名称为 "camera_monitor_log.csv"。
|
||||
|
||||
## 使用服务基准测试节点
|
||||
|
||||
### ROS2 C++
|
||||
|
||||
* **单个服务基准测试**
|
||||
|
||||
```
|
||||
ros2 run orbbec_camera service_benchmark_node \
|
||||
--ros-args \
|
||||
-p service_name:=/camera/get_depth_gain \
|
||||
-p service_type:=orbbec_camera_msgs/srv/GetInt32 \
|
||||
-p count:=10
|
||||
```
|
||||
|
||||
* **多个服务基准测试(YAML 配置)**
|
||||
|
||||
```
|
||||
ros2 run orbbec_camera service_benchmark_node \
|
||||
--ros-args \
|
||||
-p yaml_file:=/path/to/default_service_cpp.yaml
|
||||
```
|
||||
|
||||
### ROS2 Python
|
||||
|
||||
* **单个服务基准测试**
|
||||
|
||||
```
|
||||
ros2 run orbbec_camera service_benchmark_node.py --service /camera/get_depth_gain --count 10
|
||||
```
|
||||
|
||||
* **多个服务基准测试(YAML 配置)**
|
||||
|
||||
```
|
||||
ros2 run orbbec_camera service_benchmark_node.py --yaml_file /path/to/default_service.yaml
|
||||
```
|
||||
|
||||
### **示例 YAML 配置**
|
||||
|
||||
我们提供了一个示例 YAML 配置,位于 `scripts` 目录中,名为 `service_default.yaml`。
|
||||
|
||||
```yaml
|
||||
default_count: 50
|
||||
|
||||
services:
|
||||
- name: /camera/get_auto_white_balance
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_color_exposure
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_color_gain
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_depth_exposure
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_depth_gain
|
||||
type: orbbec_camera_msgs/srv/GetInt32
|
||||
- name: /camera/get_device_info
|
||||
type: orbbec_camera_msgs/srv/GetDeviceInfo
|
||||
- name: /camera/send_software_trigger
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_auto_white_balance
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_color_ae_roi
|
||||
type: orbbec_camera_msgs/srv/SetArrays
|
||||
request: {data_param: [0,1279,0,719]}
|
||||
- name: /camera/set_color_auto_exposure
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_color_exposure
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 30}
|
||||
- name: /camera/set_color_flip
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_color_gain
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 20}
|
||||
- name: /camera/set_color_mirror
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_color_rotation
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 90}
|
||||
- name: /camera/set_depth_ae_roi
|
||||
type: orbbec_camera_msgs/srv/SetArrays
|
||||
request: {data_param: [0,1279,0,719]}
|
||||
- name: /camera/set_depth_auto_exposure
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_depth_exposure
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 3000}
|
||||
- name: /camera/set_depth_flip
|
||||
type: std_srvs/srv/SetBool
|
||||
request: {data: false}
|
||||
- name: /camera/set_depth_gain
|
||||
type: orbbec_camera_msgs/srv/SetInt32
|
||||
request: {data: 200}
|
||||
```
|
||||
@@ -0,0 +1,71 @@
|
||||
# 设备查询与基础维护工具
|
||||
|
||||
本节介绍不依赖相机节点即可使用的设备查询工具,以及基础 USB 权限维护脚本。
|
||||
|
||||
## list_devices_node
|
||||
|
||||
`list_devices_node` 用于枚举当前连接的 Orbbec 设备。它会输出设备名称、序列号、USB/网络信息、固件版本、preset 列表、preset 版本以及网络设备 IP 配置状态。
|
||||
|
||||
该工具不需要先启动相机节点,适合在启动 launch 前确认设备连接状态。
|
||||
|
||||
v2.8.x 之后,该工具会额外输出固件版本、preset 列表、preset 版本、网口设备本地网卡名和 IP 来源类型(`NONE`、`LLA`、`DHCP`、`PERSISTENT`)。当某个设备枚举失败时,工具会继续枚举其他设备。
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_devices_node
|
||||
```
|
||||
|
||||
如需开启 SDK 文件日志并尝试开启固件日志:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_devices_node -- --sdk_log_level debug
|
||||
```
|
||||
|
||||
## list_depth_work_mode_node
|
||||
|
||||
`list_depth_work_mode_node` 用于查询当前设备的 depth work mode 和支持的 depth work mode 列表。它不需要先启动相机节点。
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_depth_work_mode_node
|
||||
```
|
||||
|
||||
## list_camera_profile_mode_node
|
||||
|
||||
`list_camera_profile_mode_node` 用于查询设备支持的彩色、深度、IR、IMU、LiDAR stream profile,并输出 depth work mode 和 preset 信息。它不需要先启动相机节点。
|
||||
|
||||
查询默认设备:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_camera_profile_mode_node
|
||||
```
|
||||
|
||||
指定序列号查询:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_camera_profile_mode_node -- --serial_number <SN>
|
||||
```
|
||||
|
||||
如需开启 SDK 文件日志:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera list_camera_profile_mode_node -- --sdk_log_level debug
|
||||
```
|
||||
|
||||
## list_ob_devices.sh
|
||||
|
||||
`list_ob_devices.sh` 是源码脚本,会从 Linux `/sys/bus/usb` 扫描 Orbbec USB 设备,输出 USB port、产品名和序列号。它不依赖 SDK,也不需要相机节点。
|
||||
|
||||
```bash
|
||||
cd orbbec_camera/scripts
|
||||
./list_ob_devices.sh
|
||||
```
|
||||
|
||||
## install_udev_rules.sh
|
||||
|
||||
`install_udev_rules.sh` 用于安装 USB 设备 udev 规则,解决普通用户访问设备的权限问题。该脚本需要 `sudo`。
|
||||
|
||||
```bash
|
||||
cd orbbec_camera/scripts
|
||||
sudo bash install_udev_rules.sh
|
||||
```
|
||||
|
||||
安装后脚本会重新加载 udev 规则。
|
||||
+52
-44
@@ -1,4 +1,6 @@
|
||||
# 其他工具
|
||||
# 诊断与延迟分析工具
|
||||
|
||||
本节介绍帧连续性、时间戳、topic statistics、端到端延迟和调试辅助工具。
|
||||
|
||||
## 帧丢失日志与时间戳 CSV 记录
|
||||
|
||||
@@ -58,53 +60,59 @@ CSV 中包含 SDK frame index、hardware frame number、sensor timestamp、devic
|
||||
|
||||
当前这份 CSV 主要用于分析单路彩色或深度流的连续性和延迟,不能直接用于统计彩色与深度之间的同步效果。
|
||||
|
||||
## Ob_benchmark 工具
|
||||
## topic_statistics_node
|
||||
|
||||
> 此工具的目标是对各种 OrbbecSDK_ROS2 相机配置的性能进行基准测试。基准测试结果取决于使用的相机和设置。(目前仅适用于 ROS2 Humble)
|
||||
|
||||
您可以在 [example](https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples) 中找到示例使用代码。
|
||||
|
||||
### 工具配置 ([start_benchmark_params.json](https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/config/tools/startbenchmark/start_benchmark_params.json))
|
||||
|
||||
```json
|
||||
{
|
||||
"start_benchmark_params": {
|
||||
"camera_name": [
|
||||
"camera_01",
|
||||
"camera_02",
|
||||
"camera_03",
|
||||
"camera_04"
|
||||
],
|
||||
"process_name": "component_conta",
|
||||
"switch_cycle": 300,
|
||||
"test_cycle": 1,
|
||||
"skip_number": 30
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `camera_name`:要配置的相机名称。例如:`"camera_01"`、`"camera_02"` 等。
|
||||
- `process_name`:要监控的进程名称。例如,`"component_conta"` 将监控容器进程的数据。
|
||||
- `switch_cycle`:切换配置的周期时间,以秒为单位。例如,设置为 `300` 意味着配置将每 300 秒切换一次。
|
||||
- `test_cycle`:测试周期,以秒为单位。例如,设置为 `1` 意味着工具将每 1 秒收集一次监控进程的数据。
|
||||
- `skip_number`:要跳过的数据点数量。例如,设置为 `30` 意味着将忽略前 30 个数据点。
|
||||
|
||||
### 相机配置(启动文件)
|
||||
|
||||
在 launch 文件夹中,有多个 .launch.py 文件(`ob_benchmark_0.launch.py`、`ob_benchmark_1.launch.py`、...、`ob_benchmark_19.launch.py`)。每个文件对应不同的相机配置。
|
||||
|
||||
### 运行 ob_benchmark 工具
|
||||
|
||||
要运行该工具,请使用以下命令:
|
||||
`topic_statistics_node` 使用 ROS 2 topic statistics 统计图像 topic 的 age 和 period,并在当前目录生成 `statistics.csv`。使用前需要先启动相机节点。
|
||||
|
||||
```bash
|
||||
source install/setup.bash
|
||||
ros2 run orbbec_camera ob_benchmark_node
|
||||
ros2 run orbbec_camera topic_statistics_node \
|
||||
--ros-args \
|
||||
-p image_topic:=/camera/color/image_raw \
|
||||
-p statistics_topic:=/statistics
|
||||
```
|
||||
|
||||
### 输出数据文件
|
||||
## frame_latency_node
|
||||
|
||||
输出数据文件将存储在 ob_benchmark 文件夹中,文件名如 `0.csv`、`1.csv`、...、19.csv。例如:
|
||||
`frame_latency_node` 订阅指定 topic,按消息 header stamp 计算端到端延迟并输出 FPS。它支持 `image`、`points`、`imu`、`metadata`、`camera_info`、`rgbd`、`imu_info`、`tf` 等 topic 类型。使用前需要先启动相机节点。
|
||||
|
||||
- `0.csv` 包含来自 `ob_benchmark_0.launch.py` 配置的数据。
|
||||
- `1.csv` 包含来自 `ob_benchmark_1.launch.py` 配置的数据。
|
||||
```bash
|
||||
ros2 run orbbec_camera frame_latency_node \
|
||||
--ros-args \
|
||||
-p topic_name:=/camera/color/image_raw \
|
||||
-p topic_type:=image
|
||||
```
|
||||
|
||||
统计点云 topic:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera frame_latency_node \
|
||||
--ros-args \
|
||||
-p topic_name:=/camera/depth/points \
|
||||
-p topic_type:=points
|
||||
```
|
||||
|
||||
## monitor_fd.sh
|
||||
|
||||
`monitor_fd.sh` 每秒统计 `component_container` 进程的文件描述符数量,用于排查文件描述符泄漏。使用前需要目标进程正在运行。
|
||||
|
||||
```bash
|
||||
cd orbbec_camera/scripts
|
||||
./monitor_fd.sh
|
||||
```
|
||||
|
||||
## plot_stat.py
|
||||
|
||||
`plot_stat.py` 读取当前目录下的 `statistics.csv`,绘制 topic statistics 中 age 和 period 的曲线。通常与 `topic_statistics_node` 配合使用。
|
||||
|
||||
```bash
|
||||
cd <statistics.csv所在目录>
|
||||
python3 /path/to/orbbec_camera/scripts/plot_stat.py
|
||||
```
|
||||
|
||||
## receive_pc.py
|
||||
|
||||
`receive_pc.py` 订阅 `/camera/depth/points`,用于快速验证 point cloud topic 是否可被 Python 节点接收。使用前需要先启动相机节点并开启点云。
|
||||
|
||||
```bash
|
||||
python3 orbbec_camera/scripts/receive_pc.py
|
||||
```
|
||||
@@ -1,45 +0,0 @@
|
||||
# 介绍
|
||||
|
||||
本节介绍性能基准测试工具,解释其目的、功能以及它可以帮助您测量的内容。
|
||||
|
||||
## 通用基准测试节点
|
||||
|
||||
`common_benchmark_node.py` 是一个用于监控在 ROS 环境中运行的 Orbbec 相机性能的工具。它实时收集和记录关键相机指标,如帧率、延迟、系统资源使用和丢包率,帮助用户评估相机节点的稳定性和性能(每秒更新一次)。
|
||||
|
||||
**功能**
|
||||
|
||||
- 测量发布的图像帧率和延迟(当前、最小、最大、平均)
|
||||
|
||||
- 监控相机节点的 CPU/ARM 使用率(当前、最小、最大、平均)
|
||||
|
||||
- 跟踪丢帧率(发布者)和丢包率(订阅者)
|
||||
|
||||
- 将实时统计信息(1 Hz)打印到终端并将结果保存到 CSV 文件
|
||||
|
||||
- 支持可配置的运行时长和 CSV 输出路径
|
||||
|
||||
**示例**
|
||||
|
||||
在 ROS1 中,可以测量丢帧率和丢包率,而在 ROS2 中,header 缺少 `seq` 字段,因此仅计算发布者端的丢帧率。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 服务基准测试节点
|
||||
|
||||
`service_benchmark_node` 工具用于监控服务调用的性能。它可以测量服务调用的成功率和执行服务所需的时间。
|
||||
|
||||
**功能**
|
||||
|
||||
- 对单个服务调用进行基准测试,测量延迟和成功率
|
||||
|
||||
- 对 YAML 配置文件中定义的多个服务进行基准测试
|
||||
|
||||
- 可选择将基准测试结果保存到 CSV 文件
|
||||
|
||||
**示例**
|
||||
|
||||

|
||||
|
||||
当您需要收集多个服务的数据时,建议使用 CSV 文件进行分析。
|
||||
@@ -0,0 +1,68 @@
|
||||
# 多相机辅助工具
|
||||
|
||||
本节介绍多相机图像保存、同步验证和静态 TF 调试辅助工具。
|
||||
|
||||
## multi_save_rgbir_node
|
||||
|
||||
`multi_save_rgbir_node` 根据 `multi_save_rgbir_params.json` 配置订阅多相机 RGB/IR 图像和 metadata,并通过 `start_capture` 服务触发保存。使用前需要先启动对应的多相机节点。
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera multi_save_rgbir_node
|
||||
```
|
||||
|
||||
配置文件位于:
|
||||
|
||||
```text
|
||||
orbbec_camera/config/tools/multisavergbir/multi_save_rgbir_params.json
|
||||
```
|
||||
|
||||
触发保存 10 帧:
|
||||
|
||||
```bash
|
||||
ros2 service call /start_capture orbbec_camera_msgs/srv/SetInt32 "{data: 10}"
|
||||
```
|
||||
|
||||
## image_sync_example_node
|
||||
|
||||
`image_sync_example_node` 用于在线验证多路图像时间戳同步情况。它会订阅 1 到 8 路图像 topic,显示同步图像,并输出时间戳差和 FPS 统计。使用前需要先启动相机节点。
|
||||
|
||||
未设置 `sync_topics` 时,节点会自动发现 color/depth 图像 topic:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera image_sync_example_node
|
||||
```
|
||||
|
||||
也可以手动指定 topic:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera image_sync_example_node \
|
||||
--ros-args \
|
||||
-p sync_topics:="['/camera_01/color/image_raw', '/camera_02/color/image_raw']"
|
||||
```
|
||||
|
||||
多相机同步验证的详细说明见 [多相机同步验证工具](../5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.md)。
|
||||
|
||||
## SyncFramesMain.py
|
||||
|
||||
`SyncFramesMain.py` 是多相机同步验证的离线分析脚本。它会读取输出目录中的帧数据,根据设备 PID 选择对应帧匹配脚本,并生成匹配、未匹配和异常结果。
|
||||
|
||||
```bash
|
||||
cd orbbec_camera/examples/multi_camera_synced_verification_tool/multicamera_sync/Python
|
||||
python3 SyncFramesMain.py
|
||||
```
|
||||
|
||||
## group_image.py
|
||||
|
||||
`group_image.py` 按时间戳对多相机保存的图片分组,并将分组结果复制到 `grouped_images` 目录。脚本内默认图片目录为 `/home/orbbec/image/`,使用前需按实际路径修改。
|
||||
|
||||
```bash
|
||||
python3 orbbec_camera/scripts/group_image.py
|
||||
```
|
||||
|
||||
## static_transforms_publisher.py
|
||||
|
||||
`static_transforms_publisher.py` 发布脚本中写死的多相机静态 TF,用于特定多相机调试场景。使用前需要根据实际标定修改矩阵和 frame 名称。
|
||||
|
||||
```bash
|
||||
python3 orbbec_camera/scripts/static_transforms_publisher.py
|
||||
```
|
||||
@@ -0,0 +1,86 @@
|
||||
# 网络配置工具
|
||||
|
||||
本节介绍网络相机 IP 配置工具。网络相机的启动、自动枚举、指定 IP 启动和相机节点 Force IP 参数见 [网络相机](../5_advanced_guide/configuration/net_camera.md)。
|
||||
|
||||
## ip_config_tool
|
||||
|
||||
`ip_config_tool` 用于直接从 ROS 2 配置网络相机的 IP 设置,包括 DHCP、persistent IP、Force IP 和 DHCP 分配 IP 超时时间。它不需要先启动相机节点,适合快速分配或更新 IP 地址。
|
||||
|
||||
> **注意:** 通过 `set_ip` 应用的 DHCP / persistent IP 配置会写入设备。`force_ip` 是临时强制 IP,设备断电或重启后需要重新应用。
|
||||
> **兼容说明**:`set_device_ip` 仍作为兼容别名保留,实际调用 `ip_config_tool`。旧参数 `old_ip` 已更名为 `current_ip`。
|
||||
|
||||
查看帮助:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- --help
|
||||
```
|
||||
|
||||
开启 DHCP:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
set_ip \
|
||||
--current_ip 192.168.1.10 \
|
||||
--enable_dhcp true \
|
||||
--enable_persistent_ip false
|
||||
```
|
||||
|
||||
关闭 DHCP 并设置 persistent IP:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
set_ip \
|
||||
--current_ip 192.168.1.10 \
|
||||
--enable_dhcp false \
|
||||
--enable_persistent_ip true \
|
||||
--new_ip 192.168.1.11 \
|
||||
--mask 255.255.255.0 \
|
||||
--gateway 192.168.1.1
|
||||
```
|
||||
|
||||
同时开启 DHCP 和 persistent IP(仅支持 IP 配置 V2 的设备/固件):
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
set_ip \
|
||||
--current_ip 192.168.1.10 \
|
||||
--enable_dhcp true \
|
||||
--enable_persistent_ip true \
|
||||
--new_ip 192.168.1.11 \
|
||||
--mask 255.255.255.0 \
|
||||
--gateway 192.168.1.1
|
||||
```
|
||||
|
||||
通过 MAC 地址 Force IP:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
force_ip \
|
||||
--force_ip_mac 54:14:FD:06:07:DA \
|
||||
--new_ip 192.168.1.50 \
|
||||
--mask 255.255.255.0 \
|
||||
--gateway 192.168.1.1
|
||||
```
|
||||
|
||||
设置 DHCP 分配 IP 超时时间:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ip_config_tool -- \
|
||||
set_dhcp_timeout \
|
||||
--current_ip 192.168.1.10 \
|
||||
--timeout 10
|
||||
```
|
||||
|
||||
## 参数
|
||||
|
||||
- **`current_ip`**:设备的当前 IP 地址。
|
||||
- **`enable_dhcp`**:在 `set_ip` 或 `force_ip` 子命令中设置是否启用 DHCP。
|
||||
- **`enable_persistent_ip`**:在 `set_ip` 子命令中设置是否启用 persistent IP。
|
||||
- **`new_ip`**:要分配的 persistent IP 或 Force IP 地址。
|
||||
- **`mask`**:新 IP 的子网掩码。
|
||||
- **`gateway`**:新 IP 的网关地址。
|
||||
- **`force_ip_mac`**:Force IP 目标设备 MAC 地址。
|
||||
- **`timeout`** / **`dhcp_assign_ip_timeout`**:DHCP 分配 IP 超时时间,单位为秒。
|
||||
- **`sdk_log_level`**:SDK 文件日志级别,可选值:`debug`、`info`、`warn`、`error`、`fatal`、`off`。非 `off` 时会同时尝试开启固件日志。
|
||||
|
||||
> **版本说明**:`LLA` 开关仅 Gemini 335Le 固件 `1.7.05` 及以上、Gemini 435Le 固件 `1.3.17` 及以上支持。
|
||||
@@ -0,0 +1,35 @@
|
||||
# 工具索引
|
||||
|
||||
本页作为 OrbbecSDK_ROS2 工具索引,只列出每个工具的用途和完整说明入口。运行 `ros2 run` 命令前,请先加载 ROS 2 和工作空间环境:
|
||||
|
||||
```bash
|
||||
source /opt/ros/$ROS_DISTRO/setup.bash
|
||||
source install/setup.bash
|
||||
```
|
||||
|
||||
## 工具总览
|
||||
|
||||
| 工具 | 使用场景 | 简介 | 完整说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `list_devices_node`(推荐) | 设备查询 | 枚举 Orbbec 设备并输出设备、固件、preset 和 IP 状态。 | [设备查询与基础维护工具](device_query_tools.md) |
|
||||
| `list_depth_work_mode_node` | 设备查询 | 查询当前设备支持的 depth work mode。 | [设备查询与基础维护工具](device_query_tools.md) |
|
||||
| `list_camera_profile_mode_node`(推荐) | 设备查询 | 查询设备支持的 stream profile、depth work mode 和 preset。 | [设备查询与基础维护工具](device_query_tools.md) |
|
||||
| `list_ob_devices.sh` | 设备查询 | 从 Linux USB sysfs 扫描 Orbbec 设备。 | [设备查询与基础维护工具](device_query_tools.md) |
|
||||
| `install_udev_rules.sh` | 设备维护 | 安装 USB 设备 udev 规则。 | [设备查询与基础维护工具](device_query_tools.md) |
|
||||
| `firmware_update_tool`(推荐) | 设备维护 | 升级固件或烧录 preset 文件。 | [固件升级工具](firmware_update_tool.md) |
|
||||
| `ip_config_tool`(推荐) | 网络配置 | 配置网络相机 DHCP、persistent IP、Force IP。 | [网络配置工具](network_config_tools.md) |
|
||||
| `common_benchmark_node.py`(推荐) | 性能基准测试 | 统计帧率、延迟、CPU、内存和丢帧。 | [性能基准测试工具](benchmark_tools.md) |
|
||||
| `service_benchmark_node.py` | 性能基准测试 | 统计 service 调用延迟和成功率。 | [性能基准测试工具](benchmark_tools.md) |
|
||||
| `ob_benchmark_node` | 性能基准测试 | 周期性运行 benchmark 配置并记录 CPU/内存。 | [性能基准测试工具](benchmark_tools.md) |
|
||||
| `start_benchmark_node` | 性能基准测试 | benchmark 流程中的多 topic 订阅端。 | [性能基准测试工具](benchmark_tools.md) |
|
||||
| `enable_frame_drop_log` / `frame_timestamp_csv_file`(推荐) | 性能诊断 | 相机节点内置的丢帧日志和时间戳 CSV 记录功能。 | [诊断与延迟分析工具](diagnostic_tools.md) |
|
||||
| `topic_statistics_node` | 性能诊断 | 统计图像 topic 的 age 和 period。 | [诊断与延迟分析工具](diagnostic_tools.md) |
|
||||
| `frame_latency_node` | 性能诊断 | 统计指定 topic 的延迟和 FPS。 | [诊断与延迟分析工具](diagnostic_tools.md) |
|
||||
| `monitor_fd.sh` | 性能诊断 | 监控 `component_container` 文件描述符数量。 | [诊断与延迟分析工具](diagnostic_tools.md) |
|
||||
| `plot_stat.py` | 性能诊断 | 绘制 `statistics.csv` 中的 topic statistics 曲线。 | [诊断与延迟分析工具](diagnostic_tools.md) |
|
||||
| `receive_pc.py` | 调试辅助 | 验证 point cloud topic 是否可被 Python 节点接收。 | [诊断与延迟分析工具](diagnostic_tools.md) |
|
||||
| `multi_save_rgbir_node`(推荐) | 多相机 | 多相机 RGB/IR 图像保存工具。 | [多相机辅助工具](multi_camera_tools.md) |
|
||||
| `image_sync_example_node`(推荐) | 多相机 | 在线显示并统计多路图像时间戳同步情况。 | [多相机辅助工具](multi_camera_tools.md) |
|
||||
| `SyncFramesMain.py` | 多相机 | 多相机同步验证离线分析脚本。 | [多相机辅助工具](multi_camera_tools.md) |
|
||||
| `group_image.py` | 多相机 | 按时间戳对多相机保存图片分组。 | [多相机辅助工具](multi_camera_tools.md) |
|
||||
| `static_transforms_publisher.py` | 多相机调试 | 发布脚本中写死的多相机静态 TF。 | [多相机辅助工具](multi_camera_tools.md) |
|
||||
Reference in New Issue
Block a user