Dual-motor tailsitters

Foamboard Fixed-Motor Tailsitter

Here’s the maiden flight of a new foamboard fixed-motor based on the FliteTest Spear. It’s pretty manageable with the default tuning in QStabilize, QHover, and QLoiter.

Working on a write-up with plans, video, and log files.

2 Likes

@lorbass
Congratulations on the "nice Yaw-Dance"
But you’re already a bit further than us.
Walter + Rolf

Foamboard Tail Sitter

I was thrilled to find this thread! The firmware seems to be moving forward very quickly and it’s exciting to see that there are people flying various configurations.

In hopes of making things more approachable to others, here’s quick rundown of how I put together a dual fixed-motor out of foam-board that seems to be fairly manageable in hovering and forward flight modes on the default parameter values. I’ll be very grateful for your corrections and feedback, especially regarding the log file analysis for tuning.

All the files mentioned below (airframe plans, parameters, log files, photos, and videos) are in this Dropbox directory:


Airframe

Inspired by @ag-sys in this post (Dual-motor tailsitters), I started with a FliteTest Spear and added dual motor pods. The Spear has plenty of space in side the fuselage for electronics and battery, bringing the vertical location of the CG into good alignment with the motors.

Motors from FliteTest Power Pack D

Motor rotation:
Right: CW
Left : CCW

Battery: 3s 2200mAh

Takeoff weight is 835 grams.


Wiring for Pixhawk1, HolyBro version
All external module connections as normal. No airspeed sensor.
Output 1: ESC Right
Output 2: ESC Left
Output 5: Elevon Right
Output 6: Elevon Left


Firmware
Place aircraft in fixed wing flight orientation.

Install firmware ArduPlane V3.8.0beta5
Setup Accel, Compass, Radio as normal

Q_ENABLE=1 (was default value)
Q_FRAME_CLASS=10 (Tailsitter)
Q_TAILSIT_INPUT = 0 (was default value)

Write and refresh parameters

ELEVON_OUTPUT=3 (frame specific)
Reverse pitch axis with checkbox in Mission Planner > Radio Cal. (Not sure what parameter this flips.)

SERVO1_FUNCTION=74 (right motor)
SERVO1_MAX=2000
SERVO1_MIN=1000
SERVO_REVERSED=0
SERVO1_TRIM=1000

SERVO2_FUNCTION=73 (left motor)
SERVO2_MAX=2000
SERVO2_MIN=1000
SERVO_REVERSED=0
SERVO2_TRIM=1000

SERVO5_FUNCTION=4 (right elevon)
SERVO5_MAX=2000
SERVO5_MIN=1000
SERVO_REVERSED=0
SERVO5_TRIM=1500

SERVO6_FUNCTION=19 (left elevon)
SERVO6_MAX=2000
SERVO6_MIN=1000
SERVO_REVERSED=0
SERVO6_TRIM=1500

FLTMODE_CH = 5 (your preference, using 3-position switch)
FLTMODE1 = 17 (QSTABILIZE)
FLTMODE4 = 18: (QHOVER)
FLTMODE6 = 5 (FBWA)

Save parameter file (TS1-V7.param)

ARMING_CHECK = 0 (Disabled for testing)
ARMING_RUDDER = 2 (your preference)


Check for reasonable output

Upon boot, right aileron sometimes goes full down for 2-5 seconds, then returns to neutral.

Mode: FBWA, lay plane on it’s belly
Control surfs: yes
Motors: Disarmed, nothing. Armed with zero throttle, nothing. Armed with throttle, normal throttle response. No differential throttle.

Mode: QSTABILIZE, stand plane on tail
Control surfs: upon pressing safety button, deflect a bit, then stabilize. Sometimes wind up over time and sit against stops. Respond to sticks. Respond to picking up and moving aircraft around each axis.
Motors: Disarmed, nothing. Armed with zero throttle, nothing. Armed with throttle, normal throttle response. Motors spinning, pick up and move aircraft, differential response as expected.

Investigate QSTABILIZE arming motor behavior. Default values
Q_M_SPIN_ARM=0.1
Q_M_SPIN_MIN=0.15
Increased these to 0.2 and 0.25. Motors still don’t spin upon arming. Returned to default values.

ARMING_CHECKS = 1
FLTMODE6 = 19 (QLOITER)


Questions

  • Should motors spin upon arming?
  • Question: Does the output number matter, if the correct SERVO#_FUNCTION value is assigned?
  • Why does right aileron go full down on boot? Maybe choose another output channel?

This is pretty long, so I’ll post the testing notes separately.

4 Likes

https://vimeo.com/223393551

Foamboard Tail Sitter - Flight Test - Hover

