<- All writing

Building a GPS-Free Pedestrian Navigation System

Why raw IMU integration fails, why foot-mounted sensing helps, what ZUPT and ZARU correct, and how TARAF is being validated with side-profile computer vision.

Why GPS-free navigation is hard

GPS is excellent when the sky is open, the receiver has enough satellite visibility, and the user can keep a phone or dedicated device powered. It gets less reliable indoors, in dense tree cover, in canyons, and in places where service, visibility, or battery life can fail at the same time.

The obvious alternative is inertial navigation: measure acceleration and rotation, then integrate those measurements into velocity and position. The problem is that integration is unforgiving. A small accelerometer bias or gyroscope drift does not stay small. It accumulates, then accumulates again. Raw position from a consumer IMU can become useless after a short walk.

That is the core TARAF problem. The system is not trying to make a cheap IMU magically perfect. It is trying to find moments in walking where the estimate can be corrected often enough to remain useful.

Why the foot matters

A foot-mounted IMU gives the estimator something unusually valuable: during a normal stride, the foot briefly stops on the ground.

That stationary phase is not glamorous, but it is the correction point. If the system can detect when the foot is planted, it can tell the estimator that the true foot velocity is approximately zero. That measurement interrupts drift before raw integration runs away.

This is the role of Zero Velocity Updates, or ZUPT. ZUPT does not solve every navigation problem. It does not directly fix heading drift, it depends on reliable stance detection, and it can struggle when the user changes gait or terrain. But it gives pedestrian inertial navigation a recurring anchor.

What ZUPT and ZARU correct

ZUPT tells the filter: at this moment, the foot velocity should be zero.

ZARU, or Zero Angular Rate Update, tells the filter: at this moment, the foot angular rate should also be near zero.

In TARAF, both corrections are tied to stance detection. The detector looks for periods where acceleration magnitude and gyroscope norm both resemble a planted foot rather than a swinging foot. That stance window can be narrow, especially at faster walking speeds, so the thresholds have to be treated carefully.

This is also why fixed hand-tuned thresholds are probably not enough long term. Stopped motion, straight walking, heading changes, and curved paths do not all behave the same way. A future version should classify the movement segment, apply hysteresis so it does not jitter between classes, and select estimator settings matched to that movement type.

Calibration before filtering

Before any filter can work, the sensor needs basic calibration. Accelerometers have bias. Gyroscopes have drift. Even if those offsets look tiny, they become large after integration.

For this prototype, calibration starts with stationary data. The system estimates accelerometer and gyroscope offsets from a known rest period, subtracts those offsets from later samples, and then applies filtering before the estimator uses the readings.

This is plain engineering, but it matters. Many early navigation errors look like filter problems when they are actually calibration, timing, or axis-convention problems.

What the current hardware does

The current prototype uses ESP32-class hardware with a BNO055 IMU. The BNO055 was chosen because it was cheap, available, and practical for the first capstone prototype. It is not the ideal long-term pedestrian navigation sensor.

The firmware polls the sensor around 175 Hz while the BNO055 output is around 100 Hz, so duplicate readings are filtered during logging and analysis. The estimator work does not depend on pretending the sensor is better than it is. The point is to build the pipeline, understand the failure modes, and leave room to upgrade the IMU later.

Ground truth and validation

To know whether the IMU estimate is any good, TARAF needs an external reference. Instead of an overhead motion-capture system, the current validation setup uses side-profile computer vision.

A large ArUco marker is placed on the right calf while the IMU is mounted on the foot. A side-view camera tracks the marker during repeatable walking tests, and OpenCV gives an independent position trace for comparison. This is not a perfect replacement for a full motion-capture lab, but it is good enough to expose drift, timing problems, bad trials, and estimator improvements.

The longest indoor validation path collected so far is 17.27 m. Future validation may use overlapping views or a dual-camera setup, but that is still tentative.

What currently works

The completed technical core includes:

  • ESP32-class IMU data logging
  • Calibration and filtering
  • Stance detection from acceleration and angular-rate behavior
  • ZUPT and ZARU correction logic
  • Error-State Kalman Filter estimation with quaternion attitude representation
  • Side-profile ArUco / OpenCV validation tooling
  • Offline optimizer experiments using random forest and SVM approaches

The important phrase is “currently works,” not “finished.” The prototype can collect data, run the estimator, compare against visual ground truth, and test configuration choices offline. The harder question is how well it generalizes across users, paths, speeds, and motion types.

What still needs improvement

The next controls problem is movement awareness. A single estimator configuration should not be expected to handle standing still, straight walking, heading changes, and arcs equally well.

The path forward is to classify motion into useful segments, such as stopped, straight-line, heading-change, and curve/arc movement. Hysteresis should keep the classifier from switching too eagerly. Each class can then use movement-specific Kalman settings or correction behavior.

Other future directions include cleaner test sets, better user-to-user generalization, complementary-filter comparisons, possible particle-filter exploration, and replacing the BNO055 with a more capable IMU if the project continues beyond the first prototype.

TARAF started from a personal desire to explore without depending entirely on GPS. The technical work is turning that desire into measurements: quantify the drift, correct what can be corrected, and mark what still needs proof.