Embedded avionics firmware for PL-26, developed for the Unity Rise University of Liverpool Rocket Team for the 2025-26 launch.
This repository is the software component of a Year 3 MEng Individual Project (ELEC440) for the MEng Avionic Systems degree.
- Author: Joseph Wood
- Module: ELEC440 MEng Individual Project
- Project Title: LASER - Rocket Flight Tracking and Control
- Rocket: PL-26 (Unity Rise, 2025-26)
From src/main.cpp, the flight computer provides:
- Sensor acquisition from BMP390 (barometer), BNO085 (IMU/orientation), ICM20948 (IMU) and u-blox MAX-M10S GNSS
- INS/Dead reckoning algorithm integration via
lib/INS_Model(INS_Model_C), generated using the Simulink C++ Coder - SD card CSV logging using
SD_MMC - LoRa telemetry transmission at 868 MHz
- Wi-Fi SoftAP + HTTP server for configuration and file access
- FreeRTOS task-based software for task and core management with mutex-protected shared state
Core tasks created in setup():
highFrequencySensorTask- reads BMP3XX and BNO08x data and computes filtered vertical speedgpsTask- reads GNSS PVT data and updates GPS fieldsinsTask- maps sensor inputs intoINS_Model_Cand updates INS outputsloggingTask- writes periodic CSV rows to SD card and flushes once per secondloraTask- sends packed binary telemetry packets over LoRawebServerTask- services HTTP requestsbuttonTask- toggles logging pause/resume with debounce
Synchronization primitives:
xSensorDataMutexprotects shared sensor/INS dataxSpiMutexarbitrates SPI access between sensors and LoRa
At boot, firmware creates an incremented log file:
/Flight_Data_<n>.csv
CSV columns include:
- Time (ms)
- BMP: temperature, pressure, altitude, vertical speed
- BNO: linear acceleration, gravity, quaternion
- GNSS: latitude, longitude, altitude, speed, heading
- INS:
X_Estimate,Y_Estimate,Z_Estimate,Lat_Estimate,Long_Estimate
LoRa payload uses a packed TelemetryPacket (44 bytes) containing:
altitude,vSpeedlat,lonqR,qI,qJ,qKinsX,insY,insZ
Configured in code for:
- Band:
868E6 - CRC enabled
- Bandwidth
500E3, spreading factor7, coding rate4/5
Configuration is saved on SD card at:
/config.txt
Current contents:
pressure=1013.25
pressuremaps toseaLevelPressureHpafor barometric altitude reference.
pl26-avionics-software/
|- include/
|- lib/
| |- INS_Model/
|- src/
| |- main.cpp
|- test/
|- platformio.ini
|- README.md
|- LICENSE.md
This project uses PlatformIO, MCU is ESP32-S3-Mini-1-N8.
platformio run
platformio run --target upload
platformio device monitor -b 115200- Test code: https://github.com/UnityRiseUol/pl26-avionics-test-code
- Altium Designer hardware files: https://github.com/UnityRiseUol/pl26-avionics-hardware
This software is developed for educational rocketry use. Please complete thorough testing and validation before flight.
Licensed under the MIT Licence. See LICENSE.md.