RDK X5支持哪些视频开发框架,地平线官方的视频开发框架有哪些,包含哪些子模块,相关文档或者教程有吗,是否支持V4L2。主要希望了解地平线官方的视频框架,为什么又HBN,hobot,sp等多种接口,是否是地平线自研视频框架,子模块有哪些,接口有哪些,感谢解答
我来帮你搜索社区中关于 RDK X5 视频框架的相关信息。
你好 @LLLLLLLL,欢迎加入地瓜机器人开发者社区!
关于 RDK X5 的视频开发框架,我来为你详细解答:
核心结论
RDK X5 使用的是地平线自研的多媒体框架,主要包含以下层次:
1. 官方视频框架架构
┌─────────────────────────────────────┐
│ 应用层 (Application Layer) │
│ - sp_* 接口 (社区开放) │
│ - hb_* 接口 (暂未完全开放) │
├─────────────────────────────────────┤
│ 多媒体框架层 (Multimedia Framework) │
│ - VPS (Video Process System) │
│ - VPU (Video Processing Unit) │
│ - BPU (AI 推理引擎) │
├─────────────────────────────────────┤
│ 驱动层 (Driver Layer) │
│ - VIN (Video Input) │
│ - ISP (Image Signal Processing) │
│ - VOUT (Video Output) │
├─────────────────────────────────────┤
│ 硬件抽象层 (HAL) │
│ - 支持 V4L2 兼容接口 │
└─────────────────────────────────────┘
2. 关于 HBN、hobot、sp 等多种接口的解释
sp_*接口:社区当前主要开放的接口,用于多媒体开发(采集、编码、解码、显示等)hb_*接口:地平线内部接口,部分功能暂未向社区完全开放HBN:Horizon Binary Network,是地平线的神经网络模型格式hobot:地平线 ROS2 软件包的前缀(如tros-hobot-usb-cam)
3. V4L2 支持情况
支持 V4L2,但有注意事项:
- USB 摄像头可以直接通过 V4L2 接口访问(
/dev/video*) - MIPI CSI 摄像头通常需要通过地平线的多媒体框架访问
- 部分第三方 V4L2 代码可能需要适配才能在地平线平台上运行
4. 关键资源链接
官方文档:
社区相关帖子:
- X5 SDK 问题讨论 - 详细讨论了 API 接口问题
- RDK X5 目标检测入门 - 包含视频采集和处理的实战案例
- 视频解码与显示问题 - X5 与 X3 的差异说明
5. 快速上手建议
# 1. 查看摄像头设备
ls -l /dev/video*
v4l2-ctl --list-devices
# 2. 测试 USB 摄像头采集
cd /app/pydev_demo/05_web_display_camera_sample/
sudo python3 ./web_display_camera.py
# 3. 查看多媒体示例代码
cd /app/cdev_demo/ # C++ 示例
cd /app/pydev_demo/ # Python 示例
6. 常见问题
Q: 为什么 X3 的代码在 X5 上不能直接运行?
A: X5 更新了多媒体框架 API,从 hb_* 接口迁移到 sp_* 接口,部分函数签名和调用方式有变化。
Q: 如何获取完整的 SDK?
A: SDK 已预装在板子上,位于 /app/cdev_demo 和 /app/pydev_demo 目录,头文件和库文件在系统标准路径中。
建议你先从官方示例代码入手,理解 sp_* 接口的使用方式。如果有具体的开发需求(如特定摄像头适配、编码格式等),可以在社区发帖并提供详细日志,我们会进一步协助你。
有其他问题欢迎继续提问! ![]()
一共有几种框架,所属关系是什么样的,分别对应什么接口API,是否有该API的源码,关于各种框架的定义和接口API定义文档在哪里
你好 @LLLLLLLL,
针对你追问的框架种类、所属关系、API 对应关系、源码及文档位置,我为你做进一步的详细梳理。
RDK X5 的多媒体架构确实比 X3 复杂,核心在于它采用了分层设计,并且为了兼容性和性能,存在两套主要的 API 体系(社区开放版 vs 底层完整版)。
1. 框架总览:一共有几种?
严格来说,RDK X5 只有一套地平线自研的多媒体框架(Horizon Multimedia Framework),但在开发接口上,根据开放程度和使用场景,分为两个主要层级:
| 层级 | 接口前缀 | 状态 | 适用场景 | 源码/文档可见性 |
|---|---|---|---|---|
| 社区开放层 | sp_* |
90% 的开发者场景(采集、编解码、显示、简单 VPS 处理) | 头文件在板端 /usr/include/,示例在 /app/cdev_demo |
|
| 底层完整层 | HB_* |
深度定制(复杂 VPS 管道、ISP 调优、特殊格式回灌) | 头文件部分可见,详细 API 文档需查阅内部版手册或联系 FA E |
为什么会有 HBN、hobot、sp 等多种叫法?
sp_*(Sunrise Platform):这是地平线面向社区主推的简化版 API。它封装了底层的复杂性,更易用。X5 目前主要推荐使用这套接口。HB_*(Horizon):这是地平线芯片底层的原生 API。功能最全,但使用复杂,且部分接口(如复杂的 VPS 绑定)在 X5 早期 SDK 中未完全向社区开放文档。hobot_*:这是ROS2 (TROS) 功能包的前缀(如hobot_usb_cam),它们底层调用的依然是sp_*或HB_*接口。HBN:这是模型格式 (Horizon Binary Network),与视频框架无关,是 BPU 推理用的。
2. 框架所属关系与模块对应
地平线多媒体框架的核心数据流是:VIN (输入) → ISP (图像信号处理) → VPS (视频处理系统) → VENC/VDEC (编解码) → VOUT (输出)。
以下是模块、功能与 API 的对应关系表:
| 功能模块 | 全称 | 作用 | 社区开放 API (sp_*) |
底层 API (HB_*) |
源码示例位置 |
|---|---|---|---|---|---|
| 视频输入 | VIN (Video Input) | 从 MIPI/USB 获取原始数据 | sp_vio_* (封装了 VIN+ISP) |
HB_VIN_*, HB_ISP_* |
/app/cdev_demo/01_vio/ |
| 图像信号处理 | ISP (Image Signal Process) | 去噪、白平衡、曝光等 | (通常由 sp_vio 自动配置) |
HB_ISP_* |
(ISP 调优工具单独提供) |
| 视频处理 | VPS (Video Process System) | 缩放、裁剪、格式转换、AI 预处理 | sp_vps_* (简化版) |
HB_VPS_* (支持复杂 Pipeline) |
/app/cdev_demo/03_vps/ |
| 视频编码 | VENC (Video Encode) | H.264/H.265/MJPEG 编码 | sp_venc_* |
HB_VENC_* |
/app/cdev_demo/04_venc/ |
| 视频解码 | VDEC (Video Decode) | 解码 H.264/H.265 等 | sp_vdec_* |
HB_VDEC_* |
/app/cdev_demo/05_vdec/ |
| 视频输出 | VOUT (Video Output) | 显示到 HDMI/DSI | sp_display_* |
HB_VOUT_* |
/app/cdev_demo/02_display/ |
| 系统控制 | SYS | 绑定/解绑模块 (Pipeline) | sp_sys_* |
HB_SYS_* |
所有 Demo 中均有体现 |
3. API 源码与文档在哪里?
A. 源码 (Source Code)
有源码,但主要是示例代码 (Sample Code),框架本身的源码不开放。
- C++ 示例路径:
/app/cdev_demo/(板端路径)- 这里包含了
vio,vps,venc,vdec,display等各个模块的独立示例和组合示例。 - 编译方法: 每个目录下通常有
Makefile,直接make即可。
- 这里包含了
- Python 示例路径:
/app/pydev_demo/- 适合快速验证功能。
- GitHub 仓库:
- x5-hobot-multimedia-samples:官方同步的示例代码。
B. 文档 (Documentation)
文档分为公开版和详细版:
-
公开文档 (社区可查):
- 《RDK X5 多媒体开发指南》:
- 地址:https://developer.d-robotics.cc/rdk_doc/03_multimedia_development
- 内容:主要介绍
sp_*接口的使用流程、数据结构、简单示例。
- 《BPU SDK API 手册》:
- 地址:https://developer.d-robotics.cc/api/v1/fileData/x5_doc-v126cn/runtime/source/bpu_sdk_api/bpu_sdk_api.html
- 内容:主要讲 AI 推理接口,但也包含部分多媒体与 BPU 交互的内容。
- 《RDK X5 多媒体开发指南》:
-
详细 API 定义 (头文件即文档):
- 由于部分
HB_*接口文档未完全公开,最直接的定义在头文件中。 - 头文件位置:
sp_*接口:/usr/include/hobot/sp_*.h(例如/usr/include/hobot/sp_vio.h)HB_*接口:/usr/include/hobot/hb_*.h(例如/usr/include/hobot/hb_vps.h)
- 查看方法:
# 在板子上查看 sp_vio 的接口定义 cat /usr/include/hobot/sp_vio.h | grep -A 5 "sp_vio_create" # 查看 HB_VPS 的接口定义 cat /usr/include/hobot/hb_vps.h | grep -A 5 "HB_VPS_CreateGrp"
- 由于部分
4. 总结与建议
- 首选
sp_*接口:除非你有非常特殊的底层需求(如自定义复杂的 VPS 管道),否则强烈建议只使用sp_*开头的接口。这套接口文档相对齐全,示例代码多,且地平线官方承诺长期维护。 - 关于
HB_*接口:你在代码中看到的HB_VPS_CreateGrp等函数,在 X5 的新版 SDK 中,建议优先寻找对应的sp_vps_*替代方案。如果必须使用HB_*,请直接阅读板子上的.h头文件注释,那是目前最准确的定义。 - V4L2 的定位:V4L2 是 Linux 标准接口。在 RDK X5 上,USB 摄像头可以直接用 V4L2 (
/dev/videoX) 读取数据,但如果你需要利用地平线的硬件编解码 (VENC) 或 AI 加速 (BPU),必须将 V4L2 获取的数据通过HB_MM(内存管理) 接口转换为多媒体框架能识别的 Buffer,然后送入sp_venc或sp_vps处理。直接用 V4L2 无法调用 X5 的硬件加速单元。
下一步行动建议:
- SSH 登录开发板。
- 进入
/app/cdev_demo,逐个编译运行01_vio,03_vps,04_venc等示例。 - 阅读
/usr/include/hobot/sp_vio.h等头文件,理解参数含义。 - 参考 X5 SDK 问题讨论帖 中关于 API 迁移的说明。
如果在阅读头文件或运行 Demo 时遇到具体报错,欢迎把代码片段和报错日志发出来,我们针对性解答。
那hbm_img_msgs接口是什么框架的接口,hbm前缀和hbDNN前缀,hbn前缀对应的接口分别是哪一层框架的,接口定义什么在哪里
你好 @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 模型的生成。两者通过共享内存机制在底层互通。