QGC UDP 建立通讯连接

2023-05-16

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函数实现数据上传。

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

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

QGC UDP 建立通讯连接 的相关文章

  • STM32学习路线

    随笔 停更了好久啊 xff0c 有偷懒 xff0c 但不是完全偷懒 xff0c 主要还是意识到 xff0c 自己太菜了 xff0c 需要补很多东西 xff0c 以下算是学习中的一些体会吧 关关难过关关过 xff0c 成为专家可能需要天赋 x
  • 做个爱读书的程序员

    很多时候我们抱怨工作过于忙碌 xff0c 疲于应付各种事情 但是往往即使有时间也总是会无所事事地浪费掉 xff0c 我们可以找很多理由去给自己解脱 xff0c 固然是想在忙碌之外给自己放松一下 xff0c 大多却是过于可惜的时候 今天跟一个
  • 共用体结构体位域的应用

    1 xff09 增加位域定义 我们经常需要直接访问寄存器中的某个位域 C281x C C 43 43 头文件及外设示例所涉及的位域结构体方法 xff0c 为多数片上外设寄存器提供了位域定义 例如 xff0c 可以为CPU 定时器 xff08
  • C#的并发机制优秀在哪?

    笔者上次用C 写 Net代码差不多还是10多年以前 xff0c 由于当时Java已经颇具王者风范 xff0c Net几乎被打得溃不成军 因此当时笔者对于这个 Net的项目态度比较敷衍了事 xff0c 没有对其中一些优秀机制有很深的了解 xf
  • 集合中常见接口与实现类的基本介绍

    1 Iterable java中集合顶级接口之一 xff0c 实现Iterable接口的集合都是可迭代到 xff0c 可遍历 2 Collection Collection接口继承了Iterable xff0c 并且实现了Iterator迭
  • KEIL5 打开时候很多文件都自动打开解决方法

    Keil5 中修改配置 Edit gt Configuration gt Other gt Open most recent project 选中既可以 xff0c 下次打开Keil时候不会再打开很多文件
  • 新手小白,求教matlab

    用matlab写了个求阶乘的函数 xff0c function y 61 digui n n为元素个数 if n lt 61 1 y 61 1 end y 61 digui n 1 n end 结果显示 xff1a 内存不足 可能的原因是程
  • 字符串有长度限制吗?是多少?

    首先字符串的内容是由一个字符数组 char 来存储的 xff0c 由于数组的长度及索引是整数 xff0c 且String类中返回字符串长度的方法length 的返回值也是int xff0c 所以通过查看java源码中的类Integer我们可
  • C++实现推理, 基于Onnx-simplifier、onnx-tensorrt、TensorRT和Cuda编程

    Cuda基础 深度学习模型推理 为啥需要学习tensorRT 因为需要加速 需要C 43 43 部署 为啥又需要学习cuda编程呢 因为有些前处理 后处理需要cuda编程来并行运算进行加速 比如anchor的解码 nms等后处理 1 CUD
  • nuScenes、Culane数据集、Camera选型及内参标定、TX2外接双目相机ZED

    1 xff1a nuScenes数据集 https zhuanlan zhihu com p 295549692 nuScenes mini data 点云数据集 针对cuda10 0 spconv版本 安装cu100版本 torch 1
  • 指针指向0的问题

    问 xff1a 定义指针变量int a 61 0 是指针变量指向地址为零的数据吗 xff1f 答 xff1a 指针赋0 xff0c 就是不指向任何对象 xff0c 相当于NULL
  • pip install basicsr安装时在Preparing metadata (setup.py)卡住

    pip install basicsr安装时在Preparing metadata setup py 卡住 如下图pip安装basicsr时卡在Preparing metadata 查了很多资料也没解决 xff0c 最后从pypi下载包通过
  • Ros 图(节点,消息,话题)命令

    1 启动守护进程 xff1a roscore xff1a ros 43 core这条命令会启动ros的核心模块 xff0c 我感觉这个是一个守护进程 xff0c 会在11311端口 xff08 可能会有不同的配置 xff09 启动一个soc
  • Android 串口通信(二)

    前言 上一篇中主要介绍了串口基础内容和基于谷歌官方android serialport api库 对Android设备进行的串口操作 xff0c 这篇文章主要介绍基于Usb转串口驱动库usb serial for android 的相关内容
  • DeepMind带来了大魔王阿尔法扣,程序员还有前途吗?

    最近 著名的编程竞赛网站C odeforces 发布了一篇名为 AlphaCode DeepMind Solves Programming Problems on CodeForce 的文章 xff0c 将阿尔法扣 xff08 AlphaC
  • 最优控制理论 四、线性二次型最优控制和LQR

    在前面两节最优控制理论 二 哈密尔顿函数法 xff0c 我们利用Hamilton函数法讨论了终端等式约束的非线性控制系统的最优控制 xff0c 它所解决的是 x
  • 多源传感器GNSS INS 视觉 LiDAR 组合导航与SLAM开源项目总结

    多源传感器GNSS INS 视觉 LiDAR 组合导航与SLAM开源项目总结 本文基于 吴桐wutong 微信公众号文章完善而来 开源代码总览 名称传感器类型组合类型滤波方法备注RTKLIBG KFGAMP rtklibexplorer h
  • Integer类超详解

    目录 xff08 点击传送 x1f680 x1f680 xff09 前言 Integer的内部结构 1 MAX VALUE 2 MIN VALUE 3 SIZE 4 TYPE 构造方法 1 Integer xff08 int number
  • PPM信号介绍

    原文地址 xff1a http nicekwell net blog 20161223 ppmxin hao jie shao html 我们知道PWM信号可以控制舵机 xff0c 一般信号周期是20ms xff0c 脉宽在500us 25
  • 算法建模语言比较:C的优势(相比于Matlab)

    数据结构定义 structure 方便组织相关数据 union 方便多角度访问数据 xff08 软件角度 硬件角度等 xff09 bit field 方便硬件角度访问数据 内存分配方式 malloc 预先 灵活申请内存空间 xff0c 拓展

