使用sdk中的一些api可以直接控制飞机的飞行,起到虚拟摇杆的作用。
注意:仅当遥控器调到F模式下,virtualStick才有效,不然会有异常(而不是回调报错),坑!
吐槽:dji的sdk的代码质量不是很好,package名中怎么能有大写字母呢?
抽象类。负责控制飞机飞行,代替直接操作遥控器。
dji.sdk.FlightController.DJIFlightController#enableVirtualStickControlMode(DJICompletionCallback var1)
启用虚拟摇杆功能,并设置回调函数。
通常可设为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枚举。有Angle与Velocity两个值。
dji.sdk.FlightController.DJIFlightController#setVerticalControlMode(DJIVirtualStickVerticalControlMode verticalControlMode) 设置vertical Control Mode。 dji.sdk.FlightController.DJIFlightControllerDataType.DJIVirtualStickVerticalControlMode 枚举。有Velocity与Position两个值。Velocity:速度。Position:此时的参数被解释为离地面高度。
dji.sdk.FlightController.DJIFlightController#setYawControlMode(DJIVirtualStickYawControlMode yawControlMode)
设置Yaw Control Mode。
dji.sdk.FlightController.DJIFlightControllerDataType.DJIVirtualStickYawControlMode
枚举。有Angle与AngularVelocity两个值。
/* 在以下四个模式下:参数的解释为: 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是并行的,需要同时设置且三个相互独立。
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