Адрес кода на гитхабе:GitHub.com/Лю Чжэньбо О/…
1. Вероятностная модель задачи SLAM
1.1 Максимум апостериорно к методу наименьших квадратов
Проблема SLAM на самом деле является проблемой оценки состояния, которая заключается в выводе количества состояния на основе серии наблюдений; в общем, мы строим проблему SLAM в рамках теории вероятностей.
Грубо говоря, SLAM должен решить такую задачу апостериорной вероятности:
втекущее состояние системы,— наблюдаемая величина, связанная с величиной состояния; после получения этой условной вероятности наблюдаемая величина равнапринесите, вы можете получить, то есть то распределение, которое нам нужно.
Разложить по формуле вероятности:
где знаменатель - константа, как нормировочный коэффициент, поэтому его также можно записать как:
выраженный визвестен,Распределение вероятности ; при нахожденииПосле этого поставитьвносить, получать, который также известен как термин правдоподобия, он выражается вВ случае принятия различных значенийВероятность.
Также известен как априорный, то есть до наблюденияКакому распределению он следует. Это можно получить из других источников информации, таких как GPS, инерциальная навигация и т. д. Если какая-либо априорная информация о распределении неизвестна заранее, ее можно установить на 1, что означает, что априорной информации не верят, и оценка основана только на измерениях, используемых системой.
Поскольку каждое наблюдение не зависит друг от друга, приведенную выше формулу можно записать в виде:
Отрицательное логарифмирование дает:
Если сделать предположение о наблюденииследовать распределению Гаусса;априориподчинитьсяТогда есть:
Без предварительных знаний это можно записать так:
Очевидно, что в процессе SLAM в систему постоянно добавляются новые остаточные члены, а упомянутая выше задача наименьшего умножения постоянно расширяется.
1.2 Решение для нелинейной оптимизации
Пусть вектор текущего состояния равен x, а размерность n, выразим невязку в виде вектора:
Здесь мы используем норму Махаланобиса, а функция потерь определяется как:
Помните, то можно получить:
Разложение Тейлора функции невязки дает приближение первого порядка:
Тогда функция потерь может быть аппроксимирована следующим образом:
Таким образом, функция потерь преобразуется примерно вквадратичная функция от , и еслиположительно определенный, то функция потерь имеет минимальное значение.
О приведенной выше формулеВзяв первую производную и приравняв ее к нулю, получим:
также часто пишется как
Таким образом, вы можете получить приращение, таким образом, текущее решение может непрерывно оптимизироваться до тех пор, пока ошибка не станет меньше порога. Этот метод называется методом Гаусса-Ньютона.
Однако на практике для решения вышеприведенного уравнения требуетсяМатрица обратима, и в программировании я часто сталкиваюсьСитуация необратима, поэтому я использую метод Левенберга-Марквардта в реальном коде. Он улучшает метод Гаусса-Ньютона и добавляет коэффициент демпфирования следующим образом:
Я не углубляюсь в итерации здесьСтратегия динамического выбора просто дает фиксированное значение 0,1.
2. Постановка задачи
Робот носит какой-то радарный датчик и движется в 2D-плоскости.Как получить собственное позиционирование по данным датчика с шумом?
Предполагать:
(1) В 2D-плоскости есть несколько ориентиров с разными идентификационными номерами.
(2) Датчик используется для наблюдения за информацией о точках дорожной разметки.Диапазон наблюдения представляет собой круг с собственным положением в качестве начала координат и r в качестве радиуса. Существует три наблюдаемых величины: первая наблюдаемая величина — это значение x опорных точек в диапазоне обнаружения в системе координат датчика, удовлетворяющее нормальному распределению, вторая наблюдаемая величина — это значение y опорных точек в области обнаружения. в системе координат датчика , удовлетворяющей нормальному распределению, третье наблюдение – это номер id точки-ориентира.
Как показано ниже:
2.1 Система координат
Для системы координат датчикаПредставлено, глобальная система координат используетВыражать. На карте есть знак препинания, текущее положение датчика, то есть:
в:
2.2 Модель движения
Пусть сумма ввода будет, текущий момент в локальной системе координат РЛС (,) точка как положение радара в следующий момент:
Его ориентация меняется как:
2.3 Модель наблюдения
Предположим, что наблюдаемое состояние контрольной точки L равно (,), текущее состояние датчика, уравнение наблюдения выглядит следующим образом:
3. Технические решения
3.1 Отслеживание внешнего интерфейса
Есть две основные цели внешнего отслеживания:
(1) Ассоциация данных о состоянии
(2) Найдите начальное значение нового состояния.
Связь данных здесь может быть установлена в соответствии с идентификационным номером ориентира в информации наблюдения; здесь мы в основном обсуждаем оценку начального значения состояния.
Идея алгоритма: сначала зафиксируйте оценочное значение старого состояния, а затем установите функцию ошибки для нового состояния позы робота через результаты ассоциации данных и получите начальную оценку новой позы; затем напрямую получите новую позу по новой позе и уравнению наблюдения Начальная оценка состояния точки карты.
Предположим, что L_i — это состояние ориентира в старом состоянии, оценка которого известна как, пусть текущее состояние новой позы будет, предыдущее наблюдение известно какТогда имеет место следующая зависимость: Пусть текущая поза нового робота в состоянии P будет, старый ориентир L, который можно наблюдать в текущий момент, его состояние,, что наблюдается какТогда можно построить следующую грубую оптимизационную функцию:
О статусеМатрица Якоби:
Наша цель оценить, для успешного отслеживания точки можно добавить матрицу субякобиана.Чем больше точек отслеживается, тем точнее, но и больше времени.В коде используется пятиточечный метод и используется алгоритм LM. Начальное значение устанавливается в состояние положения робота в предыдущий момент.
Фронтенд секция дает начальное значение, так что этого достаточно, тем более, что ассоциация данных здесь детерминированная, и нет внешней точки, бэкенд-оптимизация полностью компенсирует недостатки фронтенда.
3.2 Оптимизация скользящего окна
3.2.1 Структура диаграммы
Отношения между состояниями SLAM можно представить в виде графика, как показано на следующем рисунке:
По мере того, как робот продолжает исследовать новые среды, этот граф продолжает расширяться, и мы называем его здесь окном состояния.
установить наблюдение в окне, общее количество состояний равно,размерность, то остаточный член: Рассчитанные с использованием введенного ранее метода LM, есть:
Предположим, естьнаблюдений, то приведенную выше формулу можно расширить следующим образом:
Таким образом, по мере того, как мы продолжаем получать новые наблюдения, мы продолжаем вводить новые наблюдения виОн добавляется к обеим частям уравнения решения для итеративной оптимизации.
Основное содержание этого раздела состоит в том, чтобы:
Матрица субякобиана для состояний положения робота:
Субякобиановая матрица для состояний точек карты:
Что касается вышеупомянутых двух субякобиевых матриц вПозиция размещения в основана на векторе состоянияОпределяется порядок, в котором в нем располагаются подсостояния. Здесь необходимо сначала указать, что каждая величина состояния находится вв порядке размещения.
Предположим, что в скользящем окне есть состояния положения робота в m последовательных моментов времени., каждый моментСостояние наблюдаемой новой точки карты (обратите внимание на новую точку карты), то порядок величин состояния указывается следующим образом.Конечно, эта спецификация предназначена для удобства матричных операций в более поздней маргинализации:
Следующее уравнение определяет функцию наблюдения:
Следующие особые требованияи:
3.2.2 Шульбулл и маргинализация
Очевидно, что с течением времени состояние системы становится все больше и больше,Чем больше массив, тем больше объем вычислений, поэтому здесь используется метод скользящего окна для управления масштабом оптимизации в пределах определенного интервала.
Ключевым моментом метода скользящего окна является то, как поступать с отброшенным наблюдением, отбрасывать ли его напрямую или преобразовывать в ограничение на оставшуюся величину состояния.
Очень интуитивная идея состоит в том, чтобы поместить самые последниеПеременные позы робота кадра и состояния связанных с ними точек карты оставляются, а остальные отбрасываются, и заново устанавливается новое уравнение ошибки. Очевидно, что это эквивалентно отбрасыванию некоторых ограничений, так что часть информации теряется, поэтому здесь используется метод маргинализации, чтобы получить априор отброшенных наблюдений.
Принятая здесь стратегия такова: для скользящего окна, которое только что было оптимизировано, еслиЕсли максимальное количество поз превышает указанное число, то самое раннее состояние позы и все состояния точек карты, которые имеют отношение наблюдения с ним, маргинализируются и записываются как, остальные оставшиеся состояния записываются как.
Соответствующие наблюдения иСформулированная задача наименьших квадратов:
Это:
С помощью Schurbull мы можем получить:
Это дает нам априорную информацию в отброшенных наблюдениях:
При следующей оптимизации скользящего окна наблюдения в скользящем окне такие же, как и в скользящем окне.Новая задача наименьших квадратов формируется как:
Добавление предыдущего:
3.2.3 FEJ обеспечивает согласованность системы
На самом деле, наша стратегия маргинализации, описанная выше, уже гарантировала, потому что мы маргинализируем самое раннее состояние позы и все состояния точек карты, которые имеют с ним отношения наблюдения, что гарантирует, что функция ошибки не будет линеаризована в двух разных точках, что также гарантирует, что предыдущий членс текущимне будет конфликтовать.
4. Дизайн системы
4.1 Типы данных
Класс ориентира: используется для моделирования фактической 2D-среды и хранения различной информации об окружающей среде.
Класс Movemodel: используется для имитации движения робота, сохранения реального положения движения робота и предоставления его классу наблюдения.
Класс меры: хранение информации об измерении и получение информации об измерении.
Класс Frame: это абстрактный класс, предназначенный для узлов поз. У него две основные цели: одна — хранить текущую позу, а другая — устанавливать связи с точками карты.
Класс Mappoint: абстрактный класс, предназначенный для ориентиров, который имеет две основные цели: одна — хранить предполагаемое местоположение точки карты, другая — устанавливать связь с фреймом.
Класс Гауссньютона. Этот класс представляет собой линейный решатель метода наименьших квадратов.
Класс Draw: он хранит адрес основного абстрактного класса и отображает нужные данные.
Класс Slidewindowgraph: класс скользящего окна является наиболее важным членом данных.Он использует указанные выше типы данных для завершения внешней ассоциации данных и внутренней оптимизации скользящего окна.
4.2 Логика кода
Ядром всего процесса системы является поддержка класса Slidewindowgraph, В частности, начиная с main.py, код понятен, а модули различны.
5. Результаты моделирования
Только внешнее отслеживание, внутренняя оптимизация удалена. Откройте файл slidewindow_graph.py, закомментируйте self.Optimize_graph() в функции def Update(self, Measure), и результат будет таким:
Используется внутренняя оптимизация, но не используется скользящее окно, а количество состояний сохраняется. Откройте файл slidewindow_graph.py и закомментируйте self.Get_prior() и self.Cut_window() в функции def Optimize_graph(self). Результат:
Используйте внутреннюю оптимизацию, используя скользящие окна, но без предварительной информации. Откройте файл slidewindow_graph.py и закомментируйте self.Get_prior() в функции def Optimize_graph(self).Результат:
Используйте внутреннюю оптимизацию, используйте скользящие окна, используйте предварительную информацию. Результатом его работы является:
Описание каждого элемента на рисунке: красная звезда — фиксированный ориентир в окружающей среде, синяя точка — расчетное значение положения ориентира в текущем окне состояния, красный квадрат — расчетное значение положения робота в текущем окно состояния, а синий квадрат — это кадр между предыдущим и предыдущим кадрами.Пять точек состояния для отслеживания времени.
По результатам моделирования эффект глобальной оптимизации без скользящего окна является лучшим; при использовании скользящего окна эффект использования априори не очевиден; только при использовании внешнего метода пятиточечного отслеживания эффект очень плохой.