uf-ulog
uf_ulog is an allocator-free ULog serializer designed for embedded targets.
Features
no_std, allocator-free core.- MCU and transport agnostic (you provide writer/IO).
- Supports both derive-based and manual trait implementations.
- Split into two crates:
uf_ulog(core serializer)uf_ulog_macro(derive macros)
Supported messages (current scope)
The initial implementation focuses on:
- Data messages (topic payloads) (
Dtype) - String log messages (plain and tagged) (
LandCa types) - Parameter messages, (
Ptype) - Required format messages needed to describe logged data/strings (
B,F, )
Cargo feature flags
derive(default): enables#[derive(ULogData)]and#[derive(ULogRegistry)].async: enables async exporter support viaembedded-io-async.
Installation
Add uf-ulog to your Cargo.toml:
[]
= "*" # replace * by the latest version of the crate.
Or use the command line:
Examples
Based on examples/minimal.rs:
use Infallible;
use LogLevel;
use ULogCoreExporter;
use ULogData;
use ULogProducer;
use ULogRegistry;
;
Run it:
Write ULog to file and parse with pyulog
For an end-to-end demo (write a .ulg file, then parse it with Python), use:
This runs the example in ../examples/simple-file and then executes
../examples/simple-file/read_ulg.py via uv.
References
- PX4 ULog File Format Specification - official binary format reference.
- PX4/pyulog - canonical Python tooling for reading and analyzing
.ulgfiles. - annoybot/yule_log - Rust ULog parser implementation.