跳转至

uORB Read Function-Call Trigger 模块文档

所属工具箱:uORB Read and Write

uORB Read Function-Call Trigger 模块外观

简介

一句话描述:支持定时轮询订阅与异步函数回调触发两种模式,完成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)

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

数据通信协议

本模块通过uORB进程内总线与PX4飞控内部完成数据通信,无外部网络通信端口,数据格式为对应uORB话题.msg定义的原生消息结构,以Simulink总线对象形式输出。

相关模块

模块名 说明
uORB Read Async 读取由本模块触发的异步uORB话题消息数据
uORB Write 向指定uORB话题发布消息数据
uORB Read 同步轮询模式的uORB话题读取模块

使用示例

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

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

请在上述路径中查看 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话题两种模式。