aboutsummaryrefslogtreecommitdiff
path: root/apps/drivers/hil/hil.cpp
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2012-12-22 00:47:52 +0100
committerLorenz Meier <lm@inf.ethz.ch>2012-12-22 00:47:52 +0100
commit4cf2266b79a28445ad0b493c36cf125081900423 (patch)
tree94f065f916ce7b0a5d4d0c48d40bf9b1086b2049 /apps/drivers/hil/hil.cpp
parentfe6496a04dd0a232bb530f57031cfb4f6e65bb44 (diff)
downloadpx4-firmware-4cf2266b79a28445ad0b493c36cf125081900423.tar.gz
px4-firmware-4cf2266b79a28445ad0b493c36cf125081900423.tar.bz2
px4-firmware-4cf2266b79a28445ad0b493c36cf125081900423.zip
Robustified actuator output topic, added number of mixed outputs
Diffstat (limited to 'apps/drivers/hil/hil.cpp')
-rw-r--r--apps/drivers/hil/hil.cpp27
1 files changed, 19 insertions, 8 deletions
diff --git a/apps/drivers/hil/hil.cpp b/apps/drivers/hil/hil.cpp
index cb4a48fab..276a642fd 100644
--- a/apps/drivers/hil/hil.cpp
+++ b/apps/drivers/hil/hil.cpp
@@ -68,11 +68,11 @@
#include <drivers/device/device.h>
#include <drivers/drv_pwm_output.h>
#include <drivers/drv_gpio.h>
-// #include <drivers/boards/HIL/HIL_internal.h>
+#include <drivers/drv_hrt.h>
+#include <drivers/drv_mixer.h>
#include <systemlib/systemlib.h>
#include <systemlib/mixer/mixer.h>
-#include <drivers/drv_mixer.h>
#include <uORB/topics/actuator_controls.h>
#include <uORB/topics/actuator_outputs.h>
@@ -395,16 +395,27 @@ HIL::task_main()
if (_mixers != nullptr) {
/* do mixing */
- _mixers->mix(&outputs.output[0], num_outputs);
+ outputs.noutputs = _mixers->mix(&outputs.output[0], num_outputs);
+ outputs.timestamp = hrt_absolute_time();
/* iterate actuators */
for (unsigned i = 0; i < num_outputs; i++) {
- /* scale for PWM output 900 - 2100us */
- outputs.output[i] = 1500 + (600 * outputs.output[i]);
-
- /* output to the servo */
- // up_pwm_servo_set(i, outputs.output[i]);
+ /* last resort: catch NaN, INF and out-of-band errors */
+ if (i < (unsigned)outputs.noutputs &&
+ isfinite(outputs.output[i]) &&
+ outputs.output[i] >= -1.0f &&
+ outputs.output[i] <= 1.0f) {
+ /* scale for PWM output 900 - 2100us */
+ outputs.output[i] = 1500 + (600 * outputs.output[i]);
+ } else {
+ /*
+ * 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
+ * spinning motors. It would be deadly in flight.
+ */
+ outputs.output[i] = 900;
+ }
}
/* and publish for anyone that cares to see */