Mobile SDK(MSDK)是用于监测与控制大疆无人机(或手持云台相机)的移动应用程序开发工具包,是大疆SDK中使用最多、对无人机兼容性最强的SDK之一。Mobile SDK包括Android Mobile SDK和iOS Mobile SDK两个组成部分,分别用于在Android和iOS操作系统下搭建无人机应用程序。由于Android Mobile SDK和iOS Mobile SDK的功能与设计理念相似,且均针对大疆无人机而设计,因此其体系结构与类库设计也基本相同。
由于本书重点介绍无人机的二次开发,因此后文在不特别说明的情况下,各项功能均是对无人机的二次开发进行描述。对于大疆手持相机而言,其SDK的使用方式基本类似,在相机类、云台类等的使用上本书也具有一定的参考价值。
Mobile SDK的重要更新历史如下。
● 2016年年初,大疆发布Mobile SDK 3.0版本,其基本架构和类库设计基本定型,移除了对精灵2 Vision+的支持,开始支持精灵3以来的大疆无人机。
● 2017年3月,大疆发布Mobile SDK 4.0版本。一方面提供了UI Library类库(UX SDK的前身),用于快速构建移动应用程序;另一方面重构了任务管理方式,并引入了任务控制(Mission Control)、时间线(Timeline)、触发器(Trigger)等新的概念,提高任务管理的易用性与健壮性。
● 2018年4月,大疆发布Mobile SDK 4.5版本,将UI Library从Mobile SDK剥离,成为单独的UX SDK。
Mobile SDK具有以下3个重要的特点。
由于Mobile SDK是建立在移动终端平台基础上的SDK,因此封装并隐藏了大量的控制细节,将最为简单直接的控制代码暴露在基于Android和iOS平台之上的类与方法中。因此,对于移动应用开发者而言,只需要简单地学习一些无人机基础常识即可着手开发,非常适合于不具有无人机开发背景的移动开发工程师。
Mobile SDK主要用于大疆无人机的监测与控制,而无人机是真实世界中由人类创造的具有一定结构的机械设备。大疆无人机具有功能分明的组件和结构,因此其非常利于抽象,自然而然地形成Mobile SDK中的类与实例。不同于其他纯软件的SDK,大疆Mobile SDK中许多类并不是冷冰冰的,而是触手可及的物件。例如,无人机类(Aircraft)、相机类(Camera)和云台类(Gimbal)等这些名词我们一说就知道是什么,属于无人机上的什么组件。而其中的起飞方法、拍照方法也非常容易理解。面向对象的程序设计思想在Mobile SDK中表现得淋漓尽致。
Mobile SDK所控制的飞行器硬件与我们的移动设备之间存在着物理距离,信息和指令均通过无线电信号传递,因而容易受到电磁干扰、环境遮挡等因素的影响。因此,当我们调用一个Mobile SDK方法时并不一定能够实时响应,这个特点有点类似于网络开发:调用程序所返回的结果往往通过异步的方式传递回来。例如,在Android中,Mobile SDK通过回调接口与方法的手段隐藏了大量的异步方法;在iOS中,Mobile SDK通过定义代理(Delegate)和Block语句传递回调结果。另外,为了实时获取无人机的状态参数,Mobile SDK包含了非常多的监听器设计模式,以便于开发和调试。
Mobile SDK的学习资源包括Mobile SDK API文档、Mobile SDK官方教程、大疆开发者论坛、DJI SDK Github、DJI SDK StackOverflow等。
为了更好地掌握Mobile SDK,学会使用大疆官方的API文档是非常重要的。在使用Mobile SDK中,如果读者对某些类或方法出现了疑问,那么绝大多数情况下都可以在大疆官方的API文档中找到(见图2-3和图2-4)。这里介绍这些API文档的组织方法和查阅方法。
图2-3 Android Mobile SDK的API文档
图2-4 iOS Mobile SDK的API文档
❀ Android Mobile SDK的在线API文档地址如下:
https://developer.dji.com/api-reference/ios-api/index.html
iOS Mobile SDK的在线API文档地址如下:
https://developer.dji.com/api-reference/android-api/index.html
Mobile SDK的类按照以下几个部分进行组织。
● MANAGER CLASSES:管理器类,用于软件注册、用户认证、禁飞区解锁等全局性的操作。
● BASE CLASSES:基本类库,包括产品基类和组件基类。
● PRODUCT CLASSES:产品类,包括无人机产品类和手持云台相机产品类。
● COMPONENT CLASSES:组件类,包括产品的各种组件类。
● MISSION CLASSES:任务类,包括各种任务类和任务控制器类。
● MISC CLASSES:其他类,Mobile SDK所涉及的其他类。
在每一个类的页面中,介绍了类的基本信息、成员属性和方法,以及相关的其他类等。在类描述介绍的最上方灰色框中展示了类的基本定义签名,其他的内容如下。
● Package:所在包名(仅Android)。
● Header:头文件名称(仅iOS)。
● Inherits From:该类的父类。Mobile SDK中所有的类均为单继承,因此只能有一个父类。在iOS中,绝大多数的类的基类为NSObject。
● Description:类的描述说明。
● Class Members:类成员,包括属性(property)和方法(method)等。单击成员即可查看到该成员的具体签名和使用说明。
● Inherited Methods:继承父类的方法。
● Related:与该类相关的其他类(class)、接口(interface)、枚举(enum)等。
Mobile SDK官方教程包括了Mobile SDK的基本用法和若干例程,是提供给具备iOS或Android平台开发经验的开发者的基础性知识内容,包含概览、马上开始构建应用、开发流程指引、基本概念与组件介绍和平台开发教程等。除详细说明如何使用Mobile SDK外,本文档还介绍并对比了各产品的特性,以及可以运用的关键技术。Mobile SDK官方教程的页面地址如下:https://developer.dji.com/cn/document/564303df-00e8-446f-a468-b75aa5d4eacc。
在Mobile SDK官方教程中,平台开发教程目前仅包括英文版本,其主要的内容如下。
● 应用程序激活与无人机绑定。
● 拍照录像功能实现。
● 照片视频回放功能实现(仅iOS)。
● Media Manager功能实现。
● 地图与航点任务功能实现。
● 指点飞行与主动跟随功能实现。
● Simulator模拟器功能实现。
● GEO地理围栏系统介绍与功能实现。
● DJI Bridge调试应用介绍(仅iOS)。
● 远程调试工具介绍(仅iOS)。
● 全景应用功能实现(仅iOS)。
在使用Mobile SDK的过程中,如果出现上述API文档和官方教程无法解决的较为复杂和个性化的问题,可尝试在开发者论坛中进行讨论。大疆开发者论坛包括中文和英文两个版本,其网站地址分别如下。
● 大疆开发者中文论坛:https://bbs.dji.com/forum-79-1.html?from=developer
● 大疆开发者英文论坛:https://forum.dji.com/forum-139-1.html?from=developer
在大疆的Github仓库中,可以找到Mobile SDK的官方示例工程(Sample code),以及在Mobile SDK官方教程中所完成的工程代码。读者也可尝试在大疆的Github仓库中提出issue以解决问题。大疆的Github仓库的地址为https://github.com/dji-sdk。
在大疆的StackOverflow中,读者也可以尝试提出Mobile SDK相关的问题与官方和其他开发者共同讨论。读者可在以下网址中找到DJI SDK的相关问题:https://stackoverflow.com/questions/tagged/dji-sdk。
另外,读者可以直接将学习中所遇到的问题通过大疆开发者官方邮箱(dev@dji.com)进行沟通和处理。