1、概述
本教程的目的在于助力您理解AUTELMobileSDK(下称MSDK)的相关功能,以及掌握其相关接口的使用方法。MSDK涵盖了与飞机各个模块进行通信的服务,这些模块主要包括通用模块、飞行任务模块、AI服务模块、相机模块、飞行控制模块、飞行参数模块、云台模块、视觉模块以及图传模块。此外,它还提供了对飞机连接状态的监听功能,以及遥控器模块的相关功能。下面将为您讲解在开发过程中如何运用这些功能。
2、Android Studio 配置⼯程
新建⼀个Android⼯程,然后导⼊aar包,将aar包复制到⼯程的libs⽬录下
repositories {
flatDir {
dirs 'libs'
}
}
在build.gradle中添加以下代码,其它相关依赖可参考GitHub示例程序
implementation(name: 'autel-sdk-release', ext: 'aar')
基础权限申请,在AndroidManifest.xml文件中添加以下元素
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
3、快速开始
3.1 初始化MSDK及参数说明
SDKManager.get().init(applicationContext, sdkInitConfig)
param1:上下文对象,使用Application context;
param2:MSDK配置参数,使用 SDKInitConfig,详见如下:
class SDKInitConfig {
/**
* Debug模式
*/
var debug: Boolean = false
/**
* 数据存储接口
*/
var storage: IAutelStorage? = null
/**
* 日志打印接口
*/
var log: IAutelLog? = null
/**
* 播放器渲染模式
* RenderNone: 播放器内部不会解码/渲染
* RenderWithSurface:高效渲染模式,将Surface与解码器绑定,然后通过OpengGL渲染,
* 使用该模式即使设置了回调函数,也无法回调YUV数据
* RenderWithYUV:播放器内部解码器会解出YUV帧数据进行渲染,如果外部需要获取YUV数据,
* 必须设置该模式,onFrameYuv才会触发
*/
var renderMode : RenderMode ?= RenderMode.RenderWithYUV;
/**
* 龙鱼需要设置为false(龙鱼默认为组网版本)
*/
var single: Boolean? = false
/**
* 龙鱼系列需要设置为true(龙鱼及龙鱼基站支持)
*/
var bSupportBaseStation: Boolean? = true
}
3.2 KeyManager相关介绍
3.2.1 设备的获取
通过 DeviceManager 可以获取我们要操作的各种设备
//遥控器设备
val remoterDevice = DeviceManager.getDeviceManager().getFirstRemoteDevice()
//无人机设备
val droneDevice = DeviceManager.getDeviceManager().getFirstDroneDevice()
//Wifi基站设备
val baseStationDevice = DeviceManager.getDeviceManager().getBaseStationDevice()
3.2.2 AutelKey接口定义
AutelKey作为MSDK统一接口定义形式,MSDK提供了大量的Key接口定义(详见KeyValue使用文档),Key以下属性决定接口可以进行何种操作,一些Key支持混合操作
canSet(true) //表示Key对应属性可设置
canGet(true) //表示Key对应属性可获取
canPerformAction(true) //表示Key具有Action的能力
canListen(true) //表示Key可监听
setFrequencyReport(true) //可定频上报,无请求结果Ack
AutelKey实例化工具KeyTools:
val createKey = KeyTools.createKey(CameraKey.KeyCameraDeviceInfo)
//相机多镜头场景,某些接口可以指定具体镜头
val key = KeyTools.createLensKey(CameraKey.KeyApertureSize, LensTypeEnum.WideAngle)
3.2.3 KeyManager的获取
KeyManager是我们用来处理 AutelKey 请求管理器
val dKeyManager = DeviceManager.getDeviceManager().getFirstRemoteDevice()?.getKeyManager()
val rKeyManager = DeviceManager.getDeviceManager().getFirstDroneDevice()?.getKeyManager()
val bKeyManager = DeviceManager.getDeviceManager().getBaseStationDevice()?.getKeyManager()
3.2.4 KeyManager getValue接口
一般是用来获取飞机上的某个属性,以获取相机设备信息为例:
val key = KeyTools.createKey(CameraKey.KeyCameraDeviceInfo)
DeviceManager.getDeviceManager().getFirstDroneDevice()?.getKeyManager()?.getValue(key,
object : CommonCallbacks.CompletionCallbackWithParam<DeviceInfoBean> {
override fun onSuccess(t: CameraDeviceInfoBean?) {}
override fun onFailure(error: IAutelCode, msg: String?) {}
})
3.2.5 KeyManager setValue接口
一般是给飞机设置某个属性,以设置相机工作模式为例:
val key = KeyTools.createKey(CameraKey.KeyCameraWorkMode)
val param = CameraWorkModeEnum.PHOTO
DeviceManager.getDeviceManager().getFirstDroneDevice()?.getKeyManager()?.setValue(key,param, object : CommonCallbacks.CompletionCallback {
override fun onSuccess() {}
override fun onFailure(code: IAutelCode, msg: String?) {}
})
3.2.6 KeyManager performAction接口
一般是执行某个动作或者命令,以开始拍照为例:
val key = KeyTools.createKey(CameraKey.KeyStartTakePhoto)
DeviceManager.getDeviceManager().getFirstDroneDevice()?.getKeyManager()?.performAction(key, null,
object : CommonCallbacks.CompletionCallbackWithParam<Void> {
override fun onSuccess(t: Void?) {}
override fun onFailure(code: IAutelCode, msg: String?) {}
})
3.2.7 KeyManager setFrequencyReport 接口
App可以定频向设备上报信息,上报消息不需要Ack确认,以RTK上报飞机为例:
private val rtkSendKey = KeyTools.createKey(RtkPropertKey.KeyRTKRtcmSent)
val bean = RtkRtcmDataBean()
DeviceManager.getDeviceManager().getFirstDroneDevice()?.getKeyManager()?.setFrequencyReport(rtkSendKey, bean)
3.2.8 KeyManager listen 接口
用来监听设备上报消息;上报消息分为定频上报(5HZ/2HZ/1HZ)和变化时上报,以相机专业参数信息定频上报为例:
val key = KeyTools.createKey(CameraKey.KeyProfessionalParamInfo)
val callback = object : CommonCallbacks.KeyListener<ProfessionalParamInfoBean> {
override fun onValueChange( oldValue:ProfessionalParamInfoBean?, newValue:ProfessionalParamInfoBean) {}
}
DeviceManager.getDeviceManager().getFirstDroneDevice()?.getKeyManager()?.listen(key, callback)
3.2.9 KeyManager cancelListen 接口
当业务不需要监听消息后需要取消监听,否则会出现内存泄漏相关问题,以相机专业参数信息上报为例:
val key = KeyTools.createKey(CameraKey.KeyProfessionalParamInfo)
val callback = object : CommonCallbacks.KeyListener<ProfessionalParamInfoBean> {
override fun onValueChange(oldValue:ProfessionalParamInfoBean?,newValue:ProfessionalParamInfoBean) {}
}
DeviceManager.getDeviceManager().getFirstDroneDevice()?.getKeyManager()?.cancelListen(key, callback)
3.3 飞机状态监听
无人机有存在各种状态,业务层需要确认各种状态正常后,才能进行相应的操作
DeviceManager.getDeviceManager().addDroneListener(this)
DeviceManager.getDeviceManager().removeDroneListener(this)
监听接口说明
interface IAutelDroneListener {
/**
* 无人机设备连接状态的监听器
*
* @param connected 已连接 - is connected
* @param drone 无人机装置 - drone device
*/
fun onDroneChangedListener(connected: Boolean, drone: IAutelDroneDevice)
/**
* 无人机主服务是否可用,一般来说无人机可以相应请求
* @param valid true 可用,false 不可用
* @param drone drone device
*/
fun onMainServiceValid(valid: Boolean, drone: IAutelDroneDevice) {}
/**
*无人机相机能力集变更通知
* @param localFetched true 本地能力集解析成功
* @param remoteFetched true 远程能力集解析成功
*/
fun onCameraAbilityFetchListener(localFetched: Boolean, remoteFetched: Boolean, drone: IAutelDroneDevice){}
/**
* 无人机设备创建
* @param drone drone device
*/
fun onDroneCreate(drone: IAutelDroneDevice){}
/**
* 无人机设备销毁
* @param drone drone device
*/
fun onDroneDestroy(drone: IAutelDroneDevice){}
3.4 无人机与遥控器对频连接
无人机与飞机需要对频才能建立连接,如果需要多机组网可参考组网教程,无人机一般双击电源键进入对频状态。
遥控器通过以下接口进入对频:
val matchKey = KeyTools.createKey(AirLinkKey.KeyALinkStartMatching)
DeviceManager.getDeviceManager().getLocalRemoteDevice().getKeyManager().performAction(matchKey, null, object : CommonCallbacks.CompletionCallbackWithParam<Void> {
override fun onSuccess(t: Void?) { }
override fun onFailure(error: IAutelCode, msg: String?) {}
})
对频状态监听:
val listenCallBack: CommonCallbacks.KeyListener<AirLinkMatchStatusEnum> = object : CommonCallbacks.KeyListener<AirLinkMatchStatusEnum> {
override fun onValueChange(oldValue: AirLinkMatchStatusEnum?, newValue: AirLinkMatchStatusEnum) {
AutelLog.i(AppTagConst.MatchTag, "keyLinkMatch -> $newValue")
}
}
DeviceManager.getDeviceManager().getLocalRemoteDevice().getKeyManager().listen(KeyTools.createKey(AirLinkKey.KeyALinkMatchingStatus), listenCallBack)
3.5 获取相机能力集相关信息
相机能力集是无人机上云台及相机的相关配置信息接口,通过以下接口我们能获取云台相机镜头配置信息
val cameraAbility =DeviceManager.getFirstDroneDevice()?.getCameraAbilitySetManger()
相机支持能力集是指:当前相机及镜头具备哪些能力,支持参数配置范围等
val cameraSupport =DeviceManager.getFirstDroneDevice()?.getCameraAbilitySetManger()?.getCameraSupport2()
interface ICameraSupport2 {
/**
* 返回当前支持的有效视频分辨率和帧率列表
* @param lensType lens type enum
* @param flightMode flight mode enum
* @param modeEnum recording mode enum
* @return video resolution frame data list
*/
fun getResolutionAndFrameRate(
lensType: LensTypeEnum,
flightMode: FightModeEnum?,
modeEnum: RecordModeEnum?
): List<VideoResolutionFrameBean>
/**
* 返回支持HDR对应的相片分辨率列表
* @param lensType lens type enum
* @param flightMode flight mode enum
* @param photoFormat photo output format enum
* @param modeEnum camera mode enum
* @return list of all photo resolution list
*/
fun getHDRSupportPhoto(
lensType: LensTypeEnum,
flightMode: FightModeEnum,
photoFormat: PhotoFormatEnum,
modeEnum: CameraModeEnum
): List<PhotoResolutionEnum>
/**
* 返回当前有效的相机模式(CameraModeEnum).
* @param lensType lens type enum
* @param flightMode flight mode enum and by default manual
* @param modeEnum take photo mode enum and by default unknown
* @return camera mode list
*/
fun getCameraModeRange(
lensType: LensTypeEnum,
flightMode: FightModeEnum,
modeEnum: TakePhotoModeEnum
): ArrayList<CameraModeEnum>
/**
* 返回手动变焦的 min max step的数值范围 "Default": {"Min": 1,"Max": 50,"Step": 1 }
* @param lensType lens type enum
* @return range with min, max and step value
*/
fun getManualFocus(
lensType: LensTypeEnum
): RangeStepIntValue?
/**
* 返回相机变焦的尺寸
* @param lensType lens type enum
* @return range with min, max and step value
*/
fun getPhotoZoom(
lensType: LensTypeEnum,
videoZoomType: VideoZoomTypeEnum
): RangeStepValue?
/**
* 返回视频变焦的尺寸
* @param lensType lens type enum
* @param videoZoomType video zoom type and by default as Default enum
* @return range with min, max and step value
*/
fun getVideoZoom(
lensType: LensTypeEnum,
videoZoomType: VideoZoomTypeEnum
): RangeStepValue?
/**
* 返回水印和时间戳的取值列表
* @param lensType lens type enum
* @param photoFormat photo output format enum
* @return time stamp in integer value
*/
fun getWatermarkTimestamp(
lensType: LensTypeEnum,
photoFormat: PhotoFormatEnum
): Int
/**
* 返回当前有效的相机曝光模式(ExposureModeEnum).
* @param lensType lens type enum
* @return Exposure modes in list
*/
fun getExposureModeRange(
lensType: LensTypeEnum
): ArrayList<ExposureModeEnum>
/**
* 返回当前有效的曝光补偿范围(ExposureExposureCompensationEnum).
* @param lensType lens type enum
* @return exposure compensations in list
*/
fun getExposureCompensationRange(
lensType: LensTypeEnum
): ArrayList<ExposureExposureCompensationEnum>
/**
* 返回当前有效的相机ISO范围 (ImageISOEnum).
* @param lensType lens type enum
* @param isPhoto photo or not defined with boolean
* @param pattern camera pattern enum and by default Manual flight
* @param modeEnum Take photo mode enum by default Unknown
* @return image ISO enums list
*/
fun getImageISOList(
lensType: LensTypeEnum,
isPhoto: Boolean,
pattern: Int = PatternModeEnum.MANUAL.value,
modeEnum: TakePhotoModeEnum
): ArrayList<ImageISOEnum>
/**
* 返回当前有效的相机ISO模式列表 (ISOModeEnum).
* @param lensType lens type enum
* @return image ISO enums list
*/
fun getPhotoISOModeRange(
lensType: LensTypeEnum
): List<ISOModeEnum>
/**
* 返回当前有效的相机ISO模式列表 (ISOModeEnum).
* @param lensType lens type enum
* @return ISOModeEnum list
*/
fun getVideoISOModeRange(
lensType: LensTypeEnum
): List<ISOModeEnum>
/**
* 返回当前有效的相机快门速度范围
* @param lensType lens type enum
* @param isPhoto photo or not
* @param modeEnum take photo mode enum and by default unknown
* @return ShutterSpeedEnums list
*/
fun getShutterList(
lensType: LensTypeEnum,
isPhoto: Boolean,
fps: Int,
modeEnum: TakePhotoModeEnum
): ArrayList<ShutterSpeedData>
/**
* 返回当前相机光圈可设置的范围
* @param lensType lens type enum
* @return Lris enum list
*/
fun getApertureRange(
lensType: LensTypeEnum
): List<Double>
/**
* 返回当前相机视频格式可选择的范围
* @param lensType lens type enum
* @return video format enum list
*/
fun getVideoFileFormatRange(
lensType: LensTypeEnum
): List<VideoFormatEnum>
/**
* 返回当前相机录像时拍照间隔的可选择的范围
* @param lensType lens type enum
* @return video piv enum list
*/
fun getPicInVideoIntervalRange(
lensType: LensTypeEnum
): List<VideoPivEnum>
/**
* 返回当前相机视频标准可选择的范围
* @param lensType lens type enum
* @return video standard
*/
fun getVideoStandardRange(
lensType: LensTypeEnum
): List<VideoStandardEnum>
/**
* 返回当前相机拍照图片格式可选择范围.
* @param lensType lens type enum
* @param modeEnum take photo mode state
* @return photo formatted enum list
*/
fun getPhotoFileFormatRange(
lensType: LensTypeEnum,
modeEnum: TakePhotoModeEnum,
photoResolution: PhotoResolutionEnum
): List<PhotoFormatEnum>
/**
* 返回当前相机快拍张数可选择范围
* @param lensType lens type enum
* @return count list send
*/
fun getPhotoBurstCountRange(
lensType: LensTypeEnum
): List<Int>
/**
* 返回当前相机AEB拍摄张数可选择范围.
* @param lensType lens type enum
* @return photo count list send
*/
fun getPhotoAEBCaptureCountRange(
lensType: LensTypeEnum
): List<Int>
/**
* 返回当前相机定时拍摄时间可选择范围.
* @param lensType lens type enum
* @return lens type list
*/
fun getPhotoIntervalParamRange(
lensType: LensTypeEnum
): List<Int>
/**
* 返回当前相机白平衡可选择范围.
* @param lensType lens type enum
* @return white balances enum list
*/
fun getWhiteBalanceList(
lensType: LensTypeEnum
): ArrayList<WhiteBalanceEnum>
/**
* 返回当前相机白平衡自定义色温值范围.
* @param lensType lens type enum
* @return range step int value
*/
fun getCustomColorTemperatureRange(
lensType: LensTypeEnum
): RangeStepIntValue?
/**
* 返回当前相机透雾模式范围.
* @param lensType lens type enum
* @return defog mode enum list
*/
fun getDehazeModeRange(
lensType: LensTypeEnum
): List<DefogModeEnum>
/**
* 返回当前相机透雾使能状态可选择范围.
* @param lensType lens type enum
* @return defog mode enum list
*/
fun getDehazeSettingSwitchRange(
lensType: LensTypeEnum
): List<DefogEnum>
/**
* 返回当前相机透雾使能状态可选择范围.
* @param lensType lens type enum
* @return defog mode enum list
*/
fun getDehazeSettingSwitchMergeRange(
lensType: LensTypeEnum
): List<DefogEnum>
/**
* 返回当前相机抗闪烁模式可选择范围.
* @param lensType lens type enum
* @return anti flicker range list
*/
fun getAntiFlickerRange(
lensType: LensTypeEnum
): List<Int>
/**
* transferMode 是图传的清晰度: 1 是流畅 720p, 2是高清 1080p, 3是超高清 2.7K
* @param lensType lens type enum
* @return video transmission mode enum list
*/
fun getTransferMode(
lensType: LensTypeEnum
): List<VideoTransMissionModeEnum>
/**
* 返回当前相机图像分辨率可选择范围.
* @param lensType lens type enum
* @param flightMode flight mode enum
* @param modeEnum take photo mode enum and by default unknown
* @return photo resolution enum list
*/
fun getPhotoResolution(
lensType: LensTypeEnum,
flightMode: FightModeEnum,
modeEnum: TakePhotoModeEnum
): List<PhotoResolutionEnum>
/**
* 返回当前相机图像分辨率可选择范围.无对应枚举 返回UNKNOWN后 重新获取相册分辨率列表
* @param lensType lens type enum
* @param flightMode flight mode enum
* @param modeEnum take photo mode enum and by default unknown
* @return photo resolution list
*/
fun getPhotoResolutionTwice(
lensType: LensTypeEnum ,
flightMode: FightModeEnum,
modeEnum: TakePhotoModeEnum
): List<PhotoResolution>
/**
* 回当前相机锐度可选择范围.
* @param lensType lens type enum
* @param modeEnum take photo mode enum and by default unknown
* @return list of integer
*/
fun getSharpnessRange(
lensType: LensTypeEnum,
modeEnum: TakePhotoModeEnum
): List<Int>
/**
* 返回当前相机对比度可选择范围.
* @param lensType lens type enum
* @param modeEnum take photo mode enum and by default unknown
* @return list of integer
*/
fun getContrastRange(
lensType: LensTypeEnum,
modeEnum: TakePhotoModeEnum
): List<Int>
/**
* 返回当前相机饱和度可选择范围.
* @param lensType lens type enum
* @param modeEnum take photo mode enum and by default unknown
* @return list of integer
*/
fun getSaturationRange(
lensType: LensTypeEnum,
modeEnum: TakePhotoModeEnum
): List<Int>
/**
* 返回当前相机对焦模式可选择范围.
* @param lensType lens type enum
* @param modeEnum take photo mode enum and by default unknown
* @return list of integer
*/
fun getLensFocusModeRange(
lensType: LensTypeEnum ,
modeEnum: CameraModeEnum
): List<Int>
/**
* 返回当前相机支持的热成像伪彩信息.
* @param lensType lens type enum
* @return thermal color enum list
*/
fun supportedIrColor(
lensType: LensTypeEnum
): List<ThermalColorEnum>
/**
* 返回热成像图测温模式.
* @param lensType lens type enum
* @return IR temp mode enum
*/
fun getThermalIRTempMode(
lensType: LensTypeEnum
): List<IRTempModeEnum>
/**
* 返回热成像图像模式.
* @param lensType lens type enum
* @return Ir image mode object
*/
fun getThermalIrImageMode(
lensType: LensTypeEnum
): IrImageMode?
/**
* 返回热成像图像增强.
* @param lensType lens type enum
* @return range step int value object
*/
fun getThermalIrImageEnhance(
lensType: LensTypeEnum
): RangeStepIntValue?
/**
* 返回热成像图像去噪.
* @param lensType lens type enum
* @return list of integer
*/
fun getThermalIrNr(
lensType: LensTypeEnum
): MutableList<Int>
/**
* 返回热成像图像去噪.
* @param lensType lens type enum
* @return Ir gain object
*/
fun getIrGain(
lensType: LensTypeEnum
): IrGain?
/**
* 返回热成像等温线.
* @param lensType lens type enum
* @return list of integer
*/
fun getIrIsoThermMode(
lensType: LensTypeEnum
): List<Int>
/**
* 返回热成像温度告警.
* @param lensType lens type enum
* @return IR hot cold value
*/
fun getIrTempAlarm(
lensType: LensTypeEnum
): IRHotColdValue?
/**
* 是否支持红外温宽拉伸
* @param lensType lens type enum
* @return support temp. span weather or not
*/
fun isIrTempSpanEnable(
lensType: LensTypeEnum
): Boolean
/**
* 返回红外温宽拉伸范围
* @param lensType lens type enum
* @return IR temp high low range value
*/
fun getIrTempSpanRange(
lensType: LensTypeEnum
): IRTempSpanValue?
/**
* 返回热成像辐射.
* @param lensType lens type enum
* @return range step int value object
*/
fun getIrNrEmit(
lensType: LensTypeEnum
): RangeStepIntValue?
/**
* 返回当前相机支持的视频文件压缩标准.
* @param lensType lens type enum
* @return video compress standard enum
*/
fun getVideoFileCompressionStandard(
lensType: LensTypeEnum
): List<VideoCompressStandardEnum>
/**
* 返回当前相机支持的存储类型.
* @param lensType lens type enum
* @return storage type enums list
*/
fun getStorageType(
lensType: LensTypeEnum
): List<StorageTypeEnum>
/**
* @return 返回当前类型相机的播放器端口ID.
*/
fun getPlayerID(
lensType: LensTypeEnum
): Int
/**
* @return 镜头是否支持AI
*/
fun getAiServiceEnabled(
lensType: LensTypeEnum
): Boolean
/**
* @param lensType lens type enum
* @return 可切换的Ircut范围列表.
*/
fun getIrcutSwitchRange(
lensType: LensTypeEnum
): List<IrcutSwitchEnum>?
/**
* @return 当前云台是否支持热熔和
*/
fun isSupportFusion(): Boolean
/**
* getting version of camera
*/
fun getVersion(): String
/**
* 相机HFov
*/
fun getHFov(lensType: LensTypeEnum):Float?
/**
* 相机VFov
*/
fun getVFov(lensType: LensTypeEnum):Float?
/**
* 相机FocalLength
*/
fun getFocalLength(lensType: LensTypeEnum):Float?
/**
* 相机 AFAE 锁是否支持
*/
fun isAFAELockSupport(lensType: LensTypeEnum): Boolean
/**
* 相机拍照时间
*/
fun getTakePhotoCostTime(): Int
/**
* 当前镜头是否支持专业参数设置
*/
fun isPROSettingsSupport(lensType: LensTypeEnum): Boolean
/**
* 激光灯模式
*/
fun getLaserLightMode():LaserLightModeEnum
/**
* 镜头是否支持加热除雾功能
*/
fun isLensDehazeSupport(lensType: LensTypeEnum?): Boolean
/**
* 镜头加热除雾最大时长 s
*/
fun getLensDehazeMaxTime(lensType: LensTypeEnum?): Int
}
3.6 飞机状态信息缓存
val status = DeviceManager.getDeviceManager().getFirstDroneDevice()?.getDeviceStateData()
飞机状态信息缓存主要是用来保存飞机的一些重要信息,这些信息也是会不断刷新的,主要是保持在 DroneStateData 中
data class DroneStateData(
var gimbalDataMap: MutableMap<GimbalTypeEnum, GimbalData> = mutableMapOf(),
/** 飞行控制状态*/
var flightControlData: FlightControlData = FlightControlData(),
/** 飞行控制操作get、set缓存数据*/
var flightoperateData: FlightOperateData = FlightOperateData(),
/** rtk缓存数据*/
var rtkControlData: RTKControlData = RTKControlData(),
/** missionManager缓存数据*/
var missionManagerData: MissionManagerData = MissionManagerData(),
/**系统初始化参数*/
var systemInfoData: SystemInfoData = SystemInfoData(),
/** SDCard缓存*/
var sdcardData: SDCardData = SDCardData(),
/** MMC卡缓存*/
var emmcData: EmmcData = EmmcData(),
/**
* 只接收版本的ADS-B上报数据
* */
var adsbReportStateMap: ConcurrentHashMap<String, AirSensePlaneState> = ConcurrentHashMap(),
/**飞控关键参数上报 频率:2HZ*/
var droneKeyInfoData: DroneKeyInfoLFNtfyBean? = null,
/**飞机飞行信息上报(时长、次数等)*/
var droneRuntimeReportBean: DroneRuntimeReportBean? = null,
/**飞机相关信息(sn、version等)*/
var droneInfoData: DroneInfoData = DroneInfoData(),
/**龙鱼相关参数缓存*/
var dragonFishData: DragonFishData = DragonFishData()
)