FROS (Flexible ROS) firmware powers the next generation of embedded ROS 2 integration. Designed to run on the FROS controller (based on ESP32-S3), it enables real-time peripheral control, ROS 2 interface exposure, and hot-pluggable node binaries — all without writing custom firmware.
FROS firmware includes a custom-built ELF parser tailored for the Xtensa architecture. It supports:
- Dynamic loading of compiled ROS 2 node binaries (
.elffiles) at runtime. - Symbol relocation and linking against the running firmware.
- Secure isolation of runtime components for modular and stable execution.
This allows developers to write reusable logic in standalone ELF files and load them as needed — no need to reflash firmware.
FROS features persistent storage via onboard SPIFFS:
- Save and manage multiple
.elfbinaries directly on the controller. - Retain loaded node configurations across reboots.
- Efficient binary management system with optional auto-load on boot.
FROS supports flexible communication with onboard computers or companion devices through:
- UDP for low-latency broadcast-style data streams.
- TCP for reliable command and control pipelines.
- UART for direct serial interfacing with minimal setup.
This multi-transport system allows seamless integration into a variety of robotic workflows, whether wirelessly or through wired serial links.
fros-firmware/
├── components/ # Core components including ELF loader, transport, file system
├── main/ # Application logic and system init
├── payload/ # sample payload application for testing
├── sdkconfig.defaults # Default ESP-IDF configuration
└── README.md
-
Clone the repository
git clone https://github.com/shvass/fros.git cd fros -
Set up ESP-IDF Follow the instructions from the official ESP-IDF setup guide.
-
Build and Flash
idf.py build idf.py -p /dev/ttyUSB0 flash monitor
-
Load Node ELF Binary
- Use the FROS GUI or
fros-loadertool to upload and link ELF binaries to the device. - Configuration and GPIO mapping can also be performed through the GUI.
- Use the FROS GUI or
Once a binary is loaded and configured, FROS exposes standard ROS 2 topics and services (e.g., /cmd_vel, /scan, etc.) directly to the onboard computer via the selected transport channel. No ROS 2 code is required on the microcontroller side — everything is managed through dynamically loaded nodes.
FROS is a modular embedded framework designed to eliminate the boilerplate of microcontroller firmware development for robotic systems. It empowers ROS 2 developers to configure and deploy sensor/control nodes effortlessly on low-cost hardware like the ESP32-S3.