Я экспериментирую с реализацией фильтра Калмана в Matlab. Я хочу смоделировать движение мяча, подбрасываемого ребенком в воздух, используя фильтр Калмана. Я вручную аннотировал положение мяча в кадрах изображения, чтобы использовать его в качестве измерений (наземных значений истинности) для инициализации и обновления фильтра Калмана. Я определил состояние как 6-мерный вектор следующим образом:
[X Vx Ax Y Vx Ay]
X - координата x Vx - скорость в координате x Ax - ускорение в координате x Y - координата x Vy - скорость в координате x Ay - ускорение в координате x
Фильтр Калмана настраивается с помощью следующего вызова:
kalmanFilter = myConfigureKalmanFilter('ConstantAcceleration',центроид, [0,5 0,5 0,5]*1e2, [25, 10, 10], 25);
где центр тяжести соответствует (X, Y) значению истинности первого кадра (985 согласно документу Excel)
Значения предсказания (от кадров 986 и далее) генерируются с помощью следующего вызова:
[прогнозируемый центроид, состояние] = прогнозировать (фильтр калмана);
Фильтр Калмана обновляется с помощью следующего вызова со значением истинности основания, соответствующим кадрам (986 и далее):
правильный (фильтр Калмана, центроид);
Результат этого эксперимента показан на рисунке.
Проблема: значения Ay не являются постоянными и кажутся неравномерно увеличивающимися и уменьшающимися. Поскольку это случай движения снаряда с гравитацией, придающей постоянное ускорение в направлении y, эти значения не должны сильно дрейфовать, что не так.
Примечание. Эти значения указаны в координатах пикселей.