跳转至

uORB Write Advanced 模块文档

所属工具箱:uORB Read and Write

uORB Write Advanced 模块外观

简介

一句话描述:PX4 uORB消息自定义发布高级模块,支持对uORB消息发布进行灵活的自定义配置。

该模块属于RflySim工具链的uORB读写接口库,面向需要自定义uORB消息发布的开发场景,是基础uORB发布模块的功能扩展。该模块支持用户自主选择目标uORB消息话题,可单独配置每个消息字段的输入端口,同时开放了消息队列优先级、队列大小等高级配置选项,能够满足复杂仿真场景下对uORB消息发布的精确控制需求。

在RflySim仿真工具链中,该模块运行于Simulink环境,可将Simulink中生成的自定义数据按配置封装为uORB消息,发送给PX4仿真进程,实现Simulink与PX4飞控之间的自定义数据交互,常被用于开发自定义飞控算法、传感器数据注入等定制化仿真场景,配合uORB Read系列模块可完成完整的自定义uORB通信流程。

端口说明

输入端口(Inputs)

本模块的输入端口数量由配置决定,每个输入端口对应uORB话题的一个消息字段,通用格式如下:

端口名 数据类型 维度 说明
自定义字段名 由参数配置决定 由参数配置决定 对应uORB话题指定字段的待发布数据

输出端口(Outputs)

本模块无输出端口。

参数配置(Parameters)

双击模块打开的 Mask 对话框中可配置以下参数:

参数名 类型 默认值 可选值/范围 说明
uORB Topic string vehicle_gps_position - 待发布的uORB话题名称,可通过界面按钮选择.msg文件完成配置
变量名 string 自动填充 - 对应uORB话题字段的名称,同时作为输入端口名称
变量类型 enum 自动填充 double, single, int8, uint8, int16, uint16, int32, uint32, boolean 对应uORB字段的数据类型
变量维度 int 数组 自动填充 正整数范围 对应uORB字段的维度,一维数组填[1 N],多维数组按实际维度填写
Advertisement Queue int 1 ≥1,0表示无队列 uORB消息广告的队列优先级,数值越大优先级越高
Sample time double 0.01 >0 模块采样时间,单位为秒

参数设置说明

uORB Topic

选择需要发布的uORB话题,点击Select.msg file可打开话题列表选择对应的消息定义文件,点击Open.msg file可查看消息的字段定义内容,修改后点击Apply即可自动填充所有消息字段的名称、类型和维度信息,生成对应数量的输入端口。

uORB Parameter Names and Data Type

该区域用于对每个消息字段进行独立配置,模块会根据配置的字段数量生成对应数量的输入端口,每个输入端口对应一个uORB消息字段,名称和数据类型与配置保持一致。

配置uORB话题广告的消息队列优先级,取值从1开始,0代表不使用消息队列,数值越大优先级越高,对应不同的uORB调度策略。

Sample time

设置模块的运行采样时间,单位为秒,匹配整个Simulink模型的仿真步长即可。

模块特性(Block Characteristics)

特性项
支持的数据类型 doublesingleint8int16int32uint8uint16uint32boolean
直接馈通(Direct Feedthrough)
采样时间 离散
代码生成支持

数据通信协议

本模块通过uORB通信机制实现PX4内部消息发布,使用PX4原生uORB传输协议,无需自定义网络端口。

相关模块

模块名 说明
uORB Read 基础版uORB消息读取模块,支持读取指定uORB话题的消息字段
uORB Write 基础版uORB消息发布模块,可快速实现uORB消息的发布
uORB Read Advanced 高级版uORB消息读取模块,支持对消息读取的更多自定义配置

使用示例

相关使用示例请参考以下路径:

[RflySim安装路径]/RflySimAPIs/5.RflySimFlyCtrl/0.ApiExps/8.uORB-Read-Write/Readme.pdf

请在上述路径中查看 Readme.pdf 获取完整的示例说明与操作步骤。

注意事项与常见问题

  • 初始化顺序:必须先完成uORB Topic的选择并点击Apply应用配置,才能自动生成对应消息字段的输入端口,修改话题后需要重新点击Apply更新端口配置,否则会出现端口维度、数据类型不匹配的错误。
  • 消息队列优先级配置Advertisement Queue参数不支持0值,合法优先级从1开始编号,配置为0时不会启用消息队列,可能导致发布的消息丢失。
  • 数据类型与维度匹配:模块自动填充的消息字段数据类型、维度与uORB原生消息定义一致,请勿随意修改,若手动修改后与实际消息定义不匹配,会导致数据解析错误、仿真崩溃。
  • 采样时间匹配:模块的Sample time需要和所在仿真模型的基础采样时间匹配,若配置为过大的采样时间会导致消息发布频率低于飞行侧需求,可能引发无人机控制异常;若配置为远小于模型基础采样时间会导致无效重复发布,增加仿真运行负担。
  • 话题冲突问题:同一个uORB Topic请勿同时使用多个uORB Write Advanced模块发布,避免多模块发布数据冲突,导致飞行侧收到错误的消息数据。

更新日志

  • v4.20 (2024-08-09): 新增uORB Write Advanced高级uORB消息发布模块,支持自定义消息字段输入端口配置、消息优先级与队列大小设置等高级功能