Log files 45-48. (I think log 47 includes all three modes, but one log includes two flights, i.e. didn’t disarm between) and I’m not very familiar with the log analysis tools.) Link: https://www.dropbox.com/sh/aq6rjxkwkjo7exq/AABx89SEWDZo3jDPSWL8euqYa?dl=0


Notes

Hovers at ~50% throttle.

QSTABILIZE - Fairly stable, even in light wind. Good authority in pitch and roll (earth frame). Yaw has weak authority and a some roll/yaw coupled oscillation when fighting gusts (i.e. pitch lean). Moving CG up seems to reduce this oscillation.

QHOVER - Fairly stable, despite wind gusts. Performed takeoffs by using full throttle to get off the ground before reducing to 50% once in the air.

QLOITER - Less stable. More roll/yaw coupled oscillation (earth frame) when fighting gusts (i.e. pitch lean).

4 flights short flights with one battery. Consumed 1703 mAh of 2200 mAh.


Changes

FLTMODE6 = 8 (AUTOTUNE)


Questions

  • It seems like a bit of yaw tuning is needed. I’d appreciate any advice on the appropriate adjustments.


https://vimeo.com/223391494/afee680658

Foamboard Tail Sitter - Flight Test - Transition

Hover was fairly manageable, so I decided to try transition.

Log files 49-52. Link: https://www.dropbox.com/sh/aq6rjxkwkjo7exq/AABx89SEWDZo3jDPSWL8euqYa?dl=0


Notes

Transition QSTABILIZE to AUTOTUNE and also QHOVER to AUTOTUNE

  • Pitch oscillation following transition. Dies when throttle is reduced to ~50% and does not recur when throttle is raised.

Cruise AUTOTUNE

  • Roll authority and control good.
  • Pitch oscillation upon big pitch up inputs.
  • Level flight requires ~100% throttle and a little up elevator.

Transition AUTOTUNE to QSTABILIZE

  • Climbs ~8 meters. Good stability.

Landing QSTABILIZE
Feels unstable at even modest descent rates. The video doesn’t look too bad, but it felt looser than the hover tests. I tried to hold altitude during wind gusts and descending in calm air.

Transition AUTOTUNE to QHOVER
Climbs ~8 meters. Slowed the motors way down. Knowing the motors stop at zero throttle, and knowing pitch is unstable in descent, I switched to QSTABILIZE.

Landing QHOVER
Feels unstable at even modest descent rates, though it was easier to hold a slow descent.


Changes

  • Try more cruise thrust. Maybe higher prop pitch or more motor rpm. (Currently 1045 prop on 935kv motor with 3S battery.)
  • Try more cruise angle of attack.
  • Reduce pitch oscillation. Try reducing pitch gain. Q_A_RAT_PIT_P currently 0.25. @agsys “halved the roll and pitch P and I gains for fixed wing flight.” Dual-motor tailsitters

Questions

2 Likes

congrats! all the swept wing foamies that I mess with seem squrilly to me as well, lots of yaw and decend issues, might be the light weight? my stright wings go 3.5 to 6 lb. also looks like very fast transitions,we might want to find a way to slow those down, or better,be able to fly into and out of transition with more pitch movement ,might be a structural issue( that’s a hint Tridge )

also try to do your landing transitions upwind so you don’t fight the breeze as much on descend

Hey ,Tridge been working on illusion, testing yaw and transition in hand, dif yaw = good… when switch to fbwa throttle goes to high and serfaces abrupt switch to horzontal seems good for fixed motor mount but I am concerned with vector setup. with baseflight bicopter software, my normal transion is t/o in horizon mode (3pos switch) pos 2 is switch off horizon fly to nose down to horizontal and switch to airplane pos3 that one also changes to a 2nd controller setup for inav and is reverse for landing, my observation with baseflight is that I can hold 1/2 down elevator and the tilt might still point the motors up to hold whatever position the stick is in, is it possible to get that control with a pix ? my controller also uses 2 IMU’s 1 vert and 1 horizontal ,also with the new radio’s can we get more mode channels ? hope this is helpful and doable

@tridge,
First succes with Caipirinha dual motors vectored Tailsitter.

Remarkable issue:
Q_M_THST_Hover does not work. Even set to 0.8 the thrust increases proportional (linear)
to CH3in. With stick in the middle CH5out or CH6out ppm = 1500
This makes the mode change from QSTABILIZ to QHOVER difficult as shown in the video.
Regards Otto

2 Likes

lookin good, better and better,love that it can go upside down and still go, big thunbs up!

https://youtu.be/fyx0YAX0gEg illusion test

Looks good, perhaps Q_ANGLE_MAX higher than default (3000) to fight against wind?
Otto

