精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Mobile SDK V5版固件開發(fā)大疆無人機手機端遙控器(4)

jf_Vqngj70R ? 來源:美男子玩編程 ? 2023-06-25 12:24 ? 次閱讀

概要

相較與V4版本開發(fā),V5版本有了更方便簡介的方式。V5不僅再功能上與V4增加更多的功能,而且在功能的使用及API的調用也做了優(yōu)化。雖然V5現(xiàn)在很新也在不斷地迭代,但是不免會出現(xiàn)對一些飛行或者遙控器出現(xiàn)bug,大疆的開發(fā)人員也在不斷的完善這整個V5開發(fā)包,已提供更全更優(yōu)的開發(fā)模式。下面是使用V5開發(fā)包進行的大疆無人機飛控系統(tǒng)的開發(fā)過程。

整體架構流程

DJI Mobile SDK V5擁有更加簡潔易用的無人機硬件控制接口和軟件服務接口,開放全開源的生產代碼及 Sample 和豐富的教程,為開發(fā)者提供了具有競爭力的無人機移動端解決方案,極大的提升開發(fā)體驗和效率。現(xiàn)目前所支持的飛機有以下幾種:

Matrice 300 RTKMatrice 30 Series

DJI Mavic 3 Enterprise Series

DJI Mavic 3MDJI Mini 3

DJI Mini 3 Pro

現(xiàn)目前V5 SDK 有下面幾種功能:

參數(shù)獲取和設置:負載參數(shù)設置、無人機參數(shù)設置、負載狀態(tài)監(jiān)聽、無人機狀態(tài)監(jiān)聽。

飛行控制:航點自動飛行、虛擬搖桿飛行、RTK定位配置、Tracking飛行。

應用數(shù)據(jù)處理:實時碼流直播、MOP數(shù)據(jù)通道、媒體文件管理、實時點云數(shù)據(jù)獲取。

更多功能:健康管理、SD卡加密、升級提示、飛行記錄、網(wǎng)絡控制、備份鏈路。

技術細節(jié)

SDK 架構體系概述

Mobile SDK的體系結構被設計為高度可擴展的,其中使用了抽象產品類和組件類,以便應用程序可以使用相同的代碼控制不同的產品。對于一些沒法在不同產品中保持一致性的功能可以在運行時被查詢調用,對于一些能保持一致性的功能則直接可以工作了。

例如,Phantom和Inspire系列產品的絕大多數(shù)功能是一致的。因此,為適配Phantom 4而編寫的應用程序,除Inspire 1的一些獨特功能外,將可以直接在Inspire 1機型上使用。

這也意味著當新產品發(fā)布時,就已經可以與現(xiàn)有的應用程序一起使用了(需要使用支持該新產品的最新SDK)。新產品中的任何新功能都需要添加到應用程序中,但是所有現(xiàn)有功能都不需要做修改了。

層級架構

移動應用程序一般通過下圖所示的幾個主要類來訪問Mobile SDK:

75a643a4-130d-11ee-962d-dac502259ad0.png

SDKManager:MSDK工具包的入口類,管理MSDK的初始化,反初始化,MSDK注冊,以及監(jiān)聽DJI硬件產品的連接事件。

KeyTools / KeyManager:MSDK V5版本使用了以Key為基礎元素的參數(shù)設置和參數(shù)獲取功能接口,KeyTools是創(chuàng)建Key的入口類,KeyManager是調用或者監(jiān)聽Key的入口類,大多數(shù)的功能都可以通過相應的Key來控制,例如控制云臺旋轉或者控制相機拍照、錄像等。

MediaDataCenter:應用數(shù)據(jù)獲取功能的入口類,通過MediaDataCenter可以獲取到原始的碼流數(shù)據(jù)管理類,以及多媒體文件數(shù)據(jù)的管理類。

WaypointMissionManager:航點任務自動飛行的入口類,可以控制無人機基于航點的自主飛行。

VirtualStickManager:虛擬搖桿飛行入口類,可以控制無人機進入虛擬搖桿控制模式,進入此模式之后可以通過實時發(fā)送動作命令的形式控制無人機飛行。

FlightLogManager:飛行日志管理類,可以獲取手機端存儲的日志路徑。

DeviceHealthManager:設備健康管理模塊,通過此類可以實時獲取到設備的健康狀態(tài)以提醒無人機的操縱者。

智能任務

