Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

rayIntersection

Encuentra puntos de intersección de rayos y celdas de mapa ocupadas.

Desde R2020a

Descripción

ejemplo

[intersectionPts,isOccupied] = rayIntersection(map3D,sensorPose,directions,maxrange) devuelve puntos de intersección de rayos en el mapa especificado, map3D. Los rayos emanan del sensorPose especificado en las orientaciones dadas, directions. Los puntos de intersección se devuelven en el marco de coordenadas mundiales. Utilice isOccupied para determinar si el punto de intersección está en el rango máximo del sensor o si cruza un obstáculo.

[intersectionPts,isOccupied] = rayIntersection(map3D,sensorPose,directions,maxrange,ignoreUnknown) acepta además argumentos opcionales para el rango máximo de los sensores y si se deben ignorar valores desconocidos. De forma predeterminada, los rayos se extienden hasta el límite del mapa y los valores desconocidos se ignoran.

Ejemplos

contraer todo

Importe un mapa de ocupación en 3D.

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

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

Inflar las zonas ocupadas en un radio de 1 m. Muestre el mapa.

inflate(map3D,1)
show(map3D)

Encuentre los puntos de intersección de los rayos y las celdas ocupadas del mapa.

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

Traza los puntos de intersección y traza los rayos desde la pose hasta los puntos de intersección.

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, xlabel X [meters], ylabel Y [meters] contains 22 objects of type patch, line. One or more of the lines displays its values using only markers

Argumentos de entrada

contraer todo

Mapa de ocupación tridimensional, especificado como un objeto occupancyMap3D .

Posición y orientación del sensor, especificada como un vector [x y z qw qx qy qz] . La pose del vehículo es un vector de posición xyz con un vector de orientación de cuaternión especificado como [qw qx qy qz].

Orientación de los rayos que emanan del sensor en relación con el marco de coordenadas del sensor, especificada como una matriz n por 3 [dx dy dz] o n-por-2 [az el] matriz.

  • [dx dy dz] es un vector direccional en coordenadas xyz.

  • [az el] es un vector con ángulo de acimut, az, medido desde la dirección positiva x hasta la dirección positiva y dirección y ángulo de elevación desde el plano xy hasta la dirección positiva z en el marco de coordenadas del sensor.

Alcance máximo del sensor de distancia láser, especificado como escalar en metros. Valores de rango mayores o iguales a maxrange se consideran libres en toda la longitud del rayo, hasta maxrange.

Interprete los valores desconocidos en el mapa como libres u ocupados especificados como 1 o 0. Establezca este valor en 0 para asumir que los valores desconocidos están ocupados.

Argumentos de salida

contraer todo

Puntos de intersección, devueltos como n-por-3 matriz de [x y z] puntos en el marco mundial, donde n es la longitud de directions.

Estado de ocupación de los puntos finales del rayo, devuelto como un vector de ceros y unos. Utilice isOccupied para determinar si el punto de intersección está en el rango máximo del sensor o si cruza un obstáculo.

Capacidades ampliadas

Historial de versiones

Introducido en R2020a