Dji Mobile SDK 基础实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dji Mobile SDK 基础实现相关的知识,希望对你有一定的参考价值。
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 基础实现的主要内容,如果未能解决你的问题,请参考以下文章
尝试流式传输到自定义 RTMP 时,DJI Mobile SDK 中出现 LiveStreamManager 错误 -3?