Simulación del sistema SLAM visual RGB-D con cosimulación en Gazebo y Simulink
La localización y mapeo visual simultáneo (vSLAM) a menudo utiliza una sola cámara monocular que se basa en imágenes RGB. Estas configuraciones de cámara única tienen una precisión de escala y una percepción de profundidad limitadas. La integración de una cámara de profundidad junto con una cámara monocular proporciona mediciones directas de la geometría de la escena, elimina la ambigüedad de escala y mejora significativamente la precisión del mapeo. Esta configuración se conoce como sistema SLAM visual RGB-D.
Este ejemplo utiliza un mundo Gazebo que contiene un robot Pioneer montado con una cámara RGB-D, en cosimulación con Simulink ®. Se muestra cómo utilizar las imágenes RGB y de profundidad del robot para simular un sistema SLAM visual RGB-D en Simulink. La cosimulación le permite controlar el paso de tiempo en Gazebo usando Simulink y proporciona imágenes RGB y de profundidad sincronizadas en el tiempo, que son cruciales para la precisión de RGB-D SLAM. Dado que se trata de una escena interior, es una buena candidata para las cámaras RGB-D, que tienen una percepción de profundidad limitada y son sensibles a las condiciones de iluminación.
Conectarse a un dispositivo remoto que ejecuta Gazebo
Para este ejemplo, descargue una máquina virtual (VM) siguiendo las instrucciones de Get Started with Gazebo and Simulated TurtleBot (ROS Toolbox) y luego siga estos pasos.
Deshabilite los gráficos 3D acelerados para la máquina virtual. En la app VMware Player, vaya a Configuración de máquina virtual > Pantalla > Gráficos 3D y desmarque Acelerar gráficos 3D. Este paso es crucial para la sincronización temporal entre Gazebo y Simulink.
Inicie la máquina virtual de Ubuntu®.
En el escritorio de Ubuntu, haga clic en el ícono Gazebo RGBD SLAM ROS para iniciar el mundo Gazebo creado para este ejemplo.
Si está utilizando una escena personalizada en un dispositivo remoto diferente, primero debe instalar el complemento de cosimulación Gazebo antes de ejecutar el ejemplo. Para obtener más información sobre la instalación del complemento, consulte Realizar cosimulación entre Simulink y Gazebo (Robotics System Toolbox).
Cargar y configurar datos de simulación
Cargue y visualice los puntos de referencia registrados para la trayectoria de ground-truth del robot.
load("rgbdvslamWaypoints.mat") plot(wayPoints(:,1),wayPoints(:,2),LineWidth=3) xlabel("X") ylabel("Y") grid on title("Robot Ground Truth Trajectory in World Frame")
Especifique el tiempo de muestra de simulación.
Ts = 0.05;
Calcula la hora de finalización de la simulación en función del tiempo de muestra y el número de puntos de referencia en la trayectoria.
simEndTime = (size(wayPoints,1)-1)*Ts
simEndTime = 12.5500
Inspeccionar el modelo Simulink
El modelo implementa el sistema visual SLAM RGB-D y cosimulación con Gazebo para controlar el movimiento del robot. También visualiza imágenes del sensor RGB-D y registra las poses de la cámara y las identificaciones de vista generadas desde el sistema SLAM visual. El modelo contiene estos componentes:
El bloque Gazebo Pacer (Robotics System Toolbox) avanza la simulación de Gazebo a la misma velocidad que Simulink, lo que le permite ejecutar comandos con precisión mientras simula la dinámica física en Gazebo. Para utilizar este modelo con su propio dispositivo ROS ejecutando Gazebo, debe actualizar los parámetros de la red de cosimulación haciendo clic en Configurar la red y la simulación de Gazebo en la máscara de bloque.
Los bloques Gazebo Read (Robotics System Toolbox) obtienen los mensajes de imagen RGB y de profundidad de Gazebo.
El bloque de función MATLAB
getImagesFromGazeboMsgs
procesa los mensajes de Gazebo y genera la imagen RGB y la imagen de profundidad como una matrizuint8
y una matrizuint16
, respectivamente.El bloque de sistema MATLAB
Helper
RGBD
Visual
SLAM System
implementa el algoritmo SLAM visual RGB-D utilizando el objetorgbdvslam
(Computer Vision Toolbox) y sus funciones de objeto, y genera las poses de la cámara y las identificaciones de vista. Puede utilizar los parámetros de bloque para cambiar los parámetros visuales SLAM.El subsistema
Logging
and
Visualization
registra las poses finales de la cámara y las identificaciones de vista de la ejecución SLAM visual en el paso de tiempo final. También visualiza las imágenes RGB y de profundidad de los fotogramas clave detectados durante la simulación.El subsistema
Robot
Navigation
controla el movimiento del robot en Gazebo a lo largo de los puntos de entrada utilizando bloques Gazebo Apply Command (Robotics System Toolbox).
open_system("rgbdvslamGazeboCosim")
Ejecutar simulación SLAM visual RGB-D
Ejecute el modelo. El robot se mueve en Gazebo y el modelo inicializa el mapa y comienza a ejecutar el algoritmo SLAM visual RGB-D.
El visor de video visualiza las imágenes RGB y de profundidad durante toda la simulación.
La ventana de la figura visualiza los puntos del mapa 3D y la trayectoria de la cámara a lo largo de la simulación.
En el paso de tiempo final, el modelo guarda las poses de la cámara, las identificaciones de las vistas, así como los pasos de tiempo de cualquier mensaje descartado durante la simulación.
out = sim("rgbdvslamGazeboCosim");
Comparar los resultados con la verdad fundamental
Utilice la función auxiliar helperProcessRGBDVSLAMResults
para obtener las poses de la cámara y los puntos de referencia de ground-truth como objetos rigidtform3d
. La función sincroniza las poses de la cámara con las poses exactas de los puntos de referencia de la ground-truth en cada paso de tiempo filtrando los puntos de referencia en los que la comunicación Simulink-Gazebo dejó caer mensajes.
[camPosesEst,camPosesGT] = helperProcessRGBDVSLAMResults(out,wayPoints,Ts);
Utilice la función compareTrajectories
para calcular y visualizar el error de traducción absoluto entre las poses de la cámara estimadas y las ground-truth .
Tenga en cuenta que las poses de la cámara de ground-truth están en el marco del mundo, pero las poses de la cámara estimadas están en el marco de la cámara. La función compareTrajectories
(Computer Vision Toolbox) alinea la trayectoria estimada con la trayectoria de ground-truth realizando un ajuste de mínimos cuadrados entre los componentes de traducción de las poses en las dos trayectorias. Utilice el objeto de métricas de trayectoria para mostrar el error cuadrático medio (RMSE) entre las traducciones de cámara estimadas y ground-truth .
metrics = compareTrajectories(camPosesEst,camPosesGT,AlignmentType="rigid"); figure plot(metrics,"absolute-translation",ShowGroundTruth=true); disp(["Absolute RMSE for waypoint location (m): ",num2str(metrics.AbsoluteRMSE(2))]);
Absolute RMSE for waypoint location (m): 0.27895
view(0,90)
Consulte también
rgbdvslam
(Computer Vision Toolbox)
Temas
- Construya e implemente el algoritmo SLAM visual con ROS en MATLAB
- Visual SLAM with RGB-D Camera (Computer Vision Toolbox)
- Performant and Deployable Stereo Visual SLAM with Fisheye Images (Computer Vision Toolbox)