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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Mobile SDK V4版固件開(kāi)發(fā)大疆無(wú)人機(jī)手機(jī)端遙控器(1)

jf_Vqngj70R ? 來(lái)源:美男子玩編程 ? 作者:美男子玩編程 ? 2023-06-07 09:53 ? 次閱讀

剛剛結(jié)束了項(xiàng)目交付,趁熱打鐵分享一下這次遇到的新東西。首先了解一下大疆無(wú)人機(jī),它大致可以分為三級(jí)。

入門(mén)級(jí):適合新手,沒(méi)事干在野外飛一飛拍拍風(fēng)景啥的。操作也簡(jiǎn)單,基本上看飛行教程都能懂,也不需要太高的專業(yè)性,飛機(jī)也相對(duì)較小安全系數(shù)相對(duì)較高。如:御2系列的一些飛機(jī)。

消費(fèi)級(jí):形體上會(huì)比入門(mén)級(jí)的大一點(diǎn),但是飛機(jī)搭載了一些高精度的東西,比如RTK、高精度攝像頭、紅外鏡頭等。這類(lèi)飛機(jī)則需要飛手具備一定的專業(yè)知識(shí),并且需要考取大疆的初級(jí)飛手證書(shū)才能上手飛行。如:精靈系列、悟系列的一些飛機(jī)。

專業(yè)級(jí):形體上更大,操作不當(dāng)會(huì)出現(xiàn)一些嚴(yán)重后果。它的優(yōu)勢(shì)在于高續(xù)航、高精度定位、熱成像鏡頭、搭載第三方喊話器等。一般用于大型工程作業(yè),使用這個(gè)級(jí)別的飛機(jī)則需要考取大疆專業(yè)飛手證書(shū),一般這個(gè)會(huì)在你購(gòu)買(mǎi)專業(yè)級(jí)飛機(jī)的時(shí)候贈(zèng)送你培訓(xùn)課程,一般全部聽(tīng)完就能考過(guò)。這類(lèi)飛機(jī)的典型代表有:M30系列、M300系列。

1SDK開(kāi)發(fā)包

大疆的SDK開(kāi)發(fā)包目前分為兩個(gè)大版本:

v4版

Mobile SDK是一款軟件開(kāi)發(fā)套件,旨在讓開(kāi)發(fā)者能夠訪問(wèn)DJI無(wú)人機(jī)和手持相機(jī)產(chǎn)品的豐富功能。該SDK通過(guò)兼顧更底層的功能,諸如飛行穩(wěn)定,電池管理,信號(hào)傳輸和通信等,簡(jiǎn)化了應(yīng)用程序開(kāi)發(fā)的過(guò)程。這樣,開(kāi)發(fā)者就不需要具備豐富的機(jī)器人嵌入式系統(tǒng)背景知識(shí),而可以專注于DJI產(chǎn)品相關(guān)的行業(yè)應(yīng)用開(kāi)發(fā)。

該SDK包括:

可導(dǎo)入AndroidiOS應(yīng)用程序的庫(kù)/框架,用于訪問(wèn)DJI產(chǎn)品的功能。

飛行模擬器和可視化工具。

適用于iOS的調(diào)試工具和遠(yuǎn)程logger。

示例代碼和教程。

開(kāi)發(fā)者指南和API文檔。

功能概述

開(kāi)發(fā)者可以通過(guò)SDK訪問(wèn)許多DJI產(chǎn)品的功能。開(kāi)發(fā)者可以實(shí)現(xiàn)自主飛行,控制相機(jī)和云臺(tái),接收實(shí)時(shí)視頻圖傳和傳感器數(shù)據(jù),下載保存好的媒體文件,以及監(jiān)聽(tīng)其他組件的狀態(tài)。

飛行控制

Mobile SDK提供三種控制無(wú)人機(jī)飛行的方式:

