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] вектор. Положение датчика является x и y положением с угловой ориентацией theta (в радианах), измеренной от оси x.

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

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

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

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

свернуть все

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

См. также

| | | (Robotics System Toolbox)

Введенный в R2019b