航线任务规划及管理教程
当无人机需要自主作业时,我们会用到航线任务的规划和航线任务的管理。航线任务的规划是按照一定规则生成航线任务文件;航线任务的管理则是通过MSDK,将规划生成的航线文件进行上传、执行、暂停、恢复等,同时可以监听航线任务执行的各种状态。
KMZ 航线任务文件
Autel 无人机1.8固件版本开始支持 KMZ 任务文件,KMZ 是使用 zip 格式的压缩文档,以“.kmz“作为文件扩展名,包含了资源文件(res目录)、模板文件(template.kml)、执行文件(waylines.wpml),kml 和 wpml 文件都用标准的 xml 格式,便于阅读和编辑。KMZ 文件解压之后文档结构如下:
waypoints_mission_file_name.kmz
└── wpmz
  ├── res  // 资源文件
  ├── template.kml  // 模板文件
  └── waylines.wpml  // 执行文件
 1.其中template.kml和waylines.wpml可参考KMZ格式标准详解,KMZ任务文件作为标准的任务文件已经被三方无人机或第三方航线制图软件支持。
 2.可以在Autel Enterprise APP 2.x版本规划任务,然后导出KMZ文件保存。
 3.如何组装KMZ文件可以参考Demo
一、创建任务流程

二、任务管理
1.任务管理器
我们通过任务管理器来控制任务的执行
 val missionManager = DeviceManager.getDeviceManager().getFirstDroneDevice()?.getWayPointMissionManager()
2.任务上传
上传 KMZ 任务文件:
missionManager.uploadKmzMissionFile(
      kmzPath: String,
      guid: Int,
      callback: CommonCallbacks.CompletionCallbackWithProgressAndParam<Long>)
3.启动任务
missionManager.startMission(
      guidBean: MissionKmlGUIDBean,
      callback:CommonCallbacks.CompletionCallbackWithParam<Void>)
4.暂停任务
missionManager.pauseMission(
      callback : CommonCallbacks.CompletionCallbackWithParam<Void>,
      isKml: Boolean = true)
5.恢复任务
missionManager.resumeMission(
      guidBean: MissionKmlGUIDBean,
      callback: CommonCallbacks.CompletionCallbackWithParam<Void>)
6.停止任务
missionManager.exitMission(
      callback: CommonCallbacks.CompletionCallbackWithParam<Void>
      isKml: Boolean = true)
7.监听/取消任务状态
missionManager.addWaypointMissionExecuteStateListener(
      listener: CommonCallbacks.KeyListener<MissionWaypointStatusReportNtfyBean>)
missionManager.removeWaypointMissionExecuteStateListener(
      listener: CommonCallbacks.KeyListener<MissionWaypointStatusReportNtfyBean>)
//针对多机情况,一次性监听所有飞机执行任务情况:
private val reportKey = KeyTools.createKey(FlightMissionKey.KeyStatusReportNtfy)
DeviceManager.getDeviceManager().addDroneDevicesListener(reportKey, devicesListener)
DeviceManager.getDeviceManager().removeDroneDevicesListener(reportKey, devicesListener)
 private val devicesListener = object : DeviceManager.KeyManagerListenerCallBack {
        override fun onListenerValueChanged(value: DeviceManager.DeviceListenerResult<*>) {
            val device = value.drone
            val reportBean = value.result as MissionWaypointStatusReportNtfyBean
        }
 }
8.查询断点任务信息
missionManager.queryMissionBreakpointInfo(
      param: MissionWaypointGUIDBean,
      callback: CommonCallbacks.CompletionCallbackWithParam<MissionWaypointBreakRspBean>)
9.恢复断点任务
missionManager.resumeBreakpointMission(
      guiBean: MissionKmlGUIDBean,
      callback: CommonCallbacks.CompletionCallbackWithParam<MissionWaypointBreakRspBean>)
三、参考Demo
航线任务管理以及执行的代码参见Sample#MissionDemoFragment