【QGroundControl二次开发】七.QGC自定义MAVLink消息MavLink通信协议 C++应用

news2024/9/23 7:29:56

1. 接收解析源码分析

通过接收串口或UDP发来的的字节流buffer,长度length=buffer.size(),通过下列脚本解析,每解析出一个mavlink数据包就执行onMavLinkMessage函数

for(int i = 0 ; i < length ; ++i){
      msgReceived = mavlink_parse_char(MAVLINK_COMM_1, (uint8_t)buffer[i], &message, &status);
if(msgReceived){
      emit onMavLinkMessage(message);
 }
}

其中: void onMavLinkMessage(mavlink_message_t message);是得到一个MAVLink消息包后的处理函数,需要根据这个消息的ID来识别当前包的用途(心跳包,GPS位置,姿态等),并提取出感兴趣的数据。

解析函数实现如下,根据message.msgid跳到对应的_decode函数,解码出数据

void onMavLinkMessage(mavlink_message_t message){
  switch (message.msgid){
    case MAVLINK_MSG_ID_GLOBAL_POSITION_INT:{
      mavlink_global_position_int_t position;
      mavlink_msg_global_position_int_decode(&message, &position);
      ui->label->setText("经度:"+QString::number(position.lat* 1e-7)// 将整数经纬度转换为度
                      + "\n 纬度:"+QString::number(position.lon* 1e-7)
                      + "\n 高度:"+QString::number(position.alt)// 以米为单位的高度
               );
      break;
     }
    } 
  }

2. 发送源码解析 — 发送一条mavlink_hil_actuator_controls消息

在这里插入图片描述

void sendHILCtrlMessage(uint8_t modes, uint64_t flags, float ctrl[])

{
	mavlink_hil_actuator_controls_t hilctrl;
	hilctrl.mode = modes;
	hilctrl.flags = flags;
	
	for(int i=0;i<16;i++){
		hilctrl.controls[i]=ctrl[i];
	}
	mavlink_message_t mess;
	mavlink_msg_hil_actuator_controls_encode(SystemID, TargetCompID, &mess, &hilctrl);
	
	char buffer[500];
	memset(buffer,0,500);
	unsigned int length = mavlink_msg_to_send_buffer((uint8_t*)buffer, & mess);
	udp.writeDatagram(buffer,length);//通过UDP或者串口将buffer发送出去即可
}

参考:
https://mavlink.io/zh/messages/common.html
https://doc.rflysim.com/3.2MAVL.html
https://blog.csdn.net/qq_44070755/article/details/122222337

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

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

相关文章

【运维自动化】网络统一监控运维管理解决方案(PPT建设方案)

运维自动化是提升IT运维效率、降低人力成本、增强系统稳定性和可靠性的关键举措。随着业务规模的增长&#xff0c;传统的手动运维方式已难以满足快速响应和高效管理的需求。自动化运维通过脚本、工具和系统平台&#xff0c;实现日常任务自动化执行、故障预警与快速恢复、资源优…

数据结构笔记纸质总结

1.基本概念 2.复杂度 3.线性表 4.栈 5.队列 6.串 7.数组 8.矩阵 9.广义表 10.树

15.3 Zookeeper官方使用_实现分布式锁

1. 简介 2. 代码演示 2.1 客户端连接类 package com.ruoyi.common.zookeeper;import com.ruoyi.common.exception.UtilException; import

命途多舛的Concepts:从提出到剔除再到延期最后到纳入,Concepts为什么在C++中大起大落?

在C的漫长发展史中&#xff0c;Concepts&#xff08;概念&#xff09;的故事显得尤为引人注目。它的历程不仅是C社区技术演进的缩影&#xff0c;也是对软件工程实践的一次深刻反思。本文将详细剖析C的Concepts&#xff1a;它是什么&#xff0c;它的设计初衷与使用场景&#xff…

快手商业化 Java后端 二面|面试官很nice

面试总结&#xff1a;没有那种纯八股问题&#xff0c;都是偏向于情景题。看到面试官最后出了一道多叉树的题目&#xff0c;我以为是想直接刷人&#xff0c;但还是尽力去尝试了一下&#xff0c;最后也没做出来&#xff0c;面试官很nice&#xff0c;在答不上来的时候会引导我去思…

煤矿行业智慧矿山信息化解决方案

文章摘要 煤矿行业背景概述煤炭行业经历了从普通机械化到自动化的跨越&#xff0c;目前正向智能化发展。尽管煤矿智能化尚处于起步阶段&#xff0c;但智能化程度正不断进步。 煤矿信息化发展趋势信息化发展趋势从单机自动化监控系统&#xff0c;发展到全矿井综合自动化系统&am…

【算法】斐波那契查找(黄金分割查找)

