Pykalman AdditiveUnscentedKalmanFilter初始化

时间:2017-07-17 19:16:59

标签: pykalman

我正在尝试使用pykalman中的AdditiveUnscentedKalman过滤器。我被赋予了嘈杂的x,y值,并且我试图将x,y,xdot,ydot从过滤器中取出。

我从过滤器中获取值,但这不是我所期望的。 州:[[481.65737052 477.23904382 0. 0.]  [659.29999618 659.28265402 58.33365188 59.77883149]] 观察员:[478,660,-0.4666666666666667,-0.36666666666666664,-2.4756234162106834,1.2145259141964182]

obs [0]和obs [1]是测得的x y,状态是滤波器的状态。 state [0] [0]和state [1] [0]看起来是x,y和state [0] [1],而state [1] [1]似乎是x,y。我不知道他们的其他数字应该是什么,因为它们不是可接受的速度。

如果有人可以确认我使用了正确的过渡功能,那将非常感激。

transition_covariance = np.array([[100.0, 0.0, 0.0, 0.0],
                                         [0.0, 100.0, 0.0, 0.0],
                                         [0.0, 0.0, 100.0, 0.0],
                                         [0.0, 0.0, 0.0, 100.0]])

observation_covariance = np.array([[0.4, 0.0],
                                       [0.0, 0.4]])

initial_state_covariance = np.array([[100.0, 0.0, 0.0, 0.0],
                                         [0.0, 100.0, 0.0, 0.0],
                                         [0.0, 0.0, 1000.0, 0.0],
                                         [0.0, 0.0, 0.0, 1000.0]])

self.ukf = AdditiveUnscentedKalmanFilter(transition_functions = self.transition_function,
                                             observation_functions = self.observation_function,
                                             transition_covariance = transition_covariance,
                                             observation_covariance = observation_covariance,
                                             initial_state_mean = initial_conditions,
                                             initial_state_covariance = initial_state_covariance)

def get_states(self, observations):
    return self.ukf.filter(observations)

# [x, y, xvel, yvel]
def transition_function(self, state):
    return np.array([state[0] + state[2] * self.dt,
                     state[1] + state[3] * self.dt,
                     state[2],
                     state[3]])

def observation_function(self, state):
    om = np.array([[1.0, 0.0, 0.0, 0.0],
                   [0.0, 1.0, 0.0, 0.0]])
    return np.matmul(om, state)

我很困惑,因为.filter调用的输出是2X4的矩阵,我希望它是1X4。

0 个答案:

没有答案