【dji sdk】mobile sdk 摇杆部分

简介: 版本:sdk 3.1.1.概述 使用sdk中的一些api可以直接控制飞机的飞行,起到虚拟摇杆的作用。 注意:仅当遥控器调到F模式下,virtualStick才有效,不然会有异常(而不是回调报错),坑! 吐槽:dji的sdk的代码质量不是很好,package名中怎么能有大写字母呢? 2.类与方法 dji.sdk.FlightController.DJIFlightControlle
版本:sdk 3.1.

1.概述

使用sdk中的一些api可以直接控制飞机的飞行,起到虚拟摇杆的作用。

微笑注意:仅当遥控器调到F模式下,virtualStick才有效,不然会有异常(而不是回调报错),坑!

微笑吐槽:dji的sdk的代码质量不是很好,package名中怎么能有大写字母呢?

2.类与方法

dji.sdk.FlightController. DJIFlightController

抽象类。负责控制飞机飞行,代替直接操作遥控器。

2.1启用虚拟摇杆

dji.sdk.FlightController.DJIFlightController#enableVirtualStickControlMode(DJICompletionCallback var1)

启用虚拟摇杆功能,并设置回调函数。

2.2设置坐标系与控制模式

通常可设为body坐标系,代码见下:

 flightController.setHorizontalCoordinateSystem(
                DJIFlightControllerDataType.DJIVirtualStickFlightCoordinateSystem.Body
        );
控制模式的设置见下。

dji.sdk.FlightController.DJIFlightControllerDataType

类。此类中有一些常量。见下。
float DJIVirtualStickRollPitchControlMaxVelocity=15;//Roll/Pitch control velocity MAX value 15m/s.
float DJIVirtualStickRollPitchControlMinVelocity=-15;//Roll/Pitch control velocity MIN value -15m/s.
float DJIVirtualStickVerticalControlMaxVelocity=4;//Vertical control velocity MAX value 4 m/s in VirtualStickControlMode.
float DJIVirtualStickVerticalControlMinVelocity=-4;//Vertical control velocity MIN value -4 m/s in VirtualStickControlMode.
float DJIVirtualStickYawControlMaxAngle=180;//Yaw control angle MAX value 180 degrees.
float DJIVirtualStickYawControlMaxAngle=-180;//Yaw control angle MIN value -180 degrees.

dji.sdk.FlightController.DJIFlightController# setRollPitchControlMode(DJIVirtualStickRollPitchControlMode rollPitchControlMode)
设置 Roll and Pitch control mode.
dji.sdk.FlightController.DJIFlightControllerDataType. DJIVirtualStickRollPitchControlMode

枚举。有AngleVelocity两个值。

dji.sdk.FlightController.DJIFlightController#setVerticalControlMode(DJIVirtualStickVerticalControlMode verticalControlMode) 
设置vertical Control Mode。
dji.sdk.FlightController.DJIFlightControllerDataType.DJIVirtualStickVerticalControlMode
枚举。有VelocityPosition两个值。Velocity:速度。Position:此时的参数被解释为离地面高度。

dji.sdk.FlightController.DJIFlightController#setYawControlMode(DJIVirtualStickYawControlMode  yawControlMode)

设置Yaw Control Mode

dji.sdk.FlightController.DJIFlightControllerDataType.DJIVirtualStickYawControlMode 

枚举。有AngleAngularVelocity两个值。

/*
在以下四个模式下:参数的解释为:
mPitch :正数为右,负数为左。
mRoll:正数为前,负数为后。
*/

//set body coordinate
flightController.setHorizontalCoordinateSystem(
		DJIFlightControllerDataType.DJIVirtualStickFlightCoordinateSystem.Body
);
//set roll/pitch  mode
flightController.setRollPitchControlMode(
		DJIFlightControllerDataType.DJIVirtualStickRollPitchControlMode.Velocity
);
//set vertical mode
flightController.setVerticalControlMode(
		DJIFlightControllerDataType.DJIVirtualStickVerticalControlMode.Velocity
);
//set yaw mode
flightController.setYawControlMode(DJIFlightControllerDataType.DJIVirtualStickYawControlMode.AngularVelocity);