手動(dòng)操控: 用戶使用遙控器操控?zé)o人機(jī),而SDK支持監(jiān)控實(shí)時(shí)視頻流和傳感器數(shù)據(jù)。虛擬搖桿命令: SDK支持產(chǎn)生模擬遙控器搖桿的控制指令。

智能任務(wù): 方便,易于實(shí)現(xiàn)無(wú)人機(jī)的高級(jí)控制。例如,可以通過(guò)航點(diǎn)任務(wù),讓無(wú)人機(jī)按預(yù)定義的飛行路徑飛行。

虛擬搖桿命令和智能任務(wù)允許對(duì)DJI無(wú)人機(jī)進(jìn)行簡(jiǎn)單而功能強(qiáng)大的自主飛行控制。

相機(jī)

相機(jī)和云臺(tái)的功能都支持編程調(diào)用, 例如:

相機(jī)模式: 視頻和靜態(tài)圖像拍攝。

曝光: 快門(mén),ISO,光圈和曝光補(bǔ)償均支持定制,以實(shí)現(xiàn)最大的靈活性。

圖像參數(shù): 屏幕長(zhǎng)寬比,對(duì)比度,色相,清晰度,飽和度和濾鏡。

視頻參數(shù): 分辨率和幀頻。

方向: 使用云臺(tái)時(shí),相機(jī)的朝向和運(yùn)動(dòng)可以自動(dòng)控制。

實(shí)時(shí)視頻流

開(kāi)發(fā)者可以通過(guò)Mobile SDK獲取無(wú)人機(jī)主攝像頭的實(shí)時(shí)視頻流。即使攝像頭正在將圖像或視頻捕獲到存儲(chǔ)介質(zhì)中,也可以獲取實(shí)時(shí)視頻流。

傳感器數(shù)據(jù)

開(kāi)發(fā)者可以通過(guò)SDK獲得豐富的傳感器數(shù)據(jù)。GPS位置,指南針,氣壓計(jì),飛行速度和海拔高度都是通過(guò)Mobile SDK獲取的一些傳感器數(shù)據(jù),頻率最高可達(dá)10 Hz。

下載媒體文件

開(kāi)發(fā)者通過(guò)Mobile SDK可以查看和下載保存在相機(jī)存儲(chǔ)介質(zhì)(SD卡或固態(tài)硬盤(pán))中的照片和視頻。預(yù)覽圖和完整的圖像數(shù)據(jù)都可以被訪問(wèn)。

遙控器,電池和無(wú)線鏈路

遙控器,電池和無(wú)線鏈路都可以通過(guò)SDK進(jìn)行訪問(wèn)。通常,這些組件會(huì)提供相關(guān)的狀態(tài)信息,但開(kāi)發(fā)者也可以對(duì)它們進(jìn)行一些控制。

連接應(yīng)用程序和產(chǎn)品

下圖說(shuō)明了Mobile SDK如何與移動(dòng)應(yīng)用程序進(jìn)行融合以及如何與DJI飛行器進(jìn)行連接。548a82da-046b-11ee-90ce-dac502259ad0.png對(duì)于手持?jǐn)z像機(jī)產(chǎn)品,遙控器已替換為手持控制器,并且沒(méi)有飛行器或其他無(wú)線鏈路。

移動(dòng)應(yīng)用程序由Mobile SDK,平臺(tái)SDK(iOS或Android)構(gòu)建而成,并在移動(dòng)設(shè)備(Apple iPhone,iPad,Nexus手機(jī),Nexus平板電腦等)上運(yùn)行。

移動(dòng)設(shè)備可以通過(guò)WiFi無(wú)線連接到DJI產(chǎn)品上,也可以通過(guò)USB線纜連接到DJI產(chǎn)品上。

v5版

v5版現(xiàn)在只適用于M30、M300系列,目前還在持續(xù)更新,因?yàn)槭切掳娴腟DK,大疆的工程師也是在不斷地再完善里面的內(nèi)容,這里就不詳細(xì)說(shuō)了,之后的文章會(huì)詳細(xì)說(shuō)這個(gè)v5版的SDK。

