第一章:课程导论与开发环境搭建
各位好,我是老周。在无人机行业摸爬滚打了七八年,踩过的坑比飞过的航线还多。今天咱们开始聊《自定义航线规划插件开发实战》的第一章——先把地基打牢。
你可能会问:为什么非得自己写插件?QGC自带的航线规划不够用吗?嗯,说实话,够用,但仅限于常规任务。我当年做电力巡检项目时,客户要求无人机沿着高压线以特定角度飞行,QGC默认的航点工具根本做不到。那时候我才意识到——插件开发不是炫技,是刚需。
1.1 无人机航线规划概述
航线规划,说白了就是告诉无人机「从哪里起飞、经过哪些点、做什么动作、最后降落在哪」。听起来简单,但实际要考虑的东西不少:
- 地理围栏:防止无人机飞出合法区域
- 避障逻辑:遇到障碍物怎么绕
- 动作指令:拍照、悬停、改变云台角度
- 航点类型:普通航点、兴趣点、速度控制点
我见过不少新手,拿着QGC默认的航点工具就出去飞,结果遇到复杂地形直接懵了。其实,插件开发就是给你一把「万能钥匙」,让你能按自己的需求定制航线逻辑。
1.2 插件开发的价值
为什么我建议你学插件开发?三个字:不可替代性。
| 对比项 | 默认QGC | 自定义插件 |
|---|---|---|
| 航点类型 | 固定几种 | 任意定义 |
| 航线逻辑 | 线性飞行 | 条件分支、动态调整 |
| 数据交互 | 仅限QGC内部 | 可对接外部API |
| 复用性 | 低 | 高(打包成插件分享) |
举个例子。我之前做的一个农业项目,需要无人机根据农田的NDVI指数动态调整喷洒量。默认QGC做不到,但我写了个插件,实时读取传感器数据,自动生成变喷洒量的航线。客户看了直呼「这功能你们怎么不早拿出来?」——这就是插件的价值。
1.3 QGroundControl简介
QGC,全称QGroundControl,是PX4和ArduPilot生态里最常用的地面站软件。它用Qt写的,跨平台,开源,社区活跃。说白了,它就是无人机的地面大脑。
QGC的架构大致分三层:
- UI层:Qt Quick写的,负责界面展示
- 业务逻辑层:C++写的,处理航线计算、通信协议
- 通信层:MAVLink协议,跟飞控对话
插件开发主要跟UI层和业务逻辑层打交道。你写一个插件,本质上就是往QGC里塞一个自定义的「功能模块」,让它能处理你想要的航线逻辑。
1.4 开发环境搭建
好,到了动手环节。环境搭建这块,我踩过的坑最多,所以会讲得细一些。
1.4.1 工具清单
| 工具 | 版本建议 | 备注 |
|---|---|---|
| Qt | 5.15.x 或 6.x | 推荐5.15,兼容性最好 |
| 编译器 | GCC / MSVC | Linux用GCC,Windows用MSVC |
| CMake | 3.16+ | 别用太旧的版本 |
| Git | 最新稳定版 | 用来拉QGC源码 |
1.4.2 安装步骤(以Ubuntu 20.04为例)
- 安装Qt:从Qt官网下载安装包,或者用apt直接装。我个人习惯用apt,省事。
- 安装CMake:
sudo apt install cmake,然后检查版本。 - 拉取QGC源码:
git clone https://github.com/mavlink/qgroundcontrol.git - 编译QGC:进入目录,执行
mkdir build && cd build && cmake .. && make -j4
libgstreamer,装一下就好:sudo apt install libgstreamer1.0-dev。另外,记得用Qt的64位版本,32位在编译QGC时会出奇怪的问题。
1.4.3 验证环境
编译成功后,运行./qgroundcontrol,如果能正常启动,说明环境搭好了。这时候你可以试试加载一个示例插件(QGC自带几个),看看能不能跑起来。
# 启动QGC
./qgroundcontrol --plugin-dir ./plugins
如果看到插件菜单里出现了示例插件,恭喜你——环境搭建成功。接下来就可以正式开始写插件了。
本章知识体系
下面这张图帮你理清本章的核心脉络: