How sharminrahman/svin2 works
SVIn2 is a real-time underwater sonar–visual–inertial–depth SLAM system. Sensor measurements enter through the ROS adapter and are synchronized by the threaded processing layer; visual matching and triangulation feed a tightly coupled estimator, whose state and landmarks are published to ROS and files. A separate pose-graph module detects loops from keyframes and optimizes their poses. The graph reflects README capabilities and the sampled implementation; some ROS-node wiring and unsampled subsystem details are shown only where documented, not inferred.
Main entry points: ThreadedKFVio.cpp Threaded VIO · Frontend.cpp Visual Frontend · LoopClosing.cpp Loop Detection · Estimator.cpp State Estimator
Components 22
ROS Integration
- ROS Input
okvis_ros/src/Subscriber.cpp - Configuration
okvis_ros/okvis/okvis_common/src/VioParametersReader.cpp - ROS Parameters
okvis_ros/src/RosParametersReader.cpp - State Publisher
okvis_ros/src/Publisher.cpp
Sensor Processing
- Frame Synchronizers
okvis_ros/okvis/okvis_multisensor_processing/src/FrameSynchronizer.cpp - Depth Synchronizer
okvis_ros/okvis/okvis_multisensor_processing/src/DepthFrameSynchronizer.cpp - Sonar Synchronizer
okvis_ros/okvis/okvis_multisensor_processing/src/SonarFrameSynchronizer.cpp - IMU Synchronizer
okvis_ros/okvis/okvis_multisensor_processing/src/ImuFrameSynchronizer.cpp - Threaded VIO
okvis_ros/okvis/okvis_multisensor_processing/src/ThreadedKFVio.cpp
Visual-Inertial Estimation
- Visual Frontend
okvis_ros/okvis/okvis_frontend/src/Frontend.cpp - Feature Matching
okvis_ros/okvis/okvis_matcher/src/MatchingAlgorithm.cpp - Stereo Triangulation
okvis_ros/okvis/okvis_frontend/src/ProbabilisticStereoTriangulator.cpp - State Estimator
okvis_ros/okvis/okvis_ceres/src/Estimator.cpp - Optimization Map
okvis_ros/okvis/okvis_ceres/src/Map.cpp - Sensor Residuals
okvis_ros/okvis/okvis_ceres/src/ImuError.cpp
Loop Closure
- Keyframe Matcher
pose-graph/src/KFMatcher.cpp - Loop Detection
pose-graph/src/LoopClosing.cpp - Word Database
pose-graph/src/ThirdParty/DBoW/TemplatedDatabase.h - Pose Graph Node
pose-graph/src/pose_graph_node.cpp - Pose Visualization
pose-graph/src/utility/CameraPoseVisualization.cpp
Other components
- Sensor Topics
- ROS Outputs
Connections 23
- Sensor Topics → ROS Input: publish measurements
- ROS Input → Threaded VIO: deliver measurements
- ROS Parameters → Configuration: provide parameters
- Configuration → Threaded VIO: configure processing
- Threaded VIO → Frame Synchronizers: synchronize frames
- Threaded VIO → IMU Synchronizer: synchronize IMU
- Threaded VIO → Depth Synchronizer: synchronize depth
- Threaded VIO → Sonar Synchronizer: synchronize sonar
- Threaded VIO → Visual Frontend: process frames
- Visual Frontend → Feature Matching: match features
- Visual Frontend → Stereo Triangulation: triangulate landmarks
- Threaded VIO → State Estimator: add measurements
- Visual Frontend → State Estimator: add visual constraints
- State Estimator → Optimization Map: optimize states
- State Estimator → Sensor Residuals: add IMU residuals
- Threaded VIO → State Publisher: publish state callbacks
- State Publisher → ROS Outputs: publish state and landmarks
- Pose Graph Node → Keyframe Matcher: manage keyframes
- Pose Graph Node → Loop Detection: run loop closure
- Loop Detection → Word Database: query descriptors
- Loop Detection → Keyframe Matcher: compare keyframes
- Loop Detection → Pose Visualization: draw optimized poses
- Pose Visualization → ROS Outputs: publish markers