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

时间: 2024-10-20 15:14:50

Dji Mobile SDK 基础实现(一)的相关文章

Dji Mobile SDK 基础实现(二)

Dji Mobile SDK 基础实现(二) 本文简要介绍如何通过调用DJI Mobile SDK,实现获取和释放无人机的控制权限.模拟遥控器按钮控制无人机的飞行.获取无人机的回传视频.获取无人机参数.实现和onboard SDK的数据透传. 下面逐个介绍以上内容,余下内容在前面文章已作介绍(文章末尾附上GitHub链接): 获取无人机的回传视频 获取无人机参数 实现和onboard SDK的数据透传 获取无人机的回传视频 1.调用并实例化TextureView控件,并在调用类中实现Surfac

DJI Mobile SDK 新教程

DJI Mobile SDK 新教程发布! http://bbs.dji.com/thread-20282-1-1.html Android 如何创建一个航拍相机App: 你将学到如何配置DJI Mobile SDK的iOS开发环境,如何展示相机的FPV画面,如何进行拍照和录像操作: 创建照片和视频回放App:  你将会学到如何使用DJI Mobile SDK去访问飞机相机上的SD卡媒体资源.当你完成本教程后,你将开发出一款app,具备预览照片,播放视频,下载或者删除文件等功能. 该教材目前只针

安卓集成极光推送SDK基础服务

1.到极光推送官网注册用户. 2.创建一个应用根据包名申请app key,注意一个包名对应一个appkey,如果不对应则不能实现功能. 3.下载官网上的SDK,内附指南. 4.首先是各种粘贴复制,注意别漏掉 5.然后是配置Manifest.xml文件 1)一开始第一条permission被我忘了 2)除了标注着required的部分还要把MyReceiver的部分也复制过来 3)注意该修改包名的地方和最后的appkey,不过官网提供的example里已经是改好的了可以直接用 <permissio

scaleform mobile sdk for android 多点触摸 修正

修正 scaleform 的多点触控 (随手一记 给后来的人做个参考) scaleform 版本号 4.2.24 (估计这就是最后一个 移动版的版本了,万年没有更新了) 开始 一直以为 scaleform 没有做  多点触控 和 手势 .其实 都已经封装好了.只是PC端的模拟器不支持.(调试 比较蛋疼只能 用真机了) 但是在用的时候发现 TouchEvent.Begin  有问题 只能获取第一个点击点,和第一个抬起点,move 操作可以正常获取. 如果不修改 代码的话  完全可以用 通过监听 m

DJI SDK iOS 开发之中的一个:前言

写这个开发教程之前,还是先说点什么. 首先要声明的是我并非DJI的员工.仅仅是DJI 飞行器的爱好者. 在DJI的phantom出来之后.我就一直期待着能够推出SDK.之前最早是Parrot的AR DRONE有推出SDK.可是其飞机性能本身就和Phantom不是一个量级.并且SDK推出后还不更新.如今看AR Drone的开发论坛基本就是两三年前的东西.因此,在去年11月底知道DJI最终出了SDK之后.我自己真的是严重兴奋了一把,感觉一个无比酷炫的平台不用花力气就搭建好了. 这是一个非常棒的人工智

DJI SDK iOS 开发之一:前言

写这个开发教程之前,还是先说点什么. 首先要声明的是我并不是DJI的员工,只是DJI 飞行器的爱好者. 在DJI的phantom出来之后,我就一直期待着能够推出SDK.之前最早是Parrot的AR DRONE有推出SDK.但是其飞机性能本身就和Phantom不是一个量级,而且SDK推出后还不更新,现在看AR Drone的开发论坛基本就是两三年前的东西.因此,在去年11月底知道DJI终于出了SDK之后,我自己真的是严重兴奋了一把,感觉一个无比酷炫的平台不用花力气就搭建好了. 这是一个非常棒的人工智

Bytom移动端钱包SDK开发基础

比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom Bytom-Mobile-Wallet-SDK 是从bytom源码中抽离出的钱包层代码,并且对钱包层代码进行了改造.使用gomobile可以将代码 编译成Android和iOS平台可用的SDK,使用编译后的Android和iOS钱包SDK可以在移动端实现创建bytom密钥.账户.地址和交易签名功能. Byt

SDk编程基础

一.Android简介: 由Andy Rubin开发, 常用手机版本:谷哥:Nexus.华为:EMUI.魅族:Flyme Adnroid是运行在Java虚拟机(JVM)上大部分免费的开源的.应用通过权限控制很容易获取用户敏感信息. 二.Android系统框架: Android虚拟机dalvik与JVM区别(版权问题开发的dalvik): Dalvik Jvm 识别的是dex文件 识别的是class jar包(多个class的压缩包) 架构是基于寄存器 架构是基于栈 Android ART模式(自

ios基础知识

1 1获取系统语言设置 2 3 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; 4 5 NSArray *languages = [userDefault objectForKey:@"AppleLanguages"]; 6 7 NSString *preferredLang = [languages objectAtIndex:0]; 8 9 2 10 11 缓存路径下文件大小 12 13 14