【QGroundControl二次开发】九. QGC地面站替换自定义MAVLINK协议

news2025/1/19 11:16:25

一. 生成自定义mavlink协议

具体操作参考之前文章->【QGroundControl二次开发】四.QGC自定义MAVLink消息

-------------------------下面为具体操作---------------------------

在mavlink源码下的mavlink-master\message_definitions\v1.0\common.xml加入自定义协议,格式如下:

<message id="20001" name="CUS_AI_HEARTBEAT">
      <description>The heartbeat message shows AI Computer Status.</description>
      <field type="uint8_t" name="type" enum="MAV_TYPE">Vehicle or component type. For a flight controller component the vehicle type (quadrotor, helicopter, etc.). For other components the component type (e.g. camera, gimbal, etc.). This should be used in preference to component id for identifying the component type.</field>
      <field type="uint8_t" name="autopilot" enum="MAV_AUTOPILOT">Autopilot type / class. Use MAV_AUTOPILOT_INVALID for components that are not flight controllers.</field>
      <field type="uint8_t" name="base_mode" enum="MAV_MODE_FLAG" display="bitmask">System mode bitmap.</field>
      <field type="uint8_t" name="system_status" enum="MAV_STATE">System status flag.</field>
      <field type="uint8_t_mavlink_version" name="mavlink_version">MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version</field>
    </message>

与之前介绍的不同的GGC地面站是C版本的MAVLINLK,所以这里是需要生成c版本的协议。
运行源码中的mavgenerate.py脚本。
在这里插入图片描述
在Generator中的XML框中选择修改完的commo.xml文件,Out中选择生成文件的位置。
在这里插入图片描述
生成的文件如下所示:
在这里插入图片描述

二. 修改QGC文件

两种方法选其一

2.1 省事做法

复制生成文件的common下的common.h和 mavlink_msg_cus_ai_heartbeat.h到 qgc的mavlink对应位置下。
一般是在qgroundcontrol\libs\mavlink\include\mavlink\v2.0\common下

2.2 手动修改

  1. 复制生成common.h中的多出来的crc校验字段加入到qgc中common.h的校验中。
MAVLINK_MESSAGE_CRCS{...}

在这里插入图片描述

  1. 在common.h两千多行的位置引入新协议的头文件
#include "./mavlink_msg_cus_ai_heartbeat.h"
  1. 修改common.h中的MAVLINK_MESSAGE_INFO.
# define MAVLINK_MESSAGE_INFO {..., MAVLINK_MESSAGE_INFO_CUS_AI_HEARTBEAT}
  1. 修改common.h中的MAVLINK_MESSAGE_NAMES
# define MAVLINK_MESSAGE_NAMES {..., { "CUS_AI_HEARTBEAT", 20001 }}

重新编译,编译成功即无误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(javaweb)请求响应postman

目录 一.请求响应概述 二.请求参数的接收及封装 1.postman 2. 简单参数 3.实体参数 4.数组集合参数 5.日期参数 6.JSON参数 二.设置响应数据 一.请求响应概述 1.Tomcat又称为servlet容器 前端浏览器发起请求携带http请求数据&#xff0c;web服务器负责请求协议的解析&a…

网站开发涉及到的技术内容介绍——后端PHP(1)

一、PHP简介 PHP(全称:Hypertext Preprocessor (超文本预处理器))是一种创建动态交互性网站的服务器端脚本语言( PHP代码可以放在HTML文档中的任何位置;且PHP 脚本是在服务器上运行,然后将纯 HTML 结果发送回浏览器)且PHP 是免费的,并且使用非常广泛。同类的后端语言有…

Element学习(布局组件、案例操作)(4)

1、页面整体的布局 2、找到这种布局对应的代码&#xff08;复制——>粘贴到标签<div>中&#xff09; <el-container><el-header>Header</el-header><el-container><el-aside width"200px">Aside</el-aside><el-main…

8.8C++作业

在类结构体中&#xff0c;运用 成员函数或友元函数 实现算术运算符重载 #include <iostream>using namespace std;class Stu {friend const Stu operator/(const Stu &R,const Stu &L);friend const Stu operator%(const Stu &R,const Stu &L); private…

【2024年电赛H题自动行驶小车】省一学长手把手从零教你学MSPM0

一、前前言 第十二届浙江省大学生电子设计竞赛终于落下帷幕了&#xff0c;名单已公示&#xff0c;几家欢喜几家愁&#xff1f;我觉得每一位经历过电赛的朋友都称得上英雄&#xff0c;我想我们所学到的并非是“省一等”或“成功参赛奖”一个头衔能囊括的&#xff0c;相信真正有…

一篇带你了解kickstart无人值守以及pxe实现服务器自动部署

目录 使用背景 pxe原理 一、kickstart无人值守实验 实验环境&#xff1a; kickstart脚本制作&#xff1a; http服务 DCHP服务 定位需要装的机器上&#xff08;已使用光盘&#xff09; 二、PXE实验 实验环境&#xff1a;在上个实验环境的基础上 使用已经做好的dhcp&am…

Type-C取电芯片LDR6500

