pixhawk飞控中添加uORB主题

2023-05-16

本说明针对 Firmware v1.2.0
参考:
https://pixhawk.org/start?id=zh/dev/shared_object_communication

1. 添加流程说明

在Firmware/msg下新建uORB的成员变量。注:第一个成员为uint64 timestamp,作为话题运行的时间戳,格式为:xxxx.msg 。
1. 在Firmware/src/modules/uORB中的object_common.cpp添加所需要的主题。在编译结束后,能查看到所定义的结构体,并且经过ORB_DECLARE。
2. 在Firmware/cmake中的ros-CMakeLists.txt中添加话题的xxxx.msg ,作为cmake的编译索引。
2. 添加话题示例

在Firmware/msg下新建 li_yuanxing.msg
内容为:

uint64 timestamp            # Microseconds since system boot
uint64 hehe1
uint64 hehe2
uint64 hehe3
uint64 hehe4

1 在Firmware/src/modules/uORB中的object_common.cpp添加:

#include "topics/li_yuanxing.h"
ORB_DEFINE(li_yuanxing, struct li_yuanxing_s);

2.在Firmware/cmake中的ros-CMakeLists.txt中添加:li_yuanxing.msg
注:

## Generate messages in the 'msg' folder
add_message_files(
  FILES
  rc_channels.msg
  vehicle_attitude.msg
  vehicle_attitude_setpoint.msg
  manual_control_setpoint.msg
  actuator_controls.msg
  actuator_controls_0.msg
  actuator_controls_virtual_mc.msg
  vehicle_rates_setpoint.msg
  mc_virtual_rates_setpoint.msg
  vehicle_attitude.msg
  vehicle_control_mode.msg
  actuator_armed.msg
  parameter_update.msg
  vehicle_status.msg
  vehicle_local_position.msg
  position_setpoint.msg
  position_setpoint_triplet.msg
  vehicle_local_position_setpoint.msg
  vehicle_global_velocity_setpoint.msg
  offboard_control_mode.msg
  vehicle_force_setpoint.msg
  distance_sensor.msg
  control_state.msg
 +li_yuanxing.msg
)

3. 原理说明

xxx.msg为成员;
ORB_DEFINE(li_yuanxing, struct li_yuanxing_s);为话题的定义;
在Firmware/msg/templates/px4/uorb/msg.template 有模块化代码的编译设置;
在编译的时候,通过msg.template,生成一定结构的代码,再通过ros-CMakeLists.txt进行编译,所以在编译一遍后,才能具体看到所定义的话题成员。
这里写图片描述
4. 相关函数说明

初始化

orb_advert_t orb_advertise(const struct orb_metadata *meta, const void *data)
orb_advert_t orb_advertise_multi(const struct orb_metadata *meta, const void *data, int *instance, int priority)

发布

int  orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data)
int  orb_publish_auto(const struct orb_metadata *meta, orb_advert_t *handle, const void *data, int *instance, int priority)

订阅

int  orb_subscribe(const struct orb_metadata *meta)
int  orb_subscribe_multi(const struct orb_metadata *meta, unsigned instance)

拷贝

int  orb_copy(const struct orb_metadata *meta, int handle, void *buffer)

参数说明
orb_advert_t :空指针 handle
const struct orb_metadata *meta :话题ID
const void *data :相关数据类型指针
话题之间的发布订阅依赖于handle进行相关性的传递,话题的ID和结构通过ORB_DEFINE(li_yuanxing, struct li_yuanxing_s);来定义;
注:在初始化和发布用的是handle指针,订阅和copy用的是整形。
5. 发布订阅示例

示例在 px4_simple_app.c上进行测试

/*添加头文件*/
#include <uORB/uORB.h>
#include <uORB/topics/li_yuanxing.h>


/*定义话题结构*/
struct li_yuanxing_s test;
/*初始化数据*/
memset(&test, 0, sizeof(test));
/*初始化话题*/
/*test_pub 为handle指针*/
orb_advert_t test_pub = orb_advertise(ORB_ID(li_yuanxing), &test);
/*test数据赋值*/
 test.hehe1 = 1;
 test.hehe2 = 2;
 test.hehe3 = 3;
