1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-16 21:05:28 +03:00

Add FF component to VEL XY

This commit is contained in:
Pawel Spychalski (DzikuVx) 2019-03-09 11:57:33 +01:00
parent 731b9e9e29
commit d242ecc241
8 changed files with 80 additions and 35 deletions

View file

@ -912,6 +912,9 @@
"pidTuningDerivative": { "pidTuningDerivative": {
"message": "Derivative" "message": "Derivative"
}, },
"pidTuningFeedForward": {
"message": "FeedForward"
},
"pidTuningRollPitchRate": { "pidTuningRollPitchRate": {
"message": "ROLL & PITCH rate" "message": "ROLL & PITCH rate"
}, },

View file

@ -128,7 +128,7 @@ var FC = {
PID_names = []; PID_names = [];
PIDs = new Array(10); PIDs = new Array(10);
for (var i = 0; i < 10; i++) { for (var i = 0; i < 10; i++) {
PIDs[i] = new Array(3); PIDs[i] = new Array(4);
} }
RC_MAP = []; RC_MAP = [];

View file

@ -201,5 +201,8 @@ var MSPCodes = {
MSP2_INAV_TEMP_SENSOR_CONFIG: 0x201C, MSP2_INAV_TEMP_SENSOR_CONFIG: 0x201C,
MSP2_INAV_SET_TEMP_SENSOR_CONFIG: 0x201D, MSP2_INAV_SET_TEMP_SENSOR_CONFIG: 0x201D,
MSP2_INAV_TEMPERATURES: 0x201E MSP2_INAV_TEMPERATURES: 0x201E,
MSP2_PID: 0x2030,
MSP2_SET_PID: 0x2031
}; };

View file

