Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PID sliders #1513

Merged
merged 5 commits into from
May 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions _locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -4262,5 +4262,17 @@
},
"BLACKBOX_FEATURE_MOTORS": {
"message": "Motors output"
},
"axisRoll": {
"message": "Roll"
},
"axisPitch": {
"message": "Pitch"
},
"axisYaw": {
"message": "Yaw"
},
"showAdvancedPIDs": {
"message": "Show advanced PID controllers"
}
}
4 changes: 2 additions & 2 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ sources.css = [
'./js/libraries/jbox/jBox.css',
'./node_modules/openlayers/dist/ol.css',
'./src/css/logic.css',
'./src/css/defaults_dialog.css'
'./src/css/defaults_dialog.css',
];

sources.js = [
Expand Down Expand Up @@ -133,7 +133,7 @@ sources.js = [
'./js/waypointCollection.js',
'./js/waypoint.js',
'./node_modules/openlayers/dist/ol.js',
'./js/libraries/plotly-latest.min.js'
'./js/libraries/plotly-latest.min.js',
];

sources.receiverCss = [
Expand Down
6 changes: 6 additions & 0 deletions js/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,10 @@ function generateFilename(prefix, suffix) {
+ zeroPad(date.getSeconds(), 2);

return filename + '.' + suffix;
}

function scaleRangeInt(x, srcMin, srcMax, destMin, destMax) {
let a = (destMax - destMin) * (x - srcMin);
let b = srcMax - srcMin;
return Math.round((a / b) + destMin);
}
2 changes: 1 addition & 1 deletion main.css
Original file line number Diff line number Diff line change
Expand Up @@ -2274,5 +2274,5 @@ ol li {
}

.controlProfileHighlightActive {
background-color: #d5ebfe;
background-color: #d5ebfe !important ;
}
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 51 additions & 0 deletions src/css/tabs/pid_tuning.css
Original file line number Diff line number Diff line change
Expand Up @@ -395,3 +395,54 @@
.settings-table tbody {
/* background: #D6D6D6 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); */
}

.pid-slider-row {
display: flex;
padding: 4px;
}

.pid-slider-row span {
margin-right: 2em;
width: 120px;
line-height: 22px;;
}

.pid-slider-row input[type="number"] {
font-family: 'open_sansregular', 'Segoe UI', Tahoma, sans-serif;
background-color: #fff;
border: 1px solid #ccc;
font-size: 0.95em;
border-radius: 3px;
padding: 0.3em;
margin-right: 2em;
}

.pid-slider-row input[type="range"] {
display: block;
flex-grow: 100;
}

.pid-sliders-axis {
padding: 0.5em;
margin-bottom: 1em;
}

.pid-sliders-axis h3 {
padding: 4px;
}

.pid-sliders-axis[data-axis="roll"] {
background-color: #afe4fe;
}

.pid-sliders-axis[data-axis="pitch"] {
background-color: #C4B5FF;
}

.pid-sliders-axis[data-axis="yaw"] {
background-color: #E6B6F0;
}

#pid-sliders {
margin-bottom: 1em;
}
102 changes: 97 additions & 5 deletions tabs/pid_tuning.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,99 @@
</div>
<div class="tab_subtitle" style="margin-top: 1em;" data-i18n="pidTuning_PIDgains"></div>
<div class="clear-both"></div>
<div class="cf_column pid-section">

<div class="cf_column" id="pid-sliders">
<div class="pid-sliders-axis" data-axis="roll">
<h3 data-i18n="axisRoll"></h3>
<div class="pid-slider-row">
<span data-i18n="pidTuning_Proportional"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="110">
</div>

<div class="pid-slider-row">
<span data-i18n="pidTuning_Integral"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="110">
</div>

<div class="pid-slider-row">
<span data-i18n="pidTuning_Derivative"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="60">
</div>

<div class="pid-slider-row">
<span data-i18n="pidTuning_FeedForward"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="150">
</div>

</div>

<div class="pid-sliders-axis" data-axis="pitch">
<h3 data-i18n="axisPitch"></h3>
<div class="pid-slider-row">
<span data-i18n="pidTuning_Proportional"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="110">
</div>

<div class="pid-slider-row">
<span data-i18n="pidTuning_Integral"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="110">
</div>

<div class="pid-slider-row">
<span data-i18n="pidTuning_Derivative"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="60">
</div>

<div class="pid-slider-row">
<span data-i18n="pidTuning_FeedForward"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="150">
</div>

</div>

<div class="pid-sliders-axis" data-axis="yaw">
<h3 data-i18n="axisYaw"></h3>
<div class="pid-slider-row">
<span data-i18n="pidTuning_Proportional"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="110">
</div>

<div class="pid-slider-row">
<span data-i18n="pidTuning_Integral"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="110">
</div>

<div class="pid-slider-row"">
<span data-i18n="pidTuning_Derivative"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="60">
</div>

<div class="pid-slider-row">
<span data-i18n="pidTuning_FeedForward"></span>
<input type="number" name="value-input" value="42" min="0" max="255" step="1" class="controlProfileHighlightActive">
<input type="range" name="value-slider" value="42" min="0" max="1000" step="1" data-normal-max="150">
</div>

</div>
</div>

<div class="toolbox" style="margin-bottom: 1em;">
<input type="checkbox" id="show-advanced-pids" class="toggle" />
<label data-i18n="showAdvancedPIDs" for="show-advanced-pids"></label>
</div>

<div class="cf_column pid-section is-hidden" id="the-other-pids">
<div class="gui_box grey">
<table class="pid_titlebar">
<tr>
Expand All @@ -34,28 +126,28 @@
</tr>
</table>
<table id="pid_main" class="pid_tuning">
<tr>
<tr class="is-hidden">
<th colspan="5">
<div class="pid_mode" data-i18n="pidTuning_Basic"></div>
</th>
</tr>
<tr class="ROLL" data-pid-bank-position="0">
<tr class="is-hidden" class="ROLL" data-pid-bank-position="0">
<!-- 0 -->
<td></td>
<td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td>
<td><input class="controlProfileHighlight" type="number" name="i" step="1" min="0" max="255" /></td>
<td><input class="controlProfileHighlight" type="number" class="rpy_d" name="d" step="1" min="0" max="255" /></td>
<td><input class="controlProfileHighlight" type="number" class="rpy_ff" name="ff" step="1" min="0" max="255" /></td>
</tr>
<tr class="PITCH" data-pid-bank-position="1">
<tr class="is-hidden" class="PITCH" data-pid-bank-position="1">
<!-- 1 -->
<td></td>
<td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td>
<td><input class="controlProfileHighlight" type="number" name="i" step="1" min="0" max="255" /></td>
<td><input class="controlProfileHighlight" type="number" class="rpy_d" name="d" step="1" min="0" max="255" /></td>
<td><input class="controlProfileHighlight" type="number" class="rpy_ff" name="ff" step="1" min="0" max="255" /></td>
</tr>
<tr class="YAW" data-pid-bank-position="2">
<tr class="is-hidden" class="YAW" data-pid-bank-position="2">
<!-- 2 -->
<td></td>
<td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td>
Expand Down
75 changes: 71 additions & 4 deletions tabs/pid_tuning.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,14 @@ TABS.pid_tuning.initialize = function (callback) {
function form_to_pid_and_rc() {

$('[data-pid-bank-position]').each(function () {

var $this = $(this),
bankPosition = $this.data('pid-bank-position');

if ($this.hasClass('is-hidden')) {
return;
}

if (PIDs[bankPosition]) {
$this.find('input').each(function (index) {
PIDs[bankPosition][index] = parseFloat($(this).val());
Expand Down Expand Up @@ -157,12 +162,74 @@ TABS.pid_tuning.initialize = function (callback) {

pid_and_rc_to_form();

let $magHoldYawRate = $("#magHoldYawRate");
let $theOtherPids = $('#the-other-pids');
let $showAdvancedPids = $('#show-advanced-pids');

chrome.storage.local.get('showOtherPids', function (result) {
if (result.showOtherPids) {
$theOtherPids.removeClass("is-hidden");
$showAdvancedPids.prop('checked', true);
} else {
$theOtherPids.addClass("is-hidden");
$showAdvancedPids.prop('checked', false);
}
$showAdvancedPids.change();
});

$showAdvancedPids.on('change', function() {
if ($showAdvancedPids.is(':checked')) {
$theOtherPids.removeClass("is-hidden");
chrome.storage.local.set({ showOtherPids: true });
} else {
$theOtherPids.addClass("is-hidden");
chrome.storage.local.set({ showOtherPids: false });
}
});

$(".pid-slider-row [name='value-slider']").on('input', function () {
let val = $(this).val();
let normalMax = parseInt($(this).data('normal-max'));

$magHoldYawRate.val(INAV_PID_CONFIG.magHoldRateLimit);
if (val <= 800) {
val = scaleRangeInt(val, 0, 800, 0, normalMax);
} else {
val = scaleRangeInt(val, 801, 1000, normalMax + 1, 255);
}

$(this).parent().find('input[name="value-input"]').val(val);
PIDs[$(this).parent().data('axis')][$(this).parent().data('bank')] = val;
});

$magHoldYawRate.change(function () {
INAV_PID_CONFIG.magHoldRateLimit = parseInt($magHoldYawRate.val(), 10);
$(".pid-slider-row [name='value-input']").on('change', function () {
let val = $(this).val();
let newVal;
let normalMax = parseInt($(this).parent().find('input[name="value-slider"]').data('normal-max'));

if (val <= 110) {
newVal = scaleRangeInt(val, 0, normalMax, 0, 800);
} else {
newVal = scaleRangeInt(val, normalMax + 1, 255, 801, 1000);
}

$(this).parent().find('input[name="value-slider"]').val(newVal);
PIDs[$(this).parent().data('axis')][$(this).parent().data('bank')] = $(this).val();
});

let axis = 0;
$('#pid-sliders').find('.pid-sliders-axis').each(function () {

let $this = $(this);
let bank = 0;

$this.find('.pid-slider-row').each(function () {
let $this = $(this);
$this.data('axis', axis);
$this.data('bank', bank);
$this.find('input[name="value-input"]').val(PIDs[axis][bank]).trigger('change');
bank++;
});

axis++;
});

if (!FC.isRpyFfComponentUsed()) {
Expand Down