Skip to content

refactor: migrate odometry history and Path rendering to CDR - #4672

Closed
TomCC7 wants to merge 2 commits into
cc/feat/cdr-pointcloud-costmapsfrom
cc/feat/cdr-odometry-history
Closed

TomCC7 wants to merge 2 commits into
cc/feat/cdr-pointcloud-costmapsfrom
cc/feat/cdr-odometry-history

Conversation

@TomCC7

@TomCC7 TomCC7 commented Oct 20, 2026

Copy link
Copy Markdown
Member

OdometryHist now consumes generated Odometry and publishes generated Path values. It reads the standard nested pose, retains each captured PoseStamped Header, and compares source nanoseconds for the existing publication interval/replay-reset logic. Generated snapshots own their pose data. Rerun renders generated Path geometry and its full source fields outside the value class; the existing true-height override also continues to accept legacy Path callers.

Parent: #4671. Part of the message encoding refactor.

Area Change
OdometryHist Generated input/output, nested pose access, integer source-time comparisons and independent Path snapshots; existing handler/config names retained
Existing Rerun CDR adapter Path line strips with existing color/lift/radius defaults, parent frame and full field text
One adjacent test file Real memory-LCM RPC/ports, interval queue, stationary updates, zero/epoch time, replay backwards, max_poses, snapshot ownership, frame override and rendering
Workflow Installed-production provenance and the focused functional/typing checks

Check the generated value/renderer from the proposal's installed main package:

import numpy as np
from dimos.messages.geometry_msgs.msg import PoseStamped
from dimos.messages.nav_msgs.msg import Path
from dimos.messages.std_msgs.msg import Header
from dimos.msgs.geometry import pose_from_matrix
from dimos.msgs.time import time_from_nanoseconds
from dimos.visualization.rerun.cdr import generated_archetypes

header = Header(frame_id="map", stamp=time_from_nanoseconds(1700000000123456789))
matrix = np.eye(4)
matrix[:3, 3] = [1, 2, 3]
path = Path(header=header, poses=[PoseStamped(header=header, pose=pose_from_matrix(matrix))])
entries = generated_archetypes(path, "world/path")
assert entries[0][1].strips.as_arrow_array().to_pylist() == [[[1.0, 2.0, 3.5]]]
assert entries[1][1].parent_frame.as_arrow_array().to_pylist() == ["tf#/map"]

From a prepared checkout, python -m pytest --noconftest -o addopts='' -q dimos/mapping/test_generated_odometry_hist.py dimos/visualization/rerun/test_cdr.py runs 21 checks, including actual CDR input dispatch and output. It needs normal local process IPC, with RPC/CDR explicitly using memq://; no external network or assets.

Validation: 21 source and 21 installed-main-wheel checks pass, with actual production modules asserted to come from site-packages. Two production files pass strict typing; applicable hooks, normal main wheel and default 198-package pip check pass. The exact renderer block also ran in the default-dependency installed environment. Wheel SHA256 22d5b3723e9c752c2543eb8a5a960b9d8064b45dd5871a12679c4071898db8cc.

The restricted local executor blocked socketpair.send with EPERM and could not wake asyncio; the same bounded checks passed when local IPC was permitted. No core scheduler/API workaround was added. No hardware, simulator, benchmark investigation, human visual acceptance or CI polling. Remaining odometry producers/default encoding and legacy retirement stay in subsequent cutover work.

@TomCC7 TomCC7 closed this Oct 20, 2026
@TomCC7
TomCC7 deleted the cc/feat/cdr-odometry-history branch October 20, 2026 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant