Зачем сливать датчики
Урок про главную идею слияния: взять сильные стороны двух датчиков и закрыть слабые.
Слияние датчиков — объединение данных нескольких источников в одну оценку, которая точнее любого из них по отдельности.
Часто нет идеального датчика для величины — зато есть два неидеальных, ошибающихся по-разному. Один быстрый, но «уплывает»; другой стабильный, но медленный и шумный. Если их грамотно смешать, ошибки частично сокращаются.
Дополняющие слабости
Классический пример — оценка угла из IMU. Гироскоп даёт быстрый, точный угол на коротком интервале, но накапливает дрейф. Акселерометр даёт абсолютный угол без дрейфа, но шумит и врёт при тряске. У них ошибки в разных частотных диапазонах: дрейф гироскопа — низкочастотный, шум акселерометра — высокочастотный.
| Датчик | Сильная сторона | Слабая сторона |
| Гироскоп | быстрый, точный кратко | дрейф (низкие частоты) |
| Акселерометр | без дрейфа, абсолютный | шум, тряска (высокие частоты) |
Простейшее взвешенное слияние
Если две оценки $x_1$ и $x_2$ имеют дисперсии $\sigma_1^2$ и $\sigma_2^2$, оптимальная по точности смесь — взвешивание обратно дисперсиям:
$$ \hat{x} = \frac{\sigma_2^2\,x_1 + \sigma_1^2\,x_2}{\sigma_1^2 + \sigma_2^2} $$
def fuse(x1, var1, x2, var2):
return (var2*x1 + var1*x2) / (var1 + var2)
# датчик 1 точнее (var=0.5), датчик 2 грубее (var=2.0)
print(round(fuse(10.0, 0.5, 11.0, 2.0), 3))
# равная точность -> просто среднее
print(round(fuse(10.0, 1.0, 11.0, 1.0), 3))Вывод:
10.2 10.5
Как работает под капотом
Взвешивание обратно дисперсиям — это и есть сердце фильтра Калмана в статике: точному датчику верим больше, грубому — меньше. Заметьте: результирующая дисперсия меньше любой из исходных, то есть слияние действительно повышает точность, а не просто усредняет. Когда у датчиков ошибки в разных частотных диапазонах (как у IMU), вместо взвешивания по дисперсии удобнее частотное разделение — это комплементарный фильтр из следующего урока.
Частые ошибки
- Сливать датчики равными весами, когда их точности сильно разные.
- Забывать, что слияние помогает, только если ошибки датчиков независимы.
- Смешивать датчики в разных единицах или с разным смещением без приведения.
Итог
- Слияние объединяет датчики с разными слабостями в одну лучшую оценку.
- Оптимальный вес обратен дисперсии: точному датчику — больше доверия.
- Результирующая точность выше, чем у каждого датчика по отдельности.