Browse Source

Plane: clean up qacro

master
Mark Whitehorn 6 years ago committed by Andrew Tridgell
parent
commit
4a7ce1b384
  1. 18
      ArduPlane/mode_qacro.cpp
  2. 7
      ArduPlane/mode_qstabilize.cpp
  3. 7
      ArduPlane/quadplane.cpp
  4. 1
      ArduPlane/quadplane.h

18
ArduPlane/mode_qacro.cpp

@ -3,12 +3,24 @@
bool ModeQAcro::_enter() bool ModeQAcro::_enter()
{ {
//return false; plane.throttle_allows_nudging = false;
return plane.mode_qstabilize._enter(); plane.auto_navigation_mode = false;
if (!plane.quadplane.init_mode() && plane.previous_mode != nullptr) {
plane.control_mode = plane.previous_mode;
} else {
plane.auto_throttle_mode = false;
plane.auto_state.vtol_mode = true;
}
return true;
} }
void ModeQAcro::update() void ModeQAcro::update()
{ {
plane.mode_qstabilize.update(); // get nav_roll and nav_pitch from multicopter attitude controller
Vector3f att_target = plane.quadplane.attitude_control->get_att_target_euler_cd();
plane.nav_pitch_cd = att_target.y;
plane.nav_roll_cd = att_target.x;
return;
} }

7
ArduPlane/mode_qstabilize.cpp

@ -17,13 +17,6 @@ bool ModeQStabilize::_enter()
void ModeQStabilize::update() void ModeQStabilize::update()
{ {
if (plane.quadplane.tailsitter_active() && (plane.control_mode == &plane.mode_qacro)) {
// get nav_roll and nav_pitch from multicopter attitude controller
Vector3f att_target = plane.quadplane.attitude_control->get_att_target_euler_cd();
plane.nav_pitch_cd = att_target.y;
plane.nav_roll_cd = att_target.x;
return;
}
// set nav_roll and nav_pitch using sticks // set nav_roll and nav_pitch using sticks
int16_t roll_limit = MIN(plane.roll_limit_cd, plane.quadplane.aparm.angle_max); int16_t roll_limit = MIN(plane.roll_limit_cd, plane.quadplane.aparm.angle_max);
float pitch_input = plane.channel_pitch->norm_input(); float pitch_input = plane.channel_pitch->norm_input();

7
ArduPlane/quadplane.cpp

@ -1869,9 +1869,12 @@ void QuadPlane::control_run(void)
switch (plane.control_mode->mode_number()) { switch (plane.control_mode->mode_number()) {
case Mode::Number::QACRO: case Mode::Number::QACRO:
control_qacro(); control_qacro();
// QACRO uses only the multicopter controller if (!is_tailsitter()) {
// so skip the Plane attitude control calls below // also stabilize using fixed wing surfaces
plane.stabilize_acro(plane.get_speed_scaler());
}
return; return;
break;
case Mode::Number::QSTABILIZE: case Mode::Number::QSTABILIZE:
control_stabilize(); control_stabilize();
break; break;

1
ArduPlane/quadplane.h

@ -35,6 +35,7 @@ public:
friend class ModeQRTL; friend class ModeQRTL;
friend class ModeQStabilize; friend class ModeQStabilize;
friend class ModeQAutotune; friend class ModeQAutotune;
friend class ModeQAcro;
QuadPlane(AP_AHRS_NavEKF &_ahrs); QuadPlane(AP_AHRS_NavEKF &_ahrs);

Loading…
Cancel
Save