Dji Mobile SDK 基礎實現(一)
阿新 • • 發佈:2017-07-25
n-1 app lba ger print ttl touch事件 釋放 bsp
Dji Mobile SDK 基礎實現(一)
本文簡要介紹如何通過調用DJI Mobile SDK,實現獲取和釋放無人機的控制權限、模擬遙控器按鈕控制無人機的飛行、獲取無人機的回傳視頻、獲取無人機參數、實現和onboard SDK的數據透傳。
下面逐個介紹以上內容,余下內容將在以後的文章介紹(文章末尾附上GitHub鏈接):
- 獲取和釋放權限
- 模擬遙控器按鈕控制無人機的飛行
獲取和釋放權限
1、獲取flightController 對象;
1 DJIFlightController flightController; 2 //對flightController進行實例化 3public void setAircraft(DJIBaseProduct djiAircraft){ 4 if(djiAircraft==null){ 5 6 return; 7 } 8 flightController=((DJIAircraft)djiAircraft).getFlightController(); 9 if(flightController!=null) { 10 11 } 12 13 }
2、通過flightController對象調用方法獲取和釋放無人機的權限:
1 //獲取無人機的控制權限 2 public void enable(){ 3 flightController.enableVirtualStickControlMode( 4 new DJIBaseComponent.DJICompletionCallback() { 5 @Override 6 public void onResult(DJIError djiError) { 7 if (djiError == null) { 8 9 } 10 } 11 } 12 ); 13 if(mSendVirtualStickDataTimer==null) { 14 mSendVirtualStickDataTimer = new Timer(); 15 mSendVirtualStickDataTimer.schedule(new MyTimerTask(this), 100, 200); 16 } 17 isEnable=true; 18 VirtualStickApplication.logInfo("已獲取對無人的控制權限!"); 19 } 20 //釋放無人機的控制權限 21 public void disable(){ 22 isEnable=false; 23 flightController.disableVirtualStickControlMode( 24 new DJIBaseComponent.DJICompletionCallback() { 25 @Override 26 public void onResult(DJIError djiError) { 27 if (djiError == null) 28 { 29 30 } 31 } 32 } 33 ); 34 if(taskReference!=null) { 35 taskReference.cancel(); 36 taskReference=null; 37 } 38 if(mSendVirtualStickDataTimer!=null) { 39 mSendVirtualStickDataTimer.cancel(); 40 mSendVirtualStickDataTimer.purge(); 41 mSendVirtualStickDataTimer=null; 42 } 43 }
模擬遙控器按鈕控制無人機的飛行
1、獲取flightController 對象(如上所示);
2、通過flightController對象調用方法實現無人機的起飛、降落、上升、下降、左旋、右旋以及往前後左右四個方向飛行;
起飛
1 //實現無人機的起飛操作 2 public void takeOff(){ 3 if(flightController instanceof dji.sdk.FlightController.c){ 4 dji.sdk.FlightController.c tmp=(dji.sdk.FlightController.c)flightController; 5 tmp.takeOff(new DJIBaseComponent.DJICompletionCallback() { 6 @Override 7 public void onResult(DJIError djiError) { 8 if (djiError != null) 9 VirtualStickApplication.logError("TakeOff error:", djiError); 10 } 11 }); 12 VirtualStickApplication.logInfo("無人機開始起飛!"); 13 } 14 }
降落
1 //實現無人機的降落 2 public void land(){ 3 if(flightController instanceof dji.sdk.FlightController.c){ 4 dji.sdk.FlightController.c tmp=(dji.sdk.FlightController.c)flightController; 5 tmp.autoLanding(new DJIBaseComponent.DJICompletionCallback() { 6 @Override 7 public void onResult(DJIError djiError) { 8 if (djiError != null) 9 VirtualStickApplication.logError("AutoLanding error:", djiError); 10 } 11 } 12 ); 13 VirtualStickApplication.logInfo("無人機開始降落!"); 14 } 15 }
上升
1 public void leftUpClick(){ 2 if(mThrottle<6) 3 mThrottle++; 4 }
下降
1 public void leftDownClick(){ 2 if(mThrottle>=1) 3 mThrottle--; 4 5 }
左旋
1 public void leftLeftClick(){ 2 mYaw= -yawSpeed; 3 }
右旋
1 public void leftRightClick(){ 2 mYaw= yawSpeed; 3 }
前行
1 public void rightUpClick(){ 2 mRoll =rollPitchSpeed; 3 }
後退
1 public void rightRightClick(){ 2 mPitch =rollPitchSpeed; 3 }
左行
1 public void rightDownClick(){ 2 mRoll =-rollPitchSpeed; 3 }
右行
public void rightLeftClick(){ mPitch=-rollPitchSpeed; }
向無人發送控制參數
1 float rollPitchSpeed= (float) (DJIFlightControllerDataType.DJIVirtualStickRollPitchControlMaxVelocity*0.2); 2 float verticalSpeed= (float) (DJIFlightControllerDataType.DJIVirtualStickVerticalControlMaxVelocity*0.2); 3 float yawSpeed=(float) (DJIFlightControllerDataType.DJIVirtualStickYawControlMaxAngle*0.5); 4 float mPitch=0,mRoll=0,mYaw=0,mThrottle=1.5f; 5 //用於向無人機發送控制參數 6 public void run() { 7 flightController.sendVirtualStickFlightControlData( 8 new DJIFlightControllerDataType.DJIVirtualStickFlightControlData( 9 mPitch, mRoll, mYaw, mThrottle 10 ), new DJIBaseComponent.DJICompletionCallback() { 11 @Override 12 public void onResult(DJIError djiError) { 13 if(djiError!=null) 14 VirtualStickApplication.logError("SendControlData error:",djiError ); 15 } 16 } 17 ); 18 if(count++%3==0) { 19 mPitch = mRoll = mYaw = 0; 20 } 21 }
其中,獲取和釋放權限、起飛、降落函數推薦在onclick事件中進行調用,控制無人機飛行的函數推薦在OnTouch事件中進行調用(也可利用自己寫Timer控制每個函數的執行時間等)。
Github鏈接:https://github.com/MrJoeyM/sky-app
Dji Mobile SDK 基礎實現(一)