Пробел планирования представления Costmap вокруг автомобиля
Объект vehicleCostmap
создает costmap, который представляет пространство поиска планирования вокруг автомобиля. costmap содержит информацию о среде, такой как препятствия или области, которые не может пересечь автомобиль. Чтобы проверять на столкновения, costmap раздувает препятствия с помощью радиуса инфляции, заданного в свойстве CollisionChecker
. costmap используется алгоритмами планирования пути, такими как pathPlannerRRT
, чтобы найти, что пути без коллизий для автомобиля следуют.
costmap хранится как 2D сетка ячеек, часто названных occupancy grid. Каждая ячейка сетки в costmap имеет значение в области значений [0, 1] представление стоимости навигации через ту ячейку сетки. Состоянием каждой ячейки сетки является free, occupied или unknown, как определено свойствами FreeThreshold
и OccupiedThreshold
.
Следующие данные показывают costmap с демонстрационными затратами и состояниями ячейки сетки.
costmap = vehicleCostmap(C)
costmap = vehicleCostmap(mapWidth,mapLength)
costmap = vehicleCostmap(mapWidth,mapLength,costVal)
costmap = vehicleCostmap(occGrid)
costmap = vehicleCostmap(___,'MapLocation',mapLocation)
costmap = vehicleCostmap(___,Name,Value)
costmap = vehicleCostmap(
создает автомобиль costmap использование величины затрат в матричном C
)C
.
costmap = vehicleCostmap(
создает автомобиль costmap из сетки заполнения occGrid
)occGrid
. Использование этого синтаксиса требует Robotics System Toolbox™.
costmap = vehicleCostmap(___,'MapLocation',
задает в mapLocation
)mapLocation
нижние левые угловые координаты costmap. Задайте 'MapLocation',mapLocation
после любых из предыдущих входных параметров и в любом порядке среди аргументов пары Name,Value
.
costmap = vehicleCostmap(___,
использование аргументы пары Name,Value
)Name,Value
, чтобы задать FreeThreshold
, OccupiedThreshold
, CollisionChecker
и свойства CellSize
. Например, vehicleCostmap(C,'CollisionChecker',ccConfig)
использует объект inflationCollisionChecker
, ccConfig
, чтобы представлять форму автомобиля и проверку на столкновения. После того, как вы создадите объект, можно обновить все эти свойства кроме CellSize
.
checkFree | Проверяйте автомобиль costmap на положения без коллизий или точки |
checkOccupied | Проверяйте автомобиль costmap на занятые положения или точки |
getCosts | Получите величину затрат на ячейки в автомобиле costmap |
setCosts | Установите величину затрат на ячейки в автомобиле costmap |
plot | Постройте автомобиль costmap |
Чтобы упростить проверку то, является ли положение автомобиля в столкновении, vehicleCostmap
раздувает размер препятствий. Проверяющий столкновение алгоритм выполняет эти шаги:
Вычислите радиус инфляции, в мировых модулях, от размерностей автомобиля. Радиус инфляции по умолчанию равен радиусу самого маленького набора перекрывающихся кругов, требуемых полностью заключать автомобиль. Центральные точки кругов простираются вдоль продольной оси автомобиля. Увеличение числа кругов уменьшает радиус инфляции, который включает более точную проверку столкновения.
Радиус инфляции, один центр | Радиус инфляции, три центра |
---|---|
|
|
Преобразуйте радиус инфляции во многие ячейки сетки, R. Окружите значения нецелого числа R к следующему самому большому целому числу.
Раздуйте размер препятствий с помощью R. Маркируйте все ячейки в расширенной области, как занято.
Схемы отображают занятые ячейки темно-красным. Ячейки в расширенной области окрашены светло-красные. Чистая черная строка показывает исходный радиус инфляции. В схеме слева, R равняется 3. В схеме справа, R равняется 2.
Расширенные ячейки сетки, один центр | Расширенные ячейки сетки, три центра |
---|---|
|
|
Проверяйте, лежат ли центральные точки автомобиля на расширенных ячейках сетки.
Если какая-либо центральная точка находится на расширенной ячейке сетки, то положение автомобиля занято. Функция checkOccupied
возвращает true
. Занятое положение не обязательно означает столкновение. Например, автомобиль может лечь на расширенную ячейку сетки, но не на ячейку сетки, которая на самом деле занята.
Если никакие центральные точки не лежат на расширенных ячейках сетки, и величина затрат на каждую ячейку, содержащую центральную точку, является меньше, чем FreeThreshold
, то положение автомобиля свободно. Функция checkFree
возвращает true
.
Если никакие центральные точки не лежат на расширенных ячейках сетки, и величина затрат на любую ячейку, содержащую центральную точку, больше, чем FreeThreshold
, то положение автомобиля неизвестно. И checkFree
и checkOccupied
возвращают false
.
Следующие положения рассматриваются в столкновении, потому что по крайней мере одна центральная точка находится на расширенной области.
Позируйте в столкновении, одном центре | Позируйте в столкновении, трех центрах |
---|---|
|
|