mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-29 19:17:28 +08:00
[rotorcraft] fix stabilization_attitude_read_rc_setpoint_eulers
Reported by Ewoud. The constants max_phi_scale etc. were zero because it is an integer divide where the denominator is larger (depending on STABILIZATION_ATTITUDE_SP_MAX_PHI). This causes the euler setpoint to always be zero. Closes #461
This commit is contained in:
@@ -84,16 +84,16 @@ float stabilization_attitude_get_heading_f(void) {
|
|||||||
* @param[out] sp attitude setpoint as euler angles
|
* @param[out] sp attitude setpoint as euler angles
|
||||||
*/
|
*/
|
||||||
void stabilization_attitude_read_rc_setpoint_eulers(struct Int32Eulers *sp, bool_t in_flight) {
|
void stabilization_attitude_read_rc_setpoint_eulers(struct Int32Eulers *sp, bool_t in_flight) {
|
||||||
const int32_t max_phi_scale = (int32_t)ANGLE_BFP_OF_REAL(STABILIZATION_ATTITUDE_SP_MAX_PHI) / MAX_PPRZ;
|
const float max_phi_scale = ANGLE_BFP_OF_REAL(STABILIZATION_ATTITUDE_SP_MAX_PHI) / MAX_PPRZ;
|
||||||
const int32_t max_theta_scale = (int32_t)ANGLE_BFP_OF_REAL(STABILIZATION_ATTITUDE_SP_MAX_THETA) / MAX_PPRZ;
|
const float max_theta_scale = ANGLE_BFP_OF_REAL(STABILIZATION_ATTITUDE_SP_MAX_THETA) / MAX_PPRZ;
|
||||||
const int32_t max_r_scale = (int32_t)ANGLE_BFP_OF_REAL(STABILIZATION_ATTITUDE_SP_MAX_R) / MAX_PPRZ;
|
const float max_r_scale = ANGLE_BFP_OF_REAL(STABILIZATION_ATTITUDE_SP_MAX_R) / MAX_PPRZ;
|
||||||
|
|
||||||
sp->phi = ((int32_t) radio_control.values[RADIO_ROLL] * max_phi_scale);
|
sp->phi = (int32_t) (radio_control.values[RADIO_ROLL] * max_phi_scale);
|
||||||
sp->theta = ((int32_t) radio_control.values[RADIO_PITCH] * max_theta_scale);
|
sp->theta = (int32_t) (radio_control.values[RADIO_PITCH] * max_theta_scale);
|
||||||
|
|
||||||
if (in_flight) {
|
if (in_flight) {
|
||||||
if (YAW_DEADBAND_EXCEEDED()) {
|
if (YAW_DEADBAND_EXCEEDED()) {
|
||||||
sp->psi += ((int32_t) radio_control.values[RADIO_YAW] * max_r_scale / RC_UPDATE_FREQ);
|
sp->psi += (int32_t) (radio_control.values[RADIO_YAW] * max_r_scale / RC_UPDATE_FREQ);
|
||||||
INT32_ANGLE_NORMALIZE(sp->psi);
|
INT32_ANGLE_NORMALIZE(sp->psi);
|
||||||
}
|
}
|
||||||
if (autopilot_mode == AP_MODE_FORWARD) {
|
if (autopilot_mode == AP_MODE_FORWARD) {
|
||||||
|
|||||||
Reference in New Issue
Block a user