Skip to content

Sensory Fusion

Sensory Fusion -- mvp.sensory_fusion

Cluster: Physical AI | Type: component | MCP Tools: 30

Overview

Simulated sensor inputs

sensory_fusion fuses data supplied by callers. It does not include real camera, lidar, IMU, force/torque, or ROS sensor drivers.

Not production robotics perception

Treat this component as a simulation/pre-adapted sensor fusion utility, not as a real hardware perception stack. It has useful validation, confidence weighting, EKF-style state estimation, filtering, outlier checks, and MCP persistence, but it does not handle live sensor streams, timestamp alignment, calibration, frame transforms, camera/LiDAR drivers, ROS bridges, or hardware safety. Use it for structured workflow reliability and reviewed planning artifacts; real robotics deployments need a separate validated perception and hardware integration layer.

Multi-modal sensor fusion block that combines caller-supplied structured readings (text, numeric, image summaries, point-cloud summaries, audio summaries) into a single confidence-weighted fused value. Implements attention-based source weighting, Extended Kalman Filter state estimation, signal filtering (low-pass/high-pass/bandpass/Kalman), outlier rejection, and active perception queries for simulated or pre-adapted perception workflows.

source_capabilities provides a read-only capability matrix for the 15 Tier-1 functional ops and 29 MCP functional ops, including optional dependency degradation, redacted agentic backend status, simulation-only maturity, and the production reviewer-signature gate. Outputs use only verified, qualified-draft, or blocked-escalated completion states with top-level warning/evidence fields.

When to use:

  • Fusing pre-adapted camera, LiDAR, and force-torque summaries into a unified simulated world-state estimate
  • Running an EKF over a noisy 8-dimensional state vector (position, velocity, contact force, confidence)
  • Generating active perception queries when sensor confidence falls below a threshold

Example:

from mvp.sensory_fusion import SensoryFusionBlock, SensoryFusionInput

block = SensoryFusionBlock(name="sensory_fusion")
result = block.infer(SensoryFusionInput(
    op="fuse",
    sensor_readings=[
        {"source": "camera", "value": 0.8, "confidence": 0.9, "timestamp": 1.0},
        {"source": "lidar", "value": 0.75, "confidence": 0.7, "timestamp": 1.0},
    ],
))
# result.value.fused_value -> dict; result.value.confidence -> float

Works well with: embodiment, tactile_fusion, motor_control, integration

Public API

SensoryFusionInput(BaseModel)

Input to SensoryFusionBlock.

Field Type Default
op Literal['fuse', 'attend', 'query_sensor', 'assess_confidence', 'active_perception', 'add_sensor_source', 'remove_sensor_source', 'list_sources', 'get_noise_model', 'filter_signal', 'get_info', 'reset', 'fuse_ekf', 'reject_outliers', 'configure_ekf', 'source_capabilities'] 'fuse'
sensor_readings list[dict] Field(default_factory=list)
source_id str ''
source_type str ''
source_weight float 1.0
goal str ''
prior_observations list[dict] Field(default_factory=list)
signal list[float] Field(default_factory=list)
filter_type str 'lowpass'
cutoff_freq float 0.1
sample_rate float 1.0
confidence_threshold float 0.5
metadata dict Field(default_factory=dict)
state_vector list[float] Field(default_factory=list)
process_noise float 0.01
measurement_noise float 0.1
observation_model list[list[float]] Field(default_factory=list)
observation_vector list[float] Field(default_factory=list)
outlier_sigma float 3.0
confidence_floor float 0.2
run_mode str 'beta'
reviewer_signature str ''
request_id str ''
task_id str ''
run_id str ''

SensoryFusionOutput(BaseModel)

Output from SensoryFusionBlock.

Field Type Default
op str required
completion_state CompletionState 'qualified-draft'
warning_card dict Field(default_factory=dict)
evidence dict Field(default_factory=dict)
request_id str ''
task_id str ''
run_id str ''
maturity str 'simulation_only'
prohibited_use list[str] Field(default_factory=lambda: ['production_robotics', 'live_safety_critical'])
permitted_use list[str] Field(default_factory=lambda: ['simulation', 'pre_adapted_readings'])
fused_value dict Field(default_factory=dict)
confidence float 0.0
requires_review bool False
attention_weights dict Field(default_factory=dict)
active_queries list[str] Field(default_factory=list)
sources list[dict] Field(default_factory=list)
filtered_signal list[float] Field(default_factory=list)
noise_estimate float 0.0
metadata dict Field(default_factory=dict)
state_estimate list[float] Field(default_factory=list)
covariance list[list[float]] Field(default_factory=list)
outliers_detected list[dict] Field(default_factory=list)
degraded bool False
degradation_reason str \| None None
agentic_evidence dict Field(default_factory=dict)
requires_human_review bool False

SensoryFusionBlock(AIBlock[SensoryFusionInput, SensoryFusionOutput, dict])

Multi-modal sensory fusion block (16 ops; 15 functional + capability discovery).

Field Type Default
name str 'sensory_fusion'
state dict field(default_factory=dict)
resource_bounds ResourceBounds field(default_factory=ResourceBounds)
usage ResourceUsage field(default_factory=ResourceUsage)
planner SensoryFusionFloorPlanner \| None None

Methods:

infer(data: SensoryFusionInput) -> Result[SensoryFusionOutput]

MCPSensoryFusionInput(BaseModel)

Input to SensoryFusionMCPBlock — 30 ops.

