Skip to content

feat(perception): consolidate generated camera cloud and TF boundaries - #4734

Draft
TomCC7 wants to merge 11 commits into
cc/feat/cdr-unit-viewersfrom
cc/feat/cdr-unit-perception
Draft

TomCC7 wants to merge 11 commits into
cc/feat/cdr-unit-viewersfrom
cc/feat/cdr-unit-perception

Conversation

@TomCC7

@TomCC7 TomCC7 commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Migrate camera, image, pointcloud, TF and perception boundaries to generated CDR messages. Keep source headers through detection, tracking, localization and camera adapters.

Base: #4733. Shared SDK support is reviewed separately in #4774 below this layer. Native sensors bind the public fallible CDR encoders and shared TF adapters directly; only device data conversion stays local. This removes repeated expect wrappers and fixes RealSense timestamp precision without adding a codec to cdrgen.

The final combined stack passed 158 SDK and 2 adapter tests, including exact epoch/negative/adjacent-nanosecond timestamps and malformed input handling. V4L2 passed 6 tests. Nix source staging from the actual immutable archive passed locked Cargo checks for all seven migrated consumers; archive and CDR git-source hashes are verified.

RealSense requires librealsense2 and depth2depth requires model weights, which are unavailable in this environment. Their full native builds, hardware operation and full Nix builds remain unverified. Broad Python perception tests were not rerun for this codec change. Existing boundary review: #4734 (comment)

CDR dependencies and TF conventions

The stack consumes published dimos-cdrgen 0.1.2 and the immutable CDR library fix. SDK #4774 now uses standard ROS TFMessage, TransformStamped and integer Time, with no per-driver TF codec callbacks or parallel public transform type. The external transforms library, validated by its complete std/no_std/serde and ARM verification gate, owns the frame tree, common-time lookup, interpolation and static history. Its atomic batch patch is pinned to 5ae9563de0c02638c04e393aadfad28444a4398e.

Combined-stack local validation: SDK 121, macros 22, mapper 101, MLS 135, local planner 91, follower 63, V4L2 6 and depth2depth 12 Rust tests; all 24 native/DimSim/port-contract acceptance tests pass without skips. The mapper exchange includes Python CDR tf_static input; the follower exchange covers drive, arrival, a new goal and empty-path stop. Missing native binaries fail the dedicated job. RealSense passes cargo check --all-targets --features docs-only; device linking and hardware execution were not tested. Seven real source-staging layouts pass locked Cargo resolution. Native acceptance for tip cc463c163aed465f7c1d6808165bf640820b0182: workflow run. These are combined-tip results, with the SDK additionally tested standalone at its own layer.

Native Nix inputs use verified source archive f7723ad4d5b9aa5dfe63614b6b537d1ccc2d212e, SHA256 f90af8fa794a34d53ee9481c6d0bdb63138853b30f851d92960fd34224ff62b2. Full Nix builds remain unverified. SDK static edges persist after receipt; LCM/Zenoh do not acquire DDS transient-local durability from CDR. Existing Python mount publishers retain dynamic tf compatibility. Legacy modules remain explicitly pinned to SDK 0.1.0.

Stack #4776 preserves existing history and PR bases. Current main still has conflicts with the original stack; this change does not rebase onto main. No DimOS PR has been merged.

@TomCC7

TomCC7 commented Oct 21, 2026 •

Copy link
Copy Markdown
Member Author

Review report

Updated: 2026-10-21. Direct predecessor: #4733.

  • Head: f59b609c27f5cc62124a438e7890c15e1fc8f38c
  • Named base branch: cc/feat/cdr-unit-viewers at 22e03e1b5c1747bbaf57e388d421766886e5ca35
  • PR-recorded base: 22e03e1b5c1747bbaf57e388d421766886e5ca35; diff merge base: 22e03e1b5c1747bbaf57e388d421766886e5ca35

What changes and why the diff is large

This is a broad camera/perception migration, not a codec-only addition. It introduces domain value helpers, changes Python TF to generated messages, migrates camera/detection/tracking/localization consumers and adds native Rust SDK support used by sensor adapters.
The large scope comes from camera/perception caller migration plus shared native SDK dependencies. The complete role totals below are calculated from this exact diff.

