1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-11-30 08:24:11 +01:00

OP-146 Slow progress on the stabilization configuration UI. New approach, more efficient. Not functional yet but we'll get there eventually.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2867 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
edouard 2011-02-23 23:06:35 +00:00 committed by edouard
parent a4fe867c1d
commit 3d26b4ec60
6 changed files with 472 additions and 795 deletions

View File

@ -22,8 +22,7 @@ HEADERS += configplugin.h \
mixercurvepoint.h \
mixercurveline.h \
configccpmwidget.h \
configstabilizationwidget.h \
vernierwidget.h
configstabilizationwidget.h
SOURCES += configplugin.cpp \
configgadgetconfiguration.cpp \
configgadgetwidget.cpp \
@ -40,13 +39,11 @@ SOURCES += configplugin.cpp \
mixercurvepoint.cpp \
mixercurveline.cpp \
configccpmwidget.cpp \
configstabilizationwidget.cpp \
vernierwidget.cpp
configstabilizationwidget.cpp
FORMS += settingswidget.ui \
airframe.ui \
telemetry.ui \
ahrs.ui \
ccpm.ui \
stabilization.ui \
vernier.ui
stabilization.ui
RESOURCES += configgadget.qrc

View File

@ -37,6 +37,8 @@
ConfigStabilizationWidget::ConfigStabilizationWidget(QWidget *parent) : ConfigTaskWidget(parent)
{
stabSettings = StabilizationSettings::GetInstance(getObjectManager());
m_stabilization = new Ui_StabilizationWidget();
m_stabilization->setupUi(this);
@ -44,12 +46,17 @@ ConfigStabilizationWidget::ConfigStabilizationWidget(QWidget *parent) : ConfigTa
UAVObject *obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("StabilizationSettings")));
requestStabilizationUpdate();
//connect(m_telemetry->saveTelemetryToSD, SIGNAL(clicked()), this, SLOT(saveTelemetryUpdate()));
//connect(m_telemetry->saveTelemetryToRAM, SIGNAL(clicked()), this, SLOT(sendTelemetryUpdate()));
//connect(m_telemetry->getTelemetryCurrent, SIGNAL(clicked()), this, SLOT(requestTelemetryUpdate()));
connect(m_stabilization->saveStabilizationToSD, SIGNAL(clicked()), this, SLOT(saveStabilizationUpdate()));
connect(m_stabilization->saveStabilizationToRAM, SIGNAL(clicked()), this, SLOT(sendStabilizationUpdate()));
connect(m_stabilization->getStabilizationCurrent, SIGNAL(clicked()), this, SLOT(requestStabilizationUpdate()));
connect(m_stabilization->resetStabilizationToDefaults, SIGNAL(clicked()), this, SLOT(resetStabilizationToDefaults()));
connect(parent, SIGNAL(autopilotConnected()),this, SLOT(requestStabilizationUpdate()));
// TODO: create a timer to regularly send the object update in case
// we want realtime updates.
}
ConfigStabilizationWidget::~ConfigStabilizationWidget()
@ -67,41 +74,88 @@ ConfigStabilizationWidget::~ConfigStabilizationWidget()
*/
void ConfigStabilizationWidget::requestStabilizationUpdate()
{
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("StabilizationSettings")));
Q_ASSERT(obj);
obj->requestUpdate();
stabSettings->requestUpdate();
StabilizationSettings::DataFields stabData = stabSettings->getData();
// Now fill in all the fields, this is fairly tedious:
m_stabilization->rateRollKp->setValue(stabData.RollRatePI[StabilizationSettings::ROLLRATEPI_KP]);
m_stabilization->rateRollKi->setValue(stabData.RollRatePI[StabilizationSettings::ROLLRATEPI_KI]);
m_stabilization->rateRollILimit->setValue(stabData.RollRatePI[StabilizationSettings::ROLLRATEPI_ILIMIT]);
m_stabilization->ratePitchKp->setValue(stabData.PitchRatePI[StabilizationSettings::PITCHRATEPI_KP]);
m_stabilization->ratePitchKi->setValue(stabData.PitchRatePI[StabilizationSettings::PITCHRATEPI_KI]);
m_stabilization->ratePitchILimit->setValue(stabData.PitchRatePI[StabilizationSettings::PITCHRATEPI_ILIMIT]);
m_stabilization->rateYawKp->setValue(stabData.YawRatePI[StabilizationSettings::YAWRATEPI_KP]);
m_stabilization->rateYawKi->setValue(stabData.YawRatePI[StabilizationSettings::YAWRATEPI_KI]);
m_stabilization->rateYawILimit->setValue(stabData.YawRatePI[StabilizationSettings::YAWRATEPI_ILIMIT]);
m_stabilization->rollKp->setValue(stabData.RollPI[StabilizationSettings::ROLLPI_KP]);
m_stabilization->rollKi->setValue(stabData.RollPI[StabilizationSettings::ROLLPI_KI]);
m_stabilization->rollILimit->setValue(stabData.RollPI[StabilizationSettings::ROLLPI_ILIMIT]);
m_stabilization->pitchKp->setValue(stabData.PitchPI[StabilizationSettings::PITCHPI_KP]);
m_stabilization->pitchKi->setValue(stabData.PitchPI[StabilizationSettings::PITCHPI_KI]);
m_stabilization->pitchILimit->setValue(stabData.PitchPI[StabilizationSettings::PITCHPI_ILIMIT]);
m_stabilization->yawKp->setValue(stabData.YawPI[StabilizationSettings::YAWPI_KP]);
m_stabilization->yawKi->setValue(stabData.YawPI[StabilizationSettings::YAWPI_KI]);
m_stabilization->yawILimit->setValue(stabData.YawPI[StabilizationSettings::YAWPI_ILIMIT]);
}
/**
Send telemetry settings to the board
*/
/*
void ConfigStabilizationWidget::sendTelemetryUpdate()
void ConfigStabilizationWidget::sendStabilizationUpdate()
{
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("TelemetrySettings")));
Q_ASSERT(obj);
UAVObjectField* field = obj->getField(QString("Speed"));
field->setValue(m_telemetry->telemetrySpeed->currentText());
obj->updated();
StabilizationSettings::DataFields stabData = stabSettings->getData();
stabData.RollRatePI[StabilizationSettings::ROLLRATEPI_KP] = m_stabilization->rateRollKp->value();
stabData.RollRatePI[StabilizationSettings::ROLLRATEPI_KI] = m_stabilization->rateRollKi->value();
stabData.RollRatePI[StabilizationSettings::ROLLRATEPI_ILIMIT] = m_stabilization->rateRollILimit->value();
stabData.PitchRatePI[StabilizationSettings::PITCHRATEPI_KP] = m_stabilization->ratePitchKp->value();
stabData.PitchRatePI[StabilizationSettings::PITCHRATEPI_KI] = m_stabilization->ratePitchKi->value();
stabData.PitchRatePI[StabilizationSettings::PITCHRATEPI_ILIMIT] = m_stabilization->ratePitchILimit->value();
stabData.YawRatePI[StabilizationSettings::YAWRATEPI_KP] = m_stabilization->rateYawKp->value();
stabData.YawRatePI[StabilizationSettings::YAWRATEPI_KI] = m_stabilization->rateYawKi->value();
stabData.YawRatePI[StabilizationSettings::YAWRATEPI_ILIMIT] = m_stabilization->rateYawILimit->value();
stabData.RollPI[StabilizationSettings::ROLLPI_KP] = m_stabilization->rollKp->value();
stabData.RollPI[StabilizationSettings::ROLLPI_KI] = m_stabilization->rollKi->value();
stabData.RollPI[StabilizationSettings::ROLLPI_ILIMIT] = m_stabilization->rollILimit->value();
stabData.PitchPI[StabilizationSettings::PITCHPI_KP] = m_stabilization->pitchKp->value();
stabData.PitchPI[StabilizationSettings::PITCHPI_KI] = m_stabilization->pitchKi->value();
stabData.PitchPI[StabilizationSettings::PITCHPI_ILIMIT] = m_stabilization->pitchILimit->value();
stabData.YawPI[StabilizationSettings::YAWPI_KP] = m_stabilization->yawKp->value();
stabData.YawPI[StabilizationSettings::YAWPI_KI] = m_stabilization->yawKi->value();
stabData.YawPI[StabilizationSettings::YAWPI_ILIMIT] = m_stabilization->yawILimit->value();
stabSettings->setData(stabData); // this is atomic
}
*/
/**
Send telemetry settings to the board and request saving to SD card
*/
/*
void ConfigStabilizationWidget::saveTelemetryUpdate()
void ConfigStabilizationWidget::saveStabilizationUpdate()
{
// Send update so that the latest value is saved
sendTelemetryUpdate();
sendStabilizationUpdate();
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("TelemetrySettings")));
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("StabilizationSettings")));
Q_ASSERT(obj);
updateObjectPersistance(ObjectPersistence::OPERATION_SAVE, obj);
}
*/
void ConfigStabilizationWidget::resetStabilizationToDefaults()
{
}

