博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【dji sdk】mobile sdk 摇杆部分
阅读量:6328 次
发布时间:2019-06-22

本文共 4513 字,大约阅读时间需要 15 分钟。

版本: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 coordinateflightController.setHorizontalCoordinateSystem(		DJIFlightControllerDataType.DJIVirtualStickFlightCoordinateSystem.Body);//set roll/pitch  modeflightController.setRollPitchControlMode(		DJIFlightControllerDataType.DJIVirtualStickRollPitchControlMode.Velocity);//set vertical modeflightController.setVerticalControlMode(		DJIFlightControllerDataType.DJIVirtualStickVerticalControlMode.Velocity);//set yaw modeflightController.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负责前后,正数为前。具体可参见:。

你可能感兴趣的文章
程序员面临的伦理困境
查看>>
Android 团队早期员工解释 Android 哪里不如 iOS
查看>>
《OSPF和IS-IS详解》一第1章 高级BGP介绍
查看>>
《Unity着色器和屏幕特效》——第1章 掌握标准着色器 1.1 创建程序项目
查看>>
通过freemarker生成一个word,解决生成的word用wps打开有问题的问题,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表...
查看>>
《Oracle PL/SQL程序设计(第5版)》一一2.6 在其他语言中调用PL/SQL
查看>>
《ZooKeeper:分布式过程协同技术详解》——1.3 分布式协作的难点
查看>>
《伟大的计算原理》一致谢
查看>>
《数据分析实战:基于EXCEL和SPSS系列工具的实践》——3.3 耗时耗力的数据整理过程...
查看>>
《可穿戴创意设计:技术与时尚的融合》一一第3章 从纺织品到可穿戴设备
查看>>
聪明人的对策及纳什均衡
查看>>
《Raspberry Pi用户指南》——2.6 文件系统布局
查看>>
《数字图像处理与机器视觉——Visual C++与Matlab实现》——1.4 读取和写入图像文件...
查看>>
Design Pattern - 装饰模式
查看>>
《为iPad而设计:打造畅销App》——为什么iPad不是放大版的iPhone
查看>>
并发网系列文章集
查看>>
《从缺陷中学习C/C++》——6.17 String对象何时需delete
查看>>
支付宝能扫码闪电开发票了!人均省时3分钟
查看>>
【Spark Summit East 2017】FIS:加速FinTech数字智能
查看>>
MySQL · 社区见闻 · Oracle Open World 2016 见闻
查看>>