public static float getDefaultMinAltitude(MavLinkDrone drone) { final int droneType = drone.getType(); if (Type.isCopter(droneType)) { return 2f; } else if (Type.isPlane(droneType)) { return 15f; } else { return 0f; } }
public void doGuidedTakeoff(final double alt, final ICommandListener listener) { if (Type.isCopter(myDrone.getType())) { coord = getGpsPosition(); altitude = alt; state = GuidedStates.IDLE; changeToGuidedMode( myDrone, new SimpleCommandListener() { @Override public void onSuccess() { MavLinkTakeoff.sendTakeoff(myDrone, alt, listener); myDrone.notifyDroneEvent(DroneEventsType.GUIDEDPOINT); } @Override public void onError(int executionError) { if (listener != null) { try { listener.onError(executionError); } catch (RemoteException e) { Timber.e(e, e.getMessage()); } } } @Override public void onTimeout() { if (listener != null) { try { listener.onTimeout(); } catch (RemoteException e) { Timber.e(e, e.getMessage()); } } } }); } else { if (listener != null) { handler.post( new Runnable() { @Override public void run() { try { listener.onError(CommandExecutionError.COMMAND_UNSUPPORTED); } catch (RemoteException e) { Timber.e(e, e.getMessage()); } } }); } } }
public static void changeToGuidedMode(MavLinkDrone drone, ICommandListener listener) { final State droneState = drone.getState(); final int droneType = drone.getType(); if (Type.isCopter(droneType)) { droneState.changeFlightMode(ApmModes.ROTOR_GUIDED, listener); } else if (Type.isPlane(droneType)) { // You have to send a guided point to the plane in order to trigger guided mode. forceSendGuidedPoint(drone, getGpsPosition(drone), getDroneAltConstrained(drone)); } else if (Type.isRover(droneType)) { droneState.changeFlightMode(ApmModes.ROVER_GUIDED, listener); } }
public static void arm( final MavLinkDrone drone, final boolean arm, final boolean emergencyDisarm, final ICommandListener listener) { if (drone == null) return; if (!arm && emergencyDisarm) { if (org.droidplanner.services.android.core.drone.variables.Type.isCopter(drone.getType()) && !isKillSwitchSupported(drone)) { changeVehicleMode( drone, VehicleMode.COPTER_STABILIZE, new AbstractCommandListener() { @Override public void onSuccess() { MavLinkArm.sendArmMessage(drone, arm, emergencyDisarm, listener); } @Override public void onError(int executionError) { if (listener != null) { try { listener.onError(executionError); } catch (RemoteException e) { Timber.e(e, e.getMessage()); } } } @Override public void onTimeout() { if (listener != null) { try { listener.onTimeout(); } catch (RemoteException e) { Timber.e(e, e.getMessage()); } } } }); return; } } MavLinkArm.sendArmMessage(drone, arm, emergencyDisarm, listener); }
/** * Check if the kill switch feature is supported on the given drone * * @param drone * @return true if it's supported, false otherwise. */ public static boolean isKillSwitchSupported(MavLinkDrone drone) { if (drone == null) return false; if (!org.droidplanner.services.android.core.drone.variables.Type.isCopter(drone.getType())) return false; final String firmwareVersion = drone.getFirmwareVersion(); if (TextUtils.isEmpty(firmwareVersion)) return false; if (!firmwareVersion.startsWith("APM:Copter V3.3") && !firmwareVersion.startsWith("APM:Copter V3.4") && !firmwareVersion.startsWith("Solo")) { return false; } return true; }
public static boolean isGuidedMode(MavLinkDrone drone) { if (drone == null) return false; final int droneType = drone.getType(); final ApmModes droneMode = drone.getState().getMode(); if (Type.isCopter(droneType)) { return droneMode == ApmModes.ROTOR_GUIDED; } if (Type.isPlane(droneType)) { return droneMode == ApmModes.FIXED_WING_GUIDED; } if (Type.isRover(droneType)) { return droneMode == ApmModes.ROVER_GUIDED || droneMode == ApmModes.ROVER_HOLD; } return false; }