We need to create two kinds of map using the autonomous drone, the local and global map.
The former for immediate maneuvers and the latter for global path planning and future reference.
This issue is in continuation to #2 and details what we have done, are currently working on and need to achieve finally.
Packages, algorithms and tools used so far:-
Canonical Scan Matcher - The C(anonical) Scan Matcher (CSM) is a pure C implementation of a very fast variation of ICP using a point-to-line metric optimized for range-finder scan matching.
Limitation: PLICP algorithm is very fast and easy to integrate however it has been strictly written to work with LaserScan. Hence to use it in our project we needed to convert PointCloud2 data to LaserScan. However, since we want the final output to be in 3d and not in 2d, we had to drop it.
OctoMap - The OctoMap library implements a 3D occupancy grid mapping approach, providing data structures and mapping algorithms in C++. There are multiple advantages in storing the map as an occupancy grid and not as pointcloud, chief ammongst them is the less storage.
GMapping - This package can create a 2-D occupancy grid map (like a building floorplan) from laser and pose data collected by a mobile robot.
PointCloud library - It is not possible to move ahead with mapping without having sufficient understanding of PCL library. To start with it C++ basics and tutorials would come in handy.
RTABMAP - RTAB-Map (Real-Time Appearance-Based Mapping) is a RGB-D Graph SLAM approach based on a global Bayesian loop closure detector. The loop closure detector uses a bag-of-words approach to determinate how likely a new image comes from a previous location or a new location.
Strengths: It is a very well maintained library with very active community, tutorials and lots of flexibilty.
Current Tech Stack (for mapping)
RTABMAP (primarily for mapping) + PCL (handling pointcloud data) + RViz (for visualisation) + OctoMap (for storing the occupancy grid).
Things that need to be done:-
[ ] Using RTABMAP (which by default uses ICP), generate local and global maps - This is currently under progress, a quick way to reach the current setup would be to use the docker image (root password is hardik).
[ ] These maps need to be in OctTree format (binary format would do) - should be straight forward as rtabmap provides built-in support to occupancy grid.
[ ] Both maps should be visualizable from RViZ
[ ] Global Map should be saved while local map should be published to another topic (to be used by other subsystem).
[ ] The steps needed to generate octomap using this repo's packages need to be documented in the README.md.
[ ] The steps for setup needs to be well documented.
Additionally
An exhaustive comparision of many SLAM techniques available is done by Mathieu Labb ́e at al.
Brief info
Packages, algorithms and tools used so far:-
Current Tech Stack (for mapping)
RTABMAP
(primarily for mapping) +PCL
(handling pointcloud data) +RViz
(for visualisation) +OctoMap
(for storing the occupancy grid).Things that need to be done:-
Additionally