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.