Tuning the Harmonic Notch

Hi Andy,

my MOT_THST_HOVER,0.296434 (after dynamic fly)

So i set min_freq to 190Hz and hover_freq to 200Hz

i used this:

INS_HNTCH_REF = hover_thrust * SQUAREROOT(min_freq / hover_freq)

and i set the INS_HNTCH_REF to 0.28

It’s ok?

Thanks :slight_smile:

Yep, looks right!

More characters because

1 Like

Hi all
sorry for the silly question but where do I get the firmware (what version) with the notch filtering functionality for my 5" quad. I see in master 4.0.2 (did not check 4.0.3 yet) that I can analyze with FFT but I can not set the notch filter.
thanks a lot

Set HNOTCH_ENABLE to 1.
Reboot.
https://ardupilot.org/copter/docs/common-imu-notch-filtering.html

https://github.com/ArduPilot/ardupilot/pull/13741 is designed to help with this. It would be great if you could try it.

OK @andyp1per I see, I just built your pr-filtered-harmonic-detection branch for revo-mini and pixarcer, in this afternoon (in my time zone) I will test on my 3 and 5 inch quad and I will let you know.

1 Like

Hi @andyp1per follows logs of indoor test for 3 inch with revo-mini:


and for 5 inch with pixracer:

Ok perfect - it has fixed the issues on both your copters I saw in your last log, seems to be working great. Load is acceptable on both FCs as well. I would be interested to know what the output looks like with SCHED_DEBUG = 2.

Console out from pixracer:

online system 1
Mode STABILIZE
HMC5843 found on bus 0x7050A
APM: Calibrating barometer
APM: ArduCopter V4.0.4-dev (264adcf6)
APM: ChibiOS: d4fce84e
APM: fmuv4 00460029 30365104 31323731
APM: RCOut: DS150:1-4 PWM:5-6
APM: Frame: QUAD
APM: Initialising ArduPilot
APM: Barometer 1 calibration complete
Init GyroMPU: temp reset IMU[0] 4267 2970
***
APM: INS: alloc 6144 bytes for ISB (free=113576)