微笑注意:RollPitchMode与VerticalMode与yawMode是并行的,需要同时设置且三个相互独立。

2.3起飞与降落

public abstract void DJIFlightController. takeOff(DJIBaseComponent.DJICompletionCallback callback)
用于起飞。它会将飞行器升高到 1.2米,并在升高到0.5米的时候回调callback。若不给飞机装螺旋桨,它会马达空转7秒后停止。再次尝试takeOff(),会报错:the execution of this process is timed out。尝试用手举起飞机,欺骗它已经起飞是不可行的。

public abstract void DJIFlightController. cancelTakeOff (DJIBaseComponent.DJICompletionCallback callback)
在起飞完成前调用此函数才有效。飞机会停止升高并悬停在当前高度。已经调用的takeOff()函数会报错。

public abstract void DJIFlightController. autoLanding(DJIBaseComponent.DJICompletionCallback callback)
自动降落,然后电机停转。

public abstract void DJIFlightController. cancelAutoLanding (DJIBaseComponent.DJICompletionCallback callback)
在降落完成前调用此函数才有效。飞机会停止降落并悬停在当前高度。已经调用的autoLanding()函数会报错。
微笑注意:这些函数都是abstract的。DJIFlightController有多个子类(它们的类名是c,bc这种混乱的名字,坑!),需要尝试用instanceof并转换类型后调用。示例代码见下:

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

2.4 发送飞行指令

dji.sdk.FlightController.DJIFlightController#sendVirtualStickFlightControlData(DJIVirtualStickFlightControlData var1, DJICompletionCallback var2)
app给遥控器发送飞行指令。
dji.sdk.FlightController.DJIFlightControllerDataType.DJIVirtualStickFlightControlData
类。代表app给遥控器的数据。
public DJIVirtualStickFlightControlData(float mPitch, float mRoll, float mYaw, float mVerticalThrottle)
类DJIVirtualStickFlightControlData的构造函数。

微笑注意:官方文档推荐app与遥控的通信频率在50Hz,也就是说开发者必须借助TimerTask来定时发数据,timePeriod设为200ms即可。

微笑注意:roll与pitch的效果为:roll负责左右,正数为右;pitch负责前后,正数为前。具体可参见:http://developer.dji.com/cn/mobile-sdk/get-started/Virtual-Stick-User-Guide/

目录
相关文章
|
开发工具 Android开发 数据安全/隐私保护
|
开发工具 编解码
【dji sdk】mobile sdk 视频部分
1.类与方法 dji.sdk.Camera.DJICamera 类。代表相机。 dji.sdk.Camera.DJICamera#setDJICameraReceivedVideoDataCallback(dji.sdk.Camera.DJICamera.CameraReceivedVideoDataCallback var1) 设置收到实时图像数据的回调函数。 dji.sdk.
2127 0
|
开发工具 Android开发
【dji sdk】mobile sdk开发
1.设备信息 平台:phantom 3 Advanced。 手机:android 5.0 Lollipop。 dji sdk: Mobike SDK 3.0/3.1。 2.开发前准备 1.联网激活飞行器。 2.申请成为dji 开发者。 3.申请app的key,放在android项目中的manifest.xml文件中。 3.mobile sdk 介绍 手机与飞机的通信流程
2686 0
|
3天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
267 0
|
6月前
|
API 开发工具 Android开发
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
147 0
|
3月前
|
开发工具 Android开发
Android获取SDK的版本信息
Android获取SDK的版本信息
39 0
|
4月前
|
编解码 Java 开发工具
Android端接入视频生产 Java SDK
Android端接入视频生产 Java SDK
40 1
|
8月前
|
Java 开发工具 Android开发
逻辑清晰,详解社交源码Android开发SDK
前篇我们讲解了有关如何在IOS平台开发集成SDK,那么今天来给大家简单讲解下如何在社交源码Android客户端上开发集成 SDK。
逻辑清晰,详解社交源码Android开发SDK

热门文章

最新文章