Moderní problémy vědy a vzdělávání. Interpolace trajektorie GPS modulu na základě výsledků souřadnicových měření

Nějak se mi stalo, že mám opravdu rád všechny druhy algoritmů, které mají jasný a logický matematický základ) Ale často je jejich popis na internetu tak přetížený vzorci a výpočty, že je prostě nemožné pochopit obecný význam algoritmu. Pochopení podstaty a principu fungování zařízení/mechanismu/algoritmu je však mnohem důležitější než zapamatování si obrovských vzorců. Jakkoli banální to může být, naučit se nazpaměť i stovky vzorců nijak nepomůže, když nevíte, jak a kde je aplikovat 😉 Vlastně k čemu to všechno je.. Rozhodl jsem se udělat popis některých algoritmů, které Musel jsem se setkat v praxi. Pokusím se nepřetěžovat matematickými výpočty, aby byl materiál srozumitelný a dobře čitelný.

A dnes si budeme povídat Kalmanův filtr, pojďme zjistit, co to je, proč a jak se používá.

Začněme malým příkladem. Postavme se před úkol určit souřadnice letícího letadla. Navíc by přirozeně měla být souřadnice (označme ji) určena co nejpřesněji.

Do letadla jsme předem nainstalovali senzor, který nám poskytuje požadované údaje o poloze, ale jako všechno na tomto světě je náš senzor nedokonalý. Místo hodnoty tedy dostáváme:

kde je chyba senzoru, tedy náhodná veličina. Z nepřesných údajů měřicího zařízení tedy musíme získat hodnotu souřadnice (), která se co nejvíce blíží skutečné poloze letadla.

Úkol byl zadán, pojďme k jeho řešení.

Dejte nám vědět ovládací akci (), díky které letadlo letí (pilot nám řekl, za které páky tahá 😉). Potom, když známe souřadnice v k-tém kroku, můžeme získat hodnotu v (k+1) kroku:

Zdálo by se, že to je to, co potřebujeme! A zde není potřeba žádný Kalmanův filtr. Ale ne všechno je tak jednoduché. Ve skutečnosti nemůžeme vzít v úvahu všechny vnější faktory ovlivňující let, takže vzorec má následující podobu:

kde je chyba způsobená vnějšími vlivy, nedokonalostí motoru atp.

tak co se stane? V kroku (k+1) máme za prvé nepřesný údaj snímače a za druhé nepřesně vypočítanou hodnotu získanou z hodnoty v předchozím kroku.

Myšlenkou Kalmanova filtru je získat přesný odhad požadované souřadnice (pro náš případ) ze dvou nepřesných hodnot (s různými váhovými koeficienty). Obecně platí, že naměřenou hodnotou může být naprosto cokoliv (teplota, rychlost...). Co se stane:

Pomocí matematických výpočtů můžeme v každém kroku získat vzorec pro výpočet Kalmanova koeficientu, ale jak bylo dohodnuto na začátku článku, nebudeme se hlouběji zabývat výpočty, zejména proto, že v praxi bylo zjištěno, že Kalmanův koeficient s rostoucím k vždy směřuje k určité hodnotě. Dostáváme první zjednodušení našeho vzorce:

Nyní předpokládejme, že neexistuje žádné spojení s pilotem a neznáme ovládací akci. Zdálo by se, že v tomto případě nemůžeme použít Kalmanův filtr, ale není tomu tak 😉 Ze vzorce jednoduše „vyhodíme“ to, co neznáme, pak

Získáváme nejzjednodušenější Kalmanův vzorec, který však i přes taková „tvrdá“ zjednodušení dokonale zvládá svůj úkol. Pokud výsledky znázorníte graficky, dostanete něco takového:

Pokud je náš senzor velmi přesný, pak by se přirozeně váhový koeficient K měl blížit jednotce. Pokud je situace opačná, to znamená, že náš senzor není příliš dobrý, pak by K mělo být blíže nule.

To je pravděpodobně vše, právě tak jsme přišli na Kalmanův filtrační algoritmus! Doufám, že článek byl užitečný a srozumitelný =)

Kalmanův filtr je pravděpodobně nejpopulárnějším filtrovacím algoritmem používaným v mnoha oblastech vědy a techniky. Pro svou jednoduchost a efektivitu jej nalezneme v GPS přijímačích, procesorech senzorových dat, při implementaci řídicích systémů atd.

Na internetu je mnoho článků a knih o Kalmanově filtru (většinou v angličtině), ale tyto články mají poměrně vysokou bariéru pro vstup, je zde mnoho nejasných míst, i když ve skutečnosti jde o velmi jasný a transparentní algoritmus. Pokusím se o tom mluvit jednoduchým jazykem, s postupným nárůstem složitosti.

k čemu to je?

Jakékoli měřicí zařízení má nějakou chybu, může být ovlivněno velkým množstvím vnějších i vnitřních vlivů, což vede k tomu, že informace z něj jsou zašuměné. Čím hlučnější jsou data, tím obtížnější je takové informace zpracovat.

Filtr je algoritmus zpracování dat, který odstraňuje šum a zbytečné informace. V Kalmanově filtru je možné specifikovat apriorní informace o charakteru systému, vztahu proměnných a na základě toho sestavit přesnější odhad, ale i v tom nejjednodušším případě (bez zadávání apriorních informací) dává vynikající výsledky.

Uvažujme jednoduchý příklad – předpokládejme, že potřebujeme kontrolovat hladinu paliva v nádrži. K tomu je v nádrži instalován kapacitní snímač, který se velmi snadno udržuje, má však některé nevýhody - např. závislost na plněném palivu (dielektrická konstanta paliva závisí na mnoha faktorech, např. teplotě; ), a velký vliv „lahvovosti“ v nádrži. Ve výsledku tak informace z něj představují typickou „pilu“ se slušnou amplitudou. Tyto typy senzorů jsou často instalovány na těžkých důlních zařízeních (nenechte se zmást objemem nádrže):

Kalmanův filtr

