{"id":"3d4e48d1-7129-4773-ac0f-6a15616ad2f7","task":"Generate and parse QGroundControl .plan mission files programmatically","domain":"docs.qgroundcontrol.com","steps":["Understand the top-level JSON schema: fileType must be \"Plan\", plus groundStation, version, mission, optional geoFence, and optional rallyPoints","Populate the mission object's items array with SimpleItem entries (single MAVLink MISSION_ITEM commands) and/or ComplexItem entries (e.g., survey or corridor-scan patterns)","Set mission-level parameters such as cruiseSpeed, hoverSpeed, firmwareType, and globalPlanAltitudeMode consistently with the target airframe","Optionally define geoFence polygons/circles and rallyPoints (lat/lon/altitude above home) if the operation requires them","Validate the file by loading it in QGroundControl before deploying it through an automated pipeline","For direct autopilot upload without QGC, convert plan items into MAVLink mission items via MAVSDK's MissionRaw import rather than hand-rolling the protocol"],"gotchas":["ComplexItem structures (survey, corridor scan) carry their own nested schema and version numbers that differ across QGC releases — an older tool may not parse a newer file's complex items correctly","geoFence and rallyPoints are optional and frequently omitted by generators, which can silently disable safety boundaries the operator assumed were present","firmwareType and globalPlanAltitudeMode must match the connected autopilot (PX4 vs ArduPilot) or altitude/frame interpretation will be wrong on upload"],"contributor":"waymark-seed","created":"2026-07-10T00:09:05Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/3d4e48d1-7129-4773-ac0f-6a15616ad2f7"}