monteCarloLocalization

Локализуйте робота с помощью данных датчика области значений и карты

Описание

The monteCarloLocalization Системная object™ создает объект локализации (MCL) Монте-Карло. Алгоритм MCL используется, чтобы оценить положение и ориентацию транспортного средства в его окружении с помощью известной карты среды, данных скана лидара и данных датчика одометрий.

Чтобы локализовать транспортное средство, алгоритм MCL использует фильтр частиц, чтобы оценить положение транспортного средства. Частицы представляют распределение вероятных состояний для транспортного средства, где каждая частица представляет возможное состояние транспортного средства. Частицы сходятся вокруг одного местоположения, когда транспортное средство перемещается в окружении и чувствует различные части окружения с помощью датчика области значений. Датчик одометрии измеряет движение транспортного средства.

A monteCarloLocalization объект принимает данные сканирования положения и лидара как входы. Входные данные датчика скана лидара приведены в его собственной координатной системе координат, и алгоритм преобразует данные согласно SensorModel.SensorPose свойство, которое вы должны задать. Положение входа вычисляется путем интегрирования данных датчика одометрий с течением времени. Если изменение положения больше любого из заданных порогов обновления, UpdateThresholdsзатем частицы обновляются, и алгоритм вычисляет новую оценку состояния из фильтра частиц. Частицы обновляются с помощью этого процесса:

  1. Частицы распространяются на основе изменения положения и заданной модели движения, MotionModel.

  2. Частицам присваивают веса на основе вероятности получения показания датчика области значений для каждой частицы. Эти веса вероятностей основаны на модели датчика, которую вы задаете в SensorModel.

  3. На основе ResamplingInterval свойство, частицы повторно дискретизируются из апостериорного распределения, и частицы с низким весом удаляются. Для примера интервал повторной дискретизации 2 означает, что частицы повторно дискретизируются после каждого другого обновления.

Выходами объекта являются предполагаемое положение и ковариация, и значение isUpdated. Это оцененное состояние является средним и ковариационным значением наивысшего взвешенного кластера частиц. Выходное положение задается в координатной системе координат карты, которая задана в SensorModel.Map свойство. Если изменение положения больше любого из порогов обновления, то оценка состояния была обновлена и isUpdated является true. В противном случае isUpdated является false и смета остается прежней. Для непрерывного отслеживания лучшей оценки состояния робота повторите этот процесс распространения частиц, оценки их вероятности и повторной дискретизации.

Для оценки положения и ковариации робота с помощью данных скана лидара:

  1. Создайте monteCarloLocalization Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

mcl = monteCarloLocalization возвращает объект MCL, который оценивает положение транспортного средства с помощью карты, датчика области значений и данных одометрии. По умолчанию назначается пустая карта, поэтому перед использованием объекта требуется допустимое назначение карты.

mcl = monteCarloLocalization(Name,Value) создает объект MCL с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар.

Name является именем свойства и Value - соответствующее значение. Name должны находиться внутри одинарных кавычек (''). Можно задать несколько аргументы пары "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN.

Свойства

расширить все

Начальное положение транспортного средства, используемого для запуска локализации, задается как трехэлементный вектор, [x y theta], что указывает положение и курс транспортного средства. Инициализация объекта MCL с начальной оценкой положения позволяет вам использовать меньшее значение для максимального количества частиц и все еще сходиться в местоположении.

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

Флаг, указывающий, выполнять ли глобальную локализацию, задается как false или true. Значение по умолчанию, false, инициализирует частицы, используя InitialPose и InitialCovariance свойства. A true значение инициализирует равномерно распределенные частицы во всей карте и игнорирует InitialPose и InitialCovariance свойства. Глобальная локализация требует большого количества частиц, чтобы охватить всю рабочую область. Используйте глобальную локализацию только, когда начальная оценка местоположения и ориентации транспортного средства недоступна.

Минимальное и максимальное количество частиц, заданное как двухэлементный вектор, [min max].

Модель датчика поля вероятности, заданная как likelihoodFieldSensor объект. Значение по умолчанию использует значение по умолчанию likelihoodFieldSensorModel объект. После использования объекта для вывода вызовите release о объекте, в который необходимо внести изменения SensorModel. Для примера:

mcl = monteCarloLocalization; 
[isUpdated,pose,covariance] = mcl(ranges,angles); 
release(mcl) 
mcl.SensorModel.NumBeams = 120;

Модель движения Одометрии для дифференциального привода, заданная как odometryMotionModel объект. Значение по умолчанию использует значение по умолчанию odometryMotionModel объект. После использования объекта для вывода вызовите release о объекте, в который необходимо внести изменения MotionModel. Для примера:

