CageTrax
Every swing measured, and a cage that runs itself: machine power only for a paid hitter, gate shut, nobody in front of it
A stereo camera bar and a Doppler radar on each cage measure every batted ball and pitch, filed to the hitter who tapped in. The CageGuard add-on keeps the pitching machine switched off unless a paid hitter has tapped in, the gate is shut, nobody is near the machine and the pitch speed suits the hitter's age, so cages can run with no one at the desk. It is a house-rules control, not a safety device.
- Who buys it
- Owner of a batting-cage facility or travel-ball academy with 4 to 12 cages.
- Why it pays
- A HitTrax system was estimated at $17,744 in a 2025 university bid and Trackman B1 starts at $18,995. CageTrax targets $2,490 per cage plus $79 a month. Twenty $15 data sessions a week per cage would bring in about $1,300 a month (est.; attach rate unverified).
- Target price
- $2,490 per cage + $79/cage/month; CageGuard +$249 per cage (target)
- First-minute wow
- The hitter steps out to pick up balls and the machine stops before they reach it; the kiosk says PERSON NEAR MACHINE, and pitching resumes when they are back behind the plate with the gate shut.

What the research found
And how this design answers it
- Unattended cages: posted rules want gates shut, one batter, nobody in front of a running machine and age speed limits (MEL Safety Institute May 2026, Fairfax County) → CageGuard powers the machine only when all are true, through a listed plug that turns itself off if the link fails
- Launch monitors cost $3,000-19,000 per cage → about $714 of hardware per cage (est.) on a shared facility hub
- Radar alone gives speed but no angles, and drops off for pulled balls → radar speed is corrected with the camera-measured direction; the cameras carry launch and spray
- Cheap cameras blur an 80+ mph ball → 120 fps global-shutter cameras with a 150 µs IR strobe; the ball moves under 1 cm while the shutter is open
- Facility LED lights flicker and nets clutter the image → an 850 nm bandpass filter passes only our own strobe; the static net is removed by background subtraction and epipolar matching
- Distance in a cage is a guess → a drag and lift flight model checked against a published Statcast case, shown with a ± band because spin is not measured
- Phone apps need someone to film → fixed install; the hitter taps a wristband or scans a QR code and every swing is filed automatically
Use case
Self-service cage at 21:30, no one at the desk
Hitter (14)ParentFacility owner (remote)CageTrax + CageGuard
- 01Trigger: the hitter books online and taps a wristband at cage 3 (70 mph); the gate shuts
- 02Detection: the radar sees the first pitch at 71 mph, over the 65 mph cap the owner set for under-16s
- 03Alert: power to the machine is cut and the kiosk shows SPEED TOO HIGH: SEE DESK; the owner gets a notice
- 04Action: the hitter moves to cage 1 (55 mph), taps in and hits; when they walk out for balls the machine stops until they are back
Outcome: The posted cage rules are applied with nobody on duty, and every gate, pause and lockout is logged for the owner and insurer
How it works
Architecture
- 01
Sense: 2 x OV9281 120 fps cameras with 850 nm strobes, an OPS243 Doppler radar behind the plate, and CageGuard (LD2450 radar on the L-screen, gate reed contact)
- 02
Decide: the Pi 5 cage node measures every ball and runs guardEngine() every 200 ms: session, age, round, gate, zone, PAUSE, weather hold and speed cap
- 03
Send: local MQTT to the kiosk, TV page and hub; the node re-arms the machine plug's 15 s auto-off only while the answer is run; metrics only to the cloud
- 04
Tell: kiosk big numbers and the reason the machine is off, the guard-pod LED, the leaderboard TV, owner notices and a per-cage event log
Hardware
Real parts, buyable today
Bill of materials: about $714 per cage plus a shared ~$300 facility hub; CageGuard about $64 per cage (est.).
| Block | Part | Why this part |
|---|---|---|
| Stereo cameras | 2 x Arducam OV9281 1 MP mono global shutter MIPI (1280x800, up to 143 fps RAW8) | No rolling-shutter skew on a fast ball; mono NIR sensitivity suits an 850 nm strobe |
| Radar | OmniPreSense OPS243-A 24 GHz Doppler (±0.5 % speed) | Best exit-velocity and pitch-speed accuracy per dollar; sees through net and radome |
| Cage node | Raspberry Pi 5 4GB + IEMI trigger board | Two camera ports for the stereo pair; hardware PWM drives the camera trigger and strobe gate |
| Lighting | IEMI strobe PCB, 6 x OSRAM SFH 4715AS 850 nm per camera | 150 µs pulses locked to the exposure; no visible light in the hitter's eyes |
| Kiosk | Waveshare ESP32-S3-Touch-LCD-7 + PN532 NFC | Wristband tap or phone QR join, big swing numbers at the cage door |
| CageGuard | HLK-LD2450 24 GHz radar + XIAO ESP32-C3 in an L-screen pod, reed gate contact, Shelly Plug US Gen4 | Sees anyone walking out to the machine, knows the gate is shut, and cuts machine power through a UL-listed plug |
Mechanical
Printable CAD
14 parts, generated from code and checked as closed solids. Pick a part to inspect it, or download the STL files to print.
See the CAD parts render

Loading the CAD…
Real CAD · drag to rotate · scroll to zoomReal CAD · swipe sideways
Bought hardware fitted inside this part (checked in the CAD: nothing collides with the plastic)
- Camera pod shell with PC window (x2)cam-pod-shell.stl · ASA
- Camera pod back plate on the aluminium spine (x2)cam-pod-back.stl · ASA
- Cage node base (Pi 5 + trigger board)bar-node-base.stl · PETG
- Cage node lidbar-node-lid.stl · PETG
- Tilted bar saddle for the EMT standoff arm (x2)bar-saddle.stl · ASA
- Cage-pipe clamp with EMT arm socket (x2)frame-clamp-socket.stl · ASA
- Cage-pipe clamp half with 1/4-20 insertframe-clamp-half.stl · PETG
- Radar housing baseradar-base.stl · PETG
- Radar radome lidradar-lid.stl · PETG
- Kiosk front with display window and tap targetkiosk-front.stl · PETG
- Kiosk back with clamp keykiosk-back.stl · PETG
- CageGuard pod case on the L-screen (LD2450 radar)guard-pod-case.stl · ASA
- CageGuard pod lid with radar window and PAUSE keyguard-pod-lid.stl · PETG
- Gate reed-contact clip (x2: contact + magnet)reed-clip.stl · ASA
Open risks we are working on
- CageGuard: the LD2450 range and view through an L-screen net are unproven until test G1; hardwired or 240 V machines need an electrician and a listed contactor
- Ball detection in the first 30 cm after contact (bat occlusion, net strands) is unproven until bench test T3
- Hardware trigger support on the OV9281 under the Raspberry Pi driver is unconfirmed; the fallback is a timestamp-based track fit
- Distance is a model estimate (about ±15 ft at 350 ft) because spin is not measured
- Pure Node.js processing of two 120 fps streams on a Pi 5 may not keep up; downscaled detection and region-of-interest refinement are planned
- Facilities may not pay $79 a month per cage when cheap radar guns exist
Design stage only: nothing on this page is for sale. Specifications and prices are targets.