原理 斐波那契查找的原理与二分查找、插值查找相似&#xff0c;仅仅是改变了中间节点&#xff08;mid&#xff09;的位置&#xff0c;mid 不再是中间或插值得到的&#xff0c;而是位于黄金分割点的附近&#xff0c;即 mid low F(k-1)-1 &#xff08;F代表斐波那契数列&#…

Java 应用中的内存泄漏:常见场景及最佳实践

内存泄漏是 Java 应用程序中一个常见而棘手的问题&#xff0c;它会导致应用程序的内存使用不断增长&#xff0c;最终影响性能和稳定性。尽管 Java 提供了垃圾回收机制来自动管理内存&#xff0c;但内存泄漏问题依然普遍存在。内存泄漏的根源可能包括不再使用的对象仍被持有引用…

第四范式上线搜广推一体化平台 赋能企业高效增长

产品上新 Product Release 今天&#xff0c;第四范式产品再度上新&#xff0c;正式升级并推出的“搜广推”一体化平台——天枢。 天枢拥有全面的用户画像分析、端到端的搜索推荐一体化、一站式流量运营管理等能力&#xff0c;集合智能搜索、智能推荐和智能推广三大能力于一身&a…

酷柚易汛ERP全新功能插件上线“业绩提成”很多老板期待已久,终于来啦!

业绩提成基于进销存系统销货业务设计的、用于自动化处理业务员销货业绩与提成计算过程的插件&#xff0c;汇总累计进销存系统产生的业绩额度并根据自定规则计算对应提成金额&#xff0c;以减少人力计算成本 多场景适配 集成了常用的提成方式&#xff0c;并且可设置提成额度限…

启动 /使用/关闭 Redis 服务器

1. Linux 启动 Linux 系统启动 Redis 有两种方法&#xff0c;分别是前台启动&#xff0c;后台启动&#xff0c;两者各有差异&#xff1b; &#xff08;1&#xff09;前台启动 首先&#xff0c;需要进入 bin 路径(安装路径不同输入的命令也不同); 个人的命令&#xff08;一般…

Ubantu中Docker-Compose的安装与卸载

文章目录 一、卸载二、安装安装Docker-Compose添加权限验证 一、卸载 sudo rm /usr/local/bin/docker-compose二、安装 安装Docker-Compose curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docke…

【Python正则-驯化】一文学会通过Python中的正则表达式提取文本中的日期

【Python正则-驯化】一文学会通过Python中的正则表达式提取文本中的日期 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容…

吴恩达机器学习-C1W3L2-逻辑回归之S型函数

可选实验:逻辑回归 在这个不评分的实验中&#xff0c;你会 探索sigmoid函数(也称为logistic函数)探索逻辑回归;哪个用到了s型函数 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_one_addpt_onclick import plt_one_addpt_onclick from l…

java远程调试

java远程调试 idea2024创一个Spring Web项目springdemo1 使用maven-assembly-plugin插件打包成JAR文件 pom.xml参考如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi&quo…

【C#之WPF,给Border设置背景图片,代码运行后图片无法显示】

C#之WPF&#xff0c;给Border设置背景图片&#xff0c;代码运行后图片无法显示 方案 方案 选中你的图片找到属性&#xff1b; 这两个都改一下&#xff1b; 改好之后在运行就可以正常显示了。

uni-app中使用支付宝扫码插件并且在真机调试时使用(详细教程)

前言&#xff1a;uni-app自带的扫码api 识别不灵敏&#xff0c;每次都得扫很长时间且不断调整才能扫出来码&#xff0c;所以决定使用支付宝扫码插件&#xff0c;官方插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id2636#detail 使用步骤: 1、下载插件到项目中 2、…

ai绘画软件哪个好?5个工具让你绘图快人一步

最近&#xff0c;沉浸式感受火把节的体验在网上引起了广泛关注&#xff0c;成为了热门话题。然而&#xff0c;我们这些忙碌的打工人&#xff0c;因为工作繁忙&#xff0c;只能羡慕地看着别人分享的欢乐瞬间。 别灰心&#xff01;谁说我们不能以另一种方式参与这场盛宴呢&#…

4款免费且安全:常用的PDF转Word在线转换工具推荐

现在办公越来越离不开电脑了&#xff0c;PDF文件和Word文档来回转换的需求也越来越大。作为一个天天跟文件打交道的上班族&#xff0c;我特别明白找个好用、靠谱的PDF转Word在线转换工具有多重要。今儿个&#xff0c;给大家说说五个免费的转换工具&#xff0c;都是我试过觉得挺…

SPSSAU | CatBoost模型原理及案例实操分析

CatBoost 是一种基于梯度提升的决策树(Gradient Boosting Decision Trees, GBDT)算法&#xff0c;专门优化了处理分类特征和序列数据的能力。算法步骤如下&#xff1a; 第一&#xff1a;生成初始模型&#xff0c;从简单的模型开始&#xff0c;通常是所有目标值的平均值&#x…