Saltearse al contenido

Exportación WPML KMZ

ARGUS incluye un generador de KMZ WPMZ de frontend (kmz-generator.ts) que produce un blob .kmz en el formato Wayline Production File v1.0.3 de DJI. El mismo generador se usa tanto para exportación manual desde el planificador como para subida automática durante el envío al dock.

Disposición de archivo

Un KMZ generado es un ZIP comprimido con deflate que contiene:

  • wpmz/template.kml — plantilla KML con metadatos de misión y defaults de waypoint (desde buildTemplateKml).
  • wpmz/waylines.wpml — WPML listo para ejecución con la lista completa de waypoints y overrides por punto (desde buildWaylinesWpml).
  • res/ — recursos embebidos opcionales. ARGUS no emite nada aquí; la carpeta está reservada para payloads de recursos de aeronave.

Ambos archivos declaran los namespaces KML (http://www.opengis.net/kml/2.2) y WPML (http://www.dji.com/wpmz/1.0.3). El tipo MIME del blob es application/vnd.google-earth.kmz.

Exportación manual

Planificador → Exportar → WPML KMZ. La descarga se produce en el navegador mediante generateKmz(mission, options). Úsalo para:

  • Cargar la misión en DJI Pilot 2 en un smart RC.
  • Archivar para auditoría / regulatorio.
  • Entregar a socios que vuelan su propio hardware DJI.

Exportación automática al enviar a DJI

DjiMissionDispatcherService.dispatchToDock ejecuta:

  1. generateKmz(mission, options) — produce el blob.
  2. Solicita una URL presigned de la Cloud API; PUT del blob a S3 con Content-Type: application/vnd.google-earth.kmz.
  3. Llama a registerWayline para registrar la clave del objeto con DJI Cloud y recibe un djiWaylineId.
  4. Crea una tarea de vuelo (taskType: 1 = wayline) que referencia la clave S3.
  5. Llama a prepareTask; el dock maneja el resto mediante MQTT.

Campos emitidos

Nivel de misión (desde buildMissionConfigXml)

  • <wpml:flyToWaylineMode>safely</...>
  • <wpml:finishAction>goHome / autoLand / gotoFirstWaypoint / noAction.
  • <wpml:exitOnRCLost>executeLostAction (predeterminado) / exitImmediately.
  • <wpml:executeRCLostAction>goBack (predeterminado) / hover / land.
  • <wpml:takeOffSecurityHeight> — sólo cuando takeoffSecurityHeight está establecido.
  • <wpml:globalRTHHeight> — sólo cuando rthAltitude está establecido.
  • <wpml:globalTransitionalSpeed>.
  • <wpml:droneInfo> / <wpml:payloadInfo> — enums de dron + payload.

Globales de plantilla (desde buildTemplateKml)

  • <wpml:autoFlightSpeed>speedMps de la misión.
  • <wpml:globalHeight>altitudeM de la misión.
  • <wpml:heightMode>relativeToStartPoint / WGS84 / EGM96 / aboveGroundLevel.
  • <wpml:gimbalPitchMode>usePointSetting</...>.
  • <wpml:waypointHeadingMode> — uno de los cinco valores (followWayline, fixed, manually, towardPOI, smoothTransition).
  • <wpml:waypointTurnMode> — predeterminado toPointAndStopWithDiscontinuityCurvature, conforme a especificación para stop-at-waypoint.
  • <wpml:waypointTurnDampingDist> (0.2–1000 m).

Por waypoint (desde buildPlacemarks)

  • <wpml:executeHeight> — la altitud del waypoint.
  • <wpml:waypointSpeed> — si el waypoint sobrescribe la velocidad.
  • <wpml:useGlobalHeight>0</> + <wpml:executeHeightMode> — si el waypoint sobrescribe el frame de altura.
  • <wpml:waypointHeadingParam> — modo de rumbo + ángulo + POI por punto.
  • <wpml:waypointTurnParam> — modo de giro + amortiguación por punto.
  • <wpml:gimbalPitchAngle>.
  • <wpml:actionGroup> con un <wpml:actionTrigger> (reachPoint / betweenAdjacentPoints / multipleTiming) y una lista ordenada de entradas <wpml:action>takePhoto, startRecord, stopRecord, hover, gimbalRotate, rotateYaw, focus, zoom, customDirName.

Acciones de cámara (desde buildCameraSettingsXml)

Por especificación, el generador sólo emite los tres hijos legales de actionActuatorFuncParam de takePhoto / startRecord:

  • <wpml:fileSuffix> — siempre emitido (obligatorio).
  • <wpml:payloadLensIndex> — lista separada por comas de lentes habilitadas (predeterminado wide,zoom).
  • <wpml:useGlobalPayloadLensIndex>1 = usar conjunto de lentes a nivel de misión, 0 = override desde esta acción.

Otros campos de cámara en DroneCameraSettings (focus, metering, exposure, ISO, aperture, shutter, dewarp) no se emiten a WPML — el firmware ≥ 1.6 rechaza elementos desconocidos dentro de actionActuatorFuncParam. Esos ajustes se aplican mediante comandos MQTT de control de cámara en vivo en su lugar.

Limitaciones conocidas

  • Corredores de mapping 3D. El patrón mapping con mappingCaptureMode: 'both' emite un compuesto nadir + oblicuo pero aún no emite el elemento <wpml:mappingStrip> exclusivo de spec. Los corredores de franja siguen siendo volables mediante la ruta genérica de waypoint, pero sin las optimizaciones de mapping del lado de la aeronave que DJI ofrece para ese elemento.
  • Modos inteligentes. Foco, smart-follow, panorama y POI-track se controlan en el momento del vuelo mediante mensajes MQTT DRC (drone-remote-control), no horneados en el KMZ.
  • Defaults de aeronave. Los defaults del generador apuntan a la familia Mavic 3D (droneEnumValue: 77). Pasa droneEnumType en KmzGenOptions para otras aeronaves.

Relacionado