rayIntersection

Найдите точки пересечения лучей и занятых ячеек карты

Описание

intersectionPts = rayIntersection(map,pose,angles,maxrange) возвращает точки пересечения лучей и занятых ячеек в заданном map. Лучи происходят от заданного pose и angles. Точки пересечения возвращены в системе координат мировой координаты. Если нет никакого пересечения до заданного maxrange, [NaN NaN] возвращен. По умолчанию, OccupiedThreshold свойство используется, чтобы определить занятые ячейки.

пример

intersectionPts = rayIntersection(map,pose,angles,maxrange,threshold) возвращает точки пересечения на основе заданного threshold для значений заполнения. Значения, больше, чем или равный порогу, рассматриваются занятыми.

Примеры

свернуть все

Создайте карту сетки заполнения. Добавьте препятствия и раздуйте их. Более низкая карта разрешения используется, чтобы проиллюстрировать важность использования ячеек сетки. Покажите карту.

map = occupancyMap(10,10,2);
obstacles = [4 10; 3 5; 7 7];
setOccupancy(map,obstacles,ones(length(obstacles),1))
inflate(map,0.25)
show(map)

Найдите точки пересечения занятых ячеек и лучей, которые испускают от данного положения транспортного средства. Укажите макс. диапазон и углы для этих лучей. Последний луч не пересекается с препятствием в макс. области значений, таким образом, это не имеет никакой точки столкновения.

maxrange = 6;
angles = [pi/4,-pi/4,0,-pi/8];
vehiclePose = [4,4,pi/2];
intsectionPts = rayIntersection(map,vehiclePose,angles,maxrange,0.7)
intsectionPts = 4×2

    3.5000    4.5000
    6.0000    6.0000
    4.0000    9.0000
       NaN       NaN

Постройте точки пересечения и лучи от положения.

hold on
plot(intsectionPts(:,1),intsectionPts(:,2),'*r') % Intersection points
plot(vehiclePose(1),vehiclePose(2),'ob') % Vehicle pose
for i = 1:3
    plot([vehiclePose(1),intsectionPts(i,1)],...
        [vehiclePose(2),intsectionPts(i,2)],'-b') % Plot intersecting rays
end
plot([vehiclePose(1),vehiclePose(1)-6*sin(angles(4))],...
    [vehiclePose(2),vehiclePose(2)+6*cos(angles(4))],'-b') % No intersection ray

legend('Collision Points','Vehicle Position','Rays','Location','SouthEast')

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

свернуть все

Сопоставьте представление в виде occupancyMap объект. Этот объект представляет среду датчика. Объект содержит матричную сетку со значениями, представляющими вероятность заполнения той ячейки. Значения близко к 1 представляют высокую вероятность, что ячейка содержит препятствие. Значения близко к 0 представляют высокую вероятность, что ячейка не занята и свободное препятствие.

Положение и ориентация датчика в виде [x y theta] вектор. Положением датчика является x и положение y с угловой ориентацией theta (в радианах) измеренный от x - ось.

Излучите углы, происходящие от датчика в виде вектора с элементами в радианах. Этими углами является относительно заданного датчика pose.

Максимальная область значений лазерного датчика области значений в виде скаляра в метрах. Значения области значений, больше, чем или равный maxrange рассматриваются свободными вдоль целой продолжительности луча, до maxrange.

Порог для занятых ячеек в виде скаляра от 0 до 1. Значения заполнения, больше, чем или равный порогу, обработаны как занятые ячейки, чтобы инициировать пересечения.

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

свернуть все

Точки пересечения, возвращенные как n-by-2 матрица [x y] пары в мировой системе координат, где n является длиной angles.

Введенный в R2019b