diff --git a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp index 951f94550..f154aca4c 100644 --- a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp @@ -123,6 +123,16 @@ ConfigStabilizationWidget::ConfigStabilizationWidget(QWidget *parent) : ConfigTa addWidget(ui->advancedResponsivenessCheckBox); connect(ui->advancedResponsivenessCheckBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); + connect(ui->defaultThrottleCurveButton, SIGNAL(clicked()), this, SLOT(resetThrottleCurveToDefault())); + connect(ui->thrustPIDScalingGroup, SIGNAL(toggled(bool)), ui->thrustPIDScalingCurve, SLOT(setEnabled(bool))); + ui->thrustPIDScalingCurve->setMixerType(MixerCurve::MIXERCURVE_TPA); + ui->thrustPIDScalingCurve->setMin(-1); + ui->thrustPIDScalingCurve->setMax(1); + + addWidget(ui->thrustPIDScalingGroup); + addWidget(ui->thrustPIDScalingCurve); + addWidget(ui->thrustPIDScalingCurve->getCurveWidget()); + connect(this, SIGNAL(widgetContentsChanged(QWidget *)), this, SLOT(processLinkedWidgets(QWidget *))); connect(this, SIGNAL(autoPilotConnected()), this, SLOT(onBoardConnected())); @@ -140,10 +150,58 @@ void ConfigStabilizationWidget::refreshWidgetsValues(UAVObject *o) { ConfigTaskWidget::refreshWidgetsValues(o); + updateThrottleCurveFromObject(); + ui->basicResponsivenessCheckBox->setChecked(ui->rateRollKp_3->value() == ui->ratePitchKp_4->value() && ui->rateRollKi_3->value() == ui->ratePitchKi_4->value()); } +void ConfigStabilizationWidget::updateObjectsFromWidgets() +{ + updateObjectFromThrottleCurve(); + ConfigTaskWidget::updateObjectsFromWidgets(); +} + +void ConfigStabilizationWidget::updateThrottleCurveFromObject() +{ + StabilizationSettings *stabSettings = dynamic_cast(getObjectManager()->getObject(QString("StabilizationSettings"))); + Q_ASSERT(stabSettings); + + QList curve; + for (quint32 i = 0; i < StabilizationSettings::THRUSTPIDSCALECURVE_NUMELEM; i++) { + curve.append(stabSettings->getThrustPIDScaleCurve(i)); + } + + ui->thrustPIDScalingCurve->setCurve(&curve); + ui->thrustPIDScalingGroup->setChecked(stabSettings->getEnableThrustPIDScaling() == StabilizationSettings::ENABLETHRUSTPIDSCALING_TRUE); + ui->thrustPIDScalingCurve->setEnabled(stabSettings->getEnableThrustPIDScaling() == StabilizationSettings::ENABLETHRUSTPIDSCALING_TRUE); +} + +void ConfigStabilizationWidget::updateObjectFromThrottleCurve() +{ + StabilizationSettings *stabSettings = dynamic_cast(getObjectManager()->getObject(QString("StabilizationSettings"))); + Q_ASSERT(stabSettings); + + QList curve = ui->thrustPIDScalingCurve->getCurve(); + for (quint32 i = 0; i < StabilizationSettings::THRUSTPIDSCALECURVE_NUMELEM; i++) { + stabSettings->setThrustPIDScaleCurve(i, curve.at(i)); + } + + stabSettings->setEnableThrustPIDScaling(ui->thrustPIDScalingGroup->isChecked() ? + StabilizationSettings::ENABLETHRUSTPIDSCALING_TRUE : StabilizationSettings::ENABLETHRUSTPIDSCALING_FALSE); +} + +void ConfigStabilizationWidget::resetThrottleCurveToDefault() +{ + StabilizationSettings defaultSettings; + QList curve; + for (quint32 i = 0; i < StabilizationSettings::THRUSTPIDSCALECURVE_NUMELEM; i++) { + curve.append(defaultSettings.getThrustPIDScaleCurve(i)); + } + + ui->thrustPIDScalingCurve->setCurve(&curve); +} + void ConfigStabilizationWidget::realtimeUpdatesSlot(bool value) { ui->realTimeUpdates_6->setChecked(value); diff --git a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.h b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.h index e4312df58..5b3c536f6 100644 --- a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.h +++ b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.h @@ -57,11 +57,15 @@ private: int boardModel; int m_pidBankCount; int m_currentPIDBank; + + void updateThrottleCurveFromObject(); + void updateObjectFromThrottleCurve(); protected: QString mapObjectName(const QString objectName); protected slots: void refreshWidgetsValues(UAVObject *o = NULL); + void updateObjectsFromWidgets(); private slots: void realtimeUpdatesSlot(bool value); @@ -69,6 +73,7 @@ private slots: void processLinkedWidgets(QWidget *); void onBoardConnected(); void pidBankChanged(int index); + void resetThrottleCurveToDefault(); }; #endif // ConfigStabilizationWidget_H diff --git a/ground/openpilotgcs/src/plugins/config/mixercurve.cpp b/ground/openpilotgcs/src/plugins/config/mixercurve.cpp index ad0fdaa3a..24bc0f88b 100644 --- a/ground/openpilotgcs/src/plugins/config/mixercurve.cpp +++ b/ground/openpilotgcs/src/plugins/config/mixercurve.cpp @@ -75,6 +75,7 @@ void MixerCurve::setMixerType(MixerCurveType curveType) { m_curveType = curveType; + m_mixerUI->buttonGroup->show(); m_mixerUI->CurveMin->setMaximum(1.0); m_mixerUI->CurveMax->setMaximum(1.0); @@ -95,6 +96,16 @@ void MixerCurve::setMixerType(MixerCurveType curveType) m_mixerUI->CurveMax->setMinimum(-1.0); break; } + case MixerCurve::MIXERCURVE_TPA: + { + m_mixerUI->SettingsGroup->setTitle("Thrust PID Scale"); + m_mixerUI->buttonGroup->hide(); + m_curve->setRange(-1.0, 1.0); + m_mixerUI->CurveMin->setMinimum(-1.0); + m_mixerUI->CurveMax->setMinimum(-1.0); + } + default: + break; } m_spinDelegate->setRange(m_mixerUI->CurveMin->minimum(), m_mixerUI->CurveMax->maximum()); diff --git a/ground/openpilotgcs/src/plugins/config/mixercurve.h b/ground/openpilotgcs/src/plugins/config/mixercurve.h index f62bfa251..7343043c9 100644 --- a/ground/openpilotgcs/src/plugins/config/mixercurve.h +++ b/ground/openpilotgcs/src/plugins/config/mixercurve.h @@ -52,7 +52,7 @@ public: /* Enumeration options for ThrottleCurves */ - typedef enum { MIXERCURVE_THROTTLE = 0, MIXERCURVE_PITCH = 1 } MixerCurveType; + typedef enum { MIXERCURVE_THROTTLE = 0, MIXERCURVE_PITCH = 1, MIXERCURVE_TPA = 2 } MixerCurveType; void setMixerType(MixerCurveType curveType); void initCurve(const QList *points); diff --git a/ground/openpilotgcs/src/plugins/config/mixercurve.ui b/ground/openpilotgcs/src/plugins/config/mixercurve.ui index 37d8925ee..bdddb1e80 100644 --- a/ground/openpilotgcs/src/plugins/config/mixercurve.ui +++ b/ground/openpilotgcs/src/plugins/config/mixercurve.ui @@ -7,7 +7,7 @@ 0 0 543 - 467 + 488 @@ -38,17 +38,32 @@ MixerCurve - QFrame::StyledPanel + QFrame::NoFrame QFrame::Raised - + + + + + 0 + 0 + + + + + 7 + + + + + - 150 + 120 16777215 @@ -56,11 +71,29 @@ Throttle Curve + + 0 + + + 9 + + + 0 + + + 0 + + + + 0 + 0 + + - 100 + 65535 200 @@ -69,6 +102,12 @@ 8 + + QFrame::StyledPanel + + + QFrame::Plain + Qt::ScrollBarAlwaysOff @@ -87,6 +126,12 @@ 1 + + true + + + false + Max @@ -274,91 +319,69 @@ - - + + - - 5 - 5 + + 0 + 0 - - - 50 - 50 - - - - - 1000 - 1000 - - - - - 10 - 10 - - - - - 200 - 200 - - - - - 7 - - + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 203 + 16 + + + + + + + + + 16777215 + 32 + + + + Advanced... + + + + + + + + 16777215 + 32 + + + + Reset + + + + - - - - 4 - - - - - Qt::Horizontal - - - - 40 - 16 - - - - - - - - - 16777215 - 32 - - - - Reset - - - - - - - - 16777215 - 32 - - - - Advanced... - - - - - diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index f2e5042dd..7a449afa9 100644 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -136,8 +136,8 @@ 0 0 - 798 - 705 + 782 + 726 @@ -7837,8 +7837,8 @@ border-radius: 5; 0 0 - 565 - 733 + 782 + 721 @@ -16299,8 +16299,8 @@ border-radius: 5; 0 0 - 829 - 691 + 831 + 683 @@ -23904,6 +23904,9 @@ font:bold; 0 + + QAbstractScrollArea::AdjustIgnored + true @@ -23912,70 +23915,31 @@ font:bold; 0 0 - 665 - 435 + 798 + 699 + + QLayout::SetDefaultConstraint + - - - Rattitude - - - - 9 - - - 9 - - - 9 - - - 9 - - - - - Qt::Horizontal + + + + + + Thrust PID Scaling - - - 40 - 20 - - - - - - - - Default - - - - objname:StabilizationSettings - button:default - buttongroup:15 - - - - - - - - QGroupBox{border: 0px;} - - + true - + 0 - 9 + 0 0 @@ -23983,124 +23947,250 @@ font:bold; 0 - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 90 - 11 - - - - - - + + - + 0 0 - 5 - 22 + 200 + 200 - - - 175 - 22 - + + + + + + QFrame::NoFrame - - Qt::StrongFocus + + QFrame::Raised - - <html><head/><body><p>Percentage of full stick where the transition from Attitude to Rate occurs. This transition always occurs when the aircraft is exactly inverted (bank angle 180 degrees). Small values are dangerous because they cause flips at small stick angles. Values significantly over 100 act like attitude mode and can never flip.</p></body></html> + + + 9 + + + + + Default + + + + + + + + + + + + + Rattitude + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + QGroupBox{border: 0px;} - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - + true - - 0 - - - 25.000000000000000 - - - 255.000000000000000 - - - 80.000000000000000 + + + 0 + + + 9 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 300 + 20 + + + + + + + + + 0 + 0 + + + + + 5 + 22 + + + + + 175 + 22 + + + + Qt::StrongFocus + + + <html><head/><body><p>Percentage of full stick where the transition from Attitude to Rate occurs. This transition always occurs when the aircraft is exactly inverted (bank angle 180 degrees). Small values are dangerous because they cause flips at small stick angles. Values significantly over 100 act like attitude mode and can never flip.</p></body></html> + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + true + + + 0 + + + 25.000000000000000 + + + 255.000000000000000 + + + 80.000000000000000 + + + + objname:StabilizationSettings + fieldname:RattitudeModeTransition + haslimits:no + scale:1 + buttongroup:15 + + + + + + + + + 0 + 0 + + + + + 144 + 16 + + + + + 175 + 16777215 + + + + + 75 + true + + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; + + + ModeTransition + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 90 + 11 + + + + + + + + Qt::Vertical + + + QSizePolicy::MinimumExpanding + + + + 20 + 20 + + + + + + + + + + + Default objname:StabilizationSettings - fieldname:RattitudeModeTransition - haslimits:no - scale:1 + button:default buttongroup:15 - - - - - 0 - 0 - - - - - 144 - 16 - - - - - 175 - 16777215 - - - - - 75 - true - - - - background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); -color: rgb(255, 255, 255); -border-radius: 5; - - - ModeTransition - - - Qt::AlignCenter - - - - - + + Qt::Horizontal - 300 + 40 20 @@ -24112,22 +24202,6 @@ border-radius: 5; - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - @@ -24767,7 +24841,7 @@ border-radius: 5; - + Qt::Vertical @@ -24818,8 +24892,8 @@ border-radius: 5; 0 0 - 478 - 518 + 798 + 699 @@ -27843,6 +27917,12 @@ Useful if you have accidentally changed some settings.
qtabbar.h
1 + + MixerCurve + QWidget +
mixercurve.h
+ 1 +
stabilizationReloadBoardData_6 diff --git a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/mixercurvewidget.cpp b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/mixercurvewidget.cpp index 17815aca4..37d9f3be5 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/mixercurvewidget.cpp +++ b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/mixercurvewidget.cpp @@ -225,7 +225,7 @@ void MixerCurveWidget::showEvent(QShowEvent *event) // the result is usually a ahrsbargraph that is way too small. QRectF rect = plot->boundingRect(); - fitInView(rect.adjusted(-15, -15, 15, 15), Qt::KeepAspectRatio); + fitInView(rect.adjusted(-12, -12, 12, 12), Qt::KeepAspectRatio); } void MixerCurveWidget::resizeEvent(QResizeEvent *event) @@ -233,7 +233,7 @@ void MixerCurveWidget::resizeEvent(QResizeEvent *event) Q_UNUSED(event); QRectF rect = plot->boundingRect(); - fitInView(rect.adjusted(-15, -15, 15, 15), Qt::KeepAspectRatio); + fitInView(rect.adjusted(-12, -12, 12, 12), Qt::KeepAspectRatio); } void MixerCurveWidget::changeEvent(QEvent *event)