aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-07-06 15:34:50 +0200
committerLorenz Meier <lm@inf.ethz.ch>2014-07-06 15:34:50 +0200
commit2669f7f3af65921d4abbf3850cd62e48f2eeeec7 (patch)
tree11836a2c1cb7405ef9fa66442ef021108f339a94 /src
parent43a1c1b5f600d5608a861d35d539319de1170923 (diff)
downloadpx4-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')
-rw-r--r--src/modules/uavcan/uavcan_main.cpp16
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