智能任務可以輕松實現(xiàn)飛行自動化。其中基于航點和航點動作定義的航點飛行任務(WaypointMission)可以使無人機沿著定義好的航點和航點動作來自動飛行,使用WaypointMissionManager來控制航點任務的執(zhí)行過程,航點動作和航點任務可以由KMZ文件定義。基于實時命令的虛擬搖桿飛行功能,也可以讓飛機實現(xiàn)自動飛行,開發(fā)者可以基于自己的算法,調用VirtualStickManager中的接口來控制無人機進行自主飛行。

空白項目集成 MSDK

新建空白項目

1、在 Android Studio 啟動頁,選擇 New Project > Phone and Tablet > Empty Activity。

2、完成配置。

Name:My Application Package。

name:com.dji.myapplication。

Minimum SDK:23。

3、compileSdkVersion 和 targetSdkVersion 為 29。

新建 MyApplication.kt 文件

1、新建 MyApplication.kt 文件。

2、參照 MSDK V5 Sample 的 DJIAllApplication 編輯成如下內容。代碼的作用是引入 SDK 的解密加固包。

packagecom.dji.myapplication

importandroid.app.Application
importandroid.content.Context

classMyApplication:Application(){
overridefunattachBaseContext(base:Context?){
super.attachBaseContext(base)
com.secneo.sdk.Helper.install(this)
}
}

修改 build.gradle(Module) 文件

1、在 dependencies 項里添加 MSDK 飛行器包,如只需全量包或手持包請參考 Sample 添加。

implementation"com.dji5.2.0"
implementation"com.dji5.2.0"
compileOnly"com.dji5.2.0"

implementation'com.squareup.okio1.15.0'
implementation'com.squareup.wire2.2.0'
implementation'com.airbnb.android3.3.1'

dji-sdk-v5-aircraft:飛機主包,提供 MSDK 對飛機控制的支持。dji-sdk-v5-networkImp:網(wǎng)絡庫包,為 MSDK 提供聯(lián)網(wǎng)能力。

dji-sdk-v5-aircraft-provided:飛機編譯包,提供飛機包相關接口。

2、在 android 項里添加 packagingOptions。

packagingOptions{
doNotStrip"*/*/libconstants.so"
doNotStrip"*/*/libdji_innertools.so"
doNotStrip"*/*/libdjibase.so"
doNotStrip"*/*/libDJICSDKCommon.so"
doNotStrip"*/*/libDJIFlySafeCore-CSDK.so"
doNotStrip"*/*/libdjifs_jni-CSDK.so"
doNotStrip"*/*/libDJIRegister.so"
doNotStrip"*/*/libdjisdk_jni.so"
doNotStrip"*/*/libDJIUpgradeCore.so"
doNotStrip"*/*/libDJIUpgradeJNI.so"
doNotStrip"*/*/libDJIWaypointV2Core-CSDK.so"
doNotStrip"*/*/libdjiwpv2-CSDK.so"
doNotStrip"*/*/libffmpeg.so"
doNotStrip"*/*/libFlightRecordEngine.so"
doNotStrip"*/*/libvideo-framing.so"
doNotStrip"*/*/libwaes.so"
doNotStrip"*/*/libagora-rtsa-sdk.so"
doNotStrip"*/*/libc++.so"
doNotStrip"*/*/libc++_shared.so"
doNotStrip"*/*/libmrtc_28181.so"
doNotStrip"*/*/libmrtc_agora.so"
doNotStrip"*/*/libmrtc_core.so"
doNotStrip"*/*/libmrtc_core_jni.so"
doNotStrip"*/*/libmrtc_data.so"
doNotStrip"*/*/libmrtc_log.so"
doNotStrip"*/*/libmrtc_onvif.so"
doNotStrip"*/*/libmrtc_rtmp.so"
doNotStrip"*/*/libmrtc_rtsp.so"
}

修改 AndroidManifest.xml 文件

1、參照 Sample 的 AndroidManifest.xml 添加 SDK 需要的最基礎權限。










2、參照 MSDK V5 Sample 的 AndroidManifest.xml 添加 USB 相關權限,為了連接遙控器使用。



3、在 application 標簽下添加 Myapplication 文件的聲明,啟動的時候需要加載。


4、參照 MSDK V5 Sample 的 AndroidManifest.xml 添加 SDK API KEY。用戶需要使用工程中的 AndroidManifest.xml 中的package,前往 開發(fā)者網(wǎng)站 申請 appkey,成功后將appkey替換如下代碼段中的X。本指導中 package=com.dji.myapplication。申請 appkey 時,Package Name 需填寫com.dji.myapplication。


75bdaf9e-130d-11ee-962d-dac502259ad0.png


5、在 activity 標簽下添加 intent-filter 和 meta-data。








修改 MainActivity.kt 文件