Pojďme trochu odbočit a seznámit se se samotným algoritmem. Kalmanův filtr využívá dynamický model systému (například fyzikální zákon pohybu), známé řídicí vstupy a vícenásobná sekvenční měření k vytvoření optimálního odhadu stavu. Algoritmus se skládá ze dvou opakovaných fází: predikce a úpravy. V první fázi se počítá predikce stavu v dalším časovém okamžiku (s přihlédnutím k nepřesnosti jejich měření). Na druhém nové informace ze senzoru opraví předpokládanou hodnotu (také s přihlédnutím k nepřesnosti a šumu těchto informací):

Rovnice jsou uvedeny ve formě matice, pokud neznáte lineární algebru, nevadí, následuje zjednodušená verze bez matic pro případ s jednou proměnnou. V případě jedné proměnné matice degenerují do skalárních hodnot.

Nejprve pochopíme notaci: dolní index označuje časový okamžik: k - aktuální, (k-1) - předchozí, znaménko mínus v horním indexu znamená, že předpověděl střední hodnota.

Popisy proměnných jsou uvedeny na následujících obrázcích:

Můžete dlouze a zdlouhavě popisovat, co všechny ty záhadné přechodové matice znamenají, ale podle mého názoru je lepší zkusit algoritmus aplikovat na reálném příkladu - aby abstraktní významy nabyly skutečného významu.

Zkusme to v akci

Vraťme se k příkladu se snímačem hladiny paliva, protože stav systému je reprezentován jednou proměnnou (objem paliva v nádrži), matice degenerují do obyčejných rovnic:

Definování procesního modelu
Aby bylo možné použít filtr, je nutné určit matice/hodnoty proměnných, které určují dynamiku systému a rozměry F, B a H:

F- proměnná popisující dynamiku systému v případě paliva - může to být koeficient, který určuje spotřebu paliva při volnoběhu během doby vzorkování (doba mezi kroky algoritmu). Ovšem kromě spotřeby paliva existují i ​​čerpací stanice...takže pro jednoduchost nastavíme tuto proměnnou rovnou 1 (tedy naznačíme, že predikovaná hodnota bude rovna předchozímu stavu).

B- proměnná určující uplatnění řídícího působení. Pokud bychom měli další informace o otáčkách motoru nebo míře sešlápnutí plynového pedálu, pak by tento parametr určoval, jak by se během vzorkovací periody změnila spotřeba paliva. Protože v našem modelu nejsou žádné kontrolní akce (nejsou o nich žádné informace), akceptujeme B = 0.

H- matici definující vztah mezi měřeními a stavem systému, prozatím bez vysvětlení přijmeme tuto proměnnou také rovnou 1.

Definování vyhlazovacích vlastností
R- chybu měření lze zjistit testováním měřicích přístrojů a určením chyby jejich měření.

Q- stanovení procesního šumu je obtížnější úkol, protože je nutné určit rozptyl procesu, což není vždy možné. V každém případě můžete zvolit tento parametr pro zajištění požadované úrovně filtrace.

Pojďme to implementovat do kódu
Abychom rozptýlili zbývající zmatky, implementujme zjednodušený algoritmus v C# (bez matic a kontrolních akcí):

třída KalmanFilterSimple1D
{
public double X0 (get; private set;) // predikovaný stav
public double P0 ( get; private set; ) // předpokládaná kovariance

Public double F ( get; private set; ) // faktor skutečné hodnoty na předchozí skutečnou hodnotu
public double Q ( get; private set; ) // šum měření
public double H ( get; private set; ) // faktor naměřené hodnoty na skutečnou hodnotu
public double R ( get; private set; ) // hluk prostředí

Veřejný dvojitý stav ( get; private set; )
veřejná dvojitá kovariance ( get; private set; )

Public KalmanFilterSimple1D(double q, double r, double f = 1, double h = 1)
{
Q = q;
R = r;
F = f;
H = h;
}

Public void SetState (dvojitý stav, dvojitá kovariance)
{
Stát = stát;
Kovariance = kovariance;
}

Veřejné neplatné Správně (dvojité údaje)
{
//aktualizace času - předpověď
X0 = F*stav;
PO = F*Kovariance*F + Q;

//aktualizace měření - oprava
var K = H*PO/(H*PO*H + R);
Stav = X0 + K*(data - H*X0);
Kovariance = (1 - K*H)*F;
}
}

// Aplikace...

Var palivoData = GetData();
var filter = new List();

Var kalman = new KalmanFilterSimple1D(f: 1, h: 1, q: 2, r: 15); // nastavte F, H, Q a R
kalman.SetState(fuelData, 0,1); // Nastavte počáteční hodnoty State a Covariance
foreach (var d in fuelData)
{
kalman.Správně(d); // Aplikujte algoritmus

Filtered.Add(kalman.State); // Uložení aktuálního stavu
}

Výsledek filtrování s těmito parametry je znázorněn na obrázku (pro úpravu stupně vyhlazení můžete změnit parametry Q a R):

Nejzajímavější část zůstává mimo rámec článku - použití Kalmanova filtru pro několik proměnných, určení vztahu mezi nimi a automatické vygenerování hodnot pro nepozorované proměnné. Pokusím se v tématu pokračovat, jakmile budu mít čas.

Doufám, že popis nebyl příliš zdlouhavý a složitý, pokud máte nějaké dotazy nebo upřesnění, vítám vás v komentářích)

1

Byla provedena studie využití Kalmanova filtru v moderním vývoji integrovaných navigačních systémů. Je uveden a analyzován příklad konstrukce matematického modelu, který využívá rozšířený Kalmanův filtr ke zlepšení přesnosti určování souřadnic bezpilotních prostředků. Uvažuje se o částečném filtru. Je proveden stručný přehled vědeckých prací využívajících tento filtr ke zlepšení spolehlivosti a odolnosti proti chybám navigačních systémů. Tento článek nám umožňuje dojít k závěru, že použití Kalmanova filtru v lokalizačních systémech UAV je praktikováno v mnoha moderních vývojových trendech. Existuje obrovské množství variací a aspektů tohoto použití, které také poskytují hmatatelné výsledky ve zvýšení přesnosti, zejména v případě selhání standardních satelitních navigačních systémů. To je hlavním faktorem vlivu této technologie na různé vědecké obory související s vývojem přesných a poruchově odolných navigačních systémů pro různá letadla.

