From 98fb676202c7e3a42112b0eeaf41a7c77b9566a9 Mon Sep 17 00:00:00 2001 From: eris Date: Wed, 9 Sep 2026 15:18:48 +0200 Subject: [PATCH 1/2] Fix APM takeoff when vehicle is already armed while being on the ground --- src/FirmwarePlugin/APM/APMFirmwarePlugin.cc | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc index f731273dcef..08791bb4201 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc @@ -1044,6 +1044,7 @@ bool APMFirmwarePlugin::_guidedModeTakeoff(Vehicle *vehicle, double altitudeRel) return true; } + void APMFirmwarePlugin::startTakeoff(Vehicle *vehicle) const { if (vehicle->flying()) { @@ -1051,16 +1052,16 @@ void APMFirmwarePlugin::startTakeoff(Vehicle *vehicle) const return; } - if (!vehicle->armed()) { - if (!_setFlightModeAndValidate(vehicle, takeOffFlightMode())) { - QGC::showAppMessage(tr("Unable to start takeoff: Vehicle failed to change to Takeoff mode.")); - return; - } + // The vehicle is on the ground, so it's safe to switch to Takeoff mode regardless of arming state. + if (!_setFlightModeAndValidate(vehicle, takeOffFlightMode())) { + QGC::showAppMessage(tr("Unable to start takeoff: Vehicle failed to change to Takeoff mode.")); + return; + } - if (!_armVehicleAndValidate(vehicle)) { - QGC::showAppMessage(tr("Unable to start takeoff: Vehicle failed to arm.")); - return; - } + // Only arm the vehicle if it is not already armed. + if (!vehicle->armed() && !_armVehicleAndValidate(vehicle)) { + QGC::showAppMessage(tr("Unable to start takeoff: Vehicle failed to arm.")); + return; } } From bc292b443be96802af1d7816c160b9eede7268ab Mon Sep 17 00:00:00 2001 From: eris Date: Wed, 9 Sep 2026 15:22:39 +0200 Subject: [PATCH 2/2] Fix APM takeoff when the vehicle is already armed while being on the ground --- src/FirmwarePlugin/APM/APMFirmwarePlugin.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc index 08791bb4201..130aa2aa0e2 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc @@ -1052,13 +1052,13 @@ void APMFirmwarePlugin::startTakeoff(Vehicle *vehicle) const return; } - // The vehicle is on the ground, so it's safe to switch to Takeoff mode regardless of arming state. + // The vehicle is on the ground, so it's safe to switch to Takeoff mode regardless of arming state if (!_setFlightModeAndValidate(vehicle, takeOffFlightMode())) { QGC::showAppMessage(tr("Unable to start takeoff: Vehicle failed to change to Takeoff mode.")); return; } - // Only arm the vehicle if it is not already armed. + // Only arm the vehicle if it is not already armed if (!vehicle->armed() && !_armVehicleAndValidate(vehicle)) { QGC::showAppMessage(tr("Unable to start takeoff: Vehicle failed to arm.")); return;