当前位置: 首页 > news >正文

QGroundControl的总体架构,模块化设计和主要组件的功能。

QGroundControl 总体架构详细描述

QGroundControl (QGC) 作为一个开源地面控制站软件,其设计原则是模块化、高扩展性和高可维护性。

总体架构

QGroundControl 由多个层次构成,每个层次负责不同的功能。这种分层结构确保了系统的高内聚性和低耦合性。

  1. 用户界面 (UI) 层

    • 使用 Qt QuickQML 技术构建。
    • 提供动态和响应迅速的用户界面。
    • 包括主窗口、工具栏、菜单、状态栏和各类功能窗口(如地图、视频流、任务规划等)。
  2. 业务逻辑层

    • 处理与飞行控制相关的逻辑。
    • 包括任务管理、飞行模式切换、参数设置等功能。
  3. 通信层

    • 负责与无人机和其他外围设备的通信。
    • 实现 MAVLink 协议,用于数据传输和控制命令的发送。
  4. 数据存储层

    • 管理飞行日志、用户配置、地图缓存等数据的存储。
    • 提供数据持久化功能,以便于后续的分析和使用。

模块化设计

QGroundControl 的模块化设计分为多个功能模块,每个模块负责特定的功能。主要模块包括:

  1. 核心模块

    • Application Core:负责应用程序的初始化和主事件循环。
    • Logging:提供系统日志记录功能。
    • Settings:管理应用程序设置和用户配置。
  2. 飞行控制模块

    • Vehicle Manager:管理连接的无人机,包括状态监控和命令发送。
    • Mission Manager:处理飞行任务的创建、编辑、上传和执行。
    • Parameter Manager:管理无人机参数的读取和设置。
  3. 地图与导航模块

    • Map Widget:显示地图,并支持路径规划和地理围栏功能。
    • Geofence Manager:管理地理围栏的设置和监控。
  4. 视频流模块

    • Video Receiver:接收和处理来自无人机的视频流。
    • Video Display:在 UI 中显示实时视频。
  5. 日志和回放模块

    • Log Recorder:记录飞行数据和事件。
    • Log Player:提供飞行数据的回放和分析功能。

主要组件及其功能

  1. MainWindow

    • 主窗口,包含了所有主要的 UI 组件。
    • 提供与用户交互的主要界面,包括工具栏、菜单和状态栏。
  2. MAVLink

    • 实现 MAVLink 通信协议,用于与无人机进行数据传输。
    • 负责消息的编码和解码,以及消息的发送和接收。
  3. Vehicle

    • 表示一个无人机对象,包含无人机的状态信息和控制接口。
    • 处理无人机的连接、状态更新和命令执行。
  4. Mission Manager

    • 管理飞行任务,包括任务的创建、编辑、上传和执行。
    • 提供任务规划的图形界面,支持多种任务类型。
  5. Parameter Manager

    • 读取和设置无人机的参数。
    • 提供参数的分类显示和搜索功能,便于用户管理。
  6. Map Widget

    • 显示地图,支持多种地图源(如 Google Maps、Bing Maps)。
    • 提供路径规划、地理围栏和实时位置显示等功能。
  7. Video Receiver

    • 处理来自无人机的视频流,支持多种视频格式和协议。
    • 提供视频的解码和显示功能,支持低延迟的实时视频监控。

通信与数据处理

QGroundControl 主要通过 MAVLink 协议与无人机通信。通信层负责处理所有 MAVLink 消息,并将这些消息传递给相应的业务逻辑层进行处理。以下是通信与数据处理的流程:

  1. 消息接收

    • 从无人机接收到的 MAVLink 消息通过串口、UDP 或 TCP 传输。
    • 消息被解码并传递给相应的模块(如 Vehicle、Mission Manager)。
  2. 消息处理

    • 不同类型的消息由不同的模块处理。例如,心跳消息用于更新无人机的连接状态,飞行状态消息用于更新无人机的当前位置和姿态。
  3. 命令发送

    • 用户在 UI 上进行操作(如改变飞行模式、设置任务),相应的命令通过 MAVLink 发送给无人机。
    • 这些命令由飞行控制模块生成,并通过通信层传输。

扩展性

QGroundControl 的模块化设计使其具备良好的扩展性。开发者可以根据需求添加新的模块或扩展现有模块。例如:

  • 添加新的传感器支持。
  • 集成新的飞行控制系统(如新的无人机平台)。
  • 开发自定义的 UI 界面以满足特定需求。

相关文章:

QGroundControl的总体架构,模块化设计和主要组件的功能。

QGroundControl 总体架构详细描述 QGroundControl (QGC) 作为一个开源地面控制站软件,其设计原则是模块化、高扩展性和高可维护性。 总体架构 QGroundControl 由多个层次构成,每个层次负责不同的功能。这种分层结构确保了系统的高内聚性和低耦合性。 …...

oracle 表空间文件迁移

表空间文件迁移 背景 由于各种原因,在实际工作中可能会出现oracle服务器数据盘空间被占满的情况,这个时候单纯的添加新磁盘,后续表空间文件放新盘的方案已经不适用了,因为源盘已经占用满了,数据库服务会异常&#xf…...

JVM学习(day1)

