mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-31 12:23:23 +08:00
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:
@@ -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>
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user