Review map

Suggested entry points: dimos/message_utils/image.py, dimos/message_utils/pointcloud.py, dimos/protocol/tf/tf.py, native/rust/dimos-module/src/cdr.rs, dimos/hardware/sensors/camera/module.py.
All 207 changed files are accounted for below. Grouping is by file role, not a claim that the implementation is minimal.

Complete file map

Implementation (104)

File Change Purpose
dimos/hardware/sensors/camera/gstreamer/gstreamer_camera.py modified Use generated Image, Header in stop, _on_new_sample.
dimos/hardware/sensors/camera/module.py modified Use generated Time, Quaternion, Transform in default_transform, start.
dimos/hardware/sensors/camera/realsense/camera.py modified Declare/use generated Time, ImuInfo, CameraInfo at this boundary.
dimos/hardware/sensors/camera/realsense/rust/src/main.rs modified Update native main message/TF handling; review the wire and field changes with its Python caller.
dimos/hardware/sensors/camera/spec.py modified Declare/use generated Quaternion, CameraInfo, Image at this boundary.
dimos/hardware/sensors/camera/v4l2/module.py modified Declare/use generated CompressedImage at this boundary.
dimos/hardware/sensors/camera/v4l2/rust/src/module.rs modified Update native module message/TF handling; review the wire and field changes with its Python caller.
dimos/hardware/sensors/camera/webcam.py modified Use generated Time, CameraInfo, Image in capture_frame, camera_info.
dimos/hardware/sensors/camera/zed/camera.py modified Use generated Time, Quaternion, Transform in default_base_transform, _publish_camera_info.
dimos/hardware/sensors/camera/zed/compat.py modified ZED camera compatibility layer and SDK detection.
dimos/hardware/sensors/camera/zed/messages.py added Use generated Time, Quaternion, Transform in transform_from_arrays, tracking_to_base.
dimos/memory/module.py modified Use generated TFMessage in start, _resolve_pose.
dimos/memory/tf.py modified Use generated TFMessage, TransformStamped in publish, get.
dimos/message_utils/camera_info.py added Use generated Time, CameraInfo, RegionOfInterest in _dimensions, camera_info_from_intrinsics.
dimos/message_utils/geometry.py added Use generated Point, Pose, PoseStamped in yaw, transform_from_odometry.
dimos/message_utils/image.py modified Use generated Time, CompressedImage, Image in image_from_array, image_to_jpeg.
dimos/message_utils/pointcloud.py modified Use generated TransformStamped, CameraInfo, Image in pointcloud_from_xyz, pointcloud_stamps.
dimos/message_utils/time.py added Use generated Duration, Time, Header in to_nanoseconds, to_seconds.
dimos/models/embedding/base.py modified Use generated Image in __init__, embed.
dimos/models/embedding/clip.py modified Use generated Image in embed, embed_text.
dimos/models/embedding/dino.py modified Use generated Image in embed, embed_text.
dimos/models/embedding/siglip.py modified Use generated Image in embed, embed_text.
dimos/models/embedding/siglip2.py modified Use generated Image in embed, embed_text.
dimos/models/embedding/treid.py modified Use generated Image in embed, embed_text.
dimos/models/segmentation/edge_tam.py modified Use generated Image in _temp_dir_context, segment.
dimos/models/segmentation/yoloe.py modified Use generated Image in predict_image, stop.
dimos/models/vl/base.py modified Use generated Image in vlm_detection_to_detection2d, vlm_point_to_detection2d_point.
dimos/models/vl/qwen.py modified Use generated Image in query, query_batch.
dimos/perception/depth2depth_cloud/module.py modified Declare/use generated CameraInfo, CompressedImage, PointCloud2 at this boundary.
dimos/perception/depth2depth_cloud/rust/src/module.rs modified Update native module message/TF handling; review the wire and field changes with its Python caller.
dimos/perception/depth2depth_cloud/rust/src/undistort.rs modified Update native undistort message/TF handling; review the wire and field changes with its Python caller.
dimos/perception/detection/detectors/base.py modified Declare/use generated Image at this boundary.
dimos/perception/detection/detectors/grounding_dino.py modified Use generated Image in query_detections, query_score_rows.
dimos/perception/detection/detectors/omdet.py modified Use generated Image in query_detections, query_score_rows.
dimos/perception/detection/detectors/owlv2.py modified Use generated Image in __init__, query_detections_batch.
dimos/perception/detection/detectors/person/yolo.py modified Use generated Image in __init__, process_image.
dimos/perception/detection/detectors/yolo.py modified Use generated Image in __init__, process_image.
dimos/perception/detection/detectors/yoloe.py modified Use generated Image in _run.
dimos/perception/detection/module2D.py modified Use generated Quaternion, Transform, TransformStamped in sharp_image_stream, track.
dimos/perception/detection/module3D.py modified Use generated Point, Pose, PoseStamped in _timed_cloud, process_frame.
dimos/perception/detection/person_tracker.py modified Use generated Point, Pose, PoseStamped in _timed_image, _timed_detections.
dimos/perception/detection/project.py modified Use generated Quaternion, Transform, TransformStamped in _world_to_optical, sees.
dimos/perception/detection/reid/module.py modified Use generated Image, Detection2DArray in _timed_image, _timed_detections.
dimos/perception/detection/type/detection2d/base.py modified Declare/use generated Image, Detection2D at this boundary.
dimos/perception/detection/type/detection2d/bbox.py modified Use generated Point, Pose, PoseWithCovariance in draw_on, annotated_image.
dimos/perception/detection/type/detection2d/imageDetections2D.py modified Declare/use generated Image, Detection2DArray at this boundary.
dimos/perception/detection/type/detection2d/person.py modified Use generated Image in from_ultralytics_result.
dimos/perception/detection/type/detection2d/point.py modified Use generated Point, Pose, PoseWithCovariance in cropped_image, to_ros_detection2d.
dimos/perception/detection/type/detection2d/seg.py modified Use generated Image in from_sam2_result, from_ultralytics_result.
dimos/perception/detection/type/detection3d/base.py modified Use generated Time, Quaternion, Transform in from_2d.
dimos/perception/detection/type/detection3d/bbox.py modified Use generated Time, Point, Pose in pose, to_detection3d_msg.
dimos/perception/detection/type/detection3d/imageDetections3D.py modified Use generated Header, Detection3DArray in to_ros_detection3d_array.
dimos/perception/detection/type/detection3d/imageDetections3DPC.py modified Use generated TransformStamped, CameraInfo, Image in from_2d, from_depth.
dimos/perception/detection/type/detection3d/marker.py modified Use generated Detection3D in to_detection3d_msg.
dimos/perception/detection/type/detection3d/pointcloud.py modified Use generated Time, Point, Pose in center, __add__.
dimos/perception/detection/type/detection3d/pointcloud_filters.py modified Use generated TransformStamped, CameraInfo, PointCloud2 in _open3d_cloud, _selected.
dimos/perception/detection/type/imageDetections.py modified Use generated Detection2DArray, Image in ts, __init__.
dimos/perception/experimental/moduleDB.py modified Use generated Point, Pose, PoseStamped in to_repr_dict, __init__.
dimos/perception/experimental/object.py modified Use generated Time, Point, Pose in aggregate_pointclouds, to_detection3d_array.
dimos/perception/experimental/objectDB.py modified Use generated Vector3 in find_nearest, clear.
dimos/perception/experimental/object_scene_registration.py modified Use generated TransformStamped, CameraInfo, Image in _timed_image, _aligned_images.
dimos/perception/experimental/object_scene_registration_spec.py modified Declare/use generated PointCloud2, Detection3DArray at this boundary.
dimos/perception/experimental/object_tracker.py modified Use generated Time, Point, Pose in _timed_image, start.
dimos/perception/experimental/object_tracker_2d.py modified Use generated Point, Pose, PoseWithCovariance in start, _reset_tracking_state.
dimos/perception/experimental/object_tracker_3d.py modified Use generated Time, Point, Pose in _timed_image, start.
dimos/perception/experimental/perceive_loop_skill.py modified Use generated Image in _sharpness_window, _write_debug_image.
dimos/perception/experimental/spatial_perception.py modified Use generated Point, Image, TFMessage in __init__, _receive_frame.
dimos/perception/experimental/temporal_memory/clip_filter.py modified Use generated Image in _get_image_data.
dimos/perception/experimental/temporal_memory/entity_graph_db.py modified Declare/use generated Image at this boundary.
dimos/perception/experimental/temporal_memory/frame_window_accumulator.py modified Use generated Image in add_frame.
dimos/perception/experimental/temporal_memory/temporal_memory.py modified Use generated EntityMarker, EntityMarkers, Point in _publish_entity_markers, start.
dimos/perception/experimental/temporal_memory/temporal_utils/helpers.py modified Adapt is_scene_stale for this unit's message/value flow.
dimos/perception/experimental/temporal_memory/window_analyzer.py modified Declare/use generated Image at this boundary.
dimos/perception/fiducial/blueprints/desk_marker_tf.py modified Use generated Time, Quaternion, Transform in create_desk_camera_info, publish_static_chain.
dimos/perception/fiducial/fixture_verification.py modified Adapt detect_apriltag_frame, verify_board_layout_geometry for this unit's message/value flow.
dimos/perception/fiducial/marker_detect.py modified Use generated TransformStamped, Vector3, CameraInfo in detect_markers_in_image.
dimos/perception/fiducial/marker_detection_stream_module.py modified Use generated CameraInfo, Image, TFMessage in pipeline, _append_image_with_pose.
dimos/perception/fiducial/marker_pose.py modified Use generated Transform, TransformStamped, Vector3 in camera_info_to_cv_matrices, camera_optical_frame_id.
dimos/perception/fiducial/marker_tf_module.py modified Use generated Quaternion, Transform, TransformStamped in _process_detections, _marker_id_from_detection.
dimos/perception/fiducial/marker_transformer.py modified Use generated Quaternion, Transform, TransformStamped in _camera_info_key, _pose_tuple_to_transform.
dimos/perception/localize/association.py modified Use generated PointCloud2, Header in add, _fuse.
dimos/perception/localize/dandetect.py modified Use generated Image in stop, segment.
dimos/perception/localize/demo_blueprints/xarm_feed.py modified Declare/use generated CameraInfo, Image, TFMessage at this boundary.
dimos/perception/localize/localize.py modified Adapt _lift, index_frames for this unit's message/value flow.
dimos/perception/localize/module.py modified Use generated Point, Pose, PoseWithCovariance in as_detection_array, start.
dimos/perception/localize/rig.py modified Use generated PoseStamped, TransformStamped, CameraInfo in _tf_root, _camera_span.
dimos/perception/localize/support_plane.py modified Use generated Image in fit_support_plane.
dimos/perception/localize/tools/tool_localize.py modified Use generated PoseStamped, Image, Header in render, overlay.
dimos/perception/localize/types.py modified Declare/use generated PointCloud2 at this boundary.
dimos/protocol/pubsub/impl/webrtc/providers/video_track.py modified Use generated Image in __init__, set_latest.
dimos/protocol/tf/static_tf_publisher.py modified Construct and publish generated TFMessage values from configured static transforms.
dimos/protocol/tf/tf.py modified Generated transform buffers, integer-nanosecond indexing and stream lookup/publish.
dimos/spec/perception.py modified Declare/use generated CameraInfo, Image at this boundary.
dimos/teleop/hosted/blueprints/cloudflare.py modified Declare/use generated Image at this boundary.
dimos/teleop/hosted/camera_mux.py modified Use generated Image in _composite, _even_dims.
dimos/types/timestamped.py modified Read generated header metadata while retaining timestamped-value behavior.
dimos/visualization/vis_module.py modified Adapt vis_module for this unit's message/value flow.
native/message-source.nix added Prepare pinned message definitions and generated C++/Rust sources for offline Nix builds.
native/rust/dimos-module-macros/src/lib.rs modified Support explicit TF codec attributes in derived native modules.
native/rust/dimos-module/src/cdr.rs added Serde CDR encode/decode with XCDR1 encapsulation, endian selection and trailing-byte rejection.
native/rust/dimos-module/src/lib.rs modified Update native lib message/TF handling; review the wire and field changes with its Python caller.
native/rust/dimos-module/src/module.rs modified Select TF codecs while sharing the same module graph, publishers and subscriptions.
native/rust/dimos-module/src/pointcloud.rs modified Adapt native cloud operations to generated message record layouts.
native/rust/dimos-module/src/tf.rs modified Separate TF wire codecs from the shared transform graph and preserve legacy default entry points.

