
本文介绍通过生成符合 QGC WPL 格式的 .waypoints 文件,并利用 Mission Planner 的文件拖放或命令行接口实现自动化导入,无需手动操作。重点强调格式规范、验证方法及实用注意事项。
本文介绍通过生成符合 qgc wpl 格式的 `.waypoints` 文件,并利用 mission planner 的文件拖放或命令行接口实现自动化导入,无需手动操作。重点强调格式规范、验证方法及实用注意事项。
Mission Planner 并不提供官方的 API 或直接的 Python 接口用于“远程上传”任务文件,但它支持两种可靠且可自动化的导入方式:文件系统级拖放(推荐) 和 命令行启动参数加载。关键前提是:你的 Python 脚本生成的 .waypoints 文件必须严格遵循 QGroundControl(QGC)/Mission Planner 所定义的 WPL 文本格式(即“QGC WPL 110”头格式),否则导入会失败或解析出错。
✅ 正确的 .waypoints 文件格式示例如下:
QGC WPL 110 0 1 0 16 0 0 0 0 -22.0945473 47.4938965 193.010000 1 1 0 3 22 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 100.000000 1 2 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 -21.41599770 47.62435910 100.000000 1 3 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 -21.57571890 48.15032960 100.000000 1 4 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 -22.29417910 47.88940430 100.000000 1 5 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 -22.16451430 47.46231080 100.000000 1
? 格式要点说明:
- 第一行必须为
QGC WPL 110(表示 QGC 版本 110,当前标准); - 每行 12 列(空格分隔),依次为:序号、当前点标志、坐标系、命令(MAV_CMD)、4 个参数(p1–p4)、纬度、经度、高度(米,AMSL)、自动继续标志(1=是);
- 命令类型需合理(如
16=NAV_WAYPOINT,22=NAV_LOITER_TIME); - 首航点(序号 0)通常为
current=1的起飞/起始点,类型常为16或22。
? 自动化导入方案(二选一):
-
文件拖放(最简单稳定)
Mission Planner 支持将.waypoints文件直接拖入主窗口(任务页)。你可在 Python 脚本末尾调用系统命令打开 Mission Planner 并自动加载该文件:import os import subprocess waypoints_path = "output.waypoints" # 确保文件已按 QGC WPL 格式写入... # Windows 示例:启动 MissionPlanner.exe 并传入文件路径 mp_exe = r"C:\Program Files\Mission Planner\MissionPlanner.exe" if os.path.exists(mp_exe): subprocess.Popen([mp_exe, waypoints_path])✅ 优势:无需连接飞控,立即可视化;
⚠️ 注意:需确保 Mission Planner 已安装且路径正确;首次运行可能需用户确认“允许此应用打开文件”。 -
命令行启动 + 自动加载(更可控)
使用/load参数启动 Mission Planner(Windows):MissionPlanner.exe /load:"C:\path\to\output.waypoints"
同样可通过
subprocess在 Python 中触发。
? 验证与调试建议:
- ✅ 黄金验证法:在 Mission Planner 中手动规划一条简单任务 → 导出为
.waypoints→ 与你的生成文件逐行比对(尤其首行、列数、小数位数、空格分隔); - ❌ 避免使用制表符(
\t)或混合空格,务必统一用空格分隔; - ? 高度单位必须为 AMSL(海拔高度),非相对高度(如需相对高度,请改用
MAV_FRAME_GLOBAL_RELATIVE_ALT并调整命令参数); - ⚠️ 不推荐使用
pymavlink直接发送MISSION_ITEM—— 它要求飞控已连接、握手完成、且需处理全套协议(含MISSION_COUNT,MISSION_REQUEST,MISSION_ACK等),复杂度高、容错差,远不如文件导入鲁棒。
✅ 总结:自动化导入的核心不是“通信”,而是“格式合规 + 文件交付”。只要 .waypoints 文件语法精准、结构完整,Mission Planner 即可秒级加载。将生成逻辑封装为函数,再配合 subprocess 启动,即可实现从 Python 脚本到 Mission Planner 任务可视化的全自动闭环。










