1、QGC入门:QGC项目简介、QGC发展历史、QGC核心功能概览、QGC源码获取与编译

大家好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊QGC——这个在无人机地面站领域绕不开的开源项目。

说实话,我第一次接触QGC是在2016年,当时被它的界面和功能吓了一跳。一个开源项目,能做到这种程度,确实不多见。后来我深度参与了几个基于QGC的二次开发项目,踩了不少坑,也积累了一些经验。今天就把这些干货分享给大家。

1.1 QGC项目简介

QGC,全称QGroundControl,是一个开源的、跨平台的地面站控制软件。它支持Windows、macOS、Linux、iOS和Android。说白了,它就是无人机的大脑在地面上的延伸。

我个人习惯把QGC看作一个“万能遥控器”。它不仅能控制无人机飞行,还能规划航线、分析日志、配置参数。你想想看,一个软件搞定这么多事,背后得有多复杂的架构。

核心定位:QGC是PX4和ArduPilot两大开源飞控生态的官方推荐地面站。它不是一个玩具,而是专业级工具。

QGC的架构设计非常清晰。它基于Qt框架开发,使用C++和QML混合编程。这种组合的好处是:底层性能用C++保证,上层界面用QML快速迭代。

1.2 QGC发展历史

QGC的历史,其实就是无人机开源生态发展的一个缩影。我把它分成了几个关键阶段,大家看这张表就明白了。

阶段 时间 关键事件 我的评价
萌芽期 2012-2014 最初由Lorenz Meier创建,作为PX4的配套地面站 功能简陋,但方向对了
成长期 2015-2017 引入Qt/QML架构,支持ArduPilot,界面大改版 这个阶段我刚开始用,界面变化很大
成熟期 2018-2020 支持MAVLink 2.0,加入3D地图、参数管理、日志分析 功能基本定型,开始稳定
生态期 2021-至今 插件化架构,支持自定义UI,企业级定制需求增多 现在正是二次开发的好时机

我记得在2018年,QGC的代码量还不到50万行。现在?已经超过100万行了。这个增长速度,说明社区非常活跃。

1.3 QGC核心功能概览

QGC的功能很多,但核心的就那么几个。我给大家梳理一下,这样你们后续学习时心里有数。

  • 飞行控制:手动控制、自动起飞、降落、返航、悬停。这是最基本的功能。
  • 航线规划:在地图上点击生成航点,支持多种测绘模式。我在做农业植保项目时,这个功能帮了大忙。
  • 参数管理:读取、修改、保存飞控参数。嗯,这里要注意,改参数前一定要备份。
  • 实时监控:显示飞行姿态、位置、电池、GPS等数据。说白了,就是飞机的仪表盘。
  • 日志分析:下载并分析飞行日志,排查故障。我曾经靠这个功能,帮客户找出了飞控的硬件问题。
  • 地图支持:内置谷歌地图、必应地图、OpenStreetMap等。支持离线地图。
  • 多语言支持:包括中文。这个对国内开发者很友好。

小提示:QGC的“参数管理”模块是二次开发的高频切入点。很多定制需求,比如修改默认参数、增加参数校验逻辑,都在这里做。

这些功能背后,都依赖一个核心协议——MAVLink。QGC通过MAVLink与飞控通信。所以,理解MAVLink是二次开发的基础。

1.4 QGC源码获取与编译

这部分是实操环节。我建议大家跟着我的步骤来,别跳步。我曾经因为跳过一步,浪费了半天时间。

1.4.1 获取源码

QGC的源码托管在GitHub上。地址是:https://github.com/mavlink/qgroundcontrol

我个人习惯用git clone命令,而不是直接下载ZIP包。因为后续更新方便。

git clone https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol
git checkout Stable_V4.2  # 建议使用稳定版

避坑指南:我曾经直接拉取master分支,结果编译时遇到一堆依赖问题。后来发现,master分支是开发版,不稳定。建议大家用Stable_V4.2或更新的稳定版标签。

1.4.2 编译环境搭建

QGC的编译环境,说白了就是Qt环境。我推荐使用Qt 5.15.2版本,这是目前最稳定的。

操作系统 推荐Qt版本 额外依赖 注意事项
Windows Qt 5.15.2 MSVC 2019, Git 路径不要有中文
macOS Qt 5.15.2 Xcode 12+ 需要安装Command Line Tools
Ubuntu 20.04 Qt 5.15.2 gcc 9+, CMake 3.16+ 建议用apt安装依赖

安装Qt时,记得勾选以下组件:

  • Qt 5.15.2 下的 MSVC 2019 64-bit(Windows)或 clang_64(macOS)或 gcc_64(Linux)
  • Qt Charts
  • Qt Location(地图支持)
  • Qt WebEngine(内置浏览器)
  • Qt Quick 和 Qt Quick Controls 2

1.4.3 编译步骤

编译QGC其实不复杂。我用的是命令行方式,大家也可以直接用Qt Creator打开CMakeLists.txt。

mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64  # Windows示例
cmake --build . --config Release

如果是Linux或macOS,把-G参数换成对应的生成器就行。

小技巧:第一次编译会下载很多依赖,包括MAVLink库、地图瓦片等。建议用稳定的网络环境。我一般在晚上编译,第二天早上就好了。

1.4.4 常见编译问题

编译过程中,你可能会遇到一些问题。我整理了几个常见的:

  • 找不到Qt模块:检查Qt安装路径是否在系统环境变量中。
  • MAVLink生成失败:需要安装Python 3,并安装future库。
  • 地图瓦片下载超时:可以配置代理,或者手动下载地图缓存。
  • 编译内存不足:QGC编译时比较吃内存,建议至少8GB RAM。

嗯,这里要特别说一下。如果你在Windows上编译,建议关闭杀毒软件。我曾经被Windows Defender拦截了编译生成的临时文件,导致编译失败。

1.5 QGC整体架构图

为了让大家对QGC有个整体认识,我画了一张架构图。这张图涵盖了QGC的主要模块和它们之间的关系。

QGC整体架构图 QGC整体架构图 用户界面层 (QML) 飞行控制界面 | 航线规划界面 | 参数管理界面 | 日志分析界面 | 地图显示界面 设置界面 | 多语言支持 | 主题切换 | 自定义插件 业务逻辑层 (C++) 飞行控制逻辑 | 航线规划引擎 | 参数管理服务 | 日志解析引擎 通信管理 | 数据缓存 | 状态机 | 任务调度 | 插件管理 通信层 (MAVLink协议) 串口通信 | UDP通信 | TCP通信 | 蓝牙通信 MAVLink消息编解码 | 心跳检测 | 消息路由 | 重连机制 硬件/飞控层 PX4飞控 | ArduPilot飞控 | 其他MAVLink兼容设备 四层架构

这张图很直观。从上到下分别是:用户界面层、业务逻辑层、通信层、硬件/飞控层。每一层都只依赖下一层,这种分层设计让二次开发变得非常清晰。

举个例子,如果你想定制一个全新的飞行控制界面,你只需要修改用户界面层的QML文件,业务逻辑层和通信层基本不用动。这就是分层架构的好处。

1.6 本章小结

好了,第一章的内容就到这里。我们聊了QGC是什么、怎么来的、能干什么、以及怎么拿到源码并编译。这些都是后续学习的基础。

我个人觉得,QGC最吸引人的地方,不是它功能多强大,而是它的架构设计非常优雅。你想想看,一个百万行级别的开源项目,能保持这么清晰的层次,确实不容易。