From b32c33fc72102a3fd87bda6c112e56f3b5bfd50d Mon Sep 17 00:00:00 2001 From: James Turner Date: Mon, 29 Jan 2024 13:52:44 +0000 Subject: [PATCH] Heading-Indicator DG normalisation fix From Benedikt Hallinger --- src/Instrumentation/heading_indicator_dg.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Instrumentation/heading_indicator_dg.cxx b/src/Instrumentation/heading_indicator_dg.cxx index 53c295226..640aeeea5 100644 --- a/src/Instrumentation/heading_indicator_dg.cxx +++ b/src/Instrumentation/heading_indicator_dg.cxx @@ -281,7 +281,11 @@ HeadingIndicatorDG::update (double dt) error = SGMiscd::normalizePeriodic(-180.0, 180.0, error); _error_node->setDoubleValue(error); - _last_indicated_heading_dg = SGMiscd::normalizePeriodic(-180.0, 180.0, (heading - _last_indicated_heading_dg)); + // Bring heading to the same range as errors for calculation. Otherwise the low-pass filter will + // get confused. + heading = SGMiscd::normalizePeriodic(-180.0, 180.0, heading); + _last_indicated_heading_dg = SGMiscd::normalizePeriodic(-180.0, 180.0, _last_indicated_heading_dg); + heading = fgGetLowPass(_last_indicated_heading_dg, heading, dt * 100 * factor); _last_indicated_heading_dg = heading;