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