🚦 Прогнозування дорожніх заторів — фільтр Калмана в реальному часі
Спостерігайте, як справжній фільтр Калмана в реальному часі об'єднує зашумлені показання симульованих датчиків, щоб оцінювати та прогнозувати швидкість руху на дорожній ділянці, справді зменшуючи невизначеність з кожним оновленням вимірювання. Налаштуйте шум процесу та шум вимірювання, створіть затори та відключення датчика, і спостерігайте, як коваріація зменшується та зростає точно так, як передбачають рівняння.
Про цю симуляцію
Показання швидкості дорожніх датчиків зашумлені — одна індуктивна петля чи радарний детектор може коливатися на кілька км/год від одного зразка до іншого — проте системам керування дорожнім рухом потрібна плавна, надійна, безперервно оновлювана оцінка того, наскільки насправді рухається ділянка. Ця симуляція реалізує справжній фільтр Калмана над 2-станною моделлю — швидкість та її короткостроковий тренд — яка виконує справжній крок прогнозування (екстраполяція стану через матрицю переходу стану плюс зростання коваріації шуму процесу) та справжній крок оновлення (обчислення коефіцієнта підсилення Калмана з коваріації інновації, корекція стану та чисельно стійке зменшення коваріації у формі Джозефа) для симульованих зашумлених показань датчика для однієї дорожньої ділянки. Тут немає жодного вигаданого експоненційного згладжувача: кожне число на панелі статистики — коефіцієнт підсилення Калмана, коваріація P₀₀, поточна RMSE — походить безпосередньо з тих самих лінійно-алгебраїчних рівнянь, які Рудольф Калман опублікував у 1960 році.
🔬 Що показано
Прихована «справжня» швидкість дороги розвивається з повільним трендом плюс випадковістю і може бути переведена у затор ін'єктованими подіями, які знижують і відновлюють цільову швидкість вільного потоку. Симульований датчик повідомляє цю справжню швидкість плюс гаусів шум з фіксованим інтервалом. Фільтр Калмана прогнозує вперед кожен такт — його невизначеність зростає — і коригує себе щоразу, коли надходить показання — його невизначеність зменшується — тоді як 3D-сцена шосе показує щільність та швидкість руху, а живий графік відображає справжню швидкість, зашумлені показання, оцінку Калмана та її смугу довіри ±1σ, що спочатку зменшується, а потім зростає, плюс пунктирну багатокрокову проекцію вперед.
🎮 Як користуватися
Налаштуйте шум процесу Q, щоб контролювати, наскільки фільтр довіряє раптовим змінам порівняно з власною моделлю, та шум вимірювання R, щоб контролювати, наскільки шумним є симульований датчик (і, отже, наскільки фільтр довіряє кожному показанню). Натисніть Створити затор, щоб викликати реалістичне падіння швидкості та відновлення, або Відключення датчика, щоб призупинити вимірювання на 8 секунд і спостерігати, як смуга довіри помітно розширюється без надходження корекцій — а потім різко звужується знову, щойно надходить нове показання.
💡 Чи знали ви?
Фільтр Калмана, що об'єднує симульований датчик швидкості цієї симуляції, математично є тим самим оцінювачем, який вів місії «Аполлон» до Місяця, і сучасні варіанти досі працюють усередині чипа GPS вашого телефона, системи утримання смуги вашого автомобіля та мереж адаптивного світлофорного регулювання по всьому місту — всі виконують точно цей танець прогнозування/оновлення, просто на багатших векторах стану.
Поширені запитання
Як фільтр Калмана поєднує зашумлений датчик швидкості з моделлю руху?
Фільтр зберігає оцінку стану — тут це швидкість дороги та її короткостроковий тренд — плюс матрицю коваріації, що описує, наскільки невизначена ця оцінка. Кожен такт він виконує крок прогнозування: стан екстраполюється вперед за допомогою простої моделі руху (x⁻ = Fx), а коваріація зростає, відображаючи шум процесу (P⁻ = FPFᵀ + Q). Коли надходить нове зашумлене показання датчика, крок оновлення обчислює коефіцієнт підсилення Калмана K = P⁻Hᵀ(HP⁻Hᵀ + R)⁻¹, підштовхує стан до вимірювання на K, помножене на інновацію, і зменшує коваріацію. Коефіцієнт підсилення автоматично балансує довіру між моделлю та датчиком на основі їхньої відповідної невизначеності — це не фіксований коефіцієнт згладжування.
Що насправді контролюють повзунки шуму процесу Q та шуму вимірювання R?
Q — це припущена інтенсивність шуму процесу фільтра: вона визначає, наскільки стан може дрейфувати між вимірюваннями під час кроку прогнозування, збільшуючи матрицю коваріації P на величину, отриману з дискретизованої моделі білого шуму прискорення. Більше значення Q робить фільтр більш чутливим, але більш шумним. R — це припущена дисперсія шуму вимірювання, пов'язана з фактичним стандартним відхиленням шуму симульованого датчика. Більше значення R робить коефіцієнт підсилення Калмана меншим, тому кожне нове показання менше підштовхує оцінку, оскільки фільтр довіряє власному прогнозу більше, ніж зашумленому датчику.
Чому невизначеність оцінки зменшується після кожного оновлення, але зростає між оновленнями?
Крок прогнозування додає коваріацію шуму процесу Q до P кожен такт, тому дисперсія оцінки швидкості строго зростає, поки не надходить нова інформація. Потім крок оновлення застосовує формулу коваріації у формі Джозефа P = (I−KH)P⁻(I−KH)ᵀ + KRKᵀ, яка математично гарантовано дає коваріацію не більшу за P⁻, коли R додатне — показання датчика, хоч би яким зашумленим воно було, завжди усуває певну невизначеність. Живий показник P₀₀ та смуга довіри роблять цей зубчастий візерунок зростання-потім-зменшення безпосередньо видимим.
Що відбувається під час відключення датчика і чому смуга довіри розширюється?
Натискання «Відключення датчика» призупиняє оновлення вимірювань на 8 симульованих секунд, тому фільтр повторно виконує крок прогнозування без коригувального оновлення між ними. Кожен крок прогнозування все ще додає коваріацію шуму процесу, тому дисперсія продовжує неконтрольовано накопичуватися, а смуга довіри ±1σ оцінки помітно розширюється на графіку — саме це показує пунктирна багатокрокова проекція вперед у найближче майбутнє навіть поза межами відключення, достовірна ілюстрація рахування шляху.
Чи це та сама математика, що використовується в реальних системах керування дорожнім рухом?
По суті, так. Реальні інтелектуальні транспортні системи об'єднують показання швидкості з детекторів петель, радарів або GPS-датчиків за допомогою фільтрів Калмана або близьких варіантів, іноді розширених до векторних станів, що охоплюють кілька ділянок, або перемикальних моделей, які також оцінюють режим руху. Ця симуляція використовує справжній скалярний фільтр Калмана позиції/тренду зі стандартними рівняннями прогнозування-оновлення, а не вручну налаштований згладжувач, тому коефіцієнт підсилення, зростання коваріації та зменшення коваріації, які ви бачите, є справжніми.
Чому стан включає термін тренду замість того, щоб просто відстежувати саму швидкість?
1-станний фільтр, що відстежує лише швидкість, змушений трактувати кожне відхилення як шум, тому він завжди відстає від справжнього тренду, такого як наростання в годину пік або відновлення після затору. Додавання стану тренду дозволяє матриці переходу стану F=[[1,dt],[0,1]] екстраполювати швидкість вперед, використовуючи цей тренд під час кожного кроку прогнозування, тому фільтр передбачає продовження прискорення чи уповільнення, а не лише реагує постфактум — найпростіша версія моделі позиції-швидкості, що використовується у відстеженні GPS та радарів.
Справжній 2-станний (швидкість, тренд) фільтр Калмана виконує справжні рівняння прогнозування (F, Q) та оновлення (коефіцієнт підсилення Калмана, коваріація у формі Джозефа) для симульованих зашумлених показань дорожнього датчика, з регульованим шумом процесу та вимірювання, живим створенням затору, відключенням датчика та багатокроковим прогнозом вперед із зростаючою невизначеністю.
3D · рушій Three.js / WebGL · ціль 60 кадрів/с · працює повністю на клієнті, без встановлення