iOS UX SDK 使用指南
1. 引言
为帮助开发者快速创建出应用程序,AUTEL UX SDK提供应用程序通用核心功能模块,包括:
- 显示相机的实时图传画面
- 显示飞行器实时的地图位置和飞行轨迹
- 相机拍摄、录像,参数设置,相册功能
- 显示飞行状态信息(飞行器高度、速度,电池电量,信号强度等)
- 允许开发者查看和更改飞行器设置
- 具有自动起飞,降落,返航等基本功能。
AUTEL UX SDK 提供具有这些核心功能的 UI 界面,使用默认的AUTEL UX SDK组件,开发者可以在不添加额外代码行的情况下,快速创建出类似以下应用程序效果:
2. 概念概述
AUTEL UX SDK具有三种主要的UI类型:
- 控件 : 独立的UI元素,可提供状态信息或简单的控制(例如电池电量信息或自动起飞按钮)
- 控件集合 :彼此相关的小部件的有组织的集合(例如,飞行状态栏)
- 面板 : 具有丰富UI元素(例如相机设置)的复杂菜单和设置视图
- 页面:一个完整的UI功能模块(如图传页面、地图页面)
所有UI元素无需额外维护就可以简单地在应用程序中实现出来。这些UI元素已经和AUTEL Mobile SDK绑定在了一起,并且在实例化后更新相关信息。
3. AUTEL Mobile SDK使用指南
AUTEL UX SDK是建立在AUTEL Mobile SDK之上,在使用AUTEL UX SDK之前,先去熟悉怎么接入和使用AUTEL Mobile SDK,具体使用指南见《AUTLE iOS Mobile SDK 介绍》和《AUTEL Mobile SDK开发流程指引》。
4. AUTEL UX SDK 依赖
Mobile SDK提供访问无人机各个功能模块接口API。通过Mobile SDK,开发者可以实现自主飞行,控制相机和云台,接收实时视频图传和传感器数据,下载保存好的媒体文件,以及监听其他组件的状态等等。AutelUXFramework是Autel封装的基础功能库,提供一些工具类,基础控件,基础组件如地图组件等

4.1 导入Mobile SDK
导入AUTELSDK,包括三个 Frameworks:AUTELSDK.xcframework、AUTELWidget.xcframework、DDSimpleNetLogger.xcframework。
参考 Autel_UX_SDK: Target -> Build Phases -> 左上⻆+号 -> New Copy Files Phase 然后在Embed Frameworks 下 Destination选择Frameworks

4.2 导入AutelFramework
参考Autel_UX_SDK: TARGET > General > Frameworks, Libraries, and Embedded content 中导入 AutelUXFramework.framework

注意:
AutelUXFramework.framework选择 Do Not Embed
5. Autel UX SDK功能模块
功能模块包括:
- 实时图传画面⻚面
- 地图显示⻚面
- ⻜行参数状态栏控件集合
- 相机控制面板
- 相机参数设置面板
- 姿态球显示控件
- 一键起⻜、一键降落控件
- ⻜行参数设置⻚面
- 云台⻆度调整控件
- 变焦调整控件
- 相册预览⻚面
5.1 实时图传画面⻚面
5.1.1 功能描述
该功能模块向你展示怎么获取和播放无人机相机的实时视频画面。
5.1.2 关键类描述
VideoOpenGLView
视频渲染视图类
VideoStreamPlayManager
实时视频流播放器管理类(单例)
5.1.3 使用说明
添加视频渲染页面,进行页面布局。
lazy var videoPlayView : VideoOpenGLView = {
let view = VideoOpenGLView.init()
return view
}()
view.addSubview(videoPlayView)
videoPlayView.snp.makeConstraints { (make) in
make.edges.equalToSuperview()
}
开始视频渲染接口。
VideoStreamPlayManager.sharedInstance().setPlayView(to: videoPlayView)
停止视频渲染接口。
VideoStreamPlayManager.sharedInstance().stopPlayAndRemoveView()
实时视频流分辨率宽高比变化回调接口。
VideoStreamPlayManager.sharedInstance().ratioHandle = { [weak self] ratio in
GCDUtils.main {
self?.updatePlayerView(ratio)
}
}
获取实时视频流分辨率参数。
let size = VideoStreamPlayManager.sharedInstance().renderAspectRatio
过爆提示开关参数。
VideoStreamPlayManager.sharedInstance().showOverExpose = true /// 开启或关闭过爆提示,默认关闭
获取视频画面渲染类型参数。
视频画面宽高比为16:9时,renderType设置为:scaleAspectFill,其他情况设置为scaleAspectFit
let renderType = VideoStreamPlayManager.sharedInstance().renderType
更多VideoStreamPlayManager和VideoOpenGLView的用法见ATConsoleViewController和BaseVideoViewController这两个类。
5.2 地图显示⻚面