Kalmanův filtr

navigace

bezpilotní letoun (UAV)

1. Makarenko G.K., Aleshechkin A.M. Studium filtračního algoritmu při určování souřadnic objektu pomocí signálů ze satelitních radionavigačních systémů // Zprávy TUSUR. – 2012. – č. 2 (26). – str. 15-18.

2. Bar-Shalom Y., Li X. R., Kirubarajan T. Odhad s aplikacemi

ke sledování a navigaci // Teorie algoritmů a softwaru. – 2001. – Sv. 3. – S. 10-20.

3. Bassem I.S. Vision based Navigation (VBN) of Unmanned Aerial Vehicles (UAV) // UNIVERSITY OF CALGARY. – 2012. – Sv. 1. – S. 100-127.

4. Conte G., Doherty P. Integrovaný navigační systém UAV založený na porovnávání leteckých snímků // Aerospace Conference. – 2008. –Sv. 1. – S. 3142-3151.

5. Guoqiang M., Drake S., Anderson B. Návrh rozšířeného Kalmanova filtru pro uav lokalizaci // In Information, Decision and Control. – 2007. – Sv. 7. – S. 224–229.

6. Optimalizace trajektorie Ponda S.S pro lokalizaci cíle pomocí malých bezpilotních vzdušných prostředků // Massachusetts Institute of Technology. – 2008. – Sv. 1. – S. 64-70.

7. Wang J., Garrat M., Lambert A. Integrace gps/ins/vision senzorů pro navigaci bezpilotních vzdušných prostředků // IAPRS&SIS. – 2008. – Sv. 37. – S. 963-969.

Jedním z naléhavých úkolů moderní navigace bezpilotních letounů (UAV) je úkol zvýšit přesnost určování souřadnic. Tento problém je řešen pomocí různých možností integrace navigačních systémů. Jednou z moderních možností integrace je kombinace GPS/GLONASS navigace s Extended Kalmanfilter, který rekurzivně vyhodnocuje přesnost pomocí neúplných a zašuměných měření. V současné době existují a jsou vyvíjeny různé varianty rozšířeného Kalmanova filtru, včetně různorodého množství stavových proměnných. V této práci ukážeme, jak efektivní může být její využití v moderním vývoji. Uvažujme jedno z charakteristických znázornění takového filtru.

Sestavení matematického modelu

V tomto příkladu budeme hovořit pouze o pohybu UAV v horizontální rovině, jinak budeme uvažovat o tzv. 2d lokalizačním problému. V našem případě je to odůvodněno tím, že pro mnoho prakticky se vyskytujících situací může UAV zůstat přibližně ve stejné výšce. Tento předpoklad je široce používán pro zjednodušení simulací dynamiky letadel. Dynamický model UAV je specifikován následujícím systémem rovnic:

kde () jsou souřadnice UAV v horizontální rovině jako funkce času, směr UAV, úhlová rychlost UAV a pozemní rychlost UAV, fungují a budou považovány za konstantní. Jsou vzájemně nezávislé, se známými kovariancemi a , rovna a respektive a používají se k modelování změn ve zrychlení UAV způsobených větrem, pilotními manévry atd. Hodnoty a jsou odvozeny z maximální úhlové rychlosti UAV a experimentálních hodnot změn lineární rychlosti UAV, - Kroneckerův symbol.

Tento systém rovnic bude přibližný kvůli nelinearitě v modelu a přítomnosti šumu. Nejjednodušší metodou aproximace je v tomto případě metoda Eulerovy aproximace. Níže je uveden diskrétní model dynamického pohonného systému UAV.

diskrétní stavový vektor Kalmanova filtru, který umožňuje aproximovat hodnotu spojitého stavového vektoru. ∆ - časový interval mezi měřeními k a k+1. () a () jsou sekvence hodnot bílého Gaussova šumu s nulovým průměrem. Kovarianční matice pro první sekvenci:

Podobně pro druhou sekvenci:

Po provedení příslušných substitucí v rovnicích soustavy (2) získáme:

Sekvence a jsou vzájemně nezávislé. Jsou to také sekvence bílého gaussovského šumu s nulovým průměrem s kovariančními maticemi, resp. Výhodou tohoto formuláře je, že ukazuje změnu diskrétního šumu mezi každým měřením. V důsledku toho získáme následující diskrétní dynamický model:

(3)

Rovnice pro:

= + , (4)

kde x a y jsou souřadnice UAV v okamžiku k a Gaussova sekvence náhodných parametrů s nulovou střední hodnotou, která se používá k nastavení chyby. Předpokládá se, že tato sekvence je nezávislá na () a ().

Jako základ pro odhad umístění UAV slouží výrazy (3) a (4), kde k-té souřadnice jsou získány pomocí rozšířeného Kalmanova filtru. Modelování selhání navigačních systémů ve vztahu k tomuto typu filtru ukazuje jeho významnou účinnost.

Pro větší názornost si uveďme malý jednoduchý příklad. Nechte některé UAV létat rovnoměrně zrychlené, s určitým konstantním zrychlením a.

Kde x je souřadnice UAV v čase t a δ je nějaká náhodná veličina.

Předpokládejme, že máme GPS senzor, který přijímá data o poloze letadla. Dovolte nám představit výsledek modelování tohoto procesu v softwarovém balíku MATLAB.

Rýže. 1. Filtrování hodnot senzoru pomocí Kalmanova filtru

Na Obr. Obrázek 1 ukazuje, jak efektivní může být použití Kalmanova filtrování.

V reálných situacích však mají signály často nelineární dynamiku a abnormální šum. Právě v takových případech se používá rozšířený Kalmanův filtr. Pokud nejsou rozptyly šumu příliš velké (tj. lineární aproximace je adekvátní), poskytuje použití rozšířeného Kalmanova filtru řešení problému s vysokou přesností. V případě, že šum není Gaussovský, nelze použít rozšířený Kalmanův filtr. V tomto případě se obvykle používá parciální filtr, který využívá numerické integrální metody založené na metodách Monte Carlo s Markovovými řetězci.

Částečný filtr

