1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-23 00:05:22 +03:00

Merge pull request #1584 from IvoFPV/piduiov2

Improve PID Tuning tab style and layout
This commit is contained in:
Michael Keller 2019-08-25 13:44:10 +12:00 committed by GitHub
commit e3e79f6e81
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 572 additions and 583 deletions

View file

@ -125,21 +125,15 @@ TABS.pid_tuning.initialize = function (callback) {
$('.pid_filter input[name="dTermNotchCutoff"]').val(FILTER_CONFIG.dterm_notch_cutoff);
var dtermSetpointTransitionNumberElement = $('input[name="dtermSetpointTransition-number"]');
var dtermSetpointTransitionRangeElement = $('input[name="dtermSetpointTransition-range"]');
if (semver.gte(CONFIG.apiVersion, "1.38.0")) {
dtermSetpointTransitionNumberElement.attr('min', 0.00);
dtermSetpointTransitionRangeElement.attr('min', 0.00);
} else {
dtermSetpointTransitionNumberElement.attr('min', 0.01);
dtermSetpointTransitionRangeElement.attr('min', 0.01);
}
dtermSetpointTransitionNumberElement.val(ADVANCED_TUNING.dtermSetpointTransition / 100);
dtermSetpointTransitionRangeElement.val(ADVANCED_TUNING.dtermSetpointTransition / 100);
$('input[name="dtermSetpoint-number"]').val(ADVANCED_TUNING.dtermSetpointWeight / 100);
$('input[name="dtermSetpoint-range"]').val(ADVANCED_TUNING.dtermSetpointWeight / 100)
.trigger('input'); // trigger adjustRangeElement()
} else {
$('.pid_filter .newFilter').hide();
}
@ -162,6 +156,34 @@ TABS.pid_tuning.initialize = function (callback) {
$('.pid_filter select[name="dtermLowpassType"]').val(FILTER_CONFIG.dterm_lowpass_type);
$('.antigravity input[name="itermThrottleThreshold"]').val(ADVANCED_TUNING.itermThrottleThreshold);
$('.antigravity input[name="itermAcceleratorGain"]').val(ADVANCED_TUNING.itermAcceleratorGain / 1000);
if (FEATURE_CONFIG.features.isEnabled('ANTI_GRAVITY')) {
$('.antigravity').show();
} else {
$('.antigravity').hide();
}
var antiGravitySwitch = $('#antiGravitySwitch');
antiGravitySwitch.prop('checked', ADVANCED_TUNING.itermAcceleratorGain !== 1000);
antiGravitySwitch.change(function() {
var checked = $(this).is(':checked');
if (checked) {
$('.antigravity input[name="itermAcceleratorGain"]').val(Math.max(ADVANCED_TUNING.itermAcceleratorGain / 1000, 1.1));
$('.antigravity .suboption').show();
if (ADVANCED_TUNING.antiGravityMode == 0) {
$('.antigravity .antiGravityThres').hide();
}
if (semver.gte(CONFIG.apiVersion, "1.40.0")) {
$('.antigravity .antiGravityMode').show();
} else {
$('.antigravity .antiGravityMode').hide();
}
} else {
$('.antigravity select[id="antiGravityMode"]').val(0);
$('.antigravity input[name="itermAcceleratorGain"]').val(1);
$('.antigravity .suboption').hide();
}
});
antiGravitySwitch.change();
} else {
$('.dtermLowpassType').hide();
$('.antigravity').hide();
@ -182,11 +204,13 @@ TABS.pid_tuning.initialize = function (callback) {
// We load it again because the limits are now bigger than in 1.16.0
$('.pid_filter input[name="gyroLowpassFrequency"]').attr("max","16000");
$('.pid_filter input[name="gyroLowpassFrequency"]').val(FILTER_CONFIG.gyro_lowpass_hz);
//removes 5th column which is Feedforward
$('#pid_main .pid_titlebar2 th').attr('colspan', 4);
} else {
$('.gyroLowpass2').hide();
$('.gyroLowpass2Type').hide();
$('.dtermLowpass2').hide();
$('#pid_main .pid_titlebar2 th').attr('colspan', 4);
}
if (semver.gte(CONFIG.apiVersion, "1.40.0")) {
@ -210,6 +234,11 @@ TABS.pid_tuning.initialize = function (callback) {
if (checked) {
$('.itermrelax .suboption').show();
if (semver.gte(CONFIG.apiVersion, "1.42.0")) {
$('.itermRelaxCutoff').show();
} else {
$('.itermRelaxCutoff').hide();
}
} else {
$('.itermrelax .suboption').hide();
}
@ -218,41 +247,14 @@ TABS.pid_tuning.initialize = function (callback) {
// Absolute Control
var absoluteControlGainNumberElement = $('input[name="absoluteControlGain-number"]');
var absoluteControlGainRangeElement = $('input[name="absoluteControlGain-range"]');
//Use 'input' event for coupled controls to allow synchronized update
absoluteControlGainNumberElement.on('input', function () {
absoluteControlGainRangeElement.val($(this).val());
});
absoluteControlGainRangeElement.on('input', function () {
absoluteControlGainNumberElement.val($(this).val());
});
absoluteControlGainNumberElement.val(ADVANCED_TUNING.absoluteControlGain).trigger('input');
// Throttle Boost
var throttleBoostNumberElement = $('input[name="throttleBoost-number"]');
var throttleBoostRangeElement = $('input[name="throttleBoost-range"]');
//Use 'input' event for coupled controls to allow synchronized update
throttleBoostNumberElement.on('input', function () {
throttleBoostRangeElement.val($(this).val());
});
throttleBoostRangeElement.on('input', function () {
throttleBoostNumberElement.val($(this).val());
});
throttleBoostNumberElement.val(ADVANCED_TUNING.throttleBoost).trigger('input');
// Acro Trainer
var acroTrainerAngleLimitNumberElement = $('input[name="acroTrainerAngleLimit-number"]');
var acroTrainerAngleLimitRangeElement = $('input[name="acroTrainerAngleLimit-range"]');
//Use 'input' event for coupled controls to allow synchronized update
acroTrainerAngleLimitNumberElement.on('input', function () {
acroTrainerAngleLimitRangeElement.val($(this).val());
});
acroTrainerAngleLimitRangeElement.on('input', function () {
acroTrainerAngleLimitNumberElement.val($(this).val());
});
acroTrainerAngleLimitNumberElement.val(ADVANCED_TUNING.acroTrainerAngleLimit).trigger('input');
// Yaw D
@ -262,20 +264,10 @@ TABS.pid_tuning.initialize = function (callback) {
$('.pid_tuning .ROLL input[name="f"]').val(ADVANCED_TUNING.feedforwardRoll);
$('.pid_tuning .PITCH input[name="f"]').val(ADVANCED_TUNING.feedforwardPitch);
$('.pid_tuning .YAW input[name="f"]').val(ADVANCED_TUNING.feedforwardYaw);
$('#pid_main .pid_titlebar2 th').attr('colspan', 5);
var feedforwardTransitionNumberElement = $('input[name="feedforwardTransition-number"]');
var feedforwardTransitionRangeElement = $('input[name="feedforwardTransition-range"]');
feedforwardTransitionNumberElement.val(ADVANCED_TUNING.feedforwardTransition / 100);
feedforwardTransitionRangeElement.val(ADVANCED_TUNING.feedforwardTransition / 100);
//Use 'input' event for coupled controls to allow synchronized update
feedforwardTransitionNumberElement.on('input', function () {
feedforwardTransitionRangeElement.val($(this).val());
});
feedforwardTransitionRangeElement.on('input', function () {
feedforwardTransitionNumberElement.val($(this).val());
});
$('.helpicon[i18n_title="pidTuningPidTuningTip"]').hide();
@ -284,13 +276,11 @@ TABS.pid_tuning.initialize = function (callback) {
antiGravityModeSelect.change(function () {
var antiGravityModeValue = $('.antigravity select[id="antiGravityMode"]').val();
// Smooth
// Smooth removes threshold
if (antiGravityModeValue == 0) {
$('.antigravity table th:nth-child(3)').hide();
$('.antigravity table td:nth-child(3)').hide();
$('.antiGravityThres').hide();
} else {
$('.antigravity table th:nth-child(3)').show();
$('.antigravity table td:nth-child(3)').show();
$('.antiGravityThres').show();
}
});
@ -307,14 +297,10 @@ TABS.pid_tuning.initialize = function (callback) {
$('.pid_tuning .YAW input[name="d"]').hide();
// Feedforward column
$('#pid_main tr :nth-child(5)').hide();
$('#pid_main .pid_titlebar2 th').attr("colspan", 8);
$('#pid_main tr :nth-child(6)').hide();
$('.helpicon[i18n_title="pidTuningPidTuningTipFeedforward"]').hide();
$('#pid-tuning .feedforwardTransition').hide();
$('.antigravity table th:first-child').hide();
$('.antigravity table td:first-child').hide();
}
if (semver.gte(CONFIG.apiVersion, "1.41.0")) {
@ -329,14 +315,15 @@ TABS.pid_tuning.initialize = function (callback) {
$('.pid_filter input[name="dtermLowpassDynMaxFrequency"]').val(FILTER_CONFIG.dterm_lowpass_dyn_max_hz);
$('.pid_filter select[name="dtermLowpassDynType"]').val(FILTER_CONFIG.dterm_lowpass_type);
$('.dminGroup input[name="dMinRoll"]').val(ADVANCED_TUNING.dMinRoll);
$('.dminGroup input[name="dMinPitch"]').val(ADVANCED_TUNING.dMinPitch);
$('.dminGroup input[name="dMinYaw"]').val(ADVANCED_TUNING.dMinYaw);
$('.pid_tuning input[name="dMinRoll"]').val(ADVANCED_TUNING.dMinRoll);
$('.pid_tuning input[name="dMinPitch"]').val(ADVANCED_TUNING.dMinPitch);
$('.pid_tuning input[name="dMinYaw"]').val(ADVANCED_TUNING.dMinYaw);
$('.dminGroup input[name="dMinGain"]').val(ADVANCED_TUNING.dMinGain);
$('.dminGroup input[name="dMinAdvance"]').val(ADVANCED_TUNING.dMinAdvance);
$('input[id="useIntegratedYaw"]').prop('checked', ADVANCED_TUNING.useIntegratedYaw !== 0);
//dmin column
$('#pid_main .pid_titlebar2 th').attr('colspan', 6);
} else {
$('.throttle_limit').hide();
@ -345,6 +332,9 @@ TABS.pid_tuning.initialize = function (callback) {
$('.dtermLowpass2TypeGroup').hide();
$('.dminGroup').hide();
$('.dMinDisabledNote').hide();
//dmin column
$('#pid_main tr :nth-child(5)').hide();
$('.integratedYaw').hide();
}
@ -357,14 +347,16 @@ TABS.pid_tuning.initialize = function (callback) {
} else {
$('.dynamicNotch').hide();
}
$('.pid_filter select[name="dynamicNotchRange"]').val(FILTER_CONFIG.dyn_notch_range);
$('.pid_filter input[name="dynamicNotchWidthPercent"]').val(FILTER_CONFIG.dyn_notch_width_percent);
$('.pid_filter input[name="dynamicNotchQ"]').val(FILTER_CONFIG.dyn_notch_q);
$('.pid_filter input[name="dynamicNotchMinHz"]').val(FILTER_CONFIG.dyn_notch_min_hz);
$('.helpicon[i18n_title="pidTuningPidTuningTipFeedforward"]').hide();
} else {
$('.itermRelaxCutoff').hide();
$('.dynamicNotch').hide();
$('.helpicon[i18n_title="pidTuningPidTuningTipDMin"]').hide();
}
$('input[id="useIntegratedYaw"]').change(function() {
@ -385,20 +377,56 @@ TABS.pid_tuning.initialize = function (callback) {
}
$('.pid_tuning .ROLL input[name="d"]').change(function() {
var dMinElement= $('.dminGroup input[name="dMinRoll"]');
var dMinElement= $('.pid_tuning input[name="dMinRoll"]');
adjustDMin($(this), dMinElement);
}).change();
$('.pid_tuning .PITCH input[name="d"]').change(function() {
var dMinElement= $('.dminGroup input[name="dMinPitch"]');
var dMinElement= $('.pid_tuning input[name="dMinPitch"]');
adjustDMin($(this), dMinElement);
}).change();
$('.pid_tuning .YAW input[name="d"]').change(function() {
var dMinElement= $('.dminGroup input[name="dMinYaw"]');
var dMinElement= $('.pid_tuning input[name="dMinYaw"]');
adjustDMin($(this), dMinElement);
}).change();
if (semver.gte(CONFIG.apiVersion, "1.41.0")) {
var dMinSwitch = $('#dMinSwitch');
dMinSwitch.prop('checked', ADVANCED_TUNING.dMinRoll > 0 || ADVANCED_TUNING.dMinPitch > 0 || ADVANCED_TUNING.dMinYaw > 0);
dMinSwitch.change(function() {
var checked = $(this).is(':checked');
if (checked) {
if (ADVANCED_TUNING.dMinRoll == 0 && ADVANCED_TUNING.dMinPitch == 0 && ADVANCED_TUNING.dMinYaw == 0) {
$('.pid_tuning input[name="dMinRoll"]').val(Math.round(PIDs[0][2] * 0.57));
$('.pid_tuning input[name="dMinPitch"]').val(Math.round(PIDs[1][2] * 0.57));
$('.pid_tuning input[name="dMinYaw"]').val(Math.round(PIDs[2][2] * 0.57));
} else {
$('.pid_tuning input[name="dMinRoll"]').val(ADVANCED_TUNING.dMinRoll);
$('.pid_tuning input[name="dMinPitch"]').val(ADVANCED_TUNING.dMinPitch);
$('.pid_tuning input[name="dMinYaw"]').val(ADVANCED_TUNING.dMinYaw);
}
$('.dMinDisabledNote').hide();
$('.dminGroup .suboption').show();
$('#pid_main tr :nth-child(5)').show();
$('#pid_main .pid_titlebar2 th').attr('colspan', 6);
$('.helpicon[i18n_title="pidTuningPidTuningTipFeedforward"]').hide();
$('.helpicon[i18n_title="pidTuningPidTuningTipDMin"]').show();
} else {
$('.pid_tuning input[name="dMinRoll"]').val(0);
$('.pid_tuning input[name="dMinPitch"]').val(0);
$('.pid_tuning input[name="dMinYaw"]').val(0);
$('.dminGroup .suboption').hide();
$('.dMinDisabledNote').show();
$('#pid_main tr :nth-child(5)').hide();
$('#pid_main .pid_titlebar2 th').attr('colspan', 5);
$('.helpicon[i18n_title="pidTuningPidTuningTipFeedforward"]').show();
$('.helpicon[i18n_title="pidTuningPidTuningTipDMin"]').hide();
}
});
dMinSwitch.change();
}
$('input[id="gyroNotch1Enabled"]').change(function() {
var checked = $(this).is(':checked');
var hz = FILTER_CONFIG.gyro_notch_hz > 0 ? FILTER_CONFIG.gyro_notch_hz : FILTER_DEFAULT.gyro_notch_hz;
@ -652,7 +680,7 @@ TABS.pid_tuning.initialize = function (callback) {
ADVANCED_TUNING.smartFeedforward = $('input[id="smartfeedforward"]').is(':checked') ? 1 : 0;
ADVANCED_TUNING.itermRelax = $('input[id="itermrelax"]').is(':checked') ? $('select[id="itermrelaxAxes"]').val() : 0;
ADVANCED_TUNING.itermRelaxType = $('input[id="itermrelax"]').is(':checked') ? $('select[id="itermrelaxType"]').val() : 0;
ADVANCED_TUNING.itermRelaxType = $('select[id="itermrelaxType"]').val();
ADVANCED_TUNING.itermRelaxCutoff = parseInt($('input[name="itermRelaxCutoff"]').val());
ADVANCED_TUNING.absoluteControlGain = $('input[name="absoluteControlGain-number"]').val();
@ -687,9 +715,9 @@ TABS.pid_tuning.initialize = function (callback) {
FILTER_CONFIG.dterm_lowpass_type = $('.pid_filter select[name="dtermLowpassDynType"]').val();
}
ADVANCED_TUNING.dMinRoll = parseInt($('.dminGroup input[name="dMinRoll"]').val());
ADVANCED_TUNING.dMinPitch = parseInt($('.dminGroup input[name="dMinPitch"]').val());
ADVANCED_TUNING.dMinYaw = parseInt($('.dminGroup input[name="dMinYaw"]').val());
ADVANCED_TUNING.dMinRoll = parseInt($('.pid_tuning input[name="dMinRoll"]').val());
ADVANCED_TUNING.dMinPitch = parseInt($('.pid_tuning input[name="dMinPitch"]').val());
ADVANCED_TUNING.dMinYaw = parseInt($('.pid_tuning input[name="dMinYaw"]').val());
ADVANCED_TUNING.dMinGain = parseInt($('.dminGroup input[name="dMinGain"]').val());
ADVANCED_TUNING.dMinAdvance = parseInt($('.dminGroup input[name="dMinAdvance"]').val());
@ -816,7 +844,6 @@ TABS.pid_tuning.initialize = function (callback) {
if (semver.lt(CONFIG.apiVersion, "1.39.0")) {
$('input[name="dtermSetpoint-number"]').attr('max', self.SETPOINT_WEIGHT_RANGE_LEGACY);
$('input[name="dtermSetpoint-range"]').attr('max', self.SETPOINT_WEIGHT_RANGE_LEGACY);
}
// translate to user-selected language
@ -866,6 +893,16 @@ TABS.pid_tuning.initialize = function (callback) {
$('.tab-pid_tuning .tab_container .pid').on('click', function () {
$('.tab-pid_tuning .subtab-pid').show();
$('.tab-pid_tuning .subtab-rates').hide();
$('.tab-pid_tuning .subtab-filter').hide();
$('.tab-pid_tuning .tab_container td').removeClass('active');
$(this).addClass('active');
});
$('.tab-pid_tuning .tab_container .rates').on('click', function () {
$('.tab-pid_tuning .subtab-rates').show();
$('.tab-pid_tuning .subtab-pid').hide();
$('.tab-pid_tuning .subtab-filter').hide();
$('.tab-pid_tuning .tab_container td').removeClass('active');
@ -875,6 +912,7 @@ TABS.pid_tuning.initialize = function (callback) {
$('.tab-pid_tuning .tab_container .filter').on('click', function () {
$('.tab-pid_tuning .subtab-filter').show();
$('.tab-pid_tuning .subtab-pid').hide();
$('.tab-pid_tuning .subtab-rates').hide();
$('.tab-pid_tuning .tab_container td').removeClass('active');
$(this).addClass('active');
@ -998,7 +1036,6 @@ TABS.pid_tuning.initialize = function (callback) {
});
var dtermTransitionNumberElement = $('input[name="dtermSetpointTransition-number"]');
var dtermTransitionRangeElement = $('input[name="dtermSetpointTransition-range"]');
var dtermTransitionWarningElement = $('#pid-tuning .dtermSetpointTransitionWarning');
function checkUpdateDtermTransitionWarning(value) {
@ -1013,36 +1050,8 @@ TABS.pid_tuning.initialize = function (callback) {
//Use 'input' event for coupled controls to allow synchronized update
dtermTransitionNumberElement.on('input', function () {
checkUpdateDtermTransitionWarning($(this).val());
dtermTransitionRangeElement.val($(this).val());
});
dtermTransitionRangeElement.on('input', function () {
checkUpdateDtermTransitionWarning($(this).val());
dtermTransitionNumberElement.val($(this).val());
});
var dtermNumberElement = $('input[name="dtermSetpoint-number"]');
var dtermRangeElement = $('input[name="dtermSetpoint-range"]');
function adjustRangeElement(value) {
var range = dtermRangeElement.attr('max');
if (value >= self.SETPOINT_WEIGHT_RANGE_LOW && range <= self.SETPOINT_WEIGHT_RANGE_LOW) {
dtermRangeElement.attr('max', self.SETPOINT_WEIGHT_RANGE_HIGH);
} else if (value < self.SETPOINT_WEIGHT_RANGE_LOW && range > self.SETPOINT_WEIGHT_RANGE_LOW) {
dtermRangeElement.attr('max', self.SETPOINT_WEIGHT_RANGE_LOW);
}
}
//Use 'input' event for coupled controls to allow synchronized update
dtermNumberElement.on('input', function () {
var value = $(this).val();
adjustRangeElement(value);
dtermRangeElement.val(value);
});
dtermRangeElement.on('input', function () {
var value = $(this).val();
adjustRangeElement(value);
dtermNumberElement.val(value);
});
} else {
$('.tab-pid_tuning .rate_profile').hide();
@ -1477,6 +1486,9 @@ TABS.pid_tuning.initRatesPreview = function () {
this.keepRendering = true;
this.model = new Model($('.rates_preview'), $('.rates_preview canvas'));
$('.tab-pid_tuning .tab_container .rates').on('click', $.proxy(this.model.resize, this.model));
$('.tab-pid_tuning .tab_container .rates').on('click', $.proxy(this.updateRatesLabels, this));
$(window).on('resize', $.proxy(this.model.resize, this.model));
$(window).on('resize', $.proxy(this.updateRatesLabels, this));
};