A Go application that synchronously records multi-modal sensor data:
- Video from RTSP streams (via ffmpeg)
- Audio from RTSP streams (via ffmpeg)
- Lidar point clouds from Zenoh topics
All streams are timestamped and organized into session directories for easy alignment and analysis.
- Go 1.25 or later
- ffmpeg installed and available in PATH
- zenoh-c library (automatically downloaded via
make download-zenohc)
Configure via environment variables:
VIDEO_RTSP_URL- Video stream URL (default:rtsp://localhost:8554/live)AUDIO_RTSP_URL- Audio stream URL (default:rtsp://localhost:8554/audio)LIDAR_ZENOH_TOPIC- Zenoh topic for lidar data (default:/scan)RECORDINGS_DIR- Base directory for recordings (default:recordings)
Download the zenoh-c library and build the binary:
make download-zenohc
make buildThe binary will be created at bin/om1-telemetry.
./bin/om1-telemetryOr with custom settings:
VIDEO_RTSP_URL="rtsp://camera.local/stream" \
AUDIO_RTSP_URL="rtsp://camera.local/audio" \
LIDAR_ZENOH_TOPIC="/lidar/scan" \
RECORDINGS_DIR="/path/to/recordings" \
./bin/om1-telemetryEach recording session creates a timestamped directory structure:
recordings/
└── 2026-05-15/
└── 2026-05-15_14-30-00/
├── meta.json # Session metadata
├── video.mp4 # Video recording
├── audio.wav # Audio recording
├── lidar_scans.bin # Raw lidar point cloud data
└── lidar_timestamps.csv # Timestamps: unix_ns,seq,byte_offset
Run the test suite:
make testRun tests for a specific package:
make test
# Or with the Go test command directly:
go test ./internal/lidar/... -v- Linting:
make lint(requires golangci-lint) - Tidy dependencies:
make tidy