Build and dependency metadata (48)

File Change Purpose
dimos/experimental/memory/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/experimental/memory/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/experimental/memory/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/hardware/sensors/camera/realsense/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/hardware/sensors/camera/realsense/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/hardware/sensors/camera/realsense/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/hardware/sensors/camera/realsense/rust/flake.nix modified Wire native builds to the generated message source and declared dependencies.
dimos/hardware/sensors/camera/v4l2/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/hardware/sensors/camera/v4l2/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/hardware/sensors/camera/v4l2/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/hardware/sensors/camera/v4l2/rust/flake.nix modified Wire native builds to the generated message source and declared dependencies.
dimos/hardware/sensors/lidar/livox/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/hardware/sensors/lidar/livox/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/hardware/sensors/lidar/livox/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/hardware/sensors/lidar/pointlio/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/hardware/sensors/lidar/pointlio/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/hardware/sensors/lidar/pointlio/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/hardware/sensors/lidar/virtual_mid360/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/hardware/sensors/lidar/virtual_mid360/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/hardware/sensors/lidar/virtual_mid360/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/mapping/dim_slam/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/mapping/dim_slam/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/mapping/dim_slam/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/mapping/ray_tracing/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/mapping/ray_tracing/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/mapping/ray_tracing/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/navigation/global_planner/mls_planner/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/navigation/global_planner/mls_planner/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/navigation/global_planner/mls_planner/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/navigation/local_planner/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/navigation/local_planner/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/navigation/local_planner/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/navigation/trajectory_follower/fancy/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/navigation/trajectory_follower/fancy/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/navigation/trajectory_follower/fancy/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/navigation/trajectory_follower/fancy/rust/flake.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/perception/depth2depth_cloud/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/perception/depth2depth_cloud/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/perception/depth2depth_cloud/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
dimos/perception/depth2depth_cloud/rust/flake.nix modified Wire native builds to the generated message source and declared dependencies.
dimos/robot/unitree/go2/dds/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
dimos/robot/unitree/go2/dds/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
dimos/robot/unitree/go2/dds/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
examples/native-modules/rust/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
examples/native-modules/rust/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.
examples/native-modules/rust/crate-hashes.json modified Refresh fixed crate-source hashes for the native dependency graph.
native/rust/dimos-module/Cargo.lock modified Update the dependency lock snapshot; LFS-managed contents were not hydrated in this report pass.
native/rust/dimos-module/Cargo.toml modified Update Rust SDK/message dependencies for this native consumer.