5.2.1 功能描述
地图界面提供街道地图、GPS及混合地图展示功能,提供方向锁定、定位到我的位置或home点功能,提供是否显示禁飞区功能,显示⻜行器实时的地图位置和⻜行轨迹。
5.2.2 关键类描述
ATBaseMapViewController
地图展示控制器类
ATMapManager
地图管理类
ATMapDrawManager
地图绘制管理类
ATNoFlyZoneManager
ATNoFlyZoneViewModel
禁飞区数据管理类和禁飞区数据模型类
AutelLocationDelegate
/** 定位权限变化回调 */
func locationManager(didChangeAuthorization status: CLAuthorizationStatus)
/** 定位更新回调 */
func locationManager(didUpdateLocations locations: [CLLocation])
/** heading变化回调 */
func locationManager(didUpdateHeading newHeading: CLHeading)
/** 定位错误信息 */
func locationManager(didFinishDeferredUpdatesWithError error: Error?)
/** 检测是否获取到定位 */
func locationManager(didFailWithError error: Error)
地图定位代理回调接口,包括:定位权限变化回调、定位更新回调 、地图朝向变化回调、定位错误信息回调、检测是否获取到定位回调。
5.2.3 常用地图功能控件和功能接口
下面介绍地图支持的常用功能控件和功能接口,包括:
支持地图类型切换控件
ATMapSettingView.mapTypesView
支持显示或隐藏飞行轨迹航线控件
ATMapSettingView.mapTypesView
API: ATMapManager.manager.setting.isShowFlightRoute
支持实时更新飞机位置、home点位置接口
ATMapDrawManager
func updateHomeLocation(_ coordnidate: CLLocationCoordinate2D)
func updateDroneLocation(_ coordinate: CLLocationCoordinate2D)
支持定位到我的位置、飞行器位置接口
func mapLocateAround(_ type:ATMapLocateAroundType)
支持禁飞区、限高区显示控件
ATMapDrawManager.limitUpdateNoFlyZone
更新手机机头朝向接口
mapManager.headingUpdateObservable
5.2.4 ATMapManager描述
ATMapManager 是地图管理类,管理当前地图对象的所有功能,可在ATBaseMapViewController控制器上展示。
ATMapManager提供定位权限、位置更新、机头朝向改变等代理功能。
ATMapManager管理地图手机定位、飞机位置展示。
ATMapManager内置禁飞区请求及展示功能。
ATMapDrawManager.limitUpdateNoFlyZone
5.3 ⻜行参数状态栏控件集合

5.3.1 功能描述
⻜行参数状态栏展示怎么获取和更新飞行状态信息,包括飞行状态、飞行速度、高度、当前电池电量等。
5.3.2 类描述
ATFlyNavigationView
描述:
支持档位状态、设备状态;硬件信息包括GPS信号强度、图传信号强度、电池电量百分比、剩余飞行时间、视觉避障部件显示。
ATFlyInfoView
描述:
支持飞行水平速度、垂直速度、飞行距离、飞行高度部件显示。
5.4 相机控制面板和参数设置面板

该功能模块向你展示相机拍摄、录像,参数设置功能
5.4.1 相机控制面板
5.4.1.1 功能描述
- 支持拍照、录像模式切换
- 支持拍照功能
- 支持录像功能
- 支持相册预览入口
ATConsoleRightControlView
相机模式切换控制面板,demo中有两种模式可以切换,分别是拍照和录像
5.4.2 相机参数设置面板
5.4.2.1 功能描述
支持拍照参数设置:拍照模式、拍照格式、图片分辨率、白平衡
支持录像参数设置:视频分辨率、帧率、视频格式、视频编码
ATCamaraSettingViewController
枚举 CameraMenuBranch列举了具体可以设置的相机参数菜单,若需要使用其他相机请查阅此枚举。
enum CameraMenuBranch {
case photoFormat = "PhotoFormat"
case videoFormat = "VideoFormat"
.......
}
demo 所展示的拍照设置和录像设置面板分别为类ATPhotoModeSettingView,ATVideoModeSettingView。
目录位置为:

