Artificial Wasteland · the instrument is your own body

Lightest in the Middle of a Step

Walking is not falling forward. It is vaulting: in the middle of every step your body swings over the top of an arc centred on the foot that is on the ground. Anything going round an arc needs a force pulling it inward, and here the only supply is gravity. So at the top of the vault gravity is partly spent on turning you, and less of it is left to press you into the ground. For that instant, you weigh less.

How much less is a number you can read off a phone in twenty seconds, and it is not a small one. The inverted-pendulum model, fed the 0.89 m mean leg length that Kram, Domingo and Ferris measured on nine subjects, puts an ordinary 1.4 m/s pace at about 0.78 of standing weight in the middle of each step. Whether your own body actually does that is a separate question, and it is the one your phone can answer. The deficit has a name that is normally reached by a much longer route.

Do it first

Where you put the phone is the measurement. Put it at your waistband, at the small of your back or on your hip bone, held firm, screen against you. That is as close to the centre of mass as a phone gets. A phone in a trouser pocket rides your thigh, and a thigh swings: it carries accelerations your centre of mass does not have, and this page cannot tell that apart from a vault. Record both if you like. If they disagree, this page says so and does not pick the flattering one.

Walk outdoors or on clear floor, look where you are going, and do not watch the screen. Twenty seconds at your normal pace is enough. You do not have to run anywhere on this page.

Your accelerometer

reading this device.

Nothing recorded yet.

Press a button and walk. Everything below this box is computed and checked whether or not you ever do.

Both placements

Nothing recorded yet.

One step, averaged over every accepted step in the record, in body weights. The dip in the middle is the vault. The peak on either side is the double-support redirection, where both feet are down and the body is being lifted back up. Until you record a walk this is the synthetic anchor specimen, drawn by the same code from the same file the check panel grades.

What the number is

A body of mass m going over an arc of radius R at speed v needs a centripetal force m v² / R pointing at the centre of the arc, which during a step is the foot on the ground, which is straight down. Gravity supplies m g downward and nothing else is available. So the force left over to press you into the ground at mid-stance is m g − m v² / R, and an accelerometer, which reads specific force, reads g − v² / R at that instant instead of g.

Divide by g and the fraction you lose is v² / (g R). That is the Froude number: the ratio of the centripetal to the gravitational force, the thing that makes two walkers of different sizes dynamically similar. Kram, Domingo and Ferris write it out in exactly those terms: "The ratio of the centripetal and gravitational forces (mv2/L)/(mg) reduces to the dimensionless Froude number (v2/gL)."

The usual way to get it is to measure a speed and a leg length and divide. This page does not do that, and it cannot: an accelerometer does not measure speed. It measures acceleration, and the only way from there to a speed is through a step-length model. Alexander's relative stride length, l/h = 2.3 Fr0.3, inverts to make the Froude number proportional to the fifth power of step frequency, so a 5 per cent cadence error becomes a 28 per cent Froude error. Nothing on this page is derived from cadence. Cadence is reported as a diagnostic and used only to set filter lengths.

What the accelerometer reads instead is the ratio itself, directly, as a weight deficit. There is no speed in it and no leg length in it. And the ceiling comes free: when v² / (g R) reaches 1, gravity is entirely spent on turning you, the foot leaves the ground, and walking is over. Kram and colleagues put it plainly: "Above a Froude number of 1.0, walking is impossible for this simple inverted-pendulum model." Your dip is your distance to that ceiling, measured, in the only units that matter.

Why you should not believe it yet

You have no second instrument. You cannot check this page, and a page like this one is a single hard-coded constant away from being a convincing lie. So before the estimator is allowed to report anything about you, the identical function has to recover two answers that were fixed before you arrived.

1 · The slate

