Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

rayIntersection

Trouver les points d'intersection des rayons et des cellules de carte occupées

Depuis R2020a

Description

exemple

[intersectionPts,isOccupied] = rayIntersection(map3D,sensorPose,directions,maxrange) renvoie les points d'intersection des rayons dans la carte spécifiée, map3D. Les rayons émanent du sensorPose spécifié aux orientations données, directions. Les points d'intersection sont renvoyés dans le cadre de coordonnées mondial. Utilisez isOccupied pour déterminer si le point d'intersection se trouve à la portée maximale du capteur ou s'il croise un obstacle.

[intersectionPts,isOccupied] = rayIntersection(map3D,sensorPose,directions,maxrange,ignoreUnknown) accepte en outre des arguments facultatifs pour la plage maximale des capteurs et s'il faut ignorer les valeurs inconnues. Par défaut, les rayons s'étendent jusqu'à la limite de la carte et les valeurs inconnues sont ignorées.

Exemples

réduire tout

Importez une carte d’occupation 3D.

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

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

Gonflez les zones occupées d'un rayon de 1 m. Affichez la carte.

inflate(map3D,1)
show(map3D)

Trouvez les points d'intersection des rayons et des cellules de carte occupées.

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

Tracez les points d'intersection et tracez les rayons de la pose aux points d'intersection.

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

Arguments d'entrée

réduire tout

Carte d'occupation 3D, spécifiée comme objet occupancyMap3D .

Position et orientation du capteur, spécifiées sous forme de vecteur [x y z qw qx qy qz] . La pose du véhicule est un vecteur de position xyz avec un vecteur d'orientation quaternion spécifié comme [qw qx qy qz].

Orientation des rayons émanant du capteur par rapport au cadre de coordonnées du capteur, spécifié sous la forme d'une matrice n-by-3 [dx dy dz] ou n-par-2 Matrice [az el] .

  • [dx dy dz] est un vecteur directionnel en coordonnées xyz.

  • [az el] est un vecteur avec un angle d'azimut, az, mesuré à partir de la direction positive x jusqu'à la direction positive y Directionet angle d'élévation entre le plan xy et la direction z positive dans le cadre de coordonnées du capteur.

Portée maximale du capteur de portée laser, spécifiée sous forme de scalaire en mètres. Les valeurs de plage supérieures ou égales à maxrange sont considérées comme libres sur toute la longueur du rayon, jusqu'à maxrange.

Interprétez les valeurs inconnues dans la carte comme libres ou occupées spécifiées comme 1 ou 0. Définissez cette valeur sur 0 pour supposer que des valeurs inconnues sont occupées.

Arguments de sortie

réduire tout

Points d'intersection, renvoyés sous la forme d'une matrice n-par 3 de points [x y z] dans le cadre mondial, où n est la longueur de directions.

Statut d'occupation des points d'extrémité des rayons, renvoyé sous forme de vecteur de zéros et de uns. Utilisez isOccupied pour déterminer si le point d'intersection se trouve à la portée maximale du capteur ou s'il croise un obstacle.

Capacités étendues

Historique des versions

Introduit dans R2020a