Вероятностные дорожные карты (PRM)

Вероятностная дорожная карта (PRM) является сетевым графиком возможных путей в заданной карте, основанным на свободных и занятых пространствах. The mobileRobotPRM объект случайным образом генерирует узлы и создает соединения между этими узлами на основе параметров алгоритма PRM. Узлы соединяются на основе расположения препятствий, заданных в Map, и на заданной ConnectionDistance. Можно настроить число узлов, NumNodes, для соответствия сложности карты и желанию найти наиболее эффективный путь. Алгоритм PRM использует сеть связанных узлов, чтобы найти путь без препятствий от начала до конечного местоположения. Чтобы эффективно планировать путь через окружение, настройте NumNodes и ConnectionDistance свойства.

При создании или обновлении mobileRobotPRM класс, местоположения узлов генерируются случайным образом, что может повлиять на ваш конечный путь между несколькими итерациями. Этот выбор узлов происходит, когда вы задаете Map первоначально измените параметры, или update вызывается. Чтобы получить последовательные результаты с тем же размещением узла, используйте rng для сохранения состояния генерации случайных чисел. Смотрите раздел «Настройка расстояния соединения» для примера, используя rng.

Настройка Числа узлов

Используйте NumNodes свойство на mobileRobotPRM объект, чтобы настроить алгоритм. NumNodes задает число точек или узлов, размещенных на карте, которое алгоритм использует для создания дорожной карты. Использование ConnectionDistance свойство как порог расстояния, алгоритм соединяет все точки, которые не имеют препятствий, блокирующих прямой путь между ними.

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

Загрузите файл карты как логическую матрицу, simpleMaps, и создать сетку заполнения.

load exampleMaps.mat
map = binaryOccupancyMap(simpleMap,2);

Создайте простую дорожную карту с 50 узлами.

prmSimple = mobileRobotPRM(map,50);
show(prmSimple)

Figure contains an axes. The axes with title Probabilistic Roadmap contains 3 objects of type image, line, scatter.

Создайте плотную дорожную карту с 250 узлами.

prmComplex = mobileRobotPRM(map,250);
show(prmComplex)

Figure contains an axes. The axes with title Probabilistic Roadmap contains 3 objects of type image, line, scatter.

Дополнительные узлы увеличивают сложность, но дают больше опции улучшить путь. Учитывая эти две карты, можно вычислить путь с помощью алгоритма PRM и увидеть эффекты.

Вычислите простой путь.

startLocation = [2 1];
endLocation = [12 10];
path = findpath(prmSimple,startLocation,endLocation);
show(prmSimple)

Figure contains an axes. The axes with title Probabilistic Roadmap contains 4 objects of type image, line, scatter.

Вычислите сложный путь.

path = findpath(prmComplex, startLocation, endLocation);
show(prmComplex)

Figure contains an axes. The axes with title Probabilistic Roadmap contains 4 objects of type image, line, scatter.

Увеличение узлов позволяет получить более прямой путь, но добавляет больше времени расчета к поиску допустимого пути. Из-за случайного размещения точек путь не всегда является более прямым или эффективным. Использование небольшого числа узлов может сделать пути хуже, чем изображено, и даже ограничить возможность найти полный путь.

Настройка расстояния соединения

Используйте ConnectionDistance свойство на PRM объект, чтобы настроить алгоритм. ConnectionDistance является верхним порогом для точек, которые соединяются в дорожной карте. Каждый узел соединяется со всеми узлами на этом расстоянии соединения, которые не имеют препятствий между ними. Снижая расстояние соединения, можно ограничить количество соединений, чтобы уменьшить время расчета и упростить карту. Однако уменьшенное расстояние ограничивает количество доступных путей, от которых можно найти полный путь без препятствий. При работе с простыми картами можно использовать более высокое расстояние соединения с небольшим числом узлов для повышения эффективности. Для сложных карт с большим количеством препятствий более высокое число узлов с уменьшенным расстоянием соединения увеличивает вероятность нахождения решения.

Загрузите карту как логическую матрицу, simpleMap, и создать сетку заполнения.

load exampleMaps.mat
map = binaryOccupancyMap(simpleMap,2);

Создайте маршрутную карту со 100 узлами и вычислите путь. Значение по умолчанию ConnectionDistance установлено значение inf. сохраните настройки генерации случайных чисел с помощью функции rng. Сохраненные настройки позволяют вам воспроизводить одни и те же точки и видеть эффект изменения ConnectionDistance.

rngState = rng;
prm = mobileRobotPRM(map,100);
startLocation = [2 1];
endLocation = [12 10];
path = findpath(prm,startLocation,endLocation);
show(prm)

Figure contains an axes. The axes with title Probabilistic Roadmap contains 4 objects of type image, line, scatter.

Перезагрузите настройки генерации случайных чисел, чтобы PRM использовал те же узлы. Нижняя ConnectionDistance Для 2 м. Отобразите вычисленный путь.

rng(rngState);
prm.ConnectionDistance = 2;
path = findpath(prm,startLocation,endLocation);
show(prm)

Figure contains an axes. The axes with title Probabilistic Roadmap contains 4 objects of type image, line, scatter.

Создание или обновление PRM

При использовании mobileRobotPRM объект и изменение свойств, при каждом новом вызове функции объект запускает точки маршрутной карты и соединения, которые будут пересчитаны. Поскольку пересчет карты может быть интенсивным в вычислительном отношении, можно повторно использовать ту же дорожную карту, вызывая findpath с различными начальными и конечными местоположениями.

Загрузите карту, simpleMap, из .mat файла как логической матрицы и создания сетки заполнения.

load('exampleMaps.mat')
map = binaryOccupancyMap(simpleMap,2);

Создайте дорожную карту. Ваши узлы и соединения могут выглядеть по-другому из-за случайного размещения узлов.

prm = mobileRobotPRM(map,100);
show(prm)

Figure contains an axes. The axes with title Probabilistic Roadmap contains 3 objects of type image, line, scatter.

Функции update или измените параметр, чтобы обновить узлы и соединения.

update(prm)
show(prm)

Figure contains an axes. The axes with title Probabilistic Roadmap contains 3 objects of type image, line, scatter.

Алгоритм PRM пересчитывает размещение узла и генерирует новую сеть узлов.

Ссылки

[1] Кавраки, Л.Э., П. Светка, Ж.-К. Латомбе и М. Х. Овермарс. «Вероятностные дорожные карты для планирования пути в высоко-размерных пространствах строения», Транзакции IEEE по робототехнике и автоматизации. Том 12, № 4, авг. 1996 с. 566 - 580.

См. также

|