/*发布测试数据*/
orb_publish(ORB_ID(li_yuanxing), test_pub, &test);
/*订阅数据,在copy之前,必须要订阅*/
/*test_sub_fd为handle*/
int test_sub_fd = orb_subscribe(ORB_ID(li_yuanxing));
struct li_yuanxing_s data_copy;
/*copy数据*/
orb_copy(ORB_ID(li_yuanxing), test_sub_fd, &data_copy);
/*打印*/
PX4_WARN("[px4_simple_app] Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
                     (double)data_copy.hehe1,
                     (double)data_copy.hehe2,
                     (double)data_copy.hehe3);
结果

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pixhawk飞控中添加uORB主题 的相关文章

  • PX4/Pixhawk---uORB深入理解和应用(最新版)

    1 简介 ps 第1章简介是参考 uORB深入理解和应用 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c 这可以让我们更好的理解PX4 Pixhawk的软件架构和运作 xff
  • pixhawk似乎也是用的四环串级

    pixhawk似乎也是用的四环串级 https blog csdn net sinat 16643223 article details 106973618 阿木社区的pixhawk的课里 https bbs amovlab com plu
  • pixhawk的日志分析似乎是用flightplot

    https blog csdn net sinat 39342174 article details 79982138 http blog sina com cn s blog 643af4310102wx3n html 我准备把今天飞的P
  • pixhawk的offboard模式其实是和定高(AltHold) 定点(loiter) 这些模式平级的一个模式

    pixhawk的offboard模式其实是和定高 xff08 AltHold 定点 loiter 这些模式平级的一个模式 所以也是可以通过遥控器进入offboard模式的 不是什么特别的东西 https blog csdn net msq1
  • 在PX4下更换pixhawk的IMU

    写在前面 出于一些原因 xff0c 这篇文章不给出具体的源码 xff0c 因此博主试着将这篇写成了一篇科普性质的文章 xff0c 如果你认真读的话 xff0c 应该会有收获的 为什么要更换pixhawk的传感器 xff1f 大多数的玩家拿到
  • PIXHAWK添加自定义消息存储到SD卡

    四旋翼调试阶段总会出现很多难以预见的现象 xff0c 这时为了找到所出问题的原因 xff0c 就需要获得原始相关数据进行分析 xff0c pixhawk代码提供了记录飞行日志的功能 xff0c 能够将飞行中的重要数据存入SD卡中 xff0c
  • pixhawk日志ulg格式转matlab数据csv格式

    1 windows下打开Anconda Prompt xff0c 执行pip install pyulog安装pyulog包 2 在日志文件所在文件夹下执行ulog2csv 文件名 ulg即可生成相关的csv文件
  • Pixhawk-开篇

    Pixhawk 开篇 互联网上关于介绍Pixhawk的文章特别多 有心人自己去网上查看吧 本篇文章未完 可能会有更新 不足请指出 QQ 4862879 说重点 Pixhawk指的是一款开源的硬件 下图的那个 是把原来的PX4FMU 43 P
  • PX4/Pixhawk---高速成为开发人员(Windows)

    1 高速成为开发人员新手教程 xff08 翻译 xff09 官方 1 1 编译环境之版本号控制系统 xff08 1 xff09 安装 MSysGIT 安装完毕后 xff0c 配置GIT 安装注意 安装过程中除了以下一步外 xff0c 其它的
  • pixhawk position_estimator_inav.cpp思路整理及数据流

    写在前面 xff1a 这篇blog主要参考pixhawk的高度解算算法解读 xff0c 并且加以扩展 xff0c 扩展到其他传感器 xff0c 其实里面处理好多只是记录了流程 xff0c 至于里面实际物理意义并不是很清楚 xff0c 也希望
  • pixhawk PX4FMU和PX4IO最底层启动过程分析

    首先 xff0c 大体了解PX4IO 与PX4FMU各自的任务 PX4IO STM32F100 为PIXHAWK 中专用于处理输入输出的部分 输入为支持的各类遥控器 PPM SPKT DSM SBUS 输出为电调的PWM 驱动信号 它与PX
  • pixhawk mc_pos_control.cpp源码解读

    好久没跟新blog了 xff0c 这段时期边调试边看程序 xff0c 所以有点慢 要开始着手调试了 这篇blog是顺着上一篇pixhawk 整体架构的认识写的 xff0c 接下来看程序的话 xff0c 打算把各个功能模块理解一遍 xff0c
  • F450机架 Pixhawk飞控实现自动避障(2019.11.29)

    之前进行无人机项目 xff0c 实现避障 巡航 定点 航拍等功能 xff0c 项目结束 xff0c 在这里进行分享经验 xff0c 项目所用器件为自己使用的 xff0c 仅供参考 xff0c 实际实现须结合自己实际情况 1 传感器选择 权盛
  • PX4/Pixhawk---uORB深入理解和应用

    The Instructions of uORB PX4 Pixhawk 软件体系结构 uORB 主题发布 主题订阅 1 简介 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c
  • pixhawk接口图以及引脚说明

    pixhawk接口图和引脚如下 pixhawk可以同时使用2个GPS xff0c 这只能使用其中一个罗盘 xff0c 实际中飞控挑选其中信号好的一个GPS进行定位 硬件部分 xff1a 第二个GPS插在serial 4 5接口上 xff0c
  • 搭建pixhawk飞控无人小车--替换自带遥控器

    因为小车原装遥控器接收机和电调版整合在一个小板子上 xff0c 且没有相关资料 xff0c 无法接入飞控 因此单独购买遥控器 在某宝上购买富斯遥控器i6 xff0c 总共六个通道 三个双向开关 一个三向开关 遥控器简单入门视频如下 xff0
  • pixhawk源码下载与编译

    今天和同学在一起讨论发现自己还在看的pixhawk源码的版本好低啊 xff0c 就下个最新的吧 想起有些人还不会下载源码 xff0c 以及用什么工具查看 源码的下载我用的是git shell工具下的 xff0c px4的github网址是h
  • PX4模块设计之三:自定义uORB消息

    PX4模块设计之三 xff1a 自定义uORB消息 1 新增自定义uORB消息步骤2 应用ext hello world消息示例3 编译执行结果4 参考资料 基于PX4开源软件框架简明简介和PX4模块设计之二 xff1a uORB消息代理
  • uORB和MAVLink通讯例程

    uORB uORB 是一种异步 publish subscribe 的消息传递 API xff0c 用于进程或者线程间通信 IPC 添加新的Topic xff08 主题 xff09 在msg 目录下创建一个新的 msg文件 xff0c 并将
  • pixhawk 整体架构的认识

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提

