Skip to content

Commit cdb610f

Browse files
committed
autotune: add selection of airspeed scale type
1 parent d2655bd commit cdb610f

1 file changed

Lines changed: 37 additions & 4 deletions

File tree

autotune/autotune.py

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"""
3838

3939
import sys
40-
from PyQt5.QtWidgets import QDialog, QApplication, QLabel, QRadioButton, QSlider, QPushButton, QVBoxLayout, QHBoxLayout, QFormLayout, QFileDialog, QLineEdit, QSpinBox, QDoubleSpinBox, QMessageBox, QCheckBox, QTableWidget, QTableWidgetItem, QHeaderView
40+
from PyQt5.QtWidgets import QDialog, QApplication, QLabel, QRadioButton, QSlider, QPushButton, QVBoxLayout, QHBoxLayout, QFormLayout, QFileDialog, QLineEdit, QSpinBox, QDoubleSpinBox, QMessageBox, QCheckBox, QTableWidget, QTableWidgetItem, QHeaderView, QGroupBox, QComboBox
4141
from PyQt5.QtCore import Qt
4242

4343
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
@@ -116,17 +116,34 @@ def __init__(self, parent=None):
116116
self.line_edit_delays.setRange(0, 1000)
117117
self.line_edit_delays.valueChanged.connect(self.onDelaysChanged)
118118
id_params_group.addRow(QLabel("Delays"), self.line_edit_delays)
119+
input_scale_group = QGroupBox('Input scaling')
120+
input_scale_group.setToolTip("Scale the input to identify a model at trim airspeed (requires true airspeed data)")
121+
122+
input_scale_form = QFormLayout()
123+
self.input_scale_combo = QComboBox()
124+
self.input_scale_combo.setEditable(False)
125+
self.input_scale_choices = ["True airspeed^2", "True airspeed", "None"]
126+
self.input_scale_combo.addItems(self.input_scale_choices)
127+
self.input_scale_combo.setEnabled(False)
128+
self.input_scale_combo.currentIndexChanged.connect(self.selectInputScale)
129+
input_scale_form.addRow(self.input_scale_combo)
130+
119131
self.line_edit_trim = QDoubleSpinBox()
120132
self.trim_airspeed = 20.0
121133
self.line_edit_trim.setValue(self.trim_airspeed)
122134
self.line_edit_trim.setRange(0.0, 100.0)
123135
self.line_edit_trim.textChanged.connect(self.onTrimChanged)
124136
self.line_edit_trim.setEnabled(False)
125-
id_params_group.addRow(QLabel("Trim airspeed"), self.line_edit_trim)
137+
input_scale_form.addRow(QLabel("Trim airspeed"), self.line_edit_trim)
138+
input_scale_group.setLayout(input_scale_form)
139+
id_params_group.addRow(input_scale_group)
140+
126141
self.btn_run_sys_id = QPushButton("Run identification")
127142
self.btn_run_sys_id.clicked.connect(self.onSysIdClicked)
128143
self.btn_run_sys_id.setEnabled(False)
144+
129145
id_params_group.addRow(self.btn_run_sys_id)
146+
130147
left_menu.addLayout(id_params_group)
131148

132149
layout_tf = self.createTfLayout()
@@ -212,6 +229,10 @@ def updateCoeffTable(self):
212229
self.t_coeffs.setFixedHeight(self.t_coeffs.verticalHeader().length()
213230
+ self.t_coeffs.horizontalHeader().height() + 2)
214231

232+
def selectInputScale(self, index):
233+
self.btn_run_sys_id.setEnabled(True)
234+
self.plotInputOutput()
235+
215236
def onModelChanged(self):
216237
self.btn_update_model.setEnabled(True)
217238

@@ -655,9 +676,21 @@ def plotBode(self, w, mag, w_cl, mag_cl):
655676

656677
def plotInputOutput(self, redraw=False):
657678
if len(self.true_airspeed) == len(self.input):
658-
scale = np.array(self.true_airspeed) / self.trim_airspeed
659-
self.u = self.input * scale**2
679+
scale = 1
680+
681+
scale_type = self.input_scale_choices[self.input_scale_combo.currentIndex()]
682+
if scale_type == "True airspeed":
683+
scale = np.array(self.true_airspeed) / self.trim_airspeed
684+
685+
elif scale_type == "True airspeed^2":
686+
scale = (np.array(self.true_airspeed) / self.trim_airspeed)**2
687+
688+
self.u = self.input * scale
689+
self.input_scale_combo.setEnabled(True)
660690
self.line_edit_trim.setEnabled(True)
691+
else:
692+
self.input_scale_combo.setEnabled(False)
693+
self.line_edit_trim.setEnabled(False)
661694

662695
if self.model_ref is None or redraw:
663696
# First time we have no plot reference, so do a normal plot.

0 commit comments

Comments
 (0)