In-Flight Crash Investigation

My quadplane crashed during a recent flight on autopilot. I’d appreciate any feedback on what caused the crash. I’ve added links to the datalog below, as well as the log for the prior nominal flight that was performed an hour before the crashed flight.

Datalog from Crashed Flight

Datalog from Prior Nominal Flight

Flight Path: VTOL takeoff to 25m, transition/climb to 30m, 5x elliptical loops at fixed wing flight, end with RTL.

Summary of what happened:

  • Plane took off and completed first loop. At start of 2nd loop, plane drifted off flight path and banked counterclockwise. To compensate, the right aileron was deflected up to roll the aircraft clockwise, but overshot and stalled the plane.

Off Nominal behavior noted before crash

  • Instead of vertically climbing to 25m in VTOL mode then transitioning to fixed wing, the plane briefly hovered to 1m and started climbing in transition/fixed wing flight immediately.
  • +/-5m Altitude variation noted during 1st loop fixed wing flight.
  • During flight I also had a LAU script running to progressively increase PWM on devices connected to A5 and A6 ports. set_pumps_final_waypoint.lua (5.0 KB). One issue here is that sending frequent gcs:send_text messages may have blocked telemetry.

Roll Overshoots, banking by 120degs which would definitely stall the plane. Possible indication of servo/aileron mechanical failure?

High Vibe during takeoff, but acceptable levels after transition. Possible cause of position/altitude hold?:

Large swings in altitude during fixed wing flight

Visuals just before crash

Flight Path Visuals:

The plane had almost full up elevator by the end of the flight:

The green line is elevator, and +4500 is full elevator.
This means there is either something mechanically wrong with the vtail, or the plane is extremely nose heavy. The height controller kept pushing up the target pitch to try to reach the target height but never managed to climb, even with pitch up and high throttle.
Even before the plane rolled over at the end, the control was very bad in both roll and pitch. How was this plane tuned?

I’ve seen the Lua scripts. They are poorly written but are not likely causal here. A little excess telemetry bandwidth won’t cause control issues like this.

The vehicle is an off-the shelf VTOL that came pre-tuned. The intent was to use it as a platform for testing different wing designs so I swapped out the wing to a custom one keeping the planform area, aspect ratio ,wingspan and aileron dimensions the same. The custom wing was slightly heavier, a bit less stiff and of different airfoil cross section compared to the original. A payload was also added but positioned so that the desired CG was achieved. No additional tuning was performed after making these changes given that they seemed to be minor, but I could have underestimated that. I did a preflight inspection before the flight and verified that the aileron/elevator connections were healthy.

I used a digital level mounted to the fuselage reference line to verify balance at the CG, but it may be possible that I made a mistake there, resulting in a nose-heavy plane.

Appreciate the insight. It is a bit unclear to me what exactly is indicative of ‘poor’ roll/pitch control from your plots. Understood 4500 being max, I’m not sure what anything in the +/-2000 range physically means. Pitch vs DesPitch in ATT does look pretty off but Roll appears to be tracking with DesRoll within ~+/-5deg which doesn’t seem too bad.



No, the roll tune is not good or even good enough.

What I’m reading is that you completely changed the flight characteristics AND added a liquid payload (which alone could account for CG issues due to sloshing) without incrementally verifying any single change.

Your approach was a bit too aggressive (or too trusting of software to handle things for you).

Payload was not liquid (not sure why that’s assumed), it was a few sensors + air blower and fixed at specific location. CG was remeasured after these changes. But yes, In retrospect I should have re-tuned the vehicle. I underestimated the hardware changes

I thought your script was operating a pump. My mistake for misunderstanding that much.

In any case, pitch and throttle saturated due to unknown causes - possibly linkage or CG related.

Recommend a more incremental approach on your next iteration.

Appreciate the rec. For future reference what’s the typical acceptable error on roll/pitch to DesRoll/DesPitch?

While it’s a bit of an apples to oranges comparison, here’s a few seconds’ worth of hover with some minor wind correction inputs on the roll axis flown on a reasonably well tuned Copter. Error is well within a degree.


Looking back on data from 1st flight with the off-the-shelf config (no hardware changes) it looks like roll/pitch control was also quite poor, suggesting that the vehicle may have arrived poorly tuned.

Yes, if you mean the other logfile, it wouldn’t have taken much longer and the plane would have crashed.
The airspeed sensor is also very poorly calibrated and clearly shows too high airspeed.

I assume that the flight was in almost no wind.
The error on the roll axis is about 10° by the way

I hope the damage isn’t too bad.