mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-14 20:10:11 +03:00
Merge remote-tracking branch 'origin/master' into dzikuvx-settings-sliders
This commit is contained in:
commit
c67e97518a
11 changed files with 248 additions and 15 deletions
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 = [
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -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;
|
||||||
|
|
2
main.css
2
main.css
|
@ -2274,5 +2274,5 @@ ol li {
|
||||||
}
|
}
|
||||||
|
|
||||||
.controlProfileHighlightActive {
|
.controlProfileHighlightActive {
|
||||||
background-color: #d5ebfe;
|
background-color: #d5ebfe !important ;
|
||||||
}
|
}
|
||||||
|
|
5
package-lock.json
generated
5
package-lock.json
generated
|
@ -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",
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -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'),
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue