Inspiration

38,000 people die on US roads yearly from driver error. Professional racing drivers train on $50,000 force feedback simulators because steering feel is the primary way drivers sense grip—when the wheel goes light, it's a 200ms warning before losing traction. I wanted to teach this life-saving skill on a $250 wheel + MacBook, something that's never been done on Apple Silicon.

## What It Does
DriveCoach teaches real steering feel through two phases: (1) Ghost Lap — the wheel moves your hands through perfect steering inputs so you feel correct technique, and (2) Your Turn — you drive while being scored against California Vehicle Code in real-time. The wheel feels heavy in corners and goes light at the grip limit—exactly like a real car—so you learn the actual mechanism
that warns drivers they're losing traction.

## How I Built It
I reverse-engineered the G920 force feedback driver from the Linux kernel (no macOS documentation exists), modeled real power steering physics using Self-Aligning Torque + viscous damping instead of a centering spring, built a kinematic bicycle physics engine with friction circle grip limiting, synthesized all audio real-time with numpy DSP, and rendered everything procedurally in Metal (no game engine). ~3,500 lines of Python running at 60 FPS on a MacBook.

## Challenges I Ran Into
The G920 ships invisible to macOS with zero documentation. OpenGL crashes on Apple Silicon. Our initial force feedback wobbled uncontrollably because centering springs create feedback oscillation. I solved these by porting HID++ 2.0 from the Linux kernel, using Metal-native wgpu, and removing the spring entirely—real power steering has no spring, just tire geometry (SAT) and hydraulic viscous damping.

## Accomplishments I'm Proud Of
I built the only working G920 HID++ 2.0 driver on macOS and in the world. I discovered that removing the centering spring and modeling real power steering physics eliminates wobble and teaches drivers actual grip limits. I proved a $250 wheel can teach steering feel as well as $50,000 motion rigs because physics matters more than motion. All in one weekend, zero game engine. I am also very proud of the custom PLB that I used

## What I Learned First-principles physics solves "unsolvable" problems. Real power steering has no spring—centering comes from tire caster trail geometry. Viscous damping (velocity-dependent forces) is stable;
position-dependent springs oscillate. Motor-memory learning works: having the wheel move your hands through correct inputs before you take control builds confidence. Procedural generation and vectorized numpy were key to 60 FPS performance.

## What's Next for DriveCoach
Haptic feedback on pedals (ABS rumble, throttle response). Real dynamic traffic that reacts to your driving. Eye-tracking integration so the coach warns when attention drifts. Different car models with varying weight distributions. VR support for full immersion. Research partnerships with universities to prove steering feel effectiveness reduces real-world crashes. Release the G920 FFB driver as open-source so other sims can use it. I also think that we should include a customized texture and a customized map of sunnyvale which was what I was getting at

Built With

Share this project:

Updates