Environment

ResPlan apartment floors, the `fiit-library` floor, and `test-lab-synth`; multi-group agendas (arrival waves, seat reuse, through-traffic, egress).

Executive summary

This card is the movement side of the platform: pedestrians walking, sitting, queueing and leaving on real building floors imported from the indoor GIS database, driven by authored personas rather than scripted paths. Seven campaigns exercise it in four regimes — a full day-in-the-life on one furnished flat, the same crowd across ten different apartment layouts, an evacuation drain, and a "furniture vs no furniture" A/B — plus one platform plumbing probe and one blocked-on-geometry design spec.

The honest headline. Where the geometry is clean, the walker behaves the way pedestrian-dynamics textbooks say it should: agents walk at 1.08–1.20 m/s (inside the published free-walk band), a seat-reuse ledger lets 36 people cycle through 16 seats, time-to-seat rises with load (Spearman ρ = 0.95), and a clean floor evacuates with a super-linear clearance curve (ρ = 0.96, exact p = 0.011). Where the geometry is not clean, the truth is unflattering and it is reported as such: sub-60 cm walkable channels deadlock 2–6 agents under converging load; furniture placed 0.35 m from a doorway traps a fraction of agents until a door-clearance fix was applied; the FIIT library floor is a hard geometry blocker (0/80 seats reachable) and has never run. Two campaigns also surfaced measurement/provenance gaps: a "replay gallery" whose whole point is visual sealed with zero session-level figures, and the furniture study reached its clean TV = 0.54 result through heavy local iteration without a sealed campaign session or a critic pass. All of this is simulation — the movement is a generative demand surface, not a measured occupancy trace, and no result crosses into a deployment claim.

The problem, in plain words

Suppose you want to test a Wi-Fi people-counter in a library. You cannot fill a real library with 160 students on demand, over and over, with a known ground-truth headcount. So instead you build a virtual library: take the real floor plan (walls, doors, desks) and let simulated people walk around inside it — arriving, finding a seat, studying, leaving. If those virtual people move like real people, their bodies become moving "obstacles" that a radio wave would bounce off, and you get an endless supply of labelled training scenes.

The catch is the phrase "if those virtual people move like real people." A pedestrian simulator can produce nonsense in two ways. It can get the physics wrong — people walking through walls, or teleporting, or moving at car speeds. Or it can get the geometry wrong — a doorway that a real person walks through fine, but where the simulator's derived "walkable area" has a 40 cm sliver that jams two agents together forever. This card's entire job is to catch both failure modes loudly, on real floors, before any of this motion feeds a radio simulation. The pedestrian-dynamics literature gives us the yardsticks: a free-walking speed of about 1.3 ± 0.2 m/s (maury2018 ), a fundamental diagram that says speed drops as density rises (corbetta2023 ), and — crucially — that at the low densities of an apartment, the model should predict free flow, so any slowdown we see is a scene problem, not a crowd problem.

What we are trying to prove

  • Hypothesis (falsifiable): the authored-persona walker produces literature-plausible motion on real database floors — mean speed in the 0.8–1.6 m/s band, no agent outside the walkable envelope, personas completing door→room→activity→exit as written, and congestion effects (time-to-seat, clearance time) that grow with load the way the fundamental diagram predicts. If speeds fall out of band for kinematic reasons, or agents clip walls, the walkable derivation is wrong and the run is void.
  • The deliberate escape hatch: a floor that hard-fails the walkable QC is a geometry result for that floor (reported, floor dropped), not a crowd result. This is not moving the goalposts — it is the pre-registered separation between "the crowd model is broken" and "this particular imported floor plan is broken."
  • What a null means: if the walker could only produce plausible motion on hand-tuned geometry, the "generalises across indoor layouts without per-venue retraining" claim (the Indoor Crowd Modeling chapter) would collapse. The gallery campaign tests exactly this across ten floors — and the answer is a qualified "kinematically yes, but the harness can't yet measure the congestion it produces."

