feat: --record flag, mcap recording by default - #3706
Closed
spomichter wants to merge 3 commits into
Closed
Conversation
…prints
- GlobalConfig.record / record_format (mcap|sqlite); Recorder.start() is a no-op
unless --record (replay still disables it). Explicit *-record blueprints set
record=True.
- McapStore gains write mode: one channel per stream, dimos-obs envelope
(pose + tags header, codec payload), codec id in the schema so the file
reads back without robot-specific codec tables.
- One RECORDING_DIR per process; RecorderConfig.db_path defaults to
recordings/<stamp>/mem2.{mcap|db}. Per-blueprint stamp helpers removed.
- Go2Memory moves into unitree_go2_basic; DroneRecorder in drone_basic;
PointlioRecorder in go2_zenoh_basic. unitree-go2-memory alias dropped.
- ReplayConnection opens by suffix (open_dataset), so mcap recordings replay.
- mcap moves to core dependencies.
❌ 2 Tests Failed:
View the top 2 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
… base blueprints - GlobalConfig.recording_dir, set by `dimos run` to RECORDINGS_DIR/<run-id> (same id as the log dir); --recording-dir overrides. - RecorderConfig.db_path defaults to None -> <recording_dir>/memory.<format>. - Go2Memory -> OdomRecorder (dimos.memory.module), used by unitree_go2_basic and unitree_g1_primitive_no_nav (lidar remapped from pointcloud).
Contributor
Author
|
Superseded by the transport-tap approach (record every published topic, no per-robot recorder modules); mcap writer moves to a follow-up. New PR: #3710 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
dimos --record run <blueprint>records every Recorder in the blueprint torecordings/<run-id>/memory.mcap, e.g.recordings/20260826-165100-unitree-go2/memory.mcap(same run id aslogs/).--record-format sqlitewritesmemory.db. Without--record, Recorders are inert. Recording infra is one system (dimos.memory); this PR makes the path and format one convention too.GlobalConfig.record/record_format/recording_dir.Recorder.start()returns unless--record(replay still disables).dimos runsetsrecording_dirtoRECORDINGS_DIR/<run-id>;--recording-diroverrides. Blueprints whose purpose is recording (*-record,learning-collect-*,pcap_to_db,spot-record,xarm6world belief) setrecord=Truethemselves.McapStorewrite mode. One channel per stream,message_encoding="dimos-obs": 4-byte header length + JSON{pose, tags}+ codec payload. Schema name = payload type path, schema data = codec id, so a recorded file reads back with no robot codec table. Existing read path (Go2 DDS captures) unchanged. Blobs/vectors/embeddings/on_existing=APPENDare sqlite-only.RecorderConfig.db_pathdefaults to<recording_dir>/memory.<format>. Per-blueprint stamp helpers in go2 mid360/nav-3d/g1 removed; pcaps land in the same dir.OdomRecorder(color_image/lidar/odom+ tf, posed at latest odom) replacesGo2Memory; wired intounitree_go2_basicandunitree_g1_primitive_no_nav.DroneRecorderindrone_basic,PointlioRecorder(remapped) ingo2_zenoh_basic.unitree-go2-memoryis gone; it'sunitree-go2 --record.ReplayConnectionopens by suffix viaopen_dataset, so--replay-db path/to/memory.mcapworks.mcapmoves to core dependencies (wasunitree-ddsextra).Per-robot recorders are interim: a Recorder records its declared
Inports only. A record-everything module is specced separately (agents/engineering/record-flag/record-all-spec.md).Not in this PR:
dimos map pose-fillmcap support.Test plan
dimos/memory/store/test_mcap.py: write -> read roundtrip (Image/PoseStamped/int, pose + tags), write-only guard--record/--record-formatpytest dimos/memory dimos/robot dimos/core/coordination dimos/cli dimos/imitation/collection dimos/hardware/sensors/lidar: 954 passeddimos --record --simulation run unitree-go2/unitree-g1-sim, thendimos mem summary recordings/<run-id>/memory.mcapdimos --replay --replay-db recordings/<run-id>/memory.mcap run unitree-go2