I built sensor fusion for a mobile robot and reached for robot_localization like everyone does. After spending too long fighting navsat_transform, UTM zone boundaries, and YAML covariance tuning, I wrote my own.
FusionCore is a 22 state UKF that fuses IMU, wheel encoders, and GPS in ECEF directly (no coordinate projection, no extra node). It estimates IMU bias, adapts its noise covariance automatically from the innovation sequence, and gates outliers with a chi squared test on every sensor.
I benchmarked it against robot_localization EKF on 6 sequences from the NCLT public dataset (University of Michigan, real robot, real GPS, RTK ground truth). It wins 5 of 6. On the 6th sequence (fall, degraded GPS over a long period) it loses badly. RL UKF diverged to NaN on all six.
Configs, methodology, and full reproduce instructions are in the benchmarks/ folder.
> it wins 5 or 6
Yeah but the 5 that it wins on a very marginal and the 1 that it loses on definitely loses. I'd also say it loses the top middle one thanks to that spike on the left.
lf it's easier to use I'd say the performance is close enough though!
Umm.. I'm sorry but i'd ask you to go check the table again. lol
the wins aren't that marginal with numbers: 2.3x, 2.0x, 12.9x, 3.2x, 2.7x on the five sequences.
the loss on one specific sequence is genuinely bad though: 28.6m vs 9.6m, so 3x worse. That's because that sequence has extended degraded GPS over a long stretch and FusionCore's adaptive noise estimator seems to overcorrect in that condition. I haven't figured out exactly why yet and I said so in the benchmark notes.
on the spike: which one are you referring to? if it's 2012-01-08 there's a GPS jump early in the run that FusionCore's outlier gate catches and RL doesn't, which produces a visible discontinuity in the RL trajectory but not FusionCore's. happy to be corrected if you're seeing something different in the plots.