@ -320,6 +320,15 @@ var mspHelper = (function (gui) {
PIDs[i][2] = data.getUint8(needle + 2); PIDs[i][2] = data.getUint8(needle + 2);
} }
break; break;
case MSPCodes.MSP2_PID:
// PID data arrived, we need to scale it and save to appropriate bank / array
for (i = 0, needle = 0; i < (dataHandler.message_length_expected / 4); i++, needle += 4) {
PIDs[i][0] = data.getUint8(needle);
PIDs[i][1] = data.getUint8(needle + 1);
PIDs[i][2] = data.getUint8(needle + 2);
PIDs[i][3] = data.getUint8(needle + 3);
}
break;
case MSPCodes.MSP_ARMING_CONFIG: case MSPCodes.MSP_ARMING_CONFIG:
ARMING_CONFIG.auto_disarm_delay = data.getUint8(0); ARMING_CONFIG.auto_disarm_delay = data.getUint8(0);
ARMING_CONFIG.disarm_kill_switch = data.getUint8(1); ARMING_CONFIG.disarm_kill_switch = data.getUint8(1);
@ -582,6 +591,9 @@ var mspHelper = (function (gui) {
case MSPCodes.MSP_SET_PID: case MSPCodes.MSP_SET_PID:
console.log('PID settings saved'); console.log('PID settings saved');
break; break;
case MSPCodes.MSP2_SET_PID:
console.log('PID settings saved');
break;
case MSPCodes.MSP_SET_RC_TUNING: case MSPCodes.MSP_SET_RC_TUNING:
console.log('RC Tuning saved'); console.log('RC Tuning saved');
break; break;
@ -1517,6 +1529,14 @@ var mspHelper = (function (gui) {
buffer.push(parseInt(PIDs[i][2])); buffer.push(parseInt(PIDs[i][2]));
} }
break; break;
case MSPCodes.MSP2_SET_PID:
for (i = 0; i < PIDs.length; i++) {
buffer.push(parseInt(PIDs[i][0]));
buffer.push(parseInt(PIDs[i][1]));
buffer.push(parseInt(PIDs[i][2]));
buffer.push(parseInt(PIDs[i][3]));
}
break;
case MSPCodes.MSP_SET_RC_TUNING: case MSPCodes.MSP_SET_RC_TUNING:
buffer.push(Math.round(RC_tuning.RC_RATE * 100)); buffer.push(Math.round(RC_tuning.RC_RATE * 100));
buffer.push(Math.round(RC_tuning.RC_EXPO * 100)); buffer.push(Math.round(RC_tuning.RC_EXPO * 100));
@ -2667,7 +2687,11 @@ var mspHelper = (function (gui) {
}; };
self.loadPidData = function (callback) { self.loadPidData = function (callback) {
if (semver.gte(CONFIG.flightControllerVersion, '2.2.0')) {
MSP.send_message(MSPCodes.MSP2_PID, false, false, callback);
} else {
MSP.send_message(MSPCodes.MSP_PID, false, false, callback); MSP.send_message(MSPCodes.MSP_PID, false, false, callback);
}
}; };
self.loadPidNames = function (callback) { self.loadPidNames = function (callback) {
@ -2779,7 +2803,11 @@ var mspHelper = (function (gui) {
}; };
self.savePidData = function (callback) { self.savePidData = function (callback) {
if (semver.gte(CONFIG.flightControllerVersion, '2.2.0')) {
MSP.send_message(MSPCodes.MSP2_SET_PID, mspHelper.crunch(MSPCodes.MSP2_SET_PID), false, callback);
} else {
MSP.send_message(MSPCodes.MSP_SET_PID, mspHelper.crunch(MSPCodes.MSP_SET_PID), false, callback); MSP.send_message(MSPCodes.MSP_SET_PID, mspHelper.crunch(MSPCodes.MSP_SET_PID), false, callback);
}
}; };
self.saveRcTuningData = function (callback) { self.saveRcTuningData = function (callback) {

View file

@ -112,7 +112,8 @@
padding: 5px; padding: 5px;
text-align: left; text-align: left;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
width: calc(100% -1px); /* width: calc(100% -1px); */
width: 20%;
} }
.tab-pid_tuning .pid_titlebar th:first-child { .tab-pid_tuning .pid_titlebar th:first-child {
@ -134,7 +135,7 @@
.tab-pid_tuning table td { .tab-pid_tuning table td {
padding: 1px; padding: 1px;
width: 25%; width: 20%;
border-right: 1px solid #ccc; border-right: 1px solid #ccc;
} }

View file

@ -26,11 +26,12 @@
<th class="proportional" data-i18n="pidTuningProportional"></th> <th class="proportional" data-i18n="pidTuningProportional"></th>
<th class="integral" data-i18n="pidTuningIntegral"></th> <th class="integral" data-i18n="pidTuningIntegral"></th>
<th class="derivative" data-i18n="pidTuningDerivative"></th> <th class="derivative" data-i18n="pidTuningDerivative"></th>
<th class="feedforward" data-i18n="pidTuningFeedForward"></th>
</tr> </tr>
</table> </table>
<table id="pid_main" class="pid_tuning"> <table id="pid_main" class="pid_tuning">
<tr> <tr>
<th colspan="4"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuningBasic"></div> <div class="pid_mode" data-i18n="pidTuningBasic"></div>
</th> </th>
</tr> </tr>
@ -40,6 +41,7 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td><input type="number" name="i" step="1" min="0" max="255" /></td> <td><input type="number" name="i" step="1" min="0" max="255" /></td>
<td><input type="number" name="d" step="1" min="0" max="255" /></td> <td><input type="number" name="d" step="1" min="0" max="255" /></td>
<td></td>
</tr> </tr>
<tr class="PITCH" data-pid-bank-position="1"> <tr class="PITCH" data-pid-bank-position="1">
<!-- 1 --> <!-- 1 -->
@ -47,6 +49,7 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td><input type="number" name="i" step="1" min="0" max="255" /></td> <td><input type="number" name="i" step="1" min="0" max="255" /></td>
<td><input type="number" name="d" step="1" min="0" max="255" /></td> <td><input type="number" name="d" step="1" min="0" max="255" /></td>
<td></td>
</tr> </tr>
<tr class="YAW" data-pid-bank-position="2"> <tr class="YAW" data-pid-bank-position="2">
<!-- 2 --> <!-- 2 -->
@ -54,11 +57,12 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td><input type="number" name="i" step="1" min="0" max="255" /></td> <td><input type="number" name="i" step="1" min="0" max="255" /></td>
<td><input type="number" name="d" step="1" min="0" max="255" /></td> <td><input type="number" name="d" step="1" min="0" max="255" /></td>
<td></td>
</tr> </tr>
</table> </table>
<table id="pid_baro" class="pid_tuning"> <table id="pid_baro" class="pid_tuning">
<tr> <tr>
<th colspan="4"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuningAltitude"></div> <div class="pid_mode" data-i18n="pidTuningAltitude"></div>
</th> </th>
</tr> </tr>
@ -68,6 +72,7 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td><input type="number" name="i" step="1" min="0" max="255" /></td> <td><input type="number" name="i" step="1" min="0" max="255" /></td>
<td><input type="number" name="d" step="1" min="0" max="255" /></td> <td><input type="number" name="d" step="1" min="0" max="255" /></td>
<td></td>
</tr> </tr>
<tr class="Vario" data-pid-bank-position="9"> <tr class="Vario" data-pid-bank-position="9">
<!-- 9 --> <!-- 9 -->
@ -75,11 +80,12 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td><input type="number" name="i" step="1" min="0" max="255" /></td> <td><input type="number" name="i" step="1" min="0" max="255" /></td>
<td><input type="number" name="d" step="1" min="0" max="255" /></td> <td><input type="number" name="d" step="1" min="0" max="255" /></td>
<td></td>
</tr> </tr>
</table> </table>
<table id="pid_mag" class="pid_tuning"> <table id="pid_mag" class="pid_tuning">
<tr> <tr>
<th colspan="4"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuningMag"></div> <div class="pid_mode" data-i18n="pidTuningMag"></div>
</th> </th>
</tr> </tr>
@ -89,11 +95,12 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td></td> <td></td>
<td></td> <td></td>
<td></td>
</tr> </tr>
</table> </table>
<table id="pid_gps" class="pid_tuning"> <table id="pid_gps" class="pid_tuning">
<tr> <tr>
<th colspan="4"> <th colspan="5">
<div class="pid_mode" data-i18n="pidTuningGps"></div> <div class="pid_mode" data-i18n="pidTuningGps"></div>
</th> </th>
</tr> </tr>
@ -103,6 +110,7 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td><input type="number" name="i" step="1" min="0" max="255" /></td> <td><input type="number" name="i" step="1" min="0" max="255" /></td>
<td><input type="number" name="d" step="1" min="0" max="255" /></td> <td><input type="number" name="d" step="1" min="0" max="255" /></td>
<td></td>
</tr> </tr>
<tr class="PosR" data-pid-bank-position="5"> <tr class="PosR" data-pid-bank-position="5">
<!-- 5 --> <!-- 5 -->
@ -110,6 +118,7 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td><input type="number" name="i" step="1" min="0" max="255" /></td> <td><input type="number" name="i" step="1" min="0" max="255" /></td>
<td><input type="number" name="d" step="1" min="0" max="255" /></td> <td><input type="number" name="d" step="1" min="0" max="255" /></td>
<td><input type="number" name="ff" step="1" min="0" max="255" /></td>
</tr> </tr>
<tr class="NavR" data-pid-bank-position="6"> <tr class="NavR" data-pid-bank-position="6">
<!-- 6 --> <!-- 6 -->
@ -117,6 +126,7 @@
<td><input type="number" name="p" step="1" min="0" max="255" /></td> <td><input type="number" name="p" step="1" min="0" max="255" /></td>
<td><input type="number" name="i" step="1" min="0" max="255" /></td> <td><input type="number" name="i" step="1" min="0" max="255" /></td>
<td><input type="number" name="d" step="1" min="0" max="255" /></td> <td><input type="number" name="d" step="1" min="0" max="255" /></td>
<td></td>
</tr> </tr>
</table> </table>
</div> </div>

View file

@ -208,6 +208,10 @@ TABS.pid_tuning.initialize = function (callback) {
$('.requires-v2_1').hide(); $('.requires-v2_1').hide();
} }
if (semver.lt(CONFIG.flightControllerVersion, "2.2.0")) {
$('[name=ff]').prop('disabled', 'disabled');
}
GUI.simpleBind(); GUI.simpleBind();
// UI Hooks // UI Hooks
@ -223,10 +227,6 @@ TABS.pid_tuning.initialize = function (callback) {
$('a.update').click(function () { $('a.update').click(function () {
form_to_pid_and_rc(); form_to_pid_and_rc();
function send_pids() {
MSP.send_message(MSPCodes.MSP_SET_PID, mspHelper.crunch(MSPCodes.MSP_SET_PID), false, send_rc_tuning_changes);
}
function send_rc_tuning_changes() { function send_rc_tuning_changes() {
MSP.send_message(MSPCodes.MSPV2_INAV_SET_RATE_PROFILE, mspHelper.crunch(MSPCodes.MSPV2_INAV_SET_RATE_PROFILE), false, saveINAVPidConfig); MSP.send_message(MSPCodes.MSPV2_INAV_SET_RATE_PROFILE, mspHelper.crunch(MSPCodes.MSPV2_INAV_SET_RATE_PROFILE), false, saveINAVPidConfig);
} }
@ -253,7 +253,7 @@ TABS.pid_tuning.initialize = function (callback) {
}); });
} }
send_pids(); mspHelper.savePidData(send_rc_tuning_changes);
}); });
GUI.content_ready(callback); GUI.content_ready(callback);

View file

@ -13,28 +13,28 @@ presets.elementHelper = function (group, field, value) {
presets.defaultValues = { presets.defaultValues = {
PIDs: { PIDs: {
mr: [ mr: [
[40, 30, 23], //PID_ROLL [40, 30, 23, 0], //PID_ROLL
[40, 30, 23], //PID_PITCH [40, 30, 23, 0], //PID_PITCH
[85, 45, 0], //PID_YAW [85, 45, 0, 0], //PID_YAW
[50, 0, 0], //PID_POS_Z [50, 0, 0, 0], //PID_POS_Z
[65, 120, 10], //PID_POS_XY [65, 120, 10, 0], //PID_POS_XY
[40, 15, 100], //PID_VEL_XY [40, 15, 100, 40], //PID_VEL_XY
[0, 0, 0], //PID_SURFACE [0, 0, 0, 0], //PID_SURFACE
[20, 15, 75], //PID_LEVEL [20, 15, 75, 0], //PID_LEVEL
[60, 0, 0], //PID_HEADING [60, 0, 0, 0], //PID_HEADING
[100, 50, 10] //PID_VEL_Z [100, 50, 10, 0] //PID_VEL_Z
], ],
fw: [ fw: [
[5, 7, 50], //PID_ROLL [5, 7, 50, 0], //PID_ROLL
[5, 7, 50], //PID_PITCH [5, 7, 50, 0], //PID_PITCH
[6, 10, 60], //PID_YAW [6, 10, 60, 0], //PID_YAW
[40, 5, 10], //PID_POS_Z [40, 5, 10, 0], //PID_POS_Z
[75, 5, 8], //PID_POS_XY [75, 5, 8, 0], //PID_POS_XY
[0, 0, 0], //PID_VEL_XY [0, 0, 0, 0], //PID_VEL_XY
[0, 0, 0], //PID_SURFACE [0, 0, 0, 0], //PID_SURFACE
[20, 5, 75], //PID_LEVEL [20, 5, 75, 0], //PID_LEVEL
[60, 0, 0], //PID_HEADING [60, 0, 0, 0], //PID_HEADING
[0, 0, 0] //PID_VEL_Z [0, 0, 0, 0] //PID_VEL_Z
]}, ]},
INAV_PID_CONFIG: {"asynchronousMode": "0", "accelerometerTaskFrequency": 500, "attitudeTaskFrequency": 250, "magHoldRateLimit": 90, "magHoldErrorLpfFrequency": 2, "yawJumpPreventionLimit": 200, "gyroscopeLpf": "3", "accSoftLpfHz": 15}, INAV_PID_CONFIG: {"asynchronousMode": "0", "accelerometerTaskFrequency": 500, "attitudeTaskFrequency": 250, "magHoldRateLimit": 90, "magHoldErrorLpfFrequency": 2, "yawJumpPreventionLimit": 200, "gyroscopeLpf": "3", "accSoftLpfHz": 15},
ADVANCED_CONFIG: {"gyroSyncDenominator": 2, "pidProcessDenom": 1, "useUnsyncedPwm": 1, "motorPwmProtocol": 0, "motorPwmRate": 400, "servoPwmRate": 50, "gyroSync": 1}, ADVANCED_CONFIG: {"gyroSyncDenominator": 2, "pidProcessDenom": 1, "useUnsyncedPwm": 1, "motorPwmProtocol": 0, "motorPwmRate": 400, "servoPwmRate": 50, "gyroSync": 1},