2V4版SDK 二次開(kāi)發(fā)

多的不說(shuō)少的不嘮,上主菜?!肮び破涫?必先利其器”,首先準(zhǔn)備好開(kāi)發(fā)軟件,因?yàn)槲覀兪褂玫氖茿ndroid版的SDK所以開(kāi)發(fā)軟件我們使用Android Studio,本人使用的是Android Studio Fox版,版本之間感覺(jué)都一樣沒(méi)有什么開(kāi)發(fā)上的區(qū)別。準(zhǔn)備好工具之后,先去大疆無(wú)人機(jī)的開(kāi)發(fā)者官網(wǎng)注冊(cè)一個(gè)開(kāi)發(fā)者賬號(hào),并且注冊(cè)好自己的應(yīng)用,拿到sdk的專用Key值,申請(qǐng)的方法大疆官網(wǎng)有我就不贅述了。給大家個(gè)地址【大疆開(kāi)發(fā)者官網(wǎng)】自己看吧,挺簡(jiǎn)單的。

注冊(cè)成為DJI開(kāi)發(fā)者

在注冊(cè)過(guò)程中,需要您提供電子郵件信息和信用卡或手機(jī)號(hào)碼用于注冊(cè)驗(yàn)證。您所提供的任何信用卡信息將僅用于驗(yàn)證,不會(huì)收取任何費(fèi)用。

本指南假定您使用 Xcode 7.3 以及 Android Studio 2.1.1 以上版本。

生成 App Key

每個(gè)應(yīng)用程序都需要一個(gè)唯一的應(yīng)用程序密鑰(App Key)來(lái)初始化SDK。

要?jiǎng)?chuàng)建一個(gè)應(yīng)用程序App Key:

請(qǐng)?jiān)L問(wèn)DJI開(kāi)發(fā)者網(wǎng)站的 開(kāi)發(fā)者中心

選擇左側(cè)欄的 "應(yīng)用 "。

選擇右側(cè)的 “創(chuàng)建應(yīng)用” 按鈕。

輸入應(yīng)用程序的名稱, 開(kāi)發(fā)平臺(tái), Package Name,分類(lèi)和描述信息。

會(huì)收到一封應(yīng)用程序激活郵件,以完成App Key的生成。

可以在開(kāi)發(fā)者中心中找到AppKey,復(fù)制粘貼到應(yīng)用程序配置中。

Android 示例代碼配置

下載或者克隆Github上的Android示例代碼工程。

在Android Studio中打開(kāi)項(xiàng)目工程,將生成的App Key字符串粘貼到 "AndroidManifest.xml" 文件中 "com.dji.sdk.API_KEY" meda-data element下的 android:value。

 

3Android Studio項(xiàng)目集成

本節(jié)中的屏幕截圖是使用Android Studio 4.1生成的。

創(chuàng)建一個(gè)新的應(yīng)用

可以使用一個(gè)新的應(yīng)用程序來(lái)演示如何將DJI SDK集成到Android Studio項(xiàng)目中。

打開(kāi)Android Studio,然后在初始屏幕上選擇Start a new Android Studio project。

549d4a14-046b-11ee-90ce-dac502259ad0.png

在 New Project 界面:

設(shè)置 Application name 為 "ImportSDKDemo"。

設(shè)置 Company Domain 和Package name 為 "com.dji.ImportSDKDemo"。

54c93aac-046b-11ee-90ce-dac502259ad0.png

注意:Package name是 生成App Key 所需的標(biāo)識(shí)字符串。在這個(gè)工程中Package name為“com.dji.ImportSDKDemo”

54f365b6-046b-11ee-90ce-dac502259ad0.png

在 Target Android Devices 界面:

選擇 Phone and Tablet 尺寸。

選擇API 23:Android 6.0 (Marshmallow)。

在 Add an Activity to Mobile 界面選擇 Empty Activity。

551fdf74-046b-11ee-90ce-dac502259ad0.png

