RDK X5支持的视频框架

你好 @LLLLLLLL,

这是一个非常专业且关键的问题,触及了 RDK 开发中多媒体数据流与AI 推理交互的核心。这些前缀代表了不同的数据格式和API 层级。

简单来说:

  • hbm_img_msgs:是 ROS2 (TROS) 通信层的消息类型,用于在节点间传输零拷贝共享内存图像。
  • hbm:是 模型文件格式 (Horizon Binary Model),也指代共享内存缓冲区。
  • hbDNN:是 BPU 推理引擎 API (Horizon Deep Neural Network),用于加载和运行 .hbm 模型。
  • hbn:通常指 网络模型结构描述 (Horizon Binary Network),是 .hbm 的前身或组成部分,现在较少单独提及,常与 hbm 混用指代模型。

下面为你详细拆解它们的所属框架、层级关系及文档位置。


1. hbm_img_msgs 接口:ROS2 通信层的“零拷贝”协议

  • 所属框架:TROS (TogetherROS) / ROS2 通信中间件。
  • 层级:应用层 / 通信层。
  • 作用:
    它是一个自定义的 ROS2 Message 包。在 RDK 平台上,为了避免图像数据在节点间传递时发生内存拷贝(影响性能),地平线设计了基于共享内存 (Shared Memory) 的传输机制。
    • 发布者(如摄像头节点)将图像写入共享内存。
    • 通过 hbm_img_msgs 消息只传递一个句柄 (Handle) 或索引。
    • 订阅者(如 AI 推理节点)收到消息后,通过句柄直接访问共享内存中的图像数据。
  • 接口定义位置:
    • 源码路径:/opt/tros/share/hbm_img_msgs/ (板端) 或 GitHub 上的 tros_msgs 仓库。
    • 消息定义文件:msg/HbmMsg1080P.msg, msg/HbmMsg.msg 等。
    • C++/Python 接口:使用标准的 rclcpp 或 rclpy 订阅即可,但需要配合地平线的内存管理库来解析数据。
    • 转换示例:如何将 HbmMsg 转为 cv::Mat?参考社区帖子 hbm_img_msgs 转 cv::Mat。

2. hbm 前缀:模型文件与共享内存

  • 含义 A:模型文件格式 (.hbm)

    • 所属框架:AI 工具链 (OpenExplorer / Toolchain)。
    • 层级:数据文件层。
    • 作用:这是地平线 BPU 能直接执行的二进制模型文件。
      • 流程:PyTorch/ONNX $\rightarrow$ HB Mapper (工具链) $\rightarrow$ .hbm 文件。
      • 它包含了网络结构、量化参数和权重,专用于地平线 BPU。
    • 相关工具:hb_mapper, hb_tool。
  • 含义 B:共享内存 (Horizon Buffer Memory)

    • 所属框架:底层内存管理 (HB_MM)。
    • 层级:系统资源层。
    • 作用:hbm_img_msgs 中的 “hbm” 指的就是这种共享内存缓冲区。它是多媒体框架 (VPS/VENC) 和 AI 框架 (BPU) 交换数据的公共语言。

3. hbDNN 前缀:BPU 推理引擎 API

  • 所属框架:BPU SDK (Horizon BPU SDK)。
  • 层级:运行时 API 层 (Runtime API)。
  • 作用:这是一套 C/C++ API,用于在板端加载 .hbm 模型并执行推理。
    • 核心功能:模型加载、输入/输出张量管理、推理执行、后处理。
    • 典型函数:
      • hbDNNCreate():创建推理句柄。
      • hbDNNLoadModel():加载 .hbm 文件。
      • hbDNNInfer() / hbDNNInferAsync():执行推理。
      • hbDNNDestroy():释放资源。
  • 接口定义位置:
    • 头文件:/usr/include/hobot/hb_dnn.h (板端)。
    • 文档:BPU SDK API 手册。
    • 注意:你在帖子中看到的 hbDNNInferV2 是S100/Ultra 系列的新接口,X5 目前主要使用 hbDNNInfer。X5 的 Python 推理通常通过 hobot_dnn ROS2 节点或 pydnn 库间接调用这些 C 接口。

4. hbn 前缀:网络结构描述 (历史/底层概念)

  • 所属框架:AI 工具链。
  • 层级:模型描述层。
  • 作用:HBN (Horizon Binary Network) 早期指代网络结构的二进制描述文件。在当前的工具链中,它通常被整合进 .hbm 文件中,不再作为独立文件频繁出现。
  • 现状:开发者通常只需关注 .hbm (最终模型) 和 .onnx (源模型),hbn 更多是工具链内部转换的中间概念。

总结:层级关系图谱

为了理清它们的关系,我们可以看一个典型的数据流转过程:

graph TD
    subgraph 开发主机 [Host PC]
        A[PyTorch/ONNX 模型] -->|HB Mapper 工具链 | B(.hbm 模型文件)
    end

    subgraph RDK_X5_板端 [RDK X5 Board]
        B -->|scp 传输 | C{BPU SDK Runtime}
        
        D[USB/MIPI 摄像头] -->|V4L2 / sp_vio | E[共享内存 Buffer (hbm)]
        
        E -->|零拷贝传递 | F[ROS2 节点]
        F -->|hbm_img_msgs 消息 | G[AI 推理节点]
        
        C -->|1. hbDNNLoadModel 加载 | H[hbDNN 推理引擎]
        E -->|2. hbDNNInfer 输入 | H
        H -->|3. 推理结果 | I[后处理/显示]
    end

    style B fill:#f9f,stroke:#333,stroke-width:2px
    style E fill:#bbf,stroke:#333,stroke-width:2px
    style H fill:#bfb,stroke:#333,stroke-width:2px
    style F fill:#ff9,stroke:#333,stroke-width:2px

关键资源索引表

关键词 所属领域 头文件/源码位置 (板端) 官方文档链接
hbm_img_msgs ROS2 通信 /opt/tros/share/hbm_img_msgs/msg/ TROS 教程 (社区案例)
.hbm (模型) AI 工具链 N/A (二进制文件) OpenExplorer 工具链手册
hbDNN (API) BPU 推理 /usr/include/hobot/hb_dnn.h BPU SDK API 手册
sp_* 多媒体开发 /usr/include/hobot/sp_*.h 多媒体开发指南
HB_* 底层多媒体 /usr/include/hobot/hb_*.h (参考头文件注释)

针对你问题的直接回答

  1. hbm_img_msgs 是什么框架?
    • 是 TROS (ROS2) 框架下的自定义消息包,用于零拷贝图像传输。
  2. hbm 前缀对应哪一层?
    • 对应 AI 模型文件格式 或 底层共享内存缓冲区。它是连接多媒体和 AI 的桥梁。
  3. hbDNN 前缀对应哪一层?
    • 对应 BPU SDK 运行时 API,用于在 C/C++ 代码中加载和运行 .hbm 模型。
  4. hbn 前缀对应哪一层?
    • 对应 AI 工具链中的网络结构描述,现多整合进 .hbm,开发者较少直接操作。
  5. 接口定义在哪里?
    • ROS2 消息:/opt/tros/share/hbm_img_msgs/
    • BPU API:/usr/include/hobot/hb_dnn.h
    • 文档:见上表链接。

建议:
如果你在做 ROS2 开发,重点关注 hbm_img_msgs 的订阅和解析;如果你在做独立的 C++ AI 部署,重点关注 hbDNN API 和 .hbm 模型的生成。两者通过共享内存机制在底层互通。