Dji Mobile SDK 基础实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dji Mobile SDK 基础实现相关的知识,希望对你有一定的参考价值。

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

 

 

以上是关于Dji Mobile SDK 基础实现的主要内容,如果未能解决你的问题,请参考以下文章

Dji Mobile SDK 基础实现

Dji Mobile SDK 基础实现

DJI Mobile SDK 中的避障

DJI Mobile SDK 新教程

尝试流式传输到自定义 RTMP 时,DJI Mobile SDK 中出现 LiveStreamManager 错误 -3?

DJI Mobile SDK,Android Studio Emulator SDK注册失败