Představme si jeden z algoritmů, který rozvíjí myšlenky rozšířeného Kalmanova filtru – částečný filtr. Částečné filtrování je neoptimální filtrační technika, která funguje tak, že se provádí sdružování Monte Carlo na sadě částic, které představují rozdělení pravděpodobnosti procesu. Zde je částice prvek převzatý z předchozí distribuce odhadovaného parametru. Základní myšlenkou částečného filtru je, že k vyjádření odhadu distribuce lze použít velké množství částic. Čím větší je počet použitých částic, tím přesněji bude sada částic reprezentovat předchozí distribuci. Částicový filtr se inicializuje umístěním N částic z předchozí distribuce parametrů, které chceme odhadnout. Filtrační algoritmus zahrnuje průchod těchto částic speciálním systémem a jejich následné vážení pomocí informací získaných měřením těchto částic. Výsledné částice a jejich přidružené hmotnosti představují zadní rozdělení procesu odhadu. Cyklus se opakuje pro každé nové měření a hmotnosti částic se aktualizují tak, aby reprezentovaly následující rozdělení. Jedním z hlavních problémů tradičního přístupu k filtraci částic je to, že tento přístup obvykle vede k tomu, že několik částic má velmi velkou hmotnost, na rozdíl od většiny ostatních s velmi nízkou hmotností. To vede k nestabilitě filtrace. Tento problém lze vyřešit zavedením vzorkovací frekvence, kdy se N nových částic odebírá z distribuce složené ze starých částic. Výsledek odhadu se získá odebráním vzorku průměrné hodnoty souboru částic. Pokud máme více nezávislých vzorků, pak bude výběrový průměr přesným odhadem průměru, který dává konečný rozptyl.

I když je částicový filtr suboptimální, pak jak se počet částic blíží nekonečnu, účinnost algoritmu se blíží Bayesovu pravidlu odhadu. Proto je vhodné mít co nejvíce částic, aby byl výsledek co nejlepší. Bohužel to vede k silnému nárůstu složitosti výpočtů a následně si vynucuje kompromis mezi přesností a rychlostí výpočtu. Počet částic by tedy měl být zvolen na základě požadavků na úkol hodnocení přesnosti. Dalším důležitým faktorem pro provoz částicového filtru je omezení rychlosti vzorkování. Jak již bylo zmíněno dříve, vzorkovací frekvence je důležitým parametrem pro filtraci částic a bez ní se algoritmus časem zvrhne. Myšlenka je taková, že pokud jsou váhy rozloženy příliš nerovnoměrně a má být dosaženo prahu vzorkování, pak jsou částice s nízkou hmotností vyřazeny a zbývající sada tvoří novou hustotu pravděpodobnosti, ze které lze odebírat nové vzorky. Volba prahové hodnoty vzorkovací frekvence je poměrně obtížný úkol, protože příliš vysoká frekvence způsobuje přílišnou citlivost filtru na šum a příliš nízká frekvence způsobuje velkou chybu. Důležitým faktorem je také hustota pravděpodobnosti.

Celkově algoritmus filtrování částic vykazuje dobrý výkon při výpočtu polohy pro stacionární cíle a v případě relativně pomalu se pohybujících cílů s neznámou dynamikou zrychlení. Obecně je algoritmus filtrování částic stabilnější než rozšířený Kalmanův filtr a méně náchylný k degeneraci a vážným poruchám. V případech nelineárního, negaussovského rozdělení vykazuje tento filtrační algoritmus velmi dobrou přesnost při určování polohy cíle, zatímco rozšířený Kalmanův filtrační algoritmus nelze za takových podmínek použít. Mezi nevýhody tohoto přístupu patří vyšší složitost oproti rozšířenému Kalmanovu filtru a také to, že není vždy zřejmé, jak zvolit správné parametry pro tento algoritmus.

Slibný výzkum v této oblasti

Použití modelu Kalmanova filtru, podobného tomu, který jsme prezentovali, je vidět v tom, kde se používá ke zlepšení výkonu integrovaného systému (GPS + model počítačového vidění pro párování s geografickou základnou) a situace je také simulováno selhání zařízení satelitní navigace. Pomocí Kalmanova filtru se výrazně zlepšily výsledky systému v případě poruchy (např. chyba v určování výšky byla snížena přibližně dvakrát a chyby v určování souřadnic podél různých os byly sníženy téměř 9krát) . Podobné použití Kalmanova filtru je také uvedeno v.

Zajímavý problém z pohledu množiny metod je řešen v . Používá také 5-stavový Kalmanův filtr, s určitými rozdíly v konstrukci modelu. Získaný výsledek předčí výsledek námi prezentovaného modelu díky použití dalších prostředků integrace (jsou použity fotografie a termovizní snímky). Použití Kalmanova filtru nám v tomto případě umožňuje snížit chybu v určení prostorových souřadnic daného bodu na hodnotu 5,5m.

Závěr

Na závěr poznamenáváme, že použití Kalmanova filtru v lokalizačních systémech UAV je praktikováno v mnoha moderních vývojových trendech. Existuje obrovské množství variant a aspektů tohoto použití, až po současné použití několika podobných filtrů s různými stavovými faktory. Jedním z nejslibnějších směrů vývoje Kalmanových filtrů se jeví vytvoření upraveného filtru, jehož chyby budou reprezentovány barevným šumem, což jej učiní ještě cennějším pro řešení reálných problémů. V oboru je také velký zájem o částečný filtr, který dokáže odfiltrovat negaussovský šum. Tato rozmanitost a hmatatelné výsledky při zlepšování přesnosti, zejména v případě selhání standardních družicových navigačních systémů, jsou hlavními faktory dopadu této technologie na různé vědecké obory související s vývojem přesných a chybově odolných navigačních systémů pro různá letadla. .

Recenzenti:

Labunets V.G., doktor technických věd, profesor, profesor katedry teoretických základů radiotechniky, Uralská federální univerzita pojmenovaná po prvním ruském prezidentovi B.N. Jelcin, Jekatěrinburg;

