робототехника. MonteCarloLocalization

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

Описание

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

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

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

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

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

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

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

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

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

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

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

Создание

Синтаксис

mcl = robotics.MonteCarloLocalization
mcl = robotics.MonteCarloLocalization(Name,Value)

Описание

пример

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

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

[isUpdated,pose,covariance] = mcl(odomPose,scan)
[isUpdated,pose,covariance] = mcl(odomPose,ranges,angles)

Описание

пример

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

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

mcl = robotics.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) выполняют эквивалентные операции.

Создайте объект MCL.

mcl = robotics.MonteCarloLocalization;

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

sm = robotics.LikelihoodFieldSensorModel;
p = zeros(200,200);
sm.Map = robotics.OccupancyGrid(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];

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

[isUpdated,estimatedPose,covariance] = mcl(odometryPose,ranges,angles)
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 по вопросам робототехники и автоматизации.

Введенный в R2016a