Two synthesised walks. Each is a closed form: the generator puts in a vertical specific force of exactly g(1 − d) at mid-stance and exactly g on average, so the truth is analytic, not fitted. Each is then handed to a virtual phone under a different unknown rotation, with a per-axis bias, at a different non-integer sample rate with timestamp jitter, rounded to the 0.1 m/s² grid a real browser reports. The estimator is told none of that. The two truths are 0.104 apart and the tolerances sum to 0.05, so no single returned constant satisfies both. The second one also walks like a real body: it carries a left-right asymmetry, so its waveform repeats at the stride rather than at the step. That is on the slate because it is what this instrument used to refuse.

rolespecimenexactmeasurederrortol
running the slate.

2 · The control on the control

A promise that "a constant would not pass this" is worth nothing. Here is the constant, run through the same slate, failing.

running the stub probe.

3 · Where it refuses, and where it is wrong

Five more shipped signals, through the same estimate() by the same call. On four of them the correct answer is a refusal. On the fifth it is not, and the estimator gets it wrong anyway.

signalwhat came backwith every gate switched off

The third column is the point. A refusal is only worth reading if you can see what it stopped, so the same estimator runs over the same four signals a second time with every gate it has switched off, and the page prints what it would otherwise have told you. A phone being jiggled becomes a perfectly respectable-looking walk. A run becomes a dip above the ceiling at which walking is impossible. And the anchor walk delivered at 15 readings a second, which is the one case where the underlying signal really is a walk, comes back about 7 per cent low against an answer we know exactly, which is the error the sample-rate floor exists to prevent.

What real walking did to this instrument

Every signal above is synthesised, and synthesised walkers are perfectly symmetric. Real ones are not: nobody's two legs are identical, so the waveform that comes back exactly is the stride, two steps, not the step. This estimator used to require the repeat time to be one step. Run over 328 real treadmill walking trials from a published force-plate dataset, each one dressed as a phone with an unknown rotation, a per-axis bias, jitter, a ragged sample rate and Chrome's rounding, it turned them away in numbers. Put that one rule back into the estimator as it stands today and it refuses 210 of the 328, including trials at 1.4, 1.5 and 1.6 m/s, with the message that there was no single step to read a mid-stance on. 106 of them are trials this page accepts today whose waveform repeats at the stride. The whole slate above stayed green the entire time, because everything on it was symmetric by construction.

Three things changed on 2026-08-17 as a result. The repeat test now accepts a stride as readily as a step, and it says which one it found in your diagnostics. The control specimen on the slate above carries a real body's left-right asymmetry: a per-step alternation of 2 per cent of gravity, built so that it is exactly zero at every mid-stance and integrates to exactly zero over every step, so the control's exact answer is unchanged while its waveform now repeats at the stride. It is the specimen that would have caught this, and if the step-only rule ever comes back it disarms the whole page. And two new refusals went in on the shape of the average step rather than on its rhythm, because the same real records showed the other thing this instrument could do wrong: at a stroll the vault is so shallow that the lowest point of the average step wanders, and the number would have been set by where the page looked for it rather than by the walk. It now says so instead of answering. After the change, 185 of the 189 trials at 1.0 m/s or faster return a number, and 100 of the 104 refusals that remain are strolls under 1 m/s, where the vault is too shallow to put a clear minimum in the middle of a step. That is a real limit of this measurement and it is why walking slowly gets you a refusal rather than a small number. On the trials it does accept, the lowest point of the average step lands at a median 49.9 per cent of the way through it, which is the premise this whole estimator rests on, measured on somebody other than us.

The last row is the one to read twice. A phone swung in a hand at 1.90 Hz, tilted 35 degrees off vertical, is a clean periodic gravity-aligned oscillation with a stable rate. Every gate this estimator carries passes it, and it returns -- against a true swing amplitude of -- along the vertical. That number is real and it is a fact about the phone, not about a body vaulting over a leg. This instrument cannot tell a rhythmic swing from a walk. It is the reason placement is an instruction at the top of the page and not a footnote at the bottom, and it is the honest shape of the pocket problem: a thigh swings.

4 · Every free choice, and what it does to the answer

Move any of these and the whole page re-runs: the slate, the stub probe, the refusals, and your own record if you have made one. If a choice is doing the work, you will see it here.

