5.2.4. GMSL 多相机同步
本节介绍如何在 OrbbecSDK_ROS2 中同步多台通过 GMSL 连接的 Gemini 330 系列相机。
示例代码位于 gmsl_multi_camera_sync。
5.2.4.1. 配置设备文件权限
启动相机前,先为相机同步设备授予访问权限:
sudo chmod 777 /dev/camsync
5.2.4.2. 配置相机
要获取 GMSL 相机的 usb_port,插入相机并在终端中运行以下命令:
ros2 run orbbec_camera list_devices_node
例如,系统报告的 GMSL 相机 usb_port 可能为 gmsl2-1。
根据系统报告的 GMSL 链路,修改 multi_gmsl_camera_synced.launch.py 中的 usb_port。该示例为两台相机复用标准的 gemini_330_series.launch.py。
5.2.4.3. 同步配置
GMSL 多相机同步不需要 Multi-Camera Sync Hub Pro。当前示例中两台相机均使用 secondary_synced 模式。接收触发信号的相机先启动,启用主机端 GMSL 触发的相机在两秒后启动。
5.2.4.3.1. GMSL 链路触发模式
当前示例通过 GMSL 链路使用主机 SoC 产生的 PWM 触发源进行同步,支持以下两种触发模式。具体可用模式以相机型号、固件和 SDK 版本为准。同一组相机中仅需在一台相机上将 enable_gmsl_trigger 设置为 true,其他相机接收相同的触发信号。
| 模式 | 配置及行为 |
|---|---|
secondary_synced |
所有相机设置为 secondary_synced。相机启动数据流后立即采集,并根据 PWM 触发信号调整采集时刻;触发信号停止后仍继续采集。PWM 触发频率应与数据流帧率一致。当前示例使用此模式。 |
hardware_triggering |
所有相机设置为 hardware_triggering。相机仅在收到 PWM 硬件触发信号后采集图像,每次触发的帧数由 frames_per_trigger 设置。对于 GMSL 链路,PWM 触发频率不应超过数据流帧率的一半;例如数据流为 30 FPS 时,触发频率不应超过 15 FPS。 |
注意:通过 GMSL 相机的 8 针同步接口进行同步时,支持的同步模式与 USB 相机相同,请参考多相机同步。本节的
gmsl_trigger_fps和/dev/camsync适用于 GMSL 链路触发方式。
额外的参数设置
gmsl_trigger_fps:设置硬件 SoC 触发源帧率。enable_gmsl_trigger:启用硬件 SoC 触发,同一组相机中仅在一台相机上启用。
运行启动文件
ros2 launch orbbec_camera multi_gmsl_camera_synced.launch.py
注意:两台相机均加载 camera_secondary_params.yaml,默认启用 color 和 depth。如需配置其他数据流,请修改该文件。
5.2.4.4. GMSL 相机的使用限制
GMSL 相机与各种反序列化器芯片(如 MAX9296 和 MAX92716)接口。Orbbec GMSL 相机支持多个流,包括深度、彩色、IR 和 IMU 数据,但存在某些使用限制:
GMSL 仅支持 V4L2 和 YUYV 格式;不支持 MJPG 格式。RGB 输出源自 YUYV 格式转换。
Gemini-335Lg 的元数据通过单独的节点提供,而其他型号的元数据嵌入在视频帧中,这对用户保持透明。
当使用 Max96712 作为反序列化器芯片时,由于 Max96712 芯片的特性,在 secondary_synced 模式下必须提供多机同步触发信号。否则,在切换数据流时会发生数据流中断。
连接在同一个 MAX9296、MAX96712 LinkA/B 或 MAX96712 LinkC/D 上的两个相机有以下限制:
在驱动程序版本 v1.2.02 之前,存在一个限制,即一个相机的 RGB 和另一个相机的右 IR 不能同时流式传输。在驱动程序版本 v1.2.02 之后,限制修改为一个相机的 RGB 和另一个相机的左 IR 不能同时流式传输。
在驱动程序版本 v1.2.02 之前,存在一个限制,即一个相机的 DEPTH 和另一个相机的左 IR 不能同时流式传输。在驱动程序版本 v1.2.02 之后,限制修改为一个相机的 DEPTH 和另一个相机的右 IR 不能同时流式传输。
两个相机的活动流的组合最大数量限制为四个(满足上述两个条件即可确保合规)。
有关更多已知限制,请参考 Orbbec GMSL 相机的使用限制