mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
ConfigVehicleType, bugfix: set/get feedforward settings;
refactor set/getMixerValue into vehicleConfig;
This commit is contained in:
parent
f6f98aa091
commit
fc5d0a0175
@ -233,6 +233,30 @@ void VehicleConfig::setMixerVectorValue(UAVDataObject* mixer, int channel, Mixer
|
||||
}
|
||||
}
|
||||
|
||||
double VehicleConfig::getMixerValue(UAVDataObject* mixer, QString elementName)
|
||||
{
|
||||
Q_ASSERT(mixer);
|
||||
|
||||
double value = 0.0;
|
||||
|
||||
QPointer<UAVObjectField> field = mixer->getField(elementName);
|
||||
if (field) {
|
||||
value = field->getDouble();
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
void VehicleConfig::setMixerValue(UAVDataObject* mixer, QString elementName, double value)
|
||||
{
|
||||
Q_ASSERT(mixer);
|
||||
|
||||
QPointer<UAVObjectField> field = mixer->getField(elementName);
|
||||
if (field) {
|
||||
field->setDouble(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VehicleConfig::setThrottleCurve(UAVDataObject* mixer, MixerThrottleCurveElem curveType, QList<double> curve)
|
||||
{
|
||||
QPointer<UAVObjectField> field;
|
||||
|
@ -130,6 +130,8 @@ class VehicleConfig: public ConfigTaskWidget
|
||||
void resetMixerVector(UAVDataObject* mixer, int channel);
|
||||
QString getMixerType(UAVDataObject* mixer, int channel);
|
||||
void setMixerType(UAVDataObject* mixer, int channel, MixerTypeElem mixerType);
|
||||
double getMixerValue(UAVDataObject* mixer, QString elementName);
|
||||
void setMixerValue(UAVDataObject* mixer, QString elementName, double value);
|
||||
void setThrottleCurve(UAVDataObject* mixer, MixerThrottleCurveElem curveType, QList<double> curve);
|
||||
void getThrottleCurve(UAVDataObject* mixer, MixerThrottleCurveElem curveType, QList<double>* curve);
|
||||
bool isValidThrottleCurve(QList<double>* curve);
|
||||
|
@ -444,16 +444,17 @@ void ConfigVehicleTypeWidget::enableFFTest()
|
||||
// Depending on phase, either move actuator or send FF settings:
|
||||
if (ffTuningPhase) {
|
||||
// Send FF settings to the board
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
|
||||
UAVObjectField* field = obj->getField(QString("FeedForward"));
|
||||
field->setDouble((double)m_aircraft->feedForwardSlider->value()/100);
|
||||
field = obj->getField(QString("AccelTime"));
|
||||
field->setDouble(m_aircraft->accelTime->value());
|
||||
field = obj->getField(QString("DecelTime"));
|
||||
field->setDouble(m_aircraft->decelTime->value());
|
||||
field = obj->getField(QString("MaxAccel"));
|
||||
field->setDouble(m_aircraft->maxAccelSlider->value());
|
||||
obj->updated();
|
||||
UAVDataObject* mixer = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
|
||||
Q_ASSERT(mixer);
|
||||
|
||||
VehicleConfig* vconfig = new VehicleConfig();
|
||||
|
||||
// Update feed forward settings
|
||||
vconfig->setMixerValue(mixer, "FeedForward", m_aircraft->feedForwardSlider->value() / 100.0);
|
||||
vconfig->setMixerValue(mixer, "AccelTime", m_aircraft->accelTime->value());
|
||||
vconfig->setMixerValue(mixer, "DecelTime", m_aircraft->decelTime->value());
|
||||
vconfig->setMixerValue(mixer, "MaxAccel", m_aircraft->maxAccelSlider->value());
|
||||
mixer->updated();
|
||||
} else {
|
||||
// Toggle motor state
|
||||
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("ManualControlCommand")));
|
||||
@ -809,6 +810,12 @@ void ConfigVehicleTypeWidget::updateCustomAirframeUI()
|
||||
QString::number(vconfig->getMixerVectorValue(mixer,channel,VehicleConfig::MIXERVECTOR_YAW)));
|
||||
}
|
||||
}
|
||||
|
||||
// Update feed forward settings
|
||||
m_aircraft->feedForwardSlider->setValue(vconfig->getMixerValue(mixer,"FeedForward") * 100);
|
||||
m_aircraft->accelTime->setValue(vconfig->getMixerValue(mixer,"AccelTime"));
|
||||
m_aircraft->decelTime->setValue(vconfig->getMixerValue(mixer,"DecelTime"));
|
||||
m_aircraft->maxAccelSlider->setValue(vconfig->getMixerValue(mixer,"MaxAccel"));
|
||||
}
|
||||
|
||||
|
||||
@ -821,6 +828,17 @@ void ConfigVehicleTypeWidget::updateCustomAirframeUI()
|
||||
*/
|
||||
void ConfigVehicleTypeWidget::updateObjectsFromWidgets()
|
||||
{
|
||||
UAVDataObject* mixer = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
|
||||
Q_ASSERT(mixer);
|
||||
|
||||
VehicleConfig* vconfig = new VehicleConfig();
|
||||
|
||||
// Update feed forward settings
|
||||
vconfig->setMixerValue(mixer, "FeedForward", m_aircraft->feedForwardSlider->value() / 100.0);
|
||||
vconfig->setMixerValue(mixer, "AccelTime", m_aircraft->accelTime->value());
|
||||
vconfig->setMixerValue(mixer, "DecelTime", m_aircraft->decelTime->value());
|
||||
vconfig->setMixerValue(mixer, "MaxAccel", m_aircraft->maxAccelSlider->value());
|
||||
|
||||
QString airframeType = "Custom"; //Sets airframe type default to "Custom"
|
||||
if (m_aircraft->aircraftType->currentText() == "Fixed Wing") {
|
||||
airframeType = m_fixedwing->updateConfigObjectsFromWidgets();
|
||||
@ -835,12 +853,6 @@ void ConfigVehicleTypeWidget::updateObjectsFromWidgets()
|
||||
airframeType = m_groundvehicle->updateConfigObjectsFromWidgets();
|
||||
}
|
||||
else {
|
||||
|
||||
UAVDataObject* mixer = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
|
||||
Q_ASSERT(mixer);
|
||||
|
||||
VehicleConfig* vconfig = new VehicleConfig();
|
||||
|
||||
vconfig->setThrottleCurve(mixer, VehicleConfig::MIXER_THROTTLECURVE1, m_aircraft->customThrottle1Curve->getCurve());
|
||||
vconfig->setThrottleCurve(mixer, VehicleConfig::MIXER_THROTTLECURVE2, m_aircraft->customThrottle2Curve->getCurve());
|
||||
|
||||
|
@ -185,11 +185,11 @@ QList<double> MixerCurveWidget::getCurve() {
|
||||
*/
|
||||
void MixerCurveWidget::initLinearCurve(int numPoints, double maxValue, double minValue)
|
||||
{
|
||||
setRange(minValue, maxValue);
|
||||
double range = setRange(minValue, maxValue);
|
||||
|
||||
QList<double> points;
|
||||
for (double i=0; i < (double)numPoints; i++) {
|
||||
double val = ((curveMax - curveMin) * ( i / (double)(numPoints-1) ) ) + curveMin;
|
||||
double val = (range * ( i / (double)(numPoints-1) ) ) + minValue;
|
||||
points.append(val);
|
||||
}
|
||||
initCurve(points);
|
||||
@ -268,8 +268,9 @@ double MixerCurveWidget::getMax()
|
||||
{
|
||||
return curveMax;
|
||||
}
|
||||
void MixerCurveWidget::setRange(double min, double max)
|
||||
double MixerCurveWidget::setRange(double min, double max)
|
||||
{
|
||||
curveMin = min;
|
||||
curveMax = max;
|
||||
return curveMax - curveMin;
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ public:
|
||||
double getMin();
|
||||
void setMax(double value);
|
||||
double getMax();
|
||||
void setRange(double min, double max);
|
||||
double setRange(double min, double max);
|
||||
|
||||
static const int NODE_NUMELEM = 5;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user