发行说明
依赖项
IGX:IGX-SW 1.1 生产版本
AGX:使用 SDK Manager 设置 JetPack 6.0 release 2。请注意,HSB 尚不支持 JetPack 6.1。
Holoscan 传感器桥,10G;FPGA v2412
请务必遵循版本随附的安装说明。要生成文档,请在主机系统中运行 sh docs/make_docs.sh
,然后使用浏览器查看 docs/user_guide/_build/html/index.html
。
1.1-GA 的更新
HSB 2.0-GA 依赖于 FPGA IP 版本 2412。 请查看用户指南,了解如何更新配置的说明。请注意,枚举数据已更改,因此 2.0-GA 之前的软件将无法枚举发布 1.1(或更早版本)枚举数据的板卡;同样,1.1 及更早版本的软件将无法找到较新的 2.0 配置板卡。对于 Lattice-CLNX100-ETH-SENSOR-BRIDGE 设备,请务必在更新 HSB 固件时包含“–force”选项;这样,软件将使用软件树中的硬编码枚举数据,而不是依赖设备本身的数据。有关更多详细信息,请参阅固件下载说明。如果您需要将 FPGA 恢复到 2407 版本,请查看下面的 FAQ。
HSB 已更新为与 Holoscan SDK 2.7 配合使用。 一些较旧的 API,特别是在 C++ fmt 工具中,已被弃用,因此已应用小的代码调整,以使 HSB 主机代码保持最新。
新的 HSB 功能,用于安全性和可靠性, 包括 CRC、控制平面序列号检查和附加时间戳。包含的时间戳捕获 FPGA IP 块观察到接收帧中第一个数据时的 PTP 时间,以及发送帧中最后一个数据后的时间。对于支持硬件 PTP 同步的基于 ConnectX 的主机系统,这些时间戳在主机时间的一微秒内,可用于准确测量整个管道的延迟。这些元数据值可通过 HSDK 应用程序元数据 API 提供给管道运算符。有关更多详细信息,请参阅用户指南。控制平面事务已启用序列号检查,可以防止多个主机与同一 HSB 单元交互。接收数据帧的总体 CRC 也包含在内,在以后的版本中,将演示高性能基于 CUDA 的 CRC 检查器,显示入口数据的帧速率 CRC 验证。
单个网络端口上的多个传感器。 添加了 API,允许应用程序配置多个传感器以使用同一网络端口。在 examples 目录中,
single_network_stereo_imx274_player.py
演示了如何配置 IMX274 立体声对中的两个摄像头,以使用单个网络端口传输 1080p 视频。请注意,4k 视频流每个需要大约 6.5Gbps,因此不支持在此模式下通过单个网络端口同时使用两个摄像头。有关更多详细信息,请参阅用户指南。性能和延迟测量工具。 包含在安全性和可靠性功能中的时间戳可用于准确测量延迟,从数据到达 FPGA IP 块的时间,一直到管道末端(例如,可视化之后)。有关示例,请参阅
examples/imx274_transfer_latency.py
。有关延迟测量的更多详细信息,请参阅 latency.md。GammaCorrectionOp 已移除。 HSDK 2.3 添加了对 sRGB 空间的支持,提供了一个优化的路径,包括可视化工具中的 Gamma 校正。通过移除 HSB 的原始 Gamma 校正并改用可视化工具,管道延迟减少了 0.5 毫秒。对于使用 GammaCorrectionOp 的应用程序,只需从管道中移除该运算符,并在 HolovizOp 的构造函数参数列表中包含
framebuffer_srgb=True
即可。通过 Microchip MPF200-ETH-SENSOR-BRIDGE 支持 IMX477 摄像头。
FAQ
如果您的应用程序在演示容器中运行时,出现“Failed to initialize glfw”消息而停止,请确保授予应用程序通过“xhost +”命令连接到显示的权限。此命令不会跨重启记住。
在 Lattice HSB 单元上将 FPGA 从 2412 恢复到 2407。如果您需要将 Lattice HSB 单元从 2412 恢复到 2407,请使用 2.0-GA 树并使用 2407 清单文件进行编程。在演示容器中
hololink program scripts/manifest-2407.yaml
编程和断电重启后,2.0-GA 版本的 HSB 主机代码将不再看到该板卡。此时,您可以返回使用 1.1-GA 版本来使用该板卡。1.1-GA 软件将无法枚举运行 2412 配置的板卡;必须使用较新的树来写入较旧的固件。
HSB 网络接收器运算符使用 Holoscan SDK 提供的 API,以便与管道中的后续运算符共享时间戳。请务必在初始化时调用应用程序 (C++)
is_metadata_enabled(true)
方法或 (python)is_metadata_enabled = True
;否则,每个运算符将仅看到一个空的元数据结构。在运算符的compute
方法中,如果您向管道元数据添加其他项,请务必在调用(output).emit
之前添加该元数据。如果您的管道合并了两个路径,并且在未能合并这些路径的元数据时遇到runtime_error
异常,请参阅 关于元数据更新策略的页面,了解如何管理此问题。以太网上的可用带宽有可能被超限,尤其是在单个网络连接上使用多个传感器时。例如,一个 4k、60FPS、RAW10 视频流需要大约 6.5Gbps,而以此方式配置的立体声对将需要大约 13Gbps——这远远超过了单个 10Gbps 网络端口。在这种情况下,HSB 将丢弃数据,可能在单个网络消息中。当以这种方式在规范之外操作时,无法重建原始传感器数据。该软件没有可用带宽的概念,因此由开发人员确保不超过带宽限制。
AGX 板载以太网支持硬件 PTP 同步,可以通过遵循为 IGX 设置 PTP 的相同方向来启用。具体而言,在
$EN0
中使用适当的网络设备名称(例如,eth0
),只需按照主机设置页面上的说明为 IGX 设置 PTP 即可。
已知异常
在 JetPack 6.1 上运行的 Orin AGX 显示出非常缓慢的网络行为。对此的调查正在进行中;目前,在 Orin AGX 上,仅支持 JetPack 6.0 r2。
在软件命令的重置之后,HSB 有时会观察到序列号或控制平面事务失败。当命令 HSB 重置时,主机系统会观察到网络连接丢失,并且可能需要一段时间才能实现稳定的通信。在某些特定的 Orin AGX 系统中,
dmesg
显示此重新协商可能需要 60 多秒。在此期间,HSB 软件尝试读取 FPGA 版本 ID,并且可能会超时。对此的调查正在进行中;目前,可以通过在 HSB 和主机系统之间放置一个 10G 以太网交换机来解决具有此行为的系统。在使用多线程或基于事件的调度程序的同一网络端口上运行立体声传感器馈送的 Orin AGX 系统,操作不可靠。目前,仅在使用默认(贪婪)调度程序的情况下支持带有 HSB 的 AGX 系统。
依赖项
IGX:IGX-SW 1.0 生产版本
AGX:使用 SDK Manager 设置 JetPack 6.0 release 2。
Holoscan 传感器桥,10G;FPGA v2407
请务必遵循版本随附的安装说明。要生成文档,请在主机系统中运行 sh docs/make_docs.sh
,然后使用浏览器查看 docs/user_guide/_build/html/index.html
。
1.0-GA 的更新
大多数 HSB 框架组件现在都用 C++ 实现,支持用 C++ 编写的应用程序。有关用 C++ 编写的 HSB 应用程序示例,请参阅
examples/imx274_player.cpp
。影响 C++ 和 Python 应用程序代码的更改包括HololinkEnumerator 重命名为 Enumerator
HololinkDataChannel 现在是 DataChannel
RoceReceiverOperator 现在是 RoceReceiverOp
从功能上讲,这些对象的使用与 1.0-GA 相同。请注意,仍然支持用 Python 编写的传感器驱动程序。
HSB 已更新为与 Holoscan SDK 2.3 配合使用。您的部署系统必须配置兼容的软件环境(例如,用于 AGX 配置的 JetPack 6)。
主机设置说明有一些小的更改。更改的重点是更新网络设备名称和 AGX 配置的性能。
通过 ArgusIspOp 的硬件 ISP [仅限 iGPU 模式下的 Orin]。应用程序可以通过使用 Orin 系统中内置的 NV ISP 设备的功能来卸载图像信号处理,这些系统在 iGPU(没有 dGPU 的 AGX 或 IGX)下运行。为 1080p 图像提供支持;请联系 NVIDIA 以获取更新的库,以支持 4K 图像。有关使用此功能的示例管道,请参阅
examples/linux_hwisp_player.py
。API 可用于访问 Holoscan 传感器桥上接头上的 GPIO。有关详细信息,请参阅用户指南。
已知异常
AGX 在“hololink reset”上的网络连接问题。
在某些设置中,调用 hololink reset 会导致一系列消息输出到 AGX 内核日志,如下所示
[ 15.587973] nvethernet 6800000.ethernet: [xpcs_lane_bring_up][477][type:0x4][loga-0x0] PCS block lock SUCCESS [ 15.588001] nvethernet 6800000.ethernet eth0: Link is Up - 10Gbps/Full - flow control off [ 16.099966] nvethernet 6800000.ethernet: [xpcs_lane_bring_up][477][type:0x4][loga-0x0] PCS block lock SUCCESS [ 16.099987] nvethernet 6800000.ethernet eth0: Link is Up - 10Gbps/Full - flow control off
当主机网络接口正在重新同步时,与 HSB 的通信将不可靠。当这些消息停止添加到内核日志时,此重新同步完成。
iGPU 配置:启动容器时显示“Failed to detect NVIDIA driver version”。
可以忽略此消息。Holoscan SDK 容器初始化包括检查 dGPU 驱动程序版本;在 iGPU 配置中,未加载此驱动程序,从而导致此消息。iGPU 操作不受此影响,并将按预期运行。
AGX 运行 examples/linux_body_pose_estimation.py –camera-mode=0,第一次运行时,可能会导致视频卡顿。
第一次运行人体姿势估计应用程序时,.onnx 文件将转换为 TRT 引擎文件,这是一个可能需要几分钟的步骤。后续运行人体姿势估计应用程序将跳过转换,而只是直接加载此引擎文件。在转换期间,当网络上正在使用高带宽时(通过“–camera-mode=0”),内核会停止向应用程序传递接收到的 UDP 消息,从而导致不显示视频。在转换完成后,稍后运行相同的程序,将按预期运行。
HSB 不转发在 MIPI 接口上接收到的数据,从而导致“Ingress frame timeout; ignoring.”消息。
FPGA MIPI 接收器块 IP 中的一个错误导致数据在传递到 FPGA 的 UDP 分组器之前被丢弃;导致没有传感器数据传递到主机。如果您已命令摄像头发送图像数据,但未观察到数据并且显示超时消息,则可以通过在 HSB 演示容器中发出以下命令来验证这是否是原因
hololink read_uint32 0x50000000 # for the first camera hololink read_uint32 0x60000000 # for the second camera
如果摄像头配置为发出数据,但在此内存位置中出现 0,则表明接收器处于此卡顿状态。
hololink.reset()
能够清除此情况。HSB 发布的 PTP 时间戳未与主机时间同步。
用户指南硬件设置说明 显示了如何配置
phc2sys
工具,该工具可确保 NIC 的时间时钟(与 PTP 网络消息一起发布)与主机实时时钟同步。按照编写方式,设置说明依赖于默认的 ntpdate 配置来将系统时钟初始化为世界其他地方。按照编写方式,phc2sys
启动未正确等待ntpdate
完成,因此当ntpdate
完成时,phc2sys
会看到系统时间的大幅跳跃。由于phc2sys
缓慢调整 NIC 时钟,因此ptp4l
发布的时间将不会与系统时钟同步,并且可能需要很长时间才能同步。要验证您是否处于这种情况,请观察命令systemctl status phc2sys-*.service
中“sys offset”列的输出;较大的绝对值表示这种情况。要解决此问题,请在 ntpdate 同步后运行sudo systemctl restart phc2sys-*.service
。有一些传闻证据表明,将“-w”添加到phc2sys
命令行可能会解决此问题,但此选项的文档未解决此处使用的配置。