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的缩写,说白了就是一套专门给无人机用的通信语言。

通信链路的结构大概是这样的:

地面站与飞控通信链路结构 地面站 (QGC) MAVLink 消息生成/解析 上行指令 下行遥测 传输层 串口 / UDP / TCP 数传电台 / WiFi 飞控 (PX4/AP) MAVLink 消息处理 任务执行引擎 关键说明 • 上行链路:地面站 → 飞控,传输航点任务、模式切换、参数设置 • 下行链路:飞控 → 地面站,传输姿态、位置、电池、传感器数据 • 传输层通常使用MAVLink v2协议,支持消息签名和重传机制 • 实际项目中,数传电台的波特率、丢包率会直接影响任务上传成功率

这张图我画得比较直观。地面站和飞控之间,通过传输层(串口、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和飞控之间有一套确认机制:

  1. QGC发送一个航点任务项
  2. 飞控收到后回复ACK
  3. 如果QGC没收到ACK,会重发
  4. 重发超过3次,QGC会报错

嗯,这里要注意,重传机制虽然能提高可靠性,但也会增加延迟。如果链路质量很差,任务上传可能会超时。我建议在实际飞行前,先在地面测试一下链路质量,看看RSSI(信号强度)和丢包率。

重要提醒:千万不要在链路质量差的时候上传航点任务。我曾经有一次在信号不好的地方上传任务,结果飞控只收到了部分航点,起飞后直接飞偏了。幸好有急停开关,不然就炸机了。

1.6 本章小结

这一章我们聊了三个核心概念:

  • QGC:一个跨平台的开源地面站,负责监控、规划、调参
  • 航点任务:给飞机设定一串坐标和动作,让它按计划飞行
  • 通信链路:地面站和飞控之间通过MAVLink协议交换数据,链路可靠性直接影响任务执行