2025
Inertial Control System
Working in a pair, I designed an inertial controller that drives a mobile robot through hand movements.
Prototype validation
Video demonstration of the completed project
This demonstration validates our work from sensing hand orientation through to proportional control of the robot’s motors.
Watch on YouTube ↗Context
I completed this SAÉ (a French learning and assessment project) in a two-person team during my second year of Electrical Engineering, in the Electronics and Embedded Systems track. It required me to integrate an inertial unit into a complete chain, from measurement to robot movement.
Objective
The objective was to learn how to use an IMU (inertial measurement unit) to acquire and interpret movement, then explore wireless communication between two ESP-family microcontrollers to control the robot remotely.
Problem statement
How can hand orientation be determined when the IMU does not directly provide a position, but notably measures angular velocity along each axis, and how can these noisy measurements then be converted into stable, responsive and reliable commands for real-time robot control?
Specifications
- Acquire all nine axes of the ICM-20948 over I²C
- Estimate roll, pitch and yaw in real time
- Establish direct communication between two ESP32-C3 boards
- Control motor speed proportionally to hand inclination
- Display orientation, direction and link status on an OLED screen
- Design dedicated transmitter and receiver circuit boards
Hardware used
- ICM-20948 nine-axis inertial measurement unit
- Two XIAO ESP32-C3 Mini microcontrollers
- I²C OLED display
- Four-wheeled mobile robot with DC motors
- L298N H-bridge motor driver
- Custom transmitter and receiver electronic boards



System architecture
I worked on an architecture separating transmitter and receiver. The transmitter reads the ICM-20948 over I²C, computes orientation and displays values on the OLED. The receiver then turns angles received through ESP-NOW into motor PWM signals.

Development
Together with my teammate, I followed an incremental workflow: compare components and protocols, test on a breadboard, estimate attitude, create a 3D visualisation tool, design the PCBs and progressively integrate transmitter and receiver firmware.


Mechanical design
Explore the 3D model
The preview stays compact for easier reading. Drag the model to rotate it, use the mouse wheel or buttons to zoom, then open it full screen for more comfortable exploration.
Loading 3D model…
Wheel: zoom in and out
System tuning
Visualising orientation in 3D
I used this 3D representation to compare physical movement with computed angles in real time. It helped me identify drift, check axis directions and tune calibration and Mahony-filter parameters before connecting the robot.
Watch the test on YouTube ↗Challenges
I mainly had to understand IMU noise and drift, calibrate axes correctly, maintain a stable radio link and translate abstract angles into natural robot movements.
Solutions
We used the Mahony filter for sensor fusion, added a dead zone around neutral position and selected ESP-NOW after comparing it with HTTP and WebSocket. The OLED and 3D cube became diagnostic tools during tuning.
Results
Together, we produced a functional, responsive prototype that remained stable in the main directions. Diagonal control was less precise; this taught me to report a prototype’s limits honestly and define a measurable improvement path.
Skills gained
- Acquisition and calibration of a nine-axis MEMS IMU
- Sensor fusion and attitude estimation with a Mahony filter
- Embedded programming on ESP32-C3
- Point-to-point radio communication with ESP-NOW
- Electronic-board design, routing and testing
- PWM motor control and OLED interface integration
- Functional analysis, technical writing and teamwork
Project report
Read the complete 70-page project report covering theory, component selection, schematics, board design, software and testing. The presentation provides an illustrated overview of the project’s key stages and results.