From a1449a8c9f9d23a5ce2f7d7eb8018714d1f66e4f Mon Sep 17 00:00:00 2001 From: Mark Haslinghuis Date: Sun, 7 Aug 2022 23:51:58 +0200 Subject: [PATCH 1/2] Update PID Profile --- src/js/fc.js | 6 +++-- src/js/msp/MSPHelper.js | 46 ++++++++++++++++++++++++++++++--------- src/js/tabs/pid_tuning.js | 20 +++++++++++++---- src/tabs/pid_tuning.html | 5 ++--- 4 files changed, 58 insertions(+), 19 deletions(-) diff --git a/src/js/fc.js b/src/js/fc.js index 0d03c94f42..9f281e8c4d 100644 --- a/src/js/fc.js +++ b/src/js/fc.js @@ -229,10 +229,10 @@ const FC = { roll_rate: 0, pitch_rate: 0, yaw_rate: 0, - dynamic_THR_PID: 0, + dynamic_THR_PID: 0, // moved in 1.45 to ADVANCED_TUNING throttle_MID: 0, throttle_EXPO: 0, - dynamic_THR_breakpoint: 0, + dynamic_THR_breakpoint: 0, // moved in 1.45 to ADVANCED_TUNING RC_YAW_EXPO: 0, rcYawRate: 0, rcPitchRate: 0, @@ -518,6 +518,8 @@ const FC = { feedforward_jitter_factor: 0, vbat_sag_compensation: 0, thrustLinearization: 0, + tpaRate: 0, + tpaBreakpoint: 0, }; this.ADVANCED_TUNING_ACTIVE = { ...this.ADVANCED_TUNING }; diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js index a14b8868d3..82b0009098 100644 --- a/src/js/msp/MSPHelper.js +++ b/src/js/msp/MSPHelper.js @@ -406,11 +406,19 @@ MspHelper.prototype.process_data = function(dataHandler) { FC.RC_TUNING.pitch_rate = parseFloat((data.readU8() / 100).toFixed(2)); } FC.RC_TUNING.yaw_rate = parseFloat((data.readU8() / 100).toFixed(2)); - FC.RC_TUNING.dynamic_THR_PID = parseFloat((data.readU8() / 100).toFixed(2)); + if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + FC.RC_TUNING.dynamic_THR_PID = parseFloat((data.readU8() / 100).toFixed(2)); + } else { + data.readU8(); + } FC.RC_TUNING.throttle_MID = parseFloat((data.readU8() / 100).toFixed(2)); FC.RC_TUNING.throttle_EXPO = parseFloat((data.readU8() / 100).toFixed(2)); if (semver.gte(FC.CONFIG.apiVersion, "1.7.0")) { - FC.RC_TUNING.dynamic_THR_breakpoint = data.readU16(); + if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + FC.RC_TUNING.dynamic_THR_breakpoint = data.readU16(); + } else { + data.readU16(); + } } else { FC.RC_TUNING.dynamic_THR_breakpoint = 0; } @@ -1245,15 +1253,15 @@ MspHelper.prototype.process_data = function(dataHandler) { FC.ADVANCED_TUNING.useIntegratedYaw = data.readU8(); FC.ADVANCED_TUNING.integratedYawRelax = data.readU8(); - if(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_42)) { + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_42)) { FC.ADVANCED_TUNING.itermRelaxCutoff = data.readU8(); - if(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43)) { + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43)) { FC.ADVANCED_TUNING.motorOutputLimit = data.readU8(); FC.ADVANCED_TUNING.autoProfileCellCount = data.read8(); FC.ADVANCED_TUNING.idleMinRpm = data.readU8(); - if(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) { + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) { FC.ADVANCED_TUNING.feedforward_averaging = data.readU8(); FC.ADVANCED_TUNING.feedforward_smooth_factor = data.readU8(); FC.ADVANCED_TUNING.feedforward_boost = data.readU8(); @@ -1261,6 +1269,11 @@ MspHelper.prototype.process_data = function(dataHandler) { FC.ADVANCED_TUNING.feedforward_jitter_factor = data.readU8(); FC.ADVANCED_TUNING.vbat_sag_compensation = data.readU8(); FC.ADVANCED_TUNING.thrustLinearization = data.readU8(); + + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + FC.ADVANCED_TUNING.tpaRate = data.readU8(); + FC.ADVANCED_TUNING.tpaBreakpoint = data.readU16(); + } } } } @@ -1830,12 +1843,20 @@ MspHelper.prototype.crunch = function(code) { buffer.push8(Math.round(FC.RC_TUNING.roll_rate * 100)) .push8(Math.round(FC.RC_TUNING.pitch_rate * 100)); } - buffer.push8(Math.round(FC.RC_TUNING.yaw_rate * 100)) - .push8(Math.round(FC.RC_TUNING.dynamic_THR_PID * 100)) - .push8(Math.round(FC.RC_TUNING.throttle_MID * 100)) - .push8(Math.round(FC.RC_TUNING.throttle_EXPO * 100)); + buffer.push8(Math.round(FC.RC_TUNING.yaw_rate * 100)); + if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + buffer.push8(Math.round(FC.RC_TUNING.dynamic_THR_PID * 100)); + } else { + buffer.push8(0); + } + buffer.push8(Math.round(FC.RC_TUNING.throttle_MID * 100)); + buffer.push8(Math.round(FC.RC_TUNING.throttle_EXPO * 100)); if (semver.gte(FC.CONFIG.apiVersion, "1.7.0")) { - buffer.push16(FC.RC_TUNING.dynamic_THR_breakpoint); + if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + buffer.push16(FC.RC_TUNING.dynamic_THR_breakpoint); + } else { + buffer.push16(0); + } } if (semver.gte(FC.CONFIG.apiVersion, "1.10.0")) { buffer.push8(Math.round(FC.RC_TUNING.RC_YAW_EXPO * 100)); @@ -2269,6 +2290,11 @@ MspHelper.prototype.crunch = function(code) { .push8(FC.ADVANCED_TUNING.feedforward_jitter_factor) .push8(FC.ADVANCED_TUNING.vbat_sag_compensation) .push8(FC.ADVANCED_TUNING.thrustLinearization); + + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + buffer.push8(FC.ADVANCED_TUNING.tpaRate); + buffer.push16(FC.ADVANCED_TUNING.tpaBreakpoint); + } } } } diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js index 24dc64e88a..3039bd45cf 100644 --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -109,8 +109,14 @@ pid_tuning.initialize = function (callback) { $('.throttle input[name="mid"]').val(FC.RC_TUNING.throttle_MID.toFixed(2)); $('.throttle input[name="expo"]').val(FC.RC_TUNING.throttle_EXPO.toFixed(2)); - $('.tpa input[name="tpa"]').val(FC.RC_TUNING.dynamic_THR_PID.toFixed(2)); - $('.tpa input[name="tpa-breakpoint"]').val(FC.RC_TUNING.dynamic_THR_breakpoint); + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + // Moved tpa to profile + $('.tpa input[name="tpa"]').val(FC.ADVANCED_TUNING.tpaRate); + $('.tpa input[name="tpa-breakpoint"]').val(FC.ADVANCED_TUNING.tpaBreakpoint); + } else { + $('.tpa input[name="tpa"]').val(FC.RC_TUNING.dynamic_THR_PID.toFixed(2)); + $('.tpa input[name="tpa-breakpoint"]').val(FC.RC_TUNING.dynamic_THR_breakpoint); + } if (semver.lt(FC.CONFIG.apiVersion, "1.10.0")) { $('.pid_tuning input[name="rc_yaw_expo"]').hide(); @@ -1184,8 +1190,14 @@ pid_tuning.initialize = function (callback) { FC.RC_TUNING.throttle_MID = parseFloat($('.throttle input[name="mid"]').val()); FC.RC_TUNING.throttle_EXPO = parseFloat($('.throttle input[name="expo"]').val()); - FC.RC_TUNING.dynamic_THR_PID = parseFloat($('.tpa input[name="tpa"]').val()); - FC.RC_TUNING.dynamic_THR_breakpoint = parseInt($('.tpa input[name="tpa-breakpoint"]').val()); + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + FC.ADVANCED_TUNING.tpaRate = parseFloat($('.tpa input[name="tpa"]').val()); + FC.ADVANCED_TUNING.tpaBreakpoint = parseInt($('.tpa input[name="tpa-breakpoint"]').val()); + } else { + FC.RC_TUNING.dynamic_THR_PID = parseFloat($('.tpa input[name="tpa"]').val()); + FC.RC_TUNING.dynamic_THR_breakpoint = parseInt($('.tpa input[name="tpa-breakpoint"]').val()); + } + FC.FILTER_CONFIG.gyro_lowpass_hz = parseInt($('.pid_filter input[name="gyroLowpassFrequency"]').val()); FC.FILTER_CONFIG.dterm_lowpass_hz = parseInt($('.pid_filter input[name="dtermLowpassFrequency"]').val()); FC.FILTER_CONFIG.yaw_lowpass_hz = parseInt($('.pid_filter input[name="yawLowpassFrequency"]').val()); diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html index 3641e585fb..e0209bb1cb 100644 --- a/src/tabs/pid_tuning.html +++ b/src/tabs/pid_tuning.html @@ -1032,9 +1032,8 @@ - - + + From be2cdbd9f16cc5d6990dc97f131378569f685e21 Mon Sep 17 00:00:00 2001 From: Mark Haslinghuis Date: Mon, 8 Aug 2022 23:10:10 +0200 Subject: [PATCH 2/2] Move TPA from Rates to PID tuning (UI) --- src/css/tabs/pid_tuning.less | 8 +++++--- src/js/msp/MSPHelper.js | 4 ++-- src/js/tabs/pid_tuning.js | 24 +++++++++++++++--------- src/tabs/pid_tuning.html | 21 ++++++++++++++++++--- 4 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/css/tabs/pid_tuning.less b/src/css/tabs/pid_tuning.less index 9cbb7cd7af..4ce3e6a851 100644 --- a/src/css/tabs/pid_tuning.less +++ b/src/css/tabs/pid_tuning.less @@ -287,6 +287,11 @@ } } } + table.tpa-settings { + tr { + height: 30px; + } + } .pidTuningFeatures { td { padding: 5px; @@ -458,9 +463,6 @@ float: left; width: 25%; } - .leftzero { - padding-left: 0; - } .roll { border-bottom-left-radius: 3px; } diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js index 82b0009098..20abf3f29d 100644 --- a/src/js/msp/MSPHelper.js +++ b/src/js/msp/MSPHelper.js @@ -1271,7 +1271,7 @@ MspHelper.prototype.process_data = function(dataHandler) { FC.ADVANCED_TUNING.thrustLinearization = data.readU8(); if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { - FC.ADVANCED_TUNING.tpaRate = data.readU8(); + FC.ADVANCED_TUNING.tpaRate = parseFloat((data.readU8() / 100).toFixed(2)); FC.ADVANCED_TUNING.tpaBreakpoint = data.readU16(); } } @@ -2292,7 +2292,7 @@ MspHelper.prototype.crunch = function(code) { .push8(FC.ADVANCED_TUNING.thrustLinearization); if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { - buffer.push8(FC.ADVANCED_TUNING.tpaRate); + buffer.push8(Math.round(FC.ADVANCED_TUNING.tpaRate * 100)); buffer.push16(FC.ADVANCED_TUNING.tpaBreakpoint); } } diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js index 3039bd45cf..a57089cd8b 100644 --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -111,11 +111,11 @@ pid_tuning.initialize = function (callback) { if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { // Moved tpa to profile - $('.tpa input[name="tpa"]').val(FC.ADVANCED_TUNING.tpaRate); - $('.tpa input[name="tpa-breakpoint"]').val(FC.ADVANCED_TUNING.tpaBreakpoint); + $('input[id="tpaRate"]').val(FC.ADVANCED_TUNING.tpaRate.toFixed(2)); + $('input[id="tpaBreakpoint"]').val(FC.ADVANCED_TUNING.tpaBreakpoint); } else { - $('.tpa input[name="tpa"]').val(FC.RC_TUNING.dynamic_THR_PID.toFixed(2)); - $('.tpa input[name="tpa-breakpoint"]').val(FC.RC_TUNING.dynamic_THR_breakpoint); + $('.tpa-old input[name="tpa"]').val(FC.RC_TUNING.dynamic_THR_PID.toFixed(2)); + $('.tpa-old input[name="tpa-breakpoint"]').val(FC.RC_TUNING.dynamic_THR_breakpoint); } if (semver.lt(FC.CONFIG.apiVersion, "1.10.0")) { @@ -1191,11 +1191,11 @@ pid_tuning.initialize = function (callback) { FC.RC_TUNING.throttle_EXPO = parseFloat($('.throttle input[name="expo"]').val()); if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { - FC.ADVANCED_TUNING.tpaRate = parseFloat($('.tpa input[name="tpa"]').val()); - FC.ADVANCED_TUNING.tpaBreakpoint = parseInt($('.tpa input[name="tpa-breakpoint"]').val()); + FC.ADVANCED_TUNING.tpaRate = parseFloat($('input[id="tpaRate"]').val()); + FC.ADVANCED_TUNING.tpaBreakpoint = parseInt($('input[id="tpaBreakpoint"]').val()); } else { - FC.RC_TUNING.dynamic_THR_PID = parseFloat($('.tpa input[name="tpa"]').val()); - FC.RC_TUNING.dynamic_THR_breakpoint = parseInt($('.tpa input[name="tpa-breakpoint"]').val()); + FC.RC_TUNING.dynamic_THR_PID = parseFloat($('.tpa-old input[name="tpa"]').val()); + FC.RC_TUNING.dynamic_THR_breakpoint = parseInt($('.tpa-old input[name="tpa-breakpoint"]').val()); } FC.FILTER_CONFIG.gyro_lowpass_hz = parseInt($('.pid_filter input[name="gyroLowpassFrequency"]').val()); @@ -1782,7 +1782,7 @@ pid_tuning.initialize = function (callback) { } if (semver.lt(FC.CONFIG.apiVersion, "1.7.0")) { - $('.tpa .tpa-breakpoint').hide(); + $('.tpa-old .tpa-breakpoint').hide(); $('.pid_tuning .roll_rate').hide(); $('.pid_tuning .pitch_rate').hide(); @@ -1790,6 +1790,12 @@ pid_tuning.initialize = function (callback) { $('.pid_tuning .roll_pitch_rate').hide(); } + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + $('.tpa-old').hide(); + } else { + $('.tpa').hide(); + } + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_37)) { $('.pid_tuning .bracket').hide(); $('.pid_tuning input[name=rc_rate]').parent().attr('class', 'pid_data'); diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html index e0209bb1cb..4620c9e9c4 100644 --- a/src/tabs/pid_tuning.html +++ b/src/tabs/pid_tuning.html @@ -813,6 +813,21 @@ +
+ + + + + +
+ + + + + + +
+
@@ -1022,7 +1037,7 @@
-
+
@@ -1032,8 +1047,8 @@ - - + +