Back to timeline
hobby 2025

An RC car that doesn't care how far you drive it

A long-range RC car streaming two camera feeds over 4G, driven from a PC anywhere on the internet. The interesting bit isn't the hardware, it's the networking: a custom UDP hole-punching protocol so the car and the controller find each other peer-to-peer, with no static IPs, no relay servers, and the lowest practical latency.

Driving station mid-session: two large monitors above a laptop, each monitor showing one of the car's two cameras (a low forward view down a road and a wider chase view). A picture-in-picture overlay in the corner shows the actual RC car on tarmac next to a person's shoe. The laptop screen is split between code on the left and live telemetry numbers (steering, throttle, axis values) on the right.
The driving station. Two camera feeds on the monitors, telemetry on the laptop, and an inset frame of the actual car on the ground somewhere across town.

Why this got hard

Home 5G was the trigger. Most consumer mobile connections sit behind carrier-grade NAT, which means: no incoming connections, no static IP, no port forwarding. The usual fix is a relay server somewhere in the middle, but a relay adds latency, and latency kills RC driving.

The protocol

UDP hole-punching

Reconnect & bad-link handling

Video

Two cameras on the car (a forward-facing primary and a wider situational camera), encoded and shipped as parallel UDP streams. The receiver renders both feeds side by side. Encoder bitrate adapts to the measured link quality so picture degrades gracefully instead of stalling.

Web dashboard with a dark theme. Top-left panel: a live navigation map of Trondheim with the car's path drawn in blue. Top-right: large speed reading '53 km/h' and a battery indicator at 73.6%. Below, a power-draw line chart in watts. Right side panels show system telemetry: odometer 1245.5 km, uptime 00:00:27, network ping 21 ms, packet loss 0.02%, ambient 12.5 °C, raspberry pi 45.0 °C, motor 86.4 °C, battery pack 31.4 °C.
The operator dashboard. Position, link health, and the temperatures that decide how long a run lasts.
Point-of-view shot of two hands holding a Nintendo Switch Pro controller in front of a curved monitor showing the live navigation map.
Steering input is whatever HID device the driver wants: controller, wheel, keyboard.

Demos

Early indoor demo.

Outdoor follow-along.

Long-range. Driving out of sight.

What I'd change

Move to QUIC for the video path so I get congestion control and connection migration for free. Add a forward-error-correction layer for the keyframes; losing a keyframe on a bad link is still the worst-case failure. And, predictably, give the car a better antenna.

Back to timeline