How the experiment works (plain method)

  1. Import a real floor. gis export-floor serialises a database floor (envelope, wall LineStrings, doors, occupiable seats, furniture obstacles) to a portable floor_geometry.json. The container never touches PostGIS.
  2. Derive the walkable area. The from_floor runner computes walkable = envelope − buffer(walls) − furniture obstacles; occupiable seats are kept as goals, not obstacles. A walkable-QC pass repairs slivers and fails loud if the navigable core is empty or split at the agent radius.
  3. Author a crowd, not a script. Personas/groups declare intent — "arrive from the east, seek a seat, dwell for a log-normal session, then leave" — and JuPedSim's Collision-Free Speed Model (tordeux2016 ) resolves the operational-layer walking. This is the literature's strategic→tactical→operational decomposition (duives2013 ).
  4. Run, watch, measure. Every run emits an animated trajectory.html replay, a footfall_heatmap.png, speed_vs_time.png, and a per-person trajectory.parquet. The analysis-writer reads the scalar floor (n_outside_walkable, speeds, per-group spawned/seated/departed/turned_away, time-to-seat) and checks each pre-registered criterion, citing run IDs and replay artefacts.

What we've found so far (honest, across seven campaigns)

Campaign Status Criteria The real result
c-crowd-motion-mix sealed session, 9 runs 4/4 Day-in-the-life on furnished resplan-12439. 16/16 seats reachable after a kitchen-door fix; speeds 1.08–1.20 m/s; seat-reuse ledger cycles 35–36 distinct people through 16 seats (occupancy_rate 2.2×); time-to-seat 3.6 → 6.2 → 13.8 s across load, Spearman ρ = 0.95. Congestion is seat-contention queueing, not FD slowdown (speed stays clamped).
c-resplan-egress sealed session, 18 runs 1/4 by the letter The most rigorous. resplan-16157 evacuates cleanly and super-linearly (303 → 876 frames, ρ = 0.96, exact p = 0.011). But resplan-1374/-12439 wedge-deadlock 2–6 agents in sub-60 cm channels — clearance right-censored, never averaged. Mean-speed "band violation" (0.64–0.67 m/s) in the 4 congested cells is the queueing signature itself, booked false honestly. n = 2 seeds → descriptive; 2/3 floors survive BH-FDR.
c-resplan-crowd-geometry-gallery sealed session, 20 runs 2/4 One scenario across all 10 ResPlan floors. Kinematically portable (n_outside_walkable = 0, speeds 0.81–1.20 m/s everywhere); 9/10 close at intensity 1.0 (resplan-7421 strands 1 agent). C4 is unanswerablemean_traversal_s does not exist in the schema, so the congestion test can't run. Audit flag: a gallery sealed with zero session-level figures, and the harness has no stranded-agent counter (losses hide behind turned_away == 0).
c-fiit-find-a-seat sealed session, 2 runs 3/3 The IP-092 structure→sim bridge works: a real DB floor drives seek-and-occupy end-to-end, no DB touch. occupancy_rate 0.81 (13/16 reachable seats). Caveats: only 16 of 24 authored seats are reachable (8 outside the walls-subtracted walkable at 20 cm clearance), and seeds 0/1 are byte-identical — the seed axis is a replica, not a second draw. No criticism.md.
c-furniture-walkability no sealed session (local execution log) complete, local Does furniture move the crowd? On resplan-2605 (the only floor with obstacle furniture), TV(furnished, empty) = 0.540, 95% CI [0.485, 0.577] over 8 seed pairs — furniture significantly redistributes footfall without inducing a jam (traversal_inflation 0.96×). But this required a long ad-hoc journey: through-traffic jammed 11×, a room-targeted redesign trapped 4/14 agents at furniture-narrowed doors, and only a door-F-Space placer fix (35 → 27 obstacles) at the literature-validated 0.20 m radius produced the clean signal. Real work, but no sealed campaign session and no critic pass.
c-fiit-library-day no session — BLOCKED design only The 8-hour campus-day + cohesive-seating behaviour model is implemented and unit-tested, but fiit-library-floor-0 is not sim-ready: scan furniture is mis-registered against the polygonized walls (453 segments → 281 fragments) and 0 of 80 derived seats are reachable. Any run would exercise a broken walkable graph. Unexecuted; awaits a QGIS geometry reconcile.
c-walk-notebook-flex sealed session, 6 runs 2/3 (platform probe) Not a research campaign — a plumbing test that a papermill notebook is a first-class artefact. IP-085 role: notebook + format: html round-trip end-to-end. Width→traversal effect is null (flat at free-flow density, ρ = +1.0) and immaterial. Real payload: 3 platform bugs (duplicate cold builds ate the budget, an S3-put timeout killed a run, the renderer slug was missing).

