Our previous installment covered the working principles and error characteristics of MEMS sensors as part of our IMU fundamentals. In this seventh article, we address one of the most critical challenges in physical drone development: IMU vibration mitigation. Building upon our brief mentions in the EMI series, we will look at this from a flight controller hardware engineer's perspective, digging deeper into physical mechanical isolation and the implementation of digital software filters.
How Vibration Impacts Control Loops
Before designing a mitigation framework, we must analyze how mechanical vibrations degrade control loop math.
Gyroscope Aliasing
For gyroscopes, the primary source of measurement corruption is not velocity random walk (VRW), but rather aliasing. When an IMU is configured to an output data rate (ODR) of $8\text{ kHz}$, the Nyquist theorem dictates that any mechanical vibration component exceeding $4\text{ kHz}$ will be folded back into the lower spectrum, appearing as a false low-frequency signal below $4\text{ kHz}$.
For example, a sharp structural vibration at $5\text{ kHz}$ will alias down into a false angular velocity artifact at $3\text{ kHz}$. If this artifact manages to slip past software low-pass filters and enter the rate loop, it causes immediate flight instability.
Accelerometer Clipping (Saturation)
For accelerometers, high-amplitude high-frequency vibrations can overwhelm the mechanical or electrical limits of the silicon, leading to saturation (clipping). The default range of the ICM-42688-P is typically set to $\pm 4\text{ g}$ or $\pm 16\text{ g}$ via its AFS_SEL registers. On large-scale industrial multirotors with significant propeller loading, vibrations can exceed even the $\pm 16\text{ g}$ ceiling.
Once an accelerometer clips, its output becomes non-linear and asymmetric, which distorts the Extended Kalman Filter's (EKF) altitude and position estimations.
The D-Term Trade-off
In a standard PID loop, the D-term (derivative component) of the rate PID evaluates the instantaneous rate of change of the gyroscope data. Consequently, it acts as a high-pass filter that significantly amplifies high-frequency noise. While raising the D-term gain improves tracking responsiveness and snappy stick feel, it simultaneously escalates high-frequency vibration noise, leading to hot motors and structural high-frequency buzzing. Balancing this D-term noise trade-off is one of the most difficult aspects of PID tuning.
Identifying Vibration Sources via Frequency Mapping
Before building a dampening setup, you must isolate the distinct vibration frequencies acting on the frame. Analyzing a Fast Fourier Transform (FFT) of raw IMU telemetry extracted from ArduPilot or PX4 onboard logs allows you to visualize these spikes.
In ArduPilot, the INAV, IMU, and VIBE logging messages serve as primary diagnostic vectors. The VIBE.VibeXYZ channels record the Root Mean Square (RMS) acceleration values across all three axes. ArduPilot's official engineering guideline states that these values must be kept under $30\text{ m/s}^2$ (ideally under $15\text{ m/s}^2$). Exceeding $30\text{ m/s}^2$ indicates that the physical mechanical dampening scheme requires a redesign.
Using Ground Control Tools like the Mission Planner FFT Analyzer or PyFlightAnalysis, you will typically find three distinct frequency spikes:
- Motor Fundamental Frequency ($1\times$ RPM): Calculated by converting motor rotations per minute to Hertz ($\text{Hz} = \text{RPM} / 60$). For instance, a motor spinning at $6,000\text{ RPM}$ creates a spike at $100\text{ Hz}$, while $12,000\text{ RPM}$ moves it to $200\text{ Hz}$. Propeller unbalance manifests as a prominent peak exactly at this fundamental frequency.
- BLDC Motor Pole Commutating Noise: Calculated using the formula:$$\text{Hz}_{\text{pole}} = \frac{\text{RPM}}{60} \times \frac{\text{Poles}}{2}$$For a $14\text{ -pole}$ motor spinning at $6,000\text{ RPM}$, this generates an electrical-mechanical resonance spike at $700\text{ Hz}$ ($100\text{ Hz} \times 7$).
- Airframe Resonance: The structural frequency inherent to the frame layout, dictated by arm length and carbon fiber rigidity. Standard $250\text{ mm}$ racing frames typically resonate between $300\text{ Hz}$ and $500\text{ Hz}$, whereas large industrial heavy-lift platforms show resonance bands down between $100\text{ Hz}$ and $200\text{ Hz}$.
Mechanical Isolation Design
Software filters cannot fix every vibration issue. Aliasing cannot be filtered out in software if the noise frequency exceeds half the ODR. With an $8\text{ kHz}$ ODR, any vibration over $4\text{ kHz}$ aliases instantly; preventing this requires physical mechanical isolation.
The design governing a mechanical dampening mount relies on isolating the target mass. The natural undamped resonant frequency $f_n$ of the dampening system is determined by the rubber mount's spring constant $k$ and the supported mass $m$:
$$f_n = \frac{1}{2\pi} \sqrt{\frac{k}{m}}$$
To achieve effective isolation, $f_n$ must be designed to sit lower than the lowest operational motor frequency. If the motor's idle frequency starts at $100\text{ Hz}$, the target design should position the isolator's natural resonance down around $20\text{ Hz}$ to $30\text{ Hz}$.
Mechanical Attenuation Curve (Low-Pass Characteristic)
Amplification |
| * (Resonance Peak at f_n ≈ 20-30 Hz)
| * *
| * *
--------------|---*-----*--------------------------------------
Unit Gain (1) | * * (Transmissibility Drops Below 1 at √2 * f_n)
| * *
|* * <--- Isolation Zone (Filters High Frequencies)
| *
+------------------------------------------------
0 f_n Motor Frequency (100 Hz+)
Rubber and Silicone Damper Selection
Dampers are classified using Durometer (hardness scale). Commercial flight controllers like the Pixhawk series deploy soft silicone dampers rated at approximately Shore A 20 to 30 to achieve a low $20\text{ Hz}$ to $30\text{ Hz}$ resonance point. Selecting an overly rigid damper pushes the resonant frequency higher into the active motor band, rendering it ineffective, while an overly soft damper causes low-frequency oscillations that interfere with attitude control loops.
Mass Tuning
The suspended mass $m$ is an indispensable variable. If the flight controller PCB is too light, it lacks the inertia required to compress the damper springs, driving the natural frequency $f_n$ up into a dangerous noise band. In ultra-lightweight custom stack designs, engineers often intentionally mount heavy brass or copper weights to the isolated sensor platform to artificially inflate $m$ and lower $f_n$.
Internal Isolated IMU Sub-Mounting
Rather than dampening the entire flight controller enclosure, modern high-end FC hardware isolates only the IMU sub-section on the PCB. The classic Cube/Pixhawk architecture is a well-known example of this, separating the entire Flight Management Unit (FMU) core into an internally suspended capsule.
When implementing this layout on a single custom PCB, the IMU is placed on a tiny standalone daughterboard connected to the mainboard via a flexible printed circuit (FPC) ribbon cable, with the sub-board supported by soft silicone standoffs. While routing high-speed SPI traces over a flexible FPC cable increases the complexity of EMI design, it provides maximum mechanical vibration isolation for the inertial sensors.
Software Filter Implementation
Vibrations that bypass mechanical isolation are cleaned up using digital software filters. We will use ArduPilot's signal processing architecture to look at how these choices are managed.
Low-Pass Filters (LPF)
A low-pass filter suppresses noise components above a specified cutoff frequency. ArduPilot manages this using the INS_GYRO_FILTER (gyroscope LPF, defaulting to $20\text{ Hz}$) and INS_ACCEL_FILTER (accelerometer LPF, defaulting to $20\text{ Hz}$) parameters.
While dropping the LPF cutoff clears out high-frequency noise, it introduces group delay (phase lag). Phase lag erodes the phase margin of the rate PID loops, compromising control authority. Dropping the LPF cutoff to $10\text{ Hz}$ adds tens of milliseconds of propagation delay, making it difficult to increase PID gains without inducing low-frequency oscillation.
Harmonic Notch Filters (HNF)
A notch filter targets and attenuates a narrow frequency band, introducing significantly less phase lag within the surrounding passband than a wide-spectrum LPF. ArduPilot uses a dynamic Harmonic Notch Filter to target motor-induced noise.
Key parameters for configuring ArduPilot's Harmonic Notch Filter include:
- INS_HNTCH_ENABLE: Activates the primary notch filter engine.
- INS_HNTCH_FREQ: Establishes the center frequency of the notch base.
- INS_HNTCH_BW: Controls the notch bandwidth (the inverse of the filter's Quality Factor $Q$). A narrow bandwidth minimizes out-of-band phase lag, while a broader bandwidth provides a wider margin to capture fluctuating frequency spikes.
- INS_HNTCH_MODE: Dictates the center-frequency tracking method.
- MODE = 0: Fixed frequency notch.
- MODE = 1: Dynamic tracking tracking throttle position.
- MODE = 3: Dynamic tracking driven by Bidirectional DShot ESC RPM data.
- MODE = 5: Per-motor independent tracking (multi-notch array tracking individual motor RPM lines).
RPM-driven tracking via MODE = 3 or MODE = 5 offers the highest precision, automatically adjusting the center notch frequency in real time as motor speeds change. This requires ESC hardware that supports Bidirectional DShot, which has become standard practice for modern industrial flight controller design.
- INS_HNTCH_HARMS: Configures harmonic tracking. Setting this to 3 configures the engine to apply attenuation notches concurrently at the fundamental frequency ($1\times$), the second harmonic ($2\times$), and the third harmonic ($3\times$). This is highly effective at capturing motor pole commutating noise that manifests across higher harmonics.
Series Cascading
ArduPilot supports cascading multiple notch filters in series. Enabling INS_HNTC2_ENABLE activates a secondary independent notch filter engine, allowing you to isolate and target a fixed airframe resonance peak and a variable motor-RPM peak concurrently.
Filter Delay and Control Bandwidth Trade-offs
Every digital filter added to a system increases phase lag within the control loops. As phase delay accumulates, the stability margins of the PID loops decrease, causing the system to oscillate at lower gain values.
As a general rule of thumb, a standard first-order LPF introduces approximately 45 degrees of phase lag at its configured cutoff frequency $f_c$. For a system with a target attitude control bandwidth of $10\text{ Hz}$, setting the LPF cutoff between $50\text{ Hz}$ and $100\text{ Hz}$ keeps the phase lag down to just a few degrees at the control frequency.
While notch filters introduce minimal phase lag throughout the general passband, they exhibit sharp, steep phase shifts near their center frequency. If a notch filter's center frequency shifts away from the physical noise peak, this phase disruption can degrade control loop stability. This highlights why high-precision, RPM-driven dynamic tracking is so critical.
ArduPilot Engineering Guideline: The development core mandates that the combined group delay introduced by all software filtering blocks must not exceed $10\%$ to $15\%$ of the primary attitude control update cycle. For a $400\text{ Hz}$ execution loop ($2.5\text{ ms}$ step period), the total budget for filter lag is roughly $250\text{ }\mu\text{s}$ to $375\text{ }\mu\text{s}$. Pushing past this budget significantly limits how high the PID gains can be tuned.
Step-by-Step Validation and Tuning Process
To verify your mechanical isolation and digital filtering design, use this step-by-step diagnostic workflow with actual flight logs:
[Step 1: Baseline Log] ---> [Step 2: Check VIBE] ---> [Step 3: Notch Setup] ---> [Step 4: PID Tune]
Fly with minimal LPF; Verify VibeXYZ < 30m/s². Map dynamic HNF to Aggressively tune D-gain
Extract raw IMU FFT. If high, adjust dampers. isolated RPM peaks. up to the buzzing limit.
- Capture a Raw Baseline Log: Fly the aircraft with all advanced filtering disabled or set to wide baseline LPF limits. Extract the raw IMU telemetry and plot an FFT graph to map the vehicle's structural and motor noise peaks.
- Evaluate Mechanical Isolation Performance: Examine the VIBE.VibeXYZ metrics. If the values exceed $30\text{ m/s}^2$, land immediately and adjust the damper durometer or modify the suspended mass. Do not attempt to fix severe mechanical issues with software filters.
- Configure the Harmonic Notch Filters: Align the center frequencies of the notch filters with the noise peaks identified in your FFT analysis, and enable Bidirectional DShot RPM tracking. Perform a validation flight and review the new FFT log to confirm that the target noise peaks have been successfully suppressed.
- Tune the PID Parameters: With the inertial data stabilized and filtered, systematically raise the rate PID D-term gains. The optimal tuning point sits just below the threshold where high-frequency motor buzzing or oscillations begin to appear.
Summary
Mitigating IMU vibration requires a balanced approach combining physical mechanical isolation with digital software filtering. Physical dampening is necessary to prevent high-frequency aliasing at the hardware level, while a dynamic Harmonic Notch Filter isolates motor-synchronized noise peaks without introducing wide-spectrum phase lag. Developing high-performance flight controllers requires carefully managing the trade-off between filter delay and control loop bandwidth, validating adjustments through systematic log analysis.
In our next Sensors installment, FC8, we will move from vibration mitigation to data processing, discussing the mathematical foundations of Sensor Fusion and how the EKF balances gyroscope and accelerometer inputs using explicit error models.
