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: Tailsitter VTOL | PX4 User Guide 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
I’m very interested as well. Are you doing this for fun or work?
I would like to chat with you.
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
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? https://github.com/PX4/PX4-Autopilot/blob/8de2c80b34598e7eb908cecf370bae7b33dc3b24/src/modules/vtol_att_control/tailsitter.cpp#L349-L353
When you said you’ve done this in the past, does that mean you flew something with it?
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.