Solving Short-Term Relocalization Problems In Monocular Keyframe Visual SLAM Using Spatial And Semantic Data
- Azmyin Md. Kamal
- Neyni K. N. Dadson
- Donovan Gegg
- Dr. Corina Barbalata
All authors are with the Department of Mechanical Engineering at Louisiana State University, Baton Rouge, Louisiana, United States of America.
For brevity, we have divided this README into the following sections,
- Introduction
- Overview / Key Results / Bibliography
- Setup
- Demo and Side-by-Side Comparison
- Acknowledgement
- Closing remarks
This repository is a complete ROS 2 workspace which includes the proposed short-term relocalization method along with the presentation slides and the paper. Following ORB-SLAM3 and YOLOv5, this system will also uses GPLv3 License.
This work was presented in 2024 IEEE/ASME International Conference on Advanced Intelligent Mechatronics.
-
A side-by-side comparison between the proposed and DBoW2 based short-term relocalization frameworks is shown below
side_by_side_video_rover.mp4
Thank you very much for your interest in our work. If you have any questions, comments and suggestions, please don't hesitate to opening an Issue in this repository. If you find this project useful, please consider citing the paper as shown below
@inproceedings{kamal2024solving,
title={Solving Short-Term Relocalization Problems In Monocular Keyframe Visual SLAM Using Spatial And Semantic Data},
author={Kamal, Azmyin Md and Dadson, Nenyi Kweku Nkensen and Gegg, Donovan and Barbalata, Corina},
booktitle={2024 IEEE International Conference on Advanced Intelligent Mechatronics (AIM)},
pages={615--622},
year={2024},
organization={IEEE}
}
In this system, we introduced a novel multimodal keyframe descriptor dubbed Pose-Semantic-Descriptor (PSD) and a new Keyframe-based Place Recognition (KPR) method called the Pose-Class-Box (PCB) . Using the novel KPR method, we deomstrate an accurate and computationally efficient solution to the short-term relocalization problem in comparison to the popular relocalization method based on DBoW2 which comes standard in the ORB-SLAM3 framework. At this time, the proposed method has been only tested with the PINHOLE camera model. To fascilite testing of the proposed approach we have provided a number of image sequences and trained weights from the experiment in a Zenodo repository.
The contributions of this work are listed below
-
A new keyframe descriptor called the Pose Semantic Descriptor (PSD) is proposed. It utilizes semantic data and camera pose to uniquely characterize keyframe objects in the pose graph.
-
A novel Keyframe Place Recognition (KPR) algorithm called the Pose-Class-Box (PCB) is formulated that significantly improves pose recovery performance from sudden tracking loss events
-
The integration of the proposed descriptor and KPR method for iwithin the open-source ORB-SLAM3 VSLAM framework.
Important results from this work are shown below
The novel framework is implemented as a combination of three packages / modules
-
orb_slam3_ros2
: A MKVSLAM package based on ROS2 ORB-SLAM3 V1.0 VSLAM system. -
py_ob_detector_yolov5
A custom ROS 2 package that implements YOLOv5 V5.0, a PyTorch-based Object Detector. This package may be used in a stand-alone configuration with minor modifications. Please see theREADME.md
file in package for more details -
matimg_custom_msg_interface
, a package containing all custom messages required to transfer the semantic matrix between the MKVSLAM and Object Detector nodes.
All experiments were done in a laptop with the following configurations
- Ubuntu 22.04 Jammy Jellyfish
- Intel i5-9300H
- Nvidia RTX 2060
- 16 GB ram
In this implementation, the python nodes are the primary driver of the system as it processes image frames from chosen directory and supplies the Semantic Matrix to the C++ VSLAM nodes.
Note!, ORB-SLAM3 requires a lot of memory during compilation. It is highly recommended to have at least 16Gb RAM with 8Gb swap during compilation.
Please install and test the following software before building the workspace in this directory.
-
ROS 2 Humble Hawksbill: tutorial
-
Colcon:
sudo apt install python3-colcon-common-extensions
-
Eigen3:
sudo apt install libeigen3-dev
-
Numpy:
pip3 install numpy
-
PyTorch with CUDA: installation and test
-
Natsort :
pip3 install natsort
-
Requests:
pip3 install requests
The ros2_config.sh
, a shell script is used to automatically loads all the necessary configurations and source both the global and local ROS workspaces. Hence, set up this file using the following method
-
Copy
ros2_config.sh
from\shell_script
folder into\home
-
Add the following lines at the very end of the file of
.bashrc
source ~/ros2_config.sh
if [[ ":$LD_LIBRARY_PATH:" != *":/usr/local/lib:"* ]]; then
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
fi
This workspace must be placed in \home
directory as shown below
- Open a new terminal and execute the following commands
cd ~
git clone https://github.com/RKinDLab/ros2_psd_pcb_reloc
cd ros2_psd_pcb_reloc
colcon build --symlink-install
source ./install/setup.bash
For demonstrating how to use this framework, we have packed all image sequencse from our in-house UGV dataset LSU_ICORE_MONO
and all the neural network weights in this LSU_AIM2024 Zenodo repository. After downloading the files, do the following
- Create the
DATASETS
directory inhome
directory as shown below
cd ~
mkdir DATASETS
- Copy the
IEEEAIM2024_DATASETS
folders fromLSU_AIM2024
into/home/DATASETS
directory. After copying, theDATASETS
directory should look like the following
For sequences from EuRoC MAV simply download the image sequences and put them in the /home/DATASETS/IEEEAIM2024_DATASETS
directory. Refer to the image attached above.
However, for the sequences from TUM RGBD SLAM dataset, these were modified to be ETH-ASL compliant for use with this experiment. We will update this repo in future with instructions on how to download and modify the SLAM sequences to be compatible with this system.
NOTE! during runtime, ground-truth data is not required.
- Copy the
.pt
files fromLSU_AIM2024/Weights
directory intoros2_psd_pcb_reloc/src/py_obj_detector_yolov5_ros2/weights_config
directory.
NOTE!, the C++ nodes must be started first before launching the python node since a handshake
is performed between the C++ and Python node to pass all experiment and configuration parameters.
Open three terminals and execute the following
-
Run robot0 slam node:
ros2 run orb_slam3_ros2 vslam_node --ros-args -p agent_name:=robot0
-
Run robot1 slam node:
ros2 run orb_slam3_ros2 vslam_node --ros-args -p agent_name:=robot1
-
Run python nodes :
ros2 run py_obj_detector_yolov5_ros2 robot_combined_nn --ros-args -p experiment:="ieeeaim2024" -p image_sequence:="ROBOTICSLAB0"
NOTE! The name string passed for image_sequence
must match the name of the dataset given inside the DATASETS/IEEEAIM2024_DATASETS
directory.
Panlogin and OpenCV terminals with name robot0
represnts the VSLAM system with the proposed relocalization method whilst robot1
is the ORB-SLAM3 DBoW2-based relocalization method that is shipped with ORB-SLAM3. You may need to move the windows around a bit. An example is shown below
To use this novel short-term relocalization method with your custom dataset, the following assessts needs to be created
-
In
ros2_psd_pcb_reloc/global_yamls/dataset_db.yaml
, create an entry for your enviornment i.e.MACHINE_HALL
,VICON_ROOM
and update the necessary keys as shown in the file. -
Also create another yaml file like those of
EuRoC.yaml
inros2_psd_pcb_reloc/global_yamls
directory that will supply the VSLAM node with the camera calibration matrix and ORB detector parameters. -
For the YOLOv5 network, you need to train a network and copy the
.pt
weights intosrc/py_obj_detector_yolov5_ros2/weights_configs
directory. -
At the same time you may need to create a custom configuration file like the
custom_euroc_mh.yaml
insidesrc/py_obj_detector_yolov5_ros2/py_obj_detector_yolov5_ros2/neural_net/data
directory -
Finally, create an image sequence in the same tree structure shown in the Setup section.
The authors would like to acknowledge financial support from NSF #2024795, and the Louisiana Board Of Regents Support Fund, under the Louisiana Materials Design Alliance (LAMDA), provided by the Board as cost share to the NSF under grant number OIA-#1946231.
Due to time constraint, we have not uploaded the steps and scripts required to perform the evaluation of the various parameters. If you are interesed in evaluating the proposed framework with your own data, please open an Issue.
-
DUAL-SLAM A purely spatial data based relocalization method, published in IROS 2020. They also solved the same problem as this paper but did not name the problem as short-term relocalization
- Release the training codes for YOLOv5 that we used for this experiment
- Add link to arXiv version of the final paper
- Build and test the packages [05/20/24]
- Better introduction line shown in the top-left [07/02/24]
- Update README.md file with clear step by step instruciton on setting up the system
- Delete all package 2 related codes, ros2_tictoc_profiler, line_lbd, fast_mf
- Start Zenodo and only publish LSU_iCORE_MONO dataset with instructions on how to download and setup the EuRoC and TUM FR2 dataset [1st week July 2024]
- Upload all weights to Zendo and then download and test to make sure they work
- For making a custom dataset work with the YOLOv5 in py_obj_detector, custom yaml files are needed. State how to add them into the /global_yaml files . This information needs to be placed ion the
ros2_psd_pcb
repository