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
Descargue archivos fuente del repositorio github de Gaobo
git clone https://github.com/gaoxiang12/ORBSLAM2_with_pointcloud_map.git
Contenido del archivo descargado
Solo necesitamos las subcarpetas que contiene . Para facilitar las operaciones posteriores, podemos sacar ORB_SLAM2_modified
las subcarpetas por separado y colocarlas en la ruta del usuario.ORB_SLAM2_modified
home(~)
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/
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
compilado
prueba
Prueba después de completar
modo normal
Nuestra prueba se puede realizar utilizando el conjunto de datos.
rgbd_dataset_freiburg1_xyz
Puede copiar y pegar los archivos descargados en la ronda anterior de pasos /home/heying/ORB_SLAM2_modified/Examples/datasets
en
rgbd_dataset_freiburg1_xyz
Los 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
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
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
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
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 ×tamp)
{
mImRGB = imRGB; //Modified place 1
mImGray = imRGB;
mImDepth = imD;
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
Guarde y salga después de finalizar
Ejecute build.sh, vuelva a compilar
build.sh
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
Puedes ver la información en color.
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 .bashrc
y modifíquelo.
export ROS_PACKAGE_PATH=${
ROS_PACKAGE_PATH}:~/ORB_SLAM2_modified/Examples/ROS
Guardar y salir cuando haya terminado
CMakeLists.txt
Luego 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.txt
archivo.
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
)
Después de realizar los cambios anteriores, elimine ~/ORB_SLAM2_modified/Examples/ROS/ORB_SLAM2/build
la carpeta .
Luego ejecute build_ros.sh para compilar el archivo ROS.
.build_ros.sh
compilado
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.yaml
y se modificaron los parámetros que contiene DepthMapFactor: 1.0
.
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
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
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
Cuando presionas la barra espaciadora para jugar, puedes ver el mapa de la nube de puntos de salida.
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.cc
y llamar a la función de la biblioteca PCL que contiene pcl::io::savePCDFileBinary
para guardar el mapa de la nube de puntos.
primero abre el archivo
gedit src/pointcloudmapping.cc
Modificar
//添加头文件
#include <pcl/io/pcd_io.h> //Modified place3 地图保存的头文件
//保存地图,这里为了管理,新建了pcd文件,将所有保存的pcd放入里面
pcl::io::savePCDFileBinary("/home/heying/ORB_SLAM2_modified/pcd/vslam.pcd", *globalMap); //Modified place 4 保存地图的命令
Guardar y salir cuando haya terminado, luego compilar
cd build/
make -j4
compilado
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
Cuando finalice la reproducción, el programa no se cerrará automáticamente ahora, debe presionar CTRL+C
detener
y luego podrá ver que ~/ORB_SLAM2_modified/pcd
se genera un archivo de nube de puntos llamado vslam.pcd debajo de la ruta.
Para poder ver este archivo pcd, necesitamos instalar la herramienta correspondiente.
sudo apt-get install pcl-tools
Ver vslam.pcd a través de pcl_viewer una vez completado
pcl_viewer vslam.pcd
Se inició con éxito
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.