monteCarloLocalization

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

Описание

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

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

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

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

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

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

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

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

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

пример

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 свойства. true значение инициализирует равномерно распределенные частицы в целой карте и игнорирует InitialPose и InitialCovariance свойства. Глобальная локализация требует, чтобы большое количество частиц покрыло целую рабочую область. Используйте глобальную локализацию только, когда первоначальная оценка местоположения транспортного средства и ориентации не будет доступна.

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

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

mcl = monteCarloLocalization(_); 
[isUpdated,pose,covariance] = mcl(_); 
release(mcl) 
mcl.SensorModel.PropName = value; 

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

mcl = monteCarloLocalization(_); 
[isUpdated,pose,covariance] = mcl(_); 
release(mcl) 
mcl.MotionModel.PropName = value; 

Минимальное изменение в состояниях, требуемых инициировать обновление, заданное как трехэлементный вектор. Локализация обновляет частицы если минимальное изменение в любом [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. ranges вектор должен иметь то же число элементов как соответствующий angles вектор.

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

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

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

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

[2] Dellaert, F., Д. Фокс, В. Бергард и С. Трун. "Локализация Монте-Карло для мобильных роботов". Продолжения 1 999 международных конференций IEEE по вопросам робототехники и автоматизации.

Введенный в R2019b