uORB Read Function-Call Trigger 模块文档¶
所属工具箱:uORB Read and Write

简介¶
一句话描述:支持定时轮询订阅与异步函数回调触发两种模式,完成PX4 uORB话题消息的读取,并可在话题接收到新数据时触发Simulink Function-Call子系统执行。
该模块是RflySim工具链中对接PX4原生uORB通信机制的核心读取模块,归属于uORB Read and Write接口库,可在RflySim无人机仿真链路中实现Simulink自定义控制算法与PX4飞控内部消息的交互,既支持非异步模式下按设定间隔定时轮询读取指定uORB话题消息并直接输出总线格式数据,也支持异步触发模式下通过衍生独立线程监听uORB话题,接收到新数据时输出Function-Call触发信号,需要配合uORB Read Async模块完成消息读取。
该模块运行于RflySim/Simulink仿真环境,可对接PX4飞控的uORB通信,结合CopterSim完成飞控仿真、结合RflySim3D可视化三维仿真环境,支持用户开发定制化的PX4飞控算法。模块仅支持非C++对象类型的uORB话题,可通过配置界面自动完成uORB消息格式到Simulink总线对象的映射生成,适配飞控开发中读取传感器数据、飞控状态等不同场景的需求。
端口说明¶
输入端口(Inputs)¶
本模块无输入端口。
输出端口(Outputs)¶
| 端口名 | 数据类型 | 维度 | 说明 |
|---|---|---|---|
Function-Call |
double |
标量 | 触发函数调用子系统执行[待确认] |
uORB Data |
Bus | 非固定 | 对应uORB话题的消息数据,输出格式为生成的总线对象 |
参数配置(Parameters)¶
双击模块打开的 Mask 对话框中可配置以下参数:
| 参数名 | 类型 | 默认值 | 可选值/范围 | 说明 |
|---|---|---|---|---|
uORB Topic |
string |
"" |
已定义的非C++对象uORB话题 | 指定要订阅的uORB话题名称 |
Bus Object |
Bus |
无 | MATLAB工作区中已生成的总线对象 | 与uORB主题关联的总线对象,定义消息结构和数据类型 |
uORB Interval (ms) |
int |
10 |
>0,不超过话题最高更新速率 | 非异步模式下uORB话题读取查询间隔,单位毫秒 |
Sample time (s) |
double |
0.01 |
>0 | 非异步模式下模块采样时间,单位秒 |
Enable Function-Call Trigger |
bool |
false |
true/false |
是否启用异步函数调用触发模式 |
Polling Timeout (ms) |
int |
-1 |
≥-1 | 异步模式下查询超时时间,单位毫秒:-1表示永久阻塞等待消息,>0表示超时后强制触发 |
Task Name |
string |
Task1 |
非空字符串 | 异步模式下衍生线程的任务名称 |
参数设置说明¶
uORB Topic¶
点击Select uORB Topic msg按钮可打开话题列表选择目标话题,仅支持非C++对象类型的话题;点击Open .msg file可打开选中话题的源消息定义文件。
Bus Object¶
点击Create Bus Object按钮,模块会自动从uORB消息定义文件夹中读取对应.msg文件,解析后在MATLAB工作空间生成对应结构的总线对象,用于接收uORB消息数据,生成后需要在此参数中选择生成的总线对象。
Enable Function-Call Trigger¶
勾选后启用异步函数调用触发模式,此时会隐藏Sample time (s)参数,显示Polling Timeout (ms)和Task Name配置项。异步模式会衍生独立线程查询等待话题新数据,数据更新后输出函数调用信号触发子系统执行,需要配合uORB Read Async模块读取话题数据。
Polling Timeout (ms)¶
仅异步模式下生效:设置为-1时,线程会永久阻塞直到新消息到达,不会消耗额外计算资源;设置为大于0的数值时,超过指定时间未收到新消息也会强制触发函数调用;禁止设置为0,否则会导致飞控线程无阻塞高频运行,引发飞控卡死。
模块特性(Block Characteristics)¶
| 特性项 | 值 |
|---|---|
| 支持的数据类型 | double、single、uint8、uint16、uint32、int8、int16、int32、boolean |
| 直接馈通(Direct Feedthrough) | 否 |
| 采样时间 | 离散 / 继承 |
| 代码生成支持 | 是 |
数据通信协议¶
本模块通过uORB进程内总线与PX4飞控内部完成数据通信,无外部网络通信端口,数据格式为对应uORB话题.msg定义的原生消息结构,以Simulink总线对象形式输出。
相关模块¶
| 模块名 | 说明 |
|---|---|
uORB Read Async |
读取由本模块触发的异步uORB话题消息数据 |
uORB Write |
向指定uORB话题发布消息数据 |
uORB Read |
同步轮询模式的uORB话题读取模块 |
使用示例¶
相关使用示例请参考以下路径:
请在上述路径中查看
Readme.pdf获取完整的示例说明与操作步骤。
注意事项与常见问题¶
- 初始化顺序:必须先完成uORB话题选择,再点击
Create Bus Object生成总线对象;若修改了选中的uORB话题,需要重新生成总线对象,否则会出现数据类型不匹配的错误。启用异步Function-Call触发模式时,必须搭配uORB Read Async模块读取话题数据,本模块仅负责触发逻辑,不会输出完整的消息数据。 - 采样时间匹配:非异步模式下,设置的
uORB Interval (ms)不能超过所选话题的最高数据更新速率,否则无法获取到最新的话题消息;非异步模式下的模块采样时间需要与模型整体的基础采样时间匹配,避免出现数据更新不同步的问题。 - 异步模式配置限制:异步模式下不可将
Polling Timeout设置为0,该配置会导致任务无限触发,最终造成飞控进程卡死;若需要无阻塞轮询请根据实际需求设置合理的正超时时间,需要阻塞等待新消息时可将超时设置为-1。异步模式衍生的独立任务需要设置唯一合法的任务名,不可与模型中其他异步uORB任务重名,否则会导致任务注册失败。 - 话题类型限制:本模块仅支持非C++对象类型的uORB话题,不要选择包含自定义C++对象的话题,否则会导致总线对象生成失败或仿真运行错误。
- 工作空间要求:生成的总线对象会保存在MATLAB基础工作空间,仿真运行前请不要手动删除对应总线对象,否则会导致模块编译报错。
更新日志¶
v4.10(2024-08-08): 新增uORB异步消息读取的函数调用触发功能,支持同步订阅uORB话题和异步触发式订阅uORB话题两种模式。