Merge pull request #440 from EwoudSmeur/switch_sticks

Added possibility to switch sticks

The reason for this commit is that the sticks in rate control are 'quadcopter sticks'.
This is because the default (IMU_TO_BODY) configuration is hover.
The only way to get the sticks naturally right is to have the BODY_TO_IMU
orientation as airplane.
The easier way is to just switch roll and yaw when in rate control,
if the user defined this in his airframe of course.
This commit is contained in:
Felix Ruess
2013-06-03 06:25:29 -07:00
5 changed files with 46 additions and 2 deletions
+17
View File
@@ -0,0 +1,17 @@
<airframe>
<section name="IMU" prefix="IMU_">
<define name="ACCEL_X_NEUTRAL" value="40"/>
<define name="ACCEL_Y_NEUTRAL" value="-11"/>
<define name="ACCEL_Z_NEUTRAL" value="250"/>
<define name="ACCEL_X_SENS" value="4.86864977158" integer="16"/>
<define name="ACCEL_Y_SENS" value="4.90451364272" integer="16"/>
<define name="ACCEL_Z_SENS" value="4.85134642596" integer="16"/>
<define name="MAG_X_NEUTRAL" value="-178"/>
<define name="MAG_Y_NEUTRAL" value="73"/>
<define name="MAG_Z_NEUTRAL" value="-11"/>
<define name="MAG_X_SENS" value="4.19385009207" integer="16"/>
<define name="MAG_Y_SENS" value="4.32306399648" integer="16"/>
<define name="MAG_Z_SENS" value="4.63243801309" integer="16"/>
</section>
</airframe>
+2 -2
View File
@@ -175,7 +175,7 @@
<define name="HOVER_KI" value="72"/>
<define name="RC_CLIMB_COEF" value ="163"/>
<define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
<define name="GUIDANCE_V_NOMINAL_HOVER_THROTTLE" value ="0.5"/>
<!-- <define name="GUIDANCE_V_NOMINAL_HOVER_THROTTLE" value ="0.3"/> -->
</section>
<section name="AHRS" prefix="AHRS_">
@@ -195,7 +195,7 @@
<define name="REF_QUAT_INFINITESIMAL_STEP" value="TRUE"/>
<define name="USE_EARTH_BOUND_RC_SETPOINT" value="TRUE"/>
<!-- <define name="USE_REFERENCE_SYSTEM" value="FALSE"/> -->
<!-- <define name="SWITCH_STICKS_FOR_RATE_CONTROL" value="TRUE"/> -->
<define name="SWITCH_STICKS_FOR_RATE_CONTROL" value="TRUE"/>
<define name="TRANSITION_MAX_OFFSET" value="-82.0" unit="deg"/>
</section>
@@ -164,7 +164,11 @@ void guidance_h_read_rc(bool_t in_flight) {
break;
case GUIDANCE_H_MODE_RATE:
#if SWITCH_STICKS_FOR_RATE_CONTROL
stabilization_rate_read_rc_switched_sticks();
#else
stabilization_rate_read_rc();
#endif
break;
case GUIDANCE_H_MODE_FORWARD:
@@ -164,6 +164,28 @@ void stabilization_rate_read_rc( void ) {
INT_RATES_LSHIFT(stabilization_rate_sp, stabilization_rate_sp, REF_FRAC - INT32_RATE_FRAC);
}
//Read rc with roll and yaw sitcks switched if the default orientation is vertical but airplane sticks are desired
void stabilization_rate_read_rc_switched_sticks( void ) {
if(ROLL_RATE_DEADBAND_EXCEEDED())
stabilization_rate_sp.r = (int32_t) -radio_control.values[RADIO_ROLL] * STABILIZATION_RATE_SP_MAX_P / MAX_PPRZ;
else
stabilization_rate_sp.r = 0;
if(PITCH_RATE_DEADBAND_EXCEEDED())
stabilization_rate_sp.q = (int32_t)radio_control.values[RADIO_PITCH] * STABILIZATION_RATE_SP_MAX_Q / MAX_PPRZ;
else
stabilization_rate_sp.q = 0;
if(YAW_RATE_DEADBAND_EXCEEDED())
stabilization_rate_sp.p = (int32_t)radio_control.values[RADIO_YAW] * STABILIZATION_RATE_SP_MAX_R / MAX_PPRZ;
else
stabilization_rate_sp.p = 0;
// Setpoint at ref resolution
INT_RATES_LSHIFT(stabilization_rate_sp, stabilization_rate_sp, REF_FRAC - INT32_RATE_FRAC);
}
void stabilization_rate_enter(void) {
RATES_COPY(stabilization_rate_ref, stabilization_rate_sp);
INT_RATES_ZERO(stabilization_rate_sum_err);
@@ -32,6 +32,7 @@
extern void stabilization_rate_init(void);
extern void stabilization_rate_read_rc(void);
extern void stabilization_rate_read_rc_switched_sticks(void);
extern void stabilization_rate_run(bool_t in_flight);
extern void stabilization_rate_enter(void);