diff --git a/flight/libraries/sanitycheck.c b/flight/libraries/sanitycheck.c
index 0902cbce7..7faf4bc08 100644
--- a/flight/libraries/sanitycheck.c
+++ b/flight/libraries/sanitycheck.c
@@ -262,6 +262,7 @@ FrameType_t GetCurrentFrameType()
switch ((SystemSettingsAirframeTypeOptions)airframe_type) {
case SYSTEMSETTINGS_AIRFRAMETYPE_QUADX:
case SYSTEMSETTINGS_AIRFRAMETYPE_QUADP:
+ case SYSTEMSETTINGS_AIRFRAMETYPE_QUADH:
case SYSTEMSETTINGS_AIRFRAMETYPE_HEXA:
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTO:
case SYSTEMSETTINGS_AIRFRAMETYPE_OCTOX:
diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp
index 14b3e9d43..8ce2c5167 100644
--- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp
+++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp
@@ -137,8 +137,8 @@ ConfigMultiRotorWidget::ConfigMultiRotorWidget(QWidget *parent) :
m_aircraft->quadShape->setScene(scene);
QStringList multiRotorTypes;
- multiRotorTypes << "Tricopter Y" << "Quad +" << "Quad X" << "Hexacopter" << "Hexacopter X" << "Hexacopter H" << "Hexacopter Y6"
- << "Octocopter" << "Octocopter X" << "Octocopter V" << "Octo Coax +" << "Octo Coax X";
+ multiRotorTypes << "Tricopter Y" << "Quad +" << "Quad X" << "Quad H" << "Hexacopter" << "Hexacopter X" << "Hexacopter H"
+ << "Hexacopter Y6" << "Octocopter" << "Octocopter X" << "Octocopter V" << "Octo Coax +" << "Octo Coax X";
m_aircraft->multirotorFrameType->addItems(multiRotorTypes);
// Set default model to "Quad X"
@@ -176,6 +176,12 @@ void ConfigMultiRotorWidget::setupUI(QString frameType)
m_aircraft->mrRollMixLevel->setValue(50);
m_aircraft->mrPitchMixLevel->setValue(50);
setYawMixLevel(50);
+ } else if (frameType == "QuadH" || frameType == "Quad H") {
+ setComboCurrentIndex(m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Quad H"));
+
+ m_aircraft->mrRollMixLevel->setValue(50);
+ m_aircraft->mrPitchMixLevel->setValue(70);
+ setYawMixLevel(50);
} else if (frameType == "QuadP" || frameType == "Quad +") {
setComboCurrentIndex(m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Quad +"));
@@ -271,6 +277,8 @@ void ConfigMultiRotorWidget::setupEnabledControls(QString frameType)
enableComboBoxes(this, CHANNELBOXNAME, 4, true);
} else if (frameType == "QuadP" || frameType == "Quad +") {
enableComboBoxes(this, CHANNELBOXNAME, 4, true);
+ } else if (frameType == "QuadH" || frameType == "Quad H") {
+ enableComboBoxes(this, CHANNELBOXNAME, 4, true);
} else if (frameType == "Hexa" || frameType == "Hexacopter") {
enableComboBoxes(this, CHANNELBOXNAME, 6, true);
} else if (frameType == "HexaX" || frameType == "Hexacopter X") {
@@ -372,6 +380,12 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType)
setComboCurrentIndex(m_aircraft->multiMotorChannelBox2, multi.VTOLMotorNE);
setComboCurrentIndex(m_aircraft->multiMotorChannelBox3, multi.VTOLMotorSE);
setComboCurrentIndex(m_aircraft->multiMotorChannelBox4, multi.VTOLMotorSW);
+ } else if (frameType == "QuadH") {
+ // Motors 1/2/3/4 are: NW / NE / SE / SW
+ setComboCurrentIndex(m_aircraft->multiMotorChannelBox1, multi.VTOLMotorNW);
+ setComboCurrentIndex(m_aircraft->multiMotorChannelBox2, multi.VTOLMotorNE);
+ setComboCurrentIndex(m_aircraft->multiMotorChannelBox3, multi.VTOLMotorSE);
+ setComboCurrentIndex(m_aircraft->multiMotorChannelBox4, multi.VTOLMotorSW);
} else if (frameType == "Hexa") {
// Motors 1/2/3 4/5/6 are: N / NE / SE / S / SW / NW
setComboCurrentIndex(m_aircraft->multiMotorChannelBox1, multi.VTOLMotorN);
@@ -490,6 +504,9 @@ QString ConfigMultiRotorWidget::updateConfigObjectsFromWidgets()
} else if (m_aircraft->multirotorFrameType->currentText() == "Quad X") {
airframeType = "QuadX";
setupQuad(false);
+ } else if (m_aircraft->multirotorFrameType->currentText() == "Quad H") {
+ airframeType = "QuadH";
+ setupQuad(false);
} else if (m_aircraft->multirotorFrameType->currentText() == "Hexacopter") {
airframeType = "Hexa";
setupHexa(true);
@@ -763,6 +780,8 @@ void ConfigMultiRotorWidget::updateAirframe(QString frameType)
elementId = "quad-x";
} else if (frameType == "QuadP" || frameType == "Quad +") {
elementId = "quad-plus";
+ } else if (frameType == "QuadH" || frameType == "Quad H") {
+ elementId = "quad-h";
} else if (frameType == "Hexa" || frameType == "Hexacopter") {
elementId = "quad-hexa";
} else if (frameType == "HexaX" || frameType == "Hexacopter X") {
@@ -894,7 +913,7 @@ bool ConfigMultiRotorWidget::setupQuad(bool pLayout)
setupMotors(motorList);
// Now, setup the mixer:
- // Motor 1 to 4, X Layout:
+ // Motor 1 to 4, X Layout and Hlayout
// pitch roll yaw
// {0.5 ,0.5 ,-0.5 //Front left motor (CW)
// {0.5 ,-0.5 ,0.5 //Front right motor(CCW)
diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp
index 2ad4e1741..55f06b783 100644
--- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp
+++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp
@@ -84,6 +84,7 @@ QStringList ConfigVehicleTypeWidget::getChannelDescriptions()
case SystemSettings::AIRFRAMETYPE_TRI:
case SystemSettings::AIRFRAMETYPE_QUADX:
case SystemSettings::AIRFRAMETYPE_QUADP:
+ case SystemSettings::AIRFRAMETYPE_QUADH:
case SystemSettings::AIRFRAMETYPE_OCTOV:
case SystemSettings::AIRFRAMETYPE_OCTOCOAXX:
case SystemSettings::AIRFRAMETYPE_OCTOCOAXP:
@@ -264,7 +265,8 @@ int ConfigVehicleTypeWidget::frameCategory(QString frameType)
|| frameType == "Elevon" || frameType == "FixedWingVtail" || frameType == "Vtail") {
return ConfigVehicleTypeWidget::FIXED_WING;
} else if (frameType == "Tri" || frameType == "Tricopter Y" || frameType == "QuadX" || frameType == "Quad X"
- || frameType == "QuadP" || frameType == "Quad +" || frameType == "Hexa" || frameType == "Hexacopter"
+ || frameType == "QuadP" || frameType == "Quad +" || frameType == "Quad H" || frameType == "QuadH"
+ || frameType == "Hexa" || frameType == "Hexacopter"
|| frameType == "HexaX" || frameType == "Hexacopter X" || frameType == "HexaCoax"
|| frameType == "HexaH" || frameType == "Hexacopter H" || frameType == "Hexacopter Y6"
|| frameType == "Octo" || frameType == "Octocopter"
diff --git a/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg b/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg
index fae42213c..23df6e045 100644
--- a/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg
+++ b/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg
@@ -15,7 +15,7 @@
height="3560.019"
id="svg4183"
xml:space="preserve"
- inkscape:version="0.48.4 r9939"
+ inkscape:version="0.48.5 r10040"
sodipodi:docname="multirotor-shapes.svg">image/svg+xml
\ No newline at end of file
+ d="m 3062.2588,1271.4951 l 2.557,0 c 0.279,0 0.5,-0.107 0.695,-0.297 c 0.1,-0.088 0.176,-0.199 0.215,-0.314 c 0.051,-0.118 0.084,-0.246 0.084,-0.387 l 0,-0.914 c 0,-0.135 -0.033,-0.266 -0.084,-0.395 c -0.039,-0.107 -0.115,-0.209 -0.215,-0.298 c -0.195,-0.194 -0.416,-0.299 -0.695,-0.299 l -2.557,0 c -0.275,0 -0.504,0.105 -0.693,0.299 c -0.104,0.089 -0.174,0.191 -0.225,0.298 c -0.039,0.129 -0.078,0.26 -0.078,0.395 l 0,0.914 c 0,0.141 0.039,0.269 0.078,0.387 c 0.051,0.115 0.121,0.226 0.225,0.314 c 0.189,0.19 0.418,0.297 0.693,0.297 m -12.41,0 l 2.558,0 c 0.276,0 0.497,-0.107 0.688,-0.297 c 0.191,-0.187 0.309,-0.426 0.309,-0.701 l 0,-0.914 c 0,-0.277 -0.118,-0.526 -0.309,-0.693 c -0.184,-0.192 -0.41,-0.299 -0.676,-0.299 l -3.566,0 l 0,0.992 l 0,0.521 l 0,0.393 c 0,0.141 0.035,0.269 0.084,0.387 c 0.051,0.115 0.129,0.226 0.228,0.314 c 0.176,0.19 0.403,0.297 0.684,0.297 m -15.022,0 l 2.551,0 c 0.287,0 0.506,-0.107 0.701,-0.297 c 0.096,-0.088 0.166,-0.199 0.213,-0.314 c 0.053,-0.118 0.082,-0.246 0.082,-0.379 l -4.541,0 c 0,0.133 0.033,0.261 0.08,0.379 c 0.051,0.115 0.121,0.226 0.219,0.314 c 0.189,0.19 0.426,0.297 0.695,0.297 m -7.509,0 l 2.537,0 c 0.281,0 0.519,-0.107 0.715,-0.297 c 0.197,-0.187 0.281,-0.426 0.281,-0.701 l 0,-0.914 c 0,-0.277 -0.084,-0.526 -0.281,-0.693 c -0.196,-0.194 -0.434,-0.299 -0.715,-0.299 l -1.893,0 l -1.641,0 l 0,0.992 l 0,0.521 l 0,0.393 c 0,0.141 0.02,0.269 0.073,0.387 c 0.062,0.115 0.135,0.226 0.224,0.314 c 0.18,0.19 0.42,0.297 0.7,0.297 m -7.518,0 l 2.539,0 c 0.277,0 0.522,-0.107 0.709,-0.297 c 0.088,-0.088 0.158,-0.199 0.215,-0.314 c 0.051,-0.118 0.074,-0.246 0.074,-0.387 l 0,-0.914 c 0,-0.135 -0.023,-0.266 -0.074,-0.395 c -0.057,-0.107 -0.127,-0.209 -0.215,-0.298 c -0.187,-0.194 -0.432,-0.299 -0.709,-0.299 l -0.318,0 l -2.221,0 c -0.281,0 -0.514,0.105 -0.713,0.299 c -0.082,0.089 -0.158,0.191 -0.209,0.298 c -0.057,0.129 -0.074,0.26 -0.074,0.395 l 0,0.914 c 0,0.141 0.017,0.269 0.074,0.387 c 0.051,0.115 0.127,0.226 0.209,0.314 c 0.199,0.19 0.432,0.297 0.713,0.297 m 42.391,1.041 c -0.278,0 -0.543,-0.049 -0.795,-0.166 c -0.233,-0.088 -0.453,-0.242 -0.619,-0.42 c -0.194,-0.189 -0.34,-0.406 -0.457,-0.652 c -0.106,-0.254 -0.141,-0.52 -0.141,-0.793 l 0,-0.93 c 0,-0.281 0.035,-0.547 0.141,-0.795 c 0.117,-0.242 0.263,-0.455 0.457,-0.642 c 0.166,-0.178 0.386,-0.332 0.619,-0.426 c 0.252,-0.115 0.517,-0.16 0.795,-0.16 l 2.693,0 c 0.277,0 0.543,0.045 0.791,0.16 c 0.236,0.094 0.459,0.248 0.637,0.426 c 0.189,0.187 0.334,0.4 0.445,0.642 c 0.096,0.248 0.147,0.514 0.147,0.795 l 0,0.93 c 0,0.273 -0.051,0.539 -0.147,0.793 c -0.111,0.246 -0.256,0.463 -0.445,0.652 c -0.178,0.178 -0.401,0.332 -0.637,0.42 c -0.248,0.117 -0.514,0.166 -0.791,0.166 l -2.693,0 z m -27.428,0 c -0.274,0 -0.539,-0.049 -0.797,-0.166 c -0.236,-0.088 -0.451,-0.242 -0.625,-0.42 c -0.186,-0.189 -0.34,-0.406 -0.447,-0.652 c -0.108,-0.252 -0.156,-0.508 -0.156,-0.785 l 0,-0.93 c 0,-0.277 0.048,-0.541 0.156,-0.795 c 0.107,-0.244 0.261,-0.463 0.447,-0.65 c 0.174,-0.178 0.389,-0.332 0.625,-0.426 c 0.258,-0.115 0.523,-0.16 0.797,-0.16 l 4.111,0 l 0,1.039 l -4.047,0 c -0.269,0 -0.506,0.105 -0.695,0.299 c -0.074,0.078 -0.133,0.16 -0.18,0.257 c -0.058,0.096 -0.091,0.203 -0.107,0.303 l 5.627,0 l 0,1.063 c 0,0.277 -0.051,0.533 -0.145,0.785 c -0.117,0.246 -0.254,0.463 -0.449,0.652 c -0.182,0.178 -0.4,0.332 -0.644,0.42 c -0.233,0.117 -0.5,0.166 -0.791,0.166 l -2.68,0 z m -15.031,0 c -0.291,0 -0.555,-0.049 -0.793,-0.166 c -0.25,-0.088 -0.459,-0.242 -0.645,-0.42 c -0.183,-0.189 -0.336,-0.406 -0.445,-0.652 c -0.1,-0.254 -0.153,-0.52 -0.153,-0.793 l 0,-0.93 c 0,-0.281 0.053,-0.547 0.153,-0.795 c 0.109,-0.242 0.262,-0.455 0.445,-0.642 c 0.186,-0.178 0.395,-0.332 0.645,-0.426 c 0.238,-0.115 0.502,-0.16 0.793,-0.16 l 2.011,0 l 0.664,0 l 2.803,0 l 0,-1.989 l 1.111,0 l 0,1.989 l 0.928,0 l 0.36,0 l 2.324,0 c 0.283,0 0.543,0.045 0.783,0.16 c 0.252,0.094 0.463,0.248 0.654,0.426 c 0.192,0.187 0.334,0.4 0.436,0.642 c 0.099,0.248 0.158,0.514 0.158,0.795 l 0,0.93 c 0,0.273 -0.059,0.539 -0.158,0.793 c -0.102,0.246 -0.244,0.463 -0.436,0.652 c -0.191,0.178 -0.402,0.332 -0.654,0.42 c -0.24,0.117 -0.5,0.166 -0.783,0.166 l -2.684,0 c -0.281,0 -0.545,-0.049 -0.793,-0.166 c -0.244,-0.088 -0.455,-0.242 -0.642,-0.42 c -0.186,-0.189 -0.338,-0.406 -0.44,-0.652 c -0.107,-0.254 -0.164,-0.52 -0.164,-0.793 l 0,-1.914 l -1.017,0 c 0.027,0.062 0.068,0.127 0.087,0.189 c 0.112,0.248 0.165,0.514 0.165,0.795 l 0,0.93 c 0,0.273 -0.053,0.539 -0.165,0.793 c -0.091,0.246 -0.244,0.463 -0.423,0.652 c -0.192,0.178 -0.407,0.332 -0.653,0.42 c -0.252,0.117 -0.517,0.166 -0.797,0.166 l -2.675,0 z m 35.543,-4.984 l 1.105,0 l 0,5 l -1.105,0 l 0,-5 z m -13.004,5 c -0.274,0 -0.539,-0.059 -0.791,-0.182 c -0.229,-0.088 -0.446,-0.242 -0.625,-0.42 c -0.186,-0.189 -0.336,-0.406 -0.451,-0.652 c -0.096,-0.252 -0.139,-0.508 -0.139,-0.785 l 0,-2.961 l 1.086,0 l 0,2.953 c 0,0.273 0.113,0.513 0.301,0.707 c 0.08,0.09 0.197,0.158 0.302,0.213 c 0.121,0.052 0.244,0.074 0.381,0.074 l 2.569,0 c 0.132,0 0.263,-0.022 0.369,-0.074 c 0.121,-0.055 0.244,-0.123 0.314,-0.213 c 0.197,-0.194 0.301,-0.434 0.301,-0.707 l 0,-2.953 l 0.307,0 l 0.785,0 l 0.777,0 l 0,-1.989 l 1.096,0 l 0,1.989 l 0.927,0 l 2.299,0 l 0.407,0 c 0.265,0 0.531,0.045 0.783,0.16 c 0.23,0.094 0.451,0.248 0.631,0.426 c 0.183,0.187 0.338,0.4 0.445,0.642 c 0.103,0.248 0.139,0.514 0.139,0.795 l 0,0.93 c 0,0.273 -0.036,0.539 -0.139,0.793 c -0.107,0.246 -0.262,0.463 -0.445,0.652 c -0.18,0.178 -0.401,0.332 -0.631,0.42 c -0.252,0.117 -0.518,0.166 -0.783,0.166 l -2.706,0 c -0.279,0 -0.544,-0.049 -0.792,-0.166 c -0.225,-0.088 -0.438,-0.242 -0.625,-0.42 c -0.19,-0.189 -0.34,-0.406 -0.456,-0.652 c -0.099,-0.254 -0.15,-0.52 -0.15,-0.793 l 0,-1.914 l -0.777,0 l 0,1.914 l 0,0.01 c 0,0.277 -0.053,0.533 -0.139,0.785 c -0.119,0.246 -0.262,0.463 -0.451,0.652 c -0.184,0.178 -0.406,0.332 -0.643,0.42 c -0.23,0.123 -0.496,0.182 -0.777,0.182 l -2.699,0 z m 25.617,1.429 l 0,-1.22 l -0.49,0 l 0,-1.053 l 0.49,0 l 0,-2.133 c 0,-0.281 0.06,-0.547 0.154,-0.795 c 0.112,-0.242 0.252,-0.455 0.438,-0.642 c 0.195,-0.178 0.4,-0.332 0.652,-0.426 c 0.236,-0.115 0.502,-0.16 0.793,-0.16 l 0.791,0 l 0,1.039 l -0.777,0 c -0.27,0.025 -0.504,0.129 -0.664,0.32 c -0.096,0.078 -0.168,0.191 -0.213,0.307 c -0.049,0.105 -0.065,0.232 -0.065,0.365 l 0,2.125 l 1.719,0 l 0,0.223 l 0,0.83 l -1.719,0 l 0,1.22 l -1.109,0 z m -10.752,0.563 l 0,-4.961 c 0,-0.277 0.06,-0.541 0.162,-0.795 c 0.1,-0.244 0.24,-0.463 0.434,-0.639 c 0.197,-0.183 0.398,-0.332 0.66,-0.437 c 0.234,-0.115 0.49,-0.16 0.777,-0.16 l 0.221,0 l 0,1.035 l -0.201,0 c -0.262,0.025 -0.479,0.129 -0.664,0.32 c -0.088,0.078 -0.157,0.191 -0.198,0.307 c -0.064,0.105 -0.068,0.232 -0.068,0.365 l 0,4.961 l -1.123,0 z m -1.861,-1.096 l 1.105,0 l 0,1.096 l -1.105,0 l 0,-1.096 z" />
\ No newline at end of file
diff --git a/ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp b/ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp
index 7da0ed6a3..940319c85 100644
--- a/ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp
+++ b/ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp
@@ -107,6 +107,9 @@ void ConnectionDiagram::setupGraphicsScene()
case VehicleConfigurationSource::MULTI_ROTOR_QUAD_PLUS:
elementsToShow << "quad-p";
break;
+ case VehicleConfigurationSource::MULTI_ROTOR_QUAD_H:
+ elementsToShow << "quad-h";
+ break;
case VehicleConfigurationSource::MULTI_ROTOR_HEXA:
elementsToShow << "hexa";
break;
diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/multipage.cpp b/ground/openpilotgcs/src/plugins/setupwizard/pages/multipage.cpp
index 014968850..f649c7bf1 100644
--- a/ground/openpilotgcs/src/plugins/setupwizard/pages/multipage.cpp
+++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/multipage.cpp
@@ -76,6 +76,11 @@ void MultiPage::setupSelection(Selection *selection)
"quad-plus",
SetupWizard::MULTI_ROTOR_QUAD_PLUS);
+ selection->addItem(tr("Quadcopter H"),
+ tr("Quadcopter H, Blackout miniH"),
+ "quad-h",
+ SetupWizard::MULTI_ROTOR_QUAD_H);
+
selection->addItem(tr("Hexacopter"),
tr("A multirotor with six motors, one motor in front."),
"quad-hexa",
diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/outputcalibrationpage.cpp b/ground/openpilotgcs/src/plugins/setupwizard/pages/outputcalibrationpage.cpp
index 338bba122..9cf8e6dab 100644
--- a/ground/openpilotgcs/src/plugins/setupwizard/pages/outputcalibrationpage.cpp
+++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/outputcalibrationpage.cpp
@@ -131,6 +131,12 @@ void OutputCalibrationPage::setupVehicle()
m_channelIndex << 0 << 0 << 1 << 2 << 3;
setupActuatorMinMaxAndNeutral(0, 3, 4);
break;
+ case SetupWizard::MULTI_ROTOR_QUAD_H:
+ m_wizardIndexes << 0 << 1 << 1 << 1 << 1;
+ m_vehicleElementIds << "quad-h" << "quad-h-frame" << "quad-h-m1" << "quad-h-m2" << "quad-h-m3" << "quad-h-m4";
+ m_vehicleHighlightElementIndexes << 0 << 1 << 2 << 3 << 4;
+ m_channelIndex << 0 << 0 << 1 << 2 << 3;
+ break;
case SetupWizard::MULTI_ROTOR_QUAD_PLUS:
loadSVGFile(MULTI_SVG_FILE);
m_wizardIndexes << 0 << 1 << 1 << 1 << 1;
diff --git a/ground/openpilotgcs/src/plugins/setupwizard/resources/connection-diagrams.svg b/ground/openpilotgcs/src/plugins/setupwizard/resources/connection-diagrams.svg
index 6e87da62c..b15a2bad7 100644
--- a/ground/openpilotgcs/src/plugins/setupwizard/resources/connection-diagrams.svg
+++ b/ground/openpilotgcs/src/plugins/setupwizard/resources/connection-diagrams.svg
@@ -30,13 +30,13 @@
inkscape:window-height="928"
id="namedview4616"
showgrid="false"
- inkscape:zoom="0.72019231"
- inkscape:cx="604.40238"
- inkscape:cy="429.88791"
+ inkscape:zoom="1.0535626"
+ inkscape:cx="1013.1782"
+ inkscape:cy="514.92134"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
- inkscape:current-layer="layer8"
+ inkscape:current-layer="g39812"
fit-margin-top="15"
fit-margin-left="15"
fit-margin-right="15"
@@ -9642,6 +9642,644 @@
offset="1"
style="stop-color:#4e4e4e;stop-opacity:0;" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9651,7 +10289,7 @@
image/svg+xml
-
+
@@ -11664,7 +12302,7 @@
+ transform="translate(9.5291677,71.377308)">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -32656,7 +33709,7 @@
id="circle3808-0-9" />
@@ -33706,7 +34759,7 @@
d="M 386.44699,686.89099 C 386.44699,688.40977 385.21577,689.64099 383.69699,689.64099 C 382.17821,689.64099 380.94699,688.40977 380.94699,686.89099 C 380.94699,685.37221 382.17821,684.14099 383.69699,684.14099 C 385.21577,684.14099 386.44699,685.37221 386.44699,686.89099 z" />
@@ -33772,7 +34825,7 @@
d="M 411.435,717.672 C 411.435,719.19078 410.20378,720.422 408.685,720.422 C 407.16621,720.422 405.935,719.19078 405.935,717.672 C 405.935,716.15321 407.16621,714.922 408.685,714.922 C 410.20378,714.922 411.435,716.15321 411.435,717.672 z" />
@@ -33900,7 +34953,7 @@
d="M 216.804,613.62 C 216.804,615.13878 215.57278,616.37 214.054,616.37 C 212.53522,616.37 211.304,615.13878 211.304,613.62 C 211.304,612.10121 212.53522,610.87 214.054,610.87 C 215.57278,610.87 216.804,612.10121 216.804,613.62 z" />
@@ -34923,7 +35976,7 @@
d="M 216.804,613.62 C 216.804,615.13878 215.57278,616.37 214.054,616.37 C 212.53522,616.37 211.304,615.13878 211.304,613.62 C 211.304,612.10121 212.53522,610.87 214.054,610.87 C 215.57278,610.87 216.804,612.10121 216.804,613.62 z" />
@@ -35020,7 +36073,7 @@
d="M 586.448,613.99402 C 586.448,615.5128 585.21678,616.74402 583.698,616.74402 C 582.17921,616.74402 580.948,615.5128 580.948,613.99402 C 580.948,612.47524 582.17921,611.24402 583.698,611.24402 C 585.21678,611.24402 586.448,612.47524 586.448,613.99402 z" />
@@ -35181,7 +36234,7 @@
d="M 386.44699,686.89099 C 386.44699,688.40977 385.21577,689.64099 383.69699,689.64099 C 382.17821,689.64099 380.94699,688.40977 380.94699,686.89099 C 380.94699,685.37221 382.17821,684.14099 383.69699,684.14099 C 385.21577,684.14099 386.44699,685.37221 386.44699,686.89099 z" />
@@ -35247,7 +36300,7 @@
d="M 411.435,717.672 C 411.435,719.19078 410.20378,720.422 408.685,720.422 C 407.16621,720.422 405.935,719.19078 405.935,717.672 C 405.935,716.15321 407.16621,714.922 408.685,714.922 C 410.20378,714.922 411.435,716.15321 411.435,717.672 z" />
diff --git a/ground/openpilotgcs/src/plugins/setupwizard/resources/multirotor-shapes.svg b/ground/openpilotgcs/src/plugins/setupwizard/resources/multirotor-shapes.svg
index 320d41bc1..606271360 100644
--- a/ground/openpilotgcs/src/plugins/setupwizard/resources/multirotor-shapes.svg
+++ b/ground/openpilotgcs/src/plugins/setupwizard/resources/multirotor-shapes.svg
@@ -1,4 +1,9763 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/ground/openpilotgcs/src/plugins/setupwizard/setupwizard.cpp b/ground/openpilotgcs/src/plugins/setupwizard/setupwizard.cpp
index 27253afe3..ce5b430fa 100644
--- a/ground/openpilotgcs/src/plugins/setupwizard/setupwizard.cpp
+++ b/ground/openpilotgcs/src/plugins/setupwizard/setupwizard.cpp
@@ -253,6 +253,9 @@ QString SetupWizard::getSummaryText()
case SetupWizard::MULTI_ROTOR_QUAD_PLUS:
summary.append(tr("Quadcopter +"));
break;
+ case SetupWizard::MULTI_ROTOR_QUAD_H:
+ summary.append(tr("Quadcopter H"));
+ break;
case SetupWizard::MULTI_ROTOR_HEXA:
summary.append(tr("Hexacopter"));
break;
diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp
index c75627387..b6d8c360a 100644
--- a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp
+++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp
@@ -282,6 +282,7 @@ void VehicleConfigurationHelper::applyVehicleConfiguration()
break;
case VehicleConfigurationSource::MULTI_ROTOR_QUAD_X:
case VehicleConfigurationSource::MULTI_ROTOR_QUAD_PLUS:
+ case VehicleConfigurationSource::MULTI_ROTOR_QUAD_H:
setupQuadCopter();
break;
case VehicleConfigurationSource::MULTI_ROTOR_HEXA:
@@ -396,6 +397,7 @@ void VehicleConfigurationHelper::applyActuatorConfiguration()
}
break;
case VehicleConfigurationSource::MULTI_ROTOR_QUAD_X:
+ case VehicleConfigurationSource::MULTI_ROTOR_QUAD_H:
case VehicleConfigurationSource::MULTI_ROTOR_QUAD_PLUS:
data.ChannelUpdateFreq[0] = escFrequence;
data.ChannelUpdateFreq[1] = escFrequence;
@@ -647,6 +649,11 @@ void VehicleConfigurationHelper::applyMixerConfiguration(mixerChannelSettings ch
mixSettings->setMixerValuePitch(100);
mixSettings->setMixerValueYaw(50);
break;
+ case VehicleConfigurationSource::MULTI_ROTOR_QUAD_H:
+ mixSettings->setMixerValueRoll(50);
+ mixSettings->setMixerValuePitch(70);
+ mixSettings->setMixerValueYaw(50);
+ break;
case VehicleConfigurationSource::MULTI_ROTOR_HEXA_COAX_Y:
mixSettings->setMixerValueRoll(100);
mixSettings->setMixerValuePitch(50);
@@ -1050,6 +1057,44 @@ void VehicleConfigurationHelper::setupQuadCopter()
break;
}
+ case VehicleConfigurationSource::MULTI_ROTOR_QUAD_H:
+ {
+ frame = SystemSettings::AIRFRAMETYPE_QUADH;
+ channels[0].type = MIXER_TYPE_MOTOR;
+ channels[0].throttle1 = 100;
+ channels[0].throttle2 = 0;
+ channels[0].roll = 50;
+ channels[0].pitch = 70;
+ channels[0].yaw = -50;
+
+ channels[1].type = MIXER_TYPE_MOTOR;
+ channels[1].throttle1 = 100;
+ channels[1].throttle2 = 0;
+ channels[1].roll = -50;
+ channels[1].pitch = 70;
+ channels[1].yaw = 50;
+
+ channels[2].type = MIXER_TYPE_MOTOR;
+ channels[2].throttle1 = 100;
+ channels[2].throttle2 = 0;
+ channels[2].roll = -50;
+ channels[2].pitch = -70;
+ channels[2].yaw = -50;
+
+ channels[3].type = MIXER_TYPE_MOTOR;
+ channels[3].throttle1 = 100;
+ channels[3].throttle2 = 0;
+ channels[3].roll = 50;
+ channels[3].pitch = -70;
+ channels[3].yaw = 50;
+
+ guiSettings.multi.VTOLMotorNW = 1;
+ guiSettings.multi.VTOLMotorNE = 2;
+ guiSettings.multi.VTOLMotorSE = 3;
+ guiSettings.multi.VTOLMotorSW = 4;
+
+ break;
+ }
default:
break;
}
diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationsource.h b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationsource.h
index ccc6ba433..b75a0d7ee 100644
--- a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationsource.h
+++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationsource.h
@@ -57,7 +57,7 @@ public:
enum CONTROLLER_TYPE { CONTROLLER_UNKNOWN, CONTROLLER_CC, CONTROLLER_CC3D, CONTROLLER_REVO, CONTROLLER_NANO, CONTROLLER_OPLINK };
enum VEHICLE_TYPE { VEHICLE_UNKNOWN, VEHICLE_MULTI, VEHICLE_FIXEDWING, VEHICLE_HELI, VEHICLE_SURFACE };
- enum VEHICLE_SUB_TYPE { MULTI_ROTOR_UNKNOWN, MULTI_ROTOR_TRI_Y, MULTI_ROTOR_QUAD_X, MULTI_ROTOR_QUAD_PLUS,
+ enum VEHICLE_SUB_TYPE { MULTI_ROTOR_UNKNOWN, MULTI_ROTOR_TRI_Y, MULTI_ROTOR_QUAD_X, MULTI_ROTOR_QUAD_PLUS, MULTI_ROTOR_QUAD_H,
MULTI_ROTOR_HEXA, MULTI_ROTOR_HEXA_H, MULTI_ROTOR_HEXA_X, MULTI_ROTOR_HEXA_COAX_Y, MULTI_ROTOR_OCTO,
MULTI_ROTOR_OCTO_X, MULTI_ROTOR_OCTO_V, MULTI_ROTOR_OCTO_COAX_X, MULTI_ROTOR_OCTO_COAX_PLUS,
FIXED_WING_DUAL_AILERON, FIXED_WING_AILERON, FIXED_WING_ELEVON, HELI_CCPM };
diff --git a/shared/uavobjectdefinition/systemsettings.xml b/shared/uavobjectdefinition/systemsettings.xml
index ae808f185..0b9780597 100644
--- a/shared/uavobjectdefinition/systemsettings.xml
+++ b/shared/uavobjectdefinition/systemsettings.xml
@@ -1,7 +1,7 @@