exponenta event banner

monteCarloLocalization

Локализация робота с использованием данных датчика дальности и карты

Описание

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]. Эта поза рассчитывается путем интегрирования одометрии во времени.

Показания сканирования Lidar, указанные как lidarScan объект.

Зависимости

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

mcl.UseLidarScan = true;

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

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

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

развернуть все

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

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

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

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

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

release(obj)

развернуть все

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

Примеры

свернуть все

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

Примечание.Начиная с R2016b, вместо использования пошагового метода для выполнения операции, определенной объектом System, можно вызвать объект с аргументами, как если бы это была функция. Например, 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] Трюн, Себатиан, Вольфрам Бургард и Дитер Фокс. Вероятностная робототехника. MIT Press, 2005.

[2] Деллаэрт, Ф., Д. Фокс, В. Бургард и С. Трюн. «Локализация Monte Carlo для мобильных роботов». Международная конференция IEEE слушаний 1999 года по вопросам робототехники и автоматизации.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2019b