Каковы методы борьбы с компасом (гистерезис, зависящий от скорости)?

12

У меня есть робот с приводом от протектора, с колесными энкодерами низкой точности для отслеживания расстояния и электронным компасом для определения курса. Компас имеет значительную (> 1 секунды) задержку, когда робот быстро поворачивает, например, после достижения путевой точки - поворота на месте, чтобы указать его новый курс.

Какие способы борьбы с отставанием? Я думаю, что можно было бы сделать много измерений и смоделировать реакцию компаса. Тем не менее, это кажется проблематичным, так как это зависит от скорости, и я не знаю мгновенную скорость.

В качестве простого, но медленного подхода, я делаю поворот робота, пока он не будет очень грубо направлен в правильном направлении, затем делаю очень маленькие пошаговые повороты с короткими паузами измерения, пока он не будет направлен в правильном направлении. Есть ли другие способы борьбы с этим?

ViennaMike
источник

Ответы:

12

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

  • Существуют более дорогие магнитометры, которые имеют меньший шум и, следовательно, меньшую задержку.
  • Также можно использовать гироскоп для повышения точности. Фактически, это то, что делают единицы измерения инерции (IMU). Это может быть достигнуто с помощью фильтра Калмана. Повышение точности помогает уменьшить задержку, потому что повышенная точность снижает зависимость от фильтра нижних частот для подавления шума. Фильтр Калмана объединяет данные магнитометра, а также гироскопа (который измеряет скорость изменения курса).

Если вы придерживаетесь своего текущего компаса, есть два возможных решения (Внимание, это становится все более продвинутым, но вариант 1 должен быть доступен для большинства людей без особой работы).

  1. Вы можете попробовать отменить фильтр. Это может устранить задержку, но также увеличивает высокочастотный шум. После этого вы можете попытаться управлять роботом на основе новой оценки курса. Чтобы сделать это, вы должны поэкспериментировать с параметрами фильтра нижних частот. Например, в дискретное время вы можете найти:

    где θ

    θ^(t)=a0θ(t)+a1θ(t1)++akθ(tk)
    представляет собой расчетный заголовок (выход компаса) в момент времени Т , θ - фактический курс (основная правда) в момент времени t .θ^(t)tθt

    Вы можете найти параметры , выполнив эксперимент, в котором вы измеряете основную правду, используя другие внешние средства. Принимая во внимание п + K + 1 выборки, то есть это уравнение: [ & thetas ( к ) ⋮ & thetas ; ( к + п ) ] = [ & thetas ; ( к ) & thetas ( кain+k+1

    [θ^(k)θ^(k+n)]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)][a0a1ak]

    [a0a1ak]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)]+[θ^(k)θ^(k+n)]
    M+Mkтак что вы, наверное, просто догадаетесь. Для бонусных баллов это предполагает, что шум является белым и независимым, но вы можете сначала отбелить его, чтобы устранить смещение, и, следовательно, улучшить свою оценку параметров.

    Вы можете преобразовать это в передаточную функцию (также известную как Z-преобразование в дискретной временной области):

    Θ^(z)Θ(z)=a0+a1z1+...+akzk

    θ¯(t)

    Θ¯(z)Θ^(z)=1a0+a1z1++akzk

    Преобразование обратно во временную область:

    a0θ¯(t)+a1θ¯(t1)++akθ¯(tk)=θ^(t)

    θ¯(t)=θ^(t)a1θ¯(t1)akθ¯(tk)a0

    тогда мы можем использовать θ¯

    Это будет очень шумно, так что вы можете по-прежнему ставить θ¯

  2. Вышеупомянутое решение все еще не лучший способ. Оценка шума может быть не очень полезной. Если мы поместим это в уравнение пространства состояний, мы можем разработать фильтр Калмана и контроллер обратной связи с полным состоянием, используя LQR (линейный квадратичный регулятор). Комбинация фильтра Калмана и контроллера LQR также известна как контроллер LQG (линейный квадратичный гауссов) и использует восстановление с циклическим переносом для получения хорошего контроллера.

    Чтобы сделать это, придумайте (в дискретном времени) уравнения пространства состояний:

    x(t)=Ax(t1)+Bu(t1)y(t)=Cx(t)

    x(t)=[θ(t)θ(t1)θ(tk)]=[A1A200010000010000010000010]x(t1)+[B0B1000]u(t1)

    y(t)=[θ^(t)]=[a0a1ak]x(t)

    u(t1)A0A1B0B1BA

    QoRo

    QcRcQc=[100000000000]Rc=[1]J=(xTQx+uTRu)

    Затем вы просто вводите его через алгебраическое уравнение Риккати с дискретным временем:

    P=Q+AT(PPB(R+BTPB)1BTP)A

    и решить для положительно определенной матрицы P

    Таким образом, ваш закон о контроле может быть задан:

    u(t)=K(x(t)xref(t))

    K=(R+BTPB)1(BTPA)

    θ¯ пропустите через фильтр нижних частот (хотя и не обязательно с таким большим эффективным временем задержки). Это потому, что, хотя LQR гарантированно стабильно, как только вы используете фильтр Калмана, гарантия теряется.

    Qo=Q0+q2BVBTQ0QVV=IqqQo матрица становится не настроенной, что означает, что она становится менее оптимальной.

    qRcQc ), чтобы замедлить контроллер LQR.

Концепции в этом посте достаточно продвинуты, но если вам нужно решить такие вещи, как уравнение Риккати, вы можете использовать MATLAB или другое программное обеспечение для этого. Также могут быть библиотеки, уже реализующие фильтр Калмана (опять же, я полагаю, что MATLAB также делает это).

Для встроенного приложения может потребоваться реализовать фильтр Калмана самостоятельно, хотя, вероятно, существует реализация на языке Си.

ronalchn
источник
Спасибо за отличный и подробный ответ. Я следую сути вашего первого решения и уверен, что смогу справиться с ним. Второй, как вы говорите, более сложный, и мне придется поработать, чтобы понять, смогу ли я все это выполнить.
ViennaMike
4

Гироскоп - это простой ответ. Я всегда слышал, гироскоп для коротких измерений, компас для длинных. И реально чашка фильтра Каллмана между ними большую часть времени. Цена платы 6DOF gyro / acc в наши дни составляет менее 20 долларов, слишком дешево, чтобы ее не использовать.

Одно время я работал через чужой фильтр Каллмана . и получил это работает. Фильтр Каллмана на самом деле является скорее подходом, а не точной реализацией, и в случае гироскопа конечный результат не требует использования математической математики. Это делает код намного проще.

Spiked3
источник