QPlane tailseater can't recovery after deep roll movement in qstabilize mode

Arduplane 4.7.0-dev (same in plane-4.6.2)

QPlane tail seater. If in qstabilize mode, it leans to the horizon it starts to hardly respond to the stick movements. If it goes nose down, it stops responding. That led to the plane crash. Found IRL and also could be reproduced in SITL. Model in SITL modified - CG moved 1 inch more forward along z-axis.

Video: https://drive.google.com/file/d/1j9T1mtvZyJ4FtHFKkmL6qFRp15Cc737j/view?usp=drive_link
Parameters: https://drive.google.com/file/d/1LbT4YC9TJzGdQ7drdyIRrySwrMomUxkJ/view?usp=drive_link
Log: https://drive.google.com/file/d/1b1oc5uVFhnANpA9o3hjAUMVy0A7Gi5Ic/view?usp=sharing

If CG is placed by design (not shifted forward) then everything is fine, it’s very hard to move aircraft nose down. “Nose down” I mean Qstab mode and more than 90 degrees from the vertical axis.

This is a limitation of a tail-sitter with no control surfaces. When you go fast the aero loads increase and the thrust of the props decrease, at some airspeed it will always loose control.

2 Likes

But this is a qstab, low speed, it became absolutely non controlled if pitch more than 90 degrees from z-axis. IRL drone goes 250kmph without any issues and after transition FBWA → QSTAB flips and falls down.

Answering by myself =)

I got the model into RF+SITL from here SITL_Models/RealFlight/Released_Models/QuadPlanes/Tailsitters/Swan_K-1_HWing at master · ArduPilot/SITL_Models · GitHub and compared its params to params I had.

Fix is:
1.

MIXING_GAIN,1
PTCH_RATE_D,0.008737
PTCH_RATE_I,0.6
PTCH_RATE_P,0.01
Q_OPTIONS,0
Q_TAILSIT_ANG_VT,75
Q_TAILSIT_ENABLE,2
Q_TAILSIT_MOTMX,0
Q_TAILSIT_THR_VT,-1

UPD: these 3 parameters do the trick with unrecoverable fly away.

Q_A_RATE_P_MAX,0
Q_A_RATE_R_MAX,0
Q_A_RATE_Y_MAX,0
  1. Learn hover and
Q_P_ACCZ_I=2*Q_M_THST_HOVER
Q_P_ACCZ_P=Q_M_THST_HOVER
Q_A_THR_MIX_MAN,1
Q_A_THR_MIX_MAX,1

UPD: I was wrong regarding wiki information, so moved it under the spoiler.

wrong statement

Information on the page Tailsitter Planes — Plane documentation :

  • when in VTOL the copter style PID gains will be used (the ones starting with Q_A_RAT_x)
  • when in fixed wing flight the fixed wing PID gains will be used (the RLL_RATE_x and PTCH_RATE_x gains)

is not correct or maybe this is a bug in the code. In QSTAB mode (VTOL) if we have PTCH_RATE_D,0, we won’t have any PIDP.D values while we have PIDP.P data. This makes our model unrecoverable from deep pitch movement.

in VTOL mode, only Q_A_RATE params are used by its pid controller, not the fixed wing PIDs…and D terms never depend on data in the P path of a PID controller, they are parallel paths from the error term (desired rate vs actual)…not having a D value just impacts how quickly the vehicle responds to short term disturbances
your issue with params is something else…you did not post either the parm set that caused your problem nor a .bin log, so any comments or help cant be made here

1 Like

@hwurzburg, initial log and params were in my first message. I send them once again with the shorter flight.

attaching parameters:
sitl_init.param (32.2 KB)

and the log:

after several pitch moves, the plane flies away and does not respond to controls.

you are right, I was wrong regarding PTCH_RATE* params