RESEARCH
ORB-SLAM3
The capstone students working with the ROV odometry package focused on ORB-SLAM3. To support this we have created a small ecosystem of software packages, the majority of which target ROS2.
There are two main categories of packages: those for building ORB-SLAM3 and related software, and those for running ORB-SLAM3. Most projects will start with the second category (or a new packages which loosely follows the pattern of those existing packages), which will then pull in the first category as part of the build process.
Running ORB-SLAM3
We are currently developing two use cases:
-
Running ORB-SLAM3 in realtime on the ROV odometery package. The “top level” package for this is odometry_nano_deploy. It contains dependencies, configuration and launch files specific to running ORB-SLAM3 on the Nano.
-
Running ORB-SLAM3 in an offline, post-processed mode on bagged data. The top level package for this is odometry_offline_deploy.
Start with the README in each of those packages, depending on your needs.
Both packages depend on odometry_nano_config which contains Nano-specific configuration information (e.g., camera calibrations).
Building ORB-SLAM
Our implementation of ORB-SLAM3 is split into multiple repos.
- orbslam_ros2 is a ROS2 package for building ORB-SLAM3. It includes ORB-SLAM3 as a submodule; note we use a fork of the original package as we needed to make API changes to work more modern versions of Eigen, etc. (and various code fixes). But philosophically, this package should not contain any ROS2 code, just instructions to make ORB-SLAM3 work in a colcon build environment.
- orbslam_odometry_ros2 contains multiple ROS2 nodes which wrap around the ORB-SLAM3 library and do all of the input and output. This includes both realtime and offline nodes.
- odometry_slam_base_ros2 contains common functionality which could be shared between mutliple SLAM/odometry packages.
- orbslam3_msgs contains custom message definitions for Orbslam telemetry.
In general, an end user doesn’t need to manually clone all of these packages, they are imported from a .repos
file in one of the *_deploy
packages above.