Main Content

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

insertRay

Insérer un rayon à partir d'une observation par balayage laser

Depuis R2019b

Description

exemple

insertRay(map,pose,scan,maxrange) insère une ou plusieurs observations de capteur de balayage lidar dans la grille d'occupation, map, en utilisant l'objet d'entrée lidarScan , scan, pour obtenir les points finaux des rayons. Les extrémités des rayons sont considérées comme de l'espace libre si les plages d'analyse d'entrée sont inférieures à maxrange. Les cellules observées comme occupées sont mises à jour avec une observation de 0,7. Tous les autres points le long du rayon sont traités comme étant sans obstacle et mis à jour avec une observation de 0,4. Les points de terminaison supérieurs à maxrange ne sont pas mis à jour. Les valeurs NaN sont ignorées. Ce comportement est en corrélation avec le modèle de capteur inverse.

insertRay(map,pose,ranges,angles,maxrange) spécifie les lectures de plage sous forme de vecteurs définis par l'entrée ranges et angles.

insertRay(map,startpt,endpoints) insère des observations entre les segments de ligne du point de départ aux points finaux. Les paramètres sont mis à jour avec une observation de probabilité de 0,7. Les cellules le long des segments de ligne sont mises à jour avec une observation de 0,4.

insertRay(___,invModel) insère des rayons avec des probabilités mises à jour données dans le vecteur à deux éléments, invModel, qui correspond aux observations sans obstacle et occupées. Utilisez l’une des syntaxes précédentes pour saisir les rayons.

Exemples

réduire tout

Créez une carte de grille d'occupation vide.

map = occupancyMap(10,10,20);

Spécifiez la pose du véhicule, les portées, les angles et la portée maximale du balayage laser.

pose = [5,5,0];
ranges = 3*ones(100,1);
angles = linspace(-pi/2,pi/2,100);
maxrange = 20;

Créez un objet lidarScan avec les plages et les angles spécifiés.

scan = lidarScan(ranges,angles);

Insérez les données du scanner laser dans la carte d'occupation.

insertRay(map,pose,scan,maxrange);

Affichez la carte pour voir les résultats de l’insertion du balayage laser.

show(map)

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Vérifiez l'occupation de l'emplacement directement devant le véhicule.

getOccupancy(map,[8 5])
ans = 0.7000

Ajoutez une deuxième lecture et affichez la mise à jour des valeurs d'occupation. La lecture supplémentaire augmente la confiance dans les lectures. Les valeurs libre et occupé deviennent plus distinctes.

insertRay(map,pose,scan,maxrange);
show(map)

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

getOccupancy(map,[8 5])
ans = 0.8448

Arguments d'entrée

réduire tout

Représentation cartographique, spécifiée comme objet occupancyMap . Cet objet représente l'environnement du véhicule. L'objet contient une grille matricielle avec des valeurs représentant la probabilité d'occupation de cette cellule. Les valeurs proches de 1 représentent une forte probabilité que la cellule contienne un obstacle. Les valeurs proches de 0 représentent une forte probabilité que la cellule ne soit pas occupée et sans obstacle.

Position et orientation du véhicule, spécifiées comme vecteur [x y theta] . La pose du véhicule est une position x et y avec une orientation angulaire theta (en radians) mesurée à partir du x-axe.

Lectures d'analyse Lidar, spécifiées comme objet lidarScan .

Valeurs de plage à partir des données d'analyse, spécifiées sous forme de vecteur d'éléments mesurés en mètres. Ces valeurs de plage sont les distances d'un capteur à un angles donné. Le vecteur doit avoir la même longueur que le vecteur angles correspondant.

Valeurs d'angle issues des données numérisées, spécifiées comme vecteur d'éléments mesurés en radians. Ces valeurs d'angle correspondent au ranges donné. Le vecteur doit avoir la même longueur que le vecteur ranges correspondant.

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.

Point de départ des rayons, spécifié sous la forme d'un vecteur à deux éléments, [x y], dans le cadre de coordonnées mondial. Tous les rayons sont des segments de ligne qui partent de ce point.

Points d'extrémité des rayons, spécifiés sous la forme d'une matrice n-par 2 de paires [x y] dans le cadre de coordonnées mondial, où n est le longueur de ranges ou angles. Tous les rayons sont des segments de ligne qui proviennent de startpt.

Valeurs du modèle de capteur inverse, spécifiées sous la forme d'un vecteur à deux éléments correspondant aux probabilités sans obstacle et occupé. Les points le long du rayon sont mis à jour en fonction du modèle de capteur inverse et des lectures de plage spécifiées. Les valeurs de plage NaN sont ignorées. Les valeurs de plage supérieures à maxrange ne sont pas mises à jour. Voir Modèle de capteur inverse.

En savoir plus

réduire tout

Modèle de capteur inverse

Le modèle de capteur inverse détermine la manière dont les valeurs sont définies le long d'un rayon, depuis la lecture d'un capteur de distance jusqu'aux obstacles sur la carte. Vous pouvez personnaliser ce modèle en spécifiant différentes probabilités pour les emplacements libres et occupés dans l'argument invModel . Les valeurs de plage NaN sont ignorées. Les valeurs de plage supérieures à maxrange ne sont pas mises à jour.

Diagram of inverse sensor model.

Les emplacements de grille contenant des relevés de plage sont mis à jour avec la probabilité d'occupation. Les emplacements avant la lecture sont mis à jour avec la probabilité gratuite. Tous les emplacements après la lecture ne sont pas mis à jour.

Capacités étendues

Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.

Historique des versions

Introduit dans R2019b