Record EdgeFirst Perception topics to MCAP files for analysis in Foxglove Studio
EdgeFirst Recorder subscribes to Zenoh topics published by the EdgeFirst Perception stack and writes them to MCAP files with embedded ROS 2 message schemas. The resulting files can be opened directly in Foxglove Studio for visualization, debugging, and data analysis.
- Selective or Automatic Recording - Specify individual topics or discover all active topics
- Embedded Schemas - ROS 2 message definitions are bundled at compile time for self-describing MCAP files
- MCAP Compression - Optional LZ4 or Zstd compression for smaller files
- Radar Cube Rate Limiting - Configurable FPS cap for high-bandwidth radar cube data
- Storage Monitoring - Automatic shutdown when disk space runs low
- Duration Limits - Optional time-bounded recording sessions
- Flexible Zenoh Configuration - Peer/client modes, custom endpoints, multicast control
The recorder includes schemas for the following message types:
| Package | Messages |
|---|---|
edgefirst_msgs |
Detect, DmaBuffer, LocalTime, Mask, Model, ModelInfo, RadarCube, RadarInfo |
sensor_msgs |
CameraInfo, CompressedImage, Image, Imu, NavSatFix, NavSatStatus, PointCloud2 |
geometry_msgs |
TransformStamped |
foxglove_msgs |
CompressedImage, CompressedVideo, ImageAnnotations |
visualization_msgs |
Marker |
- Rust toolchain 1.75+ (pinned via
rust-versioninCargo.toml) - Running EdgeFirst Perception stack (or any Zenoh publisher)
From Source:
git clone https://github.com/EdgeFirstAI/recorder.git
cd recorder
cargo build --release
sudo cp target/release/edgefirst-recorder /usr/local/bin/Cross-Compile for ARM64:
cargo install cross
cross build --target aarch64-unknown-linux-gnu --releaseRecord specific topics:
edgefirst-recorder /camera/image /radar/targets /detectDiscover and record all active topics:
edgefirst-recorder --all-topicsRecord for 30 seconds with Zstd compression:
edgefirst-recorder --all-topics --duration 30 --compression zstdLimit radar cube recording to 5 FPS:
edgefirst-recorder --all-topics --cube-fps 5Save to a specific directory:
STORAGE=/data/recordings edgefirst-recorder --all-topicsOpen the generated .mcap file in Foxglove Studio:
- Launch Foxglove Studio
- Open the MCAP file from the file menu
- Add panels for the recorded topics (image, point cloud, plot, etc.)
| Option | Env Var | Default | Description |
|---|---|---|---|
<TOPICS> |
TOPICS |
Space-delimited topics to record | |
-a, --all-topics |
Discover and record all active topics | ||
-d, --duration |
DURATION |
Recording duration in seconds | |
-t, --timeout |
5 |
Topic discovery timeout in seconds | |
-z, --compression |
COMPRESSION |
none |
Compression: none, lz4, zstd |
--cube-fps |
CUBE_FPS |
Radar cube FPS limit (MAX for native rate) |
|
--mode |
MODE |
peer |
Zenoh mode: peer, client, router |
--connect |
CONNECT |
Zenoh endpoints to connect to | |
--listen |
LISTEN |
Zenoh endpoints to listen on | |
--no-multicast-scouting |
NO_MULTICAST_SCOUTING |
Disable Zenoh multicast discovery |
Topic names are automatically normalized to the rt/ prefix convention used by the Zenoh-ROS 2 bridge. For example, /camera/image becomes rt/camera/image.
Recordings are saved as <hostname>_<timestamp>.mcap in the current directory, or in the directory specified by the STORAGE environment variable. The filename format is:
maivin_2025_06_15_14_30_00.mcap
EdgeFirst Recorder is part of the EdgeFirst Perception Middleware, capturing sensor and inference data for offline analysis.
- EdgeFirst Perception - Multi-sensor fusion middleware
- EdgeFirst Studio - MLOps platform for edge AI
- EdgeFirst Modules - Maivin and Raivin hardware platforms
- ARCHITECTURE.md - Software architecture and design
- TESTING.md - Testing and verification workflow
- CHANGELOG.md - Version history
- CONTRIBUTING.md - Contribution guidelines
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Copyright (c) 2025 Au-Zone Technologies. All Rights Reserved.