Embedded control architecture for a bipedal humanoid robot developed as part of a graduation project in Mechatronics Engineering.
This repository contains the embedded firmware and technical documentation for the distributed real-time control system responsible for actuator control, sensor acquisition, communication, and system diagnostics.
The embedded system follows a hierarchical distributed control architecture that separates high-level computation from time-critical low-level control.
The system consists of:
- NVIDIA Jetson Nano for high-level processing and ROS 2
- STM32 Nucleo-F446RE gateway controller
- STM32 Nucleo-F446RE left-leg controller
- STM32 Nucleo-F446RE right-leg controller
- FreeRTOS-based real-time firmware
- Distributed actuator control
- IMU acquisition and preprocessing
- UART-based inter-controller communication
- Custom communication protocol
- Diagnostic and fault-handling services
The Jetson Nano represents the high-level computing layer, while the scope of this repository focuses on the STM32-based embedded control layer
Time-critical functions are delegated to STM32 controllers running FreeRTOS.
The gateway controller is responsible for:
- Communication with the NVIDIA Jetson Nano
- Communication with the left and right leg controllers
- IMU data acquisition
- Sensor preprocessing
- Upper-body actuator control
- Command distribution
- Feedback aggregation
- System diagnostics
Two identical STM32 controllers are used for the left and right legs.
Each controller is responsible for:
- Three Actuonix L16-P linear actuators
- One RMD rotary actuator
- Closed-loop actuator position control
- Position feedback acquisition
- Communication with the gateway controller
- Local diagnostics
The embedded firmware is implemented using FreeRTOS with preemptive priority-based scheduling.
The system uses different execution frequencies according to task criticality:
| Function | Frequency |
|---|---|
| Linear actuator control | 1 kHz |
| Rotary actuator control | 500 Hz |
| IMU acquisition | 200 Hz |
| Inter-controller communication | 100 Hz |
Closed-loop position control is implemented for the linear actuators.
Position feedback is obtained from the actuators' integrated potentiometers using the STM32 ADC peripherals.
A PID controller computes the required control effort, which is converted to PWM signals for the external motor drivers.
The RMD rotary actuators use their internal low-level control capabilities while the STM32 controllers manage command generation and feedback acquisition.
Communication between the Jetson Nano and gateway controller is performed using UART.
The gateway communicates independently with the two lower-limb controllers using dedicated UART channels.
A custom application-layer communication protocol is used for exchanging:
- Actuator commands
- Position feedback
- Sensor measurements
- Diagnostic data
- System status
The protocol includes packet framing, payload information, checksum verification, and packet validation.
The firmware follows a layered software architecture:
- Application Layer
- Service Layer
- FreeRTOS Middleware Layer
- Hardware Abstraction Layer
The implementation uses:
- FreeRTOS tasks
- Queues
- Semaphores
- Mutexes
- Interrupts
- DMA
- UART
- SPI
- ADC
- PWM
- Timers
- GPIO
My work focused on the embedded layer of the humanoid robot, including:
- Distributed STM32 control architecture
- FreeRTOS-based firmware
- Actuator control and sensor acquisition
- Inter-controller UART communication
- Embedded communication protocol
- Firmware debugging and hardware/software integration
- System-level integration with the higher-level computing platform
Firmware debugging was performed using ST-LINK over SWD/JTAG, including runtime inspection and step-by-step debugging of the STM32 firmware.
Hardware-level faults and electrical connections were diagnosed using a digital multimeter during system integration.
.
├── code/
│ └── Embedded firmware
│
├── documentation/
│ └── Embedded system technical documentation
│
├── README.md
└── .gitignore