# What is the most appropriate SLAM algorithm for quadrotors with RGB-D camera?

I have been researching on SLAM. I came across EKF SLAM which uses odometry to measure the robot's initial position in the map and as well as landmarks which helps the robot's position to be more accurate. Based on the SLAM for dummies, it has a problem of loop closure. In another journal, it was compared to fastSLAM and EKF has a big-O function of $O(K^2)$ where $K$ is the number of landmarks while fastSLAM has $O(M\log(K))$.

It was also said that the most promising SLAM algorithm from the journal "The vSLAM Algorithm for Navigation in Natural Environments" is FastSLAM However, the vSLAM used by an experiment done by the University of Pennsylvania is the occupancy grid SLAM.

I want to ask what would be the most approriate SLAM algorithm for vSLAM given an unmanned aerial vehicle like the quadrotor and RGB-D camera + IMU? Also are there any algorithm that can be extended to support co-operation?

I assume that your target environment is indoors as you use RGB-D camera. When you want to use it with quadrotor, you need high update rate for accurate pose estimation. Some packages that you can look at are

http://vision.in.tum.de/data/software/dvo

http://wiki.ros.org/demo_rgbd

https://github.com/ccny-ros-pkg/ccny_rgbd_tools

Next, if you want to use only RGB camera + IMU, you must look at this

http://wiki.ros.org/ethzasl_ptam

M. Li and A. I. Mourikis, “High-precision, consistent EKF-based visual–inertial odometry,” Int. J. Rob. Res., vol. 32, pp. 690–711, 2013.

There might be many others but these might be some starting points...

There is no the most appropriate SLAM algorithm. You use based on what you have. Every approach has pros and cons. People use cameras because they are so cheap in comparison with Laser sensors. Laser sensors are extremely expensive however they are so accurate and give more info about the map than cameras. No matter what kind of sensors you use, the ultimate goal of SLAM is to build a map and estimate the robot in this map. Another problem arises when the sensors are used which is the noise. So to filter the measurements, you need a filter. The most common filter used in SLAM is Extended Kalman filter, hence the name EKF-SLAM. Another one is Particle Filter PF.

EKF SLAM which uses odometry to measure the robot's initial position in the map and as well as landmarks which helps the robot's position to be more accurate.

This is actually incorrect. EKF is an optimal estimator. It has nothing to do with odometry. Odometry works as a sensor based on accumulating previous data. As you can see, odometry is an error-prone because it accumulates the noise beside the robot's pose. GPS doesn't work in an indoor environment. This is why SLAM is needed. Given an accurate sensor, say laser, EKF-SLAM for example, the robot is able to estimate its pose in an unknown environment whether indoor or outdoor. Even though cameras are very cheap, the image manipulation is so heavy. Also, a single camera doesn't give the distance to a beacon or landmark.

Besides the very educational comments, you may also want to take a look at Open Keyframe-based Visual-Inertial SLAM (OKVIS) which has open source implementations in ROS and non-ROS version using a generic CMake library.

OKVIS tracks the motion of an assembly of an Inertial Measurement Unit (IMU) plus N cameras (tested: mono, stereo and four-camera setup) and reconstructs the scene sparsely.