Tests (51)

File Change Purpose
dimos/hardware/sensors/camera/gstreamer/test_generated_frames.py added Checks actual pipeline copies padded bgr and exact stamp.
dimos/hardware/sensors/camera/realsense/test_camera.py modified Checks config dict is the camera config.
dimos/hardware/sensors/camera/test_module.py added Checks metadata preserves calibration and does not mutate mount template.
dimos/hardware/sensors/camera/test_webcam.py modified Checks webcam without intrinsics reports a nominal pinhole.
dimos/hardware/sensors/camera/zed/test_messages.py added Checks frames roundtrip cdr preserves exact stamp and extrinsics.
dimos/memory/test_module.py modified Checks blueprint ports.
dimos/message_utils/test_camera_info.py added Checks real go2 calibration survives cdr with exact header.
dimos/message_utils/test_geometry.py added Checks odometry transform preserves frames stamp and pose.
dimos/message_utils/test_image_compression.py added Checks jpeg roundtrip preserves meta and pixels.
dimos/message_utils/test_image_views.py added Checks padded image view retains owner and is readonly.
dimos/message_utils/test_pointcloud.py added Checks field counts padding and endianness.
dimos/message_utils/test_pointcloud_colors.py added Checks packed colors preserve bits and row padding.
dimos/message_utils/test_time.py added Checks integer time round trip preserves every nanosecond.
dimos/models/embedding/test_generated_images.py added Checks generated embeddings keep zero source time and convert rgb.
dimos/models/segmentation/test_generated_edge_tam_images.py added Checks generated tracker frame and initial jpeg.
dimos/models/segmentation/test_yoloe.py modified Checks box prompt mask preserves owlv2 metadata and selects best overlap.
dimos/models/vl/test_base.py modified Checks query detections mocked.
dimos/perception/depth2depth_cloud/test_depth2depth_cloud_config.py modified Checks every field the rust config requires is sent.
dimos/perception/detection/conftest.py modified Regression coverage for conftest.
dimos/perception/detection/detectors/test_generated_images.py added Checks model boundary receives rgb and exports exact source header.
dimos/perception/detection/reid/test_generated_module.py added Checks exact header alignment rejects adjacent nanosecond and empty arrays.
dimos/perception/detection/type/detection2d/test_bbox.py modified Checks detection2d.
dimos/perception/detection/type/detection2d/test_generated_bbox.py added Checks generated bbox image and wire round trip.
dimos/perception/detection/type/detection2d/test_person.py modified Checks person ros confidence.
dimos/perception/detection/type/detection3d/test_generated_filters.py added Checks filters preserve custom point records.
dimos/perception/detection/type/detection3d/test_generated_projection.py added Checks depth projection preserves header and transforms.
dimos/perception/detection/type/detection3d/test_imageDetections3D.py modified Checks to ros detection3d array serializes plain bbox results.
dimos/perception/detection/type/detection3d/test_marker.py modified Checks marker detection3d msg preserves marker identity on wire.
dimos/perception/detection/type/detection3d/test_pointcloud.py modified Checks detection3dpc.
dimos/perception/detection/type/test_detection3d.py modified Checks recording keeps source and recorded time domains.
dimos/perception/experimental/temporal_memory/test_temporal_memory_module.py modified Checks scene staleness compares pixels not padding.
dimos/perception/experimental/test_generated_tracker.py added Checks tracker publishes generated detection and clears failed track.
dimos/perception/experimental/test_object_generated.py added Checks detection cdr preserves source pose header and current center.
dimos/perception/experimental/test_object_scene_registration_temporal.py modified Checks transform is captured before slow detector.
dimos/perception/experimental/test_perceive_loop_skill.py modified Checks construction and skill discovery do not wait for the model.
dimos/perception/experimental/test_spatial_memory.py modified Checks generated image and tf reach spatial backend with correct colors and pose.
dimos/perception/fiducial/blueprints/test_desk_marker_tf.py modified Checks desk marker tf blueprint declares static tf module.
dimos/perception/fiducial/test_fixture_verification.py modified Checks fixture layout matches dimos apriltag generator for a4 50mm 3x4.
dimos/perception/fiducial/test_generated_marker_detect.py added Checks generated image detects real aruco and composes pose.
dimos/perception/fiducial/test_helpers.py modified Regression coverage for helpers.
dimos/perception/fiducial/test_marker_detection_stream_module.py modified Checks marker detection stream module exposes single stream input.
dimos/perception/fiducial/test_marker_pose.py modified Checks camera optical frame id resolution.
dimos/perception/fiducial/test_marker_tf_integration.py modified Checks marker tf consumes detection array over lcm.
dimos/perception/fiducial/test_marker_tf_module.py modified Checks marker tf module publishes world markers chain.
dimos/perception/fiducial/test_marker_transformer.py modified Checks detect markers in image builds rich marker detection.
dimos/perception/localize/test_dandetect.py modified Checks shifted detector scales gate localization.
dimos/perception/localize/test_rig.py added Checks camera pose composes each cameras mount.
dimos/protocol/pubsub/impl/webrtc/providers/test_video_track.py modified Checks 16bit frames are converted to rgb.
dimos/protocol/tf/test_static_tf_publisher.py added Checks frame tree skips root and composes rotated mounts.
dimos/protocol/tf/test_tf.py modified Checks tf ros example.
dimos/teleop/hosted/test_camera_mux.py modified Checks even dims crops odd width and height.

