Quad tailsitter with no control surfaces

Hi, I am interested in building a unique VTOL. I want this vehicle to take off as a quadrotor, then transition into fixed wing flight, all with no traditional control surfaces like elevons, rudders, etc. So while in fixed wing flight, I want to use differential thrust of the four motors to provide thrust and control. The body of the vehicle will be shaped like an airfoil in fixed wing flight to provide lift.

At present, the only way I have been able to get this to work is to rewrite tailsitter.cpp to remap multicopter outputs and fixed wing outputs, according to the current flight mode. However, if you read here: https://docs.px4.io/master/en/frames_vtol/tailsitter.html there is a mention of optional elevons under the quad tailsitter.

I can’t think of a way to do this without changing the tailsitter code, but the docs seem to hint that perhaps it can be done. Is there a way to accomplish the desired behavior with some sort of clever mixing or other parameter settings? If you imagine in your mind rotating the vehicle between MC and FW, the controls in MC map to different controls in FW (for example MC yaw becomes negative FW roll, etc.) So it’s not exactly a simple fix, and there’s the issue of the two control groups stepping on each other in certain phases of flight.

If anyone has ideas on how this could be accomplished without rewriting the flight stack, let me know, thanks!

@gerdes1723 The default tailsitter model in PX4 SITL Gazebo is a quad tailsitter without control surfaces.

You can simulate the model with

make px4_sitl gazebo_tailsitter

I tried simulating this model, and it turns out there are elevons in there helping to do the turns. I commanded a few direction changes in qground control, and it seems that the motors handle pitch but turning is handled by the elevons only.

thanks for the awesome information.

@gerdes1723 Actually, looking back into the mixer file I think you are right :slight_smile:

Hi,
I’m very interested as well. Are you doing this for fun or work?
I would like to chat with you.
Thanks!

I’ve done this in the past. The easiest way is to edit tailsitter.cpp , namely the void Tailsitter::fill_actuator_outputs() function.

What you’ll see is that while in FW_MODE the only signal that is sent to the motors is the THROTTLE.

You need to also send this signals from the fw_controller to the motors, taking into account the different coordinate systems.

For example add:

_actuators_out_0->control[actuator_controls_s::INDEX_PITCH] = _actuators_fw_in->control[actuator_controls_s::INDEX_PITCH];

I’m not sure how much of a hack this is, or if there’s a better way however.

The other way would be to completely redo the motor mixers so that they are also “subscribed” to the FW signals.

there is a mention of optional elevons under the quad tailsitter

It’s optional that the elevons are enabled in hover mode (additionally to the MC motor control), in fixed-wing flight phase they then are though the only means of controlling the pitch and roll. For yaw though there is already the option to enable it through a param, so prob you could extend that to also work on the pitch and roll? PX4-Autopilot/src/modules/vtol_att_control/tailsitter.cpp at 8de2c80b34598e7eb908cecf370bae7b33dc3b24 · PX4/PX4-Autopilot · GitHub

When you said you’ve done this in the past, does that mean you flew something with it? :slight_smile:

Yes. We didn’t fly without any control surfaces but just using the control surfaces wasn’t enough so we were also controlling attitude with the motors.

Obviously it should be noted that you can only feasibly control FW Pitch, and FW Yaw with the motors. FW Roll (which would be MC Yaw) is unfeasible in most cases.