保姆级教程:在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 -y1.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 qgroundcontrol2.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 qtcreator3.2 配置Qt版本
确保系统使用的是Qt 5.15版本:
qmake --version如果显示的不是5.15版本,需要手动指定:
export QT_SELECT=qt54. 编译QGC
4.1 创建构建目录
保持源代码干净,在外部创建构建目录:
mkdir build && cd build4.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/QGroundControl5.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开发:
- 打开Qt Creator
- 选择"文件"→"打开文件或项目"
- 导航到qgroundcontrol目录,选择CMakeLists.txt
- 配置Kit为Desktop Qt 5.15.x GCC 64-bit
6.2 调试技巧
GDB调试:
gdb --args ./staging/QGroundControl日志输出:
./staging/QGroundControl --logging:full6.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 && ninja7.3 添加新功能
典型开发流程:
- 在
src下创建新目录 - 添加C++类继承
QGCTool - 注册到
QGCToolbox - 创建对应的QML界面
- 在
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/bash9.2 单元测试
运行测试套件:
cd build ctest --output-on-failure9.3 代码格式化
QGC使用clang-format,格式化代码:
find . -name '*.cpp' -o -name '*.h' | xargs clang-format -i10. 资源与社区
10.1 官方资源
- QGC开发者文档
- MAVLink协议文档
- Qt官方文档
10.2 学习资料
推荐书籍:
- 《Qt5编程入门》
- 《QML高级编程》
- 《无人机系统设计与开发》
10.3 社区支持
活跃社区:
- QGC官方论坛
- Stack Overflow
- GitHub Issues
在实际开发中,我发现最耗时的往往是环境配置阶段。一旦环境正确搭建,后续的开发调试会顺畅很多。建议初次搭建时仔细检查每个步骤,遇到问题优先查阅官方文档和社区讨论。