添加 MSDK 的 init 函數(shù)即可。

packagecom.dji.myapplication

importandroid.os.Bundle
importandroid.util.Log
importandroidx.appcompat.app.AppCompatActivity
importdji.v5.common.error.IDJIError
importdji.v5.common.register.DJISDKInitEvent
importdji.v5.manager.SDKManager
importdji.v5.manager.interfaces.SDKManagerCallback

classMainActivity:AppCompatActivity(){
privatevalTAG="myApp"

overridefunonCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
registerApp()
}

privatefunregisterApp(){
SDKManager.getInstance().init(this,object:SDKManagerCallback{
overridefunonRegisterSuccess(){
Log.i(TAG,"myApponRegisterSuccess")
}

overridefunonRegisterFailure(error:IDJIError){
Log.i(TAG,"myApponRegisterFailure")
}

overridefunonProductDisconnect(productId:Int){
Log.i(TAG,"myApponProductDisconnect")
}

overridefunonProductConnect(productId:Int){
Log.i(TAG,"myApponProductConnect")
}

overridefunonProductChanged(productId:Int){
Log.i(TAG,"myApponProductChanged")
}

overridefunonInitProcess(event:DJISDKInitEvent,totalProcess:Int){
Log.i(TAG,"myApponInitProcess")
if(event==DJISDKInitEvent.INITIALIZE_COMPLETE){
Log.i(TAG,"myAppstartregisterApp")
SDKManager.getInstance().registerApp()
}
}

overridefunonDatabaseDownloadProgress(current:Long,total:Long){
Log.i(TAG,"myApponDatabaseDownloadProgress")
}
})
}
}

導入 UXSDK 開源框架

1、將 UXSDK 項目(android-sdk-v5-uxsdk)整個復制到myapplication項目路徑的app/libs文件夾下。

2、工具欄點擊 File > New > Import Module,選擇myapplication項目路徑的app/libs文件夾下的android-sdk-v5-uxsdk。

3、修改settings.gradle文件。

rootProject.name="MyApplication"
include':app',':android-sdk-v5-uxsdk'
project(':android-sdk-v5-uxsdk').projectDir=newFile(rootDir,'app/libs/android-sdk-v5-uxsdk/')

4、修改build.gradle(:android-sdk-v5-uxsdk)文件中的配置和myApplication項目一致。

applyplugin:'com.android.library'
applyplugin:'kotlin-android'
applyplugin:'kotlin-android-extensions'
applyplugin:'kotlin-kapt'

android{
compileSdkVersion32

resourcePrefix"uxsdk_"
defaultConfig{
minSdkVersion23
targetSdkVersion32
versionCode1
versionName"1.0"
}

compileOptions{
sourceCompatibilityJavaVersion.VERSION_1_8
targetCompatibilityJavaVersion.VERSION_1_8
}

kotlinOptions{
jvmTarget=JavaVersion.VERSION_1_8
}
}

dependencies{
implementation'androidx.annotation1.1.0'
implementation'androidx.appcompat1.3.1'
implementation'androidx.multidex2.0.1'
implementation'androidx.legacy1.0.0'
implementation'androidx.recyclerview1.1.0'
implementation'com.squareup.okio1.15.0'
implementation'com.squareup.wire2.2.0'
implementation'androidx.constraintlayout1.1.3'
implementation'androidx.lifecycle2.3.1'
implementation'androidx.lifecycle2.3.1'
implementation'androidx.lifecycle2.3.1'
implementation'androidx.media1.0.0'
implementation"org.jetbrains.kotlin$kotlin_version"
implementation"androidx.core1.3.2"
api'io.reactivex.rxjava33.0.0'
implementation'com.airbnb.android3.3.1'
implementation'androidx.cardview1.0.0'

api'org.maplibre.gl1.0.0'
api'org.maplibre.gl5.9.0'
api'org.maplibre.gl9.4.2'
api'com.amap.api7.3.0'
api'com.amap.api7.3.0'

api'com.google.android.gms16.0.0'
api'com.google.android.gms16.0.0'
api'com.google.android.gms16.0.0'
api'com.google.android.gms16.0.0'

compileOnly"com.dji5.2.0"
compileOnly"com.dji5.2.0"
}

5、同步工程。

4.X 和 5.X 版本差異說明

以下內容主要目的是將MSDK 4.X版本和MSDK 5.X版本中的核心接口做對比和說明,其中主要包含了DJIKey類型接口的對比說明,和幾個核心模塊的差異點說明,例如SDK注冊管理類(SDKManager)、設備健康狀態(tài)管理類(DeviceHealthManager)等。