The one slider that cannot move your answer. The mid-stance search window is here because it looks like the choice that would decide everything, and it is the choice this page was most likely to be caught by. It does not decide: swept from 0.20 to 0.90 on all 328 real walking trials and on every shipped walk, it never once produces two different numbers. Where the edge of the window would be what found the dip, the estimator refuses instead of reporting. The other six sliders do move the answer, which is what they are here to show, and no setting of any of them lets a constant pass the slate.

Standard gravity is held at 9.80665 m/s², which is a definition and not your local gravity. On the international gravity formula local g runs from 9.7803 m/s² at the equator to 9.8322 m/s² at the poles: about a quarter of a per cent either side of the definition, and half a per cent end to end. That is a systematic this page does not correct and does not hide. It does not touch the answer, because d = 1 − min/mean is a ratio of two accelerations measured in the same place and the local g cancels out of it.

the full option set the estimator is running with

      

"Froude scaling is just dimensional analysis"

This is the reasonable objection and it is worth taking seriously. Any group of quantities can be made dimensionless. Every adult human is roughly the same size, so a law that predicts the same dimensionless number for all of them predicts nothing you could disagree with. Dressing that up as a measurement is exactly the failure this site is built to avoid.

There is one ingredient of the Froude number that body size cannot vary: gravity. In 1997 Kram, Domingo and Ferris varied it. They hung nine subjects from elastic springs that pulled up at their centre of mass with a nearly constant force, put them on a treadmill, and walked each of them up in 0.1 m/s steps until they preferred to run, at seven gravity levels: normal gravity first, then six simulated ones down to a tenth of normal. If the transition is set by the vault, it should happen at the same Froude number at every gravity level, at wildly different absolute speeds.

It very nearly does, and then it stops. From 1.0 g down to 0.4 g the transition Froude number moves only from 0.45 to 0.56, a drift of 24 per cent across a 2.5-fold change in gravity, while the transition speed falls from 1.98 to 1.39 m/s. At 0.2 g it jumps to 0.83, and at 0.1 g to 1.13, which is above the ceiling at which the model says walking is impossible at all. An invariance that holds over a 2.5-fold change in gravity, 1.0 g down to 0.4 g, and then visibly breaks is an empirical claim about the world. A tautology cannot break. (The levels tested run a tenfold range, 1.0 g to 0.1 g. The constant-Froude band is the first five of the seven, and 2.5 is the size of that band, not of the experiment.)

White circles with bars: the measured transition Froude number and its standard error, nine subjects, from Table 1 of the paper. Orange: the paper's own repair, recomputed live from the slider below. Dashed orange line at 1.0: the ceiling. Dotted line at 0.45: the value measured at normal gravity. Green, once you have recorded a walk: your own mid-stance dip. Read that one with care. It is a Froude number on the radius your body vaults on, and every other mark on this figure is a Froude number on trochanter height, so the green line is drawn here for scale and not as a like-for-like comparison with the points above it. The panel further down measures the ratio between the two on you.

The authors' own explanation for the break, from pages 824 and 825. A walker's arms and legs are being swung, and swinging them pushes down on the body. At normal gravity that push is small beside gravity. At 0.2 g it is not: the authors put it at about 0.16 g, which is most of the gravity the walker had left. Add it back and the effective gravity holding the walker down at that condition is 0.36 g rather than 0.2 g, and the Froude number there recomputes from 0.83 to 0.44, against the 0.45 measured at normal gravity. Slide to 0 and the break reappears; slide up and the whole curve flattens.

