Copter Tailsitter SITL/Gazebo: Large VTOL Motor Output Oscillations and Hover-Throttle Sensitivity

I am developing a custom copter tailsitter in Gazebo Harmonic with ArduPlane SITL.

The vehicle configuration consists of:

  • Four VTOL motors

  • Two elevons near the tail for pitch and roll control

  • Aerodynamics implemented using LiftDrag plugins

  • 15×5 inch propellers

  • Vehicle weight: 45.07 N (~4.6 kg)

The problem is that the vehicle is unable to achieve a stable hover. When armed in QSTABILIZE mode, it climbs aggressively while exhibiting significant vibration and large servo output fluctuations on both the elevons and all four VTOL motors.

The expected behavior is that in QHOVER or QLOITER mode, with RC channel 3 at approximately 1500 PWM, the vehicle should maintain its current altitude. Instead, it continues to climb, although at a reduced climb rate.

A key observation is that the behavior changes dramatically when I reduce the Gazebo VTOL motor control multiplier by a factor of 40, from:

<multiplier>1000</multiplier>

to

<multiplier>25</multiplier>

With a multiplier of 25:

  • The vehicle follows hover commands reasonably well.

  • Altitude control becomes significantly better.

  • Motor outputs become much smoother.

  • Servo output fluctuations are greatly reduced.

I have also attempted PID tuning following the ArduPilot documentation, but it did not produce significant improvement. In both QLOITER and GUIDED modes, the vehicle still fails to hold altitude correctly when using the original multiplier value.

My concern is that a multiplier value of 25 does not appear physically correct. The improvement suggests that the propellers may be generating excessive thrust in the simulation. However, the propeller LiftDrag plugins were copied from standard drone models with approximately similar propeller size and vehicle weight.

Log file with multiplier = 1000 (QSTABILIZE → QHOVER):https://drive.google.com/file/d/1FvZksxWvNMLo34sVgg-H4H_KPTIFdOZA/view?usp=drive_link

Log file with multiplier = 25:

https://drive.google.com/file/d/1jwNzKpZRRJEKL1tw9I8Igw2k3UDp2Obn/view?usp=drive_link

I would appreciate any guidance on what might be incorrect in my simulation model and how I can achieve stable hover behaviour with a physically reasonable multiplier value and smooth control response.

@swapnil, it’ very difficult to provide any insight without being able to run the model. There are many things that can cause the model hover to be unstable, from the physical characteristics of the model (mass distribution, inertials), the tune of the various Gazebo control plugins, and then the tune of the ardupilot PID parameters.

Have you tried configuring the model as a straight quad copter and got that tuned (ignore and disable all the control surfaces). The mass and dimensions are not that different from the Iris, and we have an example quadplane (Alti-Transition) in the SITL_Models repo which is larger - so there are working models that bracket your case.

Hi @rhys

Thank you for your response.

Following your earlier suggestion, I tested the model as a pure multicopter by disabling/ignoring the control surfaces, and I was able to get stable VTOL flight. I also compared it with the Swan K1 H-Wing model and used that as a reference while debugging my custom aircraft.

At this point, the aircraft is able to:

  • Perform VTOL takeoff and landing

  • Transition successfully to forward flight

  • Fly in fixed-wing mode

  • Operate both with and without control surfaces

However, I am now seeing a different issue. During forward flight, the simulated power/current consumption is significantly higher than during VTOL hover and landing—approximately 1.8× higher. I was expecting forward-flight power to be lower since the wings should be generating most of the lift.

Could this indicate a problem with:

  • Aerodynamic plugin parameters (lift/drag coefficients, wing area, center of pressure, etc.)?

  • Aircraft trim or angle of attack being too high during cruise?

  • Propulsion system modeling?

  • Some other aspect of the Gazebo aerodynamic model?

  • Here I am attaching lift and drag plugin for main body as wing

  • <plugin filename="gz-sim-lift-drag-system"
        name="gz::sim::systems::LiftDrag">
      <a0>0.13</a0>
      <cla>3.7</cla>
      <cda>0.06417112299</cda>
      <cma>0.0</cma>
      <alpha_stall>0.3391428111</alpha_stall>
      <cla_stall>-3.85</cla_stall>
      <cda_stall>-0.9233984055</cda_stall>
      <cma_stall>0.0</cma_stall>
      <cp>0.04 0 0.02</cp>
      <area>0.24</area>
      <air_density>1.2041</air_density>
      <forward>1 0 0</forward>
      <upward>0 0 1</upward>
      <link_name>base_link</link_name>
    </plugin>
    

Are there any specific ArduPilot log messages or parameters that you would recommend examining to determine whether the aircraft is producing insufficient lift or excessive drag in forward flight?

Thank you for your help.