rayIntersection

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

Описание

пример

[intersectionPts,isOccupied] = rayIntersection(map3D,sensorPose,directions,maxrange) возвращает точки пересечения лучей в заданной карте, map3D. Лучи происходят от заданного sensorPose при данных ориентациях, directions. Точки пересечения возвращены в системе координат мировой координаты. Используйте isOccupied чтобы определить, ли точка пересечения в датчике макс., располагаются или если это пересекает препятствие.

[intersectionPts,isOccupied] = rayIntersection(map3D,sensorPose,directions,maxrange,ignoreUnknown)дополнительно признает, что дополнительные аргументы для датчиков макс. располагаются и проигнорировать ли неизвестные значения. По умолчанию лучи расширяют к карте проигнорированы, граничные и неизвестные значения.

Примеры

свернуть все

Импортируйте 3-D карту заполнения.

map3D = importOccupancyMap3D("citymap.ot")
map3D = 
  occupancyMap3D with properties:

    ProbabilitySaturation: [1.0000e-03 0.9990]
               Resolution: 1
        OccupiedThreshold: 0.6500
            FreeThreshold: 0.2000

Раздуйте занятые области радиусом 1 м. Отобразите карту.

inflate(map3D,1)
show(map3D)

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

numRays = 10;
angles = linspace(-pi/2,pi/2,numRays);
directions = [cos(angles); sin(angles); zeros(1,numRays)]';
sensorPose = [55 40 1 1 0 0 0];
maxrange = 15;
[intersectionPts,isOccupied] = rayIntersection(map3D,sensorPose,directions,maxrange)
intersectionPts = 10×3

   55.0000   32.0000    1.0000
   57.9118   32.0000    1.0000
   61.7128   32.0000    1.0000
   67.9904   32.5000    1.0000
   69.0000   37.5314    1.0000
   69.0000   42.4686    1.0000
   67.9904   47.5000    1.0000
   64.6418   51.4907    1.0000
   58.2757   49.0000    1.0000
   55.0000   49.0000    1.0000

isOccupied = 10×1

     1
     1
     1
    -1
     1
     1
    -1
    -1
     1
     1

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

hold on
plotTransforms(sensorPose(1:3),sensorPose(4:end),...
               'FrameSize',5,'MeshFilePath','groundvehicle.stl') % Vehicle sensor pose
for i = 1:numRays
    plot3([sensorPose(1),intersectionPts(i,1)],...
          [sensorPose(2),intersectionPts(i,2)],...
          [sensorPose(3),intersectionPts(i,3)],'-b') % Plot rays
    if isOccupied(i) == 1
        plot3(intersectionPts(i,1),intersectionPts(i,2),intersectionPts(i,3),'*r') % Intersection points
    end
end

Figure contains an axes object. The axes object with title Occupancy Map contains 22 objects of type patch, line.

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

свернуть все

3-D карта заполнения в виде occupancyMap3D объект.

Положение и ориентация датчика в виде [x y z qw qx qy qz] вектор. Положением транспортного средства является xyz позиционный вектор с вектором ориентации кватерниона, заданным как [qw qx qy qz].

Ориентация лучей, происходящих от датчика относительно датчика, координирует систему координат в виде n-by-3 [dx dy dz] матрица или n-by-2 [az el] матрица.

  • [dx dy dz] направленный вектор в xyz - координаты.

  • [az el] вектор с углом азимута, az, измеренный от положительного направления x до положительного направления y и угла возвышения от xy - плоскости к положительному z - направление в датчике координируют систему координат.

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

Интерпретируйте неизвестные значения в карте, столь же свободной или занятой заданный как 1 или 0. Установите это значение к 0 чтобы принять неизвестные значения заняты.

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

свернуть все

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

Состояние Occupancy конечных точек луча, возвращенных как вектор из, обнуляет и единицы. Используйте isOccupied чтобы определить, ли точка пересечения в датчике макс., располагаются или если это пересекает препятствие.

Смотрите также

Классы

Функции

Введенный в R2020a
Для просмотра документации необходимо авторизоваться на сайте