Fix mixer limiter to never output min for an input of max + 1 quantum

This commit is contained in:
Lorenz Meier
2014-07-06 15:34:50 +02:00
parent 43a1c1b5f6
commit 2669f7f3af

View File

@@ -301,9 +301,7 @@ int UavcanNode::run()
// iterate actuators
for (unsigned i = 0; i < outputs.noutputs; i++) {
// last resort: catch NaN, INF and out-of-band errors
if (!isfinite(outputs.output[i]) ||
outputs.output[i] < -1.0f ||
outputs.output[i] > 1.0f) {
if (!isfinite(outputs.output[i])) {
/*
* Value is NaN, INF or out of band - set to the minimum value.
* This will be clearly visible on the servo status and will limit the risk of accidentally
@@ -311,6 +309,18 @@ int UavcanNode::run()
*/
outputs.output[i] = -1.0f;
}
// limit outputs to valid range
// never go below min
if (outputs.output[i] < -1.0f) {
outputs.output[i] = -1.0f;
}
// never go below max
if (outputs.output[i] > 1.0f) {
outputs.output[i] = 1.0f;
}
}
// Output to the bus