Servers by jDrones

Dual-motor tailsitters

Welcome @bojxkimq and thanks for your comments.

As @losawing pointed out, we have made some progress toward using a single attitude controller in all flight regimes of a tailsitter, but there are very few people in the world that would qualify as test pilots :slight_smile:

One thing that has been encouraging is the success which @losawing has shown with the gain scaling option which needs no airspeed sensor. That allows 3D acrobatic flight over a large speed range with a very simple quad tailsitter.

I think the problem of lack of the test pilots is because setting up ardupilot for tailsitter is very involving (dozens of test flights and half as many crashes). And even after that you will just hope EKF will not freak out or you will not experience instability is some corner of flight envelope.
Regarding EKF, how feasible do you think is to have 6DOF + baro only, but including control outputs (motors + servos) as inputs of EKF for estimation of wind speeds?

Yes, that makes it interesting and it is a challenge to solve all problems.
The only area where creativity can still be lived compared whith unboxing and play.
There the only challenge is to be able to charge the battery.

I’m not a developer but as I understand it is possible to get a branch and to follow another way in programming.

The ArduPilot EKF is extremely robust now. I have installed a PixRacer/GPS as a blackbox logger in an RC pattern plane which was then flown by an expert pilot; lots of inverted flight and aerobatics including snap rolls. The EKF attitude estimate has never diverged in these flights, so I think it is quite capable of providing the attitude estimate for a tailsitter:
Not only is it stable, but the accuracy of its results will be better than that using gyro/accel/baro alone.

I am quite sure it’s very robust for conventional plane dynamics, and with some altitude where GPS has good fix (no multipath, no obstructed satellites).
I understand having GPS is better than not, but it would be nice to be able to do tests indoors, where GPS is not available, and cope with GPS problems if they arise.

Hi all. Long time reader, first time posting. Thanks to everyone who contributes so much time to making tailsitters possible. I’ve learnt a lot from reading this thread.

I’ve managed to modify an FX-61 as a tailsitter. It hovers pretty well after manual tuning (zeigler nichols method as someone above suggested). I’ve just done flight tuning with autotune, it’s flying fine. However, transition back to hover is doing some weird stuff. Desired pitch seems to oscillate, then throttle gets cut. It looks pretty wild in the air, but eventually it hits the throttle again and gets right. Anyone have any suggestions? I’m hoping to get it a bit smoother than this.

Edit: log

Glad to see a new tailsitter user.
Is the log the right one ? I can not find any transition, just auto and FBW.
A photo of your FX61 would be great too.

I’m not sure what’s going on with desired_pitch, but it looks like autotune may have set your pitch gain too high. Did it increase significantly from your manual tuning value?

I just downloaded the log from the link to make sure, yeah it’s the right log. I did an auto mission twice. The mission was vtol takeoff, fly through 5 waypoints, vtol landing. It’s after the last waypoint when it goes to vtol landing when it transitions.

I didn’t do any manual tuning of the forward flight controllers. I initially halved the default values for pitch and roll, then did autotune. The first time I did autotune it dropped RLL2SRV_P down to 0.3 from 0.45, and didn’t change PTCH2SRV_P, it stayed at 0.3. The second time I did autotune it didn’t change anything, they both stayed at 0.3. Makes me wonder, is there a limit on the autotune range preventing it from going below 0.3?

Here’s my baby. I’ve extended the ailerons. I took the wingtips off to bring the centre of pressure forward during hover movements in the pitch axis which helped. I’ve been through a couple of motor/prop combinations and had to modify the motor stands for this one, next time I won’t need the motor mount offset like it is.

I was talking about your copter PID gains, which are Q_A_RAT*
Your pitch gains are
Q_A_RAT_PIT_D 0.004830
Q_A_RAT_PIT_FF 0.200000
Q_A_RAT_PIT_FILT 10.000000
Q_A_RAT_PIT_I 2.000000
Q_A_RAT_PIT_IMAX 0.500000
Q_A_RAT_PIT_P 0.444000

The I gain looks very high; how did you arrive at these values?
I’d try decreasing the I and P gains to see if that improves the back-transition.

I tried to follow the zeigler nichols method. I disabled I and D (Q_A_RAT_*_D to 0 and IMAX to 0), then using manual tune ramp up the P gain until the plane oscillated. Then I use the log file to measure the frequency of the oscillation (Tu) and the gain where the oscillation starts (Ku). That goes in to the zeigler nichols formulas.

This was my results for pitch:
Ku = 0.74
Tu = 87ms (measured 11.5Hz)
Kp = 0.6Ku = 0.444
Ki = 1.2Ku/Tu = 10.2 (limit is 2 so that’s what I used)
Kd = 3KuTu/40 = 0.00483

It did seem odd that I produced an I gain which is 5x the ardupilot max, but I just gave it a shot with 2 and it worked beautifully. I’ll try dropping I gain down to match P and see what that does.

