Adjust kalman filter settings.

master
nujw 2021-03-03 09:31:17 +13:00
parent e706c44ebb
commit c6e96119d9
1 changed files with 8 additions and 6 deletions

View File

@ -5,7 +5,7 @@ Mike Bennett mike[at]kereru.com
1.21 : Third mode large clock display 1.21 : Third mode large clock display
1.02 : add smoothing with kalman filter 1.02 : add smoothing with kalman filter
*/ */
var v = '1.02c'; var v = '1.02d';
/*kalmanjs, Wouter Bulten, MIT, https://github.com/wouterbulten/kalmanjs */ /*kalmanjs, Wouter Bulten, MIT, https://github.com/wouterbulten/kalmanjs */
var KalmanFilter = (function () { var KalmanFilter = (function () {
@ -170,8 +170,8 @@ var KalmanFilter = (function () {
}()); }());
var spdFilter = new KalmanFilter({R: 0.01, Q: 3}); var spdFilter = new KalmanFilter({R: 0.01, Q: 2});
var altFilter = new KalmanFilter({R: 0.01, Q: 10}); var altFilter = new KalmanFilter({R: 0.01, Q: 2});
var buf = Graphics.createArrayBuffer(240,160,2,{msb:true}); var buf = Graphics.createArrayBuffer(240,160,2,{msb:true});
@ -189,6 +189,7 @@ var tmrLP; // Timer for delay in switching to low power after screen
var max = {}; var max = {};
max.spd = 0; max.spd = 0;
max.alt = 0; max.alt = 0;
max.n = 0; // counter. Only start comparing for max after a certain number of fixes to allow kalman filter to have smoohed the data.
var emulator = (process.env.BOARD=="EMSCRIPTEN")?1:0; // 1 = running in emulator. Supplies test values; var emulator = (process.env.BOARD=="EMSCRIPTEN")?1:0; // 1 = running in emulator. Supplies test values;
@ -375,7 +376,7 @@ function drawSats(sats) {
buf.setFontAlign(1,1); //right, bottom buf.setFontAlign(1,1); //right, bottom
buf.drawString(sats,240,160); buf.drawString(sats,240,160);
buf.setFontVector(40); buf.setFontVector(30);
buf.setColor(2); buf.setColor(2);
if ( cfg.modeA == 1 ) { if ( cfg.modeA == 1 ) {
@ -418,6 +419,7 @@ function onGPS(fix) {
lf.speed = spdFilter.filter(lf.speed); lf.speed = spdFilter.filter(lf.speed);
lf.alt = altFilter.filter(lf.alt); lf.alt = altFilter.filter(lf.alt);
lf.smoothed = 1; lf.smoothed = 1;
if ( max.n <= 15 ) max.n++;
} }
@ -431,12 +433,12 @@ function onGPS(fix) {
if ( sp < 10 ) sp = sp.toFixed(1); if ( sp < 10 ) sp = sp.toFixed(1);
else sp = Math.round(sp); else sp = Math.round(sp);
if (parseFloat(sp) > parseFloat(max.spd) ) max.spd = parseFloat(sp); if (parseFloat(sp) > parseFloat(max.spd) && max.n > 15 ) max.spd = parseFloat(sp);
// Altitude // Altitude
al = lf.alt; al = lf.alt;
al = Math.round(parseFloat(al)/parseFloat(cfg.alt)); al = Math.round(parseFloat(al)/parseFloat(cfg.alt));
if (parseFloat(al) > parseFloat(max.alt) ) max.alt = parseFloat(al); if (parseFloat(al) > parseFloat(max.alt) && max.n > 15 ) max.alt = parseFloat(al);
// Distance to waypoint // Distance to waypoint
di = distance(lf,wp); di = distance(lf,wp);