Фильтрация данных с датчиков

Датчик редко выдаёт идеальную линию чисел. В показаниях бывают мелкие колебания, одиночные выбросы, медленный уход нуля и пропуски. Фильтр помогает сделать результат устойчивее, но может задержать реакцию робота.
Фильтрация уменьшает шум, но не исправляет неправильное подключение, неверную калибровку и плохую установку датчика. Перед фильтром нужно проверить диапазон, свежесть и физический смысл значения. После фильтра нужно проверить задержку.
Зачем это нужно
Робот подъезжает к коробке. HC-SR04 несколько раз показывает около 42 см, затем один отсчёт вдруг даёт 240 см. Датчик линии дрожит около порога на блестящем участке. MPU6050 на неподвижном столе показывает маленькое ненулевое вращение. Если использовать эти числа без проверки, робот может дёргаться или поздно тормозить.
Примеры датчиков

| Датчик | Типичный дефект сигнала | Что проверить до фильтра | Какой вопрос задать |
|---|---|---|---|
| HC-SR04 | одиночные выбросы и потеря эха | диапазон, тайм-аут, угол объекта | выброс или реальное препятствие? |
| QTR-8A | шум около границы линии | калибровку белого и чёрного | фильтр не опоздает на повороте? |
| MPU6050 | шум, смещение, дрейф | ноль в покое, метки времени | можно ли доверять интегрированному углу? |
| DHT22 | медленная реакция | период опроса и место установки | фильтр нужен или датчик физически медленный? |
Главный вопрос: что мы хотим исправить — шум, выброс, дрейф или ошибку установки? Разные проблемы требуют разных действий.
Главная идея
Обработка одного измерения обычно идёт так:
сырое значение -> проверка диапазона -> калибровка -> фильтр -> решение робота
Фильтр стоит после проверки грубых ошибок. Нельзя усреднять всё подряд: старые данные, NaN, значение вне рабочего диапазона или явный сбой связи должны быть отбракованы отдельно.

Шум, выброс и дрейф
| Симптом | Как выглядит | Что делать |
|---|---|---|
| Шум | мелкое дрожание около уровня | среднее или фильтр первого порядка |
| Выброс | один резкий скачок | проверка диапазона, медиана, правило скорости изменения |
| Дрейф | медленный уход нуля или масштаба | повторная калибровка, контроль температуры |
| Пропуск | нет нового значения | статус ошибки, остановка или резервный режим |
Один фильтр не решает всё. Скользящее среднее уменьшит шум, но одиночный крупный выброс всё равно потянет результат. Медиана лучше переживает один выброс, но не спасает от долгой серии неверных значений.
Простые фильтры
| Метод | Идея | Сильная сторона | Риск |
|---|---|---|---|
| Скользящее среднее | среднее из N последних отсчётов | просто объяснить и написать | задержка растёт вместе с N |
| Медиана | центральное значение в окне | хорошо убирает одиночный выброс | требует хранения окна |
| Фильтр первого порядка | новое значение постепенно тянет результат | мало памяти, плавная настройка | слишком большое сглаживание старит данные |
| Гистерезис | разные пороги включения и выключения | убирает дрожание около границы | не подходит для точной шкалы сам по себе |
Для датчика линии обычно опасна большая задержка. Для температуры воздуха задержка часто допустима, потому что сама физическая величина меняется медленно. Для дальномера перед торможением нужно проверять фильтр на реальной скорости робота.
Как выбирать размер фильтра
Выбор начинается не с желания получить красивый график, а с допустимой задержки. Если робот опрашивает датчик линии 100 раз/с, окно из 10 измерений может добавить заметную задержку на повороте. Если температура обновляется раз в секунду, среднее из нескольких значений может быть нормальным.
Проверка простая:
- записать сырые данные на реальном роботе;
- применить фильтр к записанному ряду;
- сравнить шум до и после;
- измерить, на сколько позже фильтр замечает резкое изменение;
- проверить, остаётся ли управление безопасным.
Что запомнить про фильтрацию
- Фильтр уменьшает разброс, но добавляет задержку.
- До фильтра нужно отбросить явно неверные значения.
- Дрейф лечат калибровкой и проверкой условий, а не простым средним.
- Размер окна выбирают по скорости задачи.
- В журнал полезно писать и сырое, и отфильтрованное значение.
Практика
- Запишите ряд значений датчика с одним резким выбросом и сравните среднее с медианой.
- Для датчика линии проверьте, при каком окне робот начинает поздно входить в поворот.
- Для дальномера сравните сырое расстояние и фильтр перед реальным торможением.
Проверьте себя
- Почему нельзя фильтровать значения вне допустимого диапазона как обычные числа?
- Чем шум отличается от дрейфа?
- Почему большой фильтр опасен для быстрого робота?
- Зачем хранить сырые значения после добавления фильтра?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Шум — небольшие случайные колебания измерения.
- Выброс — редкое значение, сильно отличающееся от соседних.
- Дрейф — медленное изменение смещения или масштаба.
- Медиана — центральное значение отсортированного набора.
- Задержка фильтра — время, на которое обработанный сигнал отстаёт от реального изменения.
Связанные темы
- Калибровка датчиков — почему фильтр не заменяет шкалу.
- Датчики линии — где задержка фильтра особенно заметна.
- Датчики расстояния — как работать с выбросами дальномера.
Источники
- Arduino Documentation. Smoothing example.
- ROS 2 Documentation. message_filters.
- OpenCV Documentation. Smoothing Images.