Feat/rerun bridge tf reconstruction - #3371
Conversation
Greptile SummaryThe PR replaces flat TF visualization with stateful reconstruction of nested Rerun entity paths and adds visible frame axes, re-anchoring, throttling, and cycle tests.
Confidence Score: 4/5The late-parent path handling should be fixed before merging because previously logged descendants can remain under obsolete TF paths when their next update is delayed or suppressed. Topology updates and visualization updates are decoupled: recording a new ancestor changes the in-memory chain but does not clear or relocate affected committed descendants unless each descendant is subsequently logged. Files Needing Attention: dimos/visualization/rerun/bridge.py, dimos/visualization/rerun/test_tf_bridge.py Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
M[TFMessage received] --> P[Update child-to-parent topology]
P --> T{Topic throttled?}
T -- Yes --> D[Skip Rerun logging]
T -- No --> C[Build ancestry chain]
C --> X{Committed path changed?}
X -- Yes --> R[Clear stale path recursively]
X -- No --> L[Use committed path]
R --> L2[Commit reconstructed path]
L --> G[Log axes and transform]
L2 --> G
Reviews (1): Last reviewed commit: "fix: simplified changes to remove AI blo..." | Re-trigger Greptile |
| if isinstance(msg, TFMessage): | ||
| for transform in msg.transforms: | ||
| self._tf_parents[transform.child_frame_id] = transform.frame_id |
There was a problem hiding this comment.
Late ancestry leaves stale paths
When an ancestor edge arrives after a child was logged, these lines update only _tf_parents; the child's committed path is not cleared or rebuilt until an unthrottled child transform arrives, causing the recording to keep displaying that frame under its obsolete root indefinitely when the child is not retransmitted.
Contribution path
Problem
Within the rerun-bridge standalone workflow, the TF trees that are generated are hard-coded based on the unitree blueprints. They don't leverage the TF tree service and lead to broken TF trees that aren't generated whenever the rerun-bridge is ran by itself
Solution
-> Within the TODO / issue, it stated that the TF service has a function to rebuild the TF trees. However, it was missing functionality to find the parent through directed ancestry, The new methods in rerun-bridge are there to perform that missing functionality
How to Test
GUI Test:
dimos rerun-bridge
NOTE: the GUI test will only showcase the TF trees if another process (a script, for example) is publishing it to the rerun service.
Test Suite:
.venv/bin/pytest dimos/visualization/rerun/test_tf_bridge.py -q
AI assistance
Claude Code with Opus 5, Wrote all code while being supervised on the changes it made
Checklist