Diseño de ORB-SLAM2 (4) ORB-SLAM2 crea una nube de puntos

alimentar

El trabajo de Gao Bo es una extensión del ORB SLAM2 básico. La idea básica es construir una nube de puntos correspondiente para cada cuadro clave y luego unir todas las nubes de puntos de acuerdo con la información de posición del cuadro clave obtenida de ORB SLAM2 para formar un global. mapa de nube de puntos.

https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map

Las dependencias específicas incluyen:
OpenCV (versión recomendada 3.2)
DBoW2 y g2o (los archivos fuente se incluyeron en el repositorio de github y luego se compilaron juntos, independientemente de aquí)
ROS (melódico recomendado)
Eigen3 (versión recomendada 3.2)
Pangolin

PCL: debido a la adición de operaciones relacionadas con la nube de puntos, es necesario instalar el archivo de la biblioteca PCL

sudo apt install libpcl-dev

inserte la descripción de la imagen aquí

Descargue archivos fuente del repositorio github de Gaobo

git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git

inserte la descripción de la imagen aquí

Contenido del archivo descargado
inserte la descripción de la imagen aquí

Solo necesitamos las subcarpetas que contiene . Para facilitar las operaciones posteriores, podemos sacar ORB_SLAM2_modifiedlas subcarpetas por separado y colocarlas en la ruta del usuario.ORB_SLAM2_modifiedhome(~)

Luego copie la carpeta Vocabulary en el ORB SLAM2 original y el archivo ORBvoc.txt.tar.gz en él, y colóquelos en la ruta ORB_SLAM2_modified.

cp -r Vocabulary/ ~/ORB_SLAM2_modified/

inserte la descripción de la imagen aquí

compilar

empezar a compilar

Primero elimine ~/ORB_SLAM2_modified/cmake-build-debug, ~/ORB_SLAM2_modified/Thirdparty/DBoW2/build , ~/ORB_SLAM2_modified/Thirdparty/g2o/build estas tres carpetas de compilación,

Luego ejecute build.sh en ORB_SLAM2_modified para compilar

 ./build.sh

inserte la descripción de la imagen aquí

compilado
inserte la descripción de la imagen aquí

prueba

Prueba después de completar

modo normal

Nuestra prueba se puede realizar utilizando el conjunto de datos.

rgbd_dataset_freiburg1_xyzPuede copiar y pegar los archivos descargados en la ronda anterior de pasos /home/heying/ORB_SLAM2_modified/Examples/datasetsen
inserte la descripción de la imagen aquí

rgbd_dataset_freiburg1_xyzLos archivos RGB y de profundidad en la alineación deben coincidir antes de usar los datos . El sitio web oficial de datos de TUM proporciona un programa coincidente associate.py, que también es el archivo py descargado en la última ronda
https://svncvpr.in.tum.de/cvpr-ros-pkg/trunk/rgbd_benchmark/rgbd_benchmark_tools/src/rgbd_benchmark_tools/associate .py

Guarde el archivo Python y ejecútelo.

python associate.py rgb.txt depth.txt > association.txt

inserte la descripción de la imagen aquí

Ejecute, preste atención a la ruta del archivo llamado

./bin/rgbd_tum Vocabulary/ORBvoc.bin Examples/RGB-D/TUM1.yaml Examples/datasets/rgbd_dataset_freiburg1_xyz Examples/datasets/rgbd_dataset_freiburg1_xyz/associations.txt

inserte la descripción de la imagen aquí

Tenga en cuenta que esta situación puede ocurrir cuando algunos estudiantes operan,
el terminal no informa un error y los datos de la cámara y la información de pose también salen, pero la nube de puntos es así, no se ponga
inserte la descripción de la imagen aquí

nervioso, solo necesita moverse Coloque el mouse en la ventana [visor] y luego use la rueda del mouse para alejar la interfaz. Estos tres colores aparecen porque las coordenadas mostradas por la nube de puntos son estos tres colores. La ventana está demasiado cerca de estas coordenadas y son todo bloqueado. Entonces solo necesitas mover el mouse.


Modificación de parámetros del modo normal