在Configure Activity 界面:

設(shè)置 Activity Name: 為 "MainActivity"。

確認(rèn)勾選Generate Layout File 。

設(shè)置Layout Name: 為"activity_main"。

點(diǎn)擊Finish 。555dd8ec-046b-11ee-90ce-dac502259ad0.png

配置Gradle 腳本

在Gradle Scripts 中雙擊 build.gradle (Module: app)5587e844-046b-11ee-90ce-dac502259ad0.png

使用以下內(nèi)容進(jìn)行更新:

applyplugin:'com.android.application'

android{

...
defaultConfig{
...
}

...

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.dji4.15',{

excludemodule:'library-anti-distortion'

})
compileOnly'com.dji4.15
}

主要變更為:

添加 packagingOptions以防止應(yīng)用程序意外崩潰。

添加compile和provided依賴項(xiàng)以導(dǎo)入最新的DJIAndroid SDK Maven依賴項(xiàng)。

559e65ce-046b-11ee-90ce-dac502259ad0.png

選擇 Tools -> Android -> Sync Project with Gradle Files 然后等待Gradle項(xiàng)目同步完成。

再次確認(rèn) Maven 依賴

在Android Studio菜單中選擇File->Project Structure,以打開(kāi)"Project Structure"界面。然后選擇“app”模塊,然后單擊Dependencies選項(xiàng)卡。55def08a-046b-11ee-90ce-dac502259ad0.png

實(shí)現(xiàn)應(yīng)用注冊(cè)和SDK回調(diào)

右鍵單擊com.dji.importSDKDemo,然后選擇 New->Java Class以創(chuàng)建一個(gè)新的Java類(lèi),并將其命名為“MApplication”。

55f89b48-046b-11ee-90ce-dac502259ad0.png

打開(kāi)MApplication.java文件,并將內(nèi)容替換為以下內(nèi)容:

packagecom.dji.importSDKDemo;

importandroid.app.Application;
importandroid.content.Context;

importcom.secneo.sdk.Helper;

publicclassMApplicationextendsApplication{

@Override
protectedvoidattachBaseContext(ContextparamContext){
super.attachBaseContext(paramContext);
Helper.install(MApplication.this);
}
}

在這里,重寫(xiě)了attachBaseContext()方法,添加了Helper.install(MApplication.this);代碼。

注意:由于某些SDK類(lèi)現(xiàn)在需要在使用之前進(jìn)行加載,因此加載過(guò)程由Helper.install()完成。開(kāi)發(fā)人員需要在使用任何SDK功能之前調(diào)用此方法, 否則可能會(huì)導(dǎo)致意外崩潰。

561c9c96-046b-11ee-90ce-dac502259ad0.png

修改完成后需要在AndroidManifest中 配置 Application name。56370874-046b-11ee-90ce-dac502259ad0.png

雙擊app模塊中的MainActivity.java。56585b46-046b-11ee-90ce-dac502259ad0.png

MainActivity類(lèi)需要注冊(cè)應(yīng)用程序以獲得使用Mobile SDK的授權(quán)。它還需要實(shí)現(xiàn)SDK回調(diào)方法。

首先將MainActivity類(lèi)修改為包括幾個(gè)類(lèi)變量,其中包括mProduct,它是代表連接到移動(dòng)設(shè)備的DJI產(chǎn)品的對(duì)象。

另外,onCreate方法將被修改以調(diào)用checkAndRequestPermissions方法來(lái)檢查和請(qǐng)求運(yùn)行時(shí)權(quán)限。同樣,checkAndRequestPermissions方法將有助于調(diào)用startSDKRegistration()方法來(lái)注冊(cè)應(yīng)用程序。此外,重寫(xiě)onRequestPermissionsResult方法將有助于檢查應(yīng)用程序是否具有足夠的權(quán)限,如果有,請(qǐng)調(diào)用startSDKRegistration()方法來(lái)注冊(cè)應(yīng)用程序。