Ivanov V.E., doktor technických věd, profesor, přednosta. Katedra technologie a komunikací Uralské federální univerzity pojmenovaná po prvním ruském prezidentovi B.N. Jelcin, Jekatěrinburg.

Bibliografický odkaz

Gavrilov A.V. VYUŽITÍ FILTRU KALMAN K ŘEŠENÍ PROBLÉMŮ RAFINOVÁNÍ SOUŘADNIC UAV // Moderní problémy vědy a vzdělávání. – 2015. – č. 1-1.;
URL: http://science-education.ru/ru/article/view?id=19453 (datum přístupu: 04.06.2019). Dáváme do pozornosti časopisy vydávané nakladatelstvím "Akademie přírodních věd" 25. března 2012 ve 20:42

Kalmanův filtr - Úvod

  • algoritmy,
  • Programování

Kalmanův filtr je pravděpodobně nejpopulárnějším filtrovacím algoritmem používaným v mnoha oblastech vědy a techniky. Pro svou jednoduchost a efektivitu jej nalezneme v GPS přijímačích, procesorech senzorových dat, při implementaci řídicích systémů atd.

Na internetu je mnoho článků a knih o Kalmanově filtru (většinou v angličtině), ale tyto články mají poměrně vysokou bariéru pro vstup, je zde mnoho nejasných míst, i když ve skutečnosti jde o velmi jasný a transparentní algoritmus. Pokusím se o tom mluvit jednoduchým jazykem, s postupným nárůstem složitosti.

k čemu to je?

Jakékoli měřicí zařízení má nějakou chybu, může být ovlivněno velkým množstvím vnějších i vnitřních vlivů, což vede k tomu, že informace z něj jsou zašuměné. Čím hlučnější jsou data, tím obtížnější je takové informace zpracovat.

Filtr je algoritmus zpracování dat, který odstraňuje šum a zbytečné informace. V Kalmanově filtru je možné specifikovat apriorní informace o charakteru systému, vztahu proměnných a na základě toho sestavit přesnější odhad, ale i v tom nejjednodušším případě (bez zadávání apriorních informací) dává vynikající výsledky.

Uvažujme jednoduchý příklad – předpokládejme, že potřebujeme kontrolovat hladinu paliva v nádrži. K tomu je v nádrži instalován kapacitní snímač, který se velmi snadno udržuje, má však některé nevýhody - např. závislost na plněném palivu (dielektrická konstanta paliva závisí na mnoha faktorech, např. teplotě; ), a velký vliv „lahvovosti“ v nádrži. Ve výsledku tak informace z něj představují typickou „pilu“ se slušnou amplitudou. Tyto typy senzorů jsou často instalovány na těžkých důlních zařízeních (nenechte se zmást objemem nádrže):

Kalmanův filtr

Pojďme trochu odbočit a seznámit se se samotným algoritmem. Kalmanův filtr využívá dynamický model systému (například fyzikální zákon pohybu), známé řídicí vstupy a vícenásobná sekvenční měření k vytvoření optimálního odhadu stavu. Algoritmus se skládá ze dvou opakovaných fází: predikce a úpravy. V první fázi se počítá predikce stavu v dalším časovém okamžiku (s přihlédnutím k nepřesnosti jejich měření). Na druhém nové informace ze senzoru opraví předpokládanou hodnotu (také s přihlédnutím k nepřesnosti a šumu těchto informací):

Rovnice jsou uvedeny ve formě matice, pokud neznáte lineární algebru, nevadí, následuje zjednodušená verze bez matic pro případ s jednou proměnnou. V případě jedné proměnné matice degenerují do skalárních hodnot.

Nejprve pochopíme notaci: dolní index označuje časový okamžik: k - aktuální, (k-1) - předchozí, znaménko mínus v horním indexu znamená, že předpověděl střední hodnota.

Popisy proměnných jsou uvedeny na následujících obrázcích:

Můžete dlouze a zdlouhavě popisovat, co všechny ty záhadné přechodové matice znamenají, ale podle mého názoru je lepší zkusit algoritmus aplikovat na reálném příkladu - aby abstraktní významy nabyly skutečného významu.

Zkusme to v akci

Vraťme se k příkladu se snímačem hladiny paliva, protože stav systému je reprezentován jednou proměnnou (objem paliva v nádrži), matice degenerují do obyčejných rovnic:

Definování procesního modelu
Aby bylo možné použít filtr, je nutné určit matice/hodnoty proměnných, které určují dynamiku systému a rozměry F, B a H:

F- proměnná popisující dynamiku systému v případě paliva - může to být koeficient, který určuje spotřebu paliva při volnoběhu během doby vzorkování (doba mezi kroky algoritmu). Ovšem kromě spotřeby paliva existují i ​​čerpací stanice...takže pro jednoduchost nastavíme tuto proměnnou rovnou 1 (tedy naznačíme, že predikovaná hodnota bude rovna předchozímu stavu).

B- proměnná určující uplatnění řídícího působení. Pokud bychom měli další informace o otáčkách motoru nebo míře sešlápnutí plynového pedálu, pak by tento parametr určoval, jak by se během vzorkovací periody změnila spotřeba paliva. Protože v našem modelu nejsou žádné kontrolní akce (nejsou o nich žádné informace), akceptujeme B = 0.

H- matici definující vztah mezi měřeními a stavem systému, prozatím bez vysvětlení přijmeme tuto proměnnou také rovnou 1.

Definování vyhlazovacích vlastností
R- chybu měření lze zjistit testováním měřicích přístrojů a určením chyby jejich měření.

Q- stanovení procesního šumu je obtížnější úkol, protože je nutné určit rozptyl procesu, což není vždy možné. V každém případě můžete zvolit tento parametr pro zajištění požadované úrovně filtrace.

Pojďme to implementovat do kódu
Abychom rozptýlili zbývající zmatky, implementujme zjednodušený algoritmus v C# (bez matic a kontrolních akcí):