Se puede ver que en la imagen de arriba, el mapa de nube de puntos es blanco y negro y el efecto visual no es muy bueno. Existe un método para crear un mapa de nube de puntos en color en la edición de Github de Gaobo https://github.com /gaoxiang12/ORBSLAM2_with_pointcloud_map/issues/ 10#issuecomment-309663764

Primero modifica el archivo.~/ORB_SLAM2_modified/include/Tracking.h

  // Current Frame
    Frame mCurrentFrame;
    cv::Mat mImRGB; 		//Modified place 1

inserte la descripción de la imagen aquí
Guardar y salir cuando haya terminado

luego modificar~/ORB_SLAM2_modified/src/Tracking.cc

primer lugar

cv::Mat Tracking::GrabImageRGBD(const cv::Mat &imRGB,const cv::Mat &imD, const double &timestamp)
{
    
    
    mImRGB = imRGB;	//Modified place 1
    mImGray = imRGB;
    mImDepth = imD;

inserte la descripción de la imagen aquí

segundo lugar

    // insert Key Frame into point cloud viewer
    mpPointCloudMapping->insertKeyFrame( pKF, this->mImGray, this->mImDepth );
    mpPointCloudMapping->insertKeyFrame( pKF, this->mImRGB, this->mImDepth );   //Modified place 2

inserte la descripción de la imagen aquí
Guarde y salga después de finalizar

Ejecute build.sh, vuelva a compilar

build.sh

inserte la descripción de la imagen aquí

Prueba de color en modo normal

Luego comienza la prueba.

./bin/rgbd_tum Vocabulary/ORBvoc.bin Examples/RGB-D/TUM1.yaml Examples/datasets/rgbd_dataset_freiburg1_xyz Examples/datasets/rgbd_dataset_freiburg1_xyz/associations.txt

inserte la descripción de la imagen aquí


Puedes ver la información en color.
inserte la descripción de la imagen aquí


modo ROS

Si desea ejecutar en forma de ROS, también debe compilar el archivo ROS en el archivo descargado. También hay algunas configuraciones adicionales que se deben realizar aquí.



Primero, configure la variable de entorno, agregue el directorio donde se encuentra ROS a ROS_PACKAGE_PATH la variable de entorno como antes,
abra el archivo en el directorio principal .bashrcy modifíquelo.

export ROS_PACKAGE_PATH=${
    
    ROS_PACKAGE_PATH}:~/ORB_SLAM2_modified/Examples/ROS

inserte la descripción de la imagen aquí


Guardar y salir cuando haya terminado

CMakeLists.txtLuego configure y modifique la carpeta de la carpeta ROS.
Todo lo que tenemos que hacer es consultar ~/ORB_SLAM2_modified/CMakeLists.txt el archivo y agregar la configuración relacionada con PCL al ~/ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2/CMakeLists.txtarchivo.
Abra este archivo y realice los siguientes cambios.

find_package(Eigen3 3.1.0 REQUIRED)
find_package(Pangolin REQUIRED)
find_package( PCL 1.7 REQUIRED )    ####### 修改1


include_directories(
${
    
    PROJECT_SOURCE_DIR}
${
    
    PROJECT_SOURCE_DIR}/../../../
${
    
    PROJECT_SOURCE_DIR}/../../../include
${
    
    Pangolin_INCLUDE_DIRS}
${
    
    PCL_INCLUDE_DIRS}  ####### 修改2
)

add_definitions( ${
    
    PCL_DEFINITIONS} )   ####### 修改3
link_directories( ${
    
    PCL_LIBRARY_DIRS} ) ####### 修改4

set(LIBS
${
    
    OpenCV_LIBS}
${
    
    EIGEN3_LIBS}
${
    
    Pangolin_LIBRARIES}
${
    
    PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${
    
    PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${
    
    PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
${
    
    PCL_LIBRARIES} ####### 修改5
)

inserte la descripción de la imagen aquí

Después de realizar los cambios anteriores, elimine ~/ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2/buildla carpeta .

Luego ejecute build_ros.sh para compilar el archivo ROS.

.build_ros.sh

inserte la descripción de la imagen aquí

compilado
inserte la descripción de la imagen aquí

Varios parámetros de la cámara se guardan en Examples/RGB-D/TUM1.yaml , uno de los cuales se llama DepthMapFactor.
En el sitio web oficial de datos de TUM
https://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats#intrinsic_camera_calibration_of_the_kinect

factor = 5000 # for the 16-bit PNG files
# OR: factor = 1 # for the 32-bit float images in the ROS bag files

Por lo tanto, este parámetro debe cambiarse antes de ejecutar ROS DepthMapFactor: 1.0.

Durante la operación específica, el archivo se copió TUM1.yaml, se nombró TUM1_ROS.yamly se modificaron los parámetros que contiene DepthMapFactor: 1.0.
inserte la descripción de la imagen aquí

Luego recuerde copiar y pegar el paquete de bolsa descargado en el proceso de la sección anterior para/home/heying/ORB_SLAM2_modified/Examples/datasets
inserte la descripción de la imagen aquí

prueba de modo ROS

Después de la modificación, ejecute el siguiente comando para probar

roscore
rosrun ORB_SLAM2  RGBD  Vocabulary/ORBvoc.bin Examples/RGB-D/TUM1_ROS.yaml

inserte la descripción de la imagen aquí

Reproduce el paquete de bolsa, pero necesitas cambiar el tema de los datos reproducidos.

rosbag play --pause Examples/datasets/rgbd_dataset_freiburg1_xyz.bag /camera/rgb/image_color:=/camera/rgb/image_raw /camera/depth/image:=/camera/depth_registered/image_raw

inserte la descripción de la imagen aquí

Cuando presionas la barra espaciadora para jugar, puedes ver el mapa de la nube de puntos de salida.
inserte la descripción de la imagen aquí

guardar mapa

Archivo de referencia
PCL: lea la nube de puntos pcd en la ruta especificada | guarde la nube de puntos en la ruta especificada

Problema Estos solo pueden ver mapas de nubes de puntos en tiempo real y no se pueden guardar. Podemos modificar ligeramente el archivo
~/ORB_SLAM2_modified/src/pointcloudmapping.ccy llamar a la función de la biblioteca PCL que contiene pcl::io::savePCDFileBinarypara guardar el mapa de la nube de puntos.


primero abre el archivo

gedit  src/pointcloudmapping.cc

inserte la descripción de la imagen aquí
Modificar

//添加头文件
#include <pcl/io/pcd_io.h>                        //Modified place3 地图保存的头文件

inserte la descripción de la imagen aquí

//保存地图,这里为了管理,新建了pcd文件,将所有保存的pcd放入里面
        pcl::io::savePCDFileBinary("/home/heying/ORB_SLAM2_modified/pcd/vslam.pcd", *globalMap);   //Modified place 4 保存地图的命令

inserte la descripción de la imagen aquí

Guardar y salir cuando haya terminado, luego compilar

cd build/
make -j4

inserte la descripción de la imagen aquí

compilado
inserte la descripción de la imagen aquí


Luego ejecute los comandos SLAM antes mencionados para generar un archivo de nube de puntos llamado vslam.pcd en la ruta ~/ORB_SLAM2_modified/pcd.

roscore
rosrun ORB_SLAM2  RGBD  Vocabulary/ORBvoc.bin Examples/RGB-D/TUM1_ROS.yaml
rosbag play --pause Examples/datasets/rgbd_dataset_freiburg1_xyz.bag /camera/rgb/image_color:=/camera/rgb/image_raw /camera/depth/image:=/camera/depth_registered/image_raw

Operación normal
inserte la descripción de la imagen aquí

Cuando finalice la reproducción, el programa no se cerrará automáticamente ahora, debe presionar CTRL+Cdetener
y luego podrá ver que ~/ORB_SLAM2_modified/pcdse genera un archivo de nube de puntos llamado vslam.pcd debajo de la ruta.
inserte la descripción de la imagen aquí


Para poder ver este archivo pcd, necesitamos instalar la herramienta correspondiente.

sudo apt-get install pcl-tools

inserte la descripción de la imagen aquí


Ver vslam.pcd a través de pcl_viewer una vez completado

pcl_viewer vslam.pcd

inserte la descripción de la imagen aquí
Se inició con éxito
inserte la descripción de la imagen aquí

Hasta ahora, el proceso de utilizar el paquete fuera de línea para implementar la cámara SLAM para crear mapas de nubes de puntos está completo.

Supongo que te gusta

Origin blog.csdn.net/Xiong2840/article/details/128372804
Recomendado
Clasificación