最后,將MainActivity類(lèi)替換為:

publicclassMainActivityextendsAppCompatActivity{

privatestaticfinalStringTAG=MainActivity.class.getName();
publicstaticfinalStringFLAG_CONNECTION_CHANGE="dji_sdk_connection_change";
privatestaticBaseProductmProduct;
privateHandlermHandler;

privatestaticfinalString[]REQUIRED_PERMISSION_LIST=newString[]{
Manifest.permission.VIBRATE,
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.WAKE_LOCK,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CHANGE_WIFI_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
};
privateListmissingPermission=newArrayList<>();
privateAtomicBooleanisRegistrationInProgress=newAtomicBoolean(false);
privatestaticfinalintREQUEST_PERMISSION_CODE=12345;

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);

//Whenthecompileandtargetversionishigherthan22,pleaserequestthefollowingpermissionatruntimetoensuretheSDKworkswell.
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
checkAndRequestPermissions();
}

setContentView(R.layout.activity_main);

//InitializeDJISDKManager
mHandler=newHandler(Looper.getMainLooper());

}

/**
*Checksifthereisanymissingpermissions,and
*requestsruntimepermissionifneeded.
*/
privatevoidcheckAndRequestPermissions(){
//Checkforpermissions
for(StringeachPermission:REQUIRED_PERMISSION_LIST){
if(ContextCompat.checkSelfPermission(this,eachPermission)!=PackageManager.PERMISSION_GRANTED){
missingPermission.add(eachPermission);
}
}
//Requestformissingpermissions
if(missingPermission.isEmpty()){
startSDKRegistration();
}elseif(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
showToast("Needtograntthepermissions!");
ActivityCompat.requestPermissions(this,
missingPermission.toArray(newString[missingPermission.size()]),
REQUEST_PERMISSION_CODE);
}

}

/**
*Resultofruntimepermissionrequest
*/
@Override
publicvoidonRequestPermissionsResult(intrequestCode,
@NonNullString[]permissions,
@NonNullint[]grantResults){
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
//Checkforgrantedpermissionandremovefrommissinglist
if(requestCode==REQUEST_PERMISSION_CODE){
for(inti=grantResults.length-1;i>=0;i--){
if(grantResults[i]==PackageManager.PERMISSION_GRANTED){
missingPermission.remove(permissions[i]);
}
}
}
//Ifthereisenoughpermission,wewillstarttheregistration
if(missingPermission.isEmpty()){
startSDKRegistration();
}else{
showToast("Missingpermissions!!!");
}
}
}

DJISDKManager的registerApp()方法具有一個(gè)回調(diào),該回調(diào)需要處理兩種方法:一、用于處理應(yīng)用程序注冊(cè)結(jié)果。二、用于通知硬件產(chǎn)品和移動(dòng)設(shè)備的連接變更。

繼續(xù)添加如下所示的 startSDKRegistration() 方法,并實(shí)現(xiàn) onRegister(), onProductDisconnect(), onProductConnect(), onComponentChange(), onInitProcess() and onDatabaseDownloadProgress() 和SDKManagerCallback方法:

