Background
I am developing an original tilt-quad VTOL fixed-wing platform (working title SA-TR3) for commercial BVLOS inspection and mapping operations under FAA Part 108. The configuration uses 4 motors — two per boom — in a push/pull arrangement where front motors pull upward in hover and rear motors push upward, with a mechanical linkage maintaining 180° offset between front and rear tilt angles on each boom. All four motors tilt simultaneously to provide forward thrust in cruise, similar in principle to a Cessna 337 Skymaster arrangement on each boom.
I am attempting to validate this configuration in SITL before committing to hardware.
Environment
-
ArduPilot version: V4.8.0-dev (1ea6cb20)
-
SITL on WSL2 Ubuntu 22.04
-
Mission Planner connected via UDP 14550
Launch command
sim_vehicle.py -v ArduPlane -f quadplane --console --map \
–add-param-file=$HOME/ardupilot/Tools/autotest/default_params/quadplane.parm \
–add-param-file=$HOME/ardupilot/Tools/autotest/default_params/quadplane-tilthvec.parm \
–wipe
Parameters set beyond param file defaults
-
SERVO3_FUNCTION = 0 (no dedicated cruise motor — all 4 motors tilt for cruise thrust)
-
Q_RTL_MODE = 3
-
Q_FRAME_TYPE tested as both 1 (X) and 3 (H)
Observed behavior
-
Pre-arm good ✓
-
Climbs to commanded altitude ✓
-
Continuous uncontrolled yaw spin from the moment of takeoff — does not stabilize
-
Changing Q_FRAME_TYPE from 3 (H) to 1 (X) reverses the spin direction (CCW → CW), suggesting the mixer is responding but motor torques are not cancelling correctly for either frame type
-
No transition messages observed — aircraft appears to remain in VTOL hover mode throughout
-
Setting SERVO3_FUNCTION = 0 should not affect hover behavior — confirmed this is not the cause
What I have tried
-
Loading quadplane-tilthvec.parm alone (without quadplane.parm base) — same yaw spin, opposite direction
-
Loading quadplane.parm + quadplane-tilthvec.parm together — same yaw spin
-
Q_FRAME_TYPE = 1 (X) and Q_FRAME_TYPE = 3 (H) — spin direction reverses but instability persists
-
Verified Q_TILT_MASK = 15 (all 4 motors), Q_TILT_TYPE = 2 (vectored yaw), Q_TILT_ENABLE = 1
Questions
-
Is the
quadplane-tilthvecSITL frame the correct starting point for a 4-motor all-tilting configuration, or is there a more appropriate frame or param combination? -
Does the SITL physics model for this frame correctly model motor spin directions for quad-H and quad-X configurations? The reversed spin direction when changing frame type suggests the mixer is working, but the underlying physics model may have fixed motor directions that don’t match either convention.
-
Is there a known working parameter set for validating all-4-motor tilt configurations in SITL that produces stable hover?
-
My physical configuration has mechanically linked front and rear motors on each boom (180° offset, same rotational direction), with inverted props on rear motors to produce upward thrust. From ArduPilot’s perspective this should be transparent — all four motors produce upward thrust in hover. Is there anything in the parameter configuration that needs to account for this push/pull geometry?
-
Is a custom JSON SITL physics model required to correctly simulate this configuration, or can the existing quadplane SITL model be made to work with parameter changes alone?
Any guidance from those familiar with the tilt-rotor QuadPlane code would be greatly appreciated. Happy to provide additional parameter dumps, log files, or video of the SITL behavior if helpful.
Thanks in advance,
Dennis