What this slider is not. The authors did the calculation separately at every gravity level and plotted the results as open symbols in their Fig. 3, which they did not tabulate. This slider adds one constant limb-swing acceleration at every level, which is our simplification of that, not their numbers. The one value it reproduces exactly is the one they printed: 0.16 g at the 0.2 g condition giving 0.44.


      
gravitytransition speedFroudepredicted speeddifference in speed
1.0 g1.98 ± 0.038 m/s0.45 ± 0.021.98 m/s--
0.8 g1.84 ± 0.049 m/s0.49 ± 0.031.77 m/s4%
0.6 g1.65 ± 0.066 m/s0.53 ± 0.041.54 m/s7%
0.5 g1.55 ± 0.067 m/s0.56 ± 0.051.40 m/s11%
0.4 g1.39 ± 0.062 m/s0.56 ± 0.051.25 m/s11%
0.2 g1.18 ± 0.073 m/s0.83 ± 0.100.89 m/s34%
0.1 g0.97 ± 0.075 m/s1.13 ± 0.170.63 m/s54%

Kram R., Domingo A. and Ferris D. P. (1997), Table 1, page 823. The table's values are means ± S.E.M. for nine subjects; the mean leg length is 0.89 ± 0.043 m S.D., measured as height to the greater trochanter, and that spread is a standard deviation, not a standard error. The predicted-speed column is not a separate measurement: it is √(0.45 · g · 0.89), and our verifier recomputes all seven values from that formula and reproduces the printed column to within 0.005 m/s. The last column is the paper's own, and it is a difference in speed between the measured transition and that prediction, not a difference in Froude number: in Froude terms the drift from 1.0 g to 0.4 g is 24 per cent, not 11. It recomputes to within one point of the printed value at every level.

The Froude column is not the Froude number of those mean speeds. Take the printed mean speed and divide: v̄²/(gL) misses the printed column by up to 0.052, worst at 0.1 g, where it gives 1.078 against a printed 1.13. The Froude number is quadratic in speed, and the authors averaged each subject's own Froude number rather than squaring the average speed, so the printed column carries the between-subject variance as well: (v̄² + s.d.²)/(gL), with the standard deviation recovered as the printed standard error times √9, reproduces all seven printed values to within 0.006. Our verifier runs both routes and asserts both of those numbers. The orange curve takes the mean-speed route, because that is the route the authors themselves took for the one adjusted value they printed, which is why it does not sit exactly on the white circles when the slider is at zero.

The pendulum bounds the transition. It does not cause it.

Here is the part that a page about Froude numbers usually leaves out. The ceiling is 1.0. The measured transition is 0.45. Watch the units on that gap, because it is the same trap this page spends its length teaching: the Froude number goes as the square of speed, so 0.45 against 1.0 is not half the ceiling speed. It is √0.45 = 0.67 of it. On Kram's own leg length that is 1.98 m/s measured against a ceiling of √(1.0 · 9.81 · 0.89) = 2.95 m/s. People break into a run at about two-thirds of the speed at which walking becomes mechanically impossible, they do it consistently, and nobody knows why that particular number. The paper says so itself: the inverted-pendulum model "only predicts the maximum walking speed (Froude number=1.0)", and "we are aware of no satisfactory model that predicts a priori that the transition should occur at a Froude number of 0.5."

So your own measurement rules something out rather than confirming something. Your dip is your distance to the ceiling, and the ceiling is the one number the two Froude numbers genuinely share: d = 1 means the specific force at mid-stance has reached zero, which is the foot leaving the ground, whatever radius your body was vaulting on. Walk faster and watch the dip climb. If you find yourself wanting to run while it is still nowhere near 1, you have reproduced on yourself the observation that the pendulum is not what is deciding. Setting your dip beside Kram's 0.45 is a different move and it needs the panel below: 0.45 is on trochanter height, your dip is on the radius your body vaults on, and until you measure both routes you do not know the factor between them. The live alternatives, from this paper's own discussion, are Hreljac's maximum ankle angular velocity in the swing phase and a family of metabolic accounts that three groups (Hreljac 1993b, Mercier and colleagues 1994, Minetti and colleagues 1994) drew different conclusions from using very similar data.

The other route, if you want to argue with the first one

