rayIntersection

Класс: робототехника. OccupancyGrid
Пакет: робототехника

Вычислите точки пересечения карты лучей

Синтаксис

intersectionPts = rayIntersection(map,pose,angles,maxrange)
intersectionPts = rayIntersection(map,pose,angles,maxrange,threshold)

Описание

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

пример

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

Примеры

развернуть все

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

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

map = robotics.OccupancyGrid(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];
robotPose = [4,4,pi/2];
intsectionPts = rayIntersection(map,robotPose,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(robotPose(1),robotPose(2),'ob') % Robot pose
for i = 1:3
    plot([robotPose(1),intsectionPts(i,1)],...
        [robotPose(2),intsectionPts(i,2)],'-b') % Plot intersecting rays
end
plot([robotPose(1),robotPose(1)-6*sin(angles(4))],...
    [robotPose(2),robotPose(2)+6*cos(angles(4))],'-b') % No intersection ray

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

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

развернуть все

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

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

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

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

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

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

развернуть все

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

Введенный в R2017b