Browse Source

Fixed error term calculation for yaw position

sbg
Lorenz Meier 12 years ago
parent
commit
12e1cf3710
  1. 11
      apps/multirotor_att_control/multirotor_att_control_main.c
  2. 2
      apps/multirotor_att_control/multirotor_attitude_control.c

11
apps/multirotor_att_control/multirotor_att_control_main.c

@ -140,6 +140,7 @@ mc_thread_main(int argc, char *argv[])
bool flag_control_manual_enabled = false; bool flag_control_manual_enabled = false;
bool flag_control_attitude_enabled = false; bool flag_control_attitude_enabled = false;
bool flag_system_armed = false; bool flag_system_armed = false;
bool man_yaw_zero_once = false;
while (!thread_should_exit) { while (!thread_should_exit) {
@ -212,14 +213,20 @@ mc_thread_main(int argc, char *argv[])
state.flag_control_manual_enabled != flag_control_manual_enabled || state.flag_control_manual_enabled != flag_control_manual_enabled ||
state.flag_system_armed != flag_system_armed) { state.flag_system_armed != flag_system_armed) {
att_sp.yaw_body = att.yaw; att_sp.yaw_body = att.yaw;
man_yaw_zero_once = false;
} }
att_sp.roll_body = manual.roll; att_sp.roll_body = manual.roll;
att_sp.pitch_body = manual.pitch; att_sp.pitch_body = manual.pitch;
if ((manual.yaw > -0.1f || 0.1f > manual.yaw)) {
man_yaw_zero_once = true;
}
/* only move setpoint if manual input is != 0 */ /* only move setpoint if manual input is != 0 */
// XXX turn into param // XXX turn into param
if (manual.yaw < -0.01f || 0.01f < manual.yaw) { if ((manual.yaw < -0.01f || 0.01f < manual.yaw) && man_yaw_zero_once) {
att_sp.yaw_body = att_sp.yaw_body + manual.yaw * 0.01f; att_sp.yaw_body = att_sp.yaw_body + manual.yaw * 0.0025f;
} }
att_sp.thrust = manual.throttle; att_sp.thrust = manual.throttle;
att_sp.timestamp = hrt_absolute_time(); att_sp.timestamp = hrt_absolute_time();

2
apps/multirotor_att_control/multirotor_attitude_control.c

@ -217,7 +217,7 @@ void multirotor_control_attitude(const struct vehicle_attitude_setpoint_s *att_s
att->roll, att->rollspeed, deltaT); att->roll, att->rollspeed, deltaT);
/* control yaw rate */ /* control yaw rate */
rates_sp->yaw = p.yaw_p * atan2f(sinf(att->yaw - att_sp->yaw_body), cosf(att->yaw - att_sp->yaw_body)) - (p.yaw_d * att->yawspeed); rates_sp->yaw = p.yaw_p * atan2f(cosf(att->yaw - att_sp->yaw_body), sinf(att->yaw - att_sp->yaw_body)) - (p.yaw_d * att->yawspeed);
rates_sp->thrust = att_sp->thrust; rates_sp->thrust = att_sp->thrust;

Loading…
Cancel
Save