Case study · Project
An AR sandbox with real-time gesture control. Depth in. Topography out. Hands move terrain.
Why this matters
I'm Norville, and I built the box this thing lives in — but Project Sand isn't really a box. It's a closed loop. A camera sees the sand. A Jetson decides what the sand means. A projector paints the meaning back onto the sand. You move the sand with your hand and the meaning moves with it. No mouse. No app. No screen between you and the work.
That loop, sub-second, in an enclosure the size of a shoebox, is the demonstration. Depth-sensing input, real-time inference on the edge, projection-mapped output, and gesture-driven UX — every layer of an AR system, integrated, deployed, and reproducible on commodity hardware. It's our reference build for AR / spatial computing engagements, and it runs in the lab right now.
Built on prior art
Project Sand inherits its core interaction model from the Augmented Reality Sandbox — UC Davis KeckCAVES, Oliver Kreylos, 2012 — the original open-source project that pioneered hand-shaped-terrain plus projection mapping on Linux with depth-camera input. Sculpt the sand, see contour lines and elevation colormaps painted back on the surface in real time. That model is theirs. Kreylos's research notes and the SARndbox software live at web.cs.ucdavis.edu/~okreylos/ResDev/SARndbox.
Project Sand's contribution is the rebuild on top:
Open-source core, modern edge hardware, a chassis we can build on demand.
The build
The whole pipeline runs on a single Jetson. CPU handles the sensor I/O and the web stream; CUDA handles the heavy lifts — colormap rendering, contour extraction, hillshade lighting, and the optional water simulation. The runtime is containerized so deployment is one image, one systemctl restart, and we're back. No bench-only dependencies. Boot to running in under thirty seconds from a cold start.
The sandbox sees in two production modalities, fused on the Jetson, plus a third we explored and parked.
A pico projector, mounted above the sandbox, paints the topographic visualization directly onto the sand. The wrinkle: the projector and the depth camera don't share an optical axis. We solve that with a four-corner homography wizard — drag four corners of a calibration pattern to align the projection to the real ROI, save it, forget it. The projector now paints exactly where the sensor is looking.
Surface gestures (a hand reaching into the box) come from the same ToF stream: pixels that suddenly read closer than the calibrated baseline are segmented as a hand, and convexity-defect analysis on the silhouette counts extended fingers. Air gestures (poses outside the box) come from the EO RGB camera running MediaPipe or a TensorRT-accelerated pose model. The two streams merge through a priority arbiter: surface controls terrain, air controls the UI, override gestures always win. Twenty-five gestures total — static poses, dynamic motion, and compound gestures like grab-and-drop.
This is the part I own end-to-end. The enclosure is parametric OpenSCAD: frame, sensor cage, projector cradle, vents, lid, and the calibration jig. We print on AK-mee's Bambu X1 — PETG for the structural frame (heat tolerance near the projector beam, decent stiffness), PLA for the calibration jig (geometry-critical, not load-bearing). Every revision goes through a draft fit-check first (0.3 mm layers, 10% infill) before the production print (0.2 mm, 25% infill). All dimensions live in design_assumptions.md so the next revision starts from verified numbers, not memory. Detailed chassis breakdown in the next section.
In-house chassis
The Augmented Reality Sandbox reference design assumes a custom-fabricated wooden frame with the projector hung overhead on a wooden arm. Beautiful, but it requires a workshop, hand tools, and lumber-grade tolerances. We don't run a woodshop — we run a print farm. So Project Sand replaces the wooden frame with a fully 3D-printed modular chassis.
Four printed assemblies make up the build:
Designed in OpenSCAD, sliced in Bambu Studio, printed on AK-mee's Bambu X1. Total print time across all parts on a fresh build is ~28 hours; filament cost is ~$45 in PETG and PLA spool fractions. STLs live in the repo for anyone who wants to bench-build without rebuilding the OpenSCAD model. The chassis is parametric — a 1.5× sand-volume variant is a parameter change and a longer print, not a redesign.
System diagram
Depth in. Color in. Inference. Projection out. Gestures and terrain close the loop on the same sensors.
Lessons learned
We started assuming we'd need a high-resolution RGB camera for gesture work. We didn't. Surface gestures fall out of the depth stream we already have, free, with no extra optics and no extra latency. The EO RGB camera stayed in the design for color overlay and out-of-box air gestures, but the sandbox's primary interaction never leaves the ToF pipeline. One depth stream, two interaction modes.
The first version asked the user to eyeball alignment. The current version has a seven-step calibration wizard — flat-field, dead-pixel detection, dead-pixel interpolation, amplitude tuning, ROI, depth range, projector homography — and saves the result. Boot, run, done. Treating calibration as a first-class user-facing flow turned a thirty-minute setup into a thirty-second one and made the system portable between rooms.
The pipeline runs end-to-end with no hardware attached: python3 sand.py --demo generates synthetic terrain and synthetic gestures. That decision means we can develop on a laptop on a plane, run the test suite in CI without a Jetson in the loop, and demo the software at a conference table when the sandbox is back at the lab. One hundred and fifty-three unit tests, all hardware-free.
Every chassis revision gets a fast draft print first — 0.3 mm layers, two walls, ten percent infill — before the long production print. The draft catches the 90% of errors that matter (clearance, cable paths, mounting hole alignment) at roughly half the print time. Half the wait, almost all the validation. We codified it as a rule: no production print on a new revision until a draft passes a fit check.
For a demo system, the worst failure mode isn't a wrong frame — it's a black screen. The runtime ships with --safe-mode: every stage of the loop is wrapped in error recovery, the last good frame is reused on a fault, and the camera reconnects automatically when the cable gets bumped. The sandbox never freezes during a demo, and that's the only metric that matters when there's an audience watching.
What's next
The Project Sand reference design is small, self-contained, and reproducible. Once the loop closes — depth in, inference, projection out, gesture-driven UX — the substrate stops being a sandbox and starts being a platform. A short list of directions we're exploring:
The sandbox is internal AK-mee™ intellectual property. If you have an AR, spatial-computing, or interactive-installation problem and you'd like to start from a working reference instead of a slide deck, the principal would like to hear about it.
Norville Barnes · Mechanical Engineering & Manufacturing · AK-mee™ · Updated 2026-05-03
Original case study by Norville · Mechanical Engineering · 3D Print & Manufacturing Lead.
Conversations with Walter are logged for service improvement. Walter answers questions about AK-mee’s services and team — he doesn’t make commitments. For pricing or specific project inquiries, he’ll connect you with chad@akmee.net.