All Projects → BaptisteHudyma → RGB-D-SLAM

BaptisteHudyma / RGB-D-SLAM

Licence: GPL-3.0 license
Work in Progress. A SLAM implementation based on plane and superquadric tracking.

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to RGB-D-SLAM

dvo python
Coding dense visual odometry in a little more than a night (yikes)!
Stars: ✭ 40 (+73.91%)
Mutual labels:  slam, rgbd, slam-algorithms
ndtpso slam
ROS package for NDT-PSO, a 2D Laser scan matching algorithm for SLAM
Stars: ✭ 32 (+39.13%)
Mutual labels:  slam, slam-algorithms
TinyGrapeKit
A bunch of state estimation algorithms
Stars: ✭ 184 (+700%)
Mutual labels:  slam, slam-algorithms
microstrain inertial
ROS driver for all of MicroStrain's current G and C series products. To learn more visit
Stars: ✭ 44 (+91.3%)
Mutual labels:  slam, slam-algorithms
Maskfusion
MaskFusion: Real-Time Recognition, Tracking and Reconstruction of Multiple Moving Objects
Stars: ✭ 404 (+1656.52%)
Mutual labels:  slam, rgbd
staticfusion
StaticFusion
Stars: ✭ 107 (+365.22%)
Mutual labels:  slam, rgbd
vslam
Basic algorithms for vslam.
Stars: ✭ 44 (+91.3%)
Mutual labels:  slam, slam-algorithms
AVP-SLAM-PLUS
An implementation of AVP-SLAM and some new contributions
Stars: ✭ 371 (+1513.04%)
Mutual labels:  slam, slam-algorithms
Co Fusion
Co-Fusion: Real-time Segmentation, Tracking and Fusion of Multiple Objects
Stars: ✭ 400 (+1639.13%)
Mutual labels:  slam, rgbd
rgbd ptam
Python implementation of RGBD-PTAM algorithm
Stars: ✭ 65 (+182.61%)
Mutual labels:  slam, rgbd
srrg2 slam interfaces
Plug-and-Play SLAM core repository. Atomic and compound SLAM modules
Stars: ✭ 76 (+230.43%)
Mutual labels:  slam
slam gmapping
Slam Gmapping for ROS2
Stars: ✭ 56 (+143.48%)
Mutual labels:  slam
Landmark Detection Robot Tracking SLAM-
Simultaneous Localization and Mapping(SLAM) also gives you a way to track the location of a robot in the world in real-time and identify the locations of landmarks such as buildings, trees, rocks, and other world features.
Stars: ✭ 14 (-39.13%)
Mutual labels:  slam
cv-arxiv-daily
🎓Automatically Update CV Papers Daily using Github Actions (Update Every 12th hours)
Stars: ✭ 216 (+839.13%)
Mutual labels:  slam
ai for robotics
Visualizations of algorithms covered in Sebastian Thrun's excellent Artificial Intelligence for Robotics course on Udacity.
Stars: ✭ 125 (+443.48%)
Mutual labels:  slam
diode-devkit
DIODE Development Toolkit
Stars: ✭ 58 (+152.17%)
Mutual labels:  rgbd
shrec17
Supplementary code for SHREC 2017 RGB-D Object-to-CAD Retrieval track
Stars: ✭ 27 (+17.39%)
Mutual labels:  rgbd
udacity-cvnd-projects
My solutions to the projects assigned for the Udacity Computer Vision Nanodegree
Stars: ✭ 36 (+56.52%)
Mutual labels:  slam
wpb home
Source code for WPB ROS Robot
Stars: ✭ 51 (+121.74%)
Mutual labels:  slam
rgbd scribble benchmark
RGB-D Scribble-based Segmentation Benchmark
Stars: ✭ 24 (+4.35%)
Mutual labels:  rgbd

RGB-D-SLAM

My take on a SLAM, based on shape primitive recognition with a RGB-D camera. The system uses depth informations as a connected 2D graph to extract primitive shapes, and use them with 3D points and lines to estimate it's position in space. A map is created with those points, lines and primitive shapes.

The primitive detection is based on Fast Cylinder and Plane Extraction from Depth Cameras for Visua Odometry. See the Doxygen documentation on GitHub Pages.

For now, we are at the state of visual odometry with local mapping.

Examples

Some examples are given, but their dataset are not given. A configuration file must be given for every example, based on the model given in configuration_example.yaml. This configuration file must be placed in the data/my_dataset folder.

  • CAPE : The CAPE dataset contains RGB-D (size: 640x480) sequences of low textured environments, that are challenging for point-based SLAMs. It contains planes and cylinders, initially to test the CAPE process. The groundtrut trajectory are given for some sequences.
  • freiburg-Berkeley : The Freiburg-Berkeley datasets are sequences of raw RGB-D (size: 640x480), with accelerometers data and groundtruth trajectories. Their is a lot of different videos, with different conditions (translation/rotations only, dynamic environments, ...)

packages

opencv
Eigen
g2o
pugixml

Build and Run

mkdir build && cd build
cmake ..
make

Run the tests

./test_p3p
./testPoseOptimization
./testKalmanFiltering

When all the tests are validated, you can run the main SLAM algorithm

How to use

./slam_freiburg1 desk

Parameters

-h Display the help
-d displays the staged features (not yet in local map)
-f path to the file containing the data (depth, rgb, cam parameters)
-c use cylinder detection 
-j Drop j frames between slam process
-i index of starting frame (> 0)
-l compute line features
-s Save the trajectory in an output file

Check memory errors

valgrind --suppressions=/usr/share/opencv4/valgrind.supp --suppressions=/usr/share/opencv4/valgrind_3rdparty.supp ./slam_freiburg1 desk

Detailed process

feature detection & matching

The system starts by splitting the depth image as a 2D connected graph, and run a primitive analysis on it. This analysis extract local planar features, that are merged into bigger planes. Using an iterative RANSAC algorithm, those planar features are fitted to cylinders if possible, providing two kind of high level features. Those high level features are matched on one frame to another by comparing their normals and Inter-Over-Union score.

The system also extract points and lines, to improve reliability of pose extraction. The lines are extracted using LSD. The feature points are tracked by optical flow and matched by their BRIEF descriptors when needed, and every N frames to prevent optical flow drift.

local map

Every features are maintained in a local map, that keep tracks of the reliable local features. Those features parameters (positions, uncertainties, speed, ...) is updated if a map feature is matched, using an individual Kalman filter per feature (no bundle adjustment yet).

New features are maintained in a staged feature container, that behaves exactly like the local map, but as a lesser priority during the matching step.

pose optimization

The final pose for the frame is computed using the local map to detected feature matches. Outliers are filtered out using a simple RANSAC, and the final pose is computed using Levenberg Marquardt algorithm, with custom weighting functions.

The optimized pose is used to update the local map and motion model, in case the features are lost for a moment.

The complete systems runs in real time, between 30FPS and 60FPS for images of 640x480 pixels (depth and RGB images).

To be implemented soon

  • Advanced camera parameter model
  • Point descriptors based on custom neural network
  • Usage of keyframe to separate local maps
  • Loop closing based on multiscale neural network
  • Use a graph between keyframe to represent the trajectory, and close the loop easily (using bundle adjustment)
  • Create a new separate trajectory when loosing track of features, and merge it to the main trajectory when possible

References:

Primitive extraction

Pose Optimization

Visual odometry

SLAM

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].