MCPcopy Create free account
hub / github.com/AutonomousFieldRoboticsLab/SVIn

github.com/AutonomousFieldRoboticsLab/SVIn @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
1,634 symbols 3,355 edges 239 files 825 documented · 50% updated 2mo ago★ 17520 open issues

Browse by type

Functions 1,396 Types & classes 238
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

SVIN is a tightly coupled Sonar-Visual-Inertial-Depth formulation of Simultaneous Localization and Mapping (SLAM) algorithm for real-time underwater navigation. The package contains two modules:

  1. okvis_ros: Adaption of OKVIS (https://github.com/ethz-asl/okvis_ros) to fuse sonar,depth information in the tightly coupled formulation.
  2. pose_graph: Loop-closing module to enable real-time loop detection and pose-graph optimization based on the bag-of-binary-words library DBoW2.

!!! Note !!!

The main branch now uses ROS 2. Please use the ros1 branch if you need to work with ROS1. We are in process of figuring out how to use old sonar and data in ROS2 as they are custom topic types. Sonar and depth modes will not work and are disabled by default.

Setup Instructions

The setup instructions are tested on Ubuntu 24.04 with ROS Jazzy.

Prerequisites

Please follow installation page for detailed instructions on building SVIN.

Running the project

Running it on our publicly available datasets: https://huggingface.co/datasets/afrl-uw/stereo-vi-underwater-dataset. If you follow "Datasets for Visual-Inertial-Based State Estimation Algorithms" link you will be directed to a google drive directory, under the ' Bus' and 'Cave' you will find ROS bagfile with Sonar topic named as '/imagenex831l/range' and ' /imagenex831l/range_raw'.

!!!Note !!!: Any changes in config/launch files are not reflected unless you build the repo again. All the config/launch files are saved inside install folder and will be updated as part of build.

To build again use

colcon build  --event-handlers console_direct+

Converting between ROS2 and ROS1 bags

The easiest way to convert between ROS1 and ROS2 bag is using rosbags-convert rosbags.

To install

sudo apt install pipx
pipx install rosbags

To convert ROS1 bag to ROS2 use

rosbags-convert --src <ros1 bag> --dst <ros2_bag_folder>

Running with GoPro Dataset ##

Run the launch file for Cave:

source install/setup.bash
ros2 launch okvis_ros svin_gopro_uw.xml

Running on AFRL Datasets

Run the launch file for Cave:

source install/setup.bash
ros2 launch okvis_ros svin_stereorig_v2.xml

Or, run the launch file for Bus:

source install/setup.bash
roslaunch okvis_ros svin_stereorig_v1.xml

In different terminal, run the bag file

ros2 bag play bagfile_name --clock

Ground Truth

The pseudo ground truth trajectories obtained using COLMAP are in colmap_groundtruth folder. These trajectories are only accurate up to scale and evaluation should be done after scaling only.

Note: We plan to release the scale accurate trajectory using rig constraints soon.

Core symbols most depended-on inside this repo

Shape

Method 1,305
Class 215
Function 91
Enum 23

Languages

C++99%
Python1%

Modules by API surface

okvis_ros/okvis/okvis_ceres/src/Estimator.cpp40 symbols
pose_graph/ThirdParty/DBoW/TemplatedVocabulary.h35 symbols
pose_graph/src/utils/Statistics.cpp30 symbols
pose_graph/include/utils/Statistics.h30 symbols
okvis_ros/src/Publisher.cpp29 symbols
okvis_ros/okvis/okvis_multisensor_processing/src/ThreadedKFVio.cpp29 symbols
okvis_ros/okvis/okvis_cv/include/okvis/implementation/MultiFrame.hpp28 symbols
pose_graph/src/pose_graph/Keyframe.cpp26 symbols
pose_graph/include/utils/ThreadSafeQueue.h25 symbols
pose_graph/ThirdParty/DBoW/TemplatedDatabase.h24 symbols
okvis_ros/okvis/okvis_multisensor_processing/include/okvis/threadsafe/ThreadsafeQueue.hpp24 symbols
okvis_ros/okvis/okvis_common/include/okvis/Parameters.hpp24 symbols

For agents

$ claude mcp add SVIn \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page