Browse Source

Merge pull request #7521 from mavlink/px4Rover

Initial support for PX4 Rover
QGC4.4
Gus Grubba 6 years ago committed by GitHub
parent
commit
d2c0b16778
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      ChangeLog.md
  2. 2
      src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.cc
  3. 2
      src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.h
  4. 2
      src/FirmwarePlugin/FirmwarePlugin.cc
  5. 2
      src/FirmwarePlugin/FirmwarePlugin.h
  6. 26
      src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc
  7. 7
      src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h
  8. 9
      src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc
  9. 4
      src/Vehicle/Vehicle.cc
  10. 2
      src/Vehicle/Vehicle.h

1
ChangeLog.md

@ -6,6 +6,7 @@ Note: This file only contains high level features or important fixes.
### 3.6.0 - Daily Build ### 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 ingestion of localization from Crowdin
* Automated the generation of language resources into the application * Automated the generation of language resources into the application
* Added all languages that come from Crowdin, even if empty. * Added all languages that come from Crowdin, even if empty.

2
src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.cc

@ -74,7 +74,7 @@ void ArduRoverFirmwarePlugin::guidedModeChangeAltitude(Vehicle* vehicle, double
qgcApp()->showMessage(QStringLiteral("Change altitude not supported.")); qgcApp()->showMessage(QStringLiteral("Change altitude not supported."));
} }
bool ArduRoverFirmwarePlugin::supportsNegativeThrust(void) bool ArduRoverFirmwarePlugin::supportsNegativeThrust(Vehicle* /*vehicle*/)
{ {
return true; return true;
} }

2
src/FirmwarePlugin/APM/ArduRoverFirmwarePlugin.h

@ -50,7 +50,7 @@ public:
void guidedModeChangeAltitude (Vehicle* vehicle, double altitudeChange) final; void guidedModeChangeAltitude (Vehicle* vehicle, double altitudeChange) final;
int remapParamNameHigestMinorVersionNumber (int majorVersionNumber) const final; int remapParamNameHigestMinorVersionNumber (int majorVersionNumber) const final;
const FirmwarePlugin::remapParamNameMajorVersionMap_t& paramNameRemapMajorVersionMap(void) const final { return _remapParamName; } 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; } bool supportsSmartRTL (void) const override { return true; }
QString offlineEditingParamFile (Vehicle* vehicle) override { Q_UNUSED(vehicle); return QStringLiteral(":/FirmwarePlugin/APM/Rover.OfflineEditing.params"); } QString offlineEditingParamFile (Vehicle* vehicle) override { Q_UNUSED(vehicle); return QStringLiteral(":/FirmwarePlugin/APM/Rover.OfflineEditing.params"); }

2
src/FirmwarePlugin/FirmwarePlugin.cc