Documentation and replay inputs (4)

File Change Purpose
data/.lfs/unitree_go2_detection_cdr.tar.gz added Update the unitree go2 detection cdr.tar guide or replay input for the migrated boundaries.
docs/capabilities/perception/index.md modified Update the index guide or replay input for the migrated boundaries.
docs/usage/sensor_streams/index.md modified Update the index guide or replay input for the migrated boundaries.
docs/usage/transforms.md modified Update the transforms guide or replay input for the migrated boundaries.

Review focus and scope reductions

  • Helper duplication removed. This layer extends the predecessor's dimos.message_utils.image and .pointcloud; it no longer adds a second copy under dimos.msgs. Camera-info, geometry and time utilities and their tests are colocated in the same namespace. Legacy message classes are unchanged by this cleanup.
  • Read shared helpers, shared native SDK changes and camera/perception caller migration as separate groups. The cleanup removes duplicate code, not the producer/consumer migration required for the feature.
  • Review image stride/endian/depth handling, organized cloud extra fields, source Header precision and Python/native TF composition.
  • Native SDK and Cargo/Nix/hash updates still require native build and cross-language evidence. Python passes alone do not validate those paths.

Validation

Fresh checks on f59b609c27f5cc62124a438e7890c15e1fc8f38c: 296 helper/viewer/TF/camera-mux/browser-codec tests passed, nine were deselected by existing markers. All-files repository hooks passed with cargo/native lint excluded. Full mypy reports 142 errors in 48 files; a before-cleanup source snapshot produces the exact same diagnostics after normalizing line numbers. This cleanup adds no mypy errors, but this layer is not globally type-clean. The prior 155 Rust SDK pass claim was not rerun.

