QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ArduCopterFirmwarePlugin.cc
Go to the documentation of this file.
2#include "ParameterManager.h"
3#include "Vehicle.h"
4
5bool ArduCopterFirmwarePlugin::_remapParamNameIntialized = false;
6FirmwarePlugin::remapParamNameMajorVersionMap_t ArduCopterFirmwarePlugin::_remapParamName;
7
9 : APMFirmwarePlugin(parent)
10{
12 { APMCopterMode::STABILIZE, _stabilizeFlightMode },
13 { APMCopterMode::ACRO, _acroFlightMode },
14 { APMCopterMode::ALT_HOLD, _altHoldFlightMode },
15 { APMCopterMode::AUTO, _autoFlightMode },
16 { APMCopterMode::GUIDED, _guidedFlightMode },
17 { APMCopterMode::LOITER, _loiterFlightMode },
18 { APMCopterMode::RTL, _rtlFlightMode },
19 { APMCopterMode::CIRCLE, _circleFlightMode },
20 { APMCopterMode::LAND, _landFlightMode },
21 { APMCopterMode::DRIFT, _driftFlightMode },
22 { APMCopterMode::SPORT, _sportFlightMode },
23 { APMCopterMode::FLIP, _flipFlightMode },
24 { APMCopterMode::AUTOTUNE, _autotuneFlightMode },
25 { APMCopterMode::POS_HOLD, _posHoldFlightMode },
26 { APMCopterMode::BRAKE, _brakeFlightMode },
27 { APMCopterMode::THROW, _throwFlightMode },
28 { APMCopterMode::AVOID_ADSB, _avoidADSBFlightMode },
29 { APMCopterMode::GUIDED_NOGPS, _guidedNoGPSFlightMode },
30 { APMCopterMode::SMART_RTL, _smartRtlFlightMode },
31 { APMCopterMode::FLOWHOLD, _flowHoldFlightMode },
32 { APMCopterMode::FOLLOW, _followFlightMode },
33 { APMCopterMode::ZIGZAG, _zigzagFlightMode },
34 { APMCopterMode::SYSTEMID, _systemIDFlightMode },
35 { APMCopterMode::AUTOROTATE, _autoRotateFlightMode },
36 { APMCopterMode::AUTO_RTL, _autoRTLFlightMode },
37 { APMCopterMode::TURTLE, _turtleFlightMode },
38 });
39
40 static FlightModeList availableFlightModes = {
41 // Mode Name , Custom Mode CanBeSet adv
42 { _stabilizeFlightMode , APMCopterMode::STABILIZE, true , true },
43 { _acroFlightMode , APMCopterMode::ACRO, true , true },
44 { _altHoldFlightMode , APMCopterMode::ALT_HOLD, true , true },
45 { _autoFlightMode , APMCopterMode::AUTO, true , true },
46 { _guidedFlightMode , APMCopterMode::GUIDED, true , true },
47 { _loiterFlightMode , APMCopterMode::LOITER, true , true },
48 { _rtlFlightMode , APMCopterMode::RTL, true , true },
49 { _circleFlightMode , APMCopterMode::CIRCLE, true , true },
50 { _landFlightMode , APMCopterMode::LAND, true , true },
51 { _driftFlightMode , APMCopterMode::DRIFT, true , true },
52 { _sportFlightMode , APMCopterMode::SPORT, true , true },
53 { _flipFlightMode , APMCopterMode::FLIP, true , true },
54 { _autotuneFlightMode , APMCopterMode::AUTOTUNE, true , true },
55 { _posHoldFlightMode , APMCopterMode::POS_HOLD, true , true },
56 { _brakeFlightMode , APMCopterMode::BRAKE, true , true },
57 { _throwFlightMode , APMCopterMode::THROW, true , true },
58 { _avoidADSBFlightMode , APMCopterMode::AVOID_ADSB, true , true },
59 { _guidedNoGPSFlightMode , APMCopterMode::GUIDED_NOGPS, true , true },
60 { _smartRtlFlightMode , APMCopterMode::SMART_RTL, true , true },
61 { _flowHoldFlightMode , APMCopterMode::FLOWHOLD, true , true },
62 { _followFlightMode , APMCopterMode::FOLLOW, true , true },
63 { _zigzagFlightMode , APMCopterMode::ZIGZAG, true , true },
64 { _systemIDFlightMode , APMCopterMode::SYSTEMID, true , true },
65 { _autoRotateFlightMode , APMCopterMode::AUTOROTATE, true , true },
66 { _autoRTLFlightMode , APMCopterMode::AUTO_RTL, true , true },
67 { _turtleFlightMode , APMCopterMode::TURTLE, true , true },
68 };
69 updateAvailableFlightModes(availableFlightModes);
70
71 if (!_remapParamNameIntialized) {
72 FirmwarePlugin::remapParamNameMap_t &remapV4_0 = _remapParamName[4][0];
73
74 remapV4_0["TUNE_MIN"] = QStringLiteral("TUNE_LOW");
75 remapV4_0["TUNE_MAX"] = QStringLiteral("TUNE_HIGH");
76
77 // ArduPilot 4.7: massive parameter rename and SI unit conversion
78 FirmwarePlugin::remapParamNameMap_t &remapV4_7 = _remapParamName[4][7];
79
80 // Position controller: PSC_VELXY_* -> PSC_NE_VEL_*
81 remapV4_7["PSC_NE_VEL_P"] = QStringLiteral("PSC_VELXY_P");
82 remapV4_7["PSC_NE_VEL_I"] = QStringLiteral("PSC_VELXY_I");
83 remapV4_7["PSC_NE_VEL_D"] = QStringLiteral("PSC_VELXY_D");
84 remapV4_7["PSC_NE_VEL_IMAX"] = QStringLiteral("PSC_VELXY_IMAX");
85 remapV4_7["PSC_NE_VEL_FLTE"] = QStringLiteral("PSC_VELXY_FLTE");
86 remapV4_7["PSC_NE_VEL_FLTD"] = QStringLiteral("PSC_VELXY_FLTD");
87 remapV4_7["PSC_NE_VEL_FF"] = QStringLiteral("PSC_VELXY_FF");
88
89 // Position controller: PSC_VELZ_* -> PSC_D_VEL_*
90 remapV4_7["PSC_D_VEL_P"] = QStringLiteral("PSC_VELZ_P");
91 remapV4_7["PSC_D_VEL_I"] = QStringLiteral("PSC_VELZ_I");
92 remapV4_7["PSC_D_VEL_D"] = QStringLiteral("PSC_VELZ_D");
93 remapV4_7["PSC_D_VEL_IMAX"] = QStringLiteral("PSC_VELZ_IMAX");
94 remapV4_7["PSC_D_VEL_FLTE"] = QStringLiteral("PSC_VELZ_FLTE");
95 remapV4_7["PSC_D_VEL_FF"] = QStringLiteral("PSC_VELZ_FF");
96
97 // Position controller: PSC_ACCZ_* -> PSC_D_ACC_*
98 remapV4_7["PSC_D_ACC_P"] = QStringLiteral("PSC_ACCZ_P");
99 remapV4_7["PSC_D_ACC_I"] = QStringLiteral("PSC_ACCZ_I");
100 remapV4_7["PSC_D_ACC_D"] = QStringLiteral("PSC_ACCZ_D");
101 remapV4_7["PSC_D_ACC_IMAX"] = QStringLiteral("PSC_ACCZ_IMAX");
102 remapV4_7["PSC_D_ACC_FLTD"] = QStringLiteral("PSC_ACCZ_FLTD");
103 remapV4_7["PSC_D_ACC_FLTE"] = QStringLiteral("PSC_ACCZ_FLTE");
104 remapV4_7["PSC_D_ACC_FLTT"] = QStringLiteral("PSC_ACCZ_FLTT");
105 remapV4_7["PSC_D_ACC_FF"] = QStringLiteral("PSC_ACCZ_FF");
106 remapV4_7["PSC_D_ACC_SMAX"] = QStringLiteral("PSC_ACCZ_SMAX");
107
108 // Position controller: PSC_POSXY_P -> PSC_NE_POS_P (simply renamed)
109 remapV4_7["PSC_NE_POS_P"] = QStringLiteral("PSC_POSXY_P");
110
111 // Position controller: PSC_POSZ_P -> PSC_D_POS_P (simply renamed)
112 remapV4_7["PSC_D_POS_P"] = QStringLiteral("PSC_POSZ_P");
113
114 // Waypoint navigation: WPNAV_* -> WP_*
115 remapV4_7["WP_ACC"] = QStringLiteral("WPNAV_ACCEL");
116 remapV4_7["WP_ACC_CNR"] = QStringLiteral("WPNAV_ACCEL_C");
117 remapV4_7["WP_ACC_Z"] = QStringLiteral("WPNAV_ACCEL_Z");
118 remapV4_7["WP_RADIUS_M"] = QStringLiteral("WPNAV_RADIUS");
119 remapV4_7["WP_SPD"] = QStringLiteral("WPNAV_SPEED");
120 remapV4_7["WP_SPD_DN"] = QStringLiteral("WPNAV_SPEED_DN");
121 remapV4_7["WP_SPD_UP"] = QStringLiteral("WPNAV_SPEED_UP");
122
123 // RTL parameters
124 remapV4_7["RTL_ALT_M"] = QStringLiteral("RTL_ALT");
125 remapV4_7["RTL_SPEED_MS"] = QStringLiteral("RTL_SPEED");
126 remapV4_7["RTL_ALT_FINAL_M"] = QStringLiteral("RTL_ALT_FINAL");
127 remapV4_7["RTL_CLIMB_MIN_M"] = QStringLiteral("RTL_CLIMB_MIN");
128
129 // Landing parameters
130 remapV4_7["LAND_SPD_MS"] = QStringLiteral("LAND_SPEED");
131 remapV4_7["LAND_SPD_HIGH_MS"]= QStringLiteral("LAND_SPEED_HIGH");
132 remapV4_7["LAND_ALT_LOW_M"] = QStringLiteral("LAND_ALT_LOW");
133
134 // Loiter parameters
135 remapV4_7["LOIT_SPEED_MS"] = QStringLiteral("LOIT_SPEED");
136 remapV4_7["LOIT_ACC_MAX_M"] = QStringLiteral("LOIT_ACC_MAX");
137 remapV4_7["LOIT_BRK_ACC_M"] = QStringLiteral("LOIT_BRK_ACCEL");
138 remapV4_7["LOIT_BRK_JRK_M"] = QStringLiteral("LOIT_BRK_JERK");
139
140 // Pilot parameters
141 remapV4_7["PILOT_ACC_Z"] = QStringLiteral("PILOT_ACCEL_Z");
142 remapV4_7["PILOT_SPD_UP"] = QStringLiteral("PILOT_SPEED_UP");
143 remapV4_7["PILOT_SPD_DN"] = QStringLiteral("PILOT_SPEED_DN");
144 remapV4_7["PILOT_TKO_ALT_M"] = QStringLiteral("PILOT_TKOFF_ALT");
145
146 // Attitude controller
147 remapV4_7["ATC_ANGLE_MAX"] = QStringLiteral("ANGLE_MAX");
148 remapV4_7["ATC_ACC_R_MAX"] = QStringLiteral("ATC_ACCEL_R_MAX");
149 remapV4_7["ATC_ACC_P_MAX"] = QStringLiteral("ATC_ACCEL_P_MAX");
150 remapV4_7["ATC_ACC_Y_MAX"] = QStringLiteral("ATC_ACCEL_Y_MAX");
151 remapV4_7["ATC_RATE_WPY_MAX"]= QStringLiteral("ATC_SLEW_YAW");
152
153 // Circle
154 remapV4_7["CIRCLE_RADIUS_M"] = QStringLiteral("CIRCLE_RADIUS");
155
156 // PosHold
157 remapV4_7["PHLD_BRK_ANGLE"] = QStringLiteral("PHLD_BRAKE_ANGLE");
158 remapV4_7["PHLD_BRK_RATE"] = QStringLiteral("PHLD_BRAKE_RATE");
159
160 // EKF
161 remapV4_7["EK3_FLOW_MAX"] = QStringLiteral("EK3_MAX_FLOW");
162
163 _remapParamNameIntialized = true;
164 }
165}
166
171
173{
174 return ((majorVersionNumber == 4) ? 7 : Vehicle::versionNotSetValue);
175}
176
178{
179 return (vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "FRAME")->rawValue().toInt() != 0);
180}
181
183{
184 return _modeEnumToString.value(APMCopterMode::BRAKE, _brakeFlightMode);
185}
186
188{
189 return _modeEnumToString.value(APMCopterMode::LAND, _landFlightMode);
190}
191
193{
194 return _modeEnumToString.value(APMCopterMode::LOITER, _loiterFlightMode);
195}
196
198{
199 return _modeEnumToString.value(APMCopterMode::FOLLOW, _followFlightMode);
200}
201
203{
204 return _modeEnumToString.value(APMCopterMode::STABILIZE, _stabilizeFlightMode);
205}
206
208{
209 for (FirmwareFlightMode &mode: modeList) {
210 mode.fixedWing = false;
211 mode.multiRotor = true;
212 }
213
214 _updateFlightModeList(modeList);
215
216}
217
219{
220 switch (val) {
222 return APMCopterMode::AUTO;
226 return APMCopterMode::RTL;
229 default:
230 return UINT32_MAX;
231 }
232}
QList< FirmwareFlightMode > FlightModeList
This is the base class for all stack specific APM firmware plugins.
ArduCopterFirmwarePlugin(QObject *parent=nullptr)
uint32_t _convertToCustomFlightModeEnum(uint32_t val) const override
void updateAvailableFlightModes(FlightModeList &modeList) override
Update Available flight modes recieved from vehicle.
QString followFlightMode() const override
Returns the flight mode which the vehicle will be for follow me.
int remapParamNameHigestMinorVersionNumber(int majorVersionNumber) const override
QString landFlightMode() const override
Returns the flight mode for Land.
QString stabilizedFlightMode() const override
Returns the flight mode for Stabilized.
bool multiRotorXConfig(Vehicle *vehicle) const override
QString pauseFlightMode() const override
Returns The flight mode which indicates the vehicle is paused.
QString takeControlFlightMode() const override
Returns the flight mode to use when the operator wants to take back control from autonomouse flight.
QVariant rawValue() const
Value after translation.
Definition Fact.h:85
void _setModeEnumToModeStringMapping(FlightModeCustomModeMap enumToString)
void _updateFlightModeList(FlightModeList &flightModeList)
QMap< QString, QString > remapParamNameMap_t
FlightModeCustomModeMap _modeEnumToString
QMap< int, remapParamNameMinorVersionRemapMap_t > remapParamNameMajorVersionMap_t
Fact * getParameter(int componentId, const QString &paramName)
static constexpr int defaultComponentId
ParameterManager * parameterManager()
Definition Vehicle.h:573
static const int versionNotSetValue