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;
    }

向无人发送控制参数

 

 float rollPitchSpeed= (float) (DJIFlightControllerDataType.DJIVirtualStickRollPitchControlMaxVelocity*0.2);
      float verticalSpeed= (float) (DJIFlightControllerDataType.DJIVirtualStickVerticalControlMaxVelocity*0.2);
      float yawSpeed=(float) (DJIFlightControllerDataType.DJIVirtualStickYawControlMaxAngle*0.5);
     float mPitch=0,mRoll=0,mYaw=0,mThrottle=1.5f;
 //用于向无人机发送控制参数
      public void run() {
          flightController.sendVirtualStickFlightControlData(
                  new DJIFlightControllerDataType.DJIVirtualStickFlightControlData(
                          mPitch, mRoll, mYaw, mThrottle
                 ), new DJIBaseComponent.DJICompletionCallback() {
                     @Override
                     public void onResult(DJIError djiError) {
                        if(djiError!=null)
                             VirtualStickApplication.logError("SendControlData error:",djiError );
                     }
                 }
         );
         if(count++%3==0) {
            mPitch = mRoll = mYaw = 0;
         }
     }

其中,获取和释放权限、起飞、降落函数推荐在onclick事件中进行调用,控制无人机飞行的函数推荐在OnTouch事件中进行调用(也可利用自己写Timer控制每个函数的执行时间等)。


Github链接:https://github.com/MrJoeyM/sky-app

欢迎关注我的公众号:

编程技术与生活(ID:hw_cchang)

 

CC 公众号: hw_cchang CSDN认证博客专家 C++/Go后台
微信公众号:编程技术与生活(hw_cchang)
软件工程本硕毕业于武汉大学,现就职于某大厂。
从事过Java Web、Android、CV、深度学习开发,现主要从事CPP/Go后台开发。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值