Třída KalmanFilterSimple1D ( public double X0 (get; private set;) // predikovaný stav public double P0 ( get; private set; ) // predikovaná kovariance public double F ( get; private set; ) // faktor skutečné hodnoty k předchozí reálné value public double Q ( get; private set; ) // hluk měření public double H ( get; private set; ) // faktor naměřené hodnoty na skutečnou hodnotu public double R ( get; private set; ) // hluk prostředí public double State ( get; private set; ) public double Covariance ( get; private set; ) public KalmanFilterSimple1D(double q, double r, double f = 1, double h = 1) ( Q = q; R = r; F = f; H = h); *F + Q //aktualizace měření - oprava var K = H*P0/(H*P0*H + R )*P0 ) ) // Aplikace... var fuelData = GetData(); var filter = nový seznam

Výsledek filtrování s těmito parametry je znázorněn na obrázku (pro úpravu stupně vyhlazení můžete změnit parametry Q a R):

Nejzajímavější část zůstává mimo rámec článku - použití Kalmanova filtru pro několik proměnných, určení vztahu mezi nimi a automatické vygenerování hodnot pro nepozorované proměnné. Pokusím se v tématu pokračovat, jakmile budu mít čas.

Doufám, že popis nebyl příliš zdlouhavý a složitý, pokud máte nějaké dotazy nebo upřesnění, vítám vás v komentářích)

(); var kalman = new KalmanFilterSimple1D(f: 1, h: 1, q: 2, r: 15); // nastavení F, H, Q a R kalman.SetState(fuelData, 0,1); // Nastavte počáteční hodnoty State a Covariance foreach(var d in fuelData) ( kalman.Correct(d); // Aplikujte algoritmus filtered.Add(kalman.State); // Uložte aktuální stav )

  • UPD:

Seznam zdrojů.
Konzultace

Na internetu, včetně Habrého, můžete najít spoustu informací o Kalmanově filtru. K samotným vzorcům se ale těžko hledá lehce stravitelný závěr. Bez závěru je celá tato věda vnímána jako určitý druh šamanismu, vzorce vypadají jako anonymní soubor symbolů, a co je nejdůležitější, mnoho jednoduchých výroků ležících na povrchu teorie je mimo chápání. Účelem tohoto článku bude hovořit o tomto filtru v co nejpřístupnějším jazyce.

Než se seznámím s Kalmanovým filtrem, navrhuji si připomenout některé jednoduché definice a fakta z teorie pravděpodobnosti.

Náhodná proměnná

Když říkají, že je dána náhodná veličina, myslí tím, že tato veličina může nabývat náhodných hodnot. Nabývá různých hodnot s různou pravděpodobností. Když hodíte řekněme kostkou, objeví se diskrétní sada hodnot: . Když mluvíme například o rychlosti putující částice, pak se samozřejmě musíme vypořádat se souvislou množinou hodnot. „Vypuštěné“ hodnoty náhodné proměnné budeme označovat, ale někdy použijeme stejné písmeno, kterým označujeme náhodnou proměnnou:
V případě spojité množiny hodnot je náhodná veličina charakterizována hustotou pravděpodobnosti, která nám diktuje, že pravděpodobnost, že náhodná veličina „vypadne“ v malém okolí bodu délky, je rovna . Jak vidíme z obrázku, tato pravděpodobnost se rovná ploše stínovaného obdélníku pod grafem:

Docela často v životě jsou náhodné proměnné gaussovsky rozděleny, když je hustota pravděpodobnosti rovna .

Vidíme, že funkce má tvar zvonu se středem v bodě a charakteristickou šířkou řádu.
Vzhledem k tomu, že se bavíme o Gaussově distribuci, byla by škoda nezmínit, odkud se vzala. Stejně jako čísla jsou pevně zavedena v matematice a nacházejí se na nejneočekávanějších místech, Gaussovo rozdělení zapustilo hluboké kořeny v teorii pravděpodobnosti. Jedno pozoruhodné tvrzení, které částečně vysvětluje Gaussovu všudypřítomnost, je toto:
Nechť existuje náhodná veličina s libovolným rozdělením (ve skutečnosti existují určitá omezení pro tuto libovolnost, ale nejsou vůbec striktní). Proveďte experimenty a vypočítejte součet „vypadlých“ hodnot náhodné proměnné. Udělejme mnoho takových experimentů. Je jasné, že pokaždé dostaneme jinou hodnotu částky. Jinými slovy, toto množství je samo o sobě náhodnou veličinou s vlastním specifickým distribučním zákonem. Ukazuje se, že když je tato suma dostatečně velká, distribuční zákon tohoto součtu inklinuje ke Gaussovu rozdělení (mimochodem, charakteristická šířka „zvonu“ roste jako ). Podrobněji jsme se dočetli na Wikipedii: centrální limitní věta. V životě se velmi často vyskytují veličiny, které jsou součtem velkého počtu shodně rozdělených nezávislých náhodných veličin, a proto jsou gaussovsky rozděleny.

Průměrná hodnota

Průměrná hodnota náhodné veličiny je to, co dostaneme v limitu, pokud provedeme hodně experimentů a vypočítáme aritmetický průměr spadlých hodnot. Průměrná hodnota se označuje různými způsoby: matematici ji rádi označují prostřednictvím (matematické očekávání nebo střední hodnota) a zahraniční matematici ji rádi označují prostřednictvím (očekávání). Fyzikové přes nebo. Cizím způsobem jej označíme: .
Například pro Gaussovo rozdělení je střední hodnota .

Disperze

V případě Gaussova rozdělení jasně vidíme, že náhodná veličina preferuje spadat do určitého sousedství své střední hodnoty.

Ještě jednou obdivujte Gaussovo rozdělení



