Ejemplo n.º 1
0
 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;
   }
 }
Ejemplo n.º 2
0
  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);
    }
  }
Ejemplo n.º 3
0
  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;
  }
Ejemplo n.º 4
0
  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());
                }
              }
            });
      }
    }
  }
Ejemplo n.º 5
0
  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);
  }
Ejemplo n.º 6
0
  /**
   * 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;
  }