大疆无人机SDK集成项目
本项目主要是集成大疆SDK,并通过大疆API来获取无人机实时传递回来的h264数据,以及通过编解码API拿到YUV数据;
该项目里面封装了一些基础的API调用,方便后续集成调用。
1. 无人机接入准备
2. 编译环境准备
3. 关键代码
4. 项目地址
1. 无人机接入准备
1. 本项目测试机型为大疆的御pro 2,遥控器为不带屏遥控器。(带屏遥控器是无法使用大疆SDK的)
2. 集成使用要点:
* 需先用测试手机下载大疆专用APP (DJI GO 4)软件进行无人机与遥控器之间的对频操作,此时应该注意,每次将手机和无人机进行USB连接时,会弹出默认启动应用弹框,应选择仅次一次;不然后续装上自己的应用后,连上无人机是无法拉起我们自己的应用的。
* 当连接成功,可以正常起飞后,此时在手机端装入自己的应用,启动并执行 DroneModel中的 startRegisterSDK 方法,执行注册大疆SDK。
* 注册成功后,会弹出登录弹框,提示登录大疆账号,此时应填入自己的大疆账号(国内每三个月登录一次,国外不受此限制)
* 接口 setDjiProductStateCallBack 是回调产品数据,当存在产品时,会执行onAirPlaneStateChange(bool)方法,传入参数为true
* 接口 setDroneH264VideoDataCallBack 回调,来获取无人机回传的H264数据,获取H264数据
* 接口 DroneYUVDataCallBack回调,来获取无人机回传的数据,通过CodeManager解码后获取YUV数据
* 方法 videoPreview方法,传入surfaceView,来执行无人机摄像头数据预览
* 方法 setAirPlaneCameraParam方法,来设置无人机摄像头参数,具体参数请查看DJICameraParams类,其中有详细的说明
* DroneModel是单例方法,直接通过getInstance拿到单例对象即可
* FileUtils工具类提供了写入H264流到文件,写出的文件可以直接通过暴风影音来进行播放,查看H264是否正常
2. 编译环境准备
1. 当前编译环境:Android studio 3.2 gradle版本为:3.2.1 gradle-wrapper版本为:4.6
2. 大疆SDK导入 :在当前项目build.gradle 下导入
1. build.gradle 配置
android {
defaultConfig {
……
ndk {
// 这里只做了armeabi-v7a架构的支持,大疆SDK不支持armeabi架构
abiFilters 'armeabi-v7a'
}
}
dexOptions {
javaMaxHeapSize "4g"
}
packagingOptions {
doNotStrip "*/*/libdjivideo.so"
doNotStrip "*/*/libSDKRelativeJNI.so"
doNotStrip "*/*/libFlyForbid.so"
doNotStrip "*/*/libduml_vision_bokeh.so"
doNotStrip "*/*/libyuv2.so"
doNotStrip "*/*/libGroudStation.so"
doNotStrip "*/*/libFRCorkscrew.so"
doNotStrip "*/*/libUpgradeVerify.so"
doNotStrip "*/*/libFR.so"
doNotStrip "*/*/libDJIFlySafeCore.so"
doNotStrip "*/*/libdjifs_jni.so"
doNotStrip "*/*/libsfjni.so"
exclude 'META-INF/rxjava.properties'
}
dependencies {
implementation 'com.android.support:multidex:1.0.2'
implementation('com.dji:dji-sdk:4.9', {
//if your app needn't support Mavic 2 Pro and Mavic 2 Zoom, pls exclude the library-anti-distortion module
//like following
//exclude module: 'library-anti-distortion'
//Uncomment the following line if your APP does not need network RTK.
//For Phantom 4 RTK and Matrice 210 RTK V2. Network RTK can be used as a virtual reference station to provide
//cm level accurate position.
//exclude module: 'library-anti-distortion'
})
compileOnly 'com.dji:dji-sdk-provided:4.9'
}
}
2. AndroidManifest配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.distance.third.dji">
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />