当前位置: 首页 > news >正文

基础实验篇 | uORB消息读写与自定义实验(二)

导读

uORB是PX4/Pixhawk系统中非常重要且关键的模块之一,是用于无人机模块间通信的协议机制。本篇将详细介绍uORB并详细拆解uORB消息读写与自定义实验全流程(二)。

基础实验篇 | uORB消息读写与自定义实验(二)

01

RflySim平台的uORB消息读写功能

PX4的uORB消息系统是提供了非常强大且方便的内部模块间数据交互能力,所有模块都可以将数据放在消息池中,其他模块可以从消息池订阅到所需数据。但uORB消息读、写以及自定义消息的开发过程如前期例程所示较为繁琐。

RflySim平台基于MATLAB/Simulink软件开发了Pixhawk Target Block工具箱,该工具箱中的uORB Read and Write中提供了丰富的uORB消息读取、写入及自定义消息的模块;其中主要的模型介绍如下:

图片

在Simulink中使用这三个接口,其参数配置包括消息类型、话题名称和消息数据。消息类型是指要写入的消息的类型,可以在PX4源代码中的“msg”目录下找到相应的消息类型定义文件。话题名称是指要写入的消息所对应的话题名称,可以在PX4源代码中的“topics”目录下找到相应的话题定义文件。uORB消息栏选择如下格式:中间双下划线“__”是分隔线,分割线前表示uORB消息的文件名,分割线后表示uORB的消息ID。actuator_controls__actuator_controls_0上述格式表示消息文件为actuator_controls.msg,消息ID为actuator_controls_0,且在同一个主消息下可以自定义多个不同的消息ID。消息数据是指要写入的实际数据,可以在Simulink模型中的其他模块中生成。注:以上三个模块只能在PX4飞控系统中使用,因此在使用之前需要确保已经正确地配置了PX4的开发环境,并且已经将Simulink模型成功地部署到PX4上;且在使用“uORB Read Function-Call Trigger”模块前,需要先在PX4中定义相应的uORB消息。

①:uORB消息数据监听接口模块。该接口可以通过调用外部函数的形式响应接收到的新消息。在Simulink中使用uORB Read Function-Call Trigger接口,可以通过回调函数(本例程未使用)来处理新消息。

图片

②:uORB消息数据发布接口模块。该接口允许用户向uORB话题发布指定的值或结构体。

图片

③:uORB消息数据发布接口高级模块。该接口可允许用户对其发布的数据进行更灵活的控制。在Simulink中使用uORB Write Advanced接口,可以实现更加复杂和精确的消息发布方式。可选择要写入的消息文件和一个消息ID。此外,还可以设置消息的优先级、队列大小等高级选项。

图片

02

基于RflySim平台的uORB消息读写实验

基于RflySim提供的丰富的uORB消息读、写接口,可用于控制器设计、飞控内部数据监听等方面的实验开发中,本次实验整体框架图如下所示:

图片

同时,RflySim平台提供rfly_px4这一uORB消息来向外发送数据(向40100系列端口发送特定数据)。本实验中,通过rfly_px4消息将从飞控内部读取到的消息转发之后,在进行硬件在环仿真时,即可在Simulink中监听这一消息。Simulink监听uORB消息demo如下:

图片

将uORB消息读写demo文件通过自动代码生成的方式烧录到飞控中之后,打开QGC的Anslyze Tools->MAVLINK 控制台中,输入listener actuator_controls、listener actuator_controls_0即可看到本例程的运行效果如下:

图片

在进行硬件在环仿真时,打开Simulink监听程序,点击运行即可监听到写入的uORB消息,如下图所示:

参考资料

[1]. https://doc.rflysim.com/

http://www.lryc.cn/news/108358.html

相关文章:

  • k8s pod数据存储Volumes
  • ZYNQ在Petalinux系统下双网口同网段的实现
  • 突破传统监测模式:业务状态监控HM的新思路 | 京东云技术团队
  • 7-16 验证“哥德巴赫猜想” (20 分)
  • GEE学习02 --设置Jupyter Notebook的打开路径
  • stm32与上位机电脑间最快的通信方式是什么?
  • pytorch学习——卷积神经网络——以LeNet为例
  • stm32 mpu6050 cubemx DMP法读取角度
  • .Net6 Core Web API 配置 log4net + MySQL
  • 校园跑腿小程序运营攻略
  • InfluxDB2如何求增量数据
  • Flink作业调度的9种状态
  • 8、Kubernetes核心技术 - ConfigMap
  • 音视频--DTMF信号发送及检测
  • 阿里云容器服务助力极氪荣获 FinOps 先锋实践者
  • C++ 通过time.windows.com获取时间
  • MPLAB加载c文件为什么不能添加到工程中的source files中
  • Tcp的粘包和半包问题及解决方案
  • 路由的hash和history模式的区别
  • CS5366+VL171母座正反插HDMI(CS5466也可搭配)国产芯片TYPEC方案设计 ASL电路原理图 集睿致远+威锋设计
  • mxgraph的核心元素详谈
  • 再探C++——默认成员函数
  • 推荐两款github敏感信息搜集工具(gsil、gshark)
  • 如何不拷贝资源的使用fork
  • 使用事件侦听器和 MATLAB GUI 查看 Simulink 信号研究
  • 使用协程让物体颜色慢慢消失
  • 服务器流量
  • 加拿大量子研究新动作!D-Wave与滑铁卢大学合作研究量子相干性
  • 网络安全进阶学习第十一课——MySQL手工注入(2)
  • 数据库和ORM如何优雅的添加字段?