PX4 uORB
本文最后更新于 2025年3月25日 上午
uORB 是 PX4 中的一个发布-订阅(publish-subscribe)消息传递系统,它允许不同模块之间进行异步通信。
主要组件
核心组件:
- uORB.h/cpp - uORB 的主要接口和实现
- uORBManager.hpp/cpp - uORB 系统的管理器
- uORBDeviceMaster.hpp/cpp - 设备主控制器
- uORBDeviceNode.hpp/cpp - 设备节点的实现
发布订阅机制:
- Publication.hpp - 消息发布相关
- PublicationMulti.hpp - 多重发布支持
- Subscription.hpp/cpp - 订阅相关实现
- SubscriptionCallback.hpp - 订阅回调机制
- SubscriptionInterval.hpp - 基于时间间隔的订阅
- SubscriptionBlocking.hpp - 阻塞式订阅
- SubscriptionMultiArray.hpp - 多重订阅数组
工具和辅助类:
- uORBUtils.hpp/cpp - 工具函数
- uORBCommon.hpp - 通用定义
- uORBTopics.h - 主题定义
- uORBMessageFields.hpp/cpp - 消息字段处理
- ORBSet.hpp - ORB 集合实现
测试相关:
- uORB_tests/ - 测试目录
- uORBMessageFieldsTest.cpp - 消息字段测试
classDiagram
class Manager {
-static Manager* _Instance
+initialize() bool
+get_instance() Manager*
+get_device_master() DeviceMaster*
+orb_advertise(metadata, data) orb_advert_t
+orb_subscribe(metadata) int
+orb_publish(metadata, handle, data) int
+orb_unsubscribe(handle) int
}
1 |
|
这个UML图展示了uORB系统中的主要类及其关系:
- Manager(管理器)
- 单例模式实现
- 管理整个uORB系统
- 提供主要的发布/订阅接口
- 管理DeviceMaster实例
- DeviceMaster(设备主控)
- 管理所有DeviceNode实例
- 负责创建新的发布者
- 维护统计信息
- 管理主题实例
- DeviceNode(设备节点)
- 代表一个具体的主题实例
- 处理数据的发布和订阅
- 管理数据队列
- 与具体的orb_metadata关联
- Publication(发布类)
- 提供发布者接口
- 管理发布句柄
- 简化发布操作
- Subscription(订阅类)
- 提供订阅者接口
- 管理订阅句柄
- 简化订阅操作
- orb_metadata(元数据)
- 定义主题的基本信息
- 包含主题名称、大小等属性
- 用于主题的标识和验证
主要关系:
Manager是整个系统的入口点,管理DeviceMaster
DeviceMaster创建和管理多个DeviceNode
DeviceNode与具体的主题元数据(orb_metadata)关联
Publication和Subscription通过DeviceNode进行数据交互
所有组件都依赖orb_metadata进行主题识别和验证
这种设计实现了一个高效的发布-订阅系统,支持:
多发布者-多订阅者模式
主题实例化
数据队列管理
统计信息收集
线程安全的数据交换
topic 自动生成机制
PX4 uORB
https://leelewin.github.io/p/dce3e059d3314266a113059c71f5ceba/