privatevoidstartSDKRegistration(){
if(isRegistrationInProgress.compareAndSet(false,true)){
AsyncTask.execute(newRunnable(){
@Override
publicvoidrun(){
showToast("registering,plswait...");
DJISDKManager.getInstance().registerApp(MainActivity.this.getApplicationContext(),newDJISDKManager.SDKManagerCallback(){
@Override
publicvoidonRegister(DJIErrordjiError){
if(djiError==DJISDKError.REGISTRATION_SUCCESS){
showToast("RegisterSuccess");
DJISDKManager.getInstance().startConnectionToProduct();
}else{
showToast("Registersdkfails,pleasecheckthebundleidandnetworkconnection!");
}
Log.v(TAG,djiError.getDescription());
}

@Override
publicvoidonProductDisconnect(){
Log.d(TAG,"onProductDisconnect");
showToast("ProductDisconnected");
notifyStatusChange();

}
@Override
publicvoidonProductConnect(BaseProductbaseProduct){
Log.d(TAG,String.format("onProductConnectnewProduct:%s",baseProduct));
showToast("ProductConnected");
notifyStatusChange();

}
@Override
publicvoidonComponentChange(BaseProduct.ComponentKeycomponentKey,BaseComponentoldComponent,
BaseComponentnewComponent){

if(newComponent!=null){
newComponent.setComponentListener(newBaseComponent.ComponentListener(){

@Override
publicvoidonConnectivityChange(booleanisConnected){
Log.d(TAG,"onComponentConnectivityChanged:"+isConnected);
notifyStatusChange();
}
});
}
Log.d(TAG,
String.format("onComponentChangekey:%s,oldComponent:%s,newComponent:%s",
componentKey,
oldComponent,
newComponent));

}
@Override
publicvoidonInitProcess(DJISDKInitEventdjisdkInitEvent,inti){

}

@Override
publicvoidonDatabaseDownloadProgress(longl,longl1){

}
});
}
});
}
}

最后需要實(shí)現(xiàn) notifyStatusChange, Runnable 和 showToast 方法:

privatevoidnotifyStatusChange(){
mHandler.removeCallbacks(updateRunnable);
mHandler.postDelayed(updateRunnable,500);
}

privateRunnableupdateRunnable=newRunnable(){

@Override
publicvoidrun(){
Intentintent=newIntent(FLAG_CONNECTION_CHANGE);
sendBroadcast(intent);
}
};

privatevoidshowToast(finalStringtoastMsg){

Handlerhandler=newHandler(Looper.getMainLooper());
handler.post(newRunnable(){
@Override
publicvoidrun(){
Toast.makeText(getApplicationContext(),toastMsg,Toast.LENGTH_LONG).show();
}
});

}

必須授予應(yīng)用程序權(quán)限,DJI SDK才能運(yùn)行。

雙擊 app 模塊中的 AndroidManifest.xml 。

56996190-046b-11ee-90ce-dac502259ad0.png

在 package=com.dji.ImportSDKDemo 后,

 

在 application 元素的開(kāi)發(fā)添加 android:name=".MApplication" :


在 android:theme="@style/AppTheme"> 之后,之前插入如下代碼:

 




如下所示,在activity元素中插入android:configChanges ="orientation"和android:screenOrientation ="portrait",以防止在屏幕方向變更時(shí)重啟activity,并將activity的屏幕方向設(shè)置為縱向模式 :






生成App Key, 然后用App Key 字符串替換AndroidManifest.xml文件內(nèi)Please enter your App Key here. 字段。

審核編輯:湯梓紅

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

    關(guān)注

    12

    文章

    3908

    瀏覽量

    126902
  • Mobile
    +關(guān)注

    關(guān)注

    0

    文章

    517

    瀏覽量

    26450
  • 遙控器
    +關(guān)注

    關(guān)注

    18

    文章

    828

    瀏覽量

    65767
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1015

    瀏覽量

    45597
  • 大疆無(wú)人機(jī)
    +關(guān)注

    關(guān)注

    13

    文章

    110

    瀏覽量

    30135

原文標(biāo)題:基于Mobile SDK V4版固件開(kāi)發(fā)大疆無(wú)人機(jī)手機(jī)端遙控器(1)

