【dji sdk】mobile sdk 摇杆部分

    xiaoxiao2026-01-14  7

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

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)