exponenta event banner

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)

Figure contains an axes. The axes with title Occupancy Grid contains an object of type image.

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

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')

Figure contains an axes. The axes with title Occupancy Grid contains 7 objects of type image, line. These objects represent Collision Points, Vehicle Position, Rays.

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

свернуть все

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

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

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

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

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

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

свернуть все

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

См. также

| | | (инструментарий робототехнической системы)

Представлен в R2019b