1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-25 17:25:14 +03:00

PID Tuning page done

- All text now uses data-i18n
- Fixed startup colours for profile select boxes
- updated step calcuation
This commit is contained in:
Darren Lines 2022-02-22 19:36:12 +00:00
parent 15282d8994
commit 5e51917140
6 changed files with 314 additions and 268 deletions

View file

@ -1152,85 +1152,238 @@
"portsFunction_IMU2": { "portsFunction_IMU2": {
"message": "Secondary IMU" "message": "Secondary IMU"
}, },
"pidTuningName": { "pidTuning_ShowAllPIDs": {
"message": "Show all PIDs"
},
"pidTuning_SelectNewDefaults": {
"message": "Select New Defaults"
},
"pidTuning_ResetPIDController": {
"message": "Reset PID Controller"
},
"pidTuning_PIDgains": {
"message" :"PID gains"
},
"pidTuning_Name": {
"message": "Name" "message": "Name"
}, },
"pidTuningProportional": { "pidTuning_Proportional": {
"message": "Proportional" "message": "Proportional"
}, },
"pidTuningIntegral": { "pidTuning_Integral": {
"message": "Integral" "message": "Integral"
}, },
"pidTuningDerivative": { "pidTuning_Derivative": {
"message": "Derivative" "message": "Derivative"
}, },
"pidTuningFeedForward": { "pidTuning_FeedForward": {
"message": "FeedForward" "message": "FeedForward"
}, },
"pidTuningControlDerivative": { "pidTuning_ControlDerivative": {
"message": "Control Derivative" "message": "Control Derivative"
}, },
"pidTuningRollPitchRate": { "pidTuning_Basic": {
"message": "Basic/Acro"
},
"pidTuning_Level": {
"message": "Angle/Horizon"
},
"pidTuning_Altitude": {
"message": "Barometer & Sonar/Altitude"
},
"pidTuning_Mag": {
"message": "Magnometer/Heading"
},
"pidTuning_GPS": {
"message": "GPS Navigation"
},
"pidTuning_LevelP": {
"message": "Strength"
},
"pidTuning_LevelI": {
"message": "LPF cutoff (Hz)"
},
"pidTuning_LevelD": {
"message": "Transition (Horizon)"
},
"pidTuning_LevelHelp": {
"message": "The values below change the behaviour of the ANGLE and HORIZON flight modes. Different PID controllers handle the LEVEL values differently. Please check the documentation."
},
"pidTuning_RatesAndExpo": {
"message": "Rates & Expo"
},
"pidTuning_RollPitchRate": {
"message": "ROLL & PITCH rate" "message": "ROLL & PITCH rate"
}, },
"pidTuningRollRate": { "pidTuning_RollRate": {
"message": "ROLL rate" "message": "ROLL rate"
}, },
"pidTuningPitchRate": { "pidTuning_PitchRate": {
"message": "PITCH rate" "message": "PITCH rate"
}, },
"pidTuningYawRate": { "pidTuning_YawRate": {
"message": "YAW rate" "message": "YAW rate"
}, },
"pidTuningRollAndPitchExpo": { "pidTuning_RollAndPitchExpo": {
"message": "Roll & Pitch Expo" "message": "Roll & Pitch Expo"
}, },
"pidTuningYawExpo" : { "pidTuning_YawExpo" : {
"message": "Yaw Expo" "message": "Yaw Expo"
}, },
"pidTuningMaxRollAngle": { "pidTuning_MaxRollAngle": {
"message": "Max. ROLL angle" "message": "Max. ROLL angle"
}, },
"pidTuningMaxRollAngleHelp": { "pidTuning_MaxRollAngleHelp": {
"message": "Maximum ROLL angle in ANGLE mode. This also constrains the maximum bank in navigation modes." "message": "Maximum ROLL angle in ANGLE mode. This also constrains the maximum bank in navigation modes."
}, },
"pidTuningMaxPitchAngle": { "pidTuning_MaxPitchAngle": {
"message": "Max. PITCH angle" "message": "Max. PITCH angle"
}, },
"pidTuningMaxPitchAngleHelp": { "pidTuning_MaxPitchAngleHelp": {
"message": "Maximum PITCH angle in ANGLE mode. This also constrains the maximum climb and dive in navigation modes." "message": "Maximum PITCH angle in ANGLE mode. This also constrains the maximum climb and dive in navigation modes."
}, },
"pidTuningManualRollRate": { "pidTuning_ManualRollRate": {
"message": "Manual ROLL rate" "message": "Manual ROLL rate"
}, },
"pidTuningManualPitchRate": { "pidTuning_ManualPitchRate": {
"message": "Manual PITCH rate" "message": "Manual PITCH rate"
}, },
"pidTuningManualYawRate": { "pidTuning_ManualYawRate": {
"message": "Manual YAW rate" "message": "Manual YAW rate"
}, },
"magHoldYawRate": { "pidTuning_magHoldYawRate": {
"message": "Heading Hold rate limit" "message": "Heading Hold rate limit"
}, },
"pidTuningMagHoldYawRateHelp": { "pidTuning_MagHoldYawRateHelp": {
"message": "Maximum YAW rotation rate that MagHold controller can request from UAV. Used only when MagHold mode is enabled, during RTH and WAYPOINT navigation. Values below 30dps gives nice \"cinematic\" turns" "message": "Maximum YAW rotation rate that MagHold controller can request from UAV. Used only when MagHold mode is enabled, during RTH and WAYPOINT navigation. Values below 30dps gives nice \"cinematic\" turns"
}, },
"pidTuningTPA": { "pidTuning_Filters": {
"message": "Filters"
},
"pidTuning_mainFilters": {
"message": "Gyro filters"
},
"pidTuning_gyro_main_lpf_hz": {
"message": "Main gyro filter cutoff frequency"
},
"pidTuning_gyro_main_lpf_hz_help": {
"message": "Higher values offer lower delay but more noise. Lower values offer less noise, but more dalay on the gyro processing"
},
"pidTuning_MatrixFilterMinFrequency": {
"message": "Matrix Filter Min Frequency"
},
"pidTuning_MatrixFilterMinFrequencyHelp": {
"message": "Minimum frequency for the Matrix Filter. Value should depends on propeller size. 150Hz work fine with 5" and smaller. For 7" and above lower even below 100Hz."
},
"pidTuning_MatrixFilterQFactor": {
"message": "Matrix Filter Q Factor"
},
"pidTuning_MatrixFilterQFactorHelp": {
"message": "The higher value, the higher selectivity of the Matrix Filter. Values between 150 and 300 are recommended."
},
"pidTuning_UnicornFilterQFactor": {
"message": "Unicorn Filter Q Factor"
},
"pidTuning_dtermFilters": {
"message": "D-term filters"
},
"pidTuning_dtermLpfCutoffFrequency": {
"message": "D-term LPF cutoff frequency"
},
"pidTuning_dtermLpfCutoffFrequencyHelp": {
"message": "Lowpass cutoff filter for Dterm for all PID controllers"
},
"pidTuning_rpmFilters": {
"message": "Gyro RPM filters"
},
"pidTuning_rpm_gyro_filter_enabled": {
"message": "Gyro RPM filter (requires ESC telemetry)"
},
"pidTuning_rpm_gyro_min_hz": {
"message": "Gyro RPM filter min. frequency"
},
"pidTuning_Mechanics": {
"message": "Mechanics"
},
"pidTuning_ITermMechanics": {
"message": "I-term mechanics"
},
"pidTuning_itermRelaxCutoff": {
"message": "Iterm Relax Cutoff Frequency"
},
"pidTuning_itermRelaxCutoffHelp": {
"message": "Lower values open a longer time window for Iterm Relax to work on and stronger Iterm suppression. Higher values shortens the time windows and reduces suppression."
},
"pidTuning_antigravityGain": {
"message": "Antigravity Gain"
},
"pidTuning_antigravityAccelerator": {
"message": "Antigravity Accelerator"
},
"pidTuning_antigravityCutoff": {
"message": "Antigravity Cutoff Frequency"
},
"pidTuning_itermBankAngleFreeze": {
"message": "Yaw Iterm freeze bank angle"
},
"pidTuning_itermBankAngleFreezeHelp": {
"message": "Freeze yaw Iterm when plane is banked more than this many degrees. This helps to stop the rudder from counteracting turn. 0 disables this feature. Applies only to fixed wing aircraft."
},
"pidTuning_dTermMechanics": {
"message": "D-term mechanics"
},
"pidTuning_d_boost_min": {
"message": "D-Boost Min. Scale"
},
"pidTuning_d_boost_min_help": {
"message": "Defines the max allowed Dterm attenuation during stick acceleration phase. Value 1.0 mean Dterm is not attenuate. 0.5 mean it's allowed to shrink by half. Lower values result in faster response during fast stick movement."
},
"pidTuning_d_boost_max": {
"message": "D-Boost Max. Scale"
},
"pidTuning_d_boost_max_help": {
"message": "Defines the maximum Dterm boost when maximum angular acceleration is reached. 1.0 means D-Boost is disabled, 2.0 means Dterm is allowed to grow by 100%. Values between 1.5 and 1.7 are usually the sweet spot."
},
"pidTuning_d_boost_max_at_acceleration": {
"message": "Top D-Boost at acceleration [dps^2]"
},
"pidTuning_d_boost_max_at_acceleration_help": {
"message": "D-Boost is fully active when angular acceleration (either detected by gyro or rate target) reached given acceleration. Between 0 and this value, D-Boost factor is scaled lineary"
},
"pidTuning_d_boost_gyro_delta_lpf_hz": {
"message": "D-Boost gyro LPF"
},
"pidTuning_d_boost_gyro_delta_lpf_hz_help": {
"message": "Should be set to the frequency of propeller wash oscillations. 5-inch quads work best at around 80Hz, 7-inch quads at around 50Hz"
},
"pidTuning_tpaMechanics": {
"message": "Thrust PID attenuation"
},
"pidTuning_TPA": {
"message": "Thrust PID Attenuation (TPA)" "message": "Thrust PID Attenuation (TPA)"
}, },
"pidTuningTPABreakPoint": { "pidTuning_TPABreakPoint": {
"message": "TPA Breakpoint" "message": "TPA Breakpoint"
}, },
"pidTuningButtonSave": { "pidTuning_fwLevelTrimMechanics": {
"message": "Fixed Wing Level Trim"
},
"pidTuning_fw_level_pitch_trim": {
"message": "Level Trim [deg]"
},
"pidTuning_fw_level_pitch_trim_help": {
"message": "Pitch trim for self-leveling flight modes. In degrees. +5 means airplane nose should be raised 5 deg from level"
},
"pidTuning_ButtonSave": {
"message": "Save" "message": "Save"
}, },
"pidTuningButtonRefresh": { "pidTuning_ButtonRefresh": {
"message": "Refresh" "message": "Refresh"
}, },
"pidTuningProfileHead": { "pidTuning_ProfileHead": {
"message": "Profile" "message": "Profile"
}, },
"pidTuningLoadedProfile": { "pidTuning_LoadedProfile": {
"message": "Loaded Profile: <strong style=\"color: #37a8db\">$1</strong>" "message": "Loaded Profile: <strong style=\"color: #37a8db\">$1</strong>"
}, },
"loadedBatteryProfile": { "loadedBatteryProfile": {
@ -2056,33 +2209,6 @@
"radioChannelShort": { "radioChannelShort": {
"message": "CH " "message": "CH "
}, },
"pidTuningBasic": {
"message": "Basic/Acro"
},
"pidTuningLevel": {
"message": "Angle/Horizon"
},
"pidTuningAltitude": {
"message": "Barometer & Sonar/Altitude"
},
"pidTuningMag": {
"message": "Magnometer/Heading"
},
"pidTuningGps": {
"message": "GPS Navigation"
},
"pidTuningLevelP": {
"message": "Strength"
},
"pidTuningLevelI": {
"message": "LPF cutoff (Hz)"
},
"pidTuningLevelD": {
"message": "Transition (Horizon)"
},
"pidTuningLevelHelp": {
"message": "The values below change the behaviour of the ANGLE and HORIZON flight modes. Different PID controllers handle the LEVEL values differently. Please check the documentation."
},
"configHelp2": { "configHelp2": {
"message": "Arbitrary board rotation in degrees, to allow mounting it sideways / upside down / rotated etc. When running external sensors, use the sensor alignments (Gyro, Acc, Mag) to define sensor position independent from board orientation. " "message": "Arbitrary board rotation in degrees, to allow mounting it sideways / upside down / rotated etc. When running external sensors, use the sensor alignments (Gyro, Acc, Mag) to define sensor position independent from board orientation. "
}, },
@ -2254,12 +2380,6 @@
"accLpfCutoffFrequency": { "accLpfCutoffFrequency": {
"message": "Accelerometer LPF cutoff frequency" "message": "Accelerometer LPF cutoff frequency"
}, },
"dtermLpfCutoffFrequency": {
"message": "D-term LPF cutoff frequency"
},
"dtermLpfCutoffFrequencyHelp": {
"message": "Lowpass cutoff filter for Dterm for all PID controllers"
},
"yawLpfCutoffFrequency": { "yawLpfCutoffFrequency": {
"message": "Yaw LPF cutoff frequency" "message": "Yaw LPF cutoff frequency"
}, },
@ -3835,18 +3955,6 @@
"itermRelaxHelp": { "itermRelaxHelp": {
"message": "Defines Iterm relaxation algorithm activation. PR mean it's active on Roll and Pitch axis. PRY is active also on Yaw." "message": "Defines Iterm relaxation algorithm activation. PR mean it's active on Roll and Pitch axis. PRY is active also on Yaw."
}, },
"itermRelaxCutoff": {
"message": "Iterm Relax Cutoff Frequency"
},
"itermRelaxCutoffHelp": {
"message": "Lower values open a longer time window for Iterm Relax to work on and stronger Iterm suppression. Higher values shortens the time windows and reduces suppression."
},
"gyro_main_lpf_hz": {
"message": "Main gyro filter cutoff frequency"
},
"gyro_main_lpf_hz_help": {
"message": "Higher values offer lower delay but more noise. Lower values offer less noise, but more dalay on the gyro processing"
},
"gyro_main_lpf_type": { "gyro_main_lpf_type": {
"message": "Gyro LPF type" "message": "Gyro LPF type"
}, },
@ -3874,81 +3982,9 @@
"tabFilteringAdvanced": { "tabFilteringAdvanced": {
"message": "Other filters" "message": "Other filters"
}, },
"mainFilters": {
"message": "Gyro filters"
},
"rpmFilters": {
"message": "Gyro RPM filters"
},
"dtermFilters": {
"message": "D-term filters"
},
"rpm_gyro_filter_enabled": {
"message": "Gyro RPM filter (requires ESC telemetry)"
},
"rpm_gyro_min_hz": {
"message": "Gyro RPM filter min. frequency"
},
"dTermMechanics": {
"message": "D-term mechanics"
},
"tpaMechanics": {
"message": "Thrust PID attenuation"
},
"fw_level_pitch_trim": {
"message": "Level Trim [deg]"
},
"fw_level_pitch_trim_help": {
"message": "Pitch trim for self-leveling flight modes. In degrees. +5 means airplane nose should be raised 5 deg from level"
},
"fwLevelTrimMechanics": {
"message": "Fixed Wing Level Trim"
},
"d_boost_min": {
"message": "D-Boost Min. Scale"
},
"d_boost_min_help": {
"message": "Defines the max allowed Dterm attenuation during stick acceleration phase. Value 1.0 mean Dterm is not attenuate. 0.5 mean it's allowed to shrink by half. Lower values result in faster response during fast stick movement."
},
"d_boost_max": {
"message": "D-Boost Max. Scale"
},
"d_boost_max_help": {
"message": "Defines the maximum Dterm boost when maximum angular acceleration is reached. 1.0 means D-Boost is disabled, 2.0 means Dterm is allowed to grow by 100%. Values between 1.5 and 1.7 are usually the sweet spot."
},
"d_boost_max_at_acceleration": {
"message": "Top D-Boost at acceleration [dps^2]"
},
"d_boost_max_at_acceleration_help": {
"message": "D-Boost is fully active when angular acceleration (either detected by gyro or rate target) reached given acceleration. Between 0 and this value, D-Boost factor is scaled lineary"
},
"d_boost_gyro_delta_lpf_hz": {
"message": "D-Boost gyro LPF"
},
"d_boost_gyro_delta_lpf_hz_help": {
"message": "Should be set to the frequency of propeller wash oscillations. 5-inch quads work best at around 80Hz, 7-inch quads at around 50Hz"
},
"iTermMechanics": {
"message": "I-term mechanics"
},
"gps_map_center": { "gps_map_center": {
"message": "Center" "message": "Center"
}, },
"antigravityGain": {
"message": "Antigravity Gain"
},
"antigravityAccelerator": {
"message": "Antigravity Accelerator"
},
"antigravityCutoff": {
"message": "Antigravity Cutoff Frequency"
},
"itermBankAngleFreeze": {
"message": "Yaw Iterm freeze bank angle"
},
"itermBankAngleFreezeHelp": {
"message": "Freeze yaw Iterm when plane is banked more than this many degrees. This helps to stop the rudder from counteracting turn. 0 disables this feature. Applies only to fixed wing aircraft."
},
"ouptputsConfiguration": { "ouptputsConfiguration": {
"message": "Configuration" "message": "Configuration"
}, },

View file

@ -1445,7 +1445,6 @@ var FC = {
}, },
isBatteryProfileParameter: function(paramName) { isBatteryProfileParameter: function(paramName) {
return ($.inArray(paramName,this.getBatteryProfileParameters()) != -1); return ($.inArray(paramName,this.getBatteryProfileParameters()) != -1);
//return true;
}, },
getControlProfileParameters: function () { getControlProfileParameters: function () {
return [ return [

View file

@ -340,13 +340,20 @@ var Settings = (function () {
// Update the step, min, and max; as we have the multiplier here. // Update the step, min, and max; as we have the multiplier here.
if (element.attr('type') == 'number') { if (element.attr('type') == 'number') {
let step = element.attr('step') || 1;
let decimalPlaces = 0; let decimalPlaces = 0;
if (multiplier > 1) {
element.attr('step', '0.01'); step = step / multiplier;
decimalPlaces = 2;
} else { if (step < 1) {
element.attr('step', (multiplier < 1) ? (multiplier * 100).toFixed(0) : '1'); decimalPlaces = step.toString().length - step.toString().indexOf(".") - 1;
if (parseInt(step.toString().slice(-1)) > 1 ) {
decimalPlaces--;
}
step = 1 / Math.pow(10, decimalPlaces);
} }
element.attr('step', step.toFixed(decimalPlaces));
if (multiplier != 'FAHREN') { if (multiplier != 'FAHREN') {
element.attr('min', (element.attr('min') / multiplier).toFixed(decimalPlaces)); element.attr('min', (element.attr('min') / multiplier).toFixed(decimalPlaces));
element.attr('max', (element.attr('max') / multiplier).toFixed(decimalPlaces)); element.attr('max', (element.attr('max') / multiplier).toFixed(decimalPlaces));

24
main.js
View file

@ -71,6 +71,8 @@ $(document).ready(function () {
result.show_profile_parameters = 1; result.show_profile_parameters = 1;
} }
globalSettings.showProfileParameters = result.show_profile_parameters; globalSettings.showProfileParameters = result.show_profile_parameters;
// Update CSS on select boxes
updateProfilesSelectColours();
}); });
// Resets the OSD units used by the unit coversion when the FC is disconnected. // Resets the OSD units used by the unit coversion when the FC is disconnected.
@ -341,13 +343,7 @@ $(document).ready(function () {
}); });
// Update CSS on select boxes // Update CSS on select boxes
if (globalSettings.showProfileParameters) { updateProfilesSelectColours();
$('.dropdown-dark #profilechange').addClass('showProfileParams');
$('.dropdown-dark #batteryprofilechange').addClass('showProfileParams');
} else {
$('.dropdown-dark #profilechange').removeClass('showProfileParams');
$('.dropdown-dark #batteryprofilechange').removeClass('showProfileParams');
}
// Horrible way to reload the tab // Horrible way to reload the tab
const activeTab = $('#tabs li.active'); const activeTab = $('#tabs li.active');
@ -361,7 +357,7 @@ $(document).ready(function () {
$('#proxyurl').val(globalSettings.proxyURL); $('#proxyurl').val(globalSettings.proxyURL);
$('#proxylayer').val(globalSettings.proxyLayer); $('#proxylayer').val(globalSettings.proxyLayer);
$('#showProfileParameters').prop('checked', globalSettings.showProfileParameters); $('#showProfileParameters').prop('checked', globalSettings.showProfileParameters);
// Set the value of the unit type // Set the value of the unit type
// none, OSD, imperial, metric // none, OSD, imperial, metric
$('#ui-unit-type').change(function () { $('#ui-unit-type').change(function () {
@ -537,7 +533,7 @@ $(document).ready(function () {
profile_e.change(function () { profile_e.change(function () {
var profile = parseInt($(this).val()); var profile = parseInt($(this).val());
MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [profile], false, function () { MSP.send_message(MSPCodes.MSP_SELECT_SETTING, [profile], false, function () {
GUI.log(chrome.i18n.getMessage('pidTuningLoadedProfile', [profile + 1])); GUI.log(chrome.i18n.getMessage('pidTuning_LoadedProfile', [profile + 1]));
updateActivatedTab(); updateActivatedTab();
}); });
}); });
@ -571,6 +567,16 @@ function get_osd_settings() {
}); });
} }
function updateProfilesSelectColours() {
if (globalSettings.showProfileParameters) {
$('.dropdown-dark #profilechange').addClass('showProfileParams');
$('.dropdown-dark #batteryprofilechange').addClass('showProfileParams');
} else {
$('.dropdown-dark #profilechange').removeClass('showProfileParams');
$('.dropdown-dark #batteryprofilechange').removeClass('showProfileParams');
}
}
function catch_startup_time(startTime) { function catch_startup_time(startTime) {
var endTime = new Date().getTime(), var endTime = new Date().getTime(),
timeSpent = endTime - startTime; timeSpent = endTime - startTime;

View file

@ -307,7 +307,7 @@
border-bottom: 0; border-bottom: 0;
} }
.tab-pid_tuning .rates_number { .tab-pid_tuning .pidTuning_number {
clear: left; clear: left;
padding: 4px; padding: 4px;
float: left; float: left;

View file

@ -3,40 +3,40 @@
<div class="tab-pid_tuning toolbar_fixed_bottom"> <div class="tab-pid_tuning toolbar_fixed_bottom">
<div class="content_wrapper"> <div class="content_wrapper">
<div class="tab_title subtab__header"> <div class="tab_title subtab__header">
<span class="subtab__header_label subtab__header_label--current" for="subtab-pid">PID gains</span> <span class="subtab__header_label subtab__header_label--current" for="subtab-pid" data-i18n="pidTuning_PIDgains"></span>
<span class="subtab__header_label" for="subtab-rates">Rates & Expo</span> <span class="subtab__header_label" for="subtab-rates" data-i18n="pidTuning_RatesAndExpo"></span>
<span class="subtab__header_label" for="subtab-filters">Filters</span> <span class="subtab__header_label" for="subtab-filters" data-i18n="pidTuning_Filters"></span>
<span class="subtab__header_label" for="subtab-mechanics">Mechanics</span> <span class="subtab__header_label" for="subtab-mechanics" data-i18n="pidTuning_Mechanics"></span>
</div> </div>
<div id="subtab-pid" class="subtab__content subtab__content--current"> <div id="subtab-pid" class="subtab__content subtab__content--current">
<div class="cf_column right" style="margin-top: -6px;"> <div class="cf_column right" style="margin-top: -6px;">
<div class="default_btn show"> <div class="default_btn show">
<a href="#" id="showAllPids">Show all PIDs</a> <a href="#" id="showAllPids" data-i18n="pidTuning_ShowAllPIDs"></a>
</div> </div>
<div class="default_btn resetbt"> <div class="default_btn resetbt">
<a href="#" id="resetDefaults">Select New Defaults</a> <a href="#" id="resetDefaults" data-i18n="pidTuning_SelectNewDefaults"></a>
</div> </div>
<div class="default_btn resetbt"> <div class="default_btn resetbt">
<a href="#" id="resetPIDs">Reset PID Controller</a> <a href="#" id="resetPIDs" data-i18n="pidTuning_ResetPIDController"></a>
</div> </div>
</div> </div>
<div class="tab_subtitle" style="margin-top: 1em;">PID gains</div> <div class="tab_subtitle" style="margin-top: 1em;" data-i18n="pidTuning_PIDgains"></div>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="cf_column pid-section"> <div class="cf_column pid-section">
<div class="gui_box grey"> <div class="gui_box grey">
<table class="pid_titlebar"> <table class="pid_titlebar">
<tr> <tr>
<th class="name" data-i18n="pidTuningName"></th> <th class="name" data-i18n="pidTuning_Name"></th>
<th class="proportional" data-i18n="pidTuningProportional"></th> <th class="proportional" data-i18n="pidTuning_Proportional"></th>
<th class="integral" data-i18n="pidTuningIntegral"></th> <th class="integral" data-i18n="pidTuning_Integral"></th>
<th class="derivative" data-i18n="pidTuningDerivative"></th> <th class="derivative" data-i18n="pidTuning_Derivative"></th>
<th class="feedforward" data-i18n="pidTuningFeedForward"></th> <th class="feedforward" data-i18n="pidTuning_FeedForward"></th>
</tr> </tr>
</table> </table>
<table id="pid_main" class="pid_tuning"> <table id="pid_main" class="pid_tuning">
<tr> <tr>
<th colspan="5"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuningBasic"></div> <div class="pid_mode" data-i18n="pidTuning_Basic"></div>
</th> </th>
</tr> </tr>
<tr class="ROLL" data-pid-bank-position="0"> <tr class="ROLL" data-pid-bank-position="0">
@ -67,7 +67,7 @@
<table id="pid_baro" class="pid_tuning"> <table id="pid_baro" class="pid_tuning">
<tr> <tr>
<th colspan="5"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuningAltitude"></div> <div class="pid_mode" data-i18n="pidTuning_Altitude"></div>
</th> </th>
</tr> </tr>
<tr class="ALT" data-pid-bank-position="3"> <tr class="ALT" data-pid-bank-position="3">
@ -90,7 +90,7 @@
<table id="pid_mag" class="pid_tuning"> <table id="pid_mag" class="pid_tuning">
<tr> <tr>
<th colspan="5"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuningMag"></div> <div class="pid_mode" data-i18n="pidTuning_Mag"></div>
</th> </th>
</tr> </tr>
<tr class="MAG" data-pid-bank-position="8"> <tr class="MAG" data-pid-bank-position="8">
@ -113,7 +113,7 @@
<table id="pid_gps" class="pid_tuning"> <table id="pid_gps" class="pid_tuning">
<tr> <tr>
<th colspan="5"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuningGps"></div> <div class="pid_mode" data-i18n="pidTuning_GPS"></div>
</th> </th>
</tr> </tr>
<tr class="Pos" data-pid-bank-position="4"> <tr class="Pos" data-pid-bank-position="4">
@ -148,12 +148,12 @@
<th colspan="4"> <th colspan="4">
<div class="pid_mode borderleft"> <div class="pid_mode borderleft">
<div class="textleft"> <div class="textleft">
<div class="pidTuningLevel" data-i18n="pidTuningLevel"></div> <div class="pidTuningLevel" data-i18n="pidTuning_Level"></div>
<div class="helpicon cf_tip" data-i18n_title="pidTuningLevelHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_LevelHelp"></div>
</div> </div>
<div class="pids" data-i18n="pidTuningLevelP"></div> <div class="pids" data-i18n="pidTuning_LevelP"></div>
<div class="pids" data-i18n="pidTuningLevelI"></div> <div class="pids" data-i18n="pidTuning_LevelI"></div>
<div class="pids" data-i18n="pidTuningLevelD"></div> <div class="pids" data-i18n="pidTuning_LevelD"></div>
</div> </div>
</th> </th>
</tr> </tr>
@ -170,78 +170,78 @@
</div> </div>
<div id="subtab-rates" class="subtab__content"> <div id="subtab-rates" class="subtab__content">
<div class="tab_subtitle" style="margin-top: 1em;">Rates & Expo</div> <div class="tab_subtitle" style="margin-top: 1em;" data-i18n="pidTuning_RatesAndExpo"></div>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="cf_column"> <div class="cf_column">
<table class="settings-table settings-table--inav"> <table class="settings-table settings-table--inav">
<tbody> <tbody>
<tr> <tr>
<th class="roll" data-i18n="pidTuningRollRate"></th> <th class="roll" data-i18n="pidTuning_RollRate"></th>
<td class="roll"> <td class="roll">
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="roll_rate" data-unit="decadegps" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="roll_rate" data-unit="decadegps" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="pitch" data-i18n="pidTuningPitchRate"></th> <th class="pitch" data-i18n="pidTuning_PitchRate"></th>
<td class="pitch"> <td class="pitch">
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="pitch_rate" data-unit="decadegps" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="pitch_rate" data-unit="decadegps" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="yaw" data-i18n="pidTuningYawRate"></th> <th class="yaw" data-i18n="pidTuning_YawRate"></th>
<td class="yaw"> <td class="yaw">
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="yaw_rate" data-unit="decadegps" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="yaw_rate" data-unit="decadegps" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="pidTuningRollAndPitchExpo"></th> <th data-i18n="pidTuning_RollAndPitchExpo"></th>
<td> <td>
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="rc_expo" data-unit="percent" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="rc_expo" data-unit="percent" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="pidTuningYawExpo"></th> <th data-i18n="pidTuning_YawExpo"></th>
<td> <td>
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="rc_yaw_expo" data-unit="percent" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="rc_yaw_expo" data-unit="percent" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="pidTuningMaxRollAngle"></th> <th data-i18n="pidTuning_MaxRollAngle"></th>
<td> <td>
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="max_angle_inclination_rll" data-unit="decideg-lrg" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="max_angle_inclination_rll" data-unit="decideg-lrg" /></div>
<div class="helpicon cf_tip" data-i18n_title="pidTuningMaxRollAngleHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_MaxRollAngleHelp"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="pidTuningMaxPitchAngle"></th> <th data-i18n="pidTuning_MaxPitchAngle"></th>
<td> <td>
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="max_angle_inclination_pit" data-unit="decideg-lrg" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="max_angle_inclination_pit" data-unit="decideg-lrg" /></div>
<div class="helpicon cf_tip" data-i18n_title="pidTuningMaxPitchAngleHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_MaxPitchAngleHelp"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="magHoldYawRate"></th> <th data-i18n="pidTuning_magHoldYawRate"></th>
<td> <td>
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="heading_hold_rate_limit" data-unit="degps" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="heading_hold_rate_limit" data-unit="degps" /></div>
<div class="helpicon cf_tip" data-i18n_title="pidTuningMagHoldYawRateHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_MagHoldYawRateHelp"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="roll" data-i18n="pidTuningManualRollRate"></th> <th class="roll" data-i18n="pidTuning_ManualRollRate"></th>
<td class="roll"> <td class="roll">
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="manual_roll_rate" data-unit="percent" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="manual_roll_rate" data-unit="percent" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="pitch" data-i18n="pidTuningManualPitchRate"></th> <th class="pitch" data-i18n="pidTuning_ManualPitchRate"></th>
<td class="pitch"> <td class="pitch">
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="manual_pitch_rate" data-unit="percent" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="manual_pitch_rate" data-unit="percent" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th class="yaw" data-i18n="pidTuningManualYawRate"></th> <th class="yaw" data-i18n="pidTuning_ManualYawRate"></th>
<td class="yaw"> <td class="yaw">
<div class="rates_number"><input type="number" class="rate-tpa_input" data-setting="manual_yaw_rate" data-unit="percent" /></div> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="manual_yaw_rate" data-unit="percent" /></div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -250,36 +250,36 @@
</div> </div>
<div id="subtab-filters" class="subtab__content"> <div id="subtab-filters" class="subtab__content">
<div class="tab_subtitle" data-i18n="mainFilters" style="margin-top: 1em;"></div> <div class="tab_subtitle" data-i18n="pidTuning_mainFilters" style="margin-top: 1em;"></div>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="cf_column"> <div class="cf_column">
<table class="settings-table settings-table--filtering"> <table class="settings-table settings-table--filtering">
<tbody> <tbody>
<tr> <tr>
<th data-i18n="gyro_main_lpf_hz"></th> <th data-i18n="pidTuning_gyro_main_lpf_hz"></th>
<td> <td>
<input data-setting="gyro_main_lpf_hz" type="number" class="rate-tpa_input" /> <div class="pidTuning_number"><input data-setting="gyro_main_lpf_hz" type="number" class="rate-tpa_input" /></div>
<div class="helpicon cf_tip" data-i18n_title="gyro_main_lpf_hz_help"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_gyro_main_lpf_hz_help"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th>Matrix Filter Min Frequency</th> <th data-i18n="pidTuning_MatrixFilterMinFrequency"></th>
<td> <td>
<input data-setting="dynamic_gyro_notch_min_hz" type="number" class="rate-tpa_input" /> <div class="pidTuning_number"><input data-setting="dynamic_gyro_notch_min_hz" type="number" class="rate-tpa_input" /></div>
<div class="helpicon cf_tip" title="Minimum frequency for the Matrix Filter. Value should depends on propeller size. 150Hz work fine with 5&quot; and smaller. For 7&quot; and above lower even below 100Hz."></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_MatrixFilterMinFrequencyHelp"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th>Matrix Filter Q Factor</th> <th data-i18n="pidTuning_MatrixFilterQFactor"></th>
<td> <td>
<input data-setting="dynamic_gyro_notch_q" type="number" class="rate-tpa_input" /> <div class="pidTuning_number"><input data-setting="dynamic_gyro_notch_q" type="number" class="rate-tpa_input" /></div>
<div class="helpicon cf_tip" title="The higher value, the higher selectivity of the Matrix Filter. Values between 150 and 300 are recommended"></div> <div class="helpicon cf_tip" title=""></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th>Unicorn Filter Q Factor</th> <th data-i18n="pidTuning_UnicornFilterQFactor"></th>
<td> <td>
<input data-setting="setpoint_kalman_q" type="number" class="rate-tpa_input" /> <div class="pidTuning_number"><input data-setting="setpoint_kalman_q" type="number" class="rate-tpa_input" /></div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -287,15 +287,15 @@
</div> </div>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="tab_subtitle" data-i18n="dtermFilters" style="margin-top: 1em;"></div> <div class="tab_subtitle" data-i18n="pidTuning_dtermFilters" style="margin-top: 1em;"></div>
<div class="cf_column"> <div class="cf_column">
<table class="settings-table settings-table--filtering"> <table class="settings-table settings-table--filtering">
<tbody> <tbody>
<tr> <tr>
<th data-i18n="dtermLpfCutoffFrequency"></th> <th data-i18n="pidTuning_dtermLpfCutoffFrequency"></th>
<td> <td>
<input data-setting="dterm_lpf_hz" type="number" class="rate-tpa_input" /> <div class="pidTuning_number"><input data-setting="dterm_lpf_hz" type="number" class="rate-tpa_input" /></div>
<div class="helpicon cf_tip" data-i18n_title="dtermLpfCutoffFrequencyHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_dtermLpfCutoffFrequencyHelp"></div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -303,20 +303,20 @@
</div> </div>
<div class="clear-both requires-v2_4"></div> <div class="clear-both requires-v2_4"></div>
<div class="tab_subtitle requires-v2_4" data-i18n="rpmFilters" style="margin-top: 1em;"></div> <div class="tab_subtitle requires-v2_4" data-i18n="pidTuning_rpmFilters" style="margin-top: 1em;"></div>
<div class="cf_column requires-v2_4"> <div class="cf_column requires-v2_4">
<table class="settings-table settings-table--filtering"> <table class="settings-table settings-table--filtering">
<tbody> <tbody>
<tr> <tr>
<th data-i18n="rpm_gyro_filter_enabled"></th> <th data-i18n="pidTuning_rpm_gyro_filter_enabled"></th>
<td> <td>
<select data-setting="rpm_gyro_filter_enabled" /> <div class="pidTuning_number"><input type="checkbox" class="toggle update_preview" data-setting="rpm_gyro_filter_enabled" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="rpm_gyro_min_hz"></th> <th data-i18n="pidTuning_rpm_gyro_min_hz"></th>
<td> <td>
<input data-setting="rpm_gyro_min_hz" type="number" class="rate-tpa_input" /> <div class="pidTuning_number"><input data-setting="rpm_gyro_min_hz" type="number" class="rate-tpa_input" /></div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -326,40 +326,40 @@
<div id="subtab-mechanics" class="subtab__content"> <div id="subtab-mechanics" class="subtab__content">
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="tab_subtitle" data-i18n="iTermMechanics" style="margin-top: 1em;"></div> <div class="tab_subtitle" data-i18n="pidTuning_ITermMechanics" style="margin-top: 1em;"></div>
<div class="cf_column"> <div class="cf_column">
<table class="settings-table settings-table--filtering"> <table class="settings-table settings-table--filtering">
<tbody> <tbody>
<tr> <tr>
<th data-i18n="itermRelaxCutoff"></th> <th data-i18n="pidTuning_itermRelaxCutoff"></th>
<td> <td>
<input data-setting="mc_iterm_relax_cutoff" class="rate-tpa_input" /> <div class="pidTuning_number"><input type="number" data-setting="mc_iterm_relax_cutoff" class="rate-tpa_input" /></div>
<div class="helpicon cf_tip" data-i18n_title="itermRelaxCutoffHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_itermRelaxCutoffHelp"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="antigravityGain"></th> <th data-i18n="pidTuning_antigravityGain"></th>
<td> <td>
<input class="rate-tpa_input" data-setting="antigravity_gain" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="antigravity_gain" data-step="0.001" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="antigravityAccelerator"></th> <th data-i18n="pidTuning_antigravityAccelerator"></th>
<td> <td>
<input class="rate-tpa_input" data-setting="antigravity_accelerator" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="antigravity_accelerator" data-step="0.001" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="antigravityCutoff"></th> <th data-i18n="pidTuning_antigravityCutoff"></th>
<td> <td>
<input class="rate-tpa_input" data-setting="antigravity_cutoff_lpf_hz" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="antigravity_cutoff_lpf_hz" /></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="itermBankAngleFreeze"></th> <th data-i18n="pidTuning_itermBankAngleFreeze"></th>
<td> <td>
<input class="rate-tpa_input" data-setting="fw_yaw_iterm_freeze_bank_angle" type="number" step="1" min="0" max="90" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="fw_yaw_iterm_freeze_bank_angle" /></div>
<div class="helpicon cf_tip" data-i18n_title="itermBankAngleFreezeHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_itermBankAngleFreezeHelp"></div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -367,36 +367,36 @@
</div> </div>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="tab_subtitle" data-i18n="dTermMechanics" style="margin-top: 1em;"></div> <div class="tab_subtitle" data-i18n="pidTuning_dTermMechanics" style="margin-top: 1em;"></div>
<div class="cf_column"> <div class="cf_column">
<table class="settings-table settings-table--filtering"> <table class="settings-table settings-table--filtering">
<tbody> <tbody>
<tr> <tr>
<th data-i18n="d_boost_min"></th> <th data-i18n="pidTuning_d_boost_min"></th>
<td> <td>
<input data-setting="d_boost_min" class="rate-tpa_input" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="d_boost_min" data-step="0.001" /></div>
<div class="helpicon cf_tip" data-i18n_title="d_boost_min_help"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_d_boost_min_help"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="d_boost_max"></th> <th data-i18n="pidTuning_d_boost_max"></th>
<td> <td>
<input data-setting="d_boost_max" class="rate-tpa_input" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="d_boost_max" data-step="0.001" /></div>
<div class="helpicon cf_tip" data-i18n_title="d_boost_max_help"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_d_boost_max_help"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="d_boost_max_at_acceleration"></th> <th data-i18n="pidTuning_d_boost_max_at_acceleration"></th>
<td> <td>
<input data-setting="d_boost_max_at_acceleration" class="rate-tpa_input" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="d_boost_max_at_acceleration" data-step="0.001" /></div>
<div class="helpicon cf_tip" data-i18n_title="d_boost_max_at_acceleration_help"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_d_boost_max_at_acceleration_help"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="d_boost_gyro_delta_lpf_hz"></th> <th data-i18n="pidTuning_d_boost_gyro_delta_lpf_hz"></th>
<td> <td>
<input data-setting="d_boost_gyro_delta_lpf_hz" class="rate-tpa_input" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="d_boost_gyro_delta_lpf_hz" /></div>
<div class="helpicon cf_tip" data-i18n_title="d_boost_gyro_delta_lpf_hz_help"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_d_boost_gyro_delta_lpf_hz_help"></div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -404,37 +404,35 @@
</div> </div>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="tab_subtitle" data-i18n="tpaMechanics" style="margin-top: 1em;"></div> <div class="tab_subtitle" data-i18n="pidTuning_tpaMechanics" style="margin-top: 1em;"></div>
<div class="cf_column" style="margin-top:1em;"> <div class="cf_column" style="margin-top:1em;">
<table class="settings-table settings-table--misc"> <table class="settings-table settings-table--misc">
<tr> <tr>
<th data-i18n="pidTuningTPA"></th> <th data-i18n="pidTuning_TPA"></th>
<td> <td>
<input type="number" class="rate-tpa_input" id="tpa" step="1" min="0" max="100" /> <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="tpa_rate" data-unit="percent" /></div>
%
<div class="helpicon cf_tip" data-i18n_title="pidTuningTPAHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuningTPAHelp"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
<th data-i18n="pidTuningTPABreakPoint"></th> <th data-i18n="pidTuning_TPABreakPoint"></th>
<td> <td>
<input type="number" class="rate-tpa_input" id="tpa-breakpoint" step="10" min="1000" <div class="pidTuning_number"><input type="number" class="rate-tpa_input" data-setting="tpa_breakpoint" /></div>
max="2000" />
<div class="helpicon cf_tip" data-i18n_title="pidTuningTPABreakPointHelp"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuningTPABreakPointHelp"></div>
</td> </td>
</tr> </tr>
</table> </table>
</div> </div>
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="tab_subtitle" data-i18n="fwLevelTrimMechanics" style="margin-top: 1em;"></div> <div class="tab_subtitle" data-i18n="pidTuning_fwLevelTrimMechanics" style="margin-top: 1em;"></div>
<div class="cf_column"> <div class="cf_column">
<table class="settings-table settings-table--filtering"> <table class="settings-table settings-table--filtering">
<tbody> <tbody>
<tr> <tr>
<th data-i18n="fw_level_pitch_trim"></th> <th data-i18n="pidTuning_fw_level_pitch_trim"></th>
<td> <td>
<input data-setting="fw_level_pitch_trim" class="rate-tpa_input" /> <div class="pidTuning_number"><input class="rate-tpa_input" data-setting="fw_level_pitch_trim" data-unit="deg" /></div>
<div class="helpicon cf_tip" data-i18n_title="fw_level_pitch_trim_help"></div> <div class="helpicon cf_tip" data-i18n_title="pidTuning_fw_level_pitch_trim_help"></div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -445,10 +443,10 @@
<div class="clear-both"></div> <div class="clear-both"></div>
<div class="content_toolbar"> <div class="content_toolbar">
<div class="btn save_btn"> <div class="btn save_btn">
<a class="update" href="#" data-i18n="pidTuningButtonSave"></a> <a class="update" href="#" data-i18n="pidTuning_ButtonSave"></a>
</div> </div>
<div class="btn refresh_btn"> <div class="btn refresh_btn">
<a class="refresh" href="#" data-i18n="pidTuningButtonRefresh"></a> <a class="refresh" href="#" data-i18n="pidTuning_ButtonRefresh"></a>
</div> </div>
</div> </div>
</div> </div>