news 2026/4/22 11:25:04

保姆级教程:在Ubuntu 22.04上从源码编译QGC地面站(Qt 5.15 + QML)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 22.04上从源码编译QGC地面站(Qt 5.15 + QML)

保姆级教程:在Ubuntu 22.04上从源码编译QGC地面站(Qt 5.15 + QML)

如果你正在为无人机开发寻找一个强大的地面站解决方案,QGroundControl(QGC)无疑是首选。作为基于Qt的开源项目,它提供了丰富的功能和灵活的二次开发能力。本文将带你从零开始,在Ubuntu 22.04系统上完整编译QGC,涵盖从环境准备到最终运行的每个细节。

1. 系统环境准备

在开始之前,确保你的Ubuntu 22.04系统已经更新到最新状态:

sudo apt update && sudo apt upgrade -y

1.1 安装基础编译工具

QGC编译需要一系列基础开发工具,执行以下命令安装:

sudo apt install -y build-essential cmake git ninja-build \ g++ gcc make pkg-config python3-pip

关键组件说明

  • build-essential:包含GCC、G++等基础编译工具
  • cmake:QGC使用CMake作为构建系统
  • ninja-build:比make更快的构建工具

1.2 安装Qt 5.15依赖

QGC需要Qt 5.15特定版本的支持,安装必要的Qt依赖:

sudo apt install -y qt5-default qtbase5-dev qtdeclarative5-dev \ qtmultimedia5-dev libqt5svg5-dev libqt5serialport5-dev \ qml-module-qtquick2 qml-module-qtquick-controls2 \ qml-module-qtquick-layouts qml-module-qtquick-window2

提示:Ubuntu 22.04默认仓库可能不包含Qt 5.15,如果遇到版本问题,建议通过Qt官方安装器安装指定版本。

2. 获取QGC源代码

2.1 克隆主仓库

建议使用QGC的稳定分支进行开发:

git clone https://github.com/mavlink/qgroundcontrol.git --branch Stable_V4.2 cd qgroundcontrol

2.2 初始化子模块

QGC依赖多个子模块,必须正确初始化:

git submodule init git submodule update

常见问题排查

  • 如果子模块更新失败,尝试:
    git submodule update --init --recursive
  • 网络问题可尝试更换git协议为https

3. Qt环境配置

3.1 安装Qt Creator(可选)

虽然可以直接使用命令行构建,但Qt Creator提供了更好的开发体验:

sudo apt install -y qtcreator

3.2 配置Qt版本

确保系统使用的是Qt 5.15版本:

qmake --version

如果显示的不是5.15版本,需要手动指定:

export QT_SELECT=qt5

4. 编译QGC

4.1 创建构建目录

保持源代码干净,在外部创建构建目录:

mkdir build && cd build

4.2 配置CMake

使用以下CMake命令进行配置:

cmake ../qgroundcontrol \ -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DQT_QMAKE_EXECUTABLE=/usr/bin/qmake

关键参数说明

  • -GNinja:使用Ninja代替Make
  • -DCMAKE_BUILD_TYPE=Release:构建发布版本
  • 如需调试版本,改为Debug

4.3 开始编译

配置成功后,开始编译:

ninja

编译过程视机器性能可能需要10-30分钟。如果遇到内存不足,可以尝试:

ninja -j4 # 限制并行编译任务数

5. 运行与测试

5.1 启动QGC

编译完成后,运行以下命令启动:

./staging/QGroundControl

5.2 常见问题解决

问题1:缺少libOpenGL.so.0

sudo apt install -y libopengl0

问题2:Wayland相关错误

export QT_QPA_PLATFORM=xcb

问题3:QML模块未找到

sudo apt install -y qml-module-qtquick-*

6. 开发环境优化

6.1 配置Qt Creator

如果使用Qt Creator开发:

  1. 打开Qt Creator
  2. 选择"文件"→"打开文件或项目"
  3. 导航到qgroundcontrol目录,选择CMakeLists.txt
  4. 配置Kit为Desktop Qt 5.15.x GCC 64-bit

