Skip to main content

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封装的基础功能库,提供一些工具类,基础控件,基础组件如地图组件等

frameworks

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

AutelSDKFrameworks

4.2 导入AutelFramework

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

AutelUXFramework

注意: 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

更多VideoStreamPlayManagerVideoOpenGLView的用法见ATConsoleViewController和BaseVideoViewController这两个类。

5.2 地图显示⻚面

Waypointfly2

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 ⻜行参数状态栏控件集合

Flyparameter

5.3.1 功能描述

⻜行参数状态栏展示怎么获取和更新飞行状态信息,包括飞行状态、飞行速度、高度、当前电池电量等。

5.3.2 类描述

ATFlyNavigationView
描述:

支持档位状态、设备状态;硬件信息包括GPS信号强度、图传信号强度、电池电量百分比、剩余飞行时间、视觉避障部件显示。

ATFlyInfoView
描述:

支持飞行水平速度、垂直速度、飞行距离、飞行高度部件显示。

5.4 相机控制面板和参数设置面板

camera

该功能模块向你展示相机拍摄、录像,参数设置功能

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 所展示的拍照设置和录像设置面板分别为类ATPhotoModeSettingViewATVideoModeSettingView

目录位置为:

![cameraSetting Directory](./image/cameraSetting Directory.png)

5.4.2.2 类描述

相机参数设置功能重点使用的类如下:

ATPhotoModeSettingView 

相机拍照设置面板

ATVideoModeSettingView  

相机录像设置面板

CameraParametersSetter 

相机参数设置接口类

CameraParametersGetter 

相机参数获取接口类

CameraMenuItem 

相机菜单类

CameraMenuItemPicker 

相机菜单子菜单可选项获取类

CameraSelection 

相机参数缓存类

5.4.2.3 相机参数各个类关系

ATPhotoModeSettingViewATVideoModeSettingView为用户展示了如何通过使用相机接口对相机参数进行获取与设置。

CameraParametersSetterCameraParametersGetter是对相机参数设置和获取接口的封装,并在获取和设置相机参数时通过CameraSelection对相机参数进行存储。

CameraMenuItem 是对相机参数设置的抽象,将相机菜单与子菜单通过链式的方式关联在一起。

CameraMenuItemPicker 是辅助管理相机菜单类,可以通过它获取相机菜单的子菜单。

5.5 姿态球显示控件

ball

5.5.1 功能描述

姿态球用于显示飞机位置、返航点位置、我的位置、速度、高度、距离。

5.5.2 类描述

AircraftAttitudeBallView
描述:

姿态球展示飞机、home点、遥控器相对方向和位置,中心点为home点,N指示正北方位,方向的参照物为手机朝向。

姿态球中间灰色部分代表飞机当前倾斜姿态,倾斜角度为飞机当前倾斜角度,水平代表飞机无倾斜。

姿态球代表距离范围为0 - 500m,超过500m后飞机会保持在姿态球边界。

5.6 一键起⻜、一键降落控件

Takeoff

5.6.1 功能描述

一键起飞、降落部件使得可以在App上操作无人机的起飞和降落。

5.6.2 类描述

ATTakeOffLandingView
描述:

控制无人机起飞和降落类。

5.7 无人机飞行状态页面

飞行状态

5.7.1 功能描述

飞行状态页面展示了怎样实时监听无人机连接状态、飞行模式、视觉状态,遥控器状态,无人机电池状态,电池温度,云台状态,SD卡状态,机载闪存状态,并进行数据处理后展示。

5.7.2 类描述

AircraftStatusViewController

飞行状态页面控制器类,该类监听SDK上报飞行状态数据,包括飞控、视觉、相机、云台、电池,把无人机的当前状态实时显示出来。

AircraftStatusParameters

飞行状态数据参数模型类,该类把SDK上报的飞行状态转换成界面显示的数据模型。

5.8 云台⻆度调整控件

ATFlyGimbal

5.8.1 功能描述

长按图传界面,会显示云台角度调整部件,通过上下拖动,调整云台角度上移或下移。

5.8.2 类描述

ATConsoleGimbalSpeedView

云台⻆度调整部件,只能上下调整,不能左右调整。

5.9 变焦调整控件件

ATFlyGimbal

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 功能描述

系统设置

该功能模块展示了无人机常用的参数设置,包括:

支持飞控参数设置

  • 支持调整飞行器高度限制
  • 支持调整飞行器距离限制
  • 支持调整飞行器返航高度
  • 支持打开、关闭避障开关等
  • 支持电池参数设置

支持云台和遥控器参数设置

  • 支持云台模式切换
  • 支持云台朝向设置
  • 支持云台仰视开启关闭
  • 支持遥控器遥感模式切换

支持相机通用参数设置

  • 支持直方图开启关闭
  • 支持过曝提示打开关闭
  • 支持透雾打开关闭
  • 支持存储信息获取与格式化

支持图传参数设置

  • 支持图传清晰度设置
  • 支持图传频段设置

支持飞机版本信息等展示

  1. 支持各模块序列号展示
  2. 支持各模块固件版本展示

demo 中目录的位置:

image-20220715161722468

5.11.2 类描述

ATSettingsMainViewController

飞机参数设置页面主页面类

ATSettingsSafeViewController

飞控参数设置页面类

ATSettingsControlViewController

云台/遥控器参数设置页面类

ATSettingsDSPViewController

图传参数设置页面类

ATSettingsShootingViewController

相机通用参数设置页面类

ATSettingsAboutViewController

设备固件版本展示页面类