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

Merge remote-tracking branch 'origin/master' into dzikuvx-settings-sliders

This commit is contained in:
Pawel Spychalski (DzikuVx) 2022-05-11 09:56:13 +02:00
commit c67e97518a
11 changed files with 248 additions and 15 deletions

View file

@ -4262,5 +4262,17 @@
}, },
"BLACKBOX_FEATURE_MOTORS": { "BLACKBOX_FEATURE_MOTORS": {
"message": "Motors output" "message": "Motors output"
},
"axisRoll": {
"message": "Roll"
},
"axisPitch": {
"message": "Pitch"
},
"axisYaw": {
"message": "Yaw"
},
"showAdvancedPIDs": {
"message": "Show advanced PID controllers"
} }
} }

View file

@ -52,7 +52,7 @@ sources.css = [
'./js/libraries/jbox/jBox.css', './js/libraries/jbox/jBox.css',
'./node_modules/openlayers/dist/ol.css', './node_modules/openlayers/dist/ol.css',
'./src/css/logic.css', './src/css/logic.css',
'./src/css/defaults_dialog.css' './src/css/defaults_dialog.css',
]; ];
sources.js = [ sources.js = [
@ -133,7 +133,7 @@ sources.js = [
'./js/waypointCollection.js', './js/waypointCollection.js',
'./js/waypoint.js', './js/waypoint.js',
'./node_modules/openlayers/dist/ol.js', './node_modules/openlayers/dist/ol.js',
'./js/libraries/plotly-latest.min.js' './js/libraries/plotly-latest.min.js',
]; ];
sources.receiverCss = [ sources.receiverCss = [

View file

@ -105,7 +105,7 @@ helper.defaultsDialog = (function () {
}, },
{ {
key: "d_boost_min", key: "d_boost_min",
value: 0.5 value: 0.8
}, },
{ {
key: "d_boost_max", key: "d_boost_max",
@ -195,6 +195,10 @@ helper.defaultsDialog = (function () {
{ {
key: "applied_defaults", key: "applied_defaults",
value: 2 value: 2
},
{
key: "failsafe_procedure",
value: "DROP"
} }
] ]
}, },

View file

@ -63,4 +63,4 @@ function scaleRangeInt(x, srcMin, srcMax, destMin, destMax) {
let a = (destMax - destMin) * (x - srcMin); let a = (destMax - destMin) * (x - srcMin);
let b = srcMax - srcMin; let b = srcMax - srcMin;
return Math.round((a / b) + destMin); return Math.round((a / b) + destMin);
} }

View file

@ -6,7 +6,7 @@ let LogicConditionsCollection = function () {
data = [], data = [],
$container; $container;
let max_logicConditions = 32; let max_logicConditions = 64;
self.getMaxLogicConditionCount = function () { self.getMaxLogicConditionCount = function () {
return max_logicConditions; return max_logicConditions;

View file

@ -2274,5 +2274,5 @@ ol li {
} }
.controlProfileHighlightActive { .controlProfileHighlightActive {
background-color: #d5ebfe; background-color: #d5ebfe !important ;
} }

5
package-lock.json generated
View file

@ -4272,6 +4272,11 @@
"remove-trailing-separator": "^1.0.1" "remove-trailing-separator": "^1.0.1"
} }
}, },
"nouislider": {
"version": "15.6.0",
"resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.6.0.tgz",
"integrity": "sha512-YJg+A6RQXTuFqhEwd42FeRaEGMGgDSSNnpIyVtT8XJrNl4VBEUkPI6Yj91bT3JjJIvNYi4VdppWeCV+z2gOnnw=="
},
"now-and-later": { "now-and-later": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",

View file

@ -395,3 +395,54 @@
.settings-table tbody { .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); */ /* 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;
}

View file

@ -2827,6 +2827,8 @@ TABS.osd.initialize = function (callback) {
OSD.GUI.jbox = new jBox('Modal', { OSD.GUI.jbox = new jBox('Modal', {
width: 708, width: 708,
height: 240, height: 240,
position: {y:'bottom'},
offset: {y:-50},
closeButton: 'title', closeButton: 'title',
animation: false, animation: false,
attach: $('#fontmanager'), attach: $('#fontmanager'),

View file

@ -22,7 +22,99 @@
</div> </div>
<div class="tab_subtitle" style="margin-top: 1em;" data-i18n="pidTuning_PIDgains"></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" 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"> <div class="gui_box grey">
<table class="pid_titlebar"> <table class="pid_titlebar">
<tr> <tr>
@ -34,12 +126,12 @@
</tr> </tr>
</table> </table>
<table id="pid_main" class="pid_tuning"> <table id="pid_main" class="pid_tuning">
<tr> <tr class="is-hidden">
<th colspan="5"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuning_Basic"></div> <div class="pid_mode" data-i18n="pidTuning_Basic"></div>
</th> </th>
</tr> </tr>
<tr class="ROLL" data-pid-bank-position="0"> <tr class="is-hidden" class="ROLL" data-pid-bank-position="0">
<!-- 0 --> <!-- 0 -->
<td></td> <td></td>
<td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td> <td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td>
@ -47,7 +139,7 @@
<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_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> <td><input class="controlProfileHighlight" type="number" class="rpy_ff" name="ff" step="1" min="0" max="255" /></td>
</tr> </tr>
<tr class="PITCH" data-pid-bank-position="1"> <tr class="is-hidden" class="PITCH" data-pid-bank-position="1">
<!-- 1 --> <!-- 1 -->
<td></td> <td></td>
<td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td> <td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td>
@ -55,7 +147,7 @@
<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_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> <td><input class="controlProfileHighlight" type="number" class="rpy_ff" name="ff" step="1" min="0" max="255" /></td>
</tr> </tr>
<tr class="YAW" data-pid-bank-position="2"> <tr class="is-hidden" class="YAW" data-pid-bank-position="2">
<!-- 2 --> <!-- 2 -->
<td></td> <td></td>
<td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td> <td><input class="controlProfileHighlight" type="number" name="p" step="1" min="0" max="255" /></td>

View file

@ -66,9 +66,14 @@ TABS.pid_tuning.initialize = function (callback) {
function form_to_pid_and_rc() { function form_to_pid_and_rc() {
$('[data-pid-bank-position]').each(function () { $('[data-pid-bank-position]').each(function () {
var $this = $(this), var $this = $(this),
bankPosition = $this.data('pid-bank-position'); bankPosition = $this.data('pid-bank-position');
if ($this.hasClass('is-hidden')) {
return;
}
if (PIDs[bankPosition]) { if (PIDs[bankPosition]) {
$this.find('input').each(function (index) { $this.find('input').each(function (index) {
PIDs[bankPosition][index] = parseFloat($(this).val()); PIDs[bankPosition][index] = parseFloat($(this).val());
@ -157,12 +162,74 @@ TABS.pid_tuning.initialize = function (callback) {
pid_and_rc_to_form(); pid_and_rc_to_form();
let $magHoldYawRate = $("#magHoldYawRate"); let $theOtherPids = $('#the-other-pids');
let $showAdvancedPids = $('#show-advanced-pids');
$magHoldYawRate.val(INAV_PID_CONFIG.magHoldRateLimit); 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();
});
$magHoldYawRate.change(function () { $showAdvancedPids.on('change', function() {
INAV_PID_CONFIG.magHoldRateLimit = parseInt($magHoldYawRate.val(), 10); 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'));
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;
});
$(".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()) { if (!FC.isRpyFfComponentUsed()) {