6.2 调试技巧

GDB调试

gdb --args ./staging/QGroundControl

日志输出

./staging/QGroundControl --logging:full

6.3 代码导航建议

QGC代码主要结构:

  • src/Vehicle:载具相关核心逻辑
  • src/Comm:通信链路实现
  • src/QmlControls:QML界面组件
  • src/FlightDisplay:飞行数据显示

7. 二次开发准备

7.1 项目结构理解

QGC采用插件式架构,主要模块:

模块功能描述
AutoPilotPlugin自动驾驶仪交互
Camera相机控制
FlightMap地图显示
Mission任务规划
Settings配置管理

7.2 自定义UI开发

QML文件位于src/QmlControls目录。修改后无需重新编译,只需:

make qmake_all && ninja

7.3 添加新功能

典型开发流程:

  1. src下创建新目录
  2. 添加C++类继承QGCTool
  3. 注册到QGCToolbox
  4. 创建对应的QML界面
  5. MainRootWindow.qml中集成

8. 高级配置

8.1 交叉编译设置

如需为其他平台编译,修改CMake参数:

cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/arm-linux-gnueabihf.cmake ..

8.2 自定义构建选项

常用CMake选项:

选项描述默认值
BUILD_SHARED_LIBS构建共享库OFF
ENABLE_TESTS启用单元测试OFF
QGC_ENABLE_TAISYNC启用TAISync支持OFF

8.3 性能优化

编译优化选项:

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_CXX_FLAGS="-O3 -march=native" ..

9. 持续集成建议

9.1 Docker构建

官方提供了Docker构建环境:

docker run -v $(pwd):/project -it qgcubuntu20 /bin/bash

9.2 单元测试

运行测试套件:

cd build ctest --output-on-failure

9.3 代码格式化

QGC使用clang-format,格式化代码:

find . -name '*.cpp' -o -name '*.h' | xargs clang-format -i

10. 资源与社区

10.1 官方资源

  • QGC开发者文档
  • MAVLink协议文档
  • Qt官方文档

10.2 学习资料

推荐书籍:

  • 《Qt5编程入门》
  • 《QML高级编程》
  • 《无人机系统设计与开发》

10.3 社区支持

活跃社区:

  • QGC官方论坛
  • Stack Overflow
  • GitHub Issues

在实际开发中,我发现最耗时的往往是环境配置阶段。一旦环境正确搭建,后续的开发调试会顺畅很多。建议初次搭建时仔细检查每个步骤,遇到问题优先查阅官方文档和社区讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 11:24:32

毕业季 AI 论文工具实测:9 款工具从选题到定稿全链路通关

毕业季的论文压力,是每个大学生都绕不开的关卡。从选题迷茫到文献难找,从格式崩溃到重复率超标,每一步都在消耗时间与精力。2026 年 AI 论文工具已全面成熟,本文实测 9 款主流工具,以 Paperxie 为核心,搭配…

作者头像 李华
网站建设 2026/4/22 11:23:44

OpenClaw vs 传统AI助手:程序员为什么要“养一只龙虾”?

在AI赋能开发的浪潮里,几乎每个程序员都用过传统AI编程助手:无论是代码补全、语法纠错,还是简单的逻辑生成,Copilot、Codeium这类工具早已成为IDE里的标配。但用过的人都清楚,它们始终停留在辅助补全的层面&#xff0c…

作者头像 李华
网站建设 2026/4/22 11:22:26

STM32G431RBTx串口通信避坑指南:CubeMX配置PA9/PA10别踩这个坑

STM32G431RBTx串口通信配置陷阱:为什么引脚顺序决定成败 在蓝桥杯嵌入式竞赛和实际项目开发中,UART通信是最基础却最容易出问题的环节之一。许多开发者按照常规步骤配置CubeMX后,发现串口死活无法正常工作——发送的数据全是乱码&#xff0c…

作者头像 李华