10.3.x-maintenance
U-DESKTOP-12PPI61\boris.bozic 2016-08-23 01:16:40 +02:00
commit 7f1848aeb5
4 changed files with 621 additions and 423 deletions

View File

@ -776,8 +776,11 @@
"pidTuningUpgradeFirmwareToChangePidController": {
"message": "<span style=\"color: red\">Changing PID controller disabled - you can change it via the CLI.</span> You have firmware with API version <span style=\"color: red\">$1</span>, but this functionality requires requires <span style=\"color: #ffbb00\">$2</span>."
},
"pidTuningName": {
"message": "Name"
"pidTuningSubTabPid": {
"message": "PID Settings"
},
"pidTuningSubTabFilter": {
"message": "Filter Settings"
},
"pidTuningShowAllPids": {
"message": "Show all PIDs"
@ -1623,17 +1626,53 @@
"pidTuningLevelHelp": {
"message": "The values below change the behaviour of the ANGLE and HORIZON flight modes. Different PID controllers handle the values differently. Please check the documentation."
},
"pidTuningLfpFilters": {
"message": "LFP Filters"
"pidTuningNonProfileFilterSettings": {
"message": "Profile independent Filter Settings"
},
"pidTuningGyro": {
"message": "Gyro Soft (Hz)"
"pidTuningGyroLowpassFrequency": {
"message": "Gyro Soft Lowpass Frequency (Hz)"
},
"pidTuningDTerm": {
"message": "D Term (Hz)"
"pidTuningGyroLowpassFrequencyHelp": {
"message": "Gyro Soft Lowpass Frequency (Hz)"
},
"pidTuningYaw": {
"message": "Yaw (Hz)"
"pidTuningGyroNotchFrequency": {
"message": "Gyro Notch Filter Frequency (Hz)"
},
"pidTuningGyroNotchFrequencyHelp": {
"message": "Gyro Notch Filter Frequency (Hz)"
},
"pidTuningGyroNotchCutoff": {
"message": "Gyro Notch Filter Cutoff Frequency (Hz)"
},
"pidTuningGyroNotchCutoffHelp": {
"message": "Gyro Notch Filter Cutoff Frequency (Hz)"
},
"pidTuningFilterSettings": {
"message": "Filter Settings"
},
"pidTuningDTermLowpassFrequency": {
"message": "D Term Lowpass Frequency (Hz)"
},
"pidTuningDTermLowpassFrequencyHelp": {
"message": "D Term Lowpass Frequency (Hz)"
},
"pidTuningDTermNotchFrequency": {
"message": "D Term Notch Filter Frequency (Hz)"
},
"pidTuningDTermNotchFrequencyHelp": {
"message": "D Term Notch Filter Frequency (Hz)"
},
"pidTuningDTermNotchCutoff": {
"message": "D Term Notch Filter Cutoff (Hz)"
},
"pidTuningDTermNotchCutoffHelp": {
"message": "D Term Notch Filter Cutoff (Hz)"
},
"pidTuningYawLowpassFrequency": {
"message": "Yaw Lowpass Frequency (Hz)"
},
"pidTuningYawLowpassFrequencyHelp": {
"message": "Yaw Lowpass Frequency (Hz)"
},
"pidTuningVbatPidCompensation": {
"message": "Vbat PID Compensation"

View File

@ -242,7 +242,7 @@
padding: 5px;
text-align: left;
border-right: 1px solid #ccc;
width: calc(100% -1px);
width: calc(100% - 1px);
}
.tab-pid_tuning .pid_titlebar th:first-child {
@ -305,6 +305,33 @@
border-radius: 0px;
}
.tab-pid_tuning .tab_container {
float: top;
width: 300px;
height: 20px;
border-right-width: 0px;
}
.tab-pid_tuning .tab_container td {
background-color: #2e2e2e;
}
.tab-pid_tuning .tab_container td a {
color: #999999;
}
.tab-pid_tuning .tab_container td.active {
background-color: #ffbb00;
color: #000;
transition: none;
}
.tab-pid_tuning .tab_container td.active a {
background-color: #ffbb00;
color: #000;
text-shadow: 0px 1px rgba(255, 255, 255, 0.45);
}
.tab-pid_tuning .single-field {
display: inline-block;
margin-bottom: 10px;
@ -374,7 +401,7 @@
border-bottom: 1px solid #ccc;
color: #828282;
/* font-family: 'open_sans', Arial; */
background-image: linear-gradient(-45deg, rgba(255, 255, 255, .2) 10%, transparent 10%, transparent 20%, rgba(255, 255, 255, .2) 20%, rgba(255, 255, 255, .2) 30%, transparent 30%, transparent 40%, rgba(255, 255, 255, .2) 40%, rgba(255, 255, 255, .2) 50%, transparent 50%, transparent 60%, rgba(255, 255, 255, .2) 60%, rgba(255, 255, 255, .2) 70%, transparent 70%, transparent 80%, rgba(255, 255, 255, .2) 80%, rgba(255, 255, 255, .2) 90%, transparent 90%, transparent 100%, rgba(255, 255, 255, .2) 100%, transparent);
background-image: linear-gradient(315deg, rgba(255, 255, 255, .2) 10%, transparent 10%, transparent 20%, rgba(255, 255, 255, .2) 20%, rgba(255, 255, 255, .2) 30%, transparent 30%, transparent 40%, rgba(255, 255, 255, .2) 40%, rgba(255, 255, 255, .2) 50%, transparent 50%, transparent 60%, rgba(255, 255, 255, .2) 60%, rgba(255, 255, 255, .2) 70%, transparent 70%, transparent 80%, rgba(255, 255, 255, .2) 80%, rgba(255, 255, 255, .2) 90%, transparent 90%, transparent 100%, rgba(255, 255, 255, .2) 100%, transparent);
}
.fancy.header th {
@ -383,7 +410,6 @@
padding-left: 5px;
}
.pid_mode {
width: calc(100% - 5px);
height: 20px;
@ -399,7 +425,7 @@
border-bottom: 1px solid #ccc;
color: #828282;
font-family: 'open_sans', Arial;
background-image: linear-gradient(-45deg, rgba(255, 255, 255, .2) 10%, transparent 10%, transparent 20%,
background-image: linear-gradient(315deg, rgba(255, 255, 255, .2) 10%, transparent 10%, transparent 20%,
rgba(255, 255, 255, .2) 20%, rgba(255, 255, 255, .2) 30%, transparent 30%, transparent 40%,
rgba(255, 255, 255, .2) 40%, rgba(255, 255, 255, .2) 50%, transparent 50%, transparent 60%,
rgba(255, 255, 255, .2) 60%, rgba(255, 255, 255, .2) 70%, transparent 70%, transparent 80%,

View File

@ -4,11 +4,6 @@
<div class="cf_doc_version_bt">
<a id="button-documentation" href="https://github.com/betaflight/betaflight/releases" target="_blank"></a>
</div>
<div class="note" style="margin-bottom: 25px;">
<div class="note_spacer">
<p i18n="tuningHelp"></p>
</div>
</div>
<div class="cf_column">
<div class="profile single-field">
<div class="helpicon cf_tip" i18n_title="pidTuningProfileTip" style="margin-top: 5px;"></div>
@ -50,10 +45,23 @@
</div>
</div>
</div>
<div class="tab_container">
<table>
<tr>
<td class="pid active">
<a href="#" i18n="pidTuningSubTabPid" />
</td>
<td class="filter">
<a href="#" i18n="pidTuningSubTabFilter" />
</td>
</tr>
</table>
</div>
<form name="pid-tuning" id="pid-tuning">
<div class="subtab-pid">
<div class="clear-both"></div>
<div class="cf_column twothird">
<div class="gui_box grey">
<div class="gui_box grey topspacer">
<table class="pid_titlebar">
<tr>
<th class="name" i18n="pidTuningName"></th>
@ -226,30 +234,6 @@
</tr>
</table>
</div>
<div id="pid_filter" class="gui_box grey topspacer pid_tuning">
<table class="pid_titlebar">
<tr>
<th class="third" i18n="pidTuningGyro"></th>
<th class="third" i18n="pidTuningDTerm"></th>
<th class="third" i18n="pidTuningYaw"></th>
</tr>
</table>
<table>
<tr>
<th colspan="3">
<div class="pid_mode">
<div i18n="pidTuningLfpFilters" style="float: left;"> </div>
<div class="helpicon cf_tip" i18n_title="pidTuningFilterTip"></div>
</div>
</th>
</tr>
<tr>
<td class="third"><input type="number" name="gyro" step="1" min="0" max="255" /></td>
<td class="third"><input type="number" name="dterm" step="1" min="0" max="500" /></td>
<td class="third"><input type="number" name="yaw" step="1" min="0" max="500" /></td>
</tr>
</table>
</div>
<div class="gui_box grey topspacer">
<table class="pid_titlebar new_rates">
<tr>
@ -300,7 +284,7 @@
<table class="compensation">
<tr class="delta">
<td>
<select name="delta-select">
<select id="delta-select">
<option value="0" i18n="pidTuningDeltaError"/>
<option value="1" i18n="pidTuningDeltaMeasurement"/>
</select>
@ -338,7 +322,7 @@
</div>
</td>
</tr>
<td><input type="checkbox" name="vbatpidcompensation" class="toggle" /></td>
<td><input type="checkbox" id="vbatpidcompensation" class="toggle" /></td>
<td colspan=2>
<div>
<label for="vbatpidcompensation">
@ -463,6 +447,126 @@
</table>
</div>
</div>
</div>
<div class="subtab-filter" style="display: none;">
<div class="clear-both"></div>
<div class="note topspacer">
<div class="note_spacer">
<p i18n="tuningHelp"></p>
</div>
</div>
<div class="cf_column twothird">
<div class="gui_box grey topspacer pid_filter">
<table class="pid_titlebar new_rates">
<tr>
<th i18n="pidTuningNonProfileFilterSettings"></th>
</tr>
</table>
<table>
<tr>
<td>
<input type="number" class="nonProfile" name="gyroLowpassFrequency" step="1" min="0" max="255"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningGyroLowpassFrequency"></span>
</label>
<div class="helpicon cf_tip" i18n_title="pidTuningGyroLowpassFrequencyHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter">
<td>
<input type="number" class="nonProfile" name="gyroNotchFrequency" step="1" min="0" max="500"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningGyroNotchFrequency"></span>
</label>
<div class="helpicon cf_tip" i18n_title="pidTuningGyroNotchFrequencyHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter">
<td>
<input type="number" class="nonProfile" name="gyroNotchCutoff" step="1" min="0" max="500"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningGyroNotchCutoff"></span>
</label>
<div class="helpicon cf_tip" i18n_title="pidTuningGyroNotchCutoffHelp"></div>
</div>
</td>
</tr>
</table>
</div>
<div class="gui_box grey topspacer pid_filter">
<table class="pid_titlebar new_rates">
<tr>
<th i18n="pidTuningFilterSettings"></th>
</tr>
</table>
<table>
<tr>
<td>
<input type="number" name="dtermLowpassFrequency" step="1" min="0" max="500"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDtermLowpassFrequency"></span>
</label>
<div class="helpicon cf_tip" i18n_title="pidTuningDtermLowpassFrequencyHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter">
<td>
<input type="number" name="dTermNotchFrequency" step="1" min="0" max="500"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDTermNotchFrequency"></span>
</label>
<div class="helpicon cf_tip" i18n_title="pidTuningDTermNotchFrequencyHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter">
<td>
<input type="number" name="dTermNotchCutoff" step="1" min="0" max="500"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDTermNotchCutoff"></span>
</label>
<div class="helpicon cf_tip" i18n_title="pidTuningDTermNotchCutoffHelp"></div>
</div>
</td>
</tr>
<tr>
<td>
<input type="number" name="yawLowpassFrequency" step="1" min="0" max="500"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningYawLowpassFrequency"></span>
</label>
<div class="helpicon cf_tip" i18n_title="pidTuningYawLowpassFrequencyHelp"></div>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</form>
<div class="clear-both"></div>
</div>

View File

@ -59,7 +59,7 @@ TABS.pid_tuning.initialize = function (callback) {
}
if (semver.gte(CONFIG.flightControllerVersion, "2.8.1")) {
$('input[name="vbatpidcompensation"]').prop('checked', ADVANCED_TUNING.vbatPidCompensation !== 0);
$('input[name="#vbatpidcompensation"]').prop('checked', ADVANCED_TUNING.vbatPidCompensation !== 0);
}
if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) {
@ -227,7 +227,6 @@ TABS.pid_tuning.initialize = function (callback) {
$('.pid_tuning input[name="yaw_rate"]').val(RC_tuning.yaw_rate.toFixed(2));
$('.pid_tuning input[name="rc_expo"]').val(RC_tuning.RC_EXPO.toFixed(2));
$('.pid_tuning input[name="rc_yaw_expo"]').val(RC_tuning.RC_YAW_EXPO.toFixed(2));
$('.pid_tuning input[name="rc_rate_yaw"]').val(RC_tuning.rcYawRate.toFixed(2));
$('.throttle input[name="mid"]').val(RC_tuning.throttle_MID.toFixed(2));
$('.throttle input[name="expo"]').val(RC_tuning.throttle_EXPO.toFixed(2));
@ -240,14 +239,25 @@ TABS.pid_tuning.initialize = function (callback) {
$('.pid_tuning input[name="rc_expo"]').attr("rowspan", "3");
}
$('.pid_tuning input[name="gyro"]').val(FILTER_CONFIG.gyro_soft_lpf_hz);
$('.pid_tuning input[name="dterm"]').val(FILTER_CONFIG.dterm_lpf_hz);
$('.pid_tuning input[name="yaw"]').val(FILTER_CONFIG.yaw_lpf_hz);
if (semver.lt(CONFIG.flightControllerVersion, "2.9.0")) {
$('.pid_filter').hide();
if (semver.gte(CONFIG.flightControllerVersion, '2.9.0')) {
$('.pid_tuning input[name="rc_rate_yaw"]').val(RC_tuning.rcYawRate.toFixed(2));
$('.pid_filter input[name="gyroLowpassFrequency"]').val(FILTER_CONFIG.gyro_soft_lpf_hz);
$('.pid_filter input[name="dtermLowpassFrequency"]').val(FILTER_CONFIG.dterm_lpf_hz);
$('.pid_filter input[name="yawLowpassFrequency"]').val(FILTER_CONFIG.yaw_lpf_hz);
} else {
$('.tab-pid_tuning .subtab-filter').hide();
$('.tab-pid_tuning .tab_container').hide();
$('.pid_tuning input[name="rc_rate_yaw"]').hide();
}
if (semver.gte(CONFIG.flightControllerVersion, '3.0.0')) {
$('.pid_filter input[name="gyroNotchFrequency"]').val(FILTER_CONFIG.gyro_soft_notch_hz);
$('.pid_filter input[name="gyroNotchCutoff"]').val(FILTER_CONFIG.gyro_soft_notch_cutoff);
$('.pid_filter input[name="dTermNotchFrequency"]').val(FILTER_CONFIG.dterm_notch_hz);
$('.pid_filter input[name="dTermNotchCutoff"]').val(FILTER_CONFIG.dterm_notch_cutoff);
} else {
$('.pid_filter .newFilter').hide();
}
}
function form_to_pid_and_rc() {
@ -256,7 +266,7 @@ TABS.pid_tuning.initialize = function (callback) {
}
if (semver.gte(CONFIG.flightControllerVersion, "2.8.1")) {
ADVANCED_TUNING.vbatPidCompensation = $('input[name="vbatpidcompensation"]').is(':checked') ? 1 : 0;
ADVANCED_TUNING.vbatPidCompensation = $('input[name="#vbatpidcompensation"]').is(':checked') ? 1 : 0;
}
if (semver.gte(CONFIG.flightControllerVersion, "2.8.2")) {
@ -346,9 +356,16 @@ TABS.pid_tuning.initialize = function (callback) {
RC_tuning.dynamic_THR_PID = parseFloat($('.tpa input[name="tpa"]').val());
RC_tuning.dynamic_THR_breakpoint = parseInt($('.tpa input[name="tpa-breakpoint"]').val());
FILTER_CONFIG.gyro_soft_lpf_hz = parseInt($('.pid_tuning input[name="gyro"]').val());
FILTER_CONFIG.dterm_lpf_hz = parseInt($('.pid_tuning input[name="dterm"]').val());
FILTER_CONFIG.yaw_lpf_hz = parseInt($('.pid_tuning input[name="yaw"]').val());
FILTER_CONFIG.gyro_soft_lpf_hz = parseInt($('.pid_filter input[name="gyroLowpassFrequency"]').val());
FILTER_CONFIG.dterm_lpf_hz = parseInt($('.pid_filter input[name="dtermLowpassFrequency"]').val());
FILTER_CONFIG.yaw_lpf_hz = parseInt($('.pid_filter input[name="yawLowpassFrequency"]').val());
if (semver.gte(CONFIG.flightControllerVersion, '3.0.0')) {
FILTER_CONFIG.gyro_soft_notch_hz = parseInt($('.pid_filter input[name="gyroNotchFrequency"]').val());
FILTER_CONFIG.gyro_soft_notch_cutoff = parseInt($('.pid_filter input[name="gyroNotchCutoff"]').val());
FILTER_CONFIG.dterm_notch_hz = parseInt($('.pid_filter input[name="dTermNotchFrequency"]').val());
FILTER_CONFIG.dterm_notch_cutoff = parseInt($('.pid_filter input[name="dTermNotchCutoff"]').val());
}
}
function showAllPids() {
@ -360,10 +377,6 @@ TABS.pid_tuning.initialize = function (callback) {
$('#pid_main').show();
if (semver.gte(CONFIG.flightControllerVersion, "2.9.0")) {
$('#pid_filter').show();
}
if (have_sensor(CONFIG.activeSensors, 'acc')) {
$('#pid_accel').show();
$('#pid_level').show();
@ -482,6 +495,22 @@ TABS.pid_tuning.initialize = function (callback) {
self.currentRates.pitch_rate = RC_tuning.roll_pitch_rate;
}
$('.tab-pid_tuning .tab_container .pid').on('click', function () {
$('.tab-pid_tuning .subtab-pid').show();
$('.tab-pid_tuning .subtab-filter').hide();
$('.tab-pid_tuning .tab_container td').removeClass('active');
$(this).addClass('active');
});
$('.tab-pid_tuning .tab_container .filter').on('click', function () {
$('.tab-pid_tuning .subtab-filter').show();
$('.tab-pid_tuning .subtab-pid').hide();
$('.tab-pid_tuning .tab_container td').removeClass('active');
$(this).addClass('active');
});
var showAllButton = $('#showAllPids');
function updatePidDisplay() {