Lab
Collaborative SLAM arena
Two scouts from ASCILAM sweeping an arena with 2D LiDAR. Watch the map build, then switch between what each robot believes on its own, what happens when you overlay those beliefs without correcting them, and the fused result. Take control of a scout and the map grows wherever you drive it.
One global map, after the transform between the two frames has been solved.
- Elapsed
- 0 s
- Fused coverage
- 0.0%
- α coverage / drift
- 0.0% · 0.00 m · 0.0°
- β coverage / drift
- 0.0% · 0.00 m · 0.0°
Why the maps disagree
Each scout works out where it is by counting wheel rotations. That estimate is wrong immediately and gets wronger: a wheel slips, a tyre is fractionally larger than its twin, a turn ends half a degree short. None of it is recoverable, because there is nothing to check it against. The error integrates.
Heading error is the one that does real damage. A few centimetres of position error smears a wall slightly. A few degrees of heading error rotates everything the robot records from that moment on, and the further away the wall, the further it lands from where it belongs. Watch the drift figures under the arena: the position number climbs steadily, but the map only starts to look visibly bent once the heading number does. Scout β is set to drift about twice as fast as α, which is not unrealistic — one tired motor will do it.
So each scout’s own map is self-consistent and wrong. It is a faithful record of what the sensor saw, filed under a set of poses that were quietly diverging from reality the whole time. Two such maps cannot simply be laid on top of each other — that is the unaligned view, and the two ghosts of the same corridor refusing to line up are the actual problem the project is about. Finding the transform that reconciles them is the work.
Try breaking one
Take control of a scout, drive it nose-first into a wall, and hold it there. The robot stops. Its odometry does not — the wheels are still turning, so it goes on believing it is travelling forward, and every scan it records for those few seconds gets filed metres from where it was actually taken. Watch the drift figure climb and the map tear.
That is wheel slip, and it is not a quirk of the simulation. It is the fastest way to ruin an odometry estimate on real hardware, and it is the limit the real system ran into: merging two scouts' maps came out less accurate than one scout mapping alone, because each scout's idea of where it stood drifted from where it actually was. The real scouts blend a gyro into their heading, which catches a bad turn — but a wheel slipping in a straight line looks exactly like driving forward to both sensors.
What this is honestly not
The fused view here is built by filing every scan at its true pose, which the simulation happens to know because it invented it. It is a stand-in for a solved alignment, not a scan matcher — I have not re-implemented graph SLAM in a browser and would not claim to. On the real system the scouts stream raw scans and odometry over micro-ROS to a Raspberry Pi coordinator, which files every scan into one probabilistic occupancy grid using each scout's own odometry from a known starting pose — so the drift shown here is exactly what limited it. What this page can show faithfully is the shape of the problem and what success looks like.
Everything else is close to the hardware. The occupancy grid is log-odds at 5 cm resolution, so evidence accumulates rather than overwriting — a cell seen empty twenty times and occupied once stays empty. The simulated LiDAR turns at 5.5 Hz with a 6 m useful range — slower and shorter-sighted than the LD19 on the real scouts, which keeps the arena small enough to watch fill in. Unobserved cells are drawn transparent rather than as floor, because “I looked and it is clear” and “I have never looked” are different claims and conflating them would hide the coverage gaps this is meant to expose.
The arena
Twelve metres square, split by a spine with one doorway. The layout is deliberate: neither scout can see across the divider, so each spends most of its run mapping territory the other has never observed. If both robots saw the same room, fusing their maps would be a redundancy exercise. The interesting version is when the global map contains things no single robot ever saw.
The scouts are procedural geometry for now — a chassis, two drive wheels, a castor and a spinning LiDAR puck — sized to the 0.16 m collision radius the simulation enforces. When the real CAD is exported there is a documented swap-in point in ScoutModel.tsx; that is also the moment the parked Phase 3 asset pipeline earns its place.