Как использовать pykalman для обработки траектории движения? - PullRequest
0 голосов
/ 01 апреля 2020

Я программирую на Python, для исследовательского проекта я пытаюсь отследить траекторию полета самолета на основе данных ADS-B, которые я получаю с opensky-network.org. Из-за характера данных ADS-B существует некоторая пропущенная временная метка, которая возникает периодически. Пример:

time,lat,long
2020-03-09 01:09:50,39.29488359871557,-94.729248046875
2020-03-09 01:10:00,39.28873870332362,-94.729736328125
2020-03-09 01:10:10,39.28216552734375,-94.728479800017
2020-03-09 01:10:20,39.27557373046875,-94.7266885508662
2020-03-09 01:10:30,39.268116061970346,-94.72454833984376

Моя цель - оценить состояние самолета (положение и скорость) в течение периода прерывания (отсутствует метка времени). Для этого я планировал использовать фильтр Калмана. В фильтре Калмана значение измеренных параметров, которое у меня есть, необходимо преобразовать в декартовый формат. Поэтому мне удается преобразовать данные в декартову форму:

time,X_position,Y_position,Z_position,Velocity,velocity_x,velocity_y,velocity_z,Acceleration,acceleration_x,acceleration_y,acceleration_z,Delta_time
2020-03-09 01:09:50,-407542.7557490199,-4926243.355891898,4018043.497980225,70.7561572258253,-68.93549599999999,-15.947764000000017,16.90624,0.0,0.0,0.0,0.0,0.0
2020-03-09 01:10:00,-407631.54840079864,-4926805.655733497,4017626.447953463,70.05699827516962,-69.964384,3.6011080000000137,13.32992,-0.06991589506556864,0.0698234673266738,-0.003593854935931754,-0.35763200000000006,10.0
2020-03-09 01:10:10,-407567.9161406082,-4927351.560671127,4017124.268793508,75.46737426866473,-74.07993599999999,14.404431999999998,9.10336,0.5410375993495109,-0.5310908339108239,0.10326766214932687,-0.4226559999999999,10.0
2020-03-09 01:10:20,-407458.85953741614,-4927908.400397506,4016625.242964065,81.02288852983754,-79.22437599999999,16.976652000000023,11.70432,0.5555514261172817,-0.5432195256016256,0.11640418405749135,0.2600959999999999,10.0
2020-03-09 01:10:30,-407324.27388949855,-4928522.438497869,4016046.8880836726,87.22215588451971,-84.88325999999999,20.06331600000003,6.1772800000000005,0.6199267354682163,-0.6033031600063801,0.14259892872878097,-0.5527039999999999,10.0

Примечание. Предполагается, что точность данных составляет 15 метров

На основе того, что было извлечено из kalmanfilter. net Мне нужно определить несколько уравнений:

  • Экстраполяция состояния (с входной переменной)
  • Экстраполяция ковариации
  • Коэффициент усиления Калмана
  • Обновление состояния
  • Обновление ковариации

Исходя из того, что я нахожу, этот расчет можно решить, используя pykalman library , но я действительно потерял в том, как мне следует применять это к моему коду. На веб-сайте есть указание, что я мог бы ввести другую матричную переменную, которая мне нужна для вычисления уравнения фильтра Калмана. Тем не менее, нет другого объяснения о том, как я могу настроить код.

На сайте Pykalman есть только один пример:

from pykalman import KalmanFilter
import numpy as np
kf = KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]])  # 3 observations
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)

Из этого примера нет объяснения того, как мне следует вводить другие переменные.

Мой вопрос как мне настроить код так, чтобы мои расчеты соответствовали уравнению фильтра Калмана

...