mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-09 06:17:46 +08:00
docs: add AE/AWB lock test and GigE action command examples; update documentation structure
This commit is contained in:
@@ -12,3 +12,4 @@
|
||||
coordinate_and_tf.md
|
||||
compressed_image.md
|
||||
point_cloud.md
|
||||
examples/ae_awb_lock.md
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# AE/AWB 锁定测试
|
||||
|
||||
本示例提供一个测试用 ROS 2 action,通过相机驱动服务和彩色帧元数据验证自动曝光与自动白平衡收敛后切换到手动值的流程。[查看示例源码](https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples/ae_awb_lock)。
|
||||
|
||||
## 运行
|
||||
|
||||
先启动相机驱动,再在同一命名空间启动测试节点:
|
||||
|
||||
```bash
|
||||
ros2 run orbbec_camera ae_awb_lock_test_node --ros-args -r __ns:=/camera
|
||||
```
|
||||
|
||||
发送目标并打印反馈:
|
||||
|
||||
```bash
|
||||
ros2 action send_goal \
|
||||
/camera/run_ae_awb_lock_test \
|
||||
orbbec_camera_msgs/action/RunAeAwbLockTest \
|
||||
"{timeout_ms: 10000}" \
|
||||
--feedback
|
||||
```
|
||||
|
||||
## 流程与结果
|
||||
|
||||
测试节点订阅相对话题 `color/metadata`,启用自动曝光和自动白平衡,等待 SDK 状态变为 `1`。随后,它从最新彩色帧元数据中读取曝光、彩色增益和色温,并通过结构化属性服务读取 AWB 的 R/B/G 增益。关闭自动控制后,按以下顺序写回捕获值:
|
||||
|
||||
1. 彩色曝光
|
||||
2. 彩色增益
|
||||
3. AWB R/B/G 增益
|
||||
4. 色温
|
||||
|
||||
最后读取的 AWB 增益必须与捕获值完全一致。设备可能量化其他控制值,因此其他读回差异只会作为警告报告。失败或取消时,示例会尝试恢复自动曝光和自动白平衡。
|
||||
|
||||
每个反馈阶段都包含从相机服务新读取的状态值。只有必需服务全部可用后才会发布 `waiting_for_services` 反馈,因为此前无法读取状态。
|
||||
|
||||
运行时必须开启彩色流;使用 `/camera` 命名空间时,`/camera/color/metadata` 必须可用。如果超时前没有元数据,或元数据缺少 `exposure`、`gain`、`white_balance`,测试会失败,不会写入默认值。目标超时覆盖服务发现、服务调用、收敛、捕获、写回和验证;失败后的自动控制恢复使用独立的尽力而为超时。
|
||||
@@ -26,6 +26,7 @@
|
||||
multi_camera/multi_camera_synced.md
|
||||
multi_camera/multi_camera_synced_verification_tool.md
|
||||
multi_camera/gmsl_camera.md
|
||||
multi_camera/gige_action_command.md
|
||||
|
||||
|
||||
配置与模式
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
# GigE Action Command
|
||||
|
||||
本示例通过 Group Actions 同步模式启动两台 Gemini 335Le 相机,并启动一个主机侧 Action Command 发送节点。一个 GVCP Action Command 可以触发多台相机,因此发送节点只在顶层启动一次。[查看示例源码](https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples/gige_action_command)。
|
||||
|
||||
## 运行条件
|
||||
|
||||
- Gemini 335Le 固件 1.8.24 或更高版本
|
||||
- Orbbec SDK 2.10.2 或更高版本
|
||||
- 两台相机与主机位于同一网络
|
||||
|
||||
运行前,修改 `multi_gige_action_command.launch.py` 中两处 `net_device_ip`,使其与相机 IP 一致。
|
||||
|
||||
## 启动相机和发送节点
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera multi_gige_action_command.launch.py
|
||||
```
|
||||
|
||||
启动文件为每台相机提供配置服务,并启动一个发送服务:
|
||||
|
||||
```text
|
||||
/camera_01/get_action_config
|
||||
/camera_01/set_action_config
|
||||
/camera_02/get_action_config
|
||||
/camera_02/set_action_config
|
||||
/gige_action_command_node/send_action_command
|
||||
```
|
||||
|
||||
## 配置相机
|
||||
|
||||
将两台相机的 Action Signal block 0 配置为相同的 key 和 mask:
|
||||
|
||||
```bash
|
||||
ros2 service call /camera_01/set_action_config \
|
||||
orbbec_camera_msgs/srv/SetActionConfig \
|
||||
"{device_key: 1, selector: 0, group_key: 1, group_mask: 1}"
|
||||
|
||||
ros2 service call /camera_02/set_action_config \
|
||||
orbbec_camera_msgs/srv/SetActionConfig \
|
||||
"{device_key: 1, selector: 0, group_key: 1, group_mask: 1}"
|
||||
```
|
||||
|
||||
需要时可读取配置:
|
||||
|
||||
```bash
|
||||
ros2 service call /camera_01/get_action_config \
|
||||
orbbec_camera_msgs/srv/GetActionConfig \
|
||||
"{selector: 0}"
|
||||
```
|
||||
|
||||
## 触发相机组
|
||||
|
||||
请求中的 device key、group key 和 group mask 与相机配置匹配时,相机会收到触发命令。发送服务支持以下三种模式。
|
||||
|
||||
### 立即触发
|
||||
|
||||
将 `trigger_mode` 设为 `0`,延迟和指定时间均设为零:
|
||||
|
||||
```bash
|
||||
ros2 service call /gige_action_command_node/send_action_command \
|
||||
orbbec_camera_msgs/srv/SendActionCommand \
|
||||
"{device_key: 1, group_key: 1, group_mask: 1, broadcast_ip: '255.255.255.255', trigger_mode: 0, delay_ms: 0, scheduled_time: 0}"
|
||||
```
|
||||
|
||||
### 相对延迟触发
|
||||
|
||||
将 `trigger_mode` 设为 `1`,并提供正数毫秒延迟。节点读取主机系统时钟,加上延迟后转换为 SDK 所需的绝对 GVCP/PTP 时间戳。以下示例延迟一秒:
|
||||
|
||||
```bash
|
||||
ros2 service call /gige_action_command_node/send_action_command \
|
||||
orbbec_camera_msgs/srv/SendActionCommand \
|
||||
"{device_key: 1, group_key: 1, group_mask: 1, broadcast_ip: '255.255.255.255', trigger_mode: 1, delay_ms: 1000, scheduled_time: 0}"
|
||||
```
|
||||
|
||||
主机的 `CLOCK_REALTIME` 必须与相机处于同一 PTP 时间域,例如使用 `phc2sys` 同步。启动文件会启用相机的 PTP 同步,但不会配置主机 PTP 服务。延迟应足够长,确保命令能在目标时间前到达相机。
|
||||
|
||||
### 绝对 PTP 时间触发
|
||||
|
||||
将 `trigger_mode` 设为 `2`,`delay_ms` 设为零,并提供未来的编码 PTP 时间戳。高 32 位为秒,低 32 位为纳秒:
|
||||
|
||||
```bash
|
||||
ros2 service call /gige_action_command_node/send_action_command \
|
||||
orbbec_camera_msgs/srv/SendActionCommand \
|
||||
"{device_key: 1, group_key: 1, group_mask: 1, broadcast_ip: '255.255.255.255', trigger_mode: 2, delay_ms: 0, scheduled_time: <PTP_TIMESTAMP>}"
|
||||
```
|
||||
|
||||
响应中的 `encoded_scheduled_time` 是发送给 SDK 的准确 64 位数值。延迟触发时,该值由节点计算。`success: true` 表示主机已发出 GVCP 命令;协议不会返回设备确认。
|
||||
+4
@@ -30,10 +30,14 @@
|
||||
|
||||
[multi_camera_shared_container](https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples/multi_camera_shared_container) 示例创建一个多线程组件容器,并将两个 Gemini 330 系列相机组件加载到该容器中。修改 `multi_camera_shared_container.launch.py` 中两台相机的 `usb_port` 后,运行:
|
||||
|
||||
默认端口为 `2-1` 和 `2-2`。可通过 `ros2 run orbbec_camera list_devices_node` 查询本机端口,并为每台相机设置不同的 `camera_name`。
|
||||
|
||||
```bash
|
||||
ros2 launch orbbec_camera multi_camera_shared_container.launch.py
|
||||
```
|
||||
|
||||
顶层启动文件先创建 `shared_orbbec_container`,再为两台相机分别包含示例专用的 `gemini_330_series_shared_container.launch.py`;第二台相机延迟两秒启动。两个相机必须指定相同的容器名称,并在加载组件前确保容器已经运行。
|
||||
|
||||
该示例向两个相机 include 传递以下参数:
|
||||
|
||||
* `attach_to_shared_component_container=true`:将相机组件加载到已有容器中,而不是新建容器。
|
||||
|
||||
Reference in New Issue
Block a user