Две вещи.
Если вы планируете выполнять сопоставление, вам нужен полноценный алгоритм одновременной локализации и сопоставления (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). Я успешно использовал расширенный фильтр Калмана для наружного наземного вездехода с дифференциальным приводом.