mmWave radars are robust to darkness, occlusions such as dust and smoke, and can directly constrain ego-velocity from a single frame via Doppler measurements, making them attractive sensors for odometry in degraded conditions. However, almost all existing radar-inertial odometry systems rely on lossy radar point clouds that are highly sparse, generally concentrated in a narrow angular band, and aliased at high speeds. We propose to instead estimate ego-velocity directly from unfiltered mmWave I/Q signals. Taking advantage of a foundation model for 4D radar spectrum, we develop a system which integrates uncertainty-aware velocity predictions with IMU measurements using an uncertainty-weighted sliding-window pose graph to accurate compute odometry even when provided radar data which has aliasing or an unfavorable field of view. Our system, UNRIO, attains the lowest relative pose error on the majority of sequences across different datasets, motion patterns, and radar modulations compared to point cloud-based baselines, while retaining the ability to run in real time.
Both panels below are the same kind of raw range–Doppler spectrum our network consumes. Point-cloud pipelines never see them: a CFAR detector reduces each frame to a handful of peaks first. That discards two things a velocity estimator needs. Ego-velocity is a property of the global structure across all bins, so it stays observable even where no single return is strong enough to be detected; and the geometric context that would disambiguate an aliased return is exactly what the detector removes.
Figure 2. Two ways a radar point cloud loses information, on the raw range–Doppler spectrum. Top: at 1.45 m/s the platform outruns the \(\pm 1.22\) m/s unambiguous interval, so the return folds across the Doppler axis and a peak detector reads a biased velocity. Bottom: green marks the 1.8% of bins CFAR keeps, which is all a point-cloud body-velocity optimisation ever sees. Figure numbering follows the paper.
Two read-outs share one backbone. The direct velocity regression collapses the frame to a single vector: it reads a speed and a heading off the readout token and predicts its own per-axis variance, so \(\Sigma_v\) arrives already in the units the pose graph wants. The Doppler weighted least squares keeps the geometry instead, predicting a Doppler value per angle bin and recovering velocity by a weighted fit, so its covariance falls out of the normal equations and is directional — larger along directions that few or unreliable bins constrain. Those weights are reused from the depth log-variance, because there is no per-angle-bin Doppler ground truth to calibrate against: the Doppler target is a rigid-body projection of one body velocity, so it carries no per-pixel notion of measurement quality, while depth is supervised by dense LiDAR returns at every bin. Since the two heads share a backbone and an angle-bin grid, a bin whose range is predicted confidently is one where the network has localised a strong, well-conditioned target, and its Doppler estimate is likewise more trustworthy. We stress that this makes \(w\) a heuristic weighting rather than a Doppler noise model, so \(\Sigma_d\) is a covariance only up to an unknown global scale. Either way the back-end receives the same thing: a velocity and a covariance for the radar-velocity factor.
Figure 1. The pipeline, top to bottom. One shared backbone feeds two velocity read-outs. The regression head predicts a diagonal covariance directly. The Doppler branch pairs the predicted depth with the uncertainty decoder's log-variance for the same pixels (dashed group), turns that into the per-pixel fit weights, and inherits a full \(3 \times 3\) covariance from the normal equations. The three colour panels are real network outputs for a single held-out frame under lateral motion — note the sign change across azimuth in the Doppler image. Both read-outs reach the back-end as the noise model of the radar-velocity factor.
UNRIO running end to end on held-out sequences, played back in the rerun viewer. Each clip shows the raw range–Doppler spectrum entering the network, the network's polar outputs beside the lidar-projected ground-truth depth, and the pose the sliding-window back-end returns from the resulting velocity factor.
IQ1M, velocity read-out. Forward motion down an indoor corridor. The velocity head regresses body velocity and its covariance straight from the spectrum.
IQ1M, Doppler read-out. The same site under lateral motion, solved by the weighted least-squares fit over the predicted per-pixel Doppler. Note the sign change across azimuth.
ColoRadar, velocity read-out. A longboard ride at 4–8 m/s, well past the sensor's \(\pm 2.50\) m/s unambiguous Doppler interval. The learned velocity stays bounded where a peak detector reads the folded return.
@article{anonymous,
title = {UNRIO: Uncertainty-Aware Velocity Learning for
Radar-Inertial Odometry},
author = {Anonymous},
note = {Under review},
year = {2026}
}