Irregular screen size detected, Content may not be displayed correctly.
Project June, a 5G radio-controlled vehicle
All projects
HighlightsPersonal Project

Project June

I want a Mars rover, and if I cannot buy one, I will build one myself. That's the motivation behind this project. The rover streams three live video feeds of its surroundings together with GPS data and sensor readings like temperature, humidity, pressure and brightness, helping the operator understand and navigate the terrain with confidence.

Built with
PhotoshopVS CodeOnshapeKiCADESP32PlatformIO

Demo Video

Project June

I planned to build Project June in two weeks, but it took me three. It was definitely rushed, and there are a lot of things I wish I had done differently. Even so, it is still one of the most ambitious projects I have worked on.

The original Project June rover
The original Project June photo

Onboard Systems

Project June onboard systems overview

Ultrasonic Distance Sensor

Ultrasonic distance sensor

Laser System

Laser system

Live GPS

Live GPS module

10 Axis IMU

10 axis IMU

Light Sensor

Light sensor

DHT11 Temp & Humidity

DHT11 temperature and humidity sensor

Technical Architecture

This is an overview of how each system functions and how they all interact with each other.

System architecture diagram

Live Stream System

This diagram shows how the whole live streaming system works. It is 3 different WebRTC streams that send the live video to the client.

Live stream system diagramWebRTC stream routing

Control & Telemetry System

The control and telemetry system feeds sensor data to the client using an MQTT topic that the client is subscribed to. Another MQTT topic is used by the client to send movement and command messages back to the ESP32.

Control and telemetry diagram

Signalling

Because of an issue that has not yet been resolved, all sensor data could not be sent together in a single MQTT transmission. Instead, the data was divided into three separate packets and transmitted individually at approximately 10 Hz.

Signalling packet diagram

Software

Here is the simplified flow chart of how the code works.

Software flow chart part 1Software flow chart part 2

Software Design (Figma)

Spline 3D

I used Spline 3D for the 3D elements in the UI. When you push the controller forward, the model moves into the forward view, and if you move it back, it goes into the reverse view.

Spline 3D UI element
Spline 3D
The live animation

Driving Project June

Driving Project June was an unforgettable experience. The roughly one-second delay between controller input and movement on the live feed, combined with the instability of the stream, made it challenging at times. Thinking about how my controller input had to travel through so many layers of systems, while the video feed was being sent from over 8 kilometres away, still blows my mind.

Project June on GitHubA rover control system with WebRTC video streaming, MQTT telemetry, and ESP32 sensor integration.
View GitHub Repo
Check out the next articleAll projects
More to explore

Other projects

PersonalHighlightLoRA Messenger

LoRA Messenger

An ESP32 messenger with 2-way voice over ESP-NOW and text over LoRa. Custom PCB in KiCAD, case in Onshape, all self-taught.

ESP32KiCADOnshapePlatformIO
SchoolEMA Smart Home System

EMA Smart Home

A multi-node smart-home system on BeagleBone Black, Python and SocketIO, with a live dashboard and a 3D Spline view.

VS CodeFigmaDaVinci ResolveOnshape
SchoolPandus Dispenser

Pandus Dispenser

My first school project: a 6-part 3D-printed water dispenser powered by an Arduino Uno and driven with PyFirmata.

OnshapeVS CodeDaVinci ResolvePowerPoint