GPS is not the whole positioning story
GPS works by listening to satellites. That is powerful in open sky, but the signal arriving at your phone is extremely weak. It has travelled about 20,000 kilometers, passed through the atmosphere, reflected off buildings, and then reached an antenna smaller than a fingernail. Put that phone in an underground car park, a station concourse, a mall, a stairwell, or a tunnel, and the satellite geometry falls apart quickly. Sometimes the fix drifts. Sometimes it freezes. Sometimes it disappears entirely.
Track+ is built for that failure mode. Instead of waiting for a map dot to recover, it asks a different question: if the phone cannot hear satellites clearly, what else does it know? It knows when the user steps. It knows how the device rotates. It can see visual motion through the camera when ARCore is available. It can sense pressure changes across floors. It can recognize local magnetic and Wi-Fi patterns that repeat when you return to a corridor. It can even, as an optional beta feature, listen for footstep impulses when the inertial step detector goes quiet.
PDR: the dead-reckoning core

PDR stands for Pedestrian Dead Reckoning. The idea is simple in outline: detect each step, estimate how long that step was, estimate the direction of travel, and add the resulting vector to a local position. If you take a 0.75 meter step north-east, the tracker moves about 0.53 meters east and 0.53 meters north. Repeat that hundreds of times and you get a trail even when GPS is gone.
The difficulty is that every term in that sentence is noisy. Step detectors fire late or early. Step length changes with gait, shoes, slope, stairs, walking speed, and how the phone is carried. Heading sensors drift, and indoor magnetometers can be pulled by steel, wiring, elevators, speakers, vehicles, and rebar. If a tracker naively multiplies a fixed stride by a compass angle, its trail will look plausible for a minute and then quietly diverge.
SIMT's PDR engine treats each step as a small measurement problem. It gates cadence to reject implausible step intervals below 0.20 seconds or above 1.50 seconds, uses activity classification to distinguish stationary, walking, running, and stairs-like motion, and integrates along a midpoint heading so turns do not overshoot as badly as an end-of-step heading would. It also smooths the scalar step length before projecting onto heading, which reduces stride jitter without shortening corners the way vector averaging can.
Track+ also reads the gait itself, not just the fact that a step happened. As each foot strikes the ground the trunk rotates very slightly around the body's vertical axis — one way for a right footfall and the opposite way for a left — so the engine averages the device's filtered yaw rate in a roughly 150-millisecond window around each step and infers which foot took it. The mapping between yaw sign and foot side depends on how the phone is carried, so it is learned from the first confident step and then held for the session, and a turn guard discards the reading when the yaw rate is large enough that the user is clearly turning rather than just oscillating around a footfall. Distinguishing left from right gives Track+ a finer view of the walking pattern than an anonymous stream of identical steps, which is the kind of signal that makes per-step modelling more honest.
Estimating stride with the Weinberg model
Older step-based trackers often estimate stride length from height: a fixed percentage of the user's height becomes the assumed step distance. That is better than nothing, but it ignores the physics of walking. A slow careful step and a fast stride from the same person are not the same length. Track+ instead uses a Weinberg-style model that relates step length to acceleration swing during the step window.
The principle is: SL = K x (Amax - Amin)^(1/4). In plain terms, the engine watches the filtered acceleration magnitude during a step, finds the peak-to-valley motion energy, takes the fourth root so noisy spikes do not dominate, and scales the result by a calibration factor K. The fourth-root shape is useful because it responds to stronger gait dynamics without letting a single hard impact explode the distance estimate.
Track+ feeds this estimator with linear acceleration when available, or raw acceleration as a fallback. Before measuring the peak and valley, the signal passes through fourth-order Butterworth low-pass filters. Those filters auto-calibrate their sample rate from real sensor timestamps, so the math stays tuned whether a device delivers accelerometer samples at 50 Hz, 100 Hz, or some OEM-specific cadence. The resulting step length is then clamped by mode-specific safety rails so running, stairs, and walking are shaped differently.
Heading: the quiet hardest part
A step vector is only as good as its heading. Indoors, heading is often the most fragile part of dead reckoning because magnetometers are easily distorted. Many apps rely on Android's rotation vector sensor, which is a useful vendor-provided fusion output, but it is a black box. If the vendor fusion trusts a contaminated magnetic sample too much, the user can walk past a metal structure and the estimated trail can bend.
Track+ prefers its own Mahony AHRS path when the device exposes the required gyroscope, accelerometer, and magnetometer. AHRS means Attitude and Heading Reference System. The filter represents orientation as a quaternion, integrates gyroscope rotation forward in time, and uses gravity from the accelerometer plus magnetic north from the magnetometer as correction signals. The proportional feedback keeps the orientation responsive; the integral feedback slowly learns gyro bias.
The important detail is gating. Track+ checks the magnetic field magnitude and rate of change before letting a magnetometer sample correct yaw. Earth's surface field is roughly in the tens of microtesla, so samples far outside a plausible band, or changing too fast, are treated as local interference. In those moments the filter continues with gyro and gravity rather than letting a fridge, elevator, or vehicle yank the heading away from the user's real path.
Track+ also anchors the heading frame at session start. The initial compass bearing seeds the track, and the PDR heading keeps a constant offset so the trail does not silently relax from the user's chosen frame into raw magnetic north. That matters because VIO, PDR, and the radar UI all need to agree on the same local coordinate frame.
The phone is not always pointing where you walk
A common failure in phone-based navigation is assuming that the top of the phone points in the direction of travel. Sometimes it does. Sometimes the phone is held slightly sideways, carried flat, put in a pocket, or swinging in a hand. Track+ compensates by learning the relationship between device heading and travel direction.
The motion direction estimator looks at horizontal linear acceleration and performs a principal-axis analysis. If the acceleration covariance is strongly elongated, the dominant axis is likely the user's travel direction. Track+ measures that confidence with a linearity score and only learns a device-to-travel yaw offset when the motion is clear enough. The offset is then applied slowly through an exponential moving average and capped so one ambiguous segment cannot flip the path.
A phone-carry classifier watches the gravity vector to decide whether the phone is likely in hand, in a pocket, or in an unknown carry state. That matters for tilt projection. When the phone is steadily held in hand, device pitch can approximate body or slope pitch, so Track+ can project slope-parallel stride length back onto the horizontal plane. When the phone is in a pocket or swinging, device tilt is no longer a reliable slope sensor, so the engine falls back to the safer 2D model.
VIO: using the camera as a motion sensor
Visual-Inertial Odometry, or VIO, estimates movement by combining camera tracking with inertial sensors. ARCore follows visual feature points in the scene while the phone's IMU measures rotation and acceleration. When the environment has enough texture and light, this gives a short-range motion estimate that can be far more stable than pure step integration.
Track+ uses ARCore as a VIO provider. It maps ARCore's 3D camera pose into SIMT's local navigation plane: horizontal displacement becomes local X/Y movement, while ARCore's gravity-aligned vertical channel becomes a Z estimate. The tracker captures an initial pose, computes displacement relative to that origin, and rotates the local ARCore frame into the user's compass-seeded Track+ frame.
Heading extraction is handled carefully because phones are not always held in one posture. Track+ blends the camera forward vector and the phone-top vector, weighting whichever is more horizontal. This lets visual tracking produce a usable intent heading whether the phone is upright like a camera or flatter like a map. Corrupted ARCore frames with non-finite pose values are dropped before they can poison the downstream fusion state.
Fusion: keeping PDR and VIO continuous
The hard part is not merely having PDR and VIO. The hard part is moving between them without tearing the user's trail. Track+ keeps an offset between the PDR coordinate frame and the VIO coordinate frame. When VIO starts tracking, the incoming visual pose is offset so it lands exactly where the current fused position already is. When VIO is lost, the PDR offset is recalculated so step-based fallback continues from the same point instead of jumping.
Track+ also guards against ARCore relocalization jumps. If a new VIO frame moves farther than a human could plausibly travel during the frame interval, the fusion layer treats it as a visual relocalization artifact. Small jumps are absorbed into the offset up to a cumulative budget, which keeps the radar stable while still preventing unlimited hidden drift from accumulating inside the correction term.
While VIO is active, it can also teach the PDR engine. The calibration manager compares VIO displacement with PDR displacement over steps and adjusts the Weinberg K factor so the step model learns the user's current gait. If the camera later loses tracking in a dark space or pocketed-phone moment, the fallback PDR is no longer using a generic stride guess; it has been tuned by the recent visual motion.
2.5D: stairs, slopes, and floors
Many trackers flatten the world into a sheet. Real movement is not flat. People climb stairs, walk ramps, enter elevators, and move through multi-storey buildings. Track+ includes a 2.5D dead-reckoning mode for devices with a barometer. The barometer does not need to know absolute sea-level altitude; it only needs pressure changes relative to the start of the session.
Track+ converts pressure-derived altitude into a session-relative vertical signal and feeds it into the VIO fusion layer. If VIO Z and barometer altitude disagree by more than a threshold, the system snaps the VIO vertical bias back to barometer. Smaller disagreements are corrected through a complementary filter, letting short-term VIO smoothness coexist with long-term barometer stability. On devices without a barometer, Track+ can still use a smoothed VIO-only altitude channel when visual tracking is active.
Floor detection uses sustained altitude steps. A storey-height change must persist for several seconds before the floor count commits, so a pressure spike from HVAC, elevator pressurization, or a slammed door does not immediately become a fake floor transition. That vertical signal also helps the activity classifier identify stairs-like movement and choose a better step-length profile.
Loop closure: recognizing that you have been here before
Dead reckoning drifts because every tiny error adds to the next one. Professional SLAM systems fight this with loop closure: when the system recognizes a place it has already visited, it can pull the estimated path back toward the earlier anchor. Track+ brings that principle to phone sensors with optional local fingerprint maps.
Magnetic fingerprinting builds a per-session map of local magnetic anomalies. Buildings have repeatable magnetic signatures from steel reinforcement, wiring, fixtures, and machinery. Track+ buckets magnetometer vectors into 0.5 meter grid cells, keeps running means, and looks for distant, old-enough cells whose field vector is extremely similar and whose magnitude differs by only a few microtesla. When it finds a match, it applies a gentle translation correction rather than snapping the trail.
This is not cloud mapping. The magnetic map is built during the session from the phone's own sensor stream. It is useful precisely because indoor anomalies are locally stable: the same corridor, stairwell, or structural feature often produces the same magnetic pattern when you pass it again. In a return-to-start or looping indoor walk, that repeated signal gives Track+ a way to reduce drift without GPS, camera tracking, or external beacons.
Wi-Fi fingerprinting beta
Wi-Fi fingerprinting is a beta Track+ feature that adds a second loop-closure channel. Indoors, the set of visible access points and their signal strengths form a rough location signature. You do not need to connect to those networks for the pattern to be useful; the scan result itself can describe the place.
Track+ buckets scans into 1.5 meter grid cells. Each cell stores running mean RSSI values per BSSID and becomes an anchor after enough samples. When a new scan arrives, Track+ compares it against old and spatially distant anchors. The score combines BSSID overlap with weighted RSSI similarity. A match requires enough shared access points, a high enough similarity score, a minimum spatial separation, and a minimum age so the system does not loop-close to the cell it is currently building.
If Wi-Fi fingerprinting finds a match, Track+ applies an external loop-closure correction to the PDR position with a smaller strength than magnetic correction, because Wi-Fi scans are noisier and less spatially resolved. The implementation also caps retained BSSIDs per cell so dense offices or airports cannot grow memory without bound. Like the magnetic map, this is per-session and opt-in.
Audio stride detection beta
Audio stride detection is another beta feature, and it exists for a specific edge case: sometimes the phone's inertial step detector goes quiet because the device is held very still, but the user is still walking. Footsteps are short broadband impulses, and a microphone can often hear those impulses even when the phone is in a pocket or held steady.
Track+ processes audio locally and never records or sends it. The detector does not look for speech or identify sounds. It reduces each audio frame to the RMS of the first difference, a cheap high-pass pre-emphasis that suppresses low-frequency rumble and steady tones while emphasizing sharp transients. It then maintains an adaptive baseline with an exponential moving average and accepts a candidate only when the frame is above an absolute floor, well above baseline, and rising sharply over the previous frame. A refractory window prevents double-counting the decay of one footfall.
Even after the audio detector fires, Track+ does not blindly add a step. Audio is admitted only as a fallback when the hardware step detector has been silent long enough, and an AudioStepGate requires a plausible rhythm of consecutive detections inside the human gait band. That means a door click, dropped key, cough, or isolated transient cannot easily grow the trail. Once the rhythm is confirmed, admitted audio steps flow through the same PDR step integration path as inertial steps.
GPS still has a role, but not the usual one