View File

@ -32,6 +32,7 @@
#include "extensionsystem/pluginmanager.h"
#include "uavobjectmanager.h"
#include "uavobject.h"
#include "stabilizationsettings.h"
#include <QtGui/QWidget>
#include <QList>
@ -46,11 +47,14 @@ public:
private:
Ui_StabilizationWidget *m_stabilization;
StabilizationSettings* stabSettings;
private slots:
void requestStabilizationUpdate();
// void sendTelemetryUpdate();
// void saveTelemetryUpdate();
void sendStabilizationUpdate();
void saveStabilizationUpdate();
void resetStabilizationToDefaults();
void parameterValueChanged(double value);
};

View File

@ -7,638 +7,361 @@
<x>0</x>
<y>0</y>
<width>639</width>
<height>407</height>
<height>465</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QTabWidget" name="tabWidget">
<widget class="QTabWidget" name="piFactors">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>P Factors</string>
<string>PI Factors</string>
</attribute>
<widget class="QDial" name="dial">
<property name="geometry">
<rect>
<x>0</x>
<y>20</y>
<width>101</width>
<height>81</height>
</rect>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="pageStep">
<number>100</number>
</property>
<property name="wrapping">
<bool>false</bool>
</property>
<property name="notchTarget">
<double>37.000000000000000</double>
</property>
<property name="notchesVisible">
<bool>true</bool>
</property>
</widget>
<widget class="QDial" name="dial_2">
<property name="geometry">
<rect>
<x>30</x>
<y>40</y>
<width>41</width>
<height>41</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="wrapping">
<bool>true</bool>
</property>
<property name="notchesVisible">
<bool>false</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="doubleSpinBox">
<property name="geometry">
<rect>
<x>10</x>
<y>110</y>
<width>101</width>
<height>27</height>
</rect>
</property>
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000010000000000</double>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>20</x>
<y>10</y>
<width>67</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>RollRate</string>
</property>
</widget>
<widget class="QDial" name="dial_3">
<property name="geometry">
<rect>
<x>140</x>
<y>40</y>
<width>41</width>
<height>41</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="wrapping">
<bool>true</bool>
</property>
<property name="notchesVisible">
<bool>false</bool>
</property>
</widget>
<widget class="QDial" name="dial_4">
<property name="geometry">
<rect>
<x>110</x>
<y>20</y>
<width>101</width>
<height>81</height>
</rect>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="pageStep">
<number>100</number>
</property>
<property name="wrapping">
<bool>false</bool>
</property>
<property name="notchTarget">
<double>37.000000000000000</double>
</property>
<property name="notchesVisible">
<bool>true</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="doubleSpinBox_2">
<property name="geometry">
<rect>
<x>120</x>
<y>110</y>
<width>101</width>
<height>27</height>
</rect>
</property>
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000010000000000</double>
</property>
</widget>
<widget class="QDial" name="dial_5">
<property name="geometry">
<rect>
<x>250</x>
<y>40</y>
<width>41</width>
<height>41</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="wrapping">
<bool>true</bool>
</property>
<property name="notchesVisible">
<bool>false</bool>
</property>
</widget>
<widget class="QDial" name="dial_6">
<property name="geometry">
<rect>
<x>220</x>
<y>20</y>
<width>101</width>
<height>81</height>
</rect>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="pageStep">
<number>100</number>
</property>
<property name="wrapping">
<bool>false</bool>
</property>
<property name="notchTarget">
<double>37.000000000000000</double>
</property>
<property name="notchesVisible">
<bool>true</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="doubleSpinBox_3">
<property name="geometry">
<rect>
<x>230</x>
<y>110</y>
<width>101</width>
<height>27</height>
</rect>
</property>
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000010000000000</double>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>130</x>
<y>10</y>
<width>67</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>PitchRate</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>240</x>
<y>10</y>
<width>67</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>YawRate</string>
</property>
</widget>
<widget class="QCheckBox" name="checkBox">
<property name="geometry">
<rect>
<x>50</x>
<y>140</y>
<width>131</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Link Roll/Pitch</string>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>20</x>
<y>180</y>
<width>67</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Roll</string>
</property>
</widget>
<widget class="QDial" name="dial_7">
<property name="geometry">
<rect>
<x>110</x>
<y>190</y>
<width>101</width>
<height>81</height>
</rect>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="pageStep">
<number>100</number>
</property>
<property name="wrapping">
<bool>false</bool>
</property>
<property name="notchTarget">
<double>37.000000000000000</double>
</property>
<property name="notchesVisible">
<bool>true</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="doubleSpinBox_4">
<property name="geometry">
<rect>
<x>120</x>
<y>280</y>
<width>101</width>
<height>27</height>
</rect>
</property>
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000010000000000</double>
</property>
</widget>
<widget class="QDial" name="dial_8">
<property name="geometry">
<rect>
<x>220</x>
<y>190</y>
<width>101</width>
<height>81</height>
</rect>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="pageStep">
<number>100</number>
</property>
<property name="wrapping">
<bool>false</bool>
</property>
<property name="notchTarget">
<double>37.000000000000000</double>
</property>
<property name="notchesVisible">
<bool>true</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="doubleSpinBox_5">
<property name="geometry">
<rect>
<x>230</x>
<y>280</y>
<width>101</width>
<height>27</height>
</rect>
</property>
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000010000000000</double>
</property>
</widget>
<widget class="QDial" name="dial_9">
<property name="geometry">
<rect>
<x>140</x>
<y>210</y>
<width>41</width>
<height>41</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="wrapping">
<bool>true</bool>
</property>
<property name="notchesVisible">
<bool>false</bool>
</property>
</widget>
<widget class="QDial" name="dial_10">
<property name="geometry">
<rect>
<x>30</x>
<y>210</y>
<width>41</width>
<height>41</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="wrapping">
<bool>true</bool>
</property>
<property name="notchesVisible">
<bool>false</bool>
</property>
</widget>
<widget class="QCheckBox" name="checkBox_2">
<property name="geometry">
<rect>
<x>50</x>
<y>310</y>
<width>131</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Link Roll/Pitch</string>
</property>
</widget>
<widget class="QLabel" name="label_6">
<property name="geometry">
<rect>
<x>130</x>
<y>180</y>
<width>67</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Pitch</string>
</property>
</widget>
<widget class="QDial" name="dial_11">
<property name="geometry">
<rect>
<x>0</x>
<y>190</y>
<width>101</width>
<height>81</height>
</rect>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="pageStep">
<number>100</number>
</property>
<property name="wrapping">
<bool>false</bool>
</property>
<property name="notchTarget">
<double>37.000000000000000</double>
</property>
<property name="notchesVisible">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="label_7">
<property name="geometry">
<rect>
<x>240</x>
<y>180</y>
<width>67</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Yaw</string>
</property>
</widget>
<widget class="QDial" name="dial_12">
<property name="geometry">
<rect>
<x>250</x>
<y>210</y>
<width>41</width>
<height>41</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="wrapping">
<bool>true</bool>
</property>
<property name="notchesVisible">
<bool>false</bool>
</property>
</widget>
<widget class="QDoubleSpinBox" name="doubleSpinBox_6">
<property name="geometry">
<rect>
<x>10</x>
<y>280</y>
<width>101</width>
<height>27</height>
</rect>
</property>
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000010000000000</double>
</property>
</widget>
<widget class="QFrame" name="frame">
<property name="geometry">
<rect>
<x>350</x>
<y>10</y>
<width>251</width>
<height>131</height>
</rect>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>30</x>
<y>30</y>
<width>161</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Advice on tuning here</string>
</property>
</widget>
</widget>
<widget class="QCheckBox" name="checkBox_3">
<property name="geometry">
<rect>
<x>370</x>
<y>170</y>
<width>211</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Update values in real time</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>440</x>
<y>250</y>
<width>98</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Save to RAM</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>440</x>
<y>300</y>
<width>98</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Save to SD</string>
</property>
</widget>
<zorder>dial_11</zorder>
<zorder>dial_7</zorder>
<zorder>dial_8</zorder>
<zorder>dial_6</zorder>
<zorder>dial_4</zorder>
<zorder>dial</zorder>
<zorder>dial_2</zorder>
<zorder>doubleSpinBox</zorder>
<zorder>label</zorder>
<zorder>doubleSpinBox_2</zorder>
<zorder>doubleSpinBox_3</zorder>
<zorder>label_3</zorder>
<zorder>label_4</zorder>
<zorder>checkBox</zorder>
<zorder>label_5</zorder>
<zorder>doubleSpinBox_4</zorder>
<zorder>doubleSpinBox_5</zorder>
<zorder>checkBox_2</zorder>
<zorder>label_6</zorder>
<zorder>label_7</zorder>
<zorder>doubleSpinBox_6</zorder>
<zorder>frame</zorder>
<zorder>checkBox_3</zorder>
<zorder>pushButton</zorder>
<zorder>pushButton_2</zorder>
<zorder>dial_3</zorder>
<zorder>dial_5</zorder>
<zorder>dial_10</zorder>
<zorder>dial_9</zorder>
<zorder>dial_12</zorder>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_8">
<property name="text">
<string>Rate Stabilization (inner loop)</string>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="toolTip">
<string>First, work on rate stabilization.</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="1,1,2,2,2">
<item row="1" column="1">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Roll</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QDoubleSpinBox" name="rateRollKp">
<property name="toolTip">
<string>Slowly raise Kp until you start seeing clear oscillations when you fly.</string>
</property>
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Pitch</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QDoubleSpinBox" name="ratePitchKp">
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Kp</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QDoubleSpinBox" name="rateRollKi">
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QDoubleSpinBox" name="ratePitchKi">
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Ki</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QDoubleSpinBox" name="rateRollILimit">
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QDoubleSpinBox" name="ratePitchILimit">
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="label_14">
<property name="text">
<string>ILimit</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="0" rowspan="2">
<widget class="QCheckBox" name="linkRateRP">
<property name="text">
<string>Link</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Yaw</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QDoubleSpinBox" name="rateYawKp">
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QDoubleSpinBox" name="rateYawKi">
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QDoubleSpinBox" name="rateYawILimit">
<property name="decimals">
<number>6</number>
</property>
<property name="singleStep">
<double>0.000100000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>Attitude Stabilization (outer loop)</string>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_3">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="1,1,2,2,2">
<item row="1" column="0" rowspan="2">
<widget class="QCheckBox" name="linkAttitudeRP">
<property name="text">
<string>Link</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Roll</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Pitch</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Yaw</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QDoubleSpinBox" name="rollKp">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QDoubleSpinBox" name="pitchKp">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QDoubleSpinBox" name="yawKp">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QDoubleSpinBox" name="rollKi">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QDoubleSpinBox" name="pitchKi">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QDoubleSpinBox" name="yawKi">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QDoubleSpinBox" name="rollILimit">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QDoubleSpinBox" name="pitchILimit">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QDoubleSpinBox" name="yawILimit">
<property name="decimals">
<number>6</number>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Kp</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Ki</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="label_21">
<property name="text">
<string>ILimit</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="realTimeUpdates">
<property name="text">
<string>Update in real time</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
@ -647,6 +370,51 @@
</widget>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="resetStabilizationToDefaults">
<property name="text">
<string>Reset to defaults</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="getStabilizationCurrent">
<property name="text">
<string>Get Current</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveStabilizationToRAM">
<property name="text">
<string>Save to RAM</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="saveStabilizationToSD">
<property name="text">
<string>Save to SD</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>

