Tiltrotor support for plane

If you are using the current 3.8.0beta3 then just set
Q_FRAME_CLASS=7
and reboot

I just cloned Github, and chose Q_FRAME_CLASS = 7. I’m sorry for my ignorance, I replugged it again, and it suddenly started working. So I went back and uploaded my original one with COAX_FRAME and have another problem. All of the Main Out’s seem to be correct according to Hz output: 1,2, 5,6 - 400 Hz, 3,4 - 50 Hz. That was how I set them up. However, they don’t respond well to my transmitter except for Throttle. Pins 5,6 are motors, and they respond correctly. Servo 1 responds to Aileron, Servo 2 responds to Elevator, Servo 3,4 doesn’t respond to anything. Do I need to change parameters somewhere to connect Transmitter channels to pitch, roll, and yaw? It works perfectly for ArduCopter, but I’m thinking maybe I need to change something since Channels start from 5 for Quadplane mode.

Hello,

I have a question regarding outputs to servos. In QSTABILIZE mode, I checked the servo and motor pin outputs with oscilloscope and they respond incorrectly. When DISARMED, motor outputs doesn’t respond to Transmitter, which seems to be correct, and when I arm them, they respond correctly. Pins 1-4 are for servos, and when DISARMED, Servo 1 responds to Aileron, Servo 2 to Elevator, Servo 3,4 no response. When ARMED they act the same. How it should act is: Servo 1 = Elevator+ Rudder, Servo 2 = -Elevator+ Rudder, Servo 3 = -(Elevator+ Aileron), Servo 4 = Elevator- Aileron. I changed to COAX_FRAME in quadplane.cpp, and changed the Q_FRAME_CLASS. What could be the cause of it acting like that? It seems to be not linking servos properly to AP_MotorsCoax.cpp.

Thanks in advance!

now I’m puzzled, do you have a coax frame or a tri frame? Maybe you could post a picture of your vehicle along with what motors and servos are connected to what outputs?

you can actually have channels in any order now in 3.8.0beta3, just set SERVOn_FUNCTION to the right function for each

sounds like you want both VTAIL and ELEVON mixing? That isn’t possible right now, but it could be added.

i’m really puzzled by your frame type, is it really a coax or a tricopter?

First of all thank you for all the work you are putting in to this.

Question. Will 3.8 Quadplane have a V tail and or Y6 configuration for the Quad Motors?

@tridge thank you for reply. I’m building tiltrotor bicopter. I modified AP_MotorsCoax for that. It has 2 motors, 2 servos that tilt each motor, and 2 servos for elevon. I put COAX_FRAME as 5 in quadplane.h and .cpp and compiled it. However, when I check the output signals, it seem to correspond to different frame or something. Two motors are supposed to react to throttle and roll only, but they also react to pitch. Servos that should tilt should be: pitch + yaw, but instead one of them reacts to roll only, second to pitch only. Elevon servos doesn’t react to anything. How can I activate AP_MotorsCoax in QSTABILIZE? It seem to connect to different file, not AP_MotorsCoax.

Edit:

In the new update, where can I add the frame? It quadplane.cpp TRI = 7, and
enum frame_class { FRAME_CLASS_QUAD=0, FRAME_CLASS_HEXA=1, FRAME_CLASS_OCTA=2, FRAME_CLASS_OCTAQUAD=3, FRAME_CLASS_Y6=4, FRAME_CLASS_COAX=5, };

is removed from quadplane.h. So where can I add another class? Is there a reason TRI = 7, and 5,6 are skipped?

Edit:
Found the problem! My pins correspond to Plane mode: Pins 1-4 are Roll, Pitch, Throttle, Yaw. I enabled Q_ENABLE, and changed FRAME_CLASS to 7. Flight modes are all QSTABILIZE, pins still correspond to Plane mode. What other parameters do I need to activate in order to activate FRAME_CLASS = TRI?

Thanks in advance

After some discussions with Marco I’ve done a PR for setting the downward tilt rate and upward tilt rate separately:


it also changes it so that if you switch to MANUAL mode then it will tilt the rotors forward at least at 90 degrees/second. That makes MANUAL a viable recovery mode for good pilots.

would you mind posting a photo of it?
It sounds like a twin-motor tailsitter, but you don’t normally need to tilt the motors for a tailsitter, you just tilt the whole aircraft. If it does tilt the motors, then how do the elevons work both in hover and in forward flight?

yes, that configuration is supported.