The dip has no length in it. The textbook Froude number is all length: v²/(gL). Pace out a distance you have actually measured, time yourself over it, measure your leg length from the floor to the bony point at the side of your hip, and the two routes can be compared. They come from different data and they are free to disagree. Both are v²/g over a length, so dividing one by the other cancels the speed and the gravity and leaves a ratio of the two lengths: Fr/d = R_eff/L, your effective vault radius as a fraction of your leg length. Mind the direction, because the other way up, d/Fr, is L/R_eff, which would report a vault radius longer than your leg as one shorter. There is no reason for the ratio to be 1: a body does not pivot about the ankle on a rigid stick.


    

What this is not

how the estimator works, step by step
  1. Refuse below 25 readings a second, and refuse outright if the stream has a hole longer than 400 ms. A gap is a screen going to sleep; interpolating a gait across one draws a straight line with no minimum in it.
  2. Resample all three axes onto a uniform 50 Hz grid using each reading's own arrival time. A browser sensor stream is never on a grid.
  3. Keep the longest stretch where a half-second average of specific force sits between 0.5 g and 3 g. A sensor that has not started reads zero, and zero is free fall.
  4. Find the step rate from the magnitude of specific force, which no rotation can change. Refuse if the peak is under four times the band median, if the waveform does not repeat at least half of itself, if the time it repeats at is neither one step nor one stride, or if the rate drifts more than 10 per cent between the first and second half of the record. One stride, not one step, is the period of a gait: two legs are never identical, so on real force-plate walking the waveform comes back after two steps rather than one in about half of ordinary trials. This page demanded a step until 2026-08-17 and refused those walkers outright. The paragraph above the fold marked "what real walking did to this instrument" is what happened.
  5. Find "down" as a centred boxcar exactly two strides long, so the gait's own harmonics cancel out of the gravity estimate rather than leaking into it, and project onto it.
  6. Cut the record into steps at the peaks of that vertical signal, which are the double-support redirections, and drop any step more than 20 per cent off the median duration.
  7. Take the mean over a whole number of steps as the scale reference. Over whole steps the centre of mass returns to where it started, so its mean vertical acceleration is zero and this mean is exactly one g. No still-hold calibration is needed and none is asked for.
  8. Check for flight: if more than 30 per cent of steps contain 40 ms below 0.25 g, this is a run, the vault model does not apply, and no dip is reported.
  9. Locate mid-stance once, on the ensemble-averaged step. Picking the lowest sample in each step separately would bias every step downward by the same amount, and that bias never averages out however many steps you add.
  10. Refuse if that lowest point is at the edge of the search window rather than inside it, and refuse if it sits more than 15 per cent of a step away from the middle. The first is the test that the window is not what decided: if the average step is still falling where we stopped looking, the number would be a property of a slider. The second is the test that the premise held: mid-stance is the midpoint between the two double-support peaks the record was cut at, and a minimum a long way off the middle is not the vault.
  11. Read every step at that one phase, take the median, and bootstrap it 2000 times with a fixed seed so this page and the offline verifier produce identical numbers.

The interval carries four terms and names them all: the bootstrap scatter across your own steps; the browser's rounding; an assumed 0.02 g accelerometer bias, which the mean normalisation cannot see and which scales the answer by 1/(1 + b/g); and the estimator's own known low bias of about 2 per cent, which comes from linearly interpolating a ragged stream onto a grid and which is declared rather than corrected, because correcting it against the specimens would be tuning the instrument to the answers it is graded on.

what the live-sensor gate did and did not test

This page is driven end to end by scripts/check-live-sensor.mjs, which launches a real browser, injects a generated walking trace with a known dip through Chrome's sensor override, and asserts that the page's own live readout lands on it. It then injects a second trace with a different dip and asserts the answer moves with it, which is the check that catches a live path quietly reporting its anchor whatever it hears. It also runs with permission refused and asserts a structured refusal.

That injection reaches the Generic Sensor API path, which is what Android Chrome gives you. It does not reach the older DeviceMotionEvent path, which is all iOS Safari has. The iOS fallback is covered only by sharing the identical estimator with the injected path, not by having been injected itself, and it would be dishonest to imply otherwise.