随机推荐

  • 学会使用CMakeLists.txt在VScode中搭建C++工程

    目录 一 Cmake 简介 二 常用命令 1 指定 cmake 的最小版本 2 设置项目名称 3 设置变量 3 1 set 直接设置变量的值 3 2 set 追加设置变量的值 3 3 list 追加或者删除变量的值 4 添加第三方库或链接其
  • WIN10源码编译安装QGC-V3.4

    目录 写在前面 环境 安装VS2015 xff08 采用的是社区版 xff09 安装Git xff08 见GIT安装教程 xff09 并克隆QGC源码 安装Qt xff0c 并用Qt进行编译 运行 安装注意事项 写在前面 最近想起来之前有过
  • 飞控固件烧录方法

    目录 写在前面 方法一 方法二 写在前面 整理两个烧录飞控固件的方法 方法一 1 xff09 waf targets bin ardusub upload 这时两个过程 xff0c 第一个过程target 会产生一个 px4 文件 xff0
  • Ubuntu 20.04 LTS 安装qt4 library

    How to Install Qt4 Libraries in Ubuntu 20 04 LTS July 9 2020 3 Comments The Qt4 framework has been removed from Ubuntu 2
  • STM32接入ONENET-实现数据上传和命令下发

    前言 xff1a 使用ONENET平台进行远程传输数据和远程控制开发板是相对简单的事 xff0c 但由于ONENET官方给的代码只对他家的开发板比较友好 xff0c 对于初学者来说修改这些代码相对麻烦 xff0c 所以我就分享一份STM32
  • 从x86到ARM,代码移植指北

    最近ARM架构的处理器从云到端全面开花 xff0c 比如苹果MAC上的ARM架构处理器M1 MAX就堪称王炸 xff0c 华为的鲲鹏系列ARM处理器也已经稳定服务了很长时间 xff0c 目前业内有口皆碑 xff0c 因此基于x86环境编写的
  • AGV车载控制系统搭建(初学者入门)

    本文转载 xff1a 博主 robinvista的http blog csdn net robinvista article details 78349627 目的 本文介绍 AGV 车载控制系统的实现过程 xff0c 可以分为硬件搭建和软
  • 激光无轨导航AGV,未来智能工厂的必需品

    这篇文章结合一家激光无轨导航AGV公司 xff0c 开启了进入AGV领域的学习与总结 随着国家政策大力支持 xff0c 智能制造 工业4 0 人工智能等等成为了风口 xff0c 热门话题 智能制造中重要的一环 xff0c 物流搬运 分拣和智
  • 【FreeRTOS源码阅读】<2> task.c (1) 任务创建以及TCB、List的结构

    上篇讲述了list c关于链表操作的源码阅读 xff0c 此片文章将开始阅读task c task h相关结构体 由eTaskGetState返回的任务状态 typedef enum eRunning 61 0 一个任务查询自己的状态 xf
  • github仓库添加指定commit版本的子模块

    添加子模块 git submodule add repository url local path 进入子模块目录 xff0c 将子模块回滚到指定commit版本 git reset hard commit number
  • 使用阿里云的k8s部署访问环境

    阿里云推出的kubernetes版本是1 97的 xff0c docker的版本是17 06 2 ce 3 xff0c 用的都是比较新的 xff0c 相比自己搭建集群 xff0c 使用阿里这个还是比较省事的 xff0c 不需要自己研究怎么写
  • 阿里云Ubuntu服务器图形界面配置(详细步骤,萌新看过来)

    刚买完阿里云Ubuntu服务器后 xff0c 发现并没有图形界面 xff0c 就想办法在网上搜集了一些资料配置 xff0c 结果发现一些资料配置过程并不适用于萌新 所以写这篇博客 xff0c 一为记录 xff0c 二为让萌新更快更方便的配置
  • STL简单了解

    STL xff08 Standard Template Library xff0c 标准模板库 xff09 xff1a 是一种类型参数 xff08 type parameterized xff09 的程序设计方法 xff0c 基于模板的标准
  • ROS编译D435i过程中的问题及解决

    请确保已经正确安装了ROS OPENCV realsense viewer 编译出现第一个问题 96 traversing 5 packages in topological order realsense2 camera msgs pla
  • 本科毕业设计 基于ORB SLAM3的多从机SLAM导航系统

    耗时 xff1a 两个月 需求 xff1a 多从机协作 多地图系统 稠密建图 定位 导航 硬件 xff1a 二个D435 一台X86主机 xff08 CPU 13600kf 内存 32G xff09 X86主机环境 xff1a ubuntu
  • 平衡小车之家高配版全向轮小车部分源码分析(蓝牙控制端和运动控制端)

    提前说说 intel杯初选赛过了 xff0c 接下来就是区域决赛 准备时间有两个月 xff0c 时间还是比较紧张 xff0c 必须在这两个月内把所有的知识都消化掉 接下来的打算是想面试几家公司 xff0c 试试自己的水准 xff0c 打好比
  • 当我们在谈SWIFT时,到底在谈什么?

    胜利往往伴随着放弃不切实际的幻想 当地时间2月26日 xff0c 美国 英国 欧盟与加拿大发表共同声明 xff0c 宣布将俄罗斯主要银行从SWIFT体系中剔除 SWIFT凭借着其强大的制裁效果 xff0c 在民间一直有着金融核武器之称 xf
  • 使用Aruco二维码实现定位

    首先使用cv aruco estimatePoseSingleMarkers 函数后得到两个很重要的数据revc和tevc xff0c 分别是旋转向量和平移向量 通过这两个数据就可以得到相机在世界坐标系下的坐标 此处需要了解solvePnP
  • QGC关于SetMode运行流程解析

    QGC与飞控连接后初始化 xff0c 初始飞行模式为手动模式 模式切换在Vehicle中使用 base mode和 custom mode存储模式 xff0c 初始值均为0 当QGC与飞控连接后 xff0c 飞控通过心跳包 xff08 he
  • QGC UDP 建立通讯连接

    QGC关于通信连接建立部分的程序比较复杂 xff0c 但感觉写的很厉害 xff0c 通过读代码把自己的一点理解记录下来 收集接收 空地通信管理 空地通信的管理在 应用程序设置 gt 通讯连接 中进行通信连接创建 xff0c 连接和断开 通讯