aboutsummaryrefslogtreecommitdiff
path: root/src/lib/ecl/attitude_fw/ecl_roll_controller.h
diff options
context:
space:
mode:
authorThomas Gubler <thomasgubler@gmail.com>2013-10-15 22:00:56 +0200
committerThomas Gubler <thomasgubler@gmail.com>2013-10-24 17:40:03 +0200
commitb21b9078e2d719bfd7af9580ac3b9b5957ef1d57 (patch)
tree32c0bffeecc3621453bc51f2bc0d2a3b007b612f /src/lib/ecl/attitude_fw/ecl_roll_controller.h
parent17e0c5053ece4cbf53e659b5f60d640beaab7d50 (diff)
downloadpx4-firmware-b21b9078e2d719bfd7af9580ac3b9b5957ef1d57.tar.gz
px4-firmware-b21b9078e2d719bfd7af9580ac3b9b5957ef1d57.tar.bz2
px4-firmware-b21b9078e2d719bfd7af9580ac3b9b5957ef1d57.zip
wip, fw attitude ctrl: split into attitude and rate, compiles, untested
Diffstat (limited to 'src/lib/ecl/attitude_fw/ecl_roll_controller.h')
-rw-r--r--src/lib/ecl/attitude_fw/ecl_roll_controller.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/lib/ecl/attitude_fw/ecl_roll_controller.h b/src/lib/ecl/attitude_fw/ecl_roll_controller.h
index e19812ea8..f94db0dc7 100644
--- a/src/lib/ecl/attitude_fw/ecl_roll_controller.h
+++ b/src/lib/ecl/attitude_fw/ecl_roll_controller.h
@@ -36,6 +36,7 @@
* Definition of a simple orthogonal roll PID controller.
*
* @author Lorenz Meier <lm@inf.ethz.ch>
+ * @author Thomas Gubler <thomasgubler@gmail.com>
*
* Acknowledgements:
*
@@ -51,13 +52,17 @@
#include <stdbool.h>
#include <stdint.h>
-class __EXPORT ECL_RollController
+class __EXPORT ECL_RollController //XXX: create controller superclass
{
public:
ECL_RollController();
- float control(float roll_setpoint, float roll, float roll_rate, float pitch, float yaw_rate,
- float scaler = 1.0f, bool lock_integrator = false, float airspeed_min = 0.0f, float airspeed_max = 0.0f, float airspeed = (0.0f / 0.0f));
+ float control_attitude(float roll_setpoint, float roll);
+
+ float control_bodyrate(float pitch,
+ float roll_rate, float yaw_rate,
+ float yaw_rate_setpoint,
+ float airspeed_min = 0.0f, float airspeed_max = 0.0f, float airspeed = (0.0f / 0.0f), float scaler = 1.0f, bool lock_integrator = false);
void reset_integrator();
@@ -90,6 +95,10 @@ public:
return _rate_setpoint;
}
+ float get_desired_bodyrate() {
+ return _bodyrate_setpoint;
+ }
+
private:
uint64_t _last_run;
float _tc;
@@ -102,6 +111,7 @@ private:
float _integrator;
float _rate_error;
float _rate_setpoint;
+ float _bodyrate_setpoint;
float _max_deflection_rad;
};