plot
Graficar puntos de mapa 3D y trayectoria estimada de la cámara en SLAM visual RGB-D
Desde R2025a
Descripción
plot(
traza los puntos del mapa 3-D y la trayectoria estimada de la cámara a partir del objeto SLAM visual RGB-D vslam
)vslam
.
plot(
especifica opciones utilizando uno o más argumentos de nombre-valor. Por ejemplo, vslam
,Name=Value
)MarkerSize=10
establece el diámetro del tamaño del marcador en 10 puntos.
devuelve el controlador de ejes para los puntos mapeados en 3D del gráfico, utilizando cualquier combinación de argumentos de entrada de sintaxis anteriores.ax
= plot(___)
Ejemplos
Realice la localización y el mapeo visual simultáneos RGB-D (vSLAM) utilizando los datos del TUM RGB-D Benchmark. Puede descargar los datos a un directorio temporal utilizando un navegador web o ejecutando este código:
baseDownloadURL = "https://vision.in.tum.de/rgbd/dataset/freiburg3/rgbd_dataset_freiburg3_long_office_household.tgz"; dataFolder = fullfile(tempdir,"tum_rgbd_dataset",filesep); options = weboptions(Timeout=Inf); tgzFileName = dataFolder+"fr3_office.tgz"; folderExists = exist(dataFolder,"dir"); % Create a folder in a temporary directory to save the downloaded file if ~folderExists mkdir(dataFolder) disp("Downloading fr3_office.tgz (1.38 GB). This download can take a few minutes.") websave(tgzFileName,baseDownloadURL,options); % Extract contents of the downloaded file disp("Extracting fr3_office.tgz (1.38 GB) ...") untar(tgzFileName,dataFolder); end
Crea dos objetos imageDatastore
. Uno para almacenar las imágenes en color y el otro para almacenar las imágenes de profundidad.
colorImageFolder = dataFolder+"rgbd_dataset_freiburg3_long_office_household/rgb/"; depthImageFolder = dataFolder+"rgbd_dataset_freiburg3_long_office_household/depth/"; imdsColor = imageDatastore(colorImageFolder); imdsDepth = imageDatastore(depthImageFolder);
Seleccione el par sincronizado de imágenes de color y profundidad.
data = load("rgbDepthPairs.mat");
imdsColor=subset(imdsColor, data.indexPairs(:, 1));
imdsDepth=subset(imdsDepth, data.indexPairs(:, 2));
Especifique los parámetros intrínsecos de su cámara y utilícelos para crear un objeto SLAM visual RGB-D.
intrinsics = cameraIntrinsics([535.4 539.2],[320.1 247.6],[480 640]); depthScaleFactor = 5000; vslam = rgbdvslam(intrinsics,depthScaleFactor);
Procese cada par de imágenes de color y profundidad y visualice las poses de la cámara y los puntos del mapa 3D.
for i = 1:numel(imdsColor.Files) colorImage = readimage(imdsColor,i); depthImage = readimage(imdsDepth,i); addFrame(vslam,colorImage,depthImage); if hasNewKeyFrame(vslam) % Query 3-D map points and camera poses xyzPoints = mapPoints(vslam); [camPoses,viewIds] = poses(vslam); % Display 3-D map points and camera trajectory plot(vslam); end % Get current status of system status = checkStatus(vslam); % Stop adding frames when tracking is lost if status == uint8(0) break end end
Una vez procesados todos los fotogramas, reinicie el sistema.
while ~isDone(vslam) plot(vslam); end
reset(vslam);
Realice SLAM visual-inercial RGB-D utilizando los datos del OpenLORIS-Scene Dataset. Descargue los datos a un directorio temporal usando un navegador web o ejecutando este código:
dataFolder = fullfile(tempdir,"OpenLORIS-Scene",filesep); downloadURL = "https://ssd.mathworks.com/supportfiles/shared_nav_vision/data/OpenLORIS-Scene_corridor1-4.zip"; zipFileName = dataFolder+"corridor1-4.zip"; if ~isfolder(dataFolder) mkdir(dataFolder); disp("Downloading corridor1-4.zip (1.13 GB). This download can take a few minutes."); options = weboptions('Timeout', Inf); websave(zipFileName, downloadURL, options); unzip(zipFileName, dataFolder); end
Crea dos objetos imageDatastore
. Uno para almacenar las imágenes en color y el otro para almacenar las imágenes de profundidad.
imageFolder = fullfile(dataFolder,"OpenLORIS-Scene_corridor1-4"); imdsColor = imageDatastore(fullfile(imageFolder,"color")); imdsDepth = imageDatastore(fullfile(imageFolder,"aligned_depth"));
Cargue los datos de mediciones de IMU y la transformación de cámara a IMU.
data = load("corridor4_IMU_data.mat");
gyro = data.gyroDataCell;
accel = data.accelDataCell;
cam2IMU = data.cam2IMU;
Especifique las características intrínsecas de la cámara, los parámetros IMU y utilícelos para crear un objeto SLAM visual-inercial RGB-D.
% Camera intrinsic and IMU parameters can be found in the downloaded % sensors.yaml file intrinsics = cameraIntrinsics([6.1145098876953125e+02, 6.1148571777343750e+02],... [4.3320397949218750e+02, 2.4947302246093750e+02], [480, 848]); imuParams = factorIMUParameters(AccelerometerBiasNoise=2.499999936844688e-05*eye(3),... AccelerometerNoise=0.00026780980988405645*eye(3),... GyroscopeNoise=1.0296060281689279e-05*eye(3),... GyroscopeBiasNoise=2.499999993688107e-07*eye(3),... SampleRate=250); depthScaleFactor = 1000; vslam = rgbdvslam(intrinsics, depthScaleFactor, imuParams, SkipMaxFrames=10,... CameraToIMUTransform=cam2IMU, TrackFeatureRange = [30, 150], DepthRange= [0.1, 6.5], ... NumPosesThreshold=20, MaxNumPoints=1.2e3);
Procesar datos de imágenes y datos IMU y visualizar las poses de la cámara y los puntos del mapa 3D.
for i = 1:numel(imdsColor.Files) colorImage = readimage(imdsColor,i); depthImage = readimage(imdsDepth,i); addFrame(vslam, colorImage, depthImage, gyro{i}, accel{i}); if hasNewKeyFrame(vslam) plot(vslam); end end
Una vez procesados todos los fotogramas, reinicie el sistema.
while ~isDone(vslam) if hasNewKeyFrame(vslam) ax = plot(vslam); end end view(ax, 0, 90)
reset(vslam);
Argumentos de entrada
Objeto SLAM visual RGB-D, especificado como un objeto rgbdvslam
.
Argumentos de par nombre-valor
Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN
, donde Name
es el nombre del argumento y Value
es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de los otros argumentos, pero el orden de los pares no importa.
Ejemplo: plot(vslam,MarkerSize=10)
, establece el diámetro del marcador en 10 puntos.
Diámetro de los marcadores de los puntos del mapa 3D, especificado como un entero positivo en puntos.
Color de los marcadores de los puntos del mapa 3D, especificado como un triplete RGB o un nombre de color corto o largo. Cada valor dentro de un triplete RGB debe estar en el rango [0
1
].
Fuente de mapa de colores para marcadores, especificada como "X"
, "Y"
, "Z"
o "MarkerColor"
.
Ancho de la base de la cámara, especificado como un escalar positivo en las unidades de datos de los ejes.
Color de la cámara, especificado como un triplete RGB o un nombre de color corto o largo. Cada valor dentro de un triplete RGB debe estar en el rango [0
1
].
Ejes para visualización, especificados como un objeto gráfico Axes
o un objeto UIAxes
. Utilice este argumento de nombre-valor para visualizar el gráfico en una interfaz de usuario para la que haya especificado las propiedades Figure
y Axes
.
Argumentos de salida
Controlador de ejes, devuelto como un objeto gráfico axes
.
Historial de versiones
Introducido en R2025a
Consulte también
Objetos
Funciones
addFrame
|hasNewKeyFrame
|checkStatus
|isDone
|mapPoints
|poses
|reset
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)