Jak je vidět z grafu, charakteristické rozložení hodnot je řádově . Jak můžeme odhadnout toto rozšíření hodnot pro libovolnou náhodnou veličinu, pokud známe její rozložení? Můžete nakreslit graf hustoty pravděpodobnosti a odhadnout charakteristickou šířku okem. Ale raději jdeme algebraickou cestou. Průměrnou délku (modul) odchylky od průměrné hodnoty zjistíte: . Tato hodnota bude dobrým odhadem charakteristického rozptylu hodnot. Ale vy i já moc dobře víme, že použití modulů ve vzorcích je bolest hlavy, takže tento vzorec se pro odhad charakteristického rozptylu používá jen zřídka.
Jednodušší způsob (jednoduchý z hlediska výpočtů) je najít . Toto množství se nazývá disperze a často se označuje jako . Kořenem rozptylu je dobrý odhad šíření náhodné veličiny. Kořen rozptylu se také nazývá směrodatná odchylka.
Například pro Gaussovo rozdělení můžeme vypočítat, že rozptyl definovaný výše je přesně roven , což znamená, že směrodatná odchylka je rovna , což velmi dobře souhlasí s naší geometrickou intuicí.
Ve skutečnosti se zde skrývá malý podvod. Faktem je, že v definici Gaussova rozdělení je pod exponentem výraz. Tato dvojka je ve jmenovateli právě proto, aby se směrodatná odchylka rovnala koeficientu. To znamená, že samotný vzorec Gaussova rozdělení je napsán ve formě speciálně přizpůsobené tak, abychom vypočítali jeho směrodatnou odchylku.

Nezávislé náhodné veličiny

Náhodné proměnné mohou být závislé nebo ne. Představte si, že hodíte jehlu na rovinu a zaznamenáte souřadnice obou konců. Tyto dvě souřadnice jsou závislé, souvisí s podmínkou, že vzdálenost mezi nimi je vždy rovna délce jehly, i když jde o náhodné proměnné.
Náhodné proměnné jsou nezávislé, pokud je výsledek první zcela nezávislý na výsledku druhé. Pokud jsou náhodné proměnné nezávislé, pak se průměrná hodnota jejich součinu rovná součinu jejich průměrných hodnot:

Důkaz

Například mít modré oči a absolvovat školu se zlatou medailí jsou nezávislé náhodné proměnné. Pokud jsou modroocí, řekněme, zlatí medailisté, pak modrookí medailisté Tento příklad nám říká, že pokud jsou náhodné proměnné dány jejich hustotou pravděpodobnosti a , pak je nezávislost těchto hodnot vyjádřena ve skutečnosti, že hustota pravděpodobnosti (. první hodnota vypadla a druhá) se zjistí podle vzorce:

Z toho okamžitě vyplývá, že:

Jak vidíte, důkaz byl proveden pro náhodné veličiny, které mají spojité spektrum hodnot a jsou určeny hustotou pravděpodobnosti. V ostatních případech je myšlenka důkazu podobná.

Kalmanův filtr

Prohlášení o problému

Označme hodnotu, kterou budeme měřit a následně filtrovat. Může to být poloha, rychlost, zrychlení, vlhkost, stupeň zápachu, teplota, tlak atd.
Začněme jednoduchým příkladem, který nás dovede k formulaci obecného problému. Představte si, že máme rádiem řízené auto, které může jet pouze dopředu a dozadu. Při znalosti hmotnosti vozu, tvaru, povrchu vozovky atd. jsme vypočítali, jak ovládací joystick ovlivňuje rychlost pohybu.

Poté se souřadnice auta změní podle zákona:

V reálu nemůžeme v našich výpočtech zohledňovat drobné poruchy působící na vůz (vítr, hrboly, oblázky na vozovce), takže skutečná rychlost vozu se bude lišit od vypočtené. Na pravou stranu zapsané rovnice bude přidána náhodná proměnná:

Na autě máme nainstalovaný GPS senzor, který se snaží změřit skutečnou souřadnici auta a samozřejmě ji neumí změřit přesně, ale měří s chybou, která je také náhodná veličina. V důsledku toho dostáváme ze senzoru chybná data:

Úkolem je najít správnou aproximaci skutečných souřadnic stroje při znalosti nesprávných hodnot snímačů. Tuto dobrou aproximaci budeme označovat jako .
Ve formulaci obecného problému může za souřadnici cokoli (teplota, vlhkost...) a člen odpovědný za řízení systému zvenčí budeme označovat jako (v příkladu se strojem). Rovnice pro souřadnice a hodnoty senzorů budou vypadat takto:

(1)

Pojďme diskutovat podrobně o tom, co víme:

Stojí za zmínku, že úloha filtrování není úkolem vyhlazování. Nesnažíme se vyhlazovat data senzoru, snažíme se získat co nejbližší hodnotu ke skutečné souřadnici.

Kalmanův algoritmus

Budeme argumentovat indukcí. Představte si, že v kroku jsme již našli filtrovanou hodnotu ze senzoru, která se dobře blíží skutečným souřadnicím systému. Nezapomeňte, že známe rovnici, která řídí změnu neznámé souřadnice:

Proto, aniž bychom ještě obdrželi hodnotu ze senzoru, můžeme předpokládat, že v kroku se systém bude vyvíjet podle tohoto zákona a senzor bude ukazovat něco blízko . Bohužel zatím nemůžeme říci nic přesnějšího. Na druhou stranu při kroku budeme mít na ruce nepřesné čtení senzoru.
Kalmanova myšlenka je taková, že abychom získali co nejlepší přiblížení ke skutečné souřadnici, musíme zvolit střední cestu mezi nepřesným čtením senzoru a naší predikcí toho, co jsme očekávali, že uvidí. Odečtené hodnotě senzoru přiřadíme váhu a váha zůstane na předpokládané hodnotě:

Koeficient se nazývá Kalmanův koeficient. Záleží na kroku iterace, správnější by tedy bylo napsat , ale zatím, abychom nezanesli výpočetní vzorce, vynecháme jeho index.
Kalmanův koeficient musíme zvolit tak, aby výsledná optimální hodnota souřadnice byla co nejblíže skutečné souřadnici. Pokud například víme, že náš senzor je velmi přesný, budeme jeho čtení více důvěřovat a hodnotě přiložíme větší váhu (blízko jedné). Pokud snímač naopak není vůbec přesný, pak se zaměříme spíše na teoreticky předpokládanou hodnotu.
Obecně, abyste našli přesnou hodnotu Kalmanova koeficientu, stačí minimalizovat chybu:

K přepsání výrazu pro chybu používáme rovnice (1) (ty s modrým pozadím v rámečku):

Důkaz


