PX4 ULog#
Nominal’s first-party extractor reads PX4 ULog flight logs (.ulg and .ulog). Each topic field becomes a channel, such as vehicle_local_position.vx. A topic logged by more than one instance keeps the instance in its name, such as sensor_accel_0.x.
Before you start#
Enable the extractor in your workspace:
In the Nominal app’s sidebar, open Data > File extractors.
Click NEW EXTRACTOR > Native extractor.
Choose PX4 ULog and click ENABLE EXTRACTOR.
Upload a file#
In the sidebar, click + (New), then Upload data.
On the File extraction card, click SELECT and choose PX4 ULog.
Click SELECT A DESTINATION and choose Standalone dataset. Pick a dataset, or click NEW DATASET, enter a name and click CREATE DATASET.
Next to INPUT_FILE, click Select file and choose the
.ulgfile.Click CONFIRM & INGEST.
Select the extractor’s row on the File extractors page to see its RID.
from nominal.core import NominalClient
client = NominalClient.from_profile("default")
extractor = client.get_containerized_extractor("<EXTRACTOR_RID>")
dataset = client.create_dataset("Flight 42")
job = dataset.add_containerized(extractor, sources={"INPUT_FILE": "flight.ulg"})
for file in job.as_files_ingested(): # waits for ingestion
print(file.name, file.ingest_status.name)
Options#
Setting |
Nominal app |
Python |
Extractor variable |
|---|---|---|---|
Convert only these topics, such as |
Topic filter |
|
|
A tag on every point |
Tags |
|
— |
Logs without a GPS fix#
The extractor moves timestamps from time since boot to UTC using the log’s GPS fix, from vehicle_gps_position or sensor_gps. A log with no GPS fix keeps boot-relative times. From Python, give the time the log started, continuing the Python example above:
from datetime import datetime, timezone
from nominal import ts
started = datetime(2026, 1, 1, 12, 0, tzinfo=timezone.utc)
job = dataset.add_containerized(
extractor,
sources={"INPUT_FILE": "bench.ulg"},
timestamp_column="timestamps",
timestamp_type=ts.Relative("nanoseconds", start=started),
)
Convert a log yourself#
To convert a log to CSV files with the Python client and upload those instead, see PX4 ULog in the Python client’s guides.