A ROS wrapper for ORB-SLAM3. The main idea is to use the ORB-SLAM3 as a standalone library and interface with it instead of putting everything together. For that, you can check out this package.
Tested with ORB-SLAM3 V1.0, primarily on Ubuntu 20.04.
- Pros:
- Easy to update ORB-SLAM3 indepedently.
- Easy to replace different variants that are not built for ROS.
- Cons:
- Dependent on the exposed APIs from ORB-SLAM3.
- Development involves more steps (1. Make changes in ORB-SLAM3 library -> 2. Build ORB-SLAM3 -> 3. Change the roswrapper if necessary -> 4. Test).
- Might break when dependencies or upstream changes.
General guide: first, install ORB-SLAM3 normally with all of its dependencies (any location is fine). Then, install this package in a catkin build
environment.
- Install the prerequisites.
- Clone ORB-SLAM3:
cd ~
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
- Make changes to the source code if necessary to build successfully. For Ubuntu 20.04, you will need to change CMakeList from C++11 to C++14. I have incorporated the changes in this fork.
- Build:
cd ORB_SLAM3
chmod +x build.sh
./build.sh
- Make sure that
libORB_SLAM3.so
is created in the ORB_SLAM3/lib folder. If not, check the issue list from the original repo and retry.
- Clone the package. Note that it should be a
catkin build
workspace.
cd ~/catkin_ws/src/
git clone https://github.com/thien94/orb_slam3_ros_wrapper.git
- Open
CMakeLists.txt
and change the directory that leads to ORB-SLAM3 library at the beginning of the file (default is home folder~/
)
cd ~/catkin_ws/src/orb_slam3_ros_wrapper/
nano CMakeLists.txt
# Change this to your installation of ORB-SLAM3. Default is ~/
set(ORB_SLAM3_DIR
$ENV{HOME}/ORB_SLAM3
)
- Build the package normally.
cd ~/catkin_ws/
catkin build
-
Next, copy the
ORBvoc.txt
file fromORB-SLAM3/Vocabulary/
folder to theconfig
folder in this package. Alternatively, you can change thevoc_file
param in the launch file to point to the right location. -
(Optional) Install
hector-trajectory-server
to visualize the trajectory.
sudo apt install ros-[DISTRO]-hector-trajectory-server
- If everything works fine, you can now try the different launch files in the
launch
folder.
In build_docker.sh
check DOCKERFILE that you want to build.
Build the orb_slam3_ros_wrapper
Docker image:
./build_docker.sh
Run the built image as follows:
./run_docker.sh
If the Docker container is already running (the usual case) simply do:
docker start orb_slam3_cpu
docker attach orb_slam3_cpu
ORB SLAM3 ROS WRAPPER with CPU only setup
./build_docker.sh --dockerfile Dockerfile.cpu --image-name orb_slam3_cpu
./run_docker.sh orb_slam3_cpu_container orb_slam3_cpu:bionic
- In one terminal, launch the node:
roslaunch orb_slam3_ros_wrapper euroc_monoimu.launch
- In another terminal, playback the bag:
rosbag play MH_01_easy.bag
Similarly for other sensor types.
The following topics are published by each node:
/orb_slam3/map_points
(PointCloud2
): all keypoints being tracked./orb_slam3/camera_pose
(PoseStamped
): current left camera pose in world frame, as returned by ORB-SLAM3.tf
: transformation from camera frame to world frame.