How to methodically tune (almost) any multicopter using ArduCopter 4.4.x

See Section 8 in the first post.

1 Like

No, the PIDs will just be plain wrong. Might be over-tuned, might be under-tuned, might be anything.

1 Like

Thanks for this it looks really great. I will try following.

I think this is important. Ardupilot carries the natural caveats of being multipurpose/multitargeted.
It’s so easy to miss a important parameter, or step, or detail.
I experienced this after I started my second setup configuration. My conclusion was I need a cheklist for this. It sure needs to be methodological.

2 Likes

That is nice table explain A lot… Thanks…

Section 8 mentioned it is for Alt-hold flight mode. Does it apply to Loiter flight mode?
what is a good transient response value? less than 60ms. 0msec is the best. Is my understanding correct?
If the transient response is above 60ms, how do users tune the Loiter parameters to bring the transient response nearer to 0sec?

For clarity’s sake I’m oversimplifying here:

  • AltHold uses a 2 level cascading of PID control loops:
    • angle rate - the inner most control loop
    • angle - the second control loop, wraps around the angle rate control loop
  • Loiter adds a 3rd cascading outer PID control loop on top for position. And the inner angle and angle rate loops are still used.

Diagrams are on the ArduCopter’s System Identification documentation page

So yes, Section8 does apply to Loiter and Auto and all other modes. The inner loops need to be tuned (fast-transient response, good noise rejection, low overshoot, stable, etc) for the outer loop to even have a chance of getting tuned and do its work.

A good transient response depends on the size of your vehicle. A 300g vehicle will potentially be more agile than a 300Kg one. There is no one value fits all. But yes, the smaller the better.

To improve the loiter response, you first need to make sure the innermost angle rate control loop is performing correctly, after that the second level angle control loop is doing OK. And only after that you tune the outermost position control loop.

This process is explained in Section 11, and we wrote an entire Blog post on the topic and also wrote some of ArduPilot’s system identification documentation there are depictions of the three control loops explained above. We also contributed a simulink model of ArduCopter’s inner control loops.

All of that information is on Section 11.

1 Like

The extract_param_defaults.py inside the diatone_taycan_mxc.zip gives a different extract result from the previous version.

For example, ACRO_RP_EXPO can take floating number.

1 Like

Are you using the latest diatone_taycan_mxc.zip file?

1 Like

Apologies for the false alarm, the update was as fast as the stock market. Yes. the one with 4.3.8, 4.4.4, and 4.5.0-dev version settle very well for comparison software. Thank you for the great effort.

2 Likes

New version:

  • added eCalc multirotor example screenshot
  • updated diatone_taycan_mxc.zip file
    • added estimation example on 14_pid_adjustment.param file
    • added support for ArduCopter 4.5.0-beta1 version
    • added more unittests to the python scripts
  • improved BL Heli settings to reduce the probability of ESC de-sync
  • fixed wind estimation units
1 Like

@MartyMcFly the estimation example on 14_pid_adjustment.param file is for your particular use. It should reduce the time you need in autotune.

1 Like

Thank you so much you are A super star,you will be mentioned in dispatches ,have a great day Amilcarlucas and plenty of fun

@MartyMcFly have you already performed the autotune on your taycan?
If yes, ignore that file.

1 Like

yes but will look at your one as well and compare and thank you

Nice. Can you send me all your intermediate .param files (except 03_imu_temperature_calibration_results.param, 11_mp_setup_mandatory_hardware.param and 20_inflight_magnetometer_fit_results.param) in a .zip file, I would like to see the differences as well?

Is there another way to anonymize a log file? MP hidden anon log function seems like never stable before.

PSC_ACCZ_I to 2 x MOT_THST_HOVER
PSC_ACCZ_P to MOT_THST_HOVER

I like to know if there is a similar approach for PSC_ACCZ_n like the ATC_ACCEL_n_MAX?

Is it safe for the flight control to set it automatically if the formula is safe like the MOT_HOVER_LEARN?

ATC_ACCEL_P_MAX x (min_TOW / max_TOW)
ATC_ACCEL_R_MAX x (min_TOW / max_TOW)
ATC_ACCEL_Y_MAX x (min_TOW / max_TOW)

1 Like

No, currently there is not. It does make some sense, but I would need to look at the code to give you an answer.

2 Likes

Hi, amilcarlucas!
I’m very appreciative of this awesome guide! But I can’t understand this case: in the file “11_mp_setup_mandatory_hardware.param” ATC_ACCEL_P_MAX,193500. But in the documentation, this range is 0 - 180000. And ATC_ACCEL_P_MAX more than 180000… And the same situation with ATC_ACCEL_R_MAX,193500
Please explain to me why these values are so high. I’m stuck in this step(((

That specific file is for illustration purposes only, read the instructions carefully. I explicitly say to not edit it and to not load it.

There are three such files, that you shouldn’t edit, nor use. I hope you know which three I am referring to. Or should I add another paragraph explaining that a second time in more detail?

1 Like