Пост фильтр для устранения дребезга сервомашинок.

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Sencis, 1 май 2019.

  1. Sencis

    Sencis Гик

    В данном случае колебания возникнут из-за того, что накопившиеся (старые) данные до их замещения новыми значениями будут выдавать неверный результат, что является аналогом инерции данные плавно накапливаются потом замещаются другими и этот переходный процесс занимает время (несколько тактов фильтра) за это время производная скорости или рассогласование могут несколько раз померятся это и приводит к раскачке. Можно уменьшать кол-во накопленных данных тогда реакция будет быстрее но фильтруемое значение будет обладать большим шумом, это характерно для любого сглаживания. Для сервомашинки что-бы исключить дребезг шум должен быть исключён полностью т.е. только конкретное значение и при этом как можно быстрее.

    Задача была решена округлением числа, что убрало шум в ущерб точности (другого решения пока не нашёл). Но учитывая передаточное число сервомашинки на управляющие поверхности округление не существенно отразится на управлении.
     
  2. parovoZZ

    parovoZZ Гуру

    Я правильно понимаю - снова не получилось выжать максимум из дешевого железа?
     
  3. Daniil

    Daniil Гуру

    можно усложнить.
    Если модуль разности нового и старого значений < 2*шума, то можно включать усреднение и тихонько приближаться к истине. Если больше шума, то не усредняем, а округляем.
    В таком случае при усреднении не будет скачков, которые вы боитесь, и точность повысите.
     
    Последнее редактирование: 3 май 2019
  4. Sencis

    Sencis Гик

    Ну в общем да, хотя если сравнить с аналогами 3 град точности ещё не совсем плохо, датчики по дороже BNO 055 около 2 град на выходе фильтра, итог на то и выходит но главной проблемой на мой взгляд является GPS его показания отфильтровать очень сложно на близкой дистанции расчёт азимута сильно шумит и вносит основной вклад в эту ошибку.
     
    Последнее редактирование: 3 май 2019
  5. Sencis

    Sencis Гик

    Я думаю в дальнейшем идти другим путём есть модели управления полётом с предсказанием траектории где ещё до закладки маневра приблизительно рассчитывается параметры инерция, скольжение.. в такой модели используется больше датчиков и есть привязка ко времени это позволяет совершать маневр более точно т.к. программа уже приблизительно знает нужные расходы отклоняющих поверхностей и только вносит небольшие корректировки (кстати делает маневр очень плавно) такой алгоритм более надёжен может даже кратковременно ориентироваться без IMU на своих расчётах. Там много аналитики можно докторскую защитить но возможно мне удастся разобраться в упрощённом варианте. А пока этой точности достаточно.
     
    Последнее редактирование: 3 май 2019
  6. fv1144

    fv1144 Нерд

    Проблема не в шуме, а в том, что он накапливает ошибку. Т.е. его нельзя просто так отрезать средней - средняя поползет и опять будет шум, только уже посильнее, так что без интегрирования тут никак, только на скорость реакции это не влияет. Например, фильтр Винера.
     
  7. sslobodyan

    sslobodyan Гик

    По моему скромному опыту у вас всего два варианта.
    1. Фильтровать задатчик угла сервы. Дерганья останутся, но будут более редкими.
    2. Если точность задатчика уже устраивает, но не устраивает дерганье, то задайте гистерезис. К примеру, задатчик выдает угол с дискретой 0.2 градуса. Выбираете гистерезис 0.5 градуса. Запоминаете текущее положение задатчика и отправляете его серве. Получаете следующие позиции задатчика и если модуль разности запомненной позиции задатчика и текущей его позиции равен или больше гистерезиса, то снова запоминаете текущее положение задатчика и отправляете его серве.