IMUs & Inertial Navigation: The Ultimate Guide
How MEMS IMUs measure motion, why unaided inertial navigation drifts, and how to read the error specs, run Allan variance, and pick a grade.
An IMU is the one sensor a moving robot cannot argue with. Cover a camera and it goes dark, unplug the LiDAR and the map freezes, but the accelerometer keeps feeling gravity and the gyroscope keeps feeling rotation whether the room is lit, foggy, underground, or underwater. That self-contained quality is why inertial sensing sits under every drone attitude loop, every legged robot's balance controller, and every self-driving car's dead-reckoning fallback. The sensor asks nothing of the world and reports the robot's own motion at a thousand hertz.
The problem is that inertial sensing measures the wrong quantities. You want position and heading; the IMU gives you acceleration and angular rate. Getting from one to the other means integration, and integration is where a small, constant sensor error becomes an unbounded position error that grows without limit. A gyroscope bias of a tenth of a degree per second, invisible on a single sample, tilts your world model by six degrees a minute and never stops. The entire discipline of inertial navigation is the study of that drift: where it comes from, how fast it grows, and how to bound it with an external reference before it eats your estimate.
This guide covers what an IMU actually measures and how the MEMS structures do it, the error terms that decide whether a part is worth buying (bias instability, angle and velocity random walk, scale factor, g-sensitivity), how to read all of them off one Allan-variance log, the strapdown integration math and why unaided error grows the way it does, how a full inertial navigation system is built and aided by GNSS and vision, how to calibrate, and how the consumer, tactical, and navigation grades differ by three orders of magnitude in stability. The transducers are cheap and well understood. The drift, the calibration, and the fusion are the engineering.
The take: an IMU is a perfect short-term motion sensor and a hopeless long-term position sensor, and every design decision follows from that split. Fuse it with something absolute (GNSS, vision, wheel odometry, a magnetometer) and it carries you cleanly across the gaps when the absolute sensor blinks; run it open-loop and it drifts your robot into a wall on a schedule set by its bias instability. Buy the grade your aiding rate demands, characterize the part you actually bought with Allan variance, and put your ARW and bias numbers straight into the filter's process noise. The math is unforgiving and completely predictable, which is the good news.
Companion reading: robot sensors, sensor fusion & Kalman filtering, drone navigation: GNSS & RTK, SLAM & localization, and drone/UAV hardware.
Table of contents
- Key takeaways
- What an IMU measures
- Inside the MEMS: how accelerometers and gyros work
- 6-DoF, 9-DoF, and the magnetometer
- The error terms that matter
- Allan variance: reading the whole error budget off one log
- Strapdown integration and why drift grows
- Inertial navigation systems
- Aiding: INS/GNSS and visual-inertial
- Calibration
- Grades: consumer to navigation
- Selecting an IMU
- Frequently asked questions
What an IMU measures
An Inertial Measurement Unit reports two vector quantities in the body frame, sampled fast and continuously.
The accelerometer measures specific force, which is the non-gravitational acceleration acting on the sensor's proof mass, expressed per unit mass. The subtlety trips up everyone once: an accelerometer sitting still on a bench does not read zero. It reads +1 g upward, because the bench is pushing the proof mass up against gravity, and that contact force is exactly what the sensor senses. In free fall it reads zero, because nothing is pushing on the mass. The relation is f = a - g, where f is the measured specific force, a is the true acceleration in an inertial frame, and g is the local gravity vector. To recover the acceleration you actually care about, you subtract a gravity model, and getting gravity wrong (or getting attitude wrong, so you subtract gravity along the wrong axis) is one of the largest error sources in inertial navigation.
At rest, that gravity reading is a gift: it points down, so it fixes two of the three attitude angles. Knowing where down is fixes roll and pitch. It says nothing about yaw (heading), because rotating about the gravity vector leaves the measured gravity direction unchanged. That asymmetry, roll and pitch observable from gravity while yaw is not, runs through everything an IMU does.
The gyroscope measures angular rate, the rotation speed of the body about each of three axes, in degrees or radians per second. Integrate rate over time and you get an angle. Gyros are clean and trustworthy over short intervals, but their bias, the rate they report when truly stationary, integrates straight into a growing angle error. A gyro that reads 0.1 °/s when perfectly still will have your attitude estimate off by 6 degrees after one minute and 360 degrees after an hour, with no bound.
The two sensors are complementary by construction. The gyro is trustworthy fast and drifts slow; the accelerometer is noisy fast and anchored slow (to gravity). Fuse them and each covers the other's weakness for roll and pitch, which is the job of a complementary or Kalman filter (see sensor fusion & Kalman filtering). No fusion of accel and gyro alone bounds yaw, because neither has a yaw reference.
Inside the MEMS: how accelerometers and gyros work
Nearly every IMU on a robot is MEMS (micro-electro-mechanical systems): silicon structures a few hundred microns across, etched and released on a chip, with capacitive readout. Understanding the mechanism explains where the error terms physically come from.
The MEMS accelerometer
A MEMS accelerometer is a proof mass suspended on silicon flexures, forming a spring-mass-damper. When the chip accelerates, the mass lags and deflects relative to the frame, and that deflection changes the gap in an interdigitated capacitor. Model it as a second-order system: the static deflection is x = m·a / k = a / ω_n², where ω_n = sqrt(k/m) is the resonant frequency. That one relation contains the core trade. Softer springs (lower ω_n) give more deflection per g, so more sensitivity and lower noise, but they lower the usable bandwidth and reduce shock survival, because the flat measurement band sits well below resonance. The deflections are sub-nanometer at 1 g, read out as a tiny differential capacitance, which is why the readout electronics and their noise floor matter as much as the mechanics.
The MEMS gyroscope
A MEMS gyro is a Coriolis vibratory device, not a spinning wheel. A proof mass is driven into a sustained oscillation at velocity v along a drive axis. When the chip rotates at rate Ω, the Coriolis acceleration a_c = 2·Ω × v pushes the mass into an orthogonal sense mode, and that small motion is read capacitively. The sense signal is proportional to Ω. The trouble is that mechanical imperfection couples the large drive motion directly into the sense axis, an effect called quadrature error, and this coupling is often far larger than the Coriolis signal it sits on top of. The electronics null it, but the null is temperature-dependent and never perfect, and the residual is the physical origin of gyro bias and much of its drift. This is why a gyro's bias moves with temperature and why turn-on bias varies run to run: you are watching an imperfectly cancelled mechanical coupling breathe with the die.
Why MEMS, and what it costs
MEMS parts are cheap (single dollars to low tens), tiny, low power, and rugged. They are also orders of magnitude less stable than the fiber-optic gyros (FOG) and ring-laser gyros (RLG) in aircraft and missiles, which have no vibrating mass at all and instead measure the Sagnac phase shift of counter-propagating light in a rotating loop. A navigation-grade FOG holds bias below 0.01 °/h; a commodity MEMS gyro sits at 10 to 100 °/h, three to four decades worse. For robotics that gap is acceptable, because you aid the MEMS with GNSS, vision, or odometry rather than pay tens of thousands for a self-sufficient navigator. The metrology vocabulary here is standardized, not folklore: IEEE Std 528 defines the inertial terms, IEEE Std 1431 covers Coriolis vibratory gyros, IEEE Std 647 ring-laser gyros, and IEEE Std 952 fiber-optic gyros. When a datasheet and a paper disagree on what "bias instability" means, these are the referees.
6-DoF, 9-DoF, and the magnetometer
The degree-of-freedom count on an IMU datasheet is really a channel count.
A 6-DoF (or 6-axis) IMU is a 3-axis accelerometer plus a 3-axis gyroscope. This is the workhorse: it gives you specific force and angular rate, enough to estimate roll and pitch without drift and yaw with drift. Flight controllers, legged robots, and most robotics platforms run 6-DoF parts and handle fusion on the host.
A 9-DoF (9-axis, sometimes called MARG for Magnetic, Angular Rate, and Gravity) adds a 3-axis magnetometer, which measures the local magnetic field vector in microtesla. Projected into the horizontal plane, the Earth's field gives a compass heading, and that is the cheap fix for yaw drift. The magnetometer is the only inexpensive sensor that provides an absolute yaw reference.
The catch is that the magnetometer is by far the most fragile channel. It reads the total field, and every motor, current-carrying wire, permanent magnet, and lump of steel near the sensor adds its own field. Two distortions dominate. Hard-iron errors are constant offsets from magnetized material fixed to the robot (they shift the whole measurement sphere off center). Soft-iron errors are field-dependent distortions from ferromagnetic material that warps the ambient field (they turn the measurement sphere into an ellipsoid). Both are calibrated by rotating the sensor through all orientations and fitting the offset and the shape correction, but the calibration is only valid for the magnetic environment it was done in. A drone that flies fine until it powers up its payload, then reports a heading twenty degrees off, is watching current-driven field change swamp the calibration. Indoors, rebar and machinery make the field so non-uniform that many robots ignore the magnetometer entirely and bound yaw with vision or LiDAR instead (see SLAM & localization).
Rule of thumb: reach for a 9-DoF part only if you can guarantee a clean magnetic environment or you have a calibration and disturbance-rejection plan. Indoors, near motors, or on anything with high phase currents, treat the magnetometer as an occasional weak hint and get your real yaw reference from vision, LiDAR, wheel odometry, or GNSS course.
The error terms that matter
The headline specs (range and resolution) rarely limit a robot. These terms do, and they are what separate a $3 part from a $3,000 one.
| Spec | Units | What it is | Why it bites |
|---|---|---|---|
| Bias / offset | °/s, mg | Output at zero input | Integrates directly; the single largest drift driver |
| Bias instability | °/h (gyro), µg (accel) | Floor of slow bias drift (flicker noise) | The best stability achievable after calibration; the bottom of the Allan curve |
| Angle random walk (ARW) | °/√h | Angle-error growth from white gyro noise | Unavoidable short-term integration noise |
| Velocity random walk (VRW) | (m/s)/√h | Velocity-error growth from white accel noise | Position error growth from accel integration |
| Noise density | °/s/√Hz, µg/√Hz | White noise per √bandwidth | Sets the RMS noise once you name a bandwidth |
| Scale factor error | ppm or % | Gain error on the true rate/accel | Multiplies with the signal; matters at high rates and high g |
| Bias repeatability | °/s, mg | Turn-on and run-to-run bias variation | Forces a re-zero each startup; sets how long you hold still |
| g-sensitivity (g-dependent bias) | °/s/g | Gyro bias induced by linear acceleration | A gyro on a vibrating or accelerating body reads a false rate |
| Cross-axis sensitivity | % | Leakage between axes from misalignment | Couples one axis into another; calibratable |
| Temperature coefficients | (°/s)/°C, mg/°C | Bias and scale drift with temperature | Often the dominant real-world error; needs thermal comp |
A few of these deserve emphasis because they are underappreciated.
Bias instability is the floor. Even after you calibrate out the turn-on bias by holding still, the bias itself wanders slowly (flicker noise). That wander is the best stability you can ever get from the part, and it sets how long the sensor can dead-reckon before an aiding fix is mandatory. It is the number most worth paying for.
g-sensitivity is the quiet killer on anything that vibrates. A MEMS gyro's bias shifts in proportion to linear acceleration, typically a fraction of a °/s per g, because the same acceleration that the accelerometer measures also deflects the gyro's proof mass and leaks into the rate reading. On a drone with a vibrating airframe or a legged robot slamming its feet down, g-sensitivity and vibration rectification can dwarf the quiet-bench bias. This is why flight controllers isolate the IMU on soft mounts and why the BMI088 is popular: it is specified for high-vibration environments with low g-sensitivity.
Scale factor error hides until the robot moves fast. A 1,000 ppm (0.1%) scale error is invisible at 1 °/s but adds 0.5 °/s at 500 °/s, so an aggressive quadrotor flip accumulates real heading error from scale alone. Temperature moves scale factor too, which is why calibrated industrial parts publish scale tempco.
Noise density to RMS: white noise variance scales with bandwidth, so RMS scales with √bandwidth. A gyro at 0.01 °/s/√Hz sampled with a 100 Hz bandwidth has RMS rate noise of about 0.01 × √100 = 0.1 °/s. This is why noise density is the portable spec and quoted RMS is meaningless until you name its bandwidth. Vendors love to quote RMS at a flatteringly narrow bandwidth.
Allan variance: reading the whole error budget off one log
The Allan variance, introduced by David Allan in 1966 for atomic clocks and adapted to inertial sensors (El-Sheimy, Hou, and Niu, "Analysis of Inertial Sensor Errors Using Allan Variance," IEEE Transactions on Instrumentation and Measurement, 2008), is the standard way to pull every noise term above out of a single time series. Its power is that different error processes dominate at different averaging times, so one log at rest separates them cleanly.
Log the stationary sensor for hours, divide the record into bins of length τ, average within each bin to get cluster means, and compute the mean square of successive differences:
sigma^2(tau) = (1/2) * < ( ybar_{k+1}(tau) - ybar_k(tau) )^2 >
The factor of one-half makes the Allan deviation sigma(tau) equal the RMS deviation for white noise, so the plot reads in physical units. Plot sigma(tau) against τ on log-log axes and the slopes name the physics:
- Slope of -1/2 at short τ: angle (or velocity) random walk, the white-noise floor of the integrated signal. Read ARW off this line where it crosses τ = 1 h (or scaled to 1 s by convention).
- Flat minimum: bias instability. The lowest point of the curve is the best bias stability the part can hold. Its τ tells you the optimal averaging time.
- Slope of +1/2 at long τ: rate (or acceleration) random walk, where the bias itself diffuses.
- Slope of +1 at very long τ: rate ramp, a deterministic drift, usually a slow temperature trend leaking in.
Allan deviation sigma(tau), log-log:
s | \ /
| \ slope -1/2 / slope +1/2
| \ (random walk) / (rate random walk)
| \___ ___/
| \____ ____/
| \__/
| ^ bias instability (flat minimum)
+---------------------------------------- tau (averaging time)
The workflow that matters: run this on your own IMU, mounted on your own board, ideally at your operating temperature, because vibration, supply noise, and self-heating shift the curve well away from the datasheet's clean-lab numbers. The ARW and bias instability you read off the curve go straight into your estimator's process-noise model. The ARW sets the gyro process noise Q; the VRW sets the accel process noise; the bias-instability terms set the random-walk process noise on the bias states. Get these from the Allan plot rather than guessing, and the filter is honest about how fast it should distrust its own dead reckoning. This is one of the few places where measuring your own hardware genuinely beats reading a spec.
War story: a hexacopter flew clean on the bench and yawed off within thirty seconds in flight. The Allan variance on the bench looked textbook. The bench never spun the motors. Under flight vibration the gyro's g-sensitivity and vibration rectification lifted the effective bias an order of magnitude above the quiet-bench figure, and the EKF's process noise, tuned to the bench Allan curve, was far too optimistic, so the filter trusted a drifting gyro. The fix was a soft-mounted IMU, a notch filter on the dominant prop harmonic, and process noise tuned to the in-flight noise floor, not the bench one.
Strapdown integration and why drift grows
Modern IMUs are strapdown: the sensor is bolted rigidly to the body, and a computer does the work a mechanical gimbal used to. The alternative, a stable platform on gimbals that physically holds the sensors level, is accurate and expensive and mostly historical. Strapdown moves the complexity into arithmetic, which is exactly what makes MEMS navigation cheap.
The strapdown mechanization is a chain of three integrations, each feeding the next.
Attitude. Integrate the gyro rate to keep a running orientation. In quaternion form the attitude propagates as q_dot = (1/2) * q ⊗ ω, integrated every timestep. Attitude must be maintained accurately because it is used immediately to resolve the accelerometer into the navigation frame.
Velocity. Rotate the measured specific force into the navigation frame using the current attitude, subtract gravity, and integrate: v_dot = R(q)·f + g. This is where an attitude error becomes a velocity error. If your roll estimate is off by an angle δθ, you subtract gravity along the wrong axis and leak a spurious horizontal acceleration of about g·δθ. A one-degree tilt error injects roughly 9.81 × 0.017 ≈ 0.17 m/s² of false horizontal acceleration, which integrates into 0.17 m/s of velocity error every second. Tilt error is the dominant path from gyro drift into position error, which is why the gyro, not the accelerometer, usually limits inertial navigation.
Position. Integrate velocity: p_dot = v.
Now the drift. Trace a constant accelerometer bias b_a through two integrations: velocity error grows as b_a · t, position error as (1/2)·b_a·t². A 1 mg accel bias (≈ 0.0098 m/s²) yields about 0.5 m of position error after 10 s and 5 m after about 32 s. Trace a constant gyro bias b_g and it is worse, because it first becomes a growing tilt error b_g·t, which injects a horizontal acceleration g·b_g·t, which integrates twice into a position error that grows as (1/6)·g·b_g·t³. The cubic term is why gyro bias dominates over any interval longer than a few seconds. A modest 10 °/h gyro bias (≈ 4.8e-5 rad/s) produces a position error on the order of (1/6)·9.81·4.8e-5·t³, which reaches several meters within a minute and then runs away.
Unaided position-error growth (constant-bias terms):
from accel bias b_a: dp(t) ~ (1/2) * b_a * t^2
from gyro bias b_g: dp(t) ~ (1/6) * g * b_g * t^3
random-walk (noise) terms grow more slowly, as t^(3/2),
and dominate only at very short t before the biases take over.
The lesson is blunt and quantitative: unaided MEMS inertial navigation is a bridge measured in seconds to a couple of minutes, not hours. It is superb at carrying you across a short GNSS dropout (a tunnel, an urban canyon, a moment of visual occlusion) and useless as a standalone position source over any real distance. The whole art is bounding those integrals with an outside reference before the t² and t³ terms explode.
Rule of thumb: estimate your unaided horizontal drift as roughly
(1/6)·g·b_g·t³from gyro bias plus(1/2)·b_a·t²from accel bias, using your Allan-derived bias numbers. That single calculation tells you how long you can coast through an aiding dropout before you exceed your error budget, which is the design question that actually matters.
Inertial navigation systems
An Inertial Navigation System (INS) is an IMU plus the computer, the mechanization, and usually an aiding source, packaged to output a full navigation state: position, velocity, and attitude (together, the PVA solution). A bare IMU gives you rate and specific force; an INS gives you where you are and which way you are pointing, at the IMU's high rate.
The core is the strapdown mechanization above, run at the full IMU rate (hundreds to thousands of hertz), producing a smooth, low-latency, high-bandwidth PVA estimate. That high rate is the INS's gift to the rest of the robot: control loops and planners get a continuously updated pose between the slow, sparse fixes of GNSS or vision. The INS integrates forward at 1 kHz; the aiding source corrects it at 1 to 30 Hz.
The estimator that fuses the two is almost always a Kalman filter, and in robotics specifically an error-state (indirect) Kalman filter. Rather than estimate the full nonlinear navigation state directly, it estimates the small error between the mechanized state and truth: position error, velocity error, a small-angle attitude error, and the sensor bias states. This has two big advantages. The error dynamics are nearly linear even when the full dynamics are not, so the linearization stays valid. And the attitude error is a minimal 3-vector in the tangent space rather than a constrained 4-element quaternion, which keeps the covariance well-behaved. The mechanization runs fast and open-loop; the error-state filter runs slower, estimates the accumulated error and the biases, and periodically injects the correction back into the nominal state. The bias states it estimates are the whole point: the filter continuously learns the gyro and accel biases and removes them, which is what lets a cheap MEMS part behave far better than its raw bias would suggest.
The modern refinement is the invariant EKF (Barrau and Bonnabel, "The Invariant Extended Kalman Filter as a Stable Observer," IEEE Transactions on Automatic Control, 2017), which exploits the symmetry of the motion group so the linearization error does not depend on the trajectory, giving convergence guarantees where a naive EKF can diverge under aggressive motion. Legged robots and drones increasingly run invariant or right-invariant filters for exactly this robustness.
Aiding: INS/GNSS and visual-inertial
Aiding is the act of feeding the INS an external measurement that observes the states its integration cannot bound. Without aiding, position and yaw run away; with it, they stay bounded to the aiding source's accuracy while the IMU supplies the smooth high-rate motion in between.
INS/GNSS
The classic pairing. GNSS (GPS, Galileo, BeiDou, GLONASS) gives absolute position and velocity at 1 to 20 Hz, bounded and drift-free, but slow, occasionally lost, and jittery per-sample. The IMU gives smooth, high-rate, low-latency motion that drifts. Fuse them and each fixes the other: the GNSS bounds the inertial drift, the IMU fills the gaps between fixes and smooths GNSS jitter, and crucially the IMU coasts through GNSS dropouts (tunnels, urban canyons, bridges, jamming) for the seconds to minutes its drift budget allows. This is the backbone of drone and vehicle navigation; see drone navigation: GNSS & RTK for the GNSS side, including RTK for centimeter fixes.
Two coupling depths matter. Loosely coupled fuses the GNSS receiver's computed position and velocity solution with the INS. It is simple and modular, but it needs at least four satellites for the receiver to produce a fix at all, so it gives up entirely in a deep dropout. Tightly coupled fuses the raw GNSS pseudoranges and carrier phases directly, so even one or two visible satellites still constrain the solution, and the INS carries the receiver's clock through the gap. Tight coupling is more work and more robust, and it is what serious automotive and survey systems use. A further deeply coupled (ultra-tight) approach feeds the INS motion back into the receiver's tracking loops to hold lock under high dynamics and weak signal.
Visual-inertial and other aiding
Indoors and in GNSS-denied spaces, the aiding source is usually a camera or LiDAR. Visual-inertial odometry (VIO) fuses IMU with camera feature tracks, and it is one of the strongest pairings in robotics because the two sensors are almost perfectly complementary: the IMU is fast, metric, and drifts; the camera is slow, drift-free over features, and (monocular) scale-ambiguous. The accelerometer's gravity reading gives the visual system absolute scale and a gravity direction, while the visual features bound the inertial drift including yaw. Production systems include VINS-Mono/Fusion, OKVIS, and the filters behind ARKit and most drones' indoor position hold. LiDAR-inertial odometry (LIO-SAM, FAST-LIO) does the same with range geometry; see SLAM & localization.
The cheapest aiding of all uses knowledge, not hardware. A zero-velocity update (ZUPT) exploits moments when you know the robot is stationary (a foot in stance phase, a wheeled robot stopped) to tell the filter velocity is exactly zero, which slams the accumulated velocity error to nothing and lets the filter re-estimate the biases. Foot-mounted pedestrian dead reckoning lives on ZUPTs at every footfall. A non-holonomic constraint on a wheeled robot says it cannot move sideways or vertically relative to its body, which bounds two velocity components for free. Barometric altitude bounds the vertical channel on drones, where inertial-only altitude drifts fast. Each of these is a measurement the filter can ingest at zero sensor cost, and stacking them is why a good dead-reckoning system holds far better than its raw IMU grade implies.
Rule of thumb: pick the aiding source by the environment, then buy the cheapest IMU whose unaided drift stays inside your budget across the worst-case aiding dropout. Outdoors, that is GNSS and often a modest MEMS part. Indoors, that is vision or LiDAR plus ZUPTs, and the IMU only has to bridge frames. You rarely need a tactical IMU if your aiding is frequent.
Calibration
A raw IMU is systematically wrong in ways calibration removes. There are two layers: factory calibration that the vendor bakes in, and field calibration you do on your robot.
Bias (offset) is the output at zero input. Turn-on bias is re-estimated at every startup by holding the robot still for a moment and averaging, and thereafter the estimator tracks the slow residual bias as a filter state. The still-period matters: hold too briefly and you carry a turn-on bias into the flight; move during it and you calibrate in a false bias.
Scale factor and misalignment are estimated by the classic six-position (or multi-position) tumble for the accelerometer: place each axis up and down against gravity, and the known ±1 g at each orientation solves for per-axis scale, bias, and the cross-axis misalignment matrix. Gyro scale and misalignment need a rate table (a controlled turntable) turning through known angles, which is why gyro scale calibration is a factory or lab job rather than a field one. The general model fits a 3x3 matrix (scale on the diagonal, misalignment off-diagonal) plus a bias vector per sensor: measurement = M · true + bias + noise, and calibration inverts M and subtracts bias.
Temperature compensation is often the largest real-world correction. Bias and scale both drift with die temperature, so good industrial parts (and any part you characterize yourself) store a polynomial of bias versus temperature and apply it live using the on-die temperature sensor. Skipping thermal comp means your carefully zeroed bias walks away as the board self-heats over the first few minutes of operation, which looks exactly like drift and is often misdiagnosed as one.
Magnetometer calibration (for 9-DoF parts) is the hard-iron and soft-iron fit described earlier: rotate through all orientations, fit the offset and shape correction that maps the measured field back onto a sphere, and redo it whenever the magnetic environment changes.
Lever arm and mounting are calibration too. The IMU is not at the robot's center of rotation, so when the body rotates, the accelerometer feels centripetal and tangential acceleration from the offset, a_lever = ω × (ω × r) + α × r, where r is the vector from the rotation center to the sensor. On a fast-rotating body this is a real, correctable error, and the lever arm to the GNSS antenna must be known for INS/GNSS fusion to align the two measurements. A one-degree error in how you think the IMU is bolted to the frame is a one-degree bias in every attitude estimate, so mounting alignment gets calibrated against a trusted reference, not eyeballed. See robot calibration for the broader discipline.
Grades: consumer to navigation
IMUs span more than three decades of performance, and the grade is set mostly by gyro bias instability and ARW. The bands blur at the edges, and vendor labels are loose, but the shape is stable.
| Grade | Gyro bias instability | ARW | Unaided heading drift | Typical parts / tech | Cost |
|---|---|---|---|---|---|
| Consumer | 10 to 100+ °/h | 0.5 to 5 °/√h | Degrees per minute | Phone/wearable MEMS (ICM-4xxxx, BMI2xx) | <$5 |
| Industrial / high-end MEMS | 1 to 10 °/h | 0.1 to 0.5 °/√h | Degrees over minutes | ADIS16xxx, Bosch BMI088, VectorNav VN-100 | $10 to $2,000 |
| Tactical | 0.1 to 1 °/h | 0.02 to 0.1 °/√h | Degrees over tens of minutes | High-end MEMS, small FOG | $2,000 to $30,000 |
| Navigation | <0.01 °/h | <0.005 °/√h | Sub-degree per hour | FOG, RLG | $50,000+ |
| Strategic | <0.001 °/h | very low | Sub-degree over hours | Precision RLG, ESG | military/aerospace |
A few practical notes on the bands. Consumer MEMS is what sits in phones, drones, and most robots; unaided it is hopeless for navigation, but aided at 10 to 30 Hz by GNSS or vision it is entirely adequate and it is what the overwhelming majority of robotics ships. Industrial MEMS (the Analog Devices ADIS16xxx family, VectorNav modules, high-grade Bosch and TDK parts) buys you factory calibration, temperature compensation, and tighter bias, which stretches your unaided coasting time and eases the fusion. Tactical grade, reached by the best MEMS and small fiber-optic gyros, is where you go when aiding is intermittent and you must dead-reckon minutes at a time (guided munitions, some autonomous vehicles, survey). Navigation grade (FOG and ring-laser gyro) is for platforms that must navigate for hours with rare or no aiding: aircraft, submarines, ships. The jump from tactical to navigation is a jump in physics (Sagnac optics instead of vibrating silicon) and a jump in price of one to two orders of magnitude.
The decision almost always collapses to one question: how often and how well can you aid? Frequent, accurate aiding lets a $3 consumer IMU do the job of a far more expensive one, because the aiding source, not the IMU, sets your steady-state accuracy and the IMU only has to bridge the gaps. Rare aiding pushes you up the grade ladder fast, because now the IMU's unaided drift is your accuracy.
Selecting an IMU
Choose in roughly this order, each criterion narrowing the field before the next.
- Aiding cadence and dropout. Decide your aiding source (GNSS, VIO, LiDAR, odometry, ZUPT) and the worst-case interval you must coast unaided. Compute the unaided drift for a candidate's bias numbers over that interval using the
t²andt³formulas. If a cheap part stays inside budget, you are done shopping on grade. - Bias instability and ARW/VRW. These, not range or bit depth, set the achievable stability. Insist on the Allan-variance numbers or measure them yourself. Match them to your process-noise budget.
- Vibration environment and g-sensitivity. On drones, legged robots, and anything with motors close by, g-sensitivity and vibration rectification often dominate the quiet-bench specs. Favor parts specified for high vibration (BMI088 is the reference) and plan for soft mounting and notch filtering.
- Bandwidth and output rate. Match the sensor bandwidth and sample rate to your control loop. A 1 kHz balance loop wants a gyro bandwidth and IMU output rate comfortably above 1 kHz; a slow AMR heading estimate does not.
- Interface and integration. SPI for low-latency host fusion, I²C for convenience, CAN or EtherCAT or a serial UART for module-level INS units that output PVA directly (VectorNav, SBG, Xsens). A module that hands you a fused solution over UART saves filter code at the cost of tuning access.
- Calibration and temperature range. Factory-calibrated, temperature-compensated industrial parts cost more and save weeks. If you buy a raw part, budget the tumble, rate-table, and thermal characterization yourself.
- Environment and packaging. Operating temperature, shock rating, and whether you need a bare chip, a board module, or a sealed enclosure (see robot enclosures & IP ratings).
Common concrete choices: the Bosch BMI088 and TDK ICM-42688-P are the default low-noise 6-axis parts on flight controllers and robots when you run your own fusion. The Bosch BNO085 gives a fused quaternion on-chip when you want attitude without writing a filter. The Analog Devices ADIS16xxx family (e.g. ADIS16505, ADIS16470) are calibrated industrial 6-DoF modules for when you need repeatable, temperature-compensated performance. VectorNav VN-100/VN-200/VN-300, SBG Systems Ellipse, and Xsens MTi are integrated INS/AHRS modules that output a fused solution and handle GNSS aiding for you.
Rule of thumb: buy the raw 6-axis part and run your own error-state filter when you need timing control, tuning access, and the lowest cost; buy an integrated INS module when you want a fused PVA over UART, factory calibration, and someone else's fusion code. Reach past MEMS to tactical or navigation grade only when your aiding is genuinely rare, because for anything you can aid frequently the aiding source sets your accuracy and a cheap IMU carries the rest.
Frequently asked questions
Why does my IMU-only position estimate drift so fast?
Because you integrate. Accelerometer bias grows into position error as (1/2)·b_a·t², and gyro bias grows into a tilt error that leaks gravity into horizontal acceleration and integrates into a (1/6)·g·b_g·t³ position error. Both run away. A MEMS IMU is a seconds-to-minutes bridge, not a standalone navigator; you must bound it with GNSS, vision, LiDAR, or odometry.
What is the difference between a 6-axis and a 9-axis IMU? 6-axis is a 3-axis accelerometer plus a 3-axis gyroscope, enough for drift-free roll and pitch and drifting yaw. 9-axis adds a magnetometer for an absolute heading reference to bound yaw. The magnetometer is fragile near motors, currents, and steel, so indoors and on high-current platforms many robots skip it and bound yaw with vision or LiDAR instead.
Why does yaw drift when roll and pitch are stable? The accelerometer measures gravity, which points down, so tilting the robot in roll or pitch moves gravity in the body frame and the accel can correct gyro drift on those axes. Rotating in yaw spins the robot about the gravity vector, so gravity looks identical and the accel is blind to it. Without a magnetometer, vision, or another heading source, integrated yaw has nothing to correct it and drifts without bound.
Do I need to calibrate an IMU that came pre-calibrated? The factory removes scale, misalignment, and much of the temperature dependence, but turn-on bias still varies run to run, so you re-zero the gyro bias at every startup by holding still, and the estimator tracks the residual bias live. If you use a 9-axis part you must also do hard-iron/soft-iron magnetometer calibration in the robot's actual magnetic environment.
What is Allan variance and do I actually need it? Allan variance decomposes a long at-rest log into each noise term (random walk, bias instability, rate random walk) by their slopes on a log-log plot. You need it because the numbers you read off your own board, at your own temperature and vibration, are what should feed your filter's process noise, and they can differ substantially from the clean-lab datasheet figures.
Tactical grade or aided consumer MEMS? Almost always aided consumer or industrial MEMS. If you can aid frequently with GNSS, vision, or odometry, the aiding source sets your accuracy and the IMU only bridges gaps, so a $3 to $50 part suffices. Pay for tactical or navigation grade only when aiding is rare and you must dead-reckon for minutes to hours unaided.
What does g-sensitivity mean for a drone or legged robot? It means linear acceleration induces a false gyro rate, typically a fraction of a °/s per g. On a vibrating airframe or a foot-slamming leg, this and vibration rectification can exceed the quiet-bench bias by an order of magnitude. Soft-mount the IMU, notch-filter the dominant vibration harmonics, and pick a part specified for high vibration, such as the BMI088.
Loosely coupled or tightly coupled INS/GNSS? Loosely coupled fuses the GNSS position/velocity solution and is simple but needs a full fix (four-plus satellites) to help at all. Tightly coupled fuses raw pseudoranges and carrier phase, so even one or two satellites still constrain the solution and the INS carries the receiver's clock through partial dropouts. Use tight coupling where GNSS is marginal (urban canyons, foliage) and you can afford the extra complexity.
Why does my attitude estimate drift when the robot vibrates even though it sits still on the bench? Vibration rectification and g-sensitivity. Zero-mean vibration does not average to zero after the sensor's nonlinearities, and linear vibration leaks into the gyro through g-sensitivity, both lifting the effective bias. A filter tuned to the quiet-bench Allan curve then trusts a drifting gyro. Fix it with mechanical isolation, notch filtering, and process noise tuned to the in-motion noise floor.
Can I use an IMU indoors without GNSS? Yes, but you must aid it with something else: visual-inertial odometry, LiDAR-inertial odometry, wheel odometry, a barometer for altitude, or zero-velocity updates when the robot is stationary. The IMU supplies smooth high-rate motion; the indoor aiding source bounds the drift including yaw. This is exactly how indoor drones and legged robots hold position without satellites.