1. QGC与航点任务概述
大家好,我是你们这门课的老朋友。做了这么多年无人机地面站开发,QGC(QGroundControl)可以说是我最熟悉的工具之一。今天咱们先聊聊QGC到底是什么,航点任务又是怎么一回事,以及地面站和飞控之间那条看不见的“电话线”是怎么工作的。
1.1 QGC是什么?
QGC,全称QGroundControl,是一个开源的地面站软件。说白了,它就是你在电脑或平板上用来控制无人机的那块屏幕。我最早接触QGC是在2015年,那时候它还比较简陋,但现在已经成了PX4和ArduPilot生态里最主流的GCS(地面控制系统)之一。
它的核心功能其实就三件事:
- 实时监控:看飞机的姿态、位置、电池电压、GPS信号强度
- 任务规划:在地图上点几个点,飞机就能按你画的路线飞
- 参数调参:调整PID、罗盘校准、传感器设置
嗯,这里要注意,QGC不是唯一的地面站。Mission Planner、UgCS这些也各有千秋。但QGC最大的优势是跨平台——Windows、macOS、iOS、Android都能跑,而且代码是纯C++写的,性能不错。
我个人习惯:做二次开发时,我一般用QGC的Daily Build版本,因为新功能迭代快。但如果是给客户交付,我会用稳定版,避免踩坑。
1.2 航点任务的概念
航点任务,英文叫Waypoint Mission。你想想看,就是给飞机设定一串坐标点,让它按顺序飞过去。听起来简单,但实际工程里门道很多。
一个典型的航点任务包含:
- 航点坐标:经纬度、高度
- 动作指令:到了这个点要干嘛?悬停?拍照?降落?
- 速度与朝向:飞多快?机头朝哪?
- 容差参数:偏离航线多少米算到达?
我记得有一次做测绘项目,客户要求飞机在50米高度飞“之”字形航线。我在地图上画了30多个点,结果第一次试飞时飞机在转弯处一直晃。后来才发现是转弯半径参数没调好。你看,航点任务不只是“画点”那么简单。
1.3 地面站与飞控的通信链路
地面站和飞控之间怎么说话?靠的是MAVLink协议。MAVLink是Micro Air Vehicle Link的缩写,说白了就是一套专门给无人机用的通信语言。
通信链路的结构大概是这样的:
这张图我画得比较直观。地面站和飞控之间,通过传输层(串口、UDP、TCP)交换MAVLink消息。上行链路传指令,下行链路传数据。
1.4 MAVLink协议简介
MAVLink协议是整条链路的“语言”。它定义了一套标准消息格式,比如:
| 消息ID | 消息名称 | 用途 |
|---|---|---|
| 0 | HEARTBEAT | 心跳包,检测连接是否存活 |
| 43 | MISSION_ITEM | 单个航点任务项 |
| 44 | MISSION_REQUEST | 请求某个航点数据 |
| 76 | COMMAND_LONG | 发送长指令(如起飞、降落) |
我曾经踩过一个坑:在QGC里上传100个航点,结果飞控只收到了80个。排查了半天,发现是数传电台的缓冲区太小,消息被截断了。后来我加了个消息重传机制,问题才解决。
避坑指南:做航点任务上传时,建议每次上传不超过50个航点。如果任务点很多,可以分批上传,每批之间加个200ms的延迟。这是我用血泪换来的经验。
1.5 通信链路的可靠性
通信链路不是100%可靠的。你想想看,无人机在天上飞,数传信号受距离、遮挡、电磁干扰影响,丢包是常态。QGC和飞控之间有一套确认机制:
- QGC发送一个航点任务项
- 飞控收到后回复ACK
- 如果QGC没收到ACK,会重发
- 重发超过3次,QGC会报错
嗯,这里要注意,重传机制虽然能提高可靠性,但也会增加延迟。如果链路质量很差,任务上传可能会超时。我建议在实际飞行前,先在地面测试一下链路质量,看看RSSI(信号强度)和丢包率。
重要提醒:千万不要在链路质量差的时候上传航点任务。我曾经有一次在信号不好的地方上传任务,结果飞控只收到了部分航点,起飞后直接飞偏了。幸好有急停开关,不然就炸机了。
1.6 本章小结
这一章我们聊了三个核心概念:
- QGC:一个跨平台的开源地面站,负责监控、规划、调参
- 航点任务:给飞机设定一串坐标和动作,让它按计划飞行
- 通信链路:地面站和飞控之间通过MAVLink协议交换数据,链路可靠性直接影响任务执行