At cleaned stack tip 71c08893f7a770990f8c3bb7d8c95b2da6f624b5, a clean standard wheel build, six installed helper imports, region CDR roundtrip, legacy Image import and the installed Rerun/MCAP reviewer example passed from outside the checkout. This tip check does not establish standalone wheel validation of every intermediate PR. An old local build directory initially retained deleted modules; it was preserved outside the checkout before the clean rebuild, whose contents were checked for their absence.

Reproduction commands, not executed here unless stated above

Run from this PR's own checkout root after installing its documented test dependencies. These are selected review entry points, not a claim of full-stack coverage.

uv run pytest dimos/message_utils dimos/visualization/rerun/test_cdr.py dimos/visualization/rerun/test_cdr_image_values.py dimos/visualization/rerun/test_cdr_entities.py dimos/visualization/rerun/test_cdr_e2e.py dimos/protocol/tf/test_tf.py dimos/protocol/tf/test_static_tf_publisher.py dimos/teleop/hosted/test_camera_mux.py dimos/web/test_cdr_codec.py

Remaining work

Restacked onto the current viewer head. Native sensor builds, cross-language SDK checks, Nix and hardware were not rerun. The 142 pre-existing mypy errors and remaining business graphs are unresolved; helper consolidation is not completion of the migration.

@TomCC7
TomCC7 force-pushed the cc/feat/cdr-unit-perception branch from e4ad8ef to f59b609 Compare October 22, 2026 02:34
cdr::encode(value).expect("serialize a valid camera value")
}

fn encode_cdr_tf(values: &[Transform]) -> std::io::Result<Vec<u8>> {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

super weird we need manual encode/decode definition?

@TomCC7
TomCC7 removed this pull request from stack #4743 October 22, 2026 18:51
@TomCC7
TomCC7 added this pull request to stack #4776 October 22, 2026 18:52

This branch has not been deployed

No deployments
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