1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-11 01:54:14 +01:00

Merge remote-tracking branch 'origin/OP-530-PT_Dreamer'

Note this requires redoing the mixer settings!

Conflicts:
	shared/uavobjectdefinition/mixersettings.xml
This commit is contained in:
James Cotton 2011-06-20 14:08:08 -05:00
commit 0f2e4730b4
6 changed files with 52 additions and 38 deletions

View File

@ -374,7 +374,7 @@ void ConfigAirframeWidget::resetFwMixer()
{ {
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings"))); UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
UAVObjectField* field = obj->getField(QString("ThrottleCurve1")); UAVObjectField* field = obj->getField(QString("ThrottleCurve1"));
resetMixer(m_aircraft->fixedWingThrottle, field->getNumElements()); resetMixer(m_aircraft->fixedWingThrottle, field->getNumElements(),1);
} }
/** /**
@ -384,7 +384,7 @@ void ConfigAirframeWidget::resetMrMixer()
{ {
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings"))); UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
UAVObjectField* field = obj->getField(QString("ThrottleCurve1")); UAVObjectField* field = obj->getField(QString("ThrottleCurve1"));
resetMixer(m_aircraft->multiThrottleCurve, field->getNumElements()); resetMixer(m_aircraft->multiThrottleCurve, field->getNumElements(),0.95);
} }
/** /**
@ -394,7 +394,7 @@ void ConfigAirframeWidget::resetCt1Mixer()
{ {
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings"))); UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
UAVObjectField* field = obj->getField(QString("ThrottleCurve1")); UAVObjectField* field = obj->getField(QString("ThrottleCurve1"));
resetMixer(m_aircraft->customThrottle1Curve, field->getNumElements()); resetMixer(m_aircraft->customThrottle1Curve, field->getNumElements(),1);
} }
/** /**
@ -404,21 +404,17 @@ void ConfigAirframeWidget::resetCt2Mixer()
{ {
UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings"))); UAVDataObject* obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("MixerSettings")));
UAVObjectField* field = obj->getField(QString("ThrottleCurve2")); UAVObjectField* field = obj->getField(QString("ThrottleCurve2"));
resetMixer(m_aircraft->customThrottle2Curve, field->getNumElements()); resetMixer(m_aircraft->customThrottle2Curve, field->getNumElements(),1);
} }
/** /**
Resets a mixer curve Resets a mixer curve
*/ */
void ConfigAirframeWidget::resetMixer(MixerCurveWidget *mixer, int numElements) void ConfigAirframeWidget::resetMixer(MixerCurveWidget *mixer, int numElements, double maxvalue)
{ {
QList<double> curveValues;
for (double i=0; i<numElements; i++) {
curveValues.append(i/(numElements-1));
}
// Setup all Throttle1 curves for all types of airframes // Setup all Throttle1 curves for all types of airframes
mixer->initCurve(curveValues); mixer->initLinearCurve((quint32)numElements,maxvalue);
} }
/** /**
@ -484,18 +480,29 @@ void ConfigAirframeWidget::refreshValues()
// If the 1st element of the curve is <= -10, then the curve // If the 1st element of the curve is <= -10, then the curve
// is a straight line (that's how the mixer works on the mainboard): // is a straight line (that's how the mixer works on the mainboard):
if (field->getValue(0).toInt() <= -10) { if (field->getValue(0).toInt() <= -10) {
for (double i=0; i<field->getNumElements(); i++) { m_aircraft->multiThrottleCurve->initLinearCurve(field->getNumElements(),(double)1);
curveValues.append(i/(field->getNumElements()-1)); m_aircraft->fixedWingThrottle->initLinearCurve(field->getNumElements(),(double)1);
} }
} else { else {
double temp=0;
double value;
for (unsigned int i=0; i < field->getNumElements(); i++) { for (unsigned int i=0; i < field->getNumElements(); i++) {
curveValues.append(field->getValue(i).toDouble()); value=field->getValue(i).toDouble();
temp+=value;
curveValues.append(value);
}
if(temp==0)
{
m_aircraft->multiThrottleCurve->initLinearCurve(field->getNumElements(),0.95);;
m_aircraft->fixedWingThrottle->initLinearCurve(field->getNumElements(),(double)1);
}
else
{
m_aircraft->multiThrottleCurve->initCurve(curveValues);
m_aircraft->fixedWingThrottle->initCurve(curveValues);
} }
} }
// Setup all Throttle1 curves for all types of airframes // Setup all Throttle1 curves for all types of airframes
m_aircraft->fixedWingThrottle->initCurve(curveValues);
m_aircraft->multiThrottleCurve->initCurve(curveValues);
// Load the Settings for fixed wing frames: // Load the Settings for fixed wing frames:
if (frameType.startsWith("FixedWing")) { if (frameType.startsWith("FixedWing")) {
// Then retrieve how channels are setup // Then retrieve how channels are setup
@ -1754,31 +1761,32 @@ void ConfigAirframeWidget::updateCustomAirframeUI()
// If the 1st element of the curve is <= -10, then the curve // If the 1st element of the curve is <= -10, then the curve
// is a straight line (that's how the mixer works on the mainboard): // is a straight line (that's how the mixer works on the mainboard):
if (field->getValue(0).toInt() <= -10) { if (field->getValue(0).toInt() <= -10) {
for (double i=0; i<field->getNumElements(); i++) { m_aircraft->customThrottle1Curve->initLinearCurve(field->getNumElements(),(double)1);
curveValues.append(i/(field->getNumElements()-1));
}
} else { } else {
double temp=0;
double value;
for (unsigned int i=0; i < field->getNumElements(); i++) { for (unsigned int i=0; i < field->getNumElements(); i++) {
curveValues.append(field->getValue(i).toDouble()); value=field->getValue(i).toDouble();
} temp+=value;
curveValues.append(value);
} }
if(temp==0)
m_aircraft->customThrottle1Curve->initLinearCurve(field->getNumElements(),(double)1);
else
m_aircraft->customThrottle1Curve->initCurve(curveValues); m_aircraft->customThrottle1Curve->initCurve(curveValues);
}
field = obj->getField(QString("ThrottleCurve2")); field = obj->getField(QString("ThrottleCurve2"));
curveValues.clear();; curveValues.clear();;
// If the 1st element of the curve is <= -10, then the curve // If the 1st element of the curve is <= -10, then the curve
// is a straight line (that's how the mixer works on the mainboard): // is a straight line (that's how the mixer works on the mainboard):
if (field->getValue(0).toInt() <= -10) { if (field->getValue(0).toInt() <= -10) {
for (double i=0; i<field->getNumElements(); i++) { m_aircraft->customThrottle2Curve->initLinearCurve(field->getNumElements(),(double)1);
curveValues.append(i/(field->getNumElements()-1));
}
} else { } else {
for (unsigned int i=0; i < field->getNumElements(); i++) { for (unsigned int i=0; i < field->getNumElements(); i++) {
curveValues.append(field->getValue(i).toDouble()); curveValues.append(field->getValue(i).toDouble());
} }
}
m_aircraft->customThrottle2Curve->initCurve(curveValues); m_aircraft->customThrottle2Curve->initCurve(curveValues);
}
// Retrieve Feed Forward: // Retrieve Feed Forward:
field = obj->getField(QString("FeedForward")); field = obj->getField(QString("FeedForward"));
m_aircraft->customFFSlider->setValue(field->getDouble()*100); m_aircraft->customFFSlider->setValue(field->getDouble()*100);

View File

@ -61,7 +61,7 @@ private:
virtual void enableControls(bool enable); virtual void enableControls(bool enable);
void resetField(UAVObjectField * field); void resetField(UAVObjectField * field);
void resetMixer (MixerCurveWidget *mixer, int numElements); void resetMixer (MixerCurveWidget *mixer, int numElements, double maxvalue);
void resetActuators(); void resetActuators();
//void setMixerChannel(int channelNumber, bool channelIsMotor, QList<double> vector); //void setMixerChannel(int channelNumber, bool channelIsMotor, QList<double> vector);
void setupQuadMotor(int channel, double roll, double pitch, double yaw); void setupQuadMotor(int channel, double roll, double pitch, double yaw);

View File

@ -372,12 +372,7 @@ void ConfigccpmWidget::UpdateType()
*/ */
void ConfigccpmWidget::resetMixer(MixerCurveWidget *mixer, int numElements) void ConfigccpmWidget::resetMixer(MixerCurveWidget *mixer, int numElements)
{ {
QList<double> curveValues; mixer->initLinearCurve(numElements,(double)1);
for (double i=0; i<numElements; i++) {
curveValues.append(i/(numElements-1));
}
// Setup all Throttle1 curves for all types of airframes
mixer->initCurve(curveValues);
} }
void ConfigccpmWidget::UpdateCurveWidgets() void ConfigccpmWidget::UpdateCurveWidgets()

