Main Content

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

transformScan

Transformer le scan laser en fonction de la pose relative

Description

exemple

transScan = transformScan(scan,relPose) transforme le balayage laser spécifié dans scan en utilisant la pose relative spécifiée, relPose.

exemple

[transRanges,transAngles] = transformScan(ranges,angles,relPose) transforme le balayage laser spécifié dans ranges et angles en utilisant la pose relative spécifiée, relPose.

Exemples

réduire tout

Créez un objet lidarScan . Spécifiez les plages et les angles sous forme de vecteurs.

refRanges = 5*ones(1,300);
refAngles = linspace(-pi/2,pi/2,300);
refScan = lidarScan(refRanges,refAngles);

Traduisez le balayage laser par un décalage [x y] de (0.5,0.2).

transformedScan = transformScan(refScan,[0.5 0.2 0]);

Faites pivoter le balayage laser de 20 degrés.

rotateScan = transformScan(refScan,[0,0,deg2rad(20)]);

Utilisez la fonction matchScans pour trouver la transformation relative entre deux analyses lidar. Ensuite, transformez le deuxième scan dans le cadre de coordonnées du premier scan.

Chargez une paire de scans lidar sous la forme d'une paire d'objets lidarScan . Ce sont deux scans de la même scène avec un changement de pose relative.

load tb3_scanPair.mat
plot(s1)
hold on
plot(s2)
hold off

Figure contains an axes object. The axes object with title LiDAR Scan, xlabel X, ylabel Y contains 2 objects of type line. One or more of the lines displays its values using only markers

La pose relative est estimée à partir d'un capteur d'odométrie et fournie sous forme de variable, initGuess, comme [x y theta].

disp(initGuess)
   -0.7000    0.1500   -0.3254

Utilisez la correspondance de numérisation pour trouver la pose relative entre les deux numérisations laser et spécifiez la supposition initiale pour la pose.

pose = matchScans(s2,s1,"InitialPose",initGuess);
disp(pose)
   -0.7213    0.1160   -0.2854

Transformez le deuxième scan en cadre de coordonnées du premier scan. Tracez les deux analyses pour voir qu'elles se chevauchent maintenant.

s2Transformed = transformScan(s2,pose);
plot(s1)
hold on
plot(s2Transformed)
hold off

Figure contains an axes object. The axes object with title LiDAR Scan, xlabel X, ylabel Y contains 2 objects of type line. One or more of the lines displays its values using only markers

Arguments d'entrée

réduire tout

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 en mètres. Ces valeurs de plage sont les distances d'un capteur à angles spécifié. 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 sous forme de vecteur en radians. Ces valeurs d'angle sont les angles spécifiques du ranges spécifié. Le vecteur doit avoir la même longueur que le vecteur ranges correspondant.

Pose relative de l'analyse actuelle, spécifiée par [x y theta], où [x y] est la translation en mètres et theta est la rotation en radians.

Arguments de sortie

réduire tout

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

Valeurs de plage du scan transformé, renvoyées sous forme de vecteur en mètres. Ces valeurs de plage sont les distances d'un capteur à transAngles spécifié. Le vecteur a la même longueur que le vecteur transAngles correspondant.

Valeurs d'angle du scan transformé, renvoyées sous forme de vecteur en radians. Ces valeurs d'angle sont les angles spécifiques du transRanges spécifié. Le vecteur a la même longueur que le vecteur ranges correspondant.

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 R2017a