Thanks for the photo and all details,
With a dual motor tailsitter non vectored, there are several important aspects:
1- always keep airflow on control surfaces: increase q_m_spin_min from 0.15 to 0.35 and probably more (be sure your aircraft will not climb forever) and increase q_m_thst_hover from 0.5 to 0.65 (maybe 0.7, check q_tune_throut or servo1/2 output). I can see on your log that the transition happen around -60° as it should be -45° according to q_tailsit_angle. I think this is because your aircraft is not able to reach the desired angle because of low thrust. I have no idea why the desired pitch angle is oscillating ??? that’s strange.
2- get a throttle boost when your aircraft makes uncommended altitude loss in hover: increase as much as possible q_p_accz_p and q_p_velz_p and may be q_p_accz_d, I have 0.5, 8 and 0.01 for these parameters.
3-CG position : you know it already, also take care of the CG position with respect to the thrust line.

Please send the params i am also trying to make non-vector tail sitter with pixhackv32

Hi folks…I’ve built a number of multirotors and most recently a quadplane…I’d like to try a tailsitter next…is there any consensus on which airframe is easiest to modify? I had been looking at an FX-61, and then thinking I’d need to 3D print a couple of motor mounts.

Is there a repository of downloadable 3D parts folks are using on whatever frames?


P.S. I’ve also seen this…I guess I could just add a Pixhawk to it…

@losawing I just updated the binaries at pr-feature-tailsitter-gainscaling
after rebasing on latest master. An update to the PID code was just merged into master which affects the feedforward term and may improve performance. Here’s a link to the PR:

The first comment describes the intent and scope of the PR.
I’ve tested this in SITL with a tiltrotor (Convergence) and a quad tailsitter, and it seems OK, but haven’t yet done any real-world flight testing.

@kd0aij Thanks for the information, I will test the update as soon as possible. But, summer is not the best season for me because there are a lot people around.
What parameter Leonard is speaking about in the PR description ?

You can have a look at post 1241 @lorbass gives a lot of information about his skywalker 6.

Non vectored dual motor tailsitter is by far the most difficult option. If you want to test the arkbird VTOL frame, the easiest and safest way is to modify it as a quad + tailsitter, you will not need special parts, just 4 small brushless motors.

Regarding the PID updates PR:

I believe Leonard is referring to the new Q_A_RAT_ [RLL, PIT, YAW] _FLTE parameters; if this parameter is zero, there will be no change in the behavior on that axis.

There are now 3 filter parameters per axis, FLTD, FLTE, FLTT

These are the values I currently have in SITL for the quad Stryker:

Note that I have set all the accel values very high:
Q_A_ACCEL_P_MAX 500000.000000
Q_A_ACCEL_R_MAX 500000.000000
Q_A_ACCEL_Y_MAX 500000.000000

Q_A_RAT_PIT_FLTE 0.000000
Q_A_RAT_RLL_FLTE 0.000000
Q_A_RAT_YAW_FLTE 1.000000
Q_P_ACCZ_FLTE 10.000000

Q_A_RAT_PIT_FLTD 10.000000
Q_A_RAT_RLL_FLTD 10.000000
Q_A_RAT_YAW_FLTD 10.000000
Q_P_ACCZ_FLTD 0.000000

Q_A_RAT_PIT_FLTT 20.000000
Q_A_RAT_RLL_FLTT 20.000000
Q_A_RAT_YAW_FLTT 20.000000
Q_P_ACCZ_FLTT 0.000000

Q_ACRO_PIT_RATE 180.000000
Q_ACRO_RLL_RATE 360.000000
Q_ACRO_YAW_RATE 360.000000
Q_A_RATE_FF_ENAB 1.000000
Q_A_RATE_P_MAX 0.000000
Q_A_RATE_R_MAX 0.000000
Q_A_RATE_Y_MAX 0.000000

Q_A_RAT_PIT_D 0.012536
Q_A_RAT_PIT_FF 0.100000
Q_A_RAT_PIT_I 0.264005
Q_A_RAT_PIT_IMAX 0.500000
Q_A_RAT_PIT_P 0.264005

Q_A_RAT_RLL_D 0.004074
Q_A_RAT_RLL_FF 0.000000
Q_A_RAT_RLL_I 0.211828
Q_A_RAT_RLL_IMAX 0.500000
Q_A_RAT_RLL_P 0.211828

Q_A_RAT_YAW_D 0.050000
Q_A_RAT_YAW_FF 0.200000
Q_A_RAT_YAW_I 0.111139
Q_A_RAT_YAW_IMAX 0.500000
Q_A_RAT_YAW_P 0.200000

Q_TILT_RATE_DN 0.000000
Q_TILT_RATE_UP 0.000000
Q_YAW_RATE_MAX 60.000000

Also, the copter tuning documentation has been updated, but I don’t see any mention of the new filtering there:

Servers by jDrones