JVM 运行时数据区 线程共享:方法区、堆 线程独享(与个体“同生共死”):虚拟机栈、本地方法栈、程序计数器 程序计数器 作用:记录下次要执行的代码行的行号 特点:为一个没有OOM(内存溢出&a…...

js项目生产环境中移除 console

1、terser-webpack-plugin webpack 构建的项目中安装使用 安装: npm install terser-webpack-plugin --save-dev 配置 在webpack.config.js文件中 new TerserPlugin({terserOptions: {output: {comments: false, // 去除注释},warnings: false, // 去除黄色警告,co…...

ROS2 + 科大讯飞 初步实现机器人语音控制

环境配置: 电脑端: ubuntu22.04实体机作为上位机 ROS版本:ros2-humble 实体机器人: STM32 思岚A1激光雷达 科大讯飞语音SDK 讯飞开放平台-以语音交互为核心的人工智能开放平台 实现步骤: 1. 下载和处理科大讯飞语音模…...

HTML5新增的input元素属性:placeholder、required、autofocus、min、max等

HTML5 大幅度地增加与改良了 input 元素的属性,可以简单地使用这些属性来实现 HTML5 之前需要使用 JavaScript 才能实现的许多功能。 下面将详细介绍这些新增的 input 元素的属性。 属性说明属性说明placeholder在输入框显示描述性或提示性文本autocomplete是否保…...

Cornerstone3D导致浏览器崩溃的踩坑记录

WebGL: CONTEXT_LOST_WEBGL: loseContext: context lost ⛳️ 问题描述 在使用vue3vite重构Cornerstone相关项目后,在Mac本地运行良好,但是部署测试环境后,在window系统的Chrome浏览器中切换页面会导致页面崩溃。查看Chrome的任务管理器&am…...

【鸿蒙学习笔记】Stage模型

官方文档:Stage模型开发概述 目录标题 Stage模型好处Stage模型概念图ContextAbilityStageUIAbility组件和ExtensionAbility组件WindowStage Stage模型-组件模型Stage模型-进程模型Stage模型-ArkTS线程模型和任务模型关于任务模型,我们先来了解一下什么是…...

Docker进入MongoDB

先是命令行开启docker镜像,然后进入docker镜像,这是两步 进入之后,开头会变成root,我的理解是进入了另一个linux系统了,直接执行相应的软件 这里直接use databse就是进入了,据说MongoDB是慢启动&#xff0c…...

APP与API:魔法世界的咒语与念咒者

1. 什么是API? API,即应用程序编程接口(Application Programming Interface),就像是魔法世界中的咒语。API是两个独立软件系统之间进行通信和数据交换的桥梁。通过API,一个软件系统可以调用另一个软件系统中…...

云计算安全需求分析与安全保护工程

云计算基本概念 云计算(Cloud Computing)是一种通过互联网提供计算资源和服务的技术。它允许用户按需访问和使用计算资源,如服务器、存储、数据库、网络、安全、分析和软件应用等,而无需管理底层基础设施。以下是云计算的基本概念…...

七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境

前言 SQLite的一个重要的特性是零配置的、无需服务器,这意味着不需要复杂的安装或管理。它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同的是,它不需要安装任何软件,非常轻巧。 七天.NET 8操作SQLite入门到实战…...

操作系统——进程的状态与转换

...

80. UE5 RPG 实现UI显示技能冷却进度功能

在上一篇文章里,我们实现了通过GE给技能增加资源消耗和技能冷却功能。UI也能够显示角色能够使用的技能的UI,现在还有一个问题,我们希望在技能释放进去冷却时,技能变成灰色,并在技能冷却完成,技能可以再次使…...

Vue2-集成路由Vue Router介绍与使用

文章目录 路由(Vue2)1. SPA 与前端路由2. vue-router基本使用创建路由组件声明路由链接和占位标签创建路由模块挂载路由模块 3. vue-router进阶路由重定向嵌套路由动态路由编程式导航导航守卫 本篇小结 更多相关内容可查看 路由(Vue2&#xf…...

TemuAPI接口:获取商品详情功能

temu作为拼多多海外的跨境电商平台,已经在海外电商领域崭露头角,越来越多的外贸人选择temu作为发展平台。今天的接口可以用于获取temu平台的商品详情,包括价格、商品图片、规格、评论等内容,如有需要,请点击文末链接或…...

deepstream读取mp4文件及不同类型视频输入bug解决

在deepstream中使用mp4文件,与rtsp类似,使用uridecodebin即可,(可见官方test.py文件) def create_source_bin(index, uri):print("Creating source bin")# Create a source GstBin to abstract this bins c…...

Redis服务器统计和配置信息简介

Redis服务器统计和配置信息简介 首先使用INFO命令在Redis中用于获取Redis服务器的各种统计和配置信息;执行上述命令后,返回的信息分为多个部分,包括服务器信息、客户端信息、内存信息、持久化信息、统计信息、复制信息、CPU信息和键空间信息;…...

Linux Mac 安装Higress 平替 Spring Cloud Gateway

Linux Mac 安装Higress 平替 Spring Cloud Gateway Higress是什么?传统网关分类Higress定位下载安装包执行安装命令执行脚本 安装成功打开管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官网 Higress是什么? Higress是基于阿里内部的…...

基于重叠群稀疏的总变分信号降噪及在旋转机械故障诊断中的应用(MATLAB)

基于振动分析的故障诊断方法基本流程主要由以下五个步骤组成,分别是信号采集、信号处理、特征提取、状态识别与诊断结果。这五个步骤中信号采集与特征提取是故障诊断中最为重要的步骤,而故障微弱特征信息又是其中最难解决的问题。“故障微弱特征信息”站…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found"​, "n…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...