QGC UDP 建立通讯连接

news/2024/5/18 12:35:54 标签: udp, 网络, 网络协议

QGC关于通信连接建立部分的程序比较复杂,但感觉写的很厉害,通过读代码把自己的一点理解记录下来。

收集接收

  1. 空地通信管理

空地通信的管理在“应用程序设置->通讯连接”中进行通信连接创建,连接和断开。

通讯连接添加完成后点击“连接”按钮,进行空地通信连接

  1. 连接创建过程

“连接”按钮与LinkSetting.qml中的QGCButton绑定,绑定LinkManager::createConnectedLink(),其中传参为当前连接名称。

创建连接的的实际程序在LinkManager::createConnectedLink(SharedLinkConfigurationPointer& config, bool isPX4Flow)中,其中传参为通讯的参数和isPx4Flow。创建LinkInterface类指针,通过端口类型创建不同的实例(串口、TCP、UDP、LogReplay、Mock),本文只分析UDP创建过程。

pLink = new UDPLink(config);

  1. 创建UDP连接

在UDPLink类初始化中通过新建一个线程运行数据接收。

在线程运行中首先判断Socket是否连接,如果已经连接则运行线程。其中exec()作用是开启一个循环,执行一个事件,即运行该线程。

在_hardwareConnect()中主要是判断UDP Socket是否已将创建完成。如果创建完成则_connectState为true,则使用信号槽将QUdpSocket::readyRead, this与UDPLink::readBytes进行连接,当有数据更新通过readyRead触发readBytes函数。

  1. 数据接收

数据接收首先通过readBytes()接收databuffer,收到数据后使用信号bytesReceived()触发数据接收任务。

通过信号槽连接LinkManager::receiveBytes,在receiveBytes中进行数据解析转成mavlink。

通过信号槽,将messageReceive()与Vehicle::_mavlinkMessageReceived()函数进行连接,在_mavlinkMessageReceived中就可以进行mavlink消息分类处理。

以上就实现的下传数据接收和解析工作。

  1. 数据上传

地面站通过通讯连接进行数据上传,通过调用Vehicle::sendMessageOnLink(LinkInterface* link, mavlink_message_t message)实现数据上传。

在Vehicle中使用信号槽将Vehicle::_sendMessageOnLinkOnThread和Vehicle::_sendMessageOnLink进行绑定,在_sendMessageOnLink函数中调用通讯连接

link->writeBytesSafe((const char*)buffer, len)实现数据上传。

在LinkInterface.cc中使用信号槽将LinkInterface::_invokeWriteBytes和LinkInterface::_writeBytes绑定触发_writeBytes。

在LinkInterface.h中将_writeBytes函数定义为了虚函数,通过类继承的方式,分别在串口、TCP、UDP类中进行函数实现。

在UDPLink.cc中使用_writeBytes函数实现数据上传。

至此完成了地面站数据上传的功能


http://www.niftyadmin.cn/n/131912.html

相关文章

华为OD机试 - 九宫格按键输入(C 语言解题)【独家】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:九宫格按…

生产环境在线快速更新jar包内容

如何修改Jar包中的配置文件? 当我们在使用一些开源框架时,我们可能需要手动修改其中的配置文件,以满足自己项目的需求。但是,有些框架是作为Jar包提供的,我们可能会遇到修改配置文件的困难。今天,我们就来看…

1-1 微服务架构概述

文章目录微服务架构概述1-1. 系统进化理论概述集中式系统:分布式系统1-2. 系统进化理论背景1-3. 什么是微服务架构1-4. 微服务架构的优缺点1-5. 为什么选择 Spring Cloud 构建微服务认识 Spring Cloud2-1. Spring Cloud 是什么2-2. Spring Cloud 的版本2-3 Spring C…

windows10安装nodejs

一、下载 官网 Download | Node.js 某云盘 链接:https://pan.baidu.com/s/1PCd4fh4ohEvAc8qSrb4-WA 提取码:yola 二、安裝 双击安装程序:具体步骤如下: 设置环境变量 验证安装是否安装成功 进入cmd命令行窗口,输入…

pyppeteer中文文档

目录 1.命令 ​​​​​​2.环境变量 3.Launcher(启动器) 4.浏览器类 5.浏览器上下文类 6.页面类 7.Worker 类 8.键盘类 9.鼠标类 10.Tracing类 11.对话框类 12.控制台消息类 13.Frame 类 14.执行上下文类 15.JSHandle 类 16.元素句柄类…

一文讲清楚SpringBoot六种读取配置方式

1 SpringBoot工程创建 1.1 maven工程创建 使用开发工具创建一个纯净maven工程 1.2 引入依赖 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

Spark Yarn 运行环境搭建

文章目录Spark Yarn 运行环境搭建1、解压缩文件2、修改配置环境文件3、配置历史服务器Spark Yarn 运行环境搭建 1、解压缩文件 将spark3.2.3的压缩包上传到 linux /opt/software 目录下 输入命令&#xff1a; tar -zxvf spark-3.2.3-bin-hadoop3.2-scala2.13.tgz -C /opt/ 解…

【C语言】编译+链接

一、程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境&#xff0c;它用于实际执行代码。详解编译链接翻译环境1.组成一个程序的每个源文件通过…