本文共 4513 字,大约阅读时间需要 15 分钟。
使用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 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是并行的,需要同时设置且三个相互独立。
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); } } ); } }
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负责前后,正数为前。具体可参见:。