Track+ is built for GPS-denied use, but it does not ignore GPS when a good fix is available. Instead, GPS can be used as a distance teacher. If VIO is not active and a location fix has good enough horizontal accuracy, Track+ compares GPS movement distance with PDR movement distance and adjusts the shared step-length scalar.
That comparison is only trustworthy on a straight path, so Track+ gates it carefully. A calibration batch stays open until GPS has covered at least fifteen meters of travel and the user has taken at least fifteen steps, and the batch is thrown away if the heading wandered more than about twenty-five degrees along the way. The reason is geometric: on a curved walk the straight-line GPS chord and the integrated PDR chord both under-measure the true path, but by different amounts, so calibrating on a bend would teach the engine the wrong stride. Accepted batches feed their GPS-to-PDR chord ratio through a median and outlier filter before a gentle exponential moving average nudges the stride scalar, so a single bad fix or one unusual stretch can never yank the user's step length.
The distinction is important: GPS calibration does not move the user's Track+ position. It calibrates stride length. That keeps the local trail stable while still letting outdoor or edge-of-building segments improve the PDR model before the user enters weaker-signal space. VIO and GPS calibration both converge on the same physical question: how long are this user's steps under the current conditions?
Privacy is part of the engineering
A positioning engine this rich could be built in a cloud-first way: upload sensor streams, build venue maps remotely, and analyze fingerprints elsewhere. Track+ is designed differently. PDR, VIO fusion, magnetic fingerprinting, Wi-Fi loop closure, barometer processing, and audio stride detection all run on the device. The beta audio feature explicitly processes microphone frames locally and does not record or transmit audio.
That local boundary is also practical. GPS-denied spaces are often network-poor spaces. A tracker that needs a server to understand your last few meters is fragile in the exact places Track+ is meant to help. SIMT's approach is to make the phone itself do the positioning work, using optional sensors only when the device supports them and the user has enabled the relevant feature.
Why Track+ feels different
Most mobile apps treat indoor or weak-signal tracking as a degraded map problem. Track+ treats it as a sensor fusion problem. It starts with a local coordinate system, tracks motion with PDR, lets ARCore VIO become the high-accuracy source when the camera can see, uses VIO and GPS to teach stride length, applies barometer altitude to preserve vertical context, and uses magnetic and Wi-Fi fingerprints to recognize revisits.
That layered design is what makes the feature unusually ambitious for a standard Android phone. It does not require survey hardware, a pre-installed indoor map, a base station, or a cloud positioning service. It turns commodity sensors into a cooperative positioning stack, then exposes the result through the Track+ radar, trail, checkpoints, target placement, replay, and recovery workflows inside SIMT.
Track+ is SIMT's attempt to keep spatial confidence alive after the blue GPS dot stops being trustworthy.
Try Track+ yourself
The easiest way to understand Track+ is to use it in the kind of place where ordinary navigation starts to feel uncertain: an underground car park, a large store, a station, a stairwell, or a building with poor sky view. Start a session, walk normally, watch the radar trail, and compare how the system behaves when visual tracking is active, when it falls back to PDR, and when beta fingerprinting options are enabled.
Track+ is not a promise that every phone can solve every indoor positioning problem perfectly. It is something more interesting: a production mobile feature that exposes serious positioning ideas — dead reckoning, visual odometry, AHRS orientation, stride calibration, loop closure, vertical fusion, and local beta fingerprints — in a tool people can actually carry.
Download SIMTSIMT is available on Google Play. Track+ is included alongside compass navigation, target planning, AR measurement, GNSS diagnostics, local sharing, and sky exploration tools.Questions answered in this guide
What is Track+ in SIMT?
Track+ is SIMT's weak-signal and GPS-denied tracking feature. It estimates local movement using pedestrian dead reckoning, ARCore visual-inertial odometry, barometer altitude when available, and optional beta fingerprinting signals.
What is PDR?
PDR means Pedestrian Dead Reckoning. It estimates position by detecting steps, estimating step length, estimating heading, and integrating those small movement vectors over time. Track+ adds filtering, cadence gates, activity profiles, stride calibration, carry-mode handling, and heading correction to make PDR more robust.
What is VIO?
VIO means Visual-Inertial Odometry. It combines camera tracking with inertial sensor data to estimate device movement. Track+ uses ARCore VIO when visual tracking is enabled and available, then falls back to PDR when camera tracking is lost or disabled.
Does Track+ need GPS?
No. Track+ is designed to continue estimating movement when GPS is weak or unavailable. GPS can still help calibrate step length when an accurate fix exists, but it does not need to be the primary position source.
How does Track+ use Wi-Fi fingerprinting?
Wi-Fi fingerprinting is an opt-in beta feature. Track+ stores per-session patterns of visible access points and signal strengths, then recognizes similar patterns when the user revisits an area. A match gently pulls PDR drift back toward the earlier anchor.
Does audio stride detection record sound?
No. Audio stride detection is an opt-in beta feature that processes microphone frames locally to detect footstep impulses. It does not record audio or send audio anywhere, and it only contributes steps when the inertial detector is silent and a plausible walking rhythm is confirmed.
Why does Track+ use magnetic fingerprinting if magnets can confuse compasses?
Magnetic anomalies can be harmful when blindly used for heading, but useful when treated as repeatable landmarks. Track+ gates magnetometer samples before using them for heading correction, while optional magnetic fingerprinting uses stable local anomalies as loop-closure signals when the user revisits a place.
What does 2.5D dead reckoning mean?
2.5D dead reckoning means Track+ still tracks local horizontal motion, but also incorporates vertical change from the barometer and VIO Z channel. This helps with stairs, slopes, floor changes, and visual-tracking altitude drift on supported devices.
