ORB-SLAM is a Visual SLAM system for monocular cameras, meaning it generates entire 3D maps from basic video footage. When it released in 2015 it was considered a state-of-the-art SLAM method for its use of Bundle Adjustment (BA), which is very computationally expensive. Thus, the use of BA in live tasks was very restricted.
To enable BA in ORB-SLAM, the developers had to make a number of optimizations that were unique to ORB-SLAM. First, they use the same features for all parts of the SLAM system. In earlier implementations, different types of keypoints (e.g. FAST corners for one spot and SIFT for another) were often used for different SLAM tasks like loop closure and tracking. ORB-SLAM optimizes this by using the same ORB features for all three threads it initializes.
Another optimization in the ORB-SLAM procedure is the procedure it uses to spawn keyframes and map points. While an abundance of these features can make mapping more accurate, they also contribute to the computational cost of running Online SLAM. The ORB-SLAM authors develop a procedure that spawns many map points and keyframes, but as they algorithm progresses, restricts the number of such points to allow for real-time computation.
ORB-SLAM was designed to work with the Robot Operating System (ROS), which works with Ubuntu 20 or earlier versions of Ubuntu. Newer Ubuntu distributions, like Ubuntu 24, which was used for this project, only support ROS2, which is not compatible with original ROS code. This necessitated a port of the ORB-SLAM package to implement our updates.
The porting process was more difficult than simply updating calls from roscpp, which was the ROS package, to rclcpp, the updated ROS2 package. There were also several files relying on other outdated libraries like the legacy OpenCV API and outdated versions of tf code, which is used to publish transformations for the mapping process.
Other work included restructuring the CMake file to support the ROS2 build, porting video files that were designed for ROS, and restructuring code where the port to ROS2 made the original structure unsupportable.
When mapping the provided demo footage, we saw similar results to the claimed performance. The authors claimed this footage would see two relocalizations and a loop closure. In our testing, both these are visible and effective. Here is a sped-up video of our ORB-SLAM port running on the EuRoC dataset:
Works Cited