码迷,mamicode.com
首页 > 其他好文 > 详细

Dji Mobile SDK 基础实现(一)

时间:2017-07-23 22:44:16      阅读:582      评论:0      收藏:0      [点我收藏+]

标签:boa   blank   ken   review   通过   ftl   pcl   preview   htc   

  

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 基础实现(一)

标签:boa   blank   ken   review   通过   ftl   pcl   preview   htc   

原文地址:http://www.cnblogs.com/C7523/p/7226002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!