Две вещи.
Если вы планируете выполнять сопоставление, вам нужен полноценный алгоритм одновременной локализации и сопоставления (SLAM). См .: Одновременная локализация и картирование (SLAM): Часть I Основные алгоритмы . В SLAM оценка состояния робота - это только половина проблемы. Как это сделать, это больший вопрос, чем здесь можно ответить.
Что касается локализации (оценки состояния робота), это не работа для фильтра Калмана. Переход от
к x ( t + 1 )х ( т ) = [ х , у, х˙, у˙, θ , θ˙]х ( т + 1 )не является линейной функцией из-за угловых ускорений и скоростей. Поэтому вам нужно учитывать нелинейные оценки для этой задачи. Да, есть стандартные способы сделать это. Да, они доступны в литературе. Да, обычно все входы помещаются в один и тот же фильтр. Положение, скорость, ориентация и угловая скорость робота используются в качестве выходных данных. И да, я представлю краткое введение в их общие темы здесь. Основные блюда на вынос
- включите смещение гироскопа и IMU в вашем штате, иначе ваши оценки будут расходиться
- Расширенный фильтр Калмана (EKF) обычно используется для этой задачи
- Реализации могут быть получены с нуля, и обычно их не нужно искать.
- Реализации существуют для большинства проблем локализации и SLAM, поэтому не выполняйте больше работы, чем нужно. См .: Робот Операционная Система ROS
Теперь, чтобы объяснить EKF в контексте вашей системы. У нас есть IMU + гироскоп, GPS и одометрия. Робот, о котором идет речь, является дифференциальным приводом, как уже упоминалось. Фильтрации задача состоит в том, чтобы принять текущую оценку позу робота
х т , управляющих входов у т и измерений от каждого датчика, г т , и произвести оценку на следующем временном шаге
х т + 1 . Мы назовем измерения IMU I t , GPS - это G t , а одометрия - O t .Икс^TUTZTИкс^т + 1яTгTОT
Я предполагаю , что мы заинтересованы в оценке робота позу , как
. Проблема с IMU и гироскопами - дрейф. Существует нестационарное смещение ускорений, которое вы должны учитывать в EKF. Это делается (обычно) путем перевода смещения в расчетное состояние. Это позволяет напрямую оценивать смещение на каждом временном шаге.
x t = x , y , ˙ x , ˙ y , θ , ˙ θ , bИксT= х , у, х˙, у˙, θ , θ˙ИксT= х , у, х˙, у˙, θ , θ˙, бдля вектора смещений .б
Я предполагаю, что:
- = два измерения расстояния, представляющие расстояние, пройденное протекторами с небольшим приращением времениОT
- = три измерения ориентации α , β , θ и три измерения ускорения ¨ x , ¨ y , ¨ z .яTα , β, θИкс¨, у¨, z¨
- = положение робота вглобальномфрейме,
G x t , G y t .гTгИксT,гYT
Как правило, результат управляющих входов (желаемых скоростей для каждого протектора) сложно сопоставить с выходами (изменение позы робота). Вместо , обычно (см Thrun , одометрии вопрос ) использовать одометрии как «результат» контроля. Это предположение хорошо работает, когда вы не находитесь на поверхности, почти свободной от трения. Как мы увидим, IMU и GPS могут помочь исправить проскальзывание.U
Таким образом, первая задача состоит в том, чтобы предсказать следующее состояние из текущего
. В случае робота с дифференциальным приводом это предсказание может быть получено непосредственно из литературы (см. «Кинематика колесных мобильных роботов» или более краткая трактовка в любом современном учебнике по робототехнике) или получено с нуля, как показано здесь: Вопрос по одометрии .Икс^т + 1= ф( х^T, уT)
Таким образом, теперь мы можем предсказать х т + 1 = F ( х т , О т ) . Это этап распространения или прогнозирования. Вы можете управлять роботом, просто размножаясь. Если значения O т являются абсолютно точными, вы никогда не будете иметь оценку х , не в точности равно ваше истинное состояние. Это никогда не происходит на практике.Икс^т + 1= ф( х^T, OT)ОTИкс^
Это дает только прогнозируемое значение из предыдущей оценки и не говорит нам, как точность оценки ухудшается со временем. Таким образом, для распространения неопределенности вы должны использовать уравнения EKF (которые распространяют неопределенность в замкнутой форме при допущениях по гауссовскому шуму), фильтр частиц (который использует подход на основе выборки) *, UKF (который использует точечную оценку) приближение неопределенности) или один из множества других вариантов.
пTеTпTUT2 × 2.1 × I2 × 2е
FИкс= ∂е∂ИксFU= ∂е∂U
пт + 1= FИкс∗ PT∗ FTИкс+ FU∗ UT∗ FTU
яTгT
часг( )чася( )рргрячас
sZs
vs= zs- чs( х^т + 1)
Ss= Hs∗ Pт + 1∗ HTs+ Rs
К= Pт + 1∗ HTsS- 1s
Икс^т + 1= х^т + 1- К∗ v
пт + 1= ( Я- К∗ Hs) ∗ Pт + 1
Zг= чг( )ЧАСгрг
Zя= чя( )пяряпя, Включение обновления для предвзятости является более сложным, и из моего опыта. Однако, поскольку вы заинтересованы в плоском движении, вы, вероятно, можете упростить задачу. Вам придется искать в литературе для этого.
Некоторые необычные ссылки:
Повышение точности визуально-инерциальной одометрии на основе EKF
Согласованные оценки EKF на основе наблюдаемости для совместной работы нескольких роботов
Адаптивный двухступенчатый EKF для слабосвязанной системы INS-GPS с неизвестным смещением ошибки
Это поле достаточно развито, чтобы Google (ученый) мог найти вам работающую реализацию. Если вы собираетесь много работать в этой области, я рекомендую вам взять солидный учебник. Может быть, что-то вроде вероятностной робототехники С. Труна из Google Car Fame . (Я нашел это полезным справочником для тех ночных реализаций).
* В операционной системе робота (ROS) доступно несколько оценок на основе PF
. Тем не менее, они были оптимизированы для использования внутри помещений. Фильтры частиц имеют дело с мультимодальными PDF-файлами, которые могут возникнуть в результате локализации на основе карт (я рядом с этой дверью или той дверью). Я полагаю, что большинство наружных реализаций (особенно те, которые могут использовать GPS, по крайней мере с перерывами) используют Расширенный фильтр Калмана (EKF). Я успешно использовал расширенный фильтр Калмана для наружного наземного вездехода с дифференциальным приводом.
Вы можете значительно упростить проблему в большинстве распространенных случаев:
«Типичным» решением для нас является использование одометрии + IMU для получения оценки эго-движения, а затем использование GPS для коррекции X, Y, Z и смещения курса.
Вот реализация EKF, которую мы широко использовали. Если вам необходимо оценить ориентацию IMU (то есть, если он еще не имеет встроенного фильтра), вы также можете использовать один из этих двух фильтров: UKF и EKF .
источник