你好 @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_dnnROS2 节点或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 |
(参考头文件注释) |
针对你问题的直接回答
hbm_img_msgs是什么框架?- 是 TROS (ROS2) 框架下的自定义消息包,用于零拷贝图像传输。
hbm前缀对应哪一层?- 对应 AI 模型文件格式 或 底层共享内存缓冲区。它是连接多媒体和 AI 的桥梁。
hbDNN前缀对应哪一层?- 对应 BPU SDK 运行时 API,用于在 C/C++ 代码中加载和运行
.hbm模型。
- 对应 BPU SDK 运行时 API,用于在 C/C++ 代码中加载和运行
hbn前缀对应哪一层?- 对应 AI 工具链中的网络结构描述,现多整合进
.hbm,开发者较少直接操作。
- 对应 AI 工具链中的网络结构描述,现多整合进
- 接口定义在哪里?
- ROS2 消息:
/opt/tros/share/hbm_img_msgs/ - BPU API:
/usr/include/hobot/hb_dnn.h - 文档:见上表链接。
- ROS2 消息:
建议:
如果你在做 ROS2 开发,重点关注 hbm_img_msgs 的订阅和解析;如果你在做独立的 C++ AI 部署,重点关注 hbDNN API 和 .hbm 模型的生成。两者通过共享内存机制在底层互通。