Dji Mobile SDK 基础实现

Posted

tags:

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

  

Dji Mobile SDK 基础实现(一)

本文简要介绍如何通过调用DJI Mobile SDK,实现获取和释放无人机的控制权限模拟遥控器按钮控制无人机的飞行获取无人机的回传视频获取无人机参数实现和onboard SDK的数据透传

下面逐个介绍以上内容,余下内容将在以后的文章介绍(文章末尾附上GitHub链接):

  • 获取和释放权限
  • 模拟遥控器按钮控制无人机的飞行

获取和释放权限


1、获取flightController 对象;

DJIFlightController flightController;
//对flightController进行实例化
public void setAircraft(DJIBaseProduct djiAircraft){
        if(djiAircraft==null){

            return;
        }
        flightController=((DJIAircraft)djiAircraft).getFlightController();
        if(flightController!=null) {

        }

    }

2、通过flightController对象调用方法获取和释放无人机的权限:

//获取无人机的控制权限
    public void enable(){
    flightController.enableVirtualStickControlMode(
                new DJIBaseComponent.DJICompletionCallback() {
                    @Override
                    public void onResult(DJIError djiError) {
                        if (djiError == null) {

                        }
                    }
                }
        );
        if(mSendVirtualStickDataTimer==null) {
            mSendVirtualStickDataTimer = new Timer();
            mSendVirtualStickDataTimer.schedule(new MyTimerTask(this), 100, 200);
        }
        isEnable=true;
        VirtualStickApplication.logInfo("已获取对无人的控制权限!");
    }
    //释放无人机的控制权限
    public void disable(){
        isEnable=false;
        flightController.disableVirtualStickControlMode(
                new DJIBaseComponent.DJICompletionCallback() {
                    @Override
                    public void onResult(DJIError djiError) {
                        if (djiError == null)
                        {

                        }
                    }
                }
        );
        if(taskReference!=null) {
            taskReference.cancel();
            taskReference=null;
        }
        if(mSendVirtualStickDataTimer!=null) {
            mSendVirtualStickDataTimer.cancel();
            mSendVirtualStickDataTimer.purge();
            mSendVirtualStickDataTimer=null;
        }
    }

模拟遥控器按钮控制无人机的飞行


1、获取flightController 对象(如上所示); 
2、通过flightController对象调用方法实现无人机的起飞、降落、上升、下降、左旋、右旋以及往前后左右四个方向飞行; 
起飞

//实现无人机的起飞操作
    public void takeOff(){
       if(flightController instanceof dji.sdk.FlightController.c){
           dji.sdk.FlightController.c tmp=(dji.sdk.FlightController.c)flightController;
           tmp.takeOff(new DJIBaseComponent.DJICompletionCallback() {
               @Override
               public void onResult(DJIError djiError) {
                   if (djiError != null)
                       VirtualStickApplication.logError("TakeOff error:", djiError);
               }
           });
           VirtualStickApplication.logInfo("无人机开始起飞!");
        }
    }

降落

//实现无人机的降落
    public void land(){
        if(flightController instanceof dji.sdk.FlightController.c){
            dji.sdk.FlightController.c tmp=(dji.sdk.FlightController.c)flightController;
            tmp.autoLanding(new DJIBaseComponent.DJICompletionCallback() {
                                @Override
                                public void onResult(DJIError djiError) {
                                    if (djiError != null)
                                        VirtualStickApplication.logError("AutoLanding error:", djiError);
                                }
                            }
            );
            VirtualStickApplication.logInfo("无人机开始降落!");
        }
    }

上升

public void leftUpClick(){
        if(mThrottle<6)
            mThrottle++;
    }

下降

public void leftDownClick(){
        if(mThrottle>=1)
             mThrottle--;

    }

左旋

public void leftLeftClick(){
        mYaw= -yawSpeed;
    }

右旋

public void leftRightClick(){
        mYaw= yawSpeed;
    }

前行

public void rightUpClick(){
        mRoll =rollPitchSpeed;
    }

后退

public void rightRightClick(){
        mPitch =rollPitchSpeed;
    }

左行

 public void rightDownClick(){
        mRoll =-rollPitchSpeed;
    }

右行

 public void rightLeftClick(){
        mPitch=-rollPitchSpeed;
    }

其中,获取和释放权限、起飞、降落函数推荐在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注册失败