Ready to FLY Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (3/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[39-periodic] (4/2/50)
Scheduler slip task[51-sample_gyros] (3/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[39-periodic] (4/2/50)
Scheduler slip task[51-sample_gyros] (3/1/50)
APM: EKF2 IMU0 tilt alignment complete
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[38-periodic_tasks] (5/2/300)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PERF: 99/7999 [3456:711] F=800Hz sd=76 Ex=0
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PreArm: Throttle below Failsafe
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PERF: 21/8000 [2015:922] F=796Hz sd=39 Ex=0
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[33-update_send] (4/2/550)
APM: PERF: 17/8000 [2012:719] F=800Hz sd=37 Ex=0
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PERF: 8/8000 [2111:920] F=799Hz sd=28 Ex=0
Scheduler slip task[33-update_send] (4/2/550)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[38-periodic_tasks] (4/2/300)
APM: PreArm: Throttle below Failsafe
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[38-periodic_tasks] (4/2/300)
APM: PERF: 14/8000 [2008:608] F=800Hz sd=32 Ex=0
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PERF: 19/8000 [2010:551] F=800Hz sd=39 Ex=0
Flight battery 100 percent
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PERF: 21/8000 [2048:912] F=796Hz sd=41 Ex=0
Scheduler slip task[38-periodic_tasks] (4/2/300)
APM: PreArm: Throttle below Failsafe
Scheduler slip task[38-periodic_tasks] (4/2/300)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PERF: 6/8000 [1687:924] F=801Hz sd=16 Ex=0
Scheduler slip task[0-rc_loop] (4294901768/8/130)
Scheduler slip task[1-throttle_loop] (4294901776/16/75)
Scheduler slip task[2-update_GPS] (4294901776/16/200)
Scheduler slip task[3-update] (4294901763/4/160)
Scheduler slip task[4-update_batt_compass] (4294901776/80/120)
Scheduler slip task[5-read_aux_all] (4294901776/80/50)
Scheduler slip task[6-arm_motors_check] (4294901776/80/50)
Scheduler slip task[7-auto_disarm_check] (4294901776/80/50)
Scheduler slip task[8-auto_trim] (4294901776/80/75)
Scheduler slip task[9-read_rangefinder] (4294901776/40/100)
Scheduler slip task[10-update] (4294901763/4/50)
Scheduler slip task[11-update] (4294901761/2/50)
Scheduler slip task[12-update] (4294901761/2/50)
Scheduler slip task[13-update_altitude] (4294901775/80/100)
Scheduler slip task[14-run_nav_updates] (4294901775/16/100)
Scheduler slip task[15-update_throttle_hover] (4294901767/8/90)
Scheduler slip task[16-save_position] (4294901859/266/100)
Scheduler slip task[17-update] (4294901859/266/90)
Scheduler slip task[18-three_hz_loop] (4294901859/266/75)
Scheduler slip task[19-update_events] (4294901775/16/75)
Scheduler slip task[20-accumulate] (4294901775/16/90)
Scheduler slip task[21-update] (4294901775/80/100)
Scheduler slip task[22-update_precland] (4294901761/2/50)
Scheduler slip task[23-fourhundred_hz_logging] (4294901761/2/50)
Scheduler slip task[24-update] (4294901775/16/90)
Scheduler slip task[25-one_hz_loop] (4294902496/800/100)
Scheduler slip task[26-ekf_check] (4294901775/80/75)
Scheduler slip task[27-check_vibration] (4294901775/80/50)
Scheduler slip task[28-gpsglitch_check] (4294901775/80/50)
Scheduler slip task[29-landinggear_update] (4294901775/80/75)
Scheduler slip task[30-standby_update] (4294901767/8/75)
Scheduler slip task[31-lost_vehicle_check] (4294901775/80/50)
Scheduler slip task[32-update_receive] (4294901761/2/180)
Scheduler slip task[33-update_send] (4294901761/2/550)
Scheduler slip task[34-update] (4294901774/16/75)
Scheduler slip task[35-update_trigger] (4294901774/16/75)
Scheduler slip task[36-ten_hz_logging_loop] (4294901772/80/350)
Scheduler slip task[37-twentyfive_hz_logging] (4294901792/32/110)
Scheduler slip task[38-periodic_tasks] (4294901761/2/300)
Scheduler slip task[39-periodic] (4294901761/2/50)
Scheduler slip task[40-update_logging] (4294903296/8000/75)
Scheduler slip task[41-rpm_update] (4294901772/20/200)
Scheduler slip task[42-compass_cal_update] (4294901764/8/100)
Scheduler slip task[43-accel_cal_update] (4294901774/80/100)
Scheduler slip task[44-update] (4294901774/80/100)
Scheduler slip task[45-avoidance_adsb_update] (4294901774/80/100)
Scheduler slip task[46-terrain_update] (4294901774/80/100)
Scheduler slip task[47-update] (4294901774/80/75)
Scheduler slip task[48-update] (4294901856/160/100)
Scheduler slip task[49-update] (4294902496/800/100)
Scheduler slip task[50-update] (4294901774/16/50)
Scheduler slip task[51-sample_gyros] (4294901761/1/50)
Scheduler slip task[52-update_parameters] (4294902496/800/50)
Scheduler slip task[3-update] (4294901764/4/160)
Scheduler slip task[4-update_batt_compass] (4294901777/80/120)
Scheduler slip task[5-read_aux_all] (4294901777/80/50)
Scheduler slip task[6-arm_motors_check] (4294901777/80/50)
Scheduler slip task[7-auto_disarm_check] (4294901778/80/50)
Scheduler slip task[8-auto_trim] (4294901778/80/75)
Scheduler slip task[9-read_rangefinder] (4294901779/40/100)
Scheduler slip task[10-update] (4294901766/4/50)
Scheduler slip task[11-update] (4294901764/2/50)
Scheduler slip task[12-update] (4294901764/2/50)
Scheduler slip task[13-update_altitude] (4294901778/80/100)
Scheduler slip task[14-run_nav_updates] (4294901778/16/100)
Scheduler slip task[15-update_throttle_hover] (4294901770/8/90)
Scheduler slip task[16-save_position] (4294901862/266/100)
Scheduler slip task[17-update] (4294901862/266/90)
Scheduler slip task[18-three_hz_loop] (4294901862/266/75)
Scheduler slip task[19-update_events] (4294901778/16/75)
Scheduler slip task[20-accumulate] (4294901778/16/90)
Scheduler slip task[21-update] (4294901778/80/100)
Scheduler slip task[22-update_precland] (4294901764/2/50)
Scheduler slip task[23-fourhundred_hz_logging] (4294901764/2/50)
Scheduler slip task[24-update] (4294901778/16/90)
Scheduler slip task[25-one_hz_loop] (4294902499/800/100)
Scheduler slip task[26-ekf_check] (4294901778/80/75)
Scheduler slip task[27-check_vibration] (4294901778/80/50)
Scheduler slip task[28-gpsglitch_check] (4294901778/80/50)
Scheduler slip task[29-landinggear_update] (4294901778/80/75)
Scheduler slip task[30-standby_update] (4294901770/8/75)
Scheduler slip task[31-lost_vehiScheduler slip task[13-update_altitude] (4294901779/80/100)
Scheduler slip task[14-run_nav_updates] (4294901779/16/100)
Scheduler slip task[15-update_throttle_hover] (4294901771/8/90)
Scheduler slip task[16-save_position] (4294901863/266/100)
Scheduler slip task[17-update] (4294901864/266/90)
Scheduler slip task[18-three_hz_loop] (4294901864/266/75)
Scheduler slip task[19-update_events] (4294901780/16/75)
Scheduler slip task[20-accumulate] (4294901780/16/90)
Scheduler slip task[21-update] (4294901780/80/100Scheduler slip task[23-fourhundred_hz_logging] (4294901767/2/50)
Scheduler slip task[24-update] (4294901781/16/90)
Scheduler slip task[25-one_hz_loop] (4294902502/800/100)
Scheduler slip task[26-ekf_check] (4294901781/80/75)
Scheduler slip task[27-check_vibration] (4294901781/80/50)
Scheduler slip task[28-gpsglitch_check] (4294901781/80/50)
Scheduler slip task[29-landinggear_update] (4294901781/80/75)
Scheduler slip task[30-standby_update] (4294901773/8/75)
Scheduler slip task[31-lost_vehicle_check] (429490Scheduler slip task[41-rpm_update] (4294901781/20/200)
Scheduler slip task[42-compass_cal_update] (4294901773/8/100)
Scheduler slip task[43-accel_cal_update] (4294901783/80/100)
Scheduler slip task[44-update] (4294901783/80/100)
Scheduler slip task[45-avoidance_adsb_update] (4294901783/80/100)
APM: PERF: 7/1544 [15549:1168] F=698Hz sd=470 Ex=800
Scheduler slip task[46-terrain_update] (4294901784/80/100)
Scheduler slip task[47-update] (4294901784/80/75)
Scheduler slip task[48-update] (4294901866/160/1Scheduler slip task[52-update_parameters] (4294902507/800/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PERF: 17/8000 [2442:856] F=800Hz sd=36 Ex=0
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
Scheduler slip task[51-sample_gyros] (2/1/50)
APM: PERF: 16/8000 [2121:600] F=799Hz sd=32 Ex=0
APM: PreArm: Throttle below Failsafe

Ok, interesting. sample_gyros() does virtually nothing now, so this confirms my suspicion that it’s an artifact of running tasks at the fast loop rate. What do you have SCHED_LOOP_RATE set to?

Actually can you try just one thing? Comment out AP_GyroFFT.cpp:319 (the line that says WITH_SEMAPHORE(_sem);) and see if that helps - I’d just like to eliminate contention between the fft and main threads.

SCHED_LOOP_RATE=800
Tomorrow morning I will test commenting that line

Ok, to enable FFT by default on that board we need to see the output at SCHED_LOOP_RATE=400

… and I can reproduce this on an omnibusf4pro and it’s the loop rate that is the problem - loop rate of 400 has no issues.

On which board? Revo-mini, pixracer or both?

Probably only revo-mini - the Pixracer is a 2Mb board so it is enabled by default

The slip at 800Hz is definitely a bug nothing to do with FFT:

@andyp1per do you still need other 400Hz tests and the test with line 319 commented?

I asked this because of your latest post.

No, now I know what the problem is I have a better solution.

This is my fix https://github.com/ArduPilot/ardupilot/pull/13758 will work better in combination with the other PR.

@anbello I have included all these changes in https://github.com/andyp1per/ardupilot/tree/small-copter-4.1 now

1 Like

Thanks a lot I will test it ASAP.

What it would be great to see is a reasonable length dynamic flight with both the double notch and FFT enabled. And to have logs for both pre- and post- filter. … and ideally a comparison with stock master although I realise that is asking a lot. I’m still waiting for weather that actually allows me to try some of these things. I’m pretty confident in the improvement now, but would be good to see some actual flight data!

BTW FFT docs are now in review - any comments appreciated: https://github.com/ArduPilot/ardupilot_wiki/blob/2c85541662f8f9774031daad0c7206449f052434/common/source/docs/common-imu-fft.rst

In the next days I can do some indoor flight test but for outdoor test we have to wait more.

Regarding FFT doc:

In “Pre-Flight Setup” you say to set INS_HNTCH_MODE and INS_HNTCH_REF before to say to set INS_HNTCH_ENABLE

This is my doubt:
I thought that with FFT enabled and INS_HNTCH_MODE=4 also INS_HNTCH_REF and INS_HNTCH_BW were automatically taken from values calculated from FFT.