Фільтр Калмана для положення та швидкості: введення оцінок швидкості


24

Дякую всім, хто вчора опублікував коментарі / відповіді на мій запит ( Впровадження фільтра Кальмана щодо положення, швидкості, прискорення ). Я дивився на те, що було рекомендовано, і зокрема на обидва (а) приклади вікіпедії щодо одного розмірного положення та швидкості, а також іншого веб-сайту, який розглядає подібне .

Оновлення 26 квітня 2013 року : початкове запитання тут містило деякі помилки, пов’язані з тим, що я неправильно зрозумів приклад вікіпедії на одній мірній позиції та швидкості . Маючи вдосконалене розуміння того, що відбувається, я зараз переробив це питання і більш чітко зосередив його.

Обидва приклади, на які я згадуюсь у вступному пункті вище, припускають, що вимірюється лише позиція. Однак жоден приклад не має жодного виду обчислення для швидкості. Наприклад, приклад Вікіпедії визначає матрицю як , що означає, що вводиться лише позиція. Орієнтуючись на приклад Вікіпедії, вектор стану фільтра Калмана містить положення та швидкість , тобтоH H = [ 1 0 ] x k x k ˙ x k(xkxk1)/dtHH=[1   0]xkxkx˙k

xk=(xkx˙k)

Припустимо, вимірювання положення у часі дорівнює . Тоді якщо положення і швидкість у часі були і , а якщо - постійне прискорення, яке застосовується у часовому інтервалі до , з вимірювання , що можна вивести значення для , використовуючи формулуй до до - 1 х до - 1 ˙ х до - 1 до - 1 до йkx^kk1xk1x˙k1ak1kx^a

x^k=xk1+x˙k1dt+12adt2

Це означає, що в момент вимірювання швидкості задається числом˙ х доkx˙^k

x˙^k=x˙k1+adt=2x^kxk1dtx˙k1

Усі величини з правого боку цього рівняння (тобто x^k , xk1 і x˙k1 ) зазвичай розподіляються випадковими змінними з відомими засобами та стандартними відхиленнями , тому матриця R для вектора вимірювання

x^k=(x^kx˙^k)

можна розрахувати. Це дійсний спосіб введення оцінок швидкості в процес?


2
Я не переглянув усі ваші підрахунки. Однак, кажучи про приклад Вікіпедії, ви, здається, трохи заплутані в його структурі. Ви правильні в тому, що вимірюється лише позиція. Однак використовується так звана модель "постійної швидкості". Це означає, що швидкість вважається постійною в матриці переходу стану.
Джейсон R

3
Зміни швидкості моделюються за допомогою матриці технологічного шуму. Отже, ви по суті припускаєте, що швидкість буде змінюватися випадковим чином з деякою заданою коваріацією. Як не дивно, але це часто працює добре. Таким чином, звичайно використовувати технологічний шум на одну похідну вище найвищої похідної змінної стану. Наприклад, якщо ви включили прискорення у свою модель, то, можливо, у ваш шум процесу буде включений випадковий ривок-компонент.
Джейсон R

@JasonR з моделлю wikipedia (якщо припустити нульову початкову коваріацію між положенням і швидкістю), оцінка швидкості - це завжди її початкове значення (як ви говорите, модель "постійної швидкості"). Однак дисперсія швидкості зростає монотонно через шум процесу, і немає вимірювань, які могли б зменшити його. Яка перевага цього в порівнянні з моделлю, яка тільки моделює положення та передбачає постійну швидкість?
Стохастично

2
Дисперсія в оцінці швидкості не повинна монотонно зростати. Шум процесу просто вносить стохастичний компонент у рівняння переходу стану, що дозволяє висловити певну невизначеність у тому, як саме буде розвиватися стан системи від часу крок до часу. Якщо ви не включаєте шум процесу, то ваш фільтр справді виводить постійну швидкість. Мабуть, це не те, чого ти хочеш.
Джейсон R

Ну @JasonR, якщо ви подивитеся на модель вікіпедії, ви побачите, що монотонно зростаюча дисперсія швидкості - це те, що вона дає вам!
Стохастично

Відповіді:


24

Це дійсний спосіб введення оцінок швидкості в процес?

Якщо ви обрали свій стан належним чином, то оцінки швидкості виходять "безкоштовно". Дивіться виведення моделі сигналу нижче (для простого 1-D випадку, який ми розглянули).

Модель сигналу, візьміть 2

Отже, нам дійсно потрібно узгодити модель сигналу, перш ніж ми зможемо рухатись вперед. З вашого редагування виглядає, що ваша модель позиції, , це:xk

