diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc index 2b280a360952f0b1e0fa47665ac44776d2ffdf31..8f7f35953253c8e86e966aa25cf4753fd64a9e62 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc @@ -162,12 +162,10 @@ bool APMFirmwarePlugin::isCapable(const Vehicle* vehicle, FirmwareCapabilities c uint32_t available = SetFlightModeCapability | PauseVehicleCapability | GuidedModeCapability; if (vehicle->multiRotor()) { available |= TakeoffVehicleCapability; - } else if (vehicle->fixedWing()) { - // Quad plane supports takeoff - if (vehicle->parameterManager()->parameterExists(FactSystem::defaultComponentId, QStringLiteral("Q_ENABLE")) && - vehicle->parameterManager()->getParameter(FactSystem::defaultComponentId, QStringLiteral("Q_ENABLE"))->rawValue().toBool()) { - available |= TakeoffVehicleCapability; - } + } else if (vehicle->fixedWing() || vehicle->vtol()) { + // Due to the way ArduPilot marks a vtol aircraft, we don't know if something is a vtol at initial connection. + // So we always enabled takeoff for fixed wing. + available |= TakeoffVehicleCapability; } return (capabilities & available) == capabilities; @@ -908,6 +906,11 @@ void APMFirmwarePlugin::guidedModeTakeoff(Vehicle* vehicle) bool APMFirmwarePlugin::_guidedModeTakeoff(Vehicle* vehicle) { + if (!vehicle->multiRotor() && !vehicle->vtol()) { + qgcApp()->showMessage(tr("Vehicle does not support guided takeoff")); + return false; + } + QString takeoffAltParam(vehicle->vtol() ? QStringLiteral("Q_RTL_ALT") : QStringLiteral("PILOT_TKOFF_ALT")); float paramDivisor = vehicle->vtol() ? 1.0 : 100.0; // PILOT_TAKEOFF_ALT is in centimeters @@ -965,6 +968,8 @@ void APMFirmwarePlugin::startMission(Vehicle* vehicle) qgcApp()->showMessage(QStringLiteral("Unable to start mission. Vehicle takeoff failed.")); return; } + } else { + return; } }