diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index be5811b24d977a2c8614b4d443a38d88482f6ed0..47a864da2fb05c8ec4d1056bb3b647e9811abe21 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -260,7 +260,8 @@ FORMS += src/ui/MainWindow.ui \ src/ui/configuration/ApmPlaneLevel.ui \ src/ui/configuration/ParamWidget.ui \ src/ui/configuration/ArduPlanePidConfig.ui \ - src/ui/configuration/AdvParameterList.ui + src/ui/configuration/AdvParameterList.ui \ + src/ui/configuration/ArduRoverPidConfig.ui INCLUDEPATH += src \ src/ui \ src/ui/linechart \ @@ -445,7 +446,8 @@ HEADERS += src/MG.h \ src/ui/configuration/ApmPlaneLevel.h \ src/ui/configuration/ParamWidget.h \ src/ui/configuration/ArduPlanePidConfig.h \ - src/ui/configuration/AdvParameterList.h + src/ui/configuration/AdvParameterList.h \ + src/ui/configuration/ArduRoverPidConfig.h # Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h @@ -648,7 +650,8 @@ SOURCES += src/main.cc \ src/ui/configuration/ApmPlaneLevel.cc \ src/ui/configuration/ParamWidget.cc \ src/ui/configuration/ArduPlanePidConfig.cc \ - src/ui/configuration/AdvParameterList.cc + src/ui/configuration/AdvParameterList.cc \ + src/ui/configuration/ArduRoverPidConfig.cc # Enable Google Earth only on Mac OS and Windows with Visual Studio compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc diff --git a/src/ui/configuration/ApmSoftwareConfig.cc b/src/ui/configuration/ApmSoftwareConfig.cc index c8e1261b69a4af7d1d9c194dd9b6f8b3aef94ca0..fa36a6a1d21593a0e834903d412a94fa2173c6ce 100644 --- a/src/ui/configuration/ApmSoftwareConfig.cc +++ b/src/ui/configuration/ApmSoftwareConfig.cc @@ -16,6 +16,8 @@ ApmSoftwareConfig::ApmSoftwareConfig(QWidget *parent) : QWidget(parent) ui.advancedParamButton->setVisible(false); ui.advParamListButton->setVisible(false); ui.arduCopterPidButton->setVisible(false); + ui.arduRoverPidButton->setVisible(false); + ui.arduPlanePidButton->setVisible(false); /*basicPidConfig = new BasicPidConfig(this); ui.stackedWidget->addWidget(basicPidConfig); @@ -57,12 +59,18 @@ ApmSoftwareConfig::ApmSoftwareConfig(QWidget *parent) : QWidget(parent) buttonToConfigWidgetMap[ui.arduCopterPidButton] = arduCopterPidConfig; connect(ui.arduCopterPidButton,SIGNAL(clicked()),this,SLOT(activateStackedWidget())); - arduPlanePidConfig = new ArduPlanePidConfig(this); ui.stackedWidget->addWidget(arduPlanePidConfig); buttonToConfigWidgetMap[ui.arduPlanePidButton] = arduPlanePidConfig; connect(ui.arduPlanePidButton,SIGNAL(clicked()),this,SLOT(activateStackedWidget())); + arduRoverPidConfig = new ArduRoverPidConfig(this); + ui.stackedWidget->addWidget(arduRoverPidConfig); + buttonToConfigWidgetMap[ui.arduRoverPidButton] = arduRoverPidConfig; + connect(ui.arduRoverPidButton,SIGNAL(clicked()),this,SLOT(activateStackedWidget())); + + + connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(activeUASSet(UASInterface*))); @@ -101,11 +109,19 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) { ui.arduPlanePidButton->setVisible(true); ui.arduCopterPidButton->setVisible(false); + ui.arduRoverPidButton->setVisible(false); } else if (uas->getSystemType() == MAV_TYPE_QUADROTOR) { ui.arduCopterPidButton->setVisible(true); ui.arduPlanePidButton->setVisible(false); + ui.arduRoverPidButton->setVisible(false); + } + else if (uas->getSystemType() == MAV_TYPE_GROUND_ROVER) + { + ui.arduRoverPidButton->setVisible(true); + ui.arduCopterPidButton->setVisible(false); + ui.arduPlanePidButton->setVisible(false); } diff --git a/src/ui/configuration/ApmSoftwareConfig.h b/src/ui/configuration/ApmSoftwareConfig.h index 700a8206736e6252ae65b614dc7a8e0630b7efb1..7b0b5138e36705c361f3dc81c3098a5b36f3d96f 100644 --- a/src/ui/configuration/ApmSoftwareConfig.h +++ b/src/ui/configuration/ApmSoftwareConfig.h @@ -11,6 +11,7 @@ #include "AdvancedParamConfig.h" #include "ArduCopterPidConfig.h" #include "ArduPlanePidConfig.h" +#include "ArduRoverPidConfig.h" #include "AdvParameterList.h" #include "UASInterface.h" #include "UASManager.h" @@ -35,6 +36,7 @@ private: AdvancedParamConfig *advancedParamConfig; ArduCopterPidConfig *arduCopterPidConfig; ArduPlanePidConfig *arduPlanePidConfig; + ArduRoverPidConfig *arduRoverPidConfig; AdvParameterList *advParameterList; QMap buttonToConfigWidgetMap; }; diff --git a/src/ui/configuration/ApmSoftwareConfig.ui b/src/ui/configuration/ApmSoftwareConfig.ui index b25f61577e07416ce25c05edccb714e3adbd108b..aa039930b26d0d5b75d4f2c19c84752e2e3e8ae8 100644 --- a/src/ui/configuration/ApmSoftwareConfig.ui +++ b/src/ui/configuration/ApmSoftwareConfig.ui @@ -200,6 +200,19 @@ + + + + + 0 + 35 + + + + ArduRover Pids + + + diff --git a/src/ui/configuration/ArduRoverPidConfig.cc b/src/ui/configuration/ArduRoverPidConfig.cc new file mode 100644 index 0000000000000000000000000000000000000000..725cbb956876798a301675a94b4eca5634c3bea5 --- /dev/null +++ b/src/ui/configuration/ArduRoverPidConfig.cc @@ -0,0 +1,75 @@ +#include "ArduRoverPidConfig.h" + + +ArduRoverPidConfig::ArduRoverPidConfig(QWidget *parent) : AP2ConfigWidget(parent) +{ + ui.setupUi(this); + nameToBoxMap["STEER2SRV_P"] = ui.steer2ServoPSpinBox; + nameToBoxMap["STEER2SRV_I"] = ui.steer2ServoISpinBox; + nameToBoxMap["STEER2SRV_D"] = ui.steer2ServoDSpinBox; + nameToBoxMap["STEER2SRV_IMAX"] = ui.steer2ServoIMAXSpinBox; + + nameToBoxMap["XTRK_ANGLE_CD"] = ui.xtrackEntryAngleSpinBox; + nameToBoxMap["XTRK_GAIN_SC"] = ui.xtrackGainSpinBox; + + nameToBoxMap["CRUISE_THROTTLE"] = ui.throttleCruiseSpinBox; + nameToBoxMap["THR_MIN"] = ui.throttleMinSpinBox; + nameToBoxMap["THR_MAX"] = ui.throttleMaxSpinBox; + nameToBoxMap["FS_THR_VALUE"] = ui.throttleFSSpinBox; + + nameToBoxMap["HDNG2STEER_P"] = ui.heading2SteerPSpinBox; + nameToBoxMap["HDNG2STEER_I"] = ui.heading2SteerISpinBox; + nameToBoxMap["HDNG2STEER_D"] = ui.heading2SteerDSpinBox; + nameToBoxMap["HDNG2STEER_IMAX"] = ui.heading2SteerIMAXSpinBox; + + nameToBoxMap["SPEED2THR_P"] = ui.speed2ThrottlePSpinBox; + nameToBoxMap["SPEED2THR_I"] = ui.speed2ThrottleISpinBox; + nameToBoxMap["SPEED2THR_D"] = ui.speed2ThrottleDSpinBox; + nameToBoxMap["SPEED2THR_IMAX"] = ui.speed2ThrottleIMAXSpinBox; + + nameToBoxMap["CRUISE_SPEED"] = ui.roverCruiseSpinBox; + nameToBoxMap["SPEED_TURN_GAIN"] = ui.roverTurnSpeedSpinBox; + nameToBoxMap["SPEED_TURN_DIST"] = ui.roverTurnDistSpinBox; + nameToBoxMap["WP_RADIUS"] = ui.roverWPRadiusSpinBox; + + nameToBoxMap["SONAR_TRIGGER_CM"] = ui.sonarTriggerSpinBox; + nameToBoxMap["SONAR_TURN_ANGLE"] = ui.sonarTurnAngleSpinBox; + nameToBoxMap["SONAR_TURN_TIME"] = ui.sonarTurnTimeSpinBox; + nameToBoxMap["SONAR_DEBOUNCE"] = ui.sonaeDebounceSpinBox; + +} + +ArduRoverPidConfig::~ArduRoverPidConfig() +{ +} +void ArduRoverPidConfig::writeButtonClicked() +{ + if (!m_uas) + { + return; + } + for (QMap::const_iterator i=nameToBoxMap.constBegin();i!=nameToBoxMap.constEnd();i++) + { + m_uas->getParamManager()->setParameter(1,i.key(),i.value()->value()); + } +} + +void ArduRoverPidConfig::refreshButtonClicked() +{ + if (!m_uas) + { + return; + } + for (QMap::const_iterator i=nameToBoxMap.constBegin();i!=nameToBoxMap.constEnd();i++) + { + m_uas->getParamManager()->requestParameterUpdate(1,i.key()); + } +} + +void ArduRoverPidConfig::parameterChanged(int uas, int component, QString parameterName, QVariant value) +{ + if (nameToBoxMap.contains(parameterName)) + { + nameToBoxMap[parameterName]->setValue(value.toFloat()); + } +} diff --git a/src/ui/configuration/ArduRoverPidConfig.h b/src/ui/configuration/ArduRoverPidConfig.h new file mode 100644 index 0000000000000000000000000000000000000000..214658bdccf2f45dc8e450a2da29e81f60876e49 --- /dev/null +++ b/src/ui/configuration/ArduRoverPidConfig.h @@ -0,0 +1,23 @@ +#ifndef ARDUROVERPIDCONFIG_H +#define ARDUROVERPIDCONFIG_H + +#include +#include "ui_ArduRoverPidConfig.h" +#include "AP2ConfigWidget.h" +class ArduRoverPidConfig : public AP2ConfigWidget +{ + Q_OBJECT + +public: + explicit ArduRoverPidConfig(QWidget *parent = 0); + ~ArduRoverPidConfig(); +private slots: + void writeButtonClicked(); + void refreshButtonClicked(); + void parameterChanged(int uas, int component, QString parameterName, QVariant value); +private: + QMap nameToBoxMap; + Ui::ArduRoverPidConfig ui; +}; + +#endif // ARDUROVERPIDCONFIG_H diff --git a/src/ui/configuration/ArduRoverPidConfig.ui b/src/ui/configuration/ArduRoverPidConfig.ui new file mode 100644 index 0000000000000000000000000000000000000000..47831616e0adbd2578e60934c450c831c1ea7ce3 --- /dev/null +++ b/src/ui/configuration/ArduRoverPidConfig.ui @@ -0,0 +1,732 @@ + + + ArduRoverPidConfig + + + + 0 + 0 + 626 + 607 + + + + Form + + + + + 10 + 10 + 151 + 21 + + + + <h2>ArduRover Pids</h2> + + + + + + 60 + 90 + 504 + 419 + + + + + + + Steer 2 Servo + + + + + + + + + + P + + + + + + + I + + + + + + + D + + + + + + + INT_MAX + + + + + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + + + + + + Speed 2 Throttle + + + + + + + + + + P + + + + + + + I + + + + + + + D + + + + + + + INT_MAX + + + + + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + + + + + + Heading 2 Steer + + + + + + + + + + P + + + + + + + I + + + + + + + D + + + + + + + INT_MAX + + + + + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + + + + + + Throttle 0-100% + + + + + + + + + + Cruise + + + + + + + Min + + + + + + + Max + + + + + + + FS Value + + + + + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + + + + + + Xtrack Pids + + + + + + + + + + Gain (cm) + + + + + + + Entry Angle + + + + + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Sonar + + + + + + + + + + Trigger cm + + + + + + + Turn Angle + + + + + + + Turn Time + + + + + + + Debounce + + + + + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + + + + + + Rover + + + + + + + + + + Cruise Speed + + + + + + + Turn Speed + + + + + + + Turn Dist + + + + + + + WP Radius + + + + + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + 3 + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + -10000.000000000000000 + + + 10000.000000000000000 + + + + + + + + + + + + + + + + 300 + 540 + 91 + 23 + + + + Refresh Params + + + + + + 200 + 540 + 75 + 23 + + + + Write Params + + + + + +