View File

@ -1,86 +0,0 @@
/**
******************************************************************************
*
* @file mixercurvewidget.cpp
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup ConfigPlugin Config Plugin
* @{
* @brief A widget which displays an adjustable mixer curve
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "vernierwidget.h"
#include <QtGui>
#include <QDebug>
/*
* Initialize the widget
*/
VernierWidget::VernierWidget(QWidget *parent) : QWidget(parent)
{
m_vernier = new Ui_VernierWidget();
m_vernier->setupUi(this);
curveMin=0.0;
curveMax=1.0;
}
VernierWidget::~VernierWidget()
{
}
void VernierWidget::showEvent(QShowEvent *event)
{
Q_UNUSED(event)
// Thit fitInView method should only be called now, once the
// widget is shown, otherwise it cannot compute its values and
// the result is usually a ahrsbargraph that is way too small.
//fitInView(plot, Qt::KeepAspectRatio);
}
void VernierWidget::resizeEvent(QResizeEvent* event)
{
Q_UNUSED(event);
//fitInView(plot, Qt::KeepAspectRatio);
}
void VernierWidget::setMin(double value)
{
curveMin = value;
}
void VernierWidget::setMax(double value)
{
curveMax = value;
}
void VernierWidget::setRange(double min, double max)
{
curveMin = min;
curveMax = max;
}

View File

@ -1,60 +0,0 @@
/**
******************************************************************************
*
* @file vernierwidget.h
* @author Edouard Lafargue Copyright (C) 2010.
* @addtogroup GCSPlugins GCS Plugins
* @{
* @addtogroup ConfigPlugin Configuration Plugin
* @{
* @brief A widget which displays a coarse/fine control
*****************************************************************************/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef VERNIERWIDGET_H_
#define VERNIERWIDGET_H_
#include <QWidget>
#include "ui_vernier.h"
class VernierWidget : public QWidget
{
Q_OBJECT
public:
VernierWidget(QWidget *parent = 0);
~VernierWidget();
void setMin(double value);
void setMax(double value);
void setRange(double min, double max);
signals:
private slots:
private:
double curveMin;
double curveMax;
Ui_VernierWidget * m_vernier;
protected:
void showEvent(QShowEvent *event);
void resizeEvent(QResizeEvent *event);
};
#endif /* VERNIERWIDGET_H_ */