Copter Wobbling at High Head-Speed

I am testing out the CUAV Nora+ flight controller with ArduPilot on my Trex 450L Dominator heli. Flights were going well on my first tests (See Logs 1 or 2), as they were running on low head speed. But when I set the heli for a high headspeed (78% throttle) the heli immediately goes into an aggressive wobble upon reaching its set headspeed (see log 4). I had not set any filtering or made any tuning adjustments at this point. All tuning is at its default.

My goal has been to progress through the tuning process by performing a first flight, then proceed to add notch filtering and custom tuning. Just now, I added some notch filtering, but didn’t see a change in the heli performance, still seeing the same wobble (see log 6). It did seem however that the heli control response had become slightly delayed. Hopefully the addition of a single notch filter isn’t delaying CPU processing.

The notch filter I set up has the following parameters
INS_HNTCH_ATT: 40
INS_HNTCH_BW: 40
INS_HNTCH_ENABLE: 1
INS_HNTCH_FM_RAT: 1
INS_HNTCH_FREQ: 132 (132 Hz center frequency)
INS_HNTCH_HMNCS: 31 (Harmonics 1, 2, 3, 4, and 5)
INS_HNTCH_MODE: 0 (Fixed Mode)
INS_HNTCH_OPTS: 0
INS_HNTCH_REF: 0

My vibrations may still be a bit high. But I am thinking this wobble is more of a control response issue. Would this problem likely be resolved after providing values for P-gain and maybe D-gains? My I-gain is also a little low, and could be increased. Or the problem may be that I still have the default low-pass filter setting of 20Hz.

This is my first attempt at setting up an ardupilot heli. So I am probably just missing a basic tuning step. There is a lot of information when it comes to tuning, so it’s beginning to go a little over my head.

LatestParameters.param (20.4 KB)
Flight Logs and some IMU Graphs

@Raisintoe I requested access to your google drive.

The reason you may be seeing the oscillation is due to the rate P or rate D gain causing a feedback instability at the higher rotor speed. Even the default gains can cause oscillations for some helicopters.

My Pitch, Roll, and Yaw error frequencies are set to 20Hz (ATC_x_y_FLTE and ATC_x_y_FLTT). That seems way way low to me. Aren’t these the sampling rates for the PID controller? Sample rates should be faster than the center frequency present in my oscillations I would think, that means that these should exceed 132Hz in my case. Is this correct?

No. they aren’t the sampling rate. That is the cut off frequency for a low pass filter. So it starts to reduce the amplitude of any oscillations with frequencies above that frequency. The greater the frequency of the oscillation is above the cut off frequency then more the amplitude is reduced.

For helicopters, the noise in the control signals (PIDs) mainly comes from the rotor head at multiples of the rotor speed. I suspect that since you saw the oscillations after you increased the head speed that it was due to the tuning. Like i said, even the default tuning will cause oscillations in some helicopters.

Looking at the second log, the VIBE message shows that the vibrations that the EKF is experiencing are good. All axes are below 10. Based on the oscillations that I am seeing in the roll axis, I would guess that the rotor speed is around 2000 RPM. However you are using the throttle curve mode of the Rotor Speed Controller. Have you tuned the throttle curve? You will definitely want to tune the throttle curve in order to ensure the rotor speed stays relatively constant.

In the 4th log, it looks like the rotor speed is now around 2700 RPM. And the wobbling that you experienced was feedback instability. The D term of the PID controller was coupling with the aircraft dynamics and causing the oscillations. you can zero the Rate P and Rate D terms for pitch and roll like it instructs for tuning the aircraft in the Tradheli wiki.

Overall the noise from the rotor is pretty good but the control signals would still benefit from using the notch at the rotor head speed. So you need to decide on that and then set the notch. Follow the instructions in the tradheli wiki. You can use the batch sampler to collect the data to look at the frequencies which I think is most reliable. Once you complete the steps for preparing for tuning then you can run the autotune or manually tune. I would recommend that you be careful in setting the I term for the pitch and roll axes. I don’t recommend setting the I term like it is done for multicopters because too much I term can cause problems for a heli while it is on the ground.
If you have any other questions, please post and someone is sure to respond.

1 Like

Thank you for the reply Bill!

I am using the throttle curve mode, but it is set to be at 0% throttle at 0% (-3 degrees) collective, then reaches its full 78% throttle for 25% (0 degrees) collective and up. This should produce a constant head speed from 0 degrees pitch and onward. I assume this should work fine to use a static filter for 78% constant head speed. The resonance I have been seeing is 132Hz. The heli ESC is running in governor mode between 75% and 85% throttle. And yes, the headspeed that you are seeing sounds accurate.