Nyní je čas diskutovat o tom, co znamená výraz minimalizovat chybu? Koneckonců, chyba, jak vidíme, je sama o sobě náhodná proměnná a pokaždé nabývá jiných hodnot. Ve skutečnosti neexistuje žádný univerzální přístup k definování toho, co znamená mít minimální chyby. Stejně jako v případě rozptylu náhodné veličiny, kdy jsme se snažili odhadnout charakteristickou šířku jejího rozptylu, i zde zvolíme pro výpočty nejjednodušší kritérium. Minimalizujeme průměr druhé mocniny chyby:

Zapišme si poslední výraz:

klíč k důkazu

Ze skutečnosti, že všechny náhodné proměnné obsažené ve výrazu pro jsou nezávislé a průměrné hodnoty chyb snímače a modelu se rovnají nule: , vyplývá, že všechny „křížové“ členy jsou rovny nule:
.
Navíc vzorce pro odchylky vypadají mnohem jednodušeji: a (od )

Tento výraz nabývá minimální hodnoty, když (derivaci srovnáme s nulou)

Zde již píšeme výraz pro Kalmanův koeficient s indexem kroku, čímž zdůrazňujeme, že závisí na kroku iterace.
Do výrazu pro střední čtvercovou chybu dosadíme hodnotu Kalmanova koeficientu, která ji minimalizuje. Dostáváme:

Náš problém je vyřešen. Získali jsme iterační vzorec pro výpočet Kalmanova koeficientu.

Všechny vzorce na jednom místě


Příklad

Na reklamním obrázku na začátku článku jsou filtrována data z fiktivního GPS senzoru nainstalovaného na fiktivním autě, které jede rovnoměrně se známým fiktivním zrychlením.

Podívejte se znovu na výsledek filtrování


Kód Matlab

vymazat vše; N=100% počet vzorků a=0,1% zrychlení sigmaPsi=1 sigmaEta=50; k=1:N x=k x(1)=0 z(1)=x(1)+normrnd(0,sigmaEta); pro t=1:(N-1) x(t+1)=x(t)+a*t+normrnd(0,sigmaPsi);

z(t+1)=x(t+1)+normrnd(0,sigmaEta); konec; %kalmanův filtr xOpt(1)=z(1); eOpt(1)=sigmaEta; % eOpt(t) je druhá odmocnina z rozptylu chyb (rozptyl). Není to náhodná proměnná. pro t=1:(N-1) eOpt(t+1)=sqrt((sigmaEta^2)*(eOpt(t)^2+sigmaPsi^2)/(sigmaEta^2 +eOpt(t)^2+sigmaPsi^2)) K(t+1)=(eOpt(t+1))^2/sigmaEta^2 xOpt(t+1)=(xOpt(t)+a*t )*(1-K(t+1))+K(t+1)*z(t+1) konec (k,xOpt,k,z,k,x)

Analýza

Pokud budete sledovat, jak se Kalmanův koeficient mění s iteračními kroky, můžete ukázat, že se vždy ustálí na určité hodnotě. Například, když střední kvadratická chyba senzoru a modelu má poměr deset ku jedné, pak graf Kalmanova koeficientu v závislosti na kroku iterace vypadá takto:

V následujícím příkladu si probereme, jak nám to může výrazně usnadnit život.

Druhý příklad

Ale upřímně řečeno, takový systém již nesplňuje podmínky, které jsme kladli na náhodnou veličinu, protože nyní je tam skryta veškerá neznámá fyzika pohybu, a proto nemůžeme říci, že v různých časových okamžicích jsou chyby modelu nezávislé na navzájem a že jejich průměrné hodnoty jsou nulové. V tomto případě obecně není teorie Kalmanova filtru použitelná. Tomuto faktu ale nebudeme věnovat pozornost, ale hloupě použijeme všechen ten kolos vzorců, vybíráme koeficienty od oka, aby filtrovaná data vypadala pěkně.
Ale můžete jít jinou, mnohem jednodušší cestou. Jak jsme viděli výše, Kalmanův koeficient se vždy stabilizuje na hodnotu s rostoucím číslem kroku. Proto místo vybírání koeficientů a hledání Kalmanova koeficientu pomocí složitých vzorců můžeme tento koeficient považovat vždy za konstantu a vybrat pouze tuto konstantu. Tento předpoklad nezkazí téměř nic. Zaprvé již ilegálně používáme Kalmanovu teorii a zadruhé se Kalmanův koeficient rychle ustálí na konstantu. Nakonec bude vše mnohem jednodušší. Nepotřebujeme vůbec žádné vzorce z Kalmanovy teorie, stačí vybrat přijatelnou hodnotu a vložit ji do iteračního vzorce:

Následující graf ukazuje data filtrovaná dvěma různými způsoby z fiktivního senzoru. Za předpokladu, že nevíme nic o fyzice jevu. První metoda je poctivá, se všemi vzorci z Kalmanovy teorie. A druhý je zjednodušený, bez vzorců.

Jak vidíme, metody se téměř neliší. Malý rozdíl je pozorován pouze na začátku, kdy se Kalmanův koeficient ještě nestabilizoval.

Diskuse

Jak jsme viděli, hlavní myšlenkou Kalmanova filtru je, že potřebujeme najít takový koeficient, aby byla filtrovaná hodnota

V průměru by se nejméně lišila od skutečné hodnoty souřadnice. Vidíme, že filtrovaná hodnota je lineární funkcí naměřené hodnoty senzoru a předchozí filtrované hodnoty. A předchozí filtrovaná hodnota je zase lineární funkcí čtení senzoru a předchozí filtrované hodnoty. A tak dále, dokud se řetěz zcela neotočí. To znamená, že filtrovaná hodnota závisí na každý předchozí hodnoty senzoru lineárně:

Proto se Kalmanův filtr nazývá lineární filtr.
Je prokazatelné, že ze všech lineárních filtrů je Kalmanův filtr nejlepší. Nejlepší v tom smyslu, že průměrná kvadratická chyba filtru je minimální.

Vícerozměrný případ

Celou teorii Kalmanova filtru lze zobecnit na vícerozměrný případ. Vzorce tam vypadají trochu děsivěji, ale myšlenka jejich odvození je stejná jako v jednorozměrném případě. Můžete je vidět v tomto skvělém článku:


Nahoru