feat(perception): canonicalize temporal motion

This commit is contained in:
DCCONSTRUCTIONS
2026-08-05 17:24:48 +03:00
parent 438e0ca263
commit 998775c3af
12 changed files with 2244 additions and 3 deletions
@@ -139,7 +139,7 @@
},
"wheel": {
"name": "nodedc_mission_core-0.1.0-py3-none-any.whl",
"sha256": "ecbbfeee7ea62a7f5f5368efccf5d254abb17b4801a29538e3bc7aa3c8c3a40a"
"sha256": "19d8caf9a522747c461fb3ca30aafe54169959d8bd8e671fa6fc8c0ac107875d"
}
},
"rollback": {
+15 -1
View File
@@ -20,7 +20,7 @@
{
"module": "k1link.compute.temporal_occupied_layer",
"role": "bounded hit-only occupied and unknown state",
"admission": "adapt-to-product-contract"
"admission": "reference-only-extracted-to-product"
},
{
"module": "k1link.compute.pipeline_telemetry",
@@ -41,6 +41,16 @@
"module": "k1link.perception.geometry",
"role": "digest-bound GeometryAssociationProvider and exact point ownership",
"admission": "product-owned"
},
{
"module": "k1link.perception.temporal",
"role": "product-owned bounded spatial retention with ephemeral identity and explicit expiry",
"admission": "product-owned"
},
{
"module": "k1link.perception.motion",
"role": "product-owned class-independent bounded-history motion estimator",
"admission": "product-owned"
}
],
"historical_wrappers": [
@@ -60,6 +70,10 @@
"module": "k1link.compute.e35_degradation_recovery",
"reason": "immutable degradation qualification wrapper"
},
{
"module": "k1link.compute.e51_motion_semantic_qualification",
"reason": "immutable diagnostic motion qualification wrapper"
},
{
"module": "k1link.compute.e46j_raw_fisheye_realtime",
"reason": "immutable detector-capacity experiment wrapper"
@@ -0,0 +1,59 @@
{
"schema_version": "missioncore.temporal-motion-profile/v1",
"profile_id": "m4-bounded-temporal-motion/v1",
"temporal_provider_id": "bounded-spatial-temporal-layer/v1",
"motion_provider_id": "class-independent-motion-estimator/v1",
"source": {
"source_id": "RAVNOVES00",
"session_id": "20260720T065719Z_viewer_live",
"geometry_result_id": "m4-geometry-replay-8daf3109e3cf30b960b4b376032ff3b5ec58ca42a1e5899b841cf29fbcf14ad8",
"geometry_frames_sha256": "b4db5d0ebaba4d6268a1006707dc313c229f3dbdfd73b1d863cad5d853be8ac4"
},
"temporal": {
"coordinate_frame": "map",
"voxel_size_m": 0.45,
"occupied_ttl_seconds": 0.75,
"maximum_active_components": 256,
"maximum_cells_per_component": 4096,
"maximum_history_samples": 8,
"association_maximum_gap_seconds": 0.35,
"association_maximum_centroid_distance_m": 0.9,
"association_minimum_voxel_overlap_fraction": 0.05,
"association_neighbor_radius_cells": 1,
"jump_maximum_adjacent_gap_seconds": 0.25,
"jump_minimum_matched_components": 4,
"jump_minimum_median_displacement_m": 1.5,
"jump_minimum_p25_displacement_m": 0.9
},
"motion": {
"minimum_observations": 3,
"minimum_span_seconds": 0.2,
"moving_minimum_displacement_m": 0.25,
"moving_minimum_speed_mps": 0.4,
"stationary_maximum_displacement_m": 0.1,
"stationary_maximum_speed_mps": 0.2,
"maximum_speed_mps": 20.0,
"full_confidence_observations": 4,
"full_confidence_span_seconds": 0.4,
"minimum_confidence": 0.75
},
"policy": {
"component_identity_scope": "ephemeral",
"association_uses_detector_id": false,
"association_uses_semantic_class": false,
"motion_uses_semantic_class": false,
"camera_only_creates_occupied_component": false,
"absence_of_points_means_free": false,
"held_state": "unknown",
"expired_cells_published": false,
"long_term_identity_available": false,
"history_is_bounded": true
},
"authority": {
"ground_truth": false,
"physical_live": false,
"commands_enabled": false,
"actuation_allowed": false,
"navigation_or_safety_accepted": false
}
}