mcl = monteCarloLocalization; 
[isUpdated,pose,covariance] = mcl(ranges,angles); 
release(mcl) 
mcl.MotionModel.Noise = [0.25 0.25 0.4 0.4];

Минимальное изменение состояний, необходимое для запуска обновления, задается как трехэлементный вектор. Локализация обновляет частицы, если минимальное изменение в любой из [x y theta] состояния выполняются. Оценка положения обновляется только, если обновлен фильтр частиц.

Количество обновлений фильтра между повторной дискретизацией частиц, заданное в виде положительного целого числа.

Использование lidarScan объект как вход скана, заданный как false или true.

Использование

Описание

пример

[isUpdated,pose,covariance] = mcl(odomPose,scan) оценивает положение и ковариацию транспортного средства, используя алгоритм MCL. Оценки основаны на положении, рассчитанном из указанной одометрии транспортного средства, odomPose, и указанные данные датчика скана лидара, scan. mcl является monteCarloLocalization объект. isUpdated указывает, обновляется ли оценка на основе UpdateThreshold свойство.

Чтобы включить этот синтаксис, вы должны задать UseLidarScan свойство к true. Для примера:

mcl = monteCarloLocalization('UseLidarScan',true);
...
[isUpdated,pose,covariance] = mcl(odomPose,scan);

пример

[isUpdated,pose,covariance] = mcl(odomPose,ranges,angles) определяет данные сканы лидара следующим ranges и angles.

Входные параметры

расширить все

Положение на основе одометрии, заданное как трехэлементный вектор, [x y theta]. Это положение вычисляется путем интегрирования одометрии с течением времени.

Чтения сканов лидара, заданные как lidarScan объект.

Зависимости

Чтобы использовать этот аргумент, необходимо задать UseLidarScan свойство к true.

mcl.UseLidarScan = true;

Значения области значений от данных скана, заданные как вектор с элементами, измеренными в метрах. Эти значения области значений являются расстояниями от датчика лазерного скана при заданном angles. The ranges вектор должен иметь то же количество элементов, что и соответствующий angles вектор.

Значения углов из данных скана, заданные как вектор с элементами, измеренными в радианах. Эти значения угла являются углами, при которых заданные ranges измеряли. The angles вектор должен быть такой же длины, как и соответствующий ranges вектор.

Выходные аргументы

расширить все

Флаг обновления положения, возвращенный как логический. Если изменение положения больше, чем любой из порогов обновления, то выход true. В противном случае это false. A true выход означает, что обновленное положение и ковариация возвращаются. A false выход означает, что положение и ковариация не обновляются и те же, что и при последнем обновлении.

Оценка текущего положения, возвращенная как трехэлементный вектор, [x y theta]. Положение вычисляется как среднее значение наиболее взвешенного кластера частиц.

Ковариационная оценка для текущего положения, возвращенная как матрица. Эта матрица дает оценку неопределенности текущего положения. Ковариация вычисляется как ковариация наиболее взвешенного кластера частиц.

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

getParticlesПолучите частицы из алгоритма локализации
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Создайте monteCarloLocalization объект, присвоение модели датчика и вычисление оценки положения с помощью step способ.

Примечание: Начиная с R2016b, вместо использования метода step для выполнения операции, заданной системным объектом, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Создайте monteCarloLocalization объект. Установите UseLidarScan свойство к true.

mcl = monteCarloLocalization;
mcl.UseLidarScan = true;

Присвойте объекту модель датчика с сеткой заполнения.

sm = likelihoodFieldSensorModel;
p = zeros(200,200);
sm.Map = occupancyMap(p,20);
mcl.SensorModel = sm;

Создайте выборку входа данных скана.

ranges = 10*ones(1,300);
ranges(1,130:170) = 1.0;
angles = linspace(-pi/2,pi/2,300);
odometryPose = [0 0 0];

Создайте lidarScan объект путем определения областей значений и углов.

scan = lidarScan(ranges,angles);

Оцените положение транспортного средства и ковариацию.

[isUpdated,estimatedPose,covariance] = mcl(odometryPose,scan)
isUpdated = logical
   1

estimatedPose = 1×3

    0.0350   -0.0126    0.0280

covariance = 3×3

    0.9946   -0.0012         0
   -0.0012    0.9677         0
         0         0    0.9548

Ссылки

[1] Thrun, Sebatian, Wolfram Burgard, and Dieter Fox. Вероятностная робототехника. MIT Press, 2005.

[2] Dellaert, F., D. Fox, W. Burgard, and S. Thrun. «Локализация Монте-Карло для мобильных роботов». Материалы 1999 Международной конференции IEEE по робототехнике и автоматизации.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2019b