2.2 Mobile SDK基本架构
通过Mobile SDK可搭建用于监测和控制无人机飞行的移动应用程序。Mobile SDK通过面向对象的方法高度集成大疆无人机(以及手持云台相机)的各种操作。对于多种不同的大疆无人机的起飞、降落、相机设置、飞行任务等通用的操作,可采用相同的Mobile SDK代码进行控制。
Mobile SDK由SDK管理器(SDK Manager)、产品与组件(Product and Component)、任务控制器(Mission Control)和任务(Mission)等几个主要部分组成,如图2-5所示。
图2-5 Mobile SDK的基本架构
(1)SDK管理器:SDK管理器是Mobile SDK的入口,用于获取产品实例和任务控制实例等。
(2)产品与组件:产品是指大疆产品设备,包括大疆无人机(Aircraft)和手持云台相机(Handheld)两类,而组件是指大疆产品设备的各个组成部分,如云台(Gimbal)、相机(Camara)、飞行控制器(FlightController)等。
(3)任务控制器和任务:任务控制器类用于整体控制大疆产品设备任务的执行,并可通过时间线(Timeline)按顺序执行多个任务。任务控制器也是各类飞行任务操作器的入口。
本节依次介绍Mobile SDK的各个组成部分,以及Mobile SDK的数据链路。
2.2.1 SDK管理器
SDK管理器具有注册应用程序、连接产品与获取产品实例、SDK调试、日志,以及获取各类其他管理器等功能,可进行软件注册、用户认证等一些通用性、全局性的基本操作。在Android中,SDK管理器是一个单例类,通过其getInstance()方法即可获取其实例。在iOS中,SDK管理器的所有功能均采用其相应的类方法(无实例方法)实现。通过SDK管理器直接或者间接地获取到产品(Product)、组件(Component)、任务控制器(Mission Control)和各种任务(Mission)类的实例对象,因此SDK管理器是整个Mobile SDK的核心类。
1. 注册应用程序
为了保障飞行安全,每个使用Mobile SDK的应用程序需要通过注册后才可以正常使用,否则无法正常连接大疆无人机。注册应用程序包括申请应用程序密钥和联网注册应用程序两个部分,会分别在“2.3.3申请应用程序密钥”和“第3章 第一个Mobile SDK应用程序”中介绍。
2. 连接产品与获取产品实例
在注册应用程序之后,通过SDK管理器即可开始连接无人机,并取得相应的实例对象。通过无人机实例对象还可以获取其各个组件的实例,并进行相应的控制操作。
3. 其他各类管理器
除SDK管理器以外,Mobile SDK还包括用于特定功能的管理器类。
(1)键值管理器(KeyManager):键值管理器可采用键值对的方法获取设备的各项参数设置或执行动作。在Android中,该管理器实例需要通过SDK管理器的getKeyManager()方法获取;在iOS中,该管理器实例需要通过SDK管理器的keyManager属性获取。
(2)飞行区域管理器(FlyZoneManager):用于管理无人机的飞行区域,包括解锁限制飞行的区域、更新限飞数据库等功能。在Android中,该管理器实例需要通过SDK管理器的getFlyZoneManager()方法获取。在Android中,该管理器实例需要通过SDK管理器的flyZoneManager属性获取。
(3)应用程序激活管理器(AppActivationManager):用于中国大陆用户进行实名制认证,并激活应用程序。在中国大陆范围内使用无人机,需要登录经过实名制认证的DJI账号来激活应用程序,并且需要通过DJI账户绑定无人机,否则无法使用无人机图传,且被限高30m、限远100m。在Android中,该管理器示例需要通过SDK管理器的getAppActivationManager()方法获取。在iOS中,该管理器示例需要通过SDK管理器的appActivationManager属性获取。
(4)用户账户管理器(UserAccountManager):用于登录与注销DJI账户。在Android中,该管理器需要通过其getInstance()方法获取其单例对象。在iOS中,该管理器示例需要通过SDK管理器的userAccountManager属性获取。
(5)数据保护管理器(DataProtectionManager):用于管理与授权上传飞行信息到DJI服务器。在Android中,该管理器需要通过其getInstance()方法获取其单例对象。在iOS中,该管理器示例需要通过SDK管理器的dataProtectionManager属性获取。
(6)本地数据模式管理器(LDMManager):用于开启本地数据模式(Local Data Mode,LDM)。在本地数据模式下,除注册应用程序外,Mobile SDK不会访问互联网,也不能更新固件和更新限制飞行区域。LDM模式在中国大陆范围内不可用。在Android中,该管理器实例需要通过SDK管理器的getLDMManager()方法获取。在iOS中,该管理器实例需要通过SDK管理器的ldmManager属性获取。
(7)大疆司空管理器(FlightHubManager):大疆司空是一个在线的用于实时任务管理、远程直播和控制的无人机综合管理平台。该管理器用于连接大疆司空服务器,并上传与下载飞行数据。读者可从https://www.dji.com/cn/flighthub网页上了解大疆司空平台的更多信息。在Android中,该管理器实例需要通过SDK管理器的getFlightHubManager()方法获取。在iOS中,该管理器实例需要通过SDK管理器的flightHubManager属性获取。
(8)直播管理器(LiveStreamManager):用于将图传信息以RTMP服务器的形式在互联网上实时共享,仅在Android中可用。在Android中,该管理器实例需要通过SDK管理器的getLiveStreamManager()方法获取。
(9)更新管理器(UpgradeManager):用于管理和更新御2系列、御Air等无人机的组件固件。在Android中,该管理器实例需要通过SDK管理器的getUpgradeManager()方法获取。在iOS中,该管理器实例需要通过SDK管理器的upgradeManager属性获取。
可见,在Android中,除了用户账户管理器与数据保护管理器以外,其他的管理器类均需要通过SDK管理器获得实例。在iOS中,SDK管理器是所有管理器实例的绝对入口。
2.2.2 产品与组件
产品,即大疆产品设备,包括无人机(Aircraft)与手持云台相机(Handheld)两类,其基类为BaseProduct。每个产品设备都是由云台和相机等多个组件组成,每一个组件都是由其组件基类BaseComponent继承而来的。
对于大疆无人机来说,其组件包括云台(Gimbal)、相机(Camera)、飞行控制器(FightController)、链路(AirLink)、遥控器(RemoteController)、电池(Battery)等,如图2-6所示。
图2-6 大疆无人机及其各个组件(以iOS Mobile SDK为例)
对于大疆手持云台相机来说,其组件包括云台(Gimbal)、相机(Camera)、手持云台相机控制器(HandheldController)、链路(AirLink)、电池(Battery)等,如图2-7所示。大疆无人机和手持云台相机的许多组件类(如云台、相机、电池等)是通用的。
图2-7 大疆手持云台相机及其各个组件(以iOS Mobile SDK为例)
值得注意的是,Mobile SDK在Android中的各个类前基本都没有“DJI”前缀(SDK管理器DJISDKManager等少数类除外),而在iOS的各个类实现中,均有“DJI”前缀。例如,无人机类(Aircraft)在Android中的类名为Aircraft,但是在iOS中的类名为DJIAircraft。在图2-6和图2-7中均以iOS Mobile SDK为例,在Android系统中,只需要将每个类的“DJI”前缀去掉即可。
2.2.3 任务控制器、任务与任务动作
任务控制器(Mission Control)用于管理多个任务的执行顺序和动作的触发设置。任务控制器类属于单例类,在Android中需要通过DJISDKManager的getMissionControl()方法获取,在iOS中需要通过DJISDKManager的missionControl属性获取。
任务(Mission)是指无人机自动执行的预设程序,包括航点任务(WaypointMission)、指点飞行任务(TapFlyMission)、热点跟随任务(FollowMeMission)、智能跟随任务(ActiveTrackMission)、兴趣点环绕任务(HotpointMission)、智能兴趣点环绕任务(IntelligentHotpointMission)、全景图任务(PanoramaMission)等。
任务动作(Mission Action)是指无人机执行任务时满足某些特定的条件所执行的特定功能,包括起飞动作(TakeOffAction)、偏航动作(AircraftYawAction)、飞到指定位置动作(GoToAction)、返航动作(GoHomeAction)、兴趣点环绕动作(HotpointAction)、云台姿态动作(GimbalAttitudeAction)、录像动作(RecordVideoAction)、拍照动作(ShootPhotoAction)、降落动作(LandAction)等。
上述任务与动作不仅可以放置在任务控制的时间线(Timeline)中顺序执行,也可以单独执行。任务控制器、任务与任务动作的具体使用方法详见“第10章 航点任务与时间线任务”。
2.2.4 Mobile SDK的数据链路
在“第1章 无人机行业应用与二次开发概述”中,我们了解到无人机与地面设备之间的数据链路包括控制链路、数传链路和图传链路等。基于Mobile SDK的应用开发实际上是通过这些链路传递监测、控制与任务信息的。一般来说,基于Mobile SDK所编写的代码所涉及的各种指令要通过Mobile SDK传递到系统平台SDK,然后通过有线(USB)或无线(Wi-Fi)连接传递到大疆无人机的遥控器上,并最终通过其Wi-Fi、LightBridge、OcuSync等链路传递到无人机上,如图2-8所示。
图2-8 DJI Mobile SDK与数据链路
具体来说,移动设备与无人机的连接方式包括以下3种(见图2-9)。
图2-9 移动设备与无人机的连接方式
(1)移动设备与遥控器采用USB连接,遥控器与无人机采用LightBridge(或OcuSync)连接,包括精灵3(除标准版与4K版)、精灵4、悟系列、御系列、经纬系列等无人机。
(2)移动设备与遥控器采用Wi-Fi连接,遥控器与无人机采用2.4G的Wi-Fi连接与5.8G的附属连接控制两部分,其中Wi-Fi连接是双向的,包括图传链路、数传链路等,而附属连接控制为遥控器到无人机单向传输控制信号,采用这种连接方式的无人机包括精灵3标准版、精灵3 4K版和晓。
(3)移动设备直接通过Wi-Fi连接到无人机,包括开启Wi-Fi连接模式的御Pro、御Air和晓。另外,大疆手持云台相机也是通过Wi-Fi或蓝牙直接连接到移动设备的。