is it possible to use a rangefinder or optical flow with a dual motor tail sitter aircraft when in hover position?

are dual gps receivers advisable? one for forward flight and one for hover?

I am starting to poke around inside the control loops with a view to improving the wind resistance of the so called ‘vectored tail-sitter’.

I had a question about the axis convention. The code in tailsitter.cpp implies that zero pitch is when the nose is pointing up in hover - is that correct?

I will put the functionality in a new function called bicoptertiltrotor or something like that to make a clear distinction between it and the traditional tailsitter, because the control strategy will be quite different and I do not want to clutter up the tailsitter.cpp file with branch logic.

2 Likes

OK, it looks like the pitch convention is different between VTOL and forward flight modes. I remember now that Tridge made a point of this at his unconference talk. It’s required to keep the copter loops (Leonard) happy.

1 Like

I’ve made a start here that changes the axis reference to rotor instead of body frame

https://github.com/priseborough/ardupilot/tree/tvbs-wip

This has some theoretical advantages in decoupling rotor tilt and body motion, but there may be some problems in practice that make it not such a good idea. I still need to add some angular accel and rate limiting to nav_pitch_cd.

2 Likes

Foamboard Tail Sitter - Flight Test - QHOVER

Here are a few fairly close looks at transitions into and out of QHOVER.

From AUTOTUNE into QHOVER, there’s some instability as it tries to pitch up hard while holding altitude. Maybe there’s a strategy to prioritize stability over altitude hold during the first few seconds. @tridge mentioned a strategy whereby stability might be prioritized over altitude hold. Is this on by default, or activated by flipping a parameter?

In hover, pitch stability is better with the “top” facing into the wind. I think this is because I calibrated accelerometer level with 3 degrees of nose up to get more angle of attack in forward flight, but it probably also means hover is 3 degrees from vertical. Is there a better way to set angle of attack independently for forward and hovering modes?

Overall though, it feels pretty confidence inspiring!

Next Steps

Transition into and out of QLOITER. Seems like it’s okay to go straight from QLOITER to FBWA, but coming back to a hover it might be better to go FBWA --> QHOVER (allow forward speed to decrease close to zero) --> QLOITER. This kind of strategy is described in the quadplane documentation also.

1 Like

The nav_pitch_cd filtering has been added.

To explain the concept a bit further, the idea is that rather than try to run copter control loops using a body frame of reference, we instead use a rotor frame of reference which is a combination of the angle of the body plus the tilt angle of the rotors relative to the body averaged across the rotors.

The ‘Twin Vectored Belly Sitter’ has been added as separate frame class and is selected by setting Q_FRAME_CLASS = 13

We then use the nav_pitch demand to specify a desired rotor orientation in earth frame. This demand is rate limited according to the Q_TVBS_SLEW_LIM parameter with default value of 60 deg/sec. The rate limited pitch demand is also filtered using first order low-pass filter as specified by the Q_TVBS_SLEW_TAU time constant wiht a default value of 0.2 sec. This filtering ensures that the tilt mechanism will not be asked to to rapid angle changes that is cannot follow.

The tilt servos are adjusted to keep the rotors pointing in the direction specified by the nav_pitch_cd variable. The mapping from demanded motor tilt to servo deflection is specified by the Q_TVBS_ANGMIN and Q_TVBS_ANGMAX parameters and the servo PWM max, min and trim parameters for the tilt servos.

In effect we are pointing the motors similar to how a servo camera gimbal is pointed.The wing is allowed to assume it’s preferred angle underneath the rotors. The elevator is used to damp the body pitch motion so the motor pointing control does not have to compensate for large body rates . This aerodynamic control damping is controlled by the Q_TVBS_QGAIN parameter. Some additional pitch damping is also fed into the tilt motors and controlled by the Q_TVBS_TILT_LAG parameter.

This means the copter control laws are demanding the angle of a rotor disc which is what they are designed to do.

Control of yaw and roll has been left alone for the time being, however I will be adding a gain parameter so that we can also adjust the amount of fraction of aileron control action sent tot e control surfaces during VTOL operation.

3 Likes

Hi prisebrough, if I understand your idea, the wing is hanging in a semi float in hover with pitch controlling motor tilt to control velocity forward or back with the wing in tow? this should be interesting, might just be able to fly into and out of ff with ease,if I understand this correctly ?

@priseborough,

Good idea, is this calculated for both Tilt units separatly?

Regards, Otto

1 Like

@lorbass The pitch angle ‘seen’ by the copter loops will be the average of the two rotors and does not include the aileron mixing which is equal and opposite for each motor. The tilt angle demand for each rotor is the sum of the tilt required to track the filtered nav_pitch_cd plus the aileron mixing component.