文章出處:【微信號(hào):美男子玩編程,微信公眾號(hào):美男子玩編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    拆解大Mavic Air2無(wú)人機(jī)配套遙控器

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

    無(wú)人機(jī)遙控方向控制問(wèn)題

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

    stm32四軸無(wú)人機(jī)遙控器資料

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

    無(wú)人機(jī)怎么懸停

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

    【飛控教程1】開(kāi)源編隊(duì)無(wú)人機(jī)-開(kāi)機(jī)測(cè)試

    OLED 左上角的頻道開(kāi)始遞增時(shí),即可松手,此時(shí)進(jìn)入自動(dòng)對(duì)頻,對(duì)頻成功后,OLED 左上角的“X”消失,變成信號(hào)格。連接上無(wú)人機(jī)后,可以查看飛機(jī)的傳感是否運(yùn)行正常,查看方法為:1)在遙控器
    發(fā)表于 04-20 11:48

    【快速上手教程6】瘋殼·開(kāi)源編隊(duì)無(wú)人機(jī)-遙控器固件燒寫(xiě)

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

    【快速上手教程6】瘋殼·開(kāi)源編隊(duì)無(wú)人機(jī)-遙控器固件燒寫(xiě)

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

    【瘋殼·無(wú)人機(jī)教程6】開(kāi)源編隊(duì)無(wú)人機(jī)-遙控器固件燒寫(xiě)

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

    CES 2019:大推出帶屏無(wú)人機(jī)遙控器 便攜式無(wú)線電源Yoolox亮相

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

    發(fā)布沉浸式飛行無(wú)人機(jī)DJI FPV

    DJI 大創(chuàng)新正式發(fā)售沉浸式飛行無(wú)人機(jī)DJI FPV,并以套裝形式發(fā)售,其中包含飛行遙控器、飛行眼鏡、1塊智能飛行電池、2對(duì)槳葉等配件
    的頭像 發(fā)表于 03-04 09:50 ?3742次閱讀

    音圈馬達(dá)裝置在大無(wú)人機(jī)的應(yīng)用

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

    基于Mobile SDK V4固件開(kāi)發(fā)無(wú)人機(jī)手機(jī)遙控器(2)

    上一篇文章(基于Mobile SDK V4固件開(kāi)發(fā)無(wú)人
    的頭像 發(fā)表于 06-09 11:33 ?880次閱讀
    基于<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'>開(kāi)發(fā)</b>大<b class='flag-5'>疆</b><b class='flag-5'>無(wú)人機(jī)手機(jī)</b><b class='flag-5'>端</b><b class='flag-5'>遙控器</b>(2)

    基于Mobile SDK V4固件開(kāi)發(fā)無(wú)人機(jī)手機(jī)遙控器(3)

    第三篇文章準(zhǔn)備單獨(dú)拿出來(lái)寫(xiě),因?yàn)樵诖?b class='flag-5'>疆人機(jī)的所有功能中,航線規(guī)劃的功能最為復(fù)雜,也相當(dāng)?shù)姆爆崳@里需要說(shuō)仔細(xì)一點(diǎn),可能會(huì)將代碼進(jìn)行多步分解。
    的頭像 發(fā)表于 06-15 12:22 ?1384次閱讀
    基于<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'>開(kāi)發(fā)</b>大<b class='flag-5'>疆</b><b class='flag-5'>無(wú)人機(jī)手機(jī)</b><b class='flag-5'>端</b><b class='flag-5'>遙控器</b>(3)

    基于Mobile SDK V5版固件開(kāi)發(fā)無(wú)人機(jī)手機(jī)遙控器(4)

    相較與V4版本開(kāi)發(fā),V5版本有了更方便簡(jiǎn)介的方式。V5不僅再功能上與V4增加更多的功能,而且在功能的使用及API的調(diào)用也做了優(yōu)化。雖然
    的頭像 發(fā)表于 06-25 12:24 ?2281次閱讀
    基于<b class='flag-5'>Mobile</b> <b class='flag-5'>SDK</b> <b class='flag-5'>V</b>5版<b class='flag-5'>固件</b><b class='flag-5'>開(kāi)發(fā)</b>大<b class='flag-5'>疆</b><b class='flag-5'>無(wú)人機(jī)手機(jī)</b><b class='flag-5'>端</b><b class='flag-5'>遙控器</b>(<b class='flag-5'>4</b>)

    基于Mobile SDK V5版固件開(kāi)發(fā)無(wú)人機(jī)手機(jī)遙控器(5)

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