Other than notch filter settings, I am not familiar with other tuning procedures for throttle. I was curious if there is a parameter for setting the known headspeed and main rotor diameter. From this, Arducopter could perform it’s own rate adjustments, but I haven’t seen this.

I had thought the P and D terms were already set to zero. I see now that they are not, I will set those to zero. From there, I suppose I can add P and D terms back in using the channel 6 adjustment. I’ll make sure the max gain adjustment stays below the current settings. I will also set the notch filter at the rotor headspeed. Should this filter be centered at the rotor headspeed, or should the headspeed be a harmonic of the ariframe resonance of 132Hz that I see in the FFT?

speeking of FFT. I am not getting any data for generating an IMU Batch Sample. At least when I click on the IMU Batch Sample button, no graphs are being generated. Since this hasn’t been working for me, I have been looking at the “Run all imus-IMU1-3 MSG” graphs. There must be some parameters that I missed for collecting IMU batch sample data?

. . . Update: Fund the instructions here for IMU batch sampling: Measuring Vibration with IMU Batch Sampler — Copter documentation

If the esc has a governor, then why aren’t you using mode 2 of the RSC?

Yes. There is a wiki section on batch sampling and vibration analysis. Let me know if you can’t find it.

Not sure what this resonance is but it could be structural or the tail rotor. I’m not sure that the 132 hz that you have determined is accurate. Use the batch logging method to get better data on the vibrations.

The notch filter should be set to the head speed. Then set the harmonics for the 1, 2 and 4 if you have a two bladed rotor system. The 1st harmonic is the one we really want to attenuate as I can see that in the data. I normally set the bandwidth to 10 hz. With a governed rotor speed, this is wide enough.

This heli has a two-blade system. But I will be switching over to a tri-blade. Will the harmonics of the tri-blade be 1, 3, 6?

Yes. You always notch the 1st harmonic and then it is the multiple of the number of blades.

The wobble is gone! The gains were the issue as you said.
I set the notch filter to 45Hz with a 15Hz bandwidth.
Also changed the following ATC parameters:
(Parameter: From → To)
ATC_RAT_PIT_D: 0.001 → 0.0
ATC_RAT_PIT_P: 0.024 → 0.01
ATC_RAT_RLL_D: 0.001 → 0.0
ATC_RAT_RLL_P: 0.024 → 0.01
And for the fun of it, decided to change the yaw as well. Made for a swingy tail:
ATC_RAT_YAW_D: 0.003 → 0.0
ATC_RAT_YAW_P: 0.018 → 0.1

Here is the IMU Batch data:

From here, I suppose the next steps are to set the trims in ArduPilot for Roll and Pitch to center the I-gain, then move on to adding D-gain for roll and pitch, then increase P-gain for roll and pitch. Also add back tail gains.

The log is uploaded in my google drive location from above, as log number 7.

If the tail was not oscillating then you shouldn’t have touched the yaw gains. In fact, we typically only use P and D gain and zero the FF gain for the yaw axis. So I would recommend you set the P and D gain back to the defaults for the yaw axis.

Looks like the notch filter is working well.

After setting the trims, you want to tune the pitch and roll FF gain as instructed in the wiki. Then work on the rate p and rate d gains. Sounds like you have experience with setting up and flying heli’s considering you handled the yaw axis with no P or D gain.

Haha, yes! I’ve been flying helis for a while. Learned on the E-flite Blade CP 300 years ago. Had to learn how to deal with the drifting motor-driven tail from the beginning.

I did keep the P-gain at 0.1 for this latest flight.

How can I monitor the channel 6 gains? I set the Tune parameter for Rate Roll FF (53). I would like to view the actual change in mission planner.

The FF gain is set more by looking at the logs and seeing that the desired rate and actual rate amplitudes match.

I believe you can set a parameter that is named something like PID MASK. That lets you set the axis you want the tuning data sent to mission planner. In mission planner in the data tab, there is a tuning checkbox at the bottom of the map. Check it and a strip chart will appear. Double click on the strip chart and the list of available telemetry data will appear. I think the list contains names like pidff, pidP and others. Check the ones you want and they will appear on the strip chart

Ah, my CH6 option needed to be set to “Do Nothing” I had it on a camera gimbal mount control. Manual Roll/Pitch tuning - #4 by Saturnius

The Trex is flying great now. Thank you Bill!


