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:
commit
0f2e4730b4
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -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);
|
||||||
|
@ -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"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user