Robotics • Embedded • ROS 2

OmniRevolve

XY plotter (scalable to 15 colors) — STM32F446 with a deterministic 10 kHz control loop (TIM4 ISR) driving multi-axis step generation, endstop handling, homing/calibration, stream timing and an action FSM (tap, color change, pen up/down); ESP32 (FreeRTOS + micro-ROS over Wi‑Fi), ROS 2 UI, SPI DMA 512 B streaming, CRC protocol.

System Architecture

flowchart LR subgraph PC UI["ROS 2 UI (Tkinter)"] Agent["micro-ROS Agent (UDP)"] end subgraph ESP32 MROS["micro-ROS Node / FreeRTOS"] OLED1["OLED SSD1309"] end subgraph STM32 MCU["STM32F446 (NUCLEO-F446RE)"] TIM4["TIM4 @ 10 kHz - step generation"] OLED2["OLED SSD1309"] Endstops["Hall + mechanical endstops"] end subgraph Mechanics TB6600["TB6600 drivers"] NEMA["NEMA17 steppers (X/Y/pen conveyor/carousel)"] Head["Carousel + Z carriage + Pen conveyor"] end UI -- "/plotter/byte_stream + cmds" --> MROS MROS -- "SPI DMA: 512 B chunks" --> MCU MCU -- "UART status/CRC" --> MROS MROS -- "/plotter/telemetry" --> UI MCU --> TIM4 MCU --> Endstops MCU --> OLED2 MROS --> OLED1 MCU --> TB6600 --> NEMA NEMA --> Head

Highlights

Public Repositories

stm32-firmware

STM32F446 firmware (TIM4@10kHz, SPI DMA RX, UART CRC, SSD1309).

esp32-microros

ESP32 micro-ROS bridge: ROS 2 stream → SPI DMA → STM32; telemetry.

esp32-core

OLED status, keypad, UART (CRC) to STM32; components and drivers.

ros2-ui

PC UI (Tkinter): send stream, control, live preview, progress.

ros2-messages

Shared ROS 2 messages (e.g., PlotterTelemetry).

image-processor

Image → contours → plotter byte stream.

protocol

Binary protocol & defines (service/step bytes, EOF=0x3F).

Photos

OmniRevolve plotter hardware
OmniRevolve plotter — 4-color carousel (mechanically scalable to 15 colors)
Sample output #1
Sample output #1
Sample output #2
Sample output #2

Videos

Timelapse demo #1, pen carousel change, and full process (PC + hardware + plotting):

Timelapse demo #1 (printing) Pen carousel change Full process: PC + hardware + plotting

Contact

Questions or collaboration proposals: userofbgtu@gmail.com

© OmniRevolve. MIT license.