Commit d47142ef authored by Don Gagne's avatar Don Gagne

Add start mission support

parent a40c121c
...@@ -186,6 +186,8 @@ void ArduCopterFirmwarePlugin::guidedModeTakeoff(Vehicle* vehicle) ...@@ -186,6 +186,8 @@ void ArduCopterFirmwarePlugin::guidedModeTakeoff(Vehicle* vehicle)
takeoffAlt /= 100; // centimeters -> meters takeoffAlt /= 100; // centimeters -> meters
} }
setGuidedMode(vehicle, true);
if (!_armVehicleAndValidate(vehicle)) { if (!_armVehicleAndValidate(vehicle)) {
qgcApp()->showMessage(tr("Unable to takeoff: Vehicle failed to arm.")); qgcApp()->showMessage(tr("Unable to takeoff: Vehicle failed to arm."));
return; return;
...@@ -285,3 +287,31 @@ bool ArduCopterFirmwarePlugin::vehicleYawsToNextWaypointInMission(const Vehicle* ...@@ -285,3 +287,31 @@ bool ArduCopterFirmwarePlugin::vehicleYawsToNextWaypointInMission(const Vehicle*
} }
return true; return true;
} }
void ArduCopterFirmwarePlugin::startMission(Vehicle* vehicle)
{
double currentAlt = vehicle->altitudeRelative()->rawValue().toDouble();
if (!vehicle->flying()) {
guidedModeTakeoff(vehicle);
// Wait for vehicle to get off ground before switching to auto
bool didTakeoff = false;
for (int i=0; i<50; i++) {
if (vehicle->altitudeRelative()->rawValue().toDouble() >= currentAlt + 1.0) {
didTakeoff = true;
break;
}
QGC::SLEEP::msleep(100);
qgcApp()->processEvents(QEventLoop::ExcludeUserInputEvents);
}
if (!didTakeoff) {
qgcApp()->showMessage(QStringLiteral("Unable to switch to Auto. Vehicle takeoff failed."));
return;
}
}
vehicle->setFlightMode(missionFlightMode());
}
...@@ -55,27 +55,28 @@ public: ...@@ -55,27 +55,28 @@ public:
ArduCopterFirmwarePlugin(void); ArduCopterFirmwarePlugin(void);
// Overrides from FirmwarePlugin // Overrides from FirmwarePlugin
bool isCapable(const Vehicle *vehicle, FirmwareCapabilities capabilities) final; bool isCapable (const Vehicle *vehicle, FirmwareCapabilities capabilities) final;
void setGuidedMode(Vehicle* vehicle, bool guidedMode) final; void setGuidedMode (Vehicle* vehicle, bool guidedMode) final;
void pauseVehicle(Vehicle* vehicle) final; void pauseVehicle (Vehicle* vehicle) final;
void guidedModeRTL(Vehicle* vehicle) final; void guidedModeRTL (Vehicle* vehicle) final;
void guidedModeLand(Vehicle* vehicle) final; void guidedModeLand (Vehicle* vehicle) final;
void guidedModeTakeoff(Vehicle* vehicle) final; void guidedModeTakeoff (Vehicle* vehicle) final;
void guidedModeGotoLocation(Vehicle* vehicle, const QGeoCoordinate& gotoCoord) final; void guidedModeGotoLocation (Vehicle* vehicle, const QGeoCoordinate& gotoCoord) final;
void guidedModeChangeAltitude(Vehicle* vehicle, double altitudeChange) final; void guidedModeChangeAltitude (Vehicle* vehicle, double altitudeChange) final;
const FirmwarePlugin::remapParamNameMajorVersionMap_t& paramNameRemapMajorVersionMap(void) const final { return _remapParamName; } const FirmwarePlugin::remapParamNameMajorVersionMap_t& paramNameRemapMajorVersionMap(void) const final { return _remapParamName; }
int remapParamNameHigestMinorVersionNumber(int majorVersionNumber) const final; int remapParamNameHigestMinorVersionNumber(int majorVersionNumber) const final;
bool multiRotorCoaxialMotors(Vehicle* vehicle) final; bool multiRotorCoaxialMotors (Vehicle* vehicle) final;
bool multiRotorXConfig(Vehicle* vehicle) final; bool multiRotorXConfig (Vehicle* vehicle) final;
QString geoFenceRadiusParam(Vehicle* vehicle) final; QString geoFenceRadiusParam (Vehicle* vehicle) final;
QString offlineEditingParamFile(Vehicle* vehicle) final { Q_UNUSED(vehicle); return QStringLiteral(":/FirmwarePlugin/APM/Copter.OfflineEditing.params"); } QString offlineEditingParamFile (Vehicle* vehicle) final { Q_UNUSED(vehicle); return QStringLiteral(":/FirmwarePlugin/APM/Copter.OfflineEditing.params"); }
QString pauseFlightMode(void) const override { return QString("Brake"); } QString pauseFlightMode (void) const override { return QString("Brake"); }
QString missionFlightMode(void) const override { return QString("Auto"); } QString missionFlightMode (void) const override { return QString("Auto"); }
QString rtlFlightMode(void) const override { return QString("RTL"); } QString rtlFlightMode (void) const override { return QString("RTL"); }
QString landFlightMode(void) const override { return QString("Land"); } QString landFlightMode (void) const override { return QString("Land"); }
QString takeControlFlightMode(void) const override { return QString("Stablize"); } QString takeControlFlightMode (void) const override { return QString("Stablize"); }
bool vehicleYawsToNextWaypointInMission(const Vehicle* vehicle) const final; bool vehicleYawsToNextWaypointInMission (const Vehicle* vehicle) const final;
QString autoDisarmParameter(Vehicle* vehicle) final { Q_UNUSED(vehicle); return QStringLiteral("DISARM_DELAY"); } QString autoDisarmParameter (Vehicle* vehicle) final { Q_UNUSED(vehicle); return QStringLiteral("DISARM_DELAY"); }
void startMission (Vehicle* vehicle) override;
private: private:
static bool _remapParamNameIntialized; static bool _remapParamNameIntialized;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment