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
设备固件版本展示页面类