@ -127,7 +127,7 @@ bool FirmwarePlugin::supportsThrottleModeCenterZero(void)
return true; return true;
} }
bool FirmwarePlugin::supportsNegativeThrust(void) bool FirmwarePlugin::supportsNegativeThrust(Vehicle* /*vehicle*/)
{ {
// By default, this is not supported // By default, this is not supported
return false; return false;

2
src/FirmwarePlugin/FirmwarePlugin.h

@ -162,7 +162,7 @@ public:
/// Returns true if the vehicle and firmware supports the use of negative thrust /// Returns true if the vehicle and firmware supports the use of negative thrust
/// Typically supported rover. /// 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 /// Returns true if the firmware supports the use of the RC radio and requires the RC radio
/// setup page. Returns true by default. /// setup page. Returns true by default.

26
src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc

@ -35,7 +35,7 @@ PX4FirmwarePluginInstanceData::PX4FirmwarePluginInstanceData(QObject* parent)
} }
PX4FirmwarePlugin::PX4FirmwarePlugin(void) PX4FirmwarePlugin::PX4FirmwarePlugin()
: _manualFlightMode (tr("Manual")) : _manualFlightMode (tr("Manual"))
, _acroFlightMode (tr("Acro")) , _acroFlightMode (tr("Acro"))
, _stabilizedFlightMode (tr("Stabilized")) , _stabilizedFlightMode (tr("Stabilized"))
@ -257,7 +257,7 @@ FactMetaData* PX4FirmwarePlugin::getMetaDataForFact(QObject* parameterMetaData,
qWarning() << "Internal error: pointer passed to PX4FirmwarePlugin::getMetaDataForFact not PX4ParameterMetaData"; qWarning() << "Internal error: pointer passed to PX4FirmwarePlugin::getMetaDataForFact not PX4ParameterMetaData";
} }
return NULL; return nullptr;
} }
void PX4FirmwarePlugin::addMetaDataToFact(QObject* parameterMetaData, Fact* fact, MAV_TYPE vehicleType) void PX4FirmwarePlugin::addMetaDataToFact(QObject* parameterMetaData, Fact* fact, MAV_TYPE vehicleType)
@ -306,22 +306,16 @@ QString PX4FirmwarePlugin::missionCommandOverrides(MAV_TYPE vehicleType) const
switch (vehicleType) { switch (vehicleType) {
case MAV_TYPE_GENERIC: case MAV_TYPE_GENERIC:
return QStringLiteral(":/json/PX4/MavCmdInfoCommon.json"); return QStringLiteral(":/json/PX4/MavCmdInfoCommon.json");
break;
case MAV_TYPE_FIXED_WING: case MAV_TYPE_FIXED_WING:
return QStringLiteral(":/json/PX4/MavCmdInfoFixedWing.json"); return QStringLiteral(":/json/PX4/MavCmdInfoFixedWing.json");
break;
case MAV_TYPE_QUADROTOR: case MAV_TYPE_QUADROTOR:
return QStringLiteral(":/json/PX4/MavCmdInfoMultiRotor.json"); return QStringLiteral(":/json/PX4/MavCmdInfoMultiRotor.json");
break;
case MAV_TYPE_VTOL_QUADROTOR: case MAV_TYPE_VTOL_QUADROTOR:
return QStringLiteral(":/json/PX4/MavCmdInfoVTOL.json"); return QStringLiteral(":/json/PX4/MavCmdInfoVTOL.json");
break;
case MAV_TYPE_SUBMARINE: case MAV_TYPE_SUBMARINE:
return QStringLiteral(":/json/PX4/MavCmdInfoSub.json"); return QStringLiteral(":/json/PX4/MavCmdInfoSub.json");
break;
case MAV_TYPE_GROUND_ROVER: case MAV_TYPE_GROUND_ROVER:
return QStringLiteral(":/json/PX4/MavCmdInfoRover.json"); return QStringLiteral(":/json/PX4/MavCmdInfoRover.json");
break;
default: default:
qWarning() << "PX4FirmwarePlugin::missionCommandOverrides called with bad MAV_TYPE:" << vehicleType; qWarning() << "PX4FirmwarePlugin::missionCommandOverrides called with bad MAV_TYPE:" << vehicleType;
return QString(); return QString();
@ -410,13 +404,14 @@ void PX4FirmwarePlugin::guidedModeTakeoff(Vehicle* vehicle, double takeoffAltRel
qDebug() << takeoffAltRel << takeoffAltRelFromVehicle << takeoffAltAMSL << vehicleAltitudeAMSL; qDebug() << takeoffAltRel << takeoffAltRelFromVehicle << takeoffAltAMSL << vehicleAltitudeAMSL;
connect(vehicle, &Vehicle::mavCommandResult, this, &PX4FirmwarePlugin::_mavCommandResult); connect(vehicle, &Vehicle::mavCommandResult, this, &PX4FirmwarePlugin::_mavCommandResult);
vehicle->sendMavCommand(vehicle->defaultComponentId(), vehicle->sendMavCommand(
vehicle->defaultComponentId(),
MAV_CMD_NAV_TAKEOFF, MAV_CMD_NAV_TAKEOFF,
true, // show error is fails true, // show error is fails
-1, // No pitch requested -1, // No pitch requested
0, 0, // param 2-4 unused 0, 0, // param 2-4 unused
NAN, NAN, NAN, // No yaw, lat, lon NAN, NAN, NAN, // No yaw, lat, lon
takeoffAltAMSL); // AMSL altitude static_cast<float>(takeoffAltAMSL)); // AMSL altitude
} }
void PX4FirmwarePlugin::guidedModeGotoLocation(Vehicle* vehicle, const QGeoCoordinate& gotoCoord) void PX4FirmwarePlugin::guidedModeGotoLocation(Vehicle* vehicle, const QGeoCoordinate& gotoCoord)
@ -446,8 +441,8 @@ void PX4FirmwarePlugin::guidedModeGotoLocation(Vehicle* vehicle, const QGeoCoord
MAV_DO_REPOSITION_FLAGS_CHANGE_MODE, MAV_DO_REPOSITION_FLAGS_CHANGE_MODE,
0.0f, 0.0f,
NAN, NAN,
gotoCoord.latitude(), static_cast<float>(gotoCoord.latitude()),
gotoCoord.longitude(), static_cast<float>(gotoCoord.longitude()),
vehicle->altitudeAMSL()->rawValue().toFloat()); vehicle->altitudeAMSL()->rawValue().toFloat());
} }
} }
@ -475,7 +470,7 @@ void PX4FirmwarePlugin::guidedModeChangeAltitude(Vehicle* vehicle, double altitu
NAN, NAN,
NAN, NAN,
NAN, NAN,
vehicle->homePosition().altitude() + newAltRel); static_cast<float>(vehicle->homePosition().altitude() + newAltRel));
} }
void PX4FirmwarePlugin::startMission(Vehicle* vehicle) void PX4FirmwarePlugin::startMission(Vehicle* vehicle)
@ -594,3 +589,8 @@ QString PX4FirmwarePlugin::_getLatestVersionFileUrl(Vehicle* vehicle){
QString PX4FirmwarePlugin::_versionRegex() { QString PX4FirmwarePlugin::_versionRegex() {
return QStringLiteral("v([0-9,\\.]*) Stable"); return QStringLiteral("v([0-9,\\.]*) Stable");
} }
bool PX4FirmwarePlugin::supportsNegativeThrust(Vehicle* vehicle)
{
return vehicle->vehicleType() == MAV_TYPE_GROUND_ROVER;
}

7
src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h

@ -23,8 +23,8 @@ class PX4FirmwarePlugin : public FirmwarePlugin
Q_OBJECT Q_OBJECT
public: public:
PX4FirmwarePlugin(void); PX4FirmwarePlugin ();
~PX4FirmwarePlugin(); ~PX4FirmwarePlugin () override;
// Overrides from FirmwarePlugin // Overrides from FirmwarePlugin
@ -69,6 +69,7 @@ public:
QString autoDisarmParameter (Vehicle* vehicle) override { Q_UNUSED(vehicle); return QStringLiteral("COM_DISARM_LAND"); } QString autoDisarmParameter (Vehicle* vehicle) override { Q_UNUSED(vehicle); return QStringLiteral("COM_DISARM_LAND"); }
uint32_t highLatencyCustomModeTo32Bits (uint16_t hlCustomMode) override; uint32_t highLatencyCustomModeTo32Bits (uint16_t hlCustomMode) override;
bool supportsTerrainFrame (void) const override { return false; } bool supportsTerrainFrame (void) const override { return false; }
bool supportsNegativeThrust (Vehicle *vehicle) override;
protected: protected:
typedef struct { typedef struct {
@ -122,7 +123,7 @@ class PX4FirmwarePluginInstanceData : public QObject
Q_OBJECT Q_OBJECT
public: public:
PX4FirmwarePluginInstanceData(QObject* parent = NULL); PX4FirmwarePluginInstanceData(QObject* parent = nullptr);
bool versionNotified; ///< true: user notified over version issue bool versionNotified; ///< true: user notified over version issue
}; };

9
src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc

@ -13,6 +13,7 @@
#include "PX4FirmwarePluginFactory.h" #include "PX4FirmwarePluginFactory.h"
#include "PX4/PX4FirmwarePlugin.h" #include "PX4/PX4FirmwarePlugin.h"
PX4FirmwarePluginFactory PX4FirmwarePluginFactory; PX4FirmwarePluginFactory PX4FirmwarePluginFactory;
PX4FirmwarePluginFactory::PX4FirmwarePluginFactory(void) PX4FirmwarePluginFactory::PX4FirmwarePluginFactory(void)
@ -24,21 +25,17 @@ PX4FirmwarePluginFactory::PX4FirmwarePluginFactory(void)
QList<MAV_AUTOPILOT> PX4FirmwarePluginFactory::supportedFirmwareTypes(void) const QList<MAV_AUTOPILOT> PX4FirmwarePluginFactory::supportedFirmwareTypes(void) const
{ {
QList<MAV_AUTOPILOT> list; QList<MAV_AUTOPILOT> list;
list.append(MAV_AUTOPILOT_PX4); list.append(MAV_AUTOPILOT_PX4);
return list; return list;
} }
FirmwarePlugin* PX4FirmwarePluginFactory::firmwarePluginForAutopilot(MAV_AUTOPILOT autopilotType, MAV_TYPE vehicleType) FirmwarePlugin* PX4FirmwarePluginFactory::firmwarePluginForAutopilot(MAV_AUTOPILOT autopilotType, MAV_TYPE /*vehicleType*/)
{ {
Q_UNUSED(vehicleType);
if (autopilotType == MAV_AUTOPILOT_PX4) { if (autopilotType == MAV_AUTOPILOT_PX4) {
if (!_pluginInstance) { if (!_pluginInstance) {
_pluginInstance = new PX4FirmwarePlugin; _pluginInstance = new PX4FirmwarePlugin();
} }
return _pluginInstance; return _pluginInstance;
} }
return nullptr; return nullptr;
} }

4
src/Vehicle/Vehicle.cc

@ -2871,9 +2871,9 @@ bool Vehicle::supportsThrottleModeCenterZero(void) const
return _firmwarePlugin->supportsThrottleModeCenterZero(); return _firmwarePlugin->supportsThrottleModeCenterZero();
} }
bool Vehicle::supportsNegativeThrust(void) const bool Vehicle::supportsNegativeThrust(void)
{ {
return _firmwarePlugin->supportsNegativeThrust(); return _firmwarePlugin->supportsNegativeThrust(this);
} }
bool Vehicle::supportsRadio(void) const bool Vehicle::supportsRadio(void) const

2
src/Vehicle/Vehicle.h

@ -854,7 +854,7 @@ public:
bool sub(void) const; bool sub(void) const;
bool supportsThrottleModeCenterZero (void) const; bool supportsThrottleModeCenterZero (void) const;
bool supportsNegativeThrust (void) const; bool supportsNegativeThrust (void);
bool supportsRadio (void) const; bool supportsRadio (void) const;
bool supportsJSButton (void) const; bool supportsJSButton (void) const;
bool supportsMotorInterference (void) const; bool supportsMotorInterference (void) const;

Loading…
Cancel
Save