"Two witnesses who lie in different directions are worth more to me than one who tells the truth on average."
A Corroborating AI Agent
Prerequisites
This section assumes the measurement model \(x = h(s) + \eta\) and the idea that a single reading is a claim rather than a fact, both from Chapter 1. It leans on variance, covariance, and independence at the level of the uncertainty primer in Chapter 4. No estimator machinery is needed yet; the optimal weighting sketched here returns with full covariance bookkeeping in Chapter 49.
The Big Picture
Fusion is not a trick for combining hardware; it is a bet about errors. Adding a second sensor helps for exactly two reasons, and it is worth separating them cleanly because they behave differently and fail differently. Redundancy points two instruments at the same quantity so their independent errors partly cancel. Complementarity points instruments at different quantities, or the same quantity under different conditions, so that where one is blind the other still sees. Almost every fusion system in this book is some blend of the two, and almost every fusion disaster comes from assuming errors are independent when they are not.
Two dividends, not one
Engineers reach for a second sensor for two genuinely different payoffs, and conflating them is the first mistake. The what of redundancy is measuring one state with two or more instruments whose errors are uncorrelated; the why is that averaging corroborating evidence shrinks variance, exactly as taking more readings did in Chapter 1, except now the "extra readings" come from a physically distinct device that does not share the first one's failure modes. The what of complementarity is combining instruments that observe different projections of the world, or the same projection under conditions where they succeed and fail at different times; the why is coverage. A camera resolves fine texture and color but drowns in darkness; radar is nearly blind to texture but reads range and closing speed straight through fog. Neither is redundant with the other because they do not measure the same thing. Together they observe a strictly larger slice of reality than either alone.
The practical when follows directly. Reach for redundancy when a quantity is safety-critical and you need its estimate to survive a single instrument going bad: airspeed, angle of attack, a robot's joint angle. Reach for complementarity when no single modality covers your whole operating envelope: day and night, still and moving, near and far. Most real stacks want both at once, which is why the design question is never "which sensor" but "which errors do I want to be independent, and which blind spots do I want covered."
The arithmetic of redundancy
Redundancy earns its keep through a formula worth internalizing. Suppose two sensors each report an unbiased estimate of the same scalar \(s\), with measurement variances \(\sigma_1^2\) and \(\sigma_2^2\), and their errors are uncorrelated. The linear combination \(\hat{s} = w x_1 + (1-w) x_2\) is still unbiased for any weight \(w\), and its variance is minimized by inverse-variance weighting: give each sensor a vote proportional to its precision \(1/\sigma_i^2\). The fused precision is then simply the sum of the parts,
\[ \frac{1}{\sigma_{\text{fused}}^2} = \frac{1}{\sigma_1^2} + \frac{1}{\sigma_2^2}, \qquad w^\star = \frac{1/\sigma_1^2}{1/\sigma_1^2 + 1/\sigma_2^2}. \]Two consequences reorganize your intuition. First, the fused estimate is never worse than the better sensor: precisions add, so uncertainty can only fall. Second, a weak sensor is not useless; a noisy magnetometer still nudges the estimate in the right direction, just with a small weight. Two identical sensors with variance \(\sigma^2\) fuse to \(\sigma^2/2\), the same \(1/\sqrt{N}\) dividend as averaging, now bought with hardware diversity instead of time. This is precisely the scalar form of the Kalman update in Chapter 9 and the covariance-weighted fusion of Chapter 49, met here in its simplest honest form. Listing 48.1 makes the variance drop visible on simulated readings.
import numpy as np
rng = np.random.default_rng(0)
s_true = 20.0 # the shared quantity both sensors measure
sig1, sig2 = 2.0, 1.0 # sensor 2 is twice as precise as sensor 1
x1 = s_true + rng.normal(0, sig1, 100_000)
x2 = s_true + rng.normal(0, sig2, 100_000)
w = (1/sig1**2) / (1/sig1**2 + 1/sig2**2) # optimal inverse-variance weight
fused = w * x1 + (1 - w) * x2
print(f"sensor 1 std: {x1.std():.3f}") # ~2.00
print(f"sensor 2 std: {x2.std():.3f}") # ~1.00
print(f"fused std: {fused.std():.3f}") # ~0.894, below the better sensor
print(f"predicted: {np.sqrt(1/(1/sig1**2 + 1/sig2**2)):.3f}")
w away from optimal and the fused std rises: the precision-proportional vote is what minimizes it.As Listing 48.1 shows, the payoff is real but conditional. The whole derivation rested on the phrase "errors are uncorrelated." That assumption is where fusion is won or lost.
Key Insight
The redundancy dividend scales with error diversity, not sensor count. If the two error terms are correlated with coefficient \(\rho\), the fused variance interpolates from the happy \(\sigma^2/2\) at \(\rho = 0\) toward the useless \(\sigma^2\) as \(\rho \to 1\). Ten sensors sharing a common power rail, a common clock, or a common calibration bath can fail together and give you the confidence of ten with the independence of one. Fusion buys you nothing against a failure mode that all your sensors share.
Complementarity: covering each other's blind spots
Redundancy makes a good estimate tighter; complementarity makes an impossible estimate possible. The mechanism is different. Here the sensors do not vote on one number; each supplies a piece of the state, or supplies its piece precisely when its partner cannot. Formally, complementary sensors have blind spots that are close to disjoint. Where sensor A's error blows up (a camera at night, a GNSS receiver in a tunnel), sensor B's stays bounded, so a selector or a weighting that follows the current conditions can always lean on whoever is trustworthy right now. This is why complementarity is the deeper reason multimodal perception exists at all: it extends the operating envelope, rather than merely tightening variance inside an envelope both sensors already cover.
The classic pairing is inertial and absolute. An inertial measurement unit gives smooth, high-rate motion but drifts without bound; a GNSS fix or a camera landmark is noisy and slow but has no long-term drift. Fuse them and the drift-free-but-jittery signal pins down the smooth-but-drifting one, a partnership developed in Chapter 24. The same shape appears in wearables, where an accelerometer explains away the motion artifact that corrupts an optical pulse sensor.
In Practice: automotive camera plus radar
An automatic-emergency-braking stack watches the car ahead. The camera is superb at what: it classifies a vehicle, reads brake lights, resolves lane lines, all from rich texture. It is poor at how fast it is closing, because range from a single image is an inference, and it degrades in glare, spray, and night. The automotive radar is the mirror image: it measures range and relative velocity directly and accurately through fog and darkness by Doppler, yet it can barely tell a stopped car from a manhole cover or an overhead sign. These are not redundant sensors you average; averaging a crisp class label with a crisp Doppler velocity is meaningless. They are complementary: the camera answers "what and where in the image," the radar answers "how far and how fast," and only the fused object carries both a confident identity and a confident closing speed. Remove either and the system either brakes for bridges or fails to see a car in the rain.
Why independence is the whole game
Both dividends live or die on the same assumption, so it deserves a blunt statement: fusion adds information only to the extent that sensors fail in different ways. Redundancy needs uncorrelated errors, or the variance sum collapses. Complementarity needs disjoint blind spots, or both sensors go dark on the same input. The dangerous case is common-mode failure, a single cause that corrupts every channel at once: ice over a shared pitot-static port, a vibration resonance that saturates every accelerometer on a rigid frame, a lighting condition that blinds every camera in an array, a firmware bug in a shared driver. When that happens your fused estimate is not merely wrong, it is confidently wrong, because each corroborating sensor reinforces the same false story and the fusion math reports shrinking uncertainty exactly when it should be screaming. Good fusion design therefore spends as much effort engineering error diversity, different physics, different mountings, different power and clock domains, as it spends on the combination rule itself. The consistency checks that catch a disagreeing sensor before it poisons the estimate are the subject of Chapter 49.
The Right Tool
Written from scratch, fusing several noisy estimates of one state means tracking each variance, forming inverse-variance weights, normalizing them, and combining, about a dozen lines that are easy to get subtly wrong when a variance is near zero. A weighted average with NumPy collapses the core of it to one call:
import numpy as np
x = np.array([19.7, 20.4, 20.1]) # three estimates of the same state
var = np.array([4.0, 1.0, 0.25]) # their measurement variances
fused = np.average(x, weights=1/var) # inverse-variance fusion in one line
np.average with weights=1/var is the optimal linear fusion of independent unbiased estimates, replacing roughly a dozen lines of manual weight bookkeeping with one. It will not check the independence assumption for you: that judgment, and the covariance form for correlated or vector-valued sensors, is what Chapter 49 supplies.As Listing 48.2 shows, the library removes the arithmetic, not the modeling. Deciding that these three errors really are independent, and that no common-mode cause links them, remains yours.
Exercise
Take a device you know: a phone, a drone, or a fitness band. List its sensors and sort every pair into mostly redundant, mostly complementary, or neither. For one redundant pair, name a single common-mode cause that would defeat the redundancy (shared bus, shared mount, shared temperature). For one complementary pair, name the operating condition where the handoff between them matters most. Keep the list; it is a first fusion architecture, and you will formalize its weights in Chapter 49.
Self-Check
1. Two sensors measure the same voltage with variances \(\sigma_1^2 = 4\) and \(\sigma_2^2 = 1\). What is the optimal weight on sensor 1, and what is the fused variance?
2. Why is a camera-plus-radar pair described as complementary rather than redundant, and what breaks if you try to average their outputs directly?
3. A fused estimate reports shrinking uncertainty at the exact moment it is most wrong. What assumption has failed, and what physical cause could produce it?
What's Next
In Section 48.2, we turn from why fusion helps to where in the pipeline to do it: fusing raw signals early, fused features in the middle, or independent decisions late, and the sharp tradeoffs each choice makes between accuracy, robustness to a missing sensor, and engineering cost.