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

OP-39 Added some basic code to reset the mixers. Started to implement mixer configuration for all multirotors.

This commit is contained in:
Fredrik Arvidsson 2012-08-16 00:27:40 +02:00
parent 2b541219bf
commit 16d0252d12
2 changed files with 68 additions and 21 deletions

View File

@ -45,7 +45,6 @@
#include "actuatorsettings.h" #include "actuatorsettings.h"
#include "attitudesettings.h" #include "attitudesettings.h"
SetupWizard::SetupWizard(QWidget *parent) : QWizard(parent), SetupWizard::SetupWizard(QWidget *parent) : QWizard(parent),
m_controllerSelectionMode(CONTROLLER_SELECTION_UNKNOWN), m_controllerType(CONTROLLER_UNKNOWN), m_controllerSelectionMode(CONTROLLER_SELECTION_UNKNOWN), m_controllerType(CONTROLLER_UNKNOWN),
m_vehicleType(VEHICLE_UNKNOWN), m_inputType(INPUT_UNKNOWN), m_escType(ESC_UNKNOWN), m_vehicleType(VEHICLE_UNKNOWN), m_inputType(INPUT_UNKNOWN), m_escType(ESC_UNKNOWN),
@ -222,29 +221,29 @@ UAVObjectManager* SetupWizard::getUAVObjectManager()
void SetupWizard::applyHardwareConfiguration(UAVObjectManager* uavoMgr) void SetupWizard::applyHardwareConfiguration(UAVObjectManager* uavoMgr)
{ {
HwSettings* hwSettings = HwSettings::GetInstance(uavoMgr); HwSettings* hwSettings = HwSettings::GetInstance(uavoMgr);
HwSettings::DataFields data = hwSettings->getData();
switch(getControllerType()) switch(getControllerType())
{ {
case CONTROLLER_CC: case CONTROLLER_CC:
case CONTROLLER_CC3D: case CONTROLLER_CC3D:
// Reset all ports // Reset all ports
hwSettings->setCC_RcvrPort(HwSettings::CC_RCVRPORT_DISABLED); data.CC_RcvrPort = HwSettings::CC_RCVRPORT_DISABLED;
hwSettings->setCC_FlexiPort(HwSettings::CC_FLEXIPORT_DISABLED); data.CC_FlexiPort = HwSettings::CC_FLEXIPORT_DISABLED;
hwSettings->setCC_MainPort(HwSettings::CC_MAINPORT_DISABLED); data.CC_MainPort = HwSettings::CC_MAINPORT_DISABLED;
switch(getInputType()) switch(getInputType())
{ {
case INPUT_PWM: case INPUT_PWM:
hwSettings->setCC_RcvrPort(HwSettings::CC_RCVRPORT_PWM); data.CC_RcvrPort = HwSettings::CC_RCVRPORT_PWM;
break; break;
case INPUT_PPM: case INPUT_PPM:
hwSettings->setCC_RcvrPort(HwSettings::CC_RCVRPORT_PPM); data.CC_RcvrPort = HwSettings::CC_RCVRPORT_PPM;
break; break;
case INPUT_SBUS: case INPUT_SBUS:
hwSettings->setCC_MainPort(HwSettings::CC_MAINPORT_SBUS); data.CC_MainPort = HwSettings::CC_MAINPORT_SBUS;
break; break;
case INPUT_DSM: case INPUT_DSM:
// TODO: Handle all of the DSM types ?? Which is most common? // TODO: Handle all of the DSM types ?? Which is most common?
hwSettings->setCC_MainPort(HwSettings::CC_MAINPORT_DSM2); data.CC_MainPort = HwSettings::CC_MAINPORT_DSM2;
break; break;
} }
break; break;
@ -252,6 +251,7 @@ void SetupWizard::applyHardwareConfiguration(UAVObjectManager* uavoMgr)
// TODO: Implement Revo settings // TODO: Implement Revo settings
break; break;
} }
hwSettings->setData(data);
} }
void SetupWizard::applyVehicleConfiguration(UAVObjectManager *uavoMgr) void SetupWizard::applyVehicleConfiguration(UAVObjectManager *uavoMgr)
@ -261,6 +261,8 @@ void SetupWizard::applyVehicleConfiguration(UAVObjectManager *uavoMgr)
{ {
case VEHICLE_MULTI: case VEHICLE_MULTI:
{ {
resetVehicleConfig(uavoMgr);
switch(getVehicleSubType()) switch(getVehicleSubType())
{ {
case SetupWizard::MULTI_ROTOR_TRI_Y: case SetupWizard::MULTI_ROTOR_TRI_Y:
@ -299,10 +301,12 @@ void SetupWizard::applyOutputConfiguration(UAVObjectManager *uavoMgr)
{ {
case VEHICLE_MULTI: case VEHICLE_MULTI:
{ {
actSettings->setChannelUpdateFreq(0, DEFAULT_ESC_FREQUENCE); ActuatorSettings::DataFields data = actSettings->getData();
actSettings->setChannelUpdateFreq(1, DEFAULT_ESC_FREQUENCE);
actSettings->setChannelUpdateFreq(2, DEFAULT_ESC_FREQUENCE); data.ChannelUpdateFreq[0] = DEFAULT_ESC_FREQUENCE;
actSettings->setChannelUpdateFreq(3, DEFAULT_ESC_FREQUENCE); data.ChannelUpdateFreq[1] = DEFAULT_ESC_FREQUENCE;
data.ChannelUpdateFreq[3] = DEFAULT_ESC_FREQUENCE;
data.ChannelUpdateFreq[4] = DEFAULT_ESC_FREQUENCE;
qint16 updateFrequence = DEFAULT_ESC_FREQUENCE; qint16 updateFrequence = DEFAULT_ESC_FREQUENCE;
switch(getESCType()) switch(getESCType())
@ -318,12 +322,12 @@ void SetupWizard::applyOutputConfiguration(UAVObjectManager *uavoMgr)
switch(getVehicleSubType()) switch(getVehicleSubType())
{ {
case SetupWizard::MULTI_ROTOR_TRI_Y: case SetupWizard::MULTI_ROTOR_TRI_Y:
actSettings->setChannelUpdateFreq(0, updateFrequence); data.ChannelUpdateFreq[0] = updateFrequence;
break; break;
case SetupWizard::MULTI_ROTOR_QUAD_X: case SetupWizard::MULTI_ROTOR_QUAD_X:
case SetupWizard::MULTI_ROTOR_QUAD_PLUS: case SetupWizard::MULTI_ROTOR_QUAD_PLUS:
actSettings->setChannelUpdateFreq(0, updateFrequence); data.ChannelUpdateFreq[0] = updateFrequence;
actSettings->setChannelUpdateFreq(1, updateFrequence); data.ChannelUpdateFreq[1] = updateFrequence;
break; break;
case SetupWizard::MULTI_ROTOR_HEXA: case SetupWizard::MULTI_ROTOR_HEXA:
case SetupWizard::MULTI_ROTOR_HEXA_COAX_Y: case SetupWizard::MULTI_ROTOR_HEXA_COAX_Y:
@ -332,12 +336,13 @@ void SetupWizard::applyOutputConfiguration(UAVObjectManager *uavoMgr)
case SetupWizard::MULTI_ROTOR_OCTO_COAX_X: case SetupWizard::MULTI_ROTOR_OCTO_COAX_X:
case SetupWizard::MULTI_ROTOR_OCTO_COAX_PLUS: case SetupWizard::MULTI_ROTOR_OCTO_COAX_PLUS:
case SetupWizard::MULTI_ROTOR_OCTO_V: case SetupWizard::MULTI_ROTOR_OCTO_V:
actSettings->setChannelUpdateFreq(0, updateFrequence); data.ChannelUpdateFreq[0] = updateFrequence;
actSettings->setChannelUpdateFreq(1, updateFrequence); data.ChannelUpdateFreq[1] = updateFrequence;
actSettings->setChannelUpdateFreq(2, updateFrequence); data.ChannelUpdateFreq[3] = updateFrequence;
actSettings->setChannelUpdateFreq(3, updateFrequence); data.ChannelUpdateFreq[4] = updateFrequence;
break; break;
} }
actSettings->setData(data);
break; break;
} }
case VEHICLE_FIXEDWING: case VEHICLE_FIXEDWING:
@ -364,8 +369,46 @@ void SetupWizard::applyLevellingConfiguration(UAVObjectManager *uavoMgr)
} }
} }
void SetupWizard::resetVehicleConfig(UAVObjectManager *uavoMgr)
{
// Reset all mixers
MixerSettings* mSettings = MixerSettings::GetInstance(uavoMgr);
QString mixerTypePattern = "Mixer%1Type";
QString mixerVectorPattern = "Mixer%1Vector";
for(int i = 1; i <= 10; i++) {
UAVObjectField *field = mSettings->getField(mixerTypePattern.arg(i));
Q_ASSERT(field);
field->setValue(field->getOptions().at(0));
field = mSettings->getField(mixerVectorPattern.arg(i));
Q_ASSERT(field);
for(int i = 0; i < field->getNumElements(); i++){
field->setValue(0, i);
}
}
mSettings->setData(mSettings->getData());
}
void SetupWizard::setupTriCopter(UAVObjectManager *uavoMgr) void SetupWizard::setupTriCopter(UAVObjectManager *uavoMgr)
{ {
// Typical vehicle setup
// 1. Setup and apply mixer
// 2. Setup GUI data
double mixer [8][3] = {
{ 0.5, 1, 0},
{ 0.5, -1, 0},
{ -1, 0, 0},
{ 0, 0, 0},
{ 0, 0, 0},
{ 0, 0, 0},
{ 0, 0, 0},
{ 0, 0, 0}
};
} }

View File

@ -33,6 +33,7 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/connectionmanager.h> #include <coreplugin/connectionmanager.h>
#include "uavobjectmanager.h" #include "uavobjectmanager.h"
#include "mixersettings.h"
class SetupWizard : public QWizard class SetupWizard : public QWizard
@ -90,7 +91,7 @@ public slots:
private: private:
static const qint16 DEFAULT_ESC_FREQUENCE = 50; static const qint16 DEFAULT_ESC_FREQUENCE = 50;
static const qint16 RAPID_ESC_FREQUENCE = 50; static const qint16 RAPID_ESC_FREQUENCE = 400;
enum {PAGE_START, PAGE_CONTROLLER, PAGE_VEHICLES, PAGE_MULTI, PAGE_FIXEDWING, enum {PAGE_START, PAGE_CONTROLLER, PAGE_VEHICLES, PAGE_MULTI, PAGE_FIXEDWING,
PAGE_HELI, PAGE_SURFACE, PAGE_INPUT, PAGE_OUTPUT, PAGE_LEVELLING, PAGE_HELI, PAGE_SURFACE, PAGE_INPUT, PAGE_OUTPUT, PAGE_LEVELLING,
@ -116,6 +117,9 @@ private:
void applyOutputConfiguration(UAVObjectManager *uavoMgr); void applyOutputConfiguration(UAVObjectManager *uavoMgr);
void applyLevellingConfiguration(UAVObjectManager *uavoMgr); void applyLevellingConfiguration(UAVObjectManager *uavoMgr);
void resetVehicleConfig(UAVObjectManager *uavoMgr);
void resetMixerVectors(MixerSettings::DataFields data, qint8 channelIndex);
void setupTriCopter(UAVObjectManager *uavoMgr); void setupTriCopter(UAVObjectManager *uavoMgr);
void setupQuadCopter(UAVObjectManager *uavoMgr); void setupQuadCopter(UAVObjectManager *uavoMgr);
void setupHexaCopter(UAVObjectManager *uavoMgr); void setupHexaCopter(UAVObjectManager *uavoMgr);