checkFree

Проверяйте автомобиль costmap на положения без коллизий или точки

Функция checkFree проверяет, свободны ли положения автомобиля или точки от препятствий на автомобиле costmap. Алгоритмы планирования пути используют checkFree, чтобы проверять, пригодны ли положения автомобиля кандидата вдоль пути для навигации.

Чтобы упростить проверку столкновения на положение автомобиля, vehicleCostmap раздувает препятствия согласно InflationRadius автомобиля, как задано свойством CollisionChecker costmap. Средство проверки столкновения вычисляет радиус инфляции путем включения автомобиля в набор перекрывающихся кругов радиуса R, где центры этих кругов простираются вдоль продольной оси автомобиля. Радиусом инфляции является минимальный R, должен был полностью заключить автомобиль в эти круги.

Положение автомобиля без коллизий, когда следующие условия применяются:

  • Ни один из центров круга автомобиля не лежит на расширенной ячейке сетки.

  • Величина затрат на каждого содержащего центр круга является меньше, чем FreeThreshold costmap.

Для получения дополнительной информации см. алгоритм на странице с описанием vehicleCostmap.

Синтаксис

free = checkFree(costmap,vehiclePoses)
free = checkFree(costmap,xyPoints)
freeMat = checkFree(costmap)

Описание

пример

free = checkFree(costmap,vehiclePoses) проверки, свободны ли положения автомобиля от столкновения с препятствиями на costmap.

free = checkFree(costmap,xyPoints) проверки, свободны ли (x, y) точки в xyPoints от столкновения с препятствиями на costmap.

freeMat = checkFree(costmap) возвращает логическую матрицу, которая указывает, свободна ли каждая ячейка costmap.

Примеры

свернуть все

Загрузите costmap с парковки.

data = load('parkingLotCostmap.mat');
parkMap = data.parkingLotCostmap;
plot(parkMap)

Создайте положения автомобиля после прямолинейного пути. x и y (x, y) координаты задней оси автомобиля. theta является углом задней оси относительно оси X. Обратите внимание на то, что размерности автомобиля хранятся в свойстве CollisionChecker.VehicleDimensions costmap, и что существует смещение между задней осью автомобиля и его центром.

x = 4:0.25:6;
y = 3:0.25:5;
theta = repmat(45,size(x));
vehiclePoses = [x',y',theta'];
hold on
plot(x,y,'b.')
hold off

Несколько первых (x, y) координаты задней оси в расширенной области. Однако это не подразумевает столкновение, потому что центр автомобиля может быть вне расширенной области. Проверяйте, без коллизий ли положения.

free = checkFree(parkMap,vehiclePoses)
free = 9x1 logical array

   1
   1
   1
   1
   1
   1
   1
   1
   1

Все значения free 1 (true), таким образом, все положения без коллизий. Центр автомобиля не вводит расширенную область ни в каком положении.

Входные параметры

свернуть все

Costmap, заданный как объект vehicleCostmap.

Положения автомобиля, заданные как m-by-3 матрица [x, y, Θ] векторы. m является количеством положений.

x и y задают местоположение автомобиля в мировых модулях, таких как метры. Это местоположение является центром задней оси автомобиля.

Θ задает угол ориентации автомобиля в градусах относительно x - ось. Θ положителен в направлении по часовой стрелке.

Пример: [3.4 2.6 0] задает автомобиль с центром задней оси в (3.4, 2.6) и угол ориентации 0 градусов.

Точки, заданные как M-by-2 матрица с действительным знаком, которая представляет (x, y) координаты точек M.

Пример: [3.4 2.6] задает одну точку в (3.4, 2.6)

Пример: [3 2;3 3;4 7] задает три точки: (3, 2), (3, 3), и (4, 7)

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

свернуть все

Положение автомобиля или точка свободны, возвращенные как M-by-1 логический вектор. Элементом free является 1 (true), когда соответствующее положение автомобиля в vehiclePoses или точка в xyPoints без коллизий.

Ячейка Costmap свободна, возвращенная как логическая матрица, одного размера как costmap сетка. Этот размер задан как свойство MapSize costmap. Элементом freeMat является 1 (true), когда соответствующая ячейка в costmap является незанятой, и величина затрат на ячейку ниже FreeThreshold costmap.

Советы

  • Если вы задаете маленькое значение InflationRadius, который не полностью заключает автомобиль, то checkFree может сообщить занятый, изображает из себя без коллизий. Чтобы избежать этой ситуации, значение по умолчанию InflationRadius полностью заключает автомобиль.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

Объекты

Функции

Введенный в R2018a