5.4.2.2 类描述
相机参数设置功能重点使用的类如下:
ATPhotoModeSettingView
相机拍照设置面板
ATVideoModeSettingView
相机录像设置面板
CameraParametersSetter
相机参数设置接口类
CameraParametersGetter
相机参数获取接口类
CameraMenuItem
相机菜单类
CameraMenuItemPicker
相机菜单子菜单可选项获取类
CameraSelection
相机参数缓存类
5.4.2.3 相机参数各个类关系
ATPhotoModeSettingView、ATVideoModeSettingView为用户展示了如何通过使用相机接口对相机参数进行获取与设置。
CameraParametersSetter、CameraParametersGetter是对相机参数设置和获取接口的封装,并在获取和设置相机参数时通过CameraSelection对相机参数进行存储。
CameraMenuItem 是对相机参数设置的抽象,将相机菜单与子菜单通过链式的方式关联在一起。
CameraMenuItemPicker 是辅助管理相机菜单类,可以通过它获取相机菜单的子菜单。
5.5 姿态球显示控件

5.5.1 功能描述
姿态球用于显示飞机位置、返航点位置、我的位置、速度、高度、距离。
5.5.2 类描述
AircraftAttitudeBallView
描述:
姿态球展示飞机、home点、遥控器相对方向和位置,中心点为home点,N指示正北方位,方向的参照物为手机朝向。
姿态球中间灰色部分代表飞机当前倾斜姿态,倾斜角度为飞机当前倾斜角度,水平代表飞机无倾斜。
姿态球代表距离范围为0 - 500m,超过500m后飞机会保持在姿态球边界。
5.6 一键起⻜、一键降落控件

5.6.1 功能描述
一键起飞、降落部件使得可以在App上操作无人机的起飞和降落。
5.6.2 类描述
ATTakeOffLandingView
描述:
控制无人机起飞和降落类。
5.7 无人机飞行状态页面

5.7.1 功能描述
飞行状态页面展示了怎样实时监听无人机连接状态、飞行模式、视觉状态,遥控器状态,无人机电池状态,电池温度,云台状态,SD卡状态,机载闪存状态,并进行数据处理后展示。
5.7.2 类描述
AircraftStatusViewController
飞行状态页面控制器类,该类监听SDK上报飞行状态数据,包括飞控、视觉、相机、云台、电池,把无人机的当前状态实时显示出来。
AircraftStatusParameters
飞行状态数据参数模型类,该类把SDK上报的飞行状态转换成界面显示的数据模型。
5.8 云台⻆度调整控件

5.8.1 功能描述
长按图传界面,会显示云台角度调整部件,通过上下拖动,调整云台角度上移或下移。
5.8.2 类描述
ATConsoleGimbalSpeedView
云台⻆度调整部件,只能上下调整,不能左右调整。
5.9 变焦调整控件件

5.9.1 功能描述
长按该按钮显示缩放视图,轻按该按钮重置。
5.9.2 类描述
ATCameraZoomView
描述:
变焦调整部件,变焦倍数从1~8倍。
5.10 相册预览⻚面
5.10.1 功能描述
相册预览⻚面可以查看和下载照⽚和视频。具体功能包括相机文件预览、播放、下载、删除功能,也可以查看手机本地相册的视频和照片。
本地相册:手机系统相册