Field Type Default
op Literal['fuse', 'attend', 'query_sensor', 'assess_confidence', 'active_perception', 'add_sensor_source', 'remove_sensor_source', 'list_sources', 'get_noise_model', 'filter_signal', 'get_info', 'reset', 'fuse_ekf', 'reject_outliers', 'configure_ekf', 'store_percept', 'load_percept', 'list_percepts', 'store_fusion_config', 'load_fusion_config', 'list_fusion_configs', 'search_percepts', 'analyze_sensor_health', 'calibrate_attention', 'get_fusion_stats', 'export_percepts', 'compare_percepts', 'batch_fuse', 'list_patterns', 'source_capabilities'] required
sensor_readings list[dict] Field(default_factory=list)
source_id str ''
source_type str ''
source_weight float 1.0
goal str ''
prior_observations list[dict] Field(default_factory=list)
signal list[float] Field(default_factory=list)
filter_type str 'lowpass'
cutoff_freq float 0.1
sample_rate float 1.0
confidence_threshold float 0.5
metadata dict Field(default_factory=dict)
state_vector list[float] Field(default_factory=list)
process_noise float 0.01
measurement_noise float 0.1
observation_model list[list[float]] Field(default_factory=list)
observation_vector list[float] Field(default_factory=list)
outlier_sigma float 3.0
confidence_floor float 0.2
run_mode str 'beta'
reviewer_signature str ''
request_id str ''
task_id str ''
run_id str ''
percept_name str ''
config_name str ''
query str ''
top_k int 10
percept_json str ''
compare_id str ''
batch_readings list[list[dict]] Field(default_factory=list)
acknowledge_review bool False

MCPSensoryFusionOutput(BaseModel)

Output from SensoryFusionMCPBlock.

Field Type Default
op str required
completion_state CompletionState 'qualified-draft'
warning_card dict Field(default_factory=dict)
evidence dict Field(default_factory=dict)
request_id str ''
task_id str ''
run_id str ''
fused_value dict Field(default_factory=dict)
confidence float 0.0
attention_weights dict Field(default_factory=dict)
active_queries list[str] Field(default_factory=list)
sources list[dict] Field(default_factory=list)
filtered_signal list[float] Field(default_factory=list)
noise_estimate float 0.0
metadata dict Field(default_factory=dict)
state_estimate list[float] Field(default_factory=list)
covariance list[list[float]] Field(default_factory=list)
outliers_detected list[dict] Field(default_factory=list)
message str ''
count int 0
retrieved list[dict] Field(default_factory=list)
degraded bool False
degradation_reason str \| None None
requires_review bool False
agentic_evidence dict Field(default_factory=dict)
requires_human_review bool False

SensoryFusionMCPBlock(AIBlock[MCPSensoryFusionInput, MCPSensoryFusionOutput, dict])

30-op sensory fusion MCP block with SQLite persistence.

Field Type Default
name str 'sensory_fusion_mcp'
state dict field(default_factory=dict)
db_path str field(default_factory=lambda: os.environ.get('SENSORY_FUSION_DB_PATH', _DEFAULT_DB))
resource_bounds ResourceBounds field(default_factory=ResourceBounds)
usage ResourceUsage field(default_factory=ResourceUsage)

Methods:

infer(data: MCPSensoryFusionInput) -> Result[MCPSensoryFusionOutput]

SensoryFusionStore

SQLite-backed store for the sensory_fusion MCP sub-package.

Constructor:

Parameter Type Default
db_path str ':memory:'

Methods:

save_percept(name: str, percept: dict, confidence: float = 0.0, tags: str = '', requires_review: bool = False) -> str

load_percept(name: str) -> dict | None

list_percepts(limit: int = 50) -> list[dict]

search_percepts(query: str, limit: int = 10) -> list[dict]

export_percepts(limit: int = 100) -> list[dict]

save_fusion_config(name: str, config: dict, tags: str = '') -> str

load_fusion_config(name: str) -> dict | None

list_fusion_configs(limit: int = 50) -> list[dict]

log_sensor_health(source_id: str, status: str = 'ok', metrics: dict | None = None) -> str

get_sensor_health(source_id: str) -> dict | None

log_attention(goal: str, weights: dict, source_count: int) -> str

log_filter(filter_type: str, params: dict, input_len: int, output_len: int) -> str

log_error(op: str, error_message: str, params: dict | None = None) -> None

count_all() -> dict[str, int]

MCP Tools

Operation Source
fuse sensory_fusion_mcp
attend sensory_fusion_mcp
query_sensor sensory_fusion_mcp
assess_confidence sensory_fusion_mcp
active_perception sensory_fusion_mcp
add_sensor_source sensory_fusion_mcp
remove_sensor_source sensory_fusion_mcp
list_sources sensory_fusion_mcp
get_noise_model sensory_fusion_mcp
filter_signal sensory_fusion_mcp
get_info sensory_fusion_mcp
reset sensory_fusion_mcp
fuse_ekf sensory_fusion_mcp
reject_outliers sensory_fusion_mcp
configure_ekf sensory_fusion_mcp
store_percept sensory_fusion_mcp
load_percept sensory_fusion_mcp
list_percepts sensory_fusion_mcp
store_fusion_config sensory_fusion_mcp
load_fusion_config sensory_fusion_mcp
list_fusion_configs sensory_fusion_mcp
search_percepts sensory_fusion_mcp
analyze_sensor_health sensory_fusion_mcp
calibrate_attention sensory_fusion_mcp
get_fusion_stats sensory_fusion_mcp
export_percepts sensory_fusion_mcp
compare_percepts sensory_fusion_mcp
batch_fuse sensory_fusion_mcp
list_patterns sensory_fusion_mcp
source_capabilities sensory_fusion_mcp