Перейти к основному содержимому

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

Мобильный робот фильтрует шумные измерения датчика

Датчик редко выдаёт идеальную линию чисел. В показаниях бывают мелкие колебания, одиночные выбросы, медленный уход нуля и пропуски. Фильтр помогает сделать результат устойчивее, но может задержать реакцию робота.

Коротко

Фильтрация уменьшает шум, но не исправляет неправильное подключение, неверную калибровку и плохую установку датчика. Перед фильтром нужно проверить диапазон, свежесть и физический смысл значения. После фильтра нужно проверить задержку.

Зачем это нужно

Робот подъезжает к коробке. HC-SR04 несколько раз показывает около 42 см, затем один отсчёт вдруг даёт 240 см. Датчик линии дрожит около порога на блестящем участке. MPU6050 на неподвижном столе показывает маленькое ненулевое вращение. Если использовать эти числа без проверки, робот может дёргаться или поздно тормозить.

Примеры датчиков

Сигналы, которые приходится фильтровать

ДатчикТипичный дефект сигналаЧто проверить до фильтраКакой вопрос задать
HC-SR04одиночные выбросы и потеря эхадиапазон, тайм-аут, угол объектавыброс или реальное препятствие?
QTR-8Aшум около границы линиикалибровку белого и чёрногофильтр не опоздает на повороте?
MPU6050шум, смещение, дрейфноль в покое, метки времениможно ли доверять интегрированному углу?
DHT22медленная реакцияпериод опроса и место установкифильтр нужен или датчик физически медленный?

Главный вопрос: что мы хотим исправить — шум, выброс, дрейф или ошибку установки? Разные проблемы требуют разных действий.

Главная идея

Обработка одного измерения обычно идёт так:

сырое значение -> проверка диапазона -> калибровка -> фильтр -> решение робота

Фильтр стоит после проверки грубых ошибок. Нельзя усреднять всё подряд: старые данные, NaN, значение вне рабочего диапазона или явный сбой связи должны быть отбракованы отдельно.

Сглаживание уменьшает шум, но добавляет задержку

Шум, выброс и дрейф

СимптомКак выглядитЧто делать
Шуммелкое дрожание около уровнясреднее или фильтр первого порядка
Выбросодин резкий скачокпроверка диапазона, медиана, правило скорости изменения
Дрейфмедленный уход нуля или масштабаповторная калибровка, контроль температуры
Пропускнет нового значениястатус ошибки, остановка или резервный режим

Один фильтр не решает всё. Скользящее среднее уменьшит шум, но одиночный крупный выброс всё равно потянет результат. Медиана лучше переживает один выброс, но не спасает от долгой серии неверных значений.

Простые фильтры

МетодИдеяСильная сторонаРиск
Скользящее среднеесреднее из N последних отсчётовпросто объяснить и написатьзадержка растёт вместе с N
Медианацентральное значение в окнехорошо убирает одиночный выбростребует хранения окна
Фильтр первого порядкановое значение постепенно тянет результатмало памяти, плавная настройкаслишком большое сглаживание старит данные
Гистерезисразные пороги включения и выключенияубирает дрожание около границыне подходит для точной шкалы сам по себе

Для датчика линии обычно опасна большая задержка. Для температуры воздуха задержка часто допустима, потому что сама физическая величина меняется медленно. Для дальномера перед торможением нужно проверять фильтр на реальной скорости робота.

Как выбирать размер фильтра

Выбор начинается не с желания получить красивый график, а с допустимой задержки. Если робот опрашивает датчик линии 100 раз/с, окно из 10 измерений может добавить заметную задержку на повороте. Если температура обновляется раз в секунду, среднее из нескольких значений может быть нормальным.

Проверка простая:

  1. записать сырые данные на реальном роботе;
  2. применить фильтр к записанному ряду;
  3. сравнить шум до и после;
  4. измерить, на сколько позже фильтр замечает резкое изменение;
  5. проверить, остаётся ли управление безопасным.

Что запомнить про фильтрацию

  • Фильтр уменьшает разброс, но добавляет задержку.
  • До фильтра нужно отбросить явно неверные значения.
  • Дрейф лечат калибровкой и проверкой условий, а не простым средним.
  • Размер окна выбирают по скорости задачи.
  • В журнал полезно писать и сырое, и отфильтрованное значение.

Практика

  1. Запишите ряд значений датчика с одним резким выбросом и сравните среднее с медианой.
  2. Для датчика линии проверьте, при каком окне робот начинает поздно входить в поворот.
  3. Для дальномера сравните сырое расстояние и фильтр перед реальным торможением.

Проверьте себя

  1. Почему нельзя фильтровать значения вне допустимого диапазона как обычные числа?
  2. Чем шум отличается от дрейфа?
  3. Почему большой фильтр опасен для быстрого робота?
  4. Зачем хранить сырые значения после добавления фильтра?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

  • формулируете основную мысль своими словами;
  • называете важные условия, ограничения или меры безопасности;
  • для схемы, кода или расчёта показываете ход решения и ожидаемый результат.

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

  • Шум — небольшие случайные колебания измерения.
  • Выброс — редкое значение, сильно отличающееся от соседних.
  • Дрейф — медленное изменение смещения или масштаба.
  • Медиана — центральное значение отсортированного набора.
  • Задержка фильтра — время, на которое обработанный сигнал отстаёт от реального изменения.

Связанные темы

Источники