ATAlbumViewController
5.10.2 类描述
ATMediaDataManager
图片、视频管理类(单例)
ATMediaDownloader
文件下载管理类
5.10.3 详细接口使用说明
设置存储类型
设置存储类型ATAlbumStoreType为sdCard,拉取相册列表、下载、删除等操作的文件为sdCard内的文件。同理,设置为flash,local,对应操作的为机载闪存和手机系统相册的文件内容。
func switchDidChange(index: Int) {
guard let type = ATAlbumStoreType(rawValue: index) else {
return
}
ATMediaDataManager.shared.storeType = type
collectionView.mj_header?.beginRefreshing()
}
获取默认存储类型
func setupSwitchView() {
let defautIndex = ATMediaDataManager.shared.defaultType.rawValue
switchView.setTitleArray(titleArray: ["ATAlbumSDCard".fLocal("ATAlbum"),
"ATAlbumAirborneFlashMemory".fLocal("ATAlbum"),
"ATAlbumLocal".fLocal("ATAlbum")], selectIndex: defautIndex)
switchView.delegate?.switchDidChange(index: defautIndex)
}
获取首张相册文件缩略图
ATMediaDataManager.shared.getFirstThumbImage(completion: {[weak self] (image) in
if image != nil {
/// 缩略图获取成功
}
})
获取相册文件列表
文件类型可选:全部、照片、视频
页:获取第几页相册列表
单页数量:最大50
ATMediaDataManager.shared.getFileList(with: .all, offset: pageIndex == 0 ? 0 : allMediaItems.count, count: pageCount) {[weak self] (result) in
switch result{
case let .success(medias):
self.configMediaItems(medias)
case let .failure(error):
self.configMediaItems([])
}
}
下载单个相册文件
resoType:清晰度,low、high、original
ATMediaDataManager.shared.startDownload(media: media, resoType: .original) { result in }
下载一组相册文件
ATMediaDataManager.shared.downloadOriginal(medias: medias) /// medias 通过获取相册列表请求返回
播放视频前下载缩略视频内容
ATMediaDataManager.shared.fetchPlayerItem(media: media) {(result) in
GCDUtils.main {
switch result{
case let .success(item):
playerView.setPlayerItem(item)
playerView.player?.uniqueID = media.uniqueID
playerView.player?.play()
case let .failure(error):
ToastManager.shared.show(title: error.localizedDescription)
}
}
}
取消下载
ATMediaDataManager.shared.cancelDownload()
全部取消下载
移除下载队列中所有任务并取消下载
ATMediaDataManager.shared.cancelAllDownload()
删除一组相册文件
ATMediaDataManager.shared.delete(medias: medias, progress: progressHandler) { result in
GCDUtils.main {
completionHandler?()
switch result{
case let .success(medias):
self.removeItems(medias: medias)
self.showSuccessAlert()
case .failure(_):
self.showFailedAlert()
}
}
}
取消删除
ATMediaDataManager.shared.cancelDelete()
获取本地相册缩略图地址
let path = ATMediaDataManager.shared.fetchThumbImagePath(media: media)
获取本地相册原文件地址
let path = ATMediaDataManager.shared.fetchOriginalImagePath(media: media)
下载进度、速度、完成情况回调
let downloader = ATMediaDataManager.shared.downloader
downloader.progressHandler = {[weak progressView, weak pop] count,progress in
GCDUtils.main {
progressView?.update(progress)
countTitle = String(format: "ATAlbumDownloading".fLocal("ATAlbum"), count + 1,mediasCount)
pop?.viewModel.title = countTitle + speedTitle
pop?.update()
}
}
downloader.speedHandler = {[weak pop] speed in
GCDUtils.main {
speedTitle = ": " + speed + "\n\n" + "ATAlbumDownloadSpeedLow".fLocal("ATAlbum")
pop?.viewModel.title = countTitle + speedTitle
pop?.update()
}
}
downloader.completionHandler = { [weak self,weak pop] error in
GCDUtils.main {
pop?.hide(animiated: true)
if error != nil{
self?.showSuccessAlert(false)
}else{
self?.showFailedAlert(false)
}
}
}
5.11 飞机参数设置页面
5.11.1 功能描述

该功能模块展示了无人机常用的参数设置,包括:
支持飞控参数设置
- 支持调整飞行器高度限制
- 支持调整飞行器距离限制
- 支持调整飞行器返航高度
- 支持打开、关闭避障开关等
- 支持电池参数设置
支持云台和遥控器参数设置
- 支持云台模式切换
- 支持云台朝向设置
- 支持云台仰视开启关闭
- 支持遥控器遥感模式切换
支持相机通用参数设置
- 支持直方图开启关闭
- 支持过曝提示打开关闭
- 支持透雾打开关闭
- 支持存储信息获取与格式化
支持图传参数设置
- 支持图传清晰度设置
- 支持图传频段设置
支持飞机版本信息等展示
- 支持各模块序列号展示
- 支持各模块固件版本展示
demo 中目录的位置:

5.11.2 类描述
ATSettingsMainViewController
飞机参数设置页面主页面类
ATSettingsSafeViewController
飞控参数设置页面类
ATSettingsControlViewController
云台/遥控器参数设置页面类
ATSettingsDSPViewController
图传参数设置页面类
ATSettingsShootingViewController
相机通用参数设置页面类
ATSettingsAboutViewController
设备固件版本展示页面类