The through-line. The crowd physics is sound and literature-grounded wherever the geometry is clean. The recurring adversary is imported-floor geometry: narrow walkable channels and door-blocking furniture, not the pedestrian model. The platform's honest weak spots are measurement (mean_traversal_s and a stranded-agent counter are missing from the schema; a visual gallery sealed with no figures) and provenance (the furniture result lives in a note, not a sealed, critic-reviewed session).

How to read the figures

  • trajectory.html (every executed run) — an animated, group-coloured replay. Watch the doorways: hotspots and pile-ups there are the congestion story. On c-resplan-egress you can literally watch a floor drain and see which agents get stuck in a channel.
  • footfall_heatmap.png — where feet actually landed, area-normalised. In c-furniture-walkability the signed difference map (furnished − empty) is the headline: it shows where furniture pushed the crowd, and the TV distance measures how much.
  • fig_resplan_egress.png (session-level, the one campaign that attached it) — clearance-time-vs-intensity per floor. The honest reading: resplan-16157's clean super-linear curve is real; the non-clearing floors are right-censored at the 6000-frame horizon, not slow — a censored point is a deadlock, not a data point on the curve.
  • speed_vs_time.png — beware: the peak is pinned at the 1.20 m/s CFSM cap on every run, so it is a clamp, not an emergent peak. Read the mean dropping in congested cells, not the flat ceiling.

Review panel

Each voice is a prepared expert with a one-line stance and the literature it argues from. Verdicts are about this experiment's current evidence, not the idea in the abstract.

Optional further voice for a future round — 🛡️ Responsible-Sensing / Ethics reviewer: once these trajectories drive a device-free CSI counter, the privacy and consent questions of people-sensing apply. Not central to the pure movement layer, so not run for this card.

Key references

  • maury2018 — the Weidmann free-walk band (1.30 ± 0.21 m/s) that anchors the kinematic gate on every campaign.
  • tordeux2016 — the operational model JuPedSim actually runs; the source of the 0.20 m radius / v₀ = 1.34 grounding.
  • corbetta2023 — the fundamental diagram and the free-flow-at-low-density argument that proved the furniture jam was a scene defect.
  • cordes2024 , seyfried2006 — hard-core radius and free-walk speed distribution; why 0.10 m was the wrong "fix."
  • duives2013 — the strategic→tactical→operational decomposition the agenda/persona engine implements.
  • hoogendoorn2015 — total-density-governs-speed; the mathematician's identifiability frame.
  • jebrane2026, wang2022, haghani2023 — the FD slowdown and doorway-bottleneck literature the egress campaign is measured against.
  • zhong2022, wolinski2014 — the validation instruments (FD, in/out-flow, comparative evaluation) and the reproducibility bar the SWE voice invokes.
  • diakit2020, aleksandrov2021 — door F-Space and minimum-passable-gap; the deployment practitioner's geometry-gate argument.
  • zou2018 , chen2018 — the downstream sensing use-case the movement layer feeds.
  • makinoshima2022, jia2025 — calibration-to-real-observation and the synthetic-crowd domain gap the red-team demands be closed.

Campaigns & sessions

Campaign Session State Runs Started Report
c-crowd-motion-mix planned
c-fiit-find-a-seat planned
c-fiit-library-day planned
c-furniture-walkability planned
c-resplan-crowd-geometry-gallery planned
c-resplan-egress planned
c-walk-notebook-flex planned

Provenance

Data origin
simulated
GIS experiment
csi-link-resplan-12439-multiroom

Data types

  • trajectory
  • footfall-surface
  • speed-vs-time
  • replay-html