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 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.
- Enable / disable pangolin viewer:
enable_pangolin
- For monocular/stereo case, use
world_roll
,world_pitch
,world_yaw
in the launch file to rotate the world frame if necessary (otherwise the first KF will be the world frame). The world frame will be rotated by the provided roll-pitch-yaw angles (in rad) in that order.