在当今电子设备日新月异的时代&#xff0c;Type-C接口以其高效、便捷的特点迅速成为市场主流。这一接口不仅支持高速数据传输&#xff0c;还实现了正反插拔的便利性&#xff0c;极大地提升了用户体验。然而&#xff0c;在Type-C接口的广泛应用背后&#xff0c;一个关键的技术组…

数模评价类—【主成分分析法】

目录 文章目录 前言 一、主成分分析法是什么&#xff1f; 二、模型原理 三.实现步骤 1.x标准化处理 2.计算标准化样本后的协方差矩阵/样本相关系数矩阵 3.计算R的特征值&#xff08;入&#xff09;和特征向量 4.计算主成分贡献率和累计贡献率 5.写出主成分 总结 前言…

【物联网设备端开发】使用QEMU模拟ESP硬件运行ESP-IDF

目录 一&#xff0c;开发环境搭建 1.1 安装ESP-IDF 1.2 安装vscode插件 1.3 在ESP-IDF插件配置ESP-IDF开发配置 1.4 下载IOTDeviceSDK 设备端开发代码 1.5 通过ESP-IDF插件编译好镜像 1.6 构建QEMU docker镜像 1.7 使用QEMU容器运行镜像 二&#xff0c;搭建QEMU环境步…

CS531 Virtualization

MLFQ copy and change address translation Segmentation TLB multilevel page

Qt实现中英文切换中QMessageBox中的中文信息怎么处理

有粉丝看了《Qt实现中英文切换》文章后&#xff0c;留言说“中英文切换中QMessageBox中的中文信息怎么处理”&#xff0c;这篇文章就告诉你处理方法。 1&#xff0c;QMessageBox OK或Cancel提示语句 QMessageBox::information(this, QString::fromLocal8Bit("测试")…

达林顿管uln2004a参数及其功耗计算

特点&#xff1a; 单输出集电极电流500mA高电压输出 50V有输出钳位二极管达林顿晶体管阵列。每个由七个组成NPN达林顿对&#xff0c;具有高压输出与共阴极钳位二极管开关感性负载。单个达灵顿对的集电极额定电流为500mA。达林顿对可以并联&#xff0c;以获得更大的电流能力 应…

【LVS】部署NAT模式集群

一、实验环境 每台主机的防火墙和SELinux都要关掉 systemctl stop firewalld setenforce 0 client&#xff08;测试机&#xff09;&#xff1a; ip 172.25.254.50 lvs&#xff08;调度器&#xff09;&#xff1a; vip 172.25.254.100 dip 192.168.0.100 RS1&#xff08;真实服…

2025深圳国际户外棋牌游戏休闲娱乐展览会

2025深圳国际户外棋牌游戏休闲娱乐展览会 2025 Shenzhen International Outdoor Chess Card Games, Leisure and Entertainment Exhibition 时间&#xff1a;2025年02月27-3月01日 地点&#xff1a;深圳会展中心&#xff08;福田馆&#xff09; 详询主办方陆先生 I38&…

LeetCode.3131.找出与数相加的整数I

题目描述&#xff1a; 给你两个长度相等的数组 nums1 和 nums2。 数组 nums1 中的每个元素都与变量 x 所表示的整数相加。如果 x 为负数&#xff0c;则表现为元素值的减少。 在与 x 相加后&#xff0c;nums1 和 nums2 相等 。当两个数组中包含相同的整数&#xff0c;并且这…

C语言结构体初识(变量定义初始化和传参)

结构体类型的声明 结构体是一些值的集合&#xff0c;这些值被称为成员变量&#xff0c;结构体的每个成员可以是不同类型的变量。而数组却是一些相同类型元素值的集合。 声明&#xff1a; struct tag {member-list; 成员变量的列表 }variable-list; 结构体变量 -》是全局变量…

Python写UI自动化--playwright(输入框操作)

get_by_placeholder 允许我们根据输入框的 placeholder 属性来查找元素。这对于使用占位符文本作为提示的输入框非常有用。 如上图&#xff0c;导航百度一下--登录操作&#xff0c;对账号和密码输入框进行检查&#xff0c;在源码页面会看到类似&#xff1a;placeholder"手…

C口一拖二数据线:解锁数字生活的便捷新篇章LDR6020

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 在科技日新月异的今天&#xff0c;我们的电子设备如同生活中的伴侣&#xff0c;无论是工作、学习还是娱乐&#xff0c;都离不开它们的陪伴。随着Type-C接口逐渐成为众多高端智能手机、平板电脑、笔记本电脑…

Java中的优先级队列(PriorityQueue)(如果想知道Java中有关优先级队列的知识点,那么只看这一篇就足够了!)

前言&#xff1a;优先级队列&#xff08;Priority Queue&#xff09;是一种抽象数据类型&#xff0c;其中每个元素都关联有一个优先级&#xff0c;元素按照优先级顺序进行处理。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 …

从零开始之AI视频制作篇

从零开始之AI视频制作篇 文章目录 从零开始之AI视频制作篇前言一、工具列表二、成片展示三、制作流程1、获取图片素材2、图片生成视频2.1 Runway操作流程 3、文本生成语音3.1 Fish Audio操作流程 4、视频剪辑4.1 音频素材4.2 字幕生成 四、Runway提示词参考&#xff1a;参考 前…