3838#include <ratedesired.h>
3939#include <stabilizationdesired.h>
4040#include <attitudestate.h>
41+ #include <gyrostate.h>
4142#include <stabilizationstatus.h>
4243#include <flightstatus.h>
4344#include <manualcontrolcommand.h>
@@ -78,6 +79,7 @@ void stabilizationOuterloopInit()
7879 RateDesiredInitialize ();
7980 StabilizationDesiredInitialize ();
8081 AttitudeStateInitialize ();
82+ GyroStateInitialize ();
8183 StabilizationStatusInitialize ();
8284 FlightStatusInitialize ();
8385 ManualControlCommandInitialize ();
@@ -97,11 +99,13 @@ void stabilizationOuterloopInit()
9799static void stabilizationOuterloopTask ()
98100{
99101 AttitudeStateData attitudeState ;
102+ GyroStateData gyroState ;
100103 RateDesiredData rateDesired ;
101104 StabilizationDesiredData stabilizationDesired ;
102105 StabilizationStatusOuterLoopData enabled ;
103106
104107 AttitudeStateGet (& attitudeState );
108+ GyroStateGet (& gyroState );
105109 StabilizationDesiredGet (& stabilizationDesired );
106110 RateDesiredGet (& rateDesired );
107111 StabilizationStatusOuterLoopGet (& enabled );
@@ -190,6 +194,10 @@ static void stabilizationOuterloopTask()
190194#endif /* if defined(PIOS_QUATERNION_STABILIZATION) */
191195 }
192196
197+ // Feed forward: Assume things always get worse before they get better
198+ local_error [0 ] = local_error [0 ] - (gyroState .x * stabSettings .stabBank .AttitudeFeedForward .Roll );
199+ local_error [1 ] = local_error [1 ] - (gyroState .y * stabSettings .stabBank .AttitudeFeedForward .Pitch );
200+ local_error [2 ] = local_error [2 ] - (gyroState .z * stabSettings .stabBank .AttitudeFeedForward .Yaw );
193201
194202 for (t = STABILIZATIONSTATUS_OUTERLOOP_ROLL ; t < STABILIZATIONSTATUS_OUTERLOOP_THRUST ; t ++ ) {
195203 reinit = (StabilizationStatusOuterLoopToArray (enabled )[t ] != previous_mode [t ]);
0 commit comments