2025

Inertial Control System

Working in a pair, I designed an inertial controller that drives a mobile robot through hand movements.

ICM-20948ESP32-C3ESP-NOWMahony filter

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
Inertial controller circuit diagram with the ESP32-C3, ICM-20948 and OLED display
Controller circuit diagram: ESP32-C3, ICM-20948 IMU, OLED display and power supply
3D rendering of the inertial system main circuit board
3D rendering of the main PCB before manufacturing
Assembled circuit board inside the red inertial system enclosure
Assembled board integrated into the enclosure

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.

ESP-NOW communication between the two XIAO ESP32-C3 boards in the inertial system
Direct ESP-NOW link between the inertial controller and the robot receiver

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.

Exploded view of the inertial system enclosure 3D design
3D design of the enclosure and its cover
Close-up of the OLED display and ICM-20948 sensor integrated into the enclosure
OLED display and ICM-20948 IMU integration

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.

Download STL ↓

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.