QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ArduPlaneFirmwarePlugin.cc
Go to the documentation of this file.
2#include "Vehicle.h"
3
4bool ArduPlaneFirmwarePlugin::_remapParamNameIntialized = false;
5FirmwarePlugin::remapParamNameMajorVersionMap_t ArduPlaneFirmwarePlugin::_remapParamName;
6
8 : APMFirmwarePlugin(parent)
9{
37
38 });
39
40 static FlightModeList availableFlightModes = {
41 // Mode Name , Custom Mode CanBeSet adv
42 { _manualFlightMode , APMPlaneMode::MANUAL , true , true },
43 { _circleFlightMode , APMPlaneMode::CIRCLE , true , true },
46 { _acroFlightMode , APMPlaneMode::ACRO , true , true },
49 { _cruiseFlightMode , APMPlaneMode::CRUISE , true , true },
51 { _autoFlightMode , APMPlaneMode::AUTO , true , true },
52 { _rtlFlightMode , APMPlaneMode::RTL , true , true },
53 { _loiterFlightMode , APMPlaneMode::LOITER , true , true },
54 { _takeoffFlightMode , APMPlaneMode::TAKEOFF , true , true },
56 { _guidedFlightMode , APMPlaneMode::GUIDED , true , true },
59 { _qHoverFlightMode , APMPlaneMode::QHOVER , true , true },
60 { _qLoiterFlightMode , APMPlaneMode::QLOITER , true , true },
61 { _qLandFlightMode , APMPlaneMode::QLAND , true , true },
62 { _qRTLFlightMode , APMPlaneMode::QRTL , true , true },
64 { _qAcroFlightMode , APMPlaneMode::QACRO , true , true },
65 { _thermalFlightMode , APMPlaneMode::THERMAL , true , true },
68 };
69 updateAvailableFlightModes(availableFlightModes);
70
71 if (!_remapParamNameIntialized) {
72 FirmwarePlugin::remapParamNameMap_t &remapV4_5 = _remapParamName[4][5];
73
74 remapV4_5["AIRSPEED_MIN"] = QStringLiteral("ARSPD_FBW_MIN");
75 remapV4_5["AIRSPEED_MAX"] = QStringLiteral("ARSPD_FBW_MAX");
76 remapV4_5["RTL_ALTITUDE"] = QStringLiteral("ALT_HOLD_RTL");
77 // LAND_SPEED is only used in a Copter component
78
79 // ArduPilot 4.7: QuadPlane parameter renames and SI unit conversion
80 FirmwarePlugin::remapParamNameMap_t &remapV4_7 = _remapParamName[4][7];
81
82 // Attitude controller
83 remapV4_7["Q_A_ANGLE_MAX"] = QStringLiteral("Q_ANGLE_MAX");
84 remapV4_7["Q_A_ACC_R_MAX"] = QStringLiteral("Q_A_ACCEL_R_MAX");
85 remapV4_7["Q_A_ACC_P_MAX"] = QStringLiteral("Q_A_ACCEL_P_MAX");
86 remapV4_7["Q_A_ACC_Y_MAX"] = QStringLiteral("Q_A_ACCEL_Y_MAX");
87 remapV4_7["Q_A_RATE_WPY_MAX"] = QStringLiteral("Q_A_SLEW_YAW");
88
89 // Loiter
90 remapV4_7["Q_LOIT_SPEED_MS"] = QStringLiteral("Q_LOIT_SPEED");
91 remapV4_7["Q_LOIT_ACC_MAX_M"] = QStringLiteral("Q_LOIT_ACC_MAX");
92 remapV4_7["Q_LOIT_BRK_ACC_M"] = QStringLiteral("Q_LOIT_BRK_ACCEL");
93 remapV4_7["Q_LOIT_BRK_JRK_M"] = QStringLiteral("Q_LOIT_BRK_JERK");
94
95 // Pilot
96 remapV4_7["Q_PILOT_SPD_UP"] = QStringLiteral("Q_PILOT_SPEED_UP");
97 remapV4_7["Q_PILOT_SPD_DN"] = QStringLiteral("Q_PILOT_SPEED_DN");
98 remapV4_7["Q_PILOT_TKO_ALT_M"] = QStringLiteral("Q_PILOT_TKOFF_ALT");
99
100 // Position controller: Q_P_VELXY_* -> Q_P_NE_VEL_*
101 remapV4_7["Q_P_NE_VEL_P"] = QStringLiteral("Q_P_VELXY_P");
102 remapV4_7["Q_P_NE_VEL_I"] = QStringLiteral("Q_P_VELXY_I");
103 remapV4_7["Q_P_NE_VEL_D"] = QStringLiteral("Q_P_VELXY_D");
104 remapV4_7["Q_P_NE_VEL_IMAX"] = QStringLiteral("Q_P_VELXY_IMAX");
105 remapV4_7["Q_P_NE_VEL_FLTE"] = QStringLiteral("Q_P_VELXY_FLTE");
106 remapV4_7["Q_P_NE_VEL_FLTD"] = QStringLiteral("Q_P_VELXY_FLTD");
107 remapV4_7["Q_P_NE_VEL_FF"] = QStringLiteral("Q_P_VELXY_FF");
108
109 // Position controller: Q_P_VELZ_* -> Q_P_D_VEL_*
110 remapV4_7["Q_P_D_VEL_P"] = QStringLiteral("Q_P_VELZ_P");
111 remapV4_7["Q_P_D_VEL_I"] = QStringLiteral("Q_P_VELZ_I");
112 remapV4_7["Q_P_D_VEL_D"] = QStringLiteral("Q_P_VELZ_D");
113 remapV4_7["Q_P_D_VEL_IMAX"] = QStringLiteral("Q_P_VELZ_IMAX");
114 remapV4_7["Q_P_D_VEL_FLTE"] = QStringLiteral("Q_P_VELZ_FLTE");
115 remapV4_7["Q_P_D_VEL_FF"] = QStringLiteral("Q_P_VELZ_FF");
116
117 // Position controller: Q_P_ACCZ_* -> Q_P_D_ACC_*
118 remapV4_7["Q_P_D_ACC_P"] = QStringLiteral("Q_P_ACCZ_P");
119 remapV4_7["Q_P_D_ACC_I"] = QStringLiteral("Q_P_ACCZ_I");
120 remapV4_7["Q_P_D_ACC_D"] = QStringLiteral("Q_P_ACCZ_D");
121 remapV4_7["Q_P_D_ACC_IMAX"] = QStringLiteral("Q_P_ACCZ_IMAX");
122 remapV4_7["Q_P_D_ACC_FLTD"] = QStringLiteral("Q_P_ACCZ_FLTD");
123 remapV4_7["Q_P_D_ACC_FLTE"] = QStringLiteral("Q_P_ACCZ_FLTE");
124 remapV4_7["Q_P_D_ACC_FLTT"] = QStringLiteral("Q_P_ACCZ_FLTT");
125 remapV4_7["Q_P_D_ACC_FF"] = QStringLiteral("Q_P_ACCZ_FF");
126 remapV4_7["Q_P_D_ACC_SMAX"] = QStringLiteral("Q_P_ACCZ_SMAX");
127
128 // Waypoint navigation
129 remapV4_7["Q_WP_ACC"] = QStringLiteral("Q_WP_ACCEL");
130 remapV4_7["Q_WP_ACC_CNR"] = QStringLiteral("Q_WP_ACCEL_C");
131 remapV4_7["Q_WP_ACC_Z"] = QStringLiteral("Q_WP_ACCEL_Z");
132 remapV4_7["Q_WP_RADIUS_M"] = QStringLiteral("Q_WP_RADIUS");
133 remapV4_7["Q_WP_SPD"] = QStringLiteral("Q_WP_SPEED");
134 remapV4_7["Q_WP_SPD_DN"] = QStringLiteral("Q_WP_SPEED_DN");
135 remapV4_7["Q_WP_SPD_UP"] = QStringLiteral("Q_WP_SPEED_UP");
136
137 // EKF
138 remapV4_7["EK3_FLOW_MAX"] = QStringLiteral("EK3_MAX_FLOW");
139
140 // Common
141 remapV4_7["ARMING_SKIPCHK"] = QStringLiteral("ARMING_CHECK");
142
143 _remapParamNameIntialized = true;
144 }
145}
146
151
153{
154 return ((majorVersionNumber == 4) ? 7 : Vehicle::versionNotSetValue);
155}
156
161
166
171
173{
174 for (FirmwareFlightMode &mode: modeList) {
175 mode.fixedWing = true;
176 mode.multiRotor = true;
177 }
178
179 _updateFlightModeList(modeList);
180}
181
183{
184 switch (val) {
186 return APMPlaneMode::AUTO;
190 return APMPlaneMode::RTL;
192 return APMPlaneMode::RTL;
193 default:
194 return UINT32_MAX;
195 }
196}
QList< FirmwareFlightMode > FlightModeList
This is the base class for all stack specific APM firmware plugins.
QString pauseFlightMode() const override
Returns The flight mode which indicates the vehicle is paused.
int remapParamNameHigestMinorVersionNumber(int majorVersionNumber) const override
void updateAvailableFlightModes(FlightModeList &modeList) override
Update Available flight modes recieved from vehicle.
uint32_t _convertToCustomFlightModeEnum(uint32_t val) const override
QString stabilizedFlightMode() const override
Returns the flight mode for Stabilized.
ArduPlaneFirmwarePlugin(QObject *parent=nullptr)
QString takeOffFlightMode() const override
Returns the flight mode for TakeOff.
void _setModeEnumToModeStringMapping(FlightModeCustomModeMap enumToString)
void _updateFlightModeList(FlightModeList &flightModeList)
QMap< QString, QString > remapParamNameMap_t
FlightModeCustomModeMap _modeEnumToString
QMap< int, remapParamNameMinorVersionRemapMap_t > remapParamNameMajorVersionMap_t
static const int versionNotSetValue