随机推荐

  • 【AI视野·今日Robot 机器人论文速览 第十二期】Tue, 22 Jun 2021

    AI视野 今日CS Robotics 机器人学论文速览 Tue 22 Jun 2021 Totally 17 papers x1f449 上期速览 更多精彩请移步主页 Daily Robotics Papers PHYSFRAME Type
  • 【今日CV 计算机视觉论文速览 第96期】 8 Apr 2019

    今日CS CV 计算机视觉论文速览 Mon 8 Apr 2019 Totally 49 papers 上期速览 更多精彩请移步主页 Interesting 单图像修饰去除 通过估计图像中含有干扰的像素 xff08 水印 涂鸦和变形 xff0
  • gitee及github有什么区别?

    前言 xff1a 1 目前的最常用的版本控制中心有两种 xff1a SVN和Git xff1b 2 SVN xff1a 集中式版本控制中心 xff0c svn就像是一对多的关系 xff0c 一个仓库供多个人使用 xff0c 而且必须联网才能
  • 软体和软件的区别

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 我们这边把Software翻译为软件 xff0c 台湾同胞把它翻译为软体 最近生发一点思考 xff0c 觉得把Software翻译为软体
  • Docker入门

    Docker简介 Docker是开发人员和系统管理员构建 发布和运行分布式应用程序的开放平台 是应用容器 xff08 Application Container xff09 xff0c 是可以为应用提供可运行容器的一个平台 Docker看作
  • js 中 set 与 数组 相互转换

    1 定义set span class token keyword let span manage ip span class token operator 61 span span class token keyword new span
  • mybatis多条件批量删除整理

    批量增加 span class token operator lt span insert id span class token operator 61 span span class token string 34 batchSaveU
  • vscode设置打开多个标签页

    首先进入路径C Users admin AppData Roaming Code User xff1b 然后打开settings json文件 xff0c 并添加一条配置 xff1a 34 workbench editor enablePr
  • Java Date 关于before和after 的使用

    1 date1 after date 当date1大于date2时 xff0c 返回true xff0c 当小于等于时 xff0c 返回false xff1b 2 date1 before date xff0c 当date1小于date2时
  • js正则表达式判断密码满足大写字母,小写字母,数字和特殊字符,其中任意三种组合,且长度在8到15之间

    一 判断密码满足大写字母 xff0c 小写字母 xff0c 数字和特殊字符 xff0c 其中任意三种组合 xff0c 且长度在8到15之间 在js中的代码 xff0c 如下 var testPassword 61 a zA Z 43 A Z
  • Java 获取两个时间的时间差(时、分、秒)

    前言 在平时的工作中 xff0c 难免会遇到获取两个时间相差多少天 小时 分钟 秒 毫秒 xff0c 现在我将自己获取的方法总结如下 xff1a 注明 xff1a 原文章转载链接出自 xff1a https www cnblogs com
  • HeidiSQL工具导出导入MySQL数据

    有时候 为了数据方便导出导入SQL 我们可以借助一定的工具 方便我们队数据库的移植 可以达到事半功倍的效果 在这里 就给大家简单的介绍一款能方便导出或者导入MySQL的数据 首先 选择你要导出的数据库 点击鼠标右键 如下图所示 这里是进行对
  • Navicat相关注册码

    Navicat相关注册码 用户名和组织随便起 注册码如下 Navicat for SQL Server V10 0 10 NAVD 3CG2 6KRN IEPM NAVL NIGY 6MYY XWQE NAVI C3UU AAGI 57FW
  • 我心目中的好的技术教程

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 当人类进入互联网时代 xff0c 便宣告一个新的学习模式 网上学习的诞生 现在各种网上教程之多可以用恒河沙数来形容 xff08 这里暂时除
  • TCP的建立

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是TCP的建立 TCP是一个面向连接的可靠的传输控制协议 xff0c 在每次数据传输之前首先需要建立连接 xff0c 连接建立成功后才开
  • Java根据数字金额生成大写金额

    要求 根据用户输入金额数字转换成相对应大写金额例如 xff1a 430 65 xff0c 转换成肆佰叁拾元陆角伍分代码如下 xff1a public class MoneyFormatUtils private static final S
  • POI 设置Excel单元格背景色(参考颜色代码)

    创建一个 workbook 对象 Workbook workbook 61 new XSSFWorkbook 创建一个 sheet Sheet sheet 61 workbook createSheet 创建一行 Row row 61 sh
  • RedisTemplate之opsForValue使用说明

    转载链接出自 xff1a https blog csdn net qq 25135655 article details 80357137 Redis中opsForValue 方法的使用介绍 xff1a 1 set K key V valu
  • Python爬虫(二)——爬取电影天堂,保存下载地址

    首先我们开始要分析一下 xff0c 下载种子我们需要哪几步 xff1a 获取所有电影页的访问地址获取电影页源码提取出下载地址将下载地址保存 首先第一步 xff0c 我们来分析一下电影天堂网站的结构 xff0c 发现他跟我们的古诗文网还是非常
  • pixhawk飞控中添加uORB主题

    本说明针对 Firmware v1 2 0 参考 xff1a https pixhawk org start id 61 zh dev shared object communication 1 添加流程说明 在Firmware msg下新