From 9fa408e47cb26e7c6f85183e6f8a16d39d0ca888 Mon Sep 17 00:00:00 2001 From: Gus Grubba Date: Thu, 13 Jun 2019 13:19:05 -0400 Subject: [PATCH 1/3] Initial support for PX4 rover vehicle. --- src/FirmwarePlugin/FirmwarePlugin.cc | 5 +++ src/FirmwarePlugin/FirmwarePlugin.h | 5 +++ src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc | 39 +++++++++++----------- src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h | 7 ++-- src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc | 7 ++-- 5 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/FirmwarePlugin/FirmwarePlugin.cc b/src/FirmwarePlugin/FirmwarePlugin.cc index f4cbcc6..f34e5c3 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.cc +++ b/src/FirmwarePlugin/FirmwarePlugin.cc @@ -50,6 +50,11 @@ FirmwarePluginFactoryRegister* FirmwarePluginFactoryRegister::instance(void) return _instance; } +FirmwarePlugin::FirmwarePlugin(MAV_TYPE vehicleType) +{ + _vehicleType = vehicleType; +} + AutoPilotPlugin* FirmwarePlugin::autopilotPlugin(Vehicle* vehicle) { return new GenericAutoPilotPlugin(vehicle, vehicle); diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index 55798a4..26fc3a8 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -49,6 +49,8 @@ public: TakeoffVehicleCapability = 1 << 4, ///< Vehicle supports guided takeoff } FirmwareCapabilities; + FirmwarePlugin(MAV_TYPE vehicleType = MAV_TYPE_GENERIC); + /// Maps from on parameter name to another /// key: parameter name to translate from /// value: mapped parameter name @@ -344,6 +346,9 @@ protected: // Returns regex QString to extract version information from text virtual QString _versionRegex() { return QString(); } +protected: + MAV_TYPE _vehicleType = MAV_TYPE_GENERIC; + private: QVariantList _toolBarIndicatorList; static QVariantList _cameraList; ///< Standard QGC camera list diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc index 63b7054..a151439 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc @@ -35,8 +35,9 @@ PX4FirmwarePluginInstanceData::PX4FirmwarePluginInstanceData(QObject* parent) } -PX4FirmwarePlugin::PX4FirmwarePlugin(void) - : _manualFlightMode (tr("Manual")) +PX4FirmwarePlugin::PX4FirmwarePlugin(MAV_TYPE vehicleType) + : FirmwarePlugin(vehicleType) + , _manualFlightMode (tr("Manual")) , _acroFlightMode (tr("Acro")) , _stabilizedFlightMode (tr("Stabilized")) , _rattitudeFlightMode (tr("Rattitude")) @@ -257,7 +258,7 @@ FactMetaData* PX4FirmwarePlugin::getMetaDataForFact(QObject* parameterMetaData, qWarning() << "Internal error: pointer passed to PX4FirmwarePlugin::getMetaDataForFact not PX4ParameterMetaData"; } - return NULL; + return nullptr; } void PX4FirmwarePlugin::addMetaDataToFact(QObject* parameterMetaData, Fact* fact, MAV_TYPE vehicleType) @@ -306,22 +307,16 @@ QString PX4FirmwarePlugin::missionCommandOverrides(MAV_TYPE vehicleType) const switch (vehicleType) { case MAV_TYPE_GENERIC: return QStringLiteral(":/json/PX4/MavCmdInfoCommon.json"); - break; case MAV_TYPE_FIXED_WING: return QStringLiteral(":/json/PX4/MavCmdInfoFixedWing.json"); - break; case MAV_TYPE_QUADROTOR: return QStringLiteral(":/json/PX4/MavCmdInfoMultiRotor.json"); - break; case MAV_TYPE_VTOL_QUADROTOR: return QStringLiteral(":/json/PX4/MavCmdInfoVTOL.json"); - break; case MAV_TYPE_SUBMARINE: return QStringLiteral(":/json/PX4/MavCmdInfoSub.json"); - break; case MAV_TYPE_GROUND_ROVER: return QStringLiteral(":/json/PX4/MavCmdInfoRover.json"); - break; default: qWarning() << "PX4FirmwarePlugin::missionCommandOverrides called with bad MAV_TYPE:" << vehicleType; return QString(); @@ -410,13 +405,14 @@ void PX4FirmwarePlugin::guidedModeTakeoff(Vehicle* vehicle, double takeoffAltRel qDebug() << takeoffAltRel << takeoffAltRelFromVehicle << takeoffAltAMSL << vehicleAltitudeAMSL; connect(vehicle, &Vehicle::mavCommandResult, this, &PX4FirmwarePlugin::_mavCommandResult); - vehicle->sendMavCommand(vehicle->defaultComponentId(), - MAV_CMD_NAV_TAKEOFF, - true, // show error is fails - -1, // No pitch requested - 0, 0, // param 2-4 unused - NAN, NAN, NAN, // No yaw, lat, lon - takeoffAltAMSL); // AMSL altitude + vehicle->sendMavCommand( + vehicle->defaultComponentId(), + MAV_CMD_NAV_TAKEOFF, + true, // show error is fails + -1, // No pitch requested + 0, 0, // param 2-4 unused + NAN, NAN, NAN, // No yaw, lat, lon + static_cast(takeoffAltAMSL)); // AMSL altitude } void PX4FirmwarePlugin::guidedModeGotoLocation(Vehicle* vehicle, const QGeoCoordinate& gotoCoord) @@ -446,8 +442,8 @@ void PX4FirmwarePlugin::guidedModeGotoLocation(Vehicle* vehicle, const QGeoCoord MAV_DO_REPOSITION_FLAGS_CHANGE_MODE, 0.0f, NAN, - gotoCoord.latitude(), - gotoCoord.longitude(), + static_cast(gotoCoord.latitude()), + static_cast(gotoCoord.longitude()), vehicle->altitudeAMSL()->rawValue().toFloat()); } } @@ -475,7 +471,7 @@ void PX4FirmwarePlugin::guidedModeChangeAltitude(Vehicle* vehicle, double altitu NAN, NAN, NAN, - vehicle->homePosition().altitude() + newAltRel); + static_cast(vehicle->homePosition().altitude() + newAltRel)); } void PX4FirmwarePlugin::startMission(Vehicle* vehicle) @@ -594,3 +590,8 @@ QString PX4FirmwarePlugin::_getLatestVersionFileUrl(Vehicle* vehicle){ QString PX4FirmwarePlugin::_versionRegex() { return QStringLiteral("v([0-9,\\.]*) Stable"); } + +bool PX4FirmwarePlugin::supportsNegativeThrust(void) +{ + return _vehicleType == MAV_TYPE_GROUND_ROVER; +} diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h index 3e7f794..072933c 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h @@ -23,8 +23,8 @@ class PX4FirmwarePlugin : public FirmwarePlugin Q_OBJECT public: - PX4FirmwarePlugin(void); - ~PX4FirmwarePlugin(); + PX4FirmwarePlugin (MAV_TYPE vehicleType); + ~PX4FirmwarePlugin () override; // Overrides from FirmwarePlugin @@ -69,6 +69,7 @@ public: QString autoDisarmParameter (Vehicle* vehicle) override { Q_UNUSED(vehicle); return QStringLiteral("COM_DISARM_LAND"); } uint32_t highLatencyCustomModeTo32Bits (uint16_t hlCustomMode) override; bool supportsTerrainFrame (void) const override { return false; } + bool supportsNegativeThrust (void) override; protected: typedef struct { @@ -122,7 +123,7 @@ class PX4FirmwarePluginInstanceData : public QObject Q_OBJECT public: - PX4FirmwarePluginInstanceData(QObject* parent = NULL); + PX4FirmwarePluginInstanceData(QObject* parent = nullptr); bool versionNotified; ///< true: user notified over version issue }; diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc index 66708e2..3e714ce 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc @@ -13,6 +13,7 @@ #include "PX4FirmwarePluginFactory.h" #include "PX4/PX4FirmwarePlugin.h" + PX4FirmwarePluginFactory PX4FirmwarePluginFactory; PX4FirmwarePluginFactory::PX4FirmwarePluginFactory(void) @@ -24,21 +25,17 @@ PX4FirmwarePluginFactory::PX4FirmwarePluginFactory(void) QList PX4FirmwarePluginFactory::supportedFirmwareTypes(void) const { QList list; - list.append(MAV_AUTOPILOT_PX4); return list; } FirmwarePlugin* PX4FirmwarePluginFactory::firmwarePluginForAutopilot(MAV_AUTOPILOT autopilotType, MAV_TYPE vehicleType) { - Q_UNUSED(vehicleType); - if (autopilotType == MAV_AUTOPILOT_PX4) { if (!_pluginInstance) { - _pluginInstance = new PX4FirmwarePlugin; + _pluginInstance = new PX4FirmwarePlugin(vehicleType); } return _pluginInstance; } - return nullptr; } From ad5d6b6853115d7871c843def848833622cf0fa4 Mon Sep 17 00:00:00 2001 From: Gus Grubba Date: Thu, 13 Jun 2019 13:19:14 -0400 Subject: [PATCH 2/3] Updating changelog --- ChangeLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog.md b/ChangeLog.md index efbf65e..7551bdd 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -6,6 +6,7 @@ Note: This file only contains high level features or important fixes. ### 3.6.0 - Daily Build +* For text to speech engine on Linux to English (all messages are in English) * Automated the ingestion of localization from Crowdin * Automated the generation of language resources into the application * Added all languages that come from Crowdin, even if empty. From 5b3311a312759a6942746bcef7afde0d18ca3e71 Mon Sep 17 00:00:00 2001 From: Gus Grubba Date: Thu, 13 Jun 2019 15:55:03 -0400 Subject: [PATCH 3/3] Instead of trying to keep a vehicle type within the FirmwarePlugin instance, pass the vehicle to the function so it can query the type that way. --- src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.cc | 2 +- src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.h | 2 +- src/FirmwarePlugin/FirmwarePlugin.cc | 7 +------ src/FirmwarePlugin/FirmwarePlugin.h | 7 +------ src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc | 9 ++++----- src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h | 4 ++-- src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc | 4 ++-- src/Vehicle/Vehicle.cc | 4 ++-- src/Vehicle/Vehicle.h | 2 +- 9 files changed, 15 insertions(+), 26 deletions(-) diff --git a/src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.cc b/src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.cc index cc52a2a..be6b637 100644 --- a/src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.cc @@ -74,7 +74,7 @@ void ArduRoverFirmwarePlugin::guidedModeChangeAltitude(Vehicle* vehicle, double qgcApp()->showMessage(QStringLiteral("Change altitude not supported.")); } -bool ArduRoverFirmwarePlugin::supportsNegativeThrust(void) +bool ArduRoverFirmwarePlugin::supportsNegativeThrust(Vehicle* /*vehicle*/) { return true; } diff --git a/src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.h b/src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.h index 0e2d452..6dd7882 100644 --- a/src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.h +++ b/src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.h @@ -50,7 +50,7 @@ public: void guidedModeChangeAltitude (Vehicle* vehicle, double altitudeChange) final; int remapParamNameHigestMinorVersionNumber (int majorVersionNumber) const final; const FirmwarePlugin::remapParamNameMajorVersionMap_t& paramNameRemapMajorVersionMap(void) const final { return _remapParamName; } - bool supportsNegativeThrust (void) final; + bool supportsNegativeThrust (Vehicle *) final; bool supportsSmartRTL (void) const override { return true; } QString offlineEditingParamFile (Vehicle* vehicle) override { Q_UNUSED(vehicle); return QStringLiteral(":/FirmwarePlugin/APM/Rover.OfflineEditing.params"); } diff --git a/src/FirmwarePlugin/FirmwarePlugin.cc b/src/FirmwarePlugin/FirmwarePlugin.cc index f34e5c3..db82052 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.cc +++ b/src/FirmwarePlugin/FirmwarePlugin.cc @@ -50,11 +50,6 @@ FirmwarePluginFactoryRegister* FirmwarePluginFactoryRegister::instance(void) return _instance; } -FirmwarePlugin::FirmwarePlugin(MAV_TYPE vehicleType) -{ - _vehicleType = vehicleType; -} - AutoPilotPlugin* FirmwarePlugin::autopilotPlugin(Vehicle* vehicle) { return new GenericAutoPilotPlugin(vehicle, vehicle); @@ -132,7 +127,7 @@ bool FirmwarePlugin::supportsThrottleModeCenterZero(void) return true; } -bool FirmwarePlugin::supportsNegativeThrust(void) +bool FirmwarePlugin::supportsNegativeThrust(Vehicle* /*vehicle*/) { // By default, this is not supported return false; diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index 26fc3a8..51739d4 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -49,8 +49,6 @@ public: TakeoffVehicleCapability = 1 << 4, ///< Vehicle supports guided takeoff } FirmwareCapabilities; - FirmwarePlugin(MAV_TYPE vehicleType = MAV_TYPE_GENERIC); - /// Maps from on parameter name to another /// key: parameter name to translate from /// value: mapped parameter name @@ -164,7 +162,7 @@ public: /// Returns true if the vehicle and firmware supports the use of negative thrust /// Typically supported rover. - virtual bool supportsNegativeThrust(void); + virtual bool supportsNegativeThrust(Vehicle *); /// Returns true if the firmware supports the use of the RC radio and requires the RC radio /// setup page. Returns true by default. @@ -346,9 +344,6 @@ protected: // Returns regex QString to extract version information from text virtual QString _versionRegex() { return QString(); } -protected: - MAV_TYPE _vehicleType = MAV_TYPE_GENERIC; - private: QVariantList _toolBarIndicatorList; static QVariantList _cameraList; ///< Standard QGC camera list diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc index a151439..d6a70cd 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc @@ -35,9 +35,8 @@ PX4FirmwarePluginInstanceData::PX4FirmwarePluginInstanceData(QObject* parent) } -PX4FirmwarePlugin::PX4FirmwarePlugin(MAV_TYPE vehicleType) - : FirmwarePlugin(vehicleType) - , _manualFlightMode (tr("Manual")) +PX4FirmwarePlugin::PX4FirmwarePlugin() + : _manualFlightMode (tr("Manual")) , _acroFlightMode (tr("Acro")) , _stabilizedFlightMode (tr("Stabilized")) , _rattitudeFlightMode (tr("Rattitude")) @@ -591,7 +590,7 @@ QString PX4FirmwarePlugin::_versionRegex() { return QStringLiteral("v([0-9,\\.]*) Stable"); } -bool PX4FirmwarePlugin::supportsNegativeThrust(void) +bool PX4FirmwarePlugin::supportsNegativeThrust(Vehicle* vehicle) { - return _vehicleType == MAV_TYPE_GROUND_ROVER; + return vehicle->vehicleType() == MAV_TYPE_GROUND_ROVER; } diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h index 072933c..f1aeba0 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h @@ -23,7 +23,7 @@ class PX4FirmwarePlugin : public FirmwarePlugin Q_OBJECT public: - PX4FirmwarePlugin (MAV_TYPE vehicleType); + PX4FirmwarePlugin (); ~PX4FirmwarePlugin () override; // Overrides from FirmwarePlugin @@ -69,7 +69,7 @@ public: QString autoDisarmParameter (Vehicle* vehicle) override { Q_UNUSED(vehicle); return QStringLiteral("COM_DISARM_LAND"); } uint32_t highLatencyCustomModeTo32Bits (uint16_t hlCustomMode) override; bool supportsTerrainFrame (void) const override { return false; } - bool supportsNegativeThrust (void) override; + bool supportsNegativeThrust (Vehicle *vehicle) override; protected: typedef struct { diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc index 3e714ce..7241bad 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc @@ -29,11 +29,11 @@ QList PX4FirmwarePluginFactory::supportedFirmwareTypes(void) cons return list; } -FirmwarePlugin* PX4FirmwarePluginFactory::firmwarePluginForAutopilot(MAV_AUTOPILOT autopilotType, MAV_TYPE vehicleType) +FirmwarePlugin* PX4FirmwarePluginFactory::firmwarePluginForAutopilot(MAV_AUTOPILOT autopilotType, MAV_TYPE /*vehicleType*/) { if (autopilotType == MAV_AUTOPILOT_PX4) { if (!_pluginInstance) { - _pluginInstance = new PX4FirmwarePlugin(vehicleType); + _pluginInstance = new PX4FirmwarePlugin(); } return _pluginInstance; } diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 8ff3632..916c282 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -2871,9 +2871,9 @@ bool Vehicle::supportsThrottleModeCenterZero(void) const return _firmwarePlugin->supportsThrottleModeCenterZero(); } -bool Vehicle::supportsNegativeThrust(void) const +bool Vehicle::supportsNegativeThrust(void) { - return _firmwarePlugin->supportsNegativeThrust(); + return _firmwarePlugin->supportsNegativeThrust(this); } bool Vehicle::supportsRadio(void) const diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index 6c02c4c..83bb46f 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -854,7 +854,7 @@ public: bool sub(void) const; bool supportsThrottleModeCenterZero (void) const; - bool supportsNegativeThrust (void) const; + bool supportsNegativeThrust (void); bool supportsRadio (void) const; bool supportsJSButton (void) const; bool supportsMotorInterference (void) const;