1. PX4 Mission模式下.plan文件深度解析
作为一名无人机开发者,我经常需要手动编辑和调试QGroundControl生成的.plan任务文件。这些JSON格式的文件看似简单,但其中每个参数都直接影响飞行安全和任务执行效果。今天我就带大家彻底拆解这个"飞行任务说明书"。
2. 文件整体架构解析
2.1 基础元数据区
json复制{
"fileType": "Plan",
"groundStation": "QGroundControl",
"version": 1
}
这三个字段构成了文件的"身份证":
fileType固定为"Plan",区别于其他QGC文件(如参数配置、日志等)groundStation标识生成软件,不同地面站可能有细微格式差异version目前都是1,为未来格式升级预留空间
实际开发中遇到过第三方地面站生成的伪.plan文件导致QGC解析失败的情况,建议始终用QGC创建基准文件
2.2 安全策略模块
json复制"geoFence": {
"circles": [],
"polygons": [],
"version": 2
},
"rallyPoints": {
"points": [],
"version": 2
}
这两个空数组背后藏着重要安全机制:
geoFence定义禁飞区域(圆形/多边形),无人机触碰边界会自动停止或返航rallyPoints设置紧急降落点,在通讯中断时替代Home点
我曾因未设置地理围栏导致无人机飞入高压线区域,现在强烈建议至少设置半径500米的圆形围栏
3. 任务核心mission对象
3.1 全局飞行参数
json复制"mission": {
"cruiseSpeed": 5.0,
"hoverSpeed": 5,
"firmwareType": 12,
"globalPlanAltitudeMode": 1
}
速度参数需要特别注意单位:
cruiseSpeed单位m/s,影响所有航点间移动速度hoverSpeed专用于多旋翼的位置微调
固件类型编码:
- 12 = PX4
- 3 = ArduPilot
- 错误设置会导致指令解析失败
高度模式详解:
- 0 = 绝对海拔(需配合地形数据)
- 1 = 相对起飞点(最常用)
- 2 = 相对地面(需要雷达测高)
3.2 航点指令items解析
3.2.1 起飞指令(MAV_CMD_NAV_TAKEOFF)
json复制{
"command": 22,
"params": [0, 0, 0, null, 39.123456, 116.654321, 10.0]
}
参数陷阱:
- 经纬度实际使用第5/6参数,新手常误用第1/2参数
- 高度参数在不同固件版本中有不同解读(PX4 v1.11+改为强制使用相对高度)
3.2.2 速度变更(MAV_CMD_DO_CHANGE_SPEED)
json复制{
"command": 178,
"params": [1, 5.0, -1, 0]
}
速度类型详解:
- 0 = 空速(固定翼专用)
- 1 = 地速(多旋翼常用)
- 2 = 油门百分比
实测发现当设置地速低于1m/s时,某些机型会出现异常震荡
3.2.3 标准航点(MAV_CMD_NAV_WAYPOINT)
json复制{
"command": 16,
"params": [10, 2.5, 0, null, 39.123456, 116.654321, 15.0]
}
悬停时间技巧:
- 参数1设为0时飞控仍会短暂稳定位置
- 精确悬停需配合"DO_DELAY"指令
- 接受半径(参数2)建议设为2倍GPS误差
4. 高级应用技巧
4.1 复合指令编排
json复制[
{"command": 178, "params": [1,3.0]}, // 降速
{"command": 16, "params": [5,...]}, // 悬停拍摄
{"command": 183, "params": [1,1]}, // 触发相机
{"command": 112, "params": [0.5]} // 延迟0.5秒
]
典型测绘任务指令流:
- 降低飞行速度保证成像质量
- 到达航点后稳定悬停
- 发送相机触发信号
- 等待曝光完成
4.2 故障注入测试
json复制{
"command": 189, // MAV_CMD_DO_SET_PARAMETER
"params": [1, "COM_OBL_ACT", 2] // 设置失控动作为降落
}
安全测试方法:
- 模拟通讯中断(设置短超时)
- 验证返航逻辑
- 检查低电量应对策略
5. 调试与排错指南
5.1 常见解析错误
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 航点高度异常 | AltitudeMode设置错误 | 统一使用相对高度(1) |
| 速度设置无效 | 参数顺序错误 | 确认speed_type在首位 |
| 指令被跳过 | frame值不匹配 | 导航指令用3,动作指令用2 |
5.2 任务验证流程
- 用QGC的"模拟运行"可视化轨迹
- 检查高度剖面图是否有突变
- 验证速度变化点是否合理
- 确认安全策略生效范围
经过多次实际任务验证,我发现手动编辑.plan文件时最容易出错的是参数索引位置。建议开发时使用Python脚本进行结构化读写,避免直接编辑原始JSON。对于复杂任务,可以先用Mission Planner生成基础文件,再导入QGC进行微调。
