1、航点规划基础:什么是航点规划?ArduPilot航点系统架构解析、Mission Planner与QGroundControl对比

1.1 什么是航点规划?

航点规划,说白了就是告诉无人机「你要去哪儿、怎么去、到了干什么」。你在地图上点几个点,设置好高度、速度、动作,飞控就会按这个路线自动执行。

我刚开始接触无人机时,觉得航点规划不就是画条线嘛。直到有一次,我在山区做测绘任务,飞机撞上了山脊——后来才发现,我根本没检查地形高程变化。嗯,从那以后我再也不敢轻视航点规划了。

一个完整的航点,通常包含这些信息:

  • 经纬度——目标点的位置
  • 海拔高度——相对起飞点或绝对海拔
  • 飞行速度——到达该点时的期望速度
  • 航向角——机头指向(可选)
  • 停留时间——到达后悬停多久
  • 动作指令——比如拍照、投掷、改变模式

核心概念:航点规划的本质,是把人的意图翻译成飞控能理解的指令序列。你规划得越细致,飞控执行得越可靠。

1.2 ArduPilot航点系统架构解析

ArduPilot的航点系统,其实是一个分层架构。我拆开来讲,你理解起来会更清楚。

从上到下,大致分三层:

  1. 地面站层(Mission Planner / QGC)——你在地图上画点、设置参数,生成航点列表
  2. 通信链路层(MAVLink协议)——地面站通过MAVLink把航点上传到飞控
  3. 飞控执行层(ArduPilot固件)——飞控解析航点,控制飞机按顺序执行

飞控内部怎么处理航点?我画了张图,你看一眼就明白了。

ArduPilot 航点系统架构 地面站层(GCS) Mission Planner / QGroundControl 生成航点列表 → 转换为MAVLink消息 通信链路层(MAVLink) MISSION_ITEM / MISSION_ACK 协议 串口 / UDP / TCP 传输 飞控执行层(ArduPilot) 航点管理器 解析、排序、跳转 导航控制器 位置/速度/航向跟踪 动作执行器 拍照、投掷、DO指令 输出:RC通道 / 电机 / 舵机 / 相机触发 航点数据流:GCS → MAVLink → 航点管理器 → 导航控制器 → 执行器

飞控内部的航点管理器,维护着一个航点队列。每到达一个点,就自动切换到下一个。如果遇到DO指令(比如拍照),它会暂停导航,先执行动作,再继续前进。

我的经验:航点数量不要超过300个。我试过一次性上传500个航点,结果飞控内存溢出,直接重启了。ArduPilot官方建议单次任务不超过327个航点,但实际项目中我控制在200以内最稳。

1.3 Mission Planner vs QGroundControl

这两个地面站,是ArduPilot生态里最主流的。我两个都用过,各有千秋。直接上对比表:

对比项 Mission Planner QGroundControl
开发语言 C#(Windows原生) C++ / Qt(跨平台)
支持平台 Windows为主(Linux/Mac需Wine) Windows / macOS / Linux / Android / iOS
航点编辑 功能丰富,支持多边形、测线、测绘模板 简洁直观,触屏友好,支持拖拽
参数调参 全参数表,支持搜索、对比、导入导出 参数分组清晰,但高级参数不如MP全
日志分析 内置强大的日志浏览器、图表工具 日志查看功能较弱,需导出第三方工具
MAVLink支持 完整支持,兼容性好 完整支持,但部分高级协议支持略晚
适合场景 专业测绘、调试、研发 快速部署、移动端操作、教学演示

我个人习惯是:研发调试用Mission Planner,现场作业用QGroundControl。为什么?

Mission Planner的参数表是全的,你能看到每一个参数。有一次我调一个自定义PID,QGC里死活找不到某个参数,切回MP一秒就搜到了。但QGC的界面清爽,在户外用平板操作,比MP舒服太多。

避坑指南:我曾经在QGC里规划了一个复杂测绘任务,上传后飞控报错「航点格式错误」。排查了半天,发现是QGC版本太旧,生成的MAVLink协议版本与固件不匹配。解决办法:保持地面站和固件版本同步更新。

1.4 航点规划的核心流程

不管用哪个地面站,航点规划的流程大同小异。我总结成5步:

  1. 加载地图——确认地图源(谷歌、必应、OpenStreetMap),检查区域是否覆盖
  2. 绘制航点——点击地图添加点,或使用测绘模板自动生成
  3. 设置参数——每个航点的高度、速度、动作、停留时间
  4. 检查路径——查看3D预览,确认没有撞山、越界、断连
  5. 上传执行——通过MAVLink上传到飞控,切换AUTO模式起飞

这里有个细节:航点高度是相对起飞点还是绝对海拔?ArduPilot默认使用相对高度(相对起飞点)。但如果你在山区作业,我建议用绝对海拔(AMSL),否则地形起伏会导致撞山。

关键参数:FRAME 参数控制航点高度参考系。0 = 相对起飞点,1 = 绝对海拔,2 = 相对地形(需地形数据支持)。

1.5 我的建议

如果你是新手,先从Mission Planner开始。它的文档最全,社区最活跃,遇到问题能搜到答案。等你熟悉了航点规划的逻辑,再试试QGC,感受一下移动端操作的便利。

记住一句话:航点规划不是画线,是写程序。每个航点都是一条指令,顺序、参数、逻辑都不能错。我见过太多炸机案例,都是因为航点高度设错了、动作指令冲突了、或者忘记检查地形。