注意:目前MSDK 4.X和5.X還不兼容,不能一起使用。MSDK 5.X 目前支持機型查看版本發(fā)布中的“支持產品列表和固件版本”,且未來只計劃支持部分DJI的新機型。

DJIKey差異說明

DJIKey

MSDK 5.X 大多數(shù)與設備交互的功能,都是基于DJIKey來實現(xiàn)的,一個DJIKey代表指定模塊的具體功能。

在4.X上,大部分接口的本質是對DJIKey的封裝,比如說Camera$startShootPhoto,其本質是CameraKey.START_SHOOT_PHOTO的應用。在后面對比表格中,對于4.X,只顯示DJIKey,而不是接口。如有特別需要說明的情況,會特殊處理。

這里以FlightControllerState下的Motors中的方法areMotorsOn為例:先通過方法areMotorsOn在4.X文檔中,搜到areMotorsOn的方法說明,然后查詢到對應的4.X DJIKey.FlightControllerKey.ARE_MOTOR_ON,繼而在遷移文檔中找到方法areMotorsOn對應的5.X DJIKey。區(qū)別:



75f82692-130d-11ee-962d-dac502259ad0.png

如何CreateKey

在4.X上,DJIKey的create方法定義在各類模塊Key中,這里以CameraKey來舉例:

1、創(chuàng)建主位置的Key:CameraKey。

create(String paramKey, int componentIndex)3、創(chuàng)建指定位置、指定鏡頭的Key:CameraKey$createLensKey(String paramKey, int componentIndex, int subComponentIndex)。

在5.X上,DJIKey的create方法統(tǒng)一定義到KeyTools中,以CameraKey為例:

只有一種方法,創(chuàng)建指定位置、指定鏡頭的DJIKey:KeyTools$createCameraKey(DJIKeyInfomKeyInfo, ComponentIndexType componentIndexType, CameraLensType cameraLensType),相關DJIKey如果不指明鏡頭的話,就用CameraLensType.CAMERA_LENS_DEFAULT(在Kotlin上,DJIKeyInfo有擴展方法createCamera,cameraLensType默認值就是CameraLensType.CAMERA_LENS_DEFAULT)。

參數(shù)說明:

762c9c38-130d-11ee-962d-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Mobile
    +關注

    關注

    0

    文章

    518

    瀏覽量

    26473
  • 遙控器
    +關注

    關注

    18

    文章

    830

    瀏覽量

    65986
  • 無人機
    +關注

    關注

    228

    文章

    10356

    瀏覽量

    179693
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1029

    瀏覽量

    45782
  • 手機端
    +關注

    關注

    0

    文章

    5

    瀏覽量

    2023

原文標題:基于Mobile SDK V5版固件開發(fā)大疆無人機手機端遙控器(4)

