BlockDerivative: initialize in first run

This commit is contained in:
Thomas Gubler
2014-07-18 00:15:16 +02:00
parent 213fe0cc20
commit dc612d75c7
2 changed files with 8 additions and 1 deletions

View File

@@ -293,7 +293,12 @@ int blockIntegralTrapTest()
float BlockDerivative::update(float input)
{
float output = _lowPass.update((input - getU()) / getDt());
float output = 0.0f;
if (_initialized) {
output = _lowPass.update((input - getU()) / getDt());
} else {
_initialized = true;
}
setU(input);
return output;
}

View File

@@ -238,6 +238,7 @@ public:
BlockDerivative(SuperBlock *parent, const char *name) :
SuperBlock(parent, name),
_u(0),
_initialized(false),
_lowPass(this, "LP")
{};
virtual ~BlockDerivative() {};
@@ -249,6 +250,7 @@ public:
protected:
// attributes
float _u; /**< previous input */
bool _initialized;
BlockLowPass _lowPass; /**< low pass filter */
};