【dji sdk】mobile sdk 摇杆部分

本文介绍如何使用DJI SDK中的虚拟摇杆控制无人机飞行,包括启用虚拟摇杆、设置飞行模式及控制参数等关键步骤。此外还提供了起飞、降落等基本操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本: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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值