View File

@ -147,7 +147,17 @@ QList<double> MixerCurveWidget::getCurve() {
return list; return list;
} }
/**
Sets a linear graph
*/
void MixerCurveWidget::initLinearCurve(quint32 numPoints, double maxValue)
{
QList<double> points;
for (double i=0; i<numPoints;i++) {
points.append(maxValue*(i/(numPoints-1)));
}
initCurve(points);
}
/** /**
Setd the current curve settings Setd the current curve settings
*/ */

View File

@ -45,6 +45,7 @@ public:
void itemMoved(double itemValue); // Callback when a point is moved, to be updated void itemMoved(double itemValue); // Callback when a point is moved, to be updated
void initCurve (QList<double> points); void initCurve (QList<double> points);
QList<double> getCurve(); QList<double> getCurve();
void initLinearCurve(quint32 numPoints, double maxValue);
void setCurve(QList<double>); void setCurve(QList<double>);
void setMin(double value); void setMin(double value);
void setMax(double value); void setMax(double value);

View File

@ -5,7 +5,7 @@
<field name="FeedForward" units="" type="float" elements="1" defaultvalue="0"/> <field name="FeedForward" units="" type="float" elements="1" defaultvalue="0"/>
<field name="AccelTime" units="ms" type="float" elements="1" defaultvalue="0"/> <field name="AccelTime" units="ms" type="float" elements="1" defaultvalue="0"/>
<field name="DecelTime" units="ms" type="float" elements="1" defaultvalue="0"/> <field name="DecelTime" units="ms" type="float" elements="1" defaultvalue="0"/>
<field name="ThrottleCurve1" units="percent" type="float" elements="5" elementnames="0,25,50,75,100" defaultvalue="0,0.25,0.5,0.75,1"/> <field name="ThrottleCurve1" units="percent" type="float" elements="5" elementnames="0,25,50,75,100" defaultvalue="0,0,0,0,0"/>
<field name="Curve2Source" units="" type="enum" elements="1" options="Throttle,Roll,Pitch,Yaw,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5" defaultvalue="Throttle"/> <field name="Curve2Source" units="" type="enum" elements="1" options="Throttle,Roll,Pitch,Yaw,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5" defaultvalue="Throttle"/>
<field name="ThrottleCurve2" units="percent" type="float" elements="5" elementnames="0,25,50,75,100" defaultvalue="0,0.25,0.5,0.75,1"/> <field name="ThrottleCurve2" units="percent" type="float" elements="5" elementnames="0,25,50,75,100" defaultvalue="0,0.25,0.5,0.75,1"/>
<field name="Mixer1Type" units="" type="enum" elements="1" options="Disabled,Motor,Servo,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5" defaultvalue="Disabled"/> <field name="Mixer1Type" units="" type="enum" elements="1" options="Disabled,Motor,Servo,Accessory0,Accessory1,Accessory2,Accessory3,Accessory4,Accessory5" defaultvalue="Disabled"/>