Elevons are for forward flight mainly, but in hover it helps the pitch a little, so I just decided to include as well. I was using COAX code because it has 2 motors and 4 servos, like in my case. I had to modify the mixing. I uploaded beta3 version to Pixhawk, but pins correspond to Plane mode: Pins 1-4 are Roll, Pitch, Throttle, Yaw. I enabled Q_ENABLE, and changed FRAME_CLASS to 7. Flight modes are all QSTABILIZE, pins still correspond to Plane mode. What other parameters do I need to activate in order to activate FRAME_CLASS = TRI?

Thank you in advance!

1 Like

so do elevons rotate as well when you tilt the motors? Or do they just have so much throw that they can be used in both VTOL and fwd flight? In that case we’d need a way to change the mid-point of the throws.
I’m sorry to be so slow in understanding the setup, I’m just having trouble visualising it. Any chance you can post some photos?

I really can’t help with the parameters until I understand the physical layout, movements and angles of the aircraft. Right now I’m still baffled!

Those two motors are tiltable. Second pic shows the servo that tilts motors. Elevons are those wooden ones behind motors. Elevons won’t rotate 90 degrees when transitioning to fwd flight, it will stay as it is. Bicopter drifts a lot forward and backward, so during hover, elevons help pitch when it drifts.

thanks for the photos! I understand the layout much better now.
The only remaining question on the setup is how it hovers. From the picture it looks like it hovers with the wing level, but I suspect it would hover better with the nose up and the elevons straight down, with the motors rotated. That would give airflow over the elevons and would thus give you pitch and yaw control.
If it tries to hover with the wing flat then I can’t see how it would get all the axes of control it needs. For example, if it tried to control roll with differential thrust then that would cause yaw, and there isn’t any control surface to counteract that.
Are you planning to make it fly nose-up in hover? Then the only tricky part would be landing, as the propellers would hit the ground. Maybe it would work to rotate the props flat with the wing just before landing?

@ Tridge Once we declared Q_FRAME_CLASS =7 What are the servo channels to 3 motors and tail servo ?

In 3.8.0 Beta2 code it has declared 5,6,8 and 11
case AP_Motors::MOTOR_FRAME_TRI:
SRV_Channels::set_default_function(CH_5, SRV_Channel::k_motor1);
SRV_Channels::set_default_function(CH_6, SRV_Channel::k_motor2);
SRV_Channels::set_default_function(CH_8, SRV_Channel::k_motor4);
SRV_Channels::set_default_function(CH_11, SRV_Channel::k_motor7);

Best regards
Chamika

It hovers with wing level. When nose goes up, elevons and moment around axis along wing puts it back. Roll is controlled by differential force from rotors, and yaw is controlled by differential angle of rotors. Roll and yaw are controlled well. Pitch is the only one that causes a drift, but it’s still stable enough. For forward flight, I wanted to rotate the rotors forward and fly it like a flying wing.

Should be pins 1,2,4, and 7 in Main Out in Pixhawk.

Thanks for the reply . I checked with servo 7 it is 35 ( motor 3) . Did not responding to yaw . But then I replace it with Beta 3 code Quadplane.cpp . it has done some changes compare to beta 2
case AP_Motors::MOTOR_FRAME_TRI:
SRV_Channels::set_default_function(CH_5, SRV_Channel::k_motor1);
SRV_Channels::set_default_function(CH_6, SRV_Channel::k_motor2);
SRV_Channels::set_default_function(CH_8, SRV_Channel::k_motor4);
SRV_Channels::set_default_function(CH_11, SRV_Channel::k_motor7);
AP_Param::set_frame_type_flags(AP_PARAM_FRAME_TRICOPTER);

now it is working well .

@ayertay, ok, makes sense, sorry for being slow in understanding!
I see you’ve already started a discussion with Leonard on this:
http://discuss.ardupilot.org/t/new-bicopter-airframe/13347/4
I think the next steps are:
(1) add a bicopter to the built-in SITL support (in libraries/SITL). It would be very similar to this one:
https://github.com/ArduPilot/ardupilot/blob/master/libraries/SITL/SIM_SingleCopter.cpp
but would take advantage of the support for tilting rotors. See the example of the tilt-tricopter frame here:
https://github.com/ArduPilot/ardupilot/blob/master/libraries/SITL/SIM_Frame.cpp#L95

(2) add a AP_Motors_Bicopter motors backend. As Leonard suggests, starting with the existing AP_MotorsSingle.cpp and creating a AP_MotorsBicopter.cpp would be the way to go.

Then get it flying with ArduCopter in SITL. Once that works, then get it flying with ArduCopter in your real airframe. Only after that would you then add support for that airframe type in the quadplane code so you can transition.

I hope this helps!

great! Any flight videos to share?

Thanks to the generosity of Andy Trench I should be getting a FireFly6 soon, I’m really looking forward to trying it out with the latest master code

1 Like