@Raisintoe Glad you were able to get everything working well. post a log from this flight. I’d be interested to see it and the gains that you arrived at.

Logs 13 and 14 are from these last two flights, and are uploaded in my shared drive. In log 14 I was adjusting the tail P gain. Didn’t end up needing to change it. I would like to speed up the yaw rate though. It’s pretty slow, which is great for the large drone, but would like it quicker in my little heli.

so now that you have it flying, here are some things to adjust to your liking. There are many parameters that affect the “feel” of the aircraft

These limit the max achievable acceleration
ATC_ACCEL_P_MAX,110000
ATC_ACCEL_R_MAX,110000
ATC_ACCEL_Y_MAX,27000 - This is the reason why yaw control is so slow. Raise this to at least 80000 if not more. Be careful as this might cause oscillations and may require you to lower Yaw rate P or D gains.

ATC_INPUT_TC,0.15 - this affects how quickly the aircraft responds in pitch and roll axes in stabilize or althold mode. It is a time constant so setting it lower makes it achieve steady state angles quicker.

These limit the max allowable yaw rates (they do not define what the max stick input commands). Set at zero means they are disabled which I recommend keeping them at this value.
ATC_RATE_P_MAX,0
ATC_RATE_R_MAX,0
ATC_RATE_Y_MAX,0

These affect the pilot inputs to yaw rate
PILOT_Y_EXPO,0 - this is the same as what RC radios do. Set it here rather than in the radio
PILOT_Y_RATE,202.5 - this is the max commanded rate with full stick
PILOT_Y_RATE_TC,0 - this is a time constant that dictates how quickly the commanded rate is achieved. It is disabled currently. I might suggest making this 0.05 or 0.08 for starters and see how that feels.

If you plan to fly ACRO mode then here are some parameters that affect the pilot feel in acro
These affect the trainer and virtual flybar feature. Right now with trainer set to zero, you are using the virtual flybar which I assume is intentional
ACRO_BAL_PITCH,2
ACRO_BAL_ROLL,2
ACRO_TRAINER,0

These set the feel of the roll and pitch axes.
ACRO_RP_EXPO,0.3 - this is the same as what RC radios do. Set it here rather than in the radio
ACRO_RP_RATE,360 - you should check the max rate your aircraft is capable of to set this properly
ACRO_RP_RATE_TC,0 - this is a time constant that dictates how quickly the commanded rate is achieved. It is disabled currently. I might suggest making this 0.05 or 0.08 for starters and see how that feels.

These set the feel of the yaw axis in acro mode.
ACRO_Y_EXPO,0 - this is the same as what RC radios do. Set it here rather than in the radio.
ACRO_Y_RATE,202.5 - you should check the max rate your aircraft is capable of to set this properly
ACRO_Y_RATE_TC,0 - this is a time constant that dictates how quickly the commanded rate is achieved. It is disabled currently. I might suggest making this 0.05 or 0.08 for starters and see how that feels.

1 Like

A Couple of more things.

  1. I would suggest that you set the FS_CRASH_CHECK to 0. This is really not appropriate for heli’s. It was designed for multirotors to protect the props and motors. The reason I have most users turn it off is that if will disarm the helicopter when it sees the desired attitude and the actual attitude diverge by more than 30 deg.

  2. I still wonder why you don’t use the RSC mode 2 if you have a governor on your ESC.

  3. if you keep using RSC mode 3 (throttle curve), why do you have the first throttle curve point set to 0. You should tune the throttle curve. Fly at the various collective positions and listen to the rotor speed. then set the different points to keep that head speed constant

1 Like

Thank you, thank you, thank you! Your advice is well needed.

The reason I am just using RSC mode 3 is that I like having the ability to adjust the throttle on spool-up. After spool-up, I expect the throttle to remain constant, given that the spline calculations allow for that. I assume the spline curve would appear flat after 25% collective, since I have 25%, 50% and 75% collective all set to 78% throttle.

The Trex though is just being used for testing, (so that I know what I am doing). I will be moving over to an Align E1 900 Plus. For the 900, I will be using a HobbyWing 260A ESC. This ESC provides an RPM feedback pulse which I plan to use. I figure I would use either RSC mode 4 with ESC governor disabled, or RSC mode 1 with ESC “store governor” enabled and transmitter pitch/throttle curve enabled. Do either of those sound like good options for variable control? Or should I stick with RSC mode 2, having a constant throttle with ESC “store governor” enabled? Is there any use for RPM feedback in RSC mode 2?