Tiltrotor support for plane

Tim,

I’m not sure that we have the full scope of your yaw issue so I would hesitate to run autotune on a frame like this.

Tridge said,

The log looks good to me. I notice there is a bit of yaw bias, showing the vehicle has a bit of a tendency to yaw right, and it is needing to compensate. The counterclockwise motors are running at about 20% less power than the clockwise motors to counteract that yaw tendency. That reduces your overall throttle authority a bit.

What were the wind conditions during this log and were you pointing the node into the wind?

It might be worth a simple test to perform a short hover in calm conditions pointed into whatever breeze exists. Then yaw to the left a bit, hold, back to center, then yaw to the right a bit, hold, and back to center. A log from this basic flight might reveal more information.

Lastly, how is the yaw control? Does it feel ok for manual flying?

Greg,

Winds were light, say 1-3kts. out of the southwest with no gusts. I tried to keep the nose into the wind for the most part other than a 360 yaw turn to the left and a partial one to the right. Yaw seemed to hold but the logs tell the tale better than my memory. The control I had a problem with was the pitch. Without any pitch deflection, the ship wanted to drift backwards at a steady pace, say 1-2 m/s. Emails to Erich F previously had indicated that was normal flight in ALTHOLD/QHOVER. Easy fix I suppose to just use QLOITER.

Next flight will be the sequence you describe with a yaw left, center, and right.

Thanks for the help and interest.

Hello,

In quadplane.cpp:
"#if FRAME_CONFIG == TRI_FRAME

How can I choose TRI_FRAME? I installed normal ArduPlane to pixhawk and enabled Q_. In frame option there are only quad, hexa, Y6 and similar, but no TRI. I added FRAME_CLASS_COAX=5 in quadplane.h and also added in quadplane.cpp the following:
AP_GROUPINFO(“FRAME_CLASS”, 30, QuadPlane, frame_class, 5),

case FRAME_CLASS_COAX:
setup_default_channels(6);
motors = new AP_MotorsCoax(plane.scheduler.get_loop_rate_hz());
break;

Compiled it, and chose flight modes as QSTABILIZE, but when I look at the output from Main out 1-6, they are all in 50Hz and doesn’t correspond on COAX motor output.

Edit:
Even if I choose all of the modes to be QSTABILIZE, flight mode doesn’t change. It stays at RTL after I load firmware and connect to MissionPlanner. If I disconnect and connect again, mode changes to Manual, but I cannot change it. I change the PWM, and Flight Modes are highlighted with green, but Current Mode still stays same. I downloaded tridge/ardupilot and compiled that. It still has the same thing. Did anyone had that? Happens even if I arm it.

Thanks in advance


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 .