Closed BastelBaus closed 3 months ago
I found my bug by myself. Needed to precess multiple samples at one time and stack them back. See line return np.stack( [np.power(state_samples[0], 3)])
BR, BastelBaus
# import library
from nonlinear_estimation_toolbox.filters.ekf import EKF
from nonlinear_estimation_toolbox.distributions import Gaussian
from nonlinear_estimation_toolbox.system_models import AdditiveNoiseSystemModel
from nonlinear_estimation_toolbox.measurement_models import AdditiveNoiseMeasurementModel, MeasurementModel
from nonlinear_estimation_toolbox.utils import ColumnVectors
import numpy as np
# create a filter
filter = EKF()
# set the initial state
initial_state = Gaussian(ColumnVectors([1,2]), np.eye(2))
filter.set_state(initial_state)
# define system model
class SquareSysModel(AdditiveNoiseSystemModel):
def system_equation(self, state_samples: ColumnVectors) -> ColumnVectors:
return np.square(state_samples)
# instantiate system model and noise
sys_model = SquareSysModel()
sys_noise = Gaussian(ColumnVectors([0,0]), np.eye(2))
sys_model.set_noise(sys_noise)
# prediction step
filter.predict(sys_model)
print(filter.get_state())
# define measurement model
class CubicMeasModel(AdditiveNoiseMeasurementModel):
def measurement_equation(self, state_samples: ColumnVectors) -> ColumnVectors:
return np.stack( [np.power(state_samples[0], 3)])
# instantiate measurement model and noise
meas_model = CubicMeasModel()
meas_noise = Gaussian(ColumnVectors([0]), np.eye(1))
meas_model.set_noise(meas_noise)
measurement = ColumnVectors([4])
# measurement update step
filter.update(meas_model, measurement)
print(filter.get_state())
closed
I just tried to get the library running and directly failed when change the example to a single dimension measurement. Any guidance which example to look at ? BR, BastelBaus
leads to
looking here it seams that I could go from an N=2 state vector to M=1 measurements but probably I missed some aspects ... https://nonlinearestimation.bitbucket.io/additive-noise-measurement-model.html