文章出處:【微信號:美男子玩編程,微信公眾號:美男子玩編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    拆解大Mavic Air2無人機配套遙控器

    Mavic Air2遙控器內部多使用螺絲或卡扣固定部件,伸縮式天線一體化手機支架將原來位于遙控器下方的手機移到了手機上方,方便觀察
    的頭像 發(fā)表于 07-21 13:37 ?2.8w次閱讀
    拆解大<b class='flag-5'>疆</b>Mavic Air2<b class='flag-5'>無人機</b>配套<b class='flag-5'>遙控器</b>

    【Aworks申請】開放式無人機地面基站

    申請理由:我們是在校大學生EDA興趣團隊,正在設計制作無人機項目。我們發(fā)現(xiàn),現(xiàn)在無人機只能通過遙控器或者電腦上位機控制飛行。所以,我們試圖開發(fā)一個通用式地面基站,開放API和視頻數(shù)據(jù)流
    發(fā)表于 06-27 08:59

    【云智易申請】智能無人機通信

    申請理由:本次項目是基于STM32做無人機,主要用WiFi實現(xiàn)無人機遙控器之間通信,無人機的電機我們可以用云智易開發(fā)板上面的電機進行調試,
    發(fā)表于 08-07 11:02

    無人機遙控方向控制問題

    前段時間我弟弟買了個遙控無人機玩具,但是我發(fā)現(xiàn)一個問題。該無人機方向控制有問題,假設無人機有四個電機,分別為A,B,C,D,遙控器四個按鍵1
    發(fā)表于 05-10 11:26

    stm32四軸無人機遙控器資料

    stm32四軸無人機遙控器資料
    發(fā)表于 06-09 23:16

    無人機怎么懸停

    `  誰能闡述下大無人機怎么懸停?`
    發(fā)表于 08-27 15:13

    【快速上手教程6】瘋殼·開源編隊無人機-遙控器固件燒寫

    COCOFLY 教程——瘋殼·無人機·系列遙控器固件燒寫 圖1 一、遙控器固件燒寫 這里的固件
    發(fā)表于 05-25 11:49

    【快速上手教程6】瘋殼·開源編隊無人機-遙控器固件燒寫

    COCOFLY 教程——瘋殼·無人機·系列遙控器固件燒寫 圖1 一、遙控器固件燒寫 這里的固件
    發(fā)表于 07-07 10:05

    【瘋殼·無人機教程6】開源編隊無人機-遙控器固件燒寫

    COCOFLY 教程——瘋殼·無人機·系列遙控器固件燒寫圖1 一、遙控器固件燒寫 這里的固件
    發(fā)表于 08-23 17:49

    CES 2019:大推出帶屏無人機遙控器 便攜式無線電源Yoolox亮相

    現(xiàn)如今航拍已成為年輕人的拍攝興趣,但智能手機好像并不是最理想控制航拍的遙控器。作為無人機生產廠家,大在今年的國際消費類電子產品展覽會上展出了專為Mavic 2航拍
    的頭像 發(fā)表于 01-10 16:16 ?8013次閱讀

    音圈馬達裝置在大無人機的應用

    音圈馬達助力的大將發(fā)布多款新品,大家都知道大是一家專業(yè)生產無人機的廠家,就在近日,大新公布的一份專利文件中,發(fā)現(xiàn)大已經申請了一款新的
    發(fā)表于 08-31 15:55 ?719次閱讀

    基于Mobile SDK V4固件開發(fā)無人機手機遙控器(1)

    剛剛結束了項目交付,趁熱打鐵分享一下這次遇到的新東西。首先了解一下大無人機,它大致可以分為三級。
    的頭像 發(fā)表于 06-07 09:53 ?1098次閱讀
    基于<b class='flag-5'>Mobile</b> <b class='flag-5'>SDK</b> <b class='flag-5'>V4</b>版<b class='flag-5'>固件</b><b class='flag-5'>開發(fā)</b>大<b class='flag-5'>疆</b><b class='flag-5'>無人機手機</b><b class='flag-5'>端</b><b class='flag-5'>遙控器</b>(1)

    基于Mobile SDK V4固件開發(fā)無人機手機遙控器(2)

    上一篇文章(基于Mobile SDK V4固件開發(fā)無人
    的頭像 發(fā)表于 06-09 11:33 ?938次閱讀
    基于<b class='flag-5'>Mobile</b> <b class='flag-5'>SDK</b> <b class='flag-5'>V4</b>版<b class='flag-5'>固件</b><b class='flag-5'>開發(fā)</b>大<b class='flag-5'>疆</b><b class='flag-5'>無人機手機</b><b class='flag-5'>端</b><b class='flag-5'>遙控器</b>(2)

    基于Mobile SDK V4固件開發(fā)無人機手機遙控器(3)

    第三篇文章準備單獨拿出來寫,因為在大人機的所有功能中,航線規(guī)劃的功能最為復雜,也相當?shù)姆爆崳@里需要說仔細一點,可能會將代碼進行多步分解。
    的頭像 發(fā)表于 06-15 12:22 ?1492次閱讀
    基于<b class='flag-5'>Mobile</b> <b class='flag-5'>SDK</b> <b class='flag-5'>V4</b>版<b class='flag-5'>固件</b><b class='flag-5'>開發(fā)</b>大<b class='flag-5'>疆</b><b class='flag-5'>無人機手機</b><b class='flag-5'>端</b><b class='flag-5'>遙控器</b>(3)

    基于Mobile SDK V5固件開發(fā)無人機手機遙控器(5)

    v5.x版本的功能與v4.x基本相同,都是獲取飛機的姿態(tài)信息、獲取無人機多媒體文件、操作多媒體文件、航線規(guī)劃等。不過在上一章節(jié)中也大致說了一些兩個版本的中API的差別,下面是根據(jù)一些API使用所完成的一些功能,因為項目原因只能提
    的頭像 發(fā)表于 07-07 12:21 ?2218次閱讀
    基于<b class='flag-5'>Mobile</b> <b class='flag-5'>SDK</b> <b class='flag-5'>V5</b>版<b class='flag-5'>固件</b><b class='flag-5'>開發(fā)</b>大<b class='flag-5'>疆</b><b class='flag-5'>無人機手機</b><b class='flag-5'>端</b><b class='flag-5'>遙控器</b>(<b class='flag-5'>5</b>)