Contenido principal

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.

Descripción

[intersectionPts,isOccupied] = rayIntersection(map3D,sensorPose,directions) devuelve los puntos en los que los rayos, que se originan desde una posición de sensor y se extienden en direcciones específicas, se intersecan con celdas de mapa ocupadas dentro del mapa de ocupación 3D, y también determina el estado de ocupación de las celdas en esos puntos de intersección. 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 interseca un obstáculo.

ejemplo

[intersectionPts,isOccupied] = rayIntersection(___,maxrange,ignoreUnknown) también acepta argumentos opcionales para el rango máximo del sensor y si se deben ignorar los 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 3D, 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 una matriz n por 2 [az el].

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

  • [az el] es un vector con ángulo acimutal, az, medido desde la dirección positiva x hasta la dirección positiva y, 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. Los valores de rango mayores o iguales a maxrange se consideran libres a lo largo de 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 una matriz n por 3 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 interseca un obstáculo.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2020a