xk+1=xk+x˙kΔt+12a(Δt)2x˙k+1=x˙k+aΔt

Якщо наш стан як і раніше: тоді рівняння оновлення стану просто: де тепер наш - це нормально розподілене прискорення. xk+1=(

xk=(xkx˙k)
xk+1=(1  Δt0  1)xk+((Δt)22Δt)ak
ak

Це дає різні матриці від попередньої версії, але матриці і повинні бути однаковими.GFH


Якщо я реалізую це в scilab(вибачте, немає доступу до matlab), це виглядає так:

// Signal Model
DeltaT = 0.1;
F = [1 DeltaT; 0 1];
G = [DeltaT^2/2; DeltaT];
H = [1 0];

x0 = [0;0];
sigma_a = 0.1;

Q = sigma_a^2;
R = 0.1;

N = 1000;

a = rand(1,N,"normal")*sigma_a;

x_truth(:,1) = x0;
for t=1:N,
    x_truth(:,t+1) = F*x_truth(:,t) + G*a(t);
    y(t) = H*x_truth(:,t) + rand(1,1,"normal")*sqrt(R);
end

Тоді я можу застосувати рівняння фільтра Калмана до цього (галасливі вимірювання).y

// Kalman Filter
p0 = 100*eye(2,2);

xx(:,1) = x0;
pp = p0;
pp_norm(1) = norm(pp);
for t=1:N,
    [x1,p1,x,p] = kalm(y(t),xx(:,t),pp,F,G,H,Q,R);
    xx(:,t+1) = x1;
    pp = p1;
    pp_norm(t+1) = norm(pp);
end

Таким чином, у нас є шумні вимірювання , і ми застосували до них фільтр Калмана і використовували ту саму модель сигналу, щоб генерувати як і ми, щоб застосувати фільтр Калмана (іноді досить велике припущення!).yy

Потім наступні графіки показують результат.

Сюжет 1 : та порівняно з часом.yxk

введіть тут опис зображення

Сюжет 2 : Збільшене зображення перших кількох зразків:

введіть тут опис зображення

Сюжет 3 : Щось, чого ви ніколи не отримуєте в реальному житті, справжня позиція порівняно з оцінкою стану.

введіть тут опис зображення

Сюжет 4 : Щось ви також ніколи не отримуєте в реальному житті, справжня швидкість порівняно з оцінкою стану швидкості.

введіть тут опис зображення

Сюжет 5 : Норма матриці коваріації стану (те, що завжди слід контролювати в реальному житті!). Зауважте, що він дуже швидко переходить від початкового дуже великого значення до чогось дуже маленького, тому я показав лише перші кілька зразків.

введіть тут опис зображення

Сюжет 6 : Діаграми помилки між справжнім положенням та швидкістю та їх оцінками.

введіть тут опис зображення

Якщо ви вивчаєте випадок, коли вимірювання положення точні, то ви виявите, що рівняння калманського уппату дають точні результати для положення БОТУ і швидкості. Математично зрозуміти, чому просто. Використовуючи те саме позначення, що і у статті вікіпедії , точні вимірювання означають, що . Якщо припустити, що початкове положення і швидкість відомі так, що , то і матриця посилення Кальмана задаєтьсяP k =0zk+1=xk+1Pk=0Pk+1=QKk+1

Kk+1=(12/dt)

Це означає, що процедура оновлення Kalman виробляє

x^k+1=Fk+1xk+Kk+1(zk+1Hk+1Fk+1xk)=(xk+x˙kdtx˙k)+(12/dt)(xk+1(xk+x˙kdt))=(xk+12(xk+1xk)/dtx˙k)

Як бачите, значення для швидкості визначається саме тією формулою, яку ви пропонували використовувати для оцінки швидкості. Тож хоча ви не могли бачити будь-якого виду обчислення для швидкості, насправді він там захований.(xkxk1)/dt


Дякуємо за всю вашу допомогу. Моє оригінальне запитання містило деякі непорозуміння, тому я спробував переосмислити його і намагався відповісти на ваше запитання про z_k.
Стохастично

1
дякую vm за всі ваші зусилля :-). Ваша робота спонукала мене зробити трохи математики, яку я причепився до вашої відповіді, сподіваюся, ви не заперечуєте. У всякому разі, я зараз на 100% переконаний, що стандартний метод хороший, адже я все-таки бачу формули для швидкості. Ще раз дякую
стохастично

Радий, що зможемо допомогти! Немає проблем із додаванням до відповіді.
Пітер К.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.