diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2014-07-06 15:34:50 +0200 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2014-07-06 15:34:50 +0200 |
commit | 2669f7f3af65921d4abbf3850cd62e48f2eeeec7 (patch) | |
tree | 11836a2c1cb7405ef9fa66442ef021108f339a94 /src/modules/uavcan | |
parent | 43a1c1b5f600d5608a861d35d539319de1170923 (diff) | |
download | px4-firmware-2669f7f3af65921d4abbf3850cd62e48f2eeeec7.tar.gz px4-firmware-2669f7f3af65921d4abbf3850cd62e48f2eeeec7.tar.bz2 px4-firmware-2669f7f3af65921d4abbf3850cd62e48f2eeeec7.zip |
Fix mixer limiter to never output min for an input of max + 1 quantum
Diffstat (limited to 'src/modules/uavcan')
-rw-r--r-- | src/modules/uavcan/uavcan_main.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/modules/uavcan/uavcan_main.cpp b/src/modules/uavcan/uavcan_main.cpp index 5bc437670..27e77e9c5 100644 --- a/src/modules/uavcan/uavcan_main.cpp +++ b/src/modules/uavcan/uavcan_main.cpp @@ -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 |