uORB 消息传送
导言
uORB 是一个异步的 发布()
/ 订阅()
消息传递 API,用于线程间/进程间通信。
看看 教程 来学习如何在 C++ 中使用它。
uORB 在启动时自动提前启动,因为许多应用程序都依赖于它。启动时使用 启动
.单元测试可以通过 uorb_tests
.
添加新主题
新的 uORB 主题可以在主 PX4/PX4-Autopilot 资源库中添加,也可以在树外信息定义中添加。有关添加树外 uORB 信息定义的信息,请参阅 本节.
要添加新主题,您需要创建一个新的 .msg 文件中的 msg/
目录,并将文件名添加到 msg/CMakeLists.txt
列表。由此自动生成所需的 C/C++ 代码。
看看现有的 信息
文件中支持的类型。一条信息也可以嵌套在其他信息中使用。
每个生成的 C/C++ 结构体都有一个字段 uint64_t timestamp
将被添加。这将用于记录器,因此在发布信息时务必填写。
要在代码中使用主题,请加入标题:
#include <uORB/topics/topic_name.h>;
在 .msg
文件,一个信息定义可用于多个独立主题:
# 主题 任务 船外任务 船上任务
然后在代码中使用它们作为主题 ID: ORB_ID(offboard_mission)
.
出版
发布主题可在系统的任何地方进行,包括中断上下文(由 hrt_call
API)。不过,在中断上下文中发布主题前,需要在中断上下文外进行广告和发布(至少一次)。
列出主题并聆听
信息
听众
命令仅适用于 Pixracer (FMUv4) 和 Linux / OS X。
要列出所有主题,请列出文件句柄:
ls /obj
要收听一个主题 5 条信息的内容,请运行监听器:
听众 传感器_加速 5
输出是主题内容的 n 倍:
主题: 传感器_加速 #3
时间戳: 84978861
integral_dt: 4044
error_count: 0
x: -1
y: 2
z: 100
x_integral: -0
y_integral: 0
z_integral: 0
温度 46
范围_m_s2: 78
缩放: 0
主题: 传感器_加速 #4
时间戳: 85010833
integral_dt: 3980
error_count: 0
x: -1
y: 2
z: 100
x_integral: -0
y_integral: 0
z_integral: 0
温度 46
范围_m_s2: 78
缩放: 0
TIP
在基于 NuttX 的系统(Pixhawk、Pixracer 等)上,该系统的 听众
命令可以在 QGroundControl MAVLink 控制台来检查传感器值和其他主题。这是一个功能强大的调试工具,因为即使 QGC 通过无线链路连接(如飞行器在飞行时),也可以使用它。更多信息,请参阅: 传感器/主题调试.
uorb 顶级命令
命令 顶部
实时显示每个主题的发布频率:
更新: 1s, 木 主题 77
主题 姓名 INST #sub #msg #lost #qsize
已上膛的致动器 0 6 4 0 1
执行器控制器_0 0 7 242 1044 1
电池状态 0 6 500 2694 1
指挥官状态 0 1 98 89 1
控制状态 0 4 242 433 1
ekf2_innovations 0 1 242 223 1
ekf2_timestamps 0 1 242 23 1
估计器状态 0 3 242 488 1
mc_att_ctrl_status 0 0 242 0 1
传感器_加速 0 1 242 0 1
传感器_加速 1 1 249 43 1
传感器_巴罗 0 1 42 0 1
综合传感器 0 6 242 636 1
这些列包括:主题名称、多实例索引、订阅者数量、以赫兹为单位的发布频率、每秒丢失的信息数量(所有订阅者的总和)以及队列大小。
多实例
uORB 提供了一种机制,可通过以下方式发布同一主题的多个独立实例 多广告
.它将向发布者返回一个实例索引。然后,订阅者必须使用 orb_subscribe_multi
(订阅
订阅第一个实例)。例如,如果系统中有多个相同类型的传感器,那么拥有多个实例就非常有用。
确保不要混合 多广告
和 广告
为同一主题。
完整的应用程序接口在 platforms/common/uORB/uORBManager.hpp.
消息/字段停用
由于有外部工具使用日志文件中的 uORB 信息,如 飞行回顾因此,在更新现有信息时需要考虑某些方面:
- 如果有充分的更新理由,更改外部工具所依赖的现有字段或信息通常是可以接受的。特别是对 飞行回顾, 飞行回顾 代码合并到
师
. - 为了让外部工具可靠地区分两个报文版本,必须遵循以下步骤:
- 删除或重命名的邮件必须添加到
弃用的msgs
名单中 msg/CMakeLists.txt 和 .msg 文件需要删除。 - 删除或重命名的字段必须加以注释并标记为已废弃。例如
uint8 quat_reset_counter
将成为# 已删除:uint8 quat_reset_counter
.这是为了确保已删除的字段(或信息)不会在将来重新添加。 - 如果语义发生变化(例如单位从 "度 "变为 "弧度"),则该字段也必须重新命名,并如上所述将之前的字段标记为废弃字段。
- 删除或重命名的邮件必须添加到