Skip to content

feat(v0.3): state observers — Kalman filter and Luenberger observer #72

Description

@Oseiasdfarias

Overview

Add state estimation to synapsys.observers — the missing piece for output-feedback control loops where full state measurement is unavailable.

Classes

LuenbergerObserver

  • Continuous and discrete variants
  • Pole placement for observer gain L via place()
  • predict(u) + update(y) interface

KalmanFilter

  • Discrete Linear Kalman Filter (LKF)
  • Process noise covariance Q, measurement noise covariance R
  • predict(u) + update(y) → returns (x_hat, P)

ExtendedKalmanFilter (stretch goal)

  • Linearises nonlinear dynamics at each step

Usage

from synapsys.observers import KalmanFilter, LuenbergerObserver

kf = KalmanFilter(A, B, C, Q=np.eye(4)*0.01, R=np.eye(2)*0.1)
kf.predict(u)
x_hat, P = kf.update(y_measured)

obs = LuenbergerObserver(A, B, C, poles=[-10, -10, -12, -12])
obs.predict(u)
x_hat = obs.update(y_measured)

Acceptance Criteria

  • LKF validated on cart-pole simulator (vs. ground-truth state)
  • Luenberger validated on DC motor simulator
  • 100% test coverage, mypy strict
  • Integration example with ControllerAgent

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestv0.3Planned for v0.3

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions