From 1f74a782631cff1e7d11c933be75fdf0351111dc Mon Sep 17 00:00:00 2001 From: Kevin Finisterre Date: Wed, 11 Jun 2014 14:41:42 -0400 Subject: [PATCH] Attempt adding in the proper Mixer setting constructs for Elevon setup. --- .../configfixedwingwidget.cpp | 94 ++++++++++--------- .../cfg_vehicletypes/configfixedwingwidget.h | 2 + .../config/configvehicletypewidget.cpp | 6 +- .../plugins/setupwizard/connectiondiagram.cpp | 3 + .../setupwizard/pages/fixedwingpage.cpp | 3 + .../src/plugins/setupwizard/setupwizard.cpp | 3 + .../vehicleconfigurationhelper.cpp | 5 +- .../setupwizard/vehicleconfigurationhelper.h | 1 + .../setupwizard/vehicleconfigurationsource.h | 2 +- 9 files changed, 71 insertions(+), 48 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configfixedwingwidget.cpp b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configfixedwingwidget.cpp index 16eb7fa90..21d7fce1b 100644 --- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configfixedwingwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configfixedwingwidget.cpp @@ -94,7 +94,7 @@ ConfigFixedWingWidget::ConfigFixedWingWidget(QWidget *parent) : // Set default model to "Elevator aileron rudder" m_aircraft->fixedWingType->setCurrentIndex(m_aircraft->fixedWingType->findText("Elevator aileron rudder")); - // setupUI(m_aircraft->fixedWingType->currentText()); + setupUI(m_aircraft->fixedWingType->currentText()); connect(m_aircraft->fixedWingType, SIGNAL(currentIndexChanged(QString)), this, SLOT(setupUI(QString))); updateEnableControls(); @@ -138,6 +138,8 @@ void ConfigFixedWingWidget::setupUI(QString frameType) m_aircraft->elevonSlider1->setEnabled(false); m_aircraft->elevonSlider2->setEnabled(false); + } else if (frameType == "FixedWingVtail" || frameType == "Vtail") { + // do nothing for now } else if (frameType == "FixedWingElevon" || frameType == "Elevon") { plane->setElementId("elevon"); setComboCurrentIndex(m_aircraft->fixedWingType, m_aircraft->fixedWingType->findText("Elevon")); @@ -152,7 +154,7 @@ void ConfigFixedWingWidget::setupUI(QString frameType) m_aircraft->fwAileron1Label->setText("Aileron 1"); m_aircraft->fwAileron2Label->setText("Aileron 2"); - m_aircraft->elevonLabel1->setText("Rudder"); + m_aircraft->elevonLabel1->setText("Roll"); m_aircraft->elevonLabel2->setText("Pitch"); m_aircraft->elevonSlider1->setEnabled(true); @@ -182,7 +184,9 @@ void ConfigFixedWingWidget::setupEnabledControls(QString frameType) } } - if (frameType == "Elevon" || frameType == "elevon") { + if (frameType == "Vtail" || frameType == "vtail") { + // enableComboBoxes(this, CHANNELBOXNAME, 3, true); + } else if (frameType == "Elevon" || frameType == "Elevon") { enableComboBoxes(this, CHANNELBOXNAME, 3, true); } else if (frameType == "aileron" || frameType == "Elevator aileron rudder") { enableComboBoxes(this, CHANNELBOXNAME, 4, true); @@ -250,8 +254,6 @@ void ConfigFixedWingWidget::refreshWidgetsValues(QString frameType) setComboCurrentIndex(m_aircraft->fwAileron2ChannelBox, fixed.FixedWingRoll2); setComboCurrentIndex(m_aircraft->fwElevator1ChannelBox, fixed.FixedWingPitch1); setComboCurrentIndex(m_aircraft->fwElevator2ChannelBox, fixed.FixedWingPitch2); - setComboCurrentIndex(m_aircraft->fwRudder1ChannelBox, fixed.FixedWingYaw1); - setComboCurrentIndex(m_aircraft->fwRudder2ChannelBox, fixed.FixedWingYaw2); if (frameType == "FixedWingElevon") { // If the airframe is elevon, restore the slider setting @@ -260,7 +262,7 @@ void ConfigFixedWingWidget::refreshWidgetsValues(QString frameType) if (channel > -1) { // If for some reason the actuators were incoherent, we might fail here, hence the check. m_aircraft->elevonSlider1->setValue( - getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW) * 100); + getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL) * 100); m_aircraft->elevonSlider2->setValue( getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH) * 100); } @@ -319,7 +321,7 @@ QString ConfigFixedWingWidget::updateConfigObjectsFromWidgets() { 0, 0, 0 }, { 0, 0, 0 } }; - setupFixedWingMixer(mixerMatrix); + setupFixedWingElevonMixer(mixerMatrix); m_aircraft->fwStatusLabel->setText(tr("Configuration OK")); @@ -483,74 +485,77 @@ bool ConfigFixedWingWidget::setupFrameElevon(QString airframeType) // 1. Assign the servo/motor/none for each channel - double value; - // motor int channel = m_aircraft->fwEngineChannelBox->currentIndex() - 1; setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_MOTOR); setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE1, 127); - // rudders - channel = m_aircraft->fwRudder1ChannelBox->currentIndex() - 1; - setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, 127); - - channel = m_aircraft->fwRudder2ChannelBox->currentIndex() - 1; - setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, -127); - // ailerons channel = m_aircraft->fwAileron1ChannelBox->currentIndex() - 1; if (channel > -1) { setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO); - value = (double)(m_aircraft->elevonSlider2->value() * 1.27); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH, value); - value = (double)(m_aircraft->elevonSlider1->value() * 1.27); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL, value); - + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL, 127); channel = m_aircraft->fwAileron2ChannelBox->currentIndex() - 1; setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO); - value = (double)(m_aircraft->elevonSlider2->value() * 1.27); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH, value); - value = (double)(m_aircraft->elevonSlider1->value() * 1.27); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL, -value); + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL, -127); + } + + // elevon + channel = m_aircraft->fwElevator1ChannelBox->currentIndex() - 1; + if (channel > -1) { + setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO); + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH, 127); + + channel = m_aircraft->fwElevator2ChannelBox->currentIndex() - 1; + setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO); + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH, -127); } m_aircraft->fwStatusLabel->setText("Mixer generated"); return true; + } /** - This function sets up the elevon fixed wing mixer values. + Helper function: setupElevonServo */ -bool ConfigFixedWingWidget::setupFixedWingMixer(double mixerFactors[8][3]) +void ConfigFixedWingWidget::setupElevonServo(int channel, double pitch, double roll) { UAVDataObject *mixer = dynamic_cast(getObjectManager()->getObject(QString("MixerSettings"))); + Q_ASSERT(mixer); + + setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_SERVO); + + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL, roll * 127); + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_PITCH, pitch * 127); +} + +/** + This function sets up the elevon fixed wing mixer values. + */ +bool ConfigFixedWingWidget::setupFixedWingElevonMixer(double mixerFactors[8][3]){ + UAVDataObject *mixer = dynamic_cast(getObjectManager()->getObject(QString("MixerSettings"))); + Q_ASSERT(mixer); resetMotorAndServoMixers(mixer); // and enable only the relevant channels: -// double pFactor = (double)m_aircraft->fwPitchMixLevel->value() / 100.0; -// double rFactor = (double)m_aircraft->fwRollMixLevel->value() / 100.0; - //invertMotors = m_aircraft->MultirotorRevMixerCheckBox->isChecked(); -// double yFactor = (double)m_aircraft->fwYawMixLevel->value() / 100.0; + double pFactor = (double)m_aircraft->elevonSlider1->value() / 100.0; + double rFactor = (double)m_aircraft->elevonSlider2->value() / 100.0; QList mmList; mmList << m_aircraft->fwEngineChannelBox << m_aircraft->fwAileron1ChannelBox << m_aircraft->fwAileron2ChannelBox << m_aircraft->fwElevator1ChannelBox - << m_aircraft->fwElevator2ChannelBox << m_aircraft->fwRudder1ChannelBox - << m_aircraft->fwRudder2ChannelBox; + << m_aircraft->fwElevator2ChannelBox; for (int i = 0; i < 8; i++) { if (mmList.at(i)->isEnabled()) { int channel = mmList.at(i)->currentIndex() - 1; if (channel > -1) { - qDebug() << "code needs to be written here!"; -// setupQuadMotor(channel, mixerFactors[i][0] * pFactor, rFactor * mixerFactors[i][1], -// yFactor * mixerFactors[i][2]); + setupElevonServo(channel, mixerFactors[i][0] * pFactor, rFactor * mixerFactors[i][1]); } } } @@ -604,20 +609,21 @@ bool ConfigFixedWingWidget::throwConfigError(QString airframeType) m_aircraft->fwEngineChannelBox->setItemData(0, 0, Qt::DecorationRole); // Reset color palettes } - if (m_aircraft->fwAileron1ChannelBox->currentText() == "None") { - m_aircraft->fwAileron1ChannelBox->setItemData(0, pixmap, Qt::DecorationRole); // Set color palettes + if (m_aircraft->fwElevator1ChannelBox->currentText() == "None") { + m_aircraft->fwElevator1ChannelBox->setItemData(0, pixmap, Qt::DecorationRole); // Set color palettes error = true; } else { - m_aircraft->fwAileron1ChannelBox->setItemData(0, 0, Qt::DecorationRole); // Reset color palettes + m_aircraft->fwElevator1ChannelBox->setItemData(0, 0, Qt::DecorationRole); // Reset color palettes } - if (m_aircraft->fwAileron2ChannelBox->currentText() == "None") { - m_aircraft->fwAileron2ChannelBox->setItemData(0, pixmap, Qt::DecorationRole); // Set color palettes + if (m_aircraft->fwElevator2ChannelBox->currentText() == "None") { + m_aircraft->fwElevator2ChannelBox->setItemData(0, pixmap, Qt::DecorationRole); // Set color palettes error = true; } else { - m_aircraft->fwAileron2ChannelBox->setItemData(0, 0, Qt::DecorationRole); // Reset color palettes + m_aircraft->fwElevator2ChannelBox->setItemData(0, 0, Qt::DecorationRole); // Reset color palettes } } + if (error) { m_aircraft->fwStatusLabel->setText(QString("ERROR: Assign all necessary channels")); } diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configfixedwingwidget.h b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configfixedwingwidget.h index cd8fd4611..582420ff0 100644 --- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configfixedwingwidget.h +++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configfixedwingwidget.h @@ -66,8 +66,10 @@ private: virtual void resetActuators(GUIConfigDataUnion *configData); bool setupFrameFixedWing(QString airframeType); + bool setupFrameVtail(QString airframeType); bool setupFrameElevon(QString airframeType); bool setupFixedWingMixer(double mixerFactors[8][3]); + bool setupFixedWingElevonMixer(double mixerFactors[8][3]); void setupMotors(QList motorList); void updateAirframe(QString multiRotorType); diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp index 318d71051..f36f02550 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp @@ -71,10 +71,12 @@ QStringList ConfigVehicleTypeWidget::getChannelDescriptions() channelDesc = ConfigFixedWingWidget::getChannelDescriptions(); break; case SystemSettings::AIRFRAMETYPE_FIXEDWINGELEVON: - // do nothing for elevon support for the time being. - case SystemSettings::AIRFRAMETYPE_FIXEDWINGVTAIL: channelDesc = ConfigFixedWingWidget::getChannelDescriptions(); break; + case SystemSettings::AIRFRAMETYPE_FIXEDWINGVTAIL: + // do nothing for vtail support for the time being. + // channelDesc = ConfigFixedWingWidget::getChannelDescriptions(); + break; case SystemSettings::AIRFRAMETYPE_HELICP: // helicp channelDesc = ConfigCcpmWidget::getChannelDescriptions(); diff --git a/ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp b/ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp index 6057098b1..ac0bedbad 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/connectiondiagram.cpp @@ -125,6 +125,9 @@ void ConnectionDiagram::setupGraphicsScene() case VehicleConfigurationSource::FIXED_WING_ELEVON: elementsToShow << "elevon"; break; + case VehicleConfigurationSource::FIXED_WING_VTAIL: + elementsToShow << "vtail"; + break; default: break; } diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/fixedwingpage.cpp b/ground/openpilotgcs/src/plugins/setupwizard/pages/fixedwingpage.cpp index f2d8f27ab..cb832267a 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/pages/fixedwingpage.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/fixedwingpage.cpp @@ -108,6 +108,9 @@ void FixedWingPage::updateImageAndDescription() case SetupWizard::FIXED_WING_ELEVON: elementId = "elevon"; break; +// case SetupWizard::FIXED_WING_VTAIL: +// elementId = "vtail"; +// break; default: elementId = ""; break; diff --git a/ground/openpilotgcs/src/plugins/setupwizard/setupwizard.cpp b/ground/openpilotgcs/src/plugins/setupwizard/setupwizard.cpp index 09be733f1..7fa6c8fa0 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/setupwizard.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/setupwizard.cpp @@ -239,6 +239,9 @@ QString SetupWizard::getSummaryText() case SetupWizard::FIXED_WING_ELEVON: summary.append(tr("Elevon")); break; +// case SetupWizard::FIXED_WING_VTAIL: +// summary.append(tr("Vtail")); +// break; default: summary.append(tr("Unknown")); break; diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp index 97219ada9..4aa3364d8 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp @@ -224,6 +224,9 @@ void VehicleConfigurationHelper::applyVehicleConfiguration() case VehicleConfigurationSource::FIXED_WING_ELEVON: setupElevon(); break; + case VehicleConfigurationSource::FIXED_WING_VTAIL: +// setupVtail(); + break; default: break; } @@ -1378,7 +1381,7 @@ void VehicleConfigurationHelper::setupElevon() guiSettings.fixedwing.FixedWingRoll2 = 3; applyMixerConfiguration(channels); - applyMultiGUISettings(SystemSettings::AIRFRAMETYPE_FIXEDWINGVTAIL, guiSettings); + applyMultiGUISettings(SystemSettings::AIRFRAMETYPE_FIXEDWINGELEVON, guiSettings); } void VehicleConfigurationHelper::setupAileron() diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.h b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.h index 7d92bd4ce..7829ac039 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.h +++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.h @@ -103,6 +103,7 @@ private: void setupQuadCopter(); void setupHexaCopter(); void setupOctoCopter(); + void setupVtail(); void setupElevon(); void setupAileron(); diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationsource.h b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationsource.h index 53e0f8736..8175b4334 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationsource.h +++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationsource.h @@ -60,7 +60,7 @@ public: enum VEHICLE_SUB_TYPE { MULTI_ROTOR_UNKNOWN, MULTI_ROTOR_TRI_Y, MULTI_ROTOR_QUAD_X, MULTI_ROTOR_QUAD_PLUS, MULTI_ROTOR_HEXA, MULTI_ROTOR_HEXA_H, MULTI_ROTOR_HEXA_COAX_Y, MULTI_ROTOR_OCTO, MULTI_ROTOR_OCTO_V, MULTI_ROTOR_OCTO_COAX_X, MULTI_ROTOR_OCTO_COAX_PLUS, FIXED_WING_AILERON, - FIXED_WING_ELEVON, HELI_CCPM }; + FIXED_WING_VTAIL, FIXED_WING_ELEVON, HELI_CCPM }; enum ESC_TYPE { ESC_RAPID, ESC_LEGACY, ESC_UNKNOWN }; enum INPUT_TYPE { INPUT_PWM, INPUT_PPM, INPUT_SBUS, INPUT_DSMX10, INPUT_DSMX11, INPUT_DSM2, INPUT_UNKNOWN };