Dji Mobile SDK 基础实现(一)
本文简要介绍如何通过调用DJI Mobile SDK,实现获取和释放无人机的控制权限、模拟遥控器按钮控制无人机的飞行、获取无人机的回传视频、获取无人机参数、实现和onboard SDK的数据透传。
下面逐个介绍以上内容,余下内容将在以后的文章介绍(文章末尾附上GitHub链接):
- 获取和释放权限
- 模拟遥控器按钮控制无人机的飞行
获取和释放权限
1、获取flightController 对象;
1 DJIFlightController flightController; 2 //对flightController进行实例化 3 public 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
时间: 2024-10-20 15:14:50