All Projects → lifunudt → M2SLAM

lifunudt / M2SLAM

Licence: Unknown, GPL-3.0 licenses found Licenses found Unknown LICENSE.txt GPL-3.0 License-gpl.txt
M2SLAM: Visual SLAM with Memory Management for large-scale Environments

Programming Languages

C++
36643 projects - #6 most used programming language
Makefile
30231 projects
c
50402 projects - #5 most used programming language
CMake
9771 projects
Objective-C++
1391 projects
objective c
16641 projects - #2 most used programming language

Projects that are alternatives of or similar to M2SLAM

Memorypool
一个极简内存池实现
Stars: ✭ 131 (+244.74%)
Mutual labels:  memory-management
Pytorch memonger
Experimental ground for optimizing memory of pytorch models
Stars: ✭ 223 (+486.84%)
Mutual labels:  memory-management
lostX
(RSS 2018) LoST - Visual Place Recognition using Visual Semantics for Opposite Viewpoints across Day and Night
Stars: ✭ 60 (+57.89%)
Mutual labels:  visual-slam
Heapinspector For Ios
Find memory issues & leaks in your iOS app without instruments
Stars: ✭ 1,819 (+4686.84%)
Mutual labels:  memory-management
Ugc
A single-header incremental garbage collector library
Stars: ✭ 173 (+355.26%)
Mutual labels:  memory-management
D3d12memoryallocator
Easy to integrate memory allocation library for Direct3D 12
Stars: ✭ 234 (+515.79%)
Mutual labels:  memory-management
Ipyexperiments
jupyter/ipython experiment containers for GPU and general RAM re-use
Stars: ✭ 128 (+236.84%)
Mutual labels:  memory-management
total
Ruby Gem to get total memory size in the system
Stars: ✭ 15 (-60.53%)
Mutual labels:  memory-management
Broom
An ergonomic tracing garbage collector that supports mark 'n sweep garbage collection
Stars: ✭ 203 (+434.21%)
Mutual labels:  memory-management
csharp-workshop
NDC London 2019, Workshop: Become a better C# programmer: more Value, more Expressions, no Waiting
Stars: ✭ 21 (-44.74%)
Mutual labels:  memory-management
Umpire
An application-focused API for memory management on NUMA & GPU architectures
Stars: ✭ 154 (+305.26%)
Mutual labels:  memory-management
Blog
Our open source benchmarks and code samples
Stars: ✭ 162 (+326.32%)
Mutual labels:  memory-management
cactusref
🌵 Cycle-Aware Reference Counting in Rust
Stars: ✭ 129 (+239.47%)
Mutual labels:  memory-management
Avoid Memory Leak Android
🔥 Examples of memory leaks and common patterns that cause them in Android development and how to fix/avoid them
Stars: ✭ 140 (+268.42%)
Mutual labels:  memory-management
archery
Abstract over the atomicity of reference-counting pointers in rust
Stars: ✭ 107 (+181.58%)
Mutual labels:  memory-management
Isoalloc
A general purpose memory allocator that implements an isolation security strategy to mitigate memory safety issues while maintaining good performance
Stars: ✭ 130 (+242.11%)
Mutual labels:  memory-management
Quiz App
A repository reflecting the progress made on the "How to Build iOS Apps with Swift, TDD & Clean Architecture" YouTube series, by Caio & Mike.
Stars: ✭ 230 (+505.26%)
Mutual labels:  memory-management
GC
A lightweight conservative garbage collector for C/C++
Stars: ✭ 108 (+184.21%)
Mutual labels:  memory-management
NALib
General purpose C sourcecode collection
Stars: ✭ 16 (-57.89%)
Mutual labels:  memory-management
buddy alloc
A single header buddy memory allocator for C
Stars: ✭ 46 (+21.05%)
Mutual labels:  memory-management

M2SLAM

Authors: Fu Li, Shaowu Yang

Current version: 1.0.0

introduction

M2SLAM is a novel visual SLAM system with memory management to overcome two major challenges in reducing memory con- sumption of visual SLAM: efficient map data scheduling between the memory and the external storage, and map data persistence method (i.e., the data out- lives the process that created it). We redesign the framework of a visual SLAM system to contain a SLAM front end and a database server end. The front end maintains a localization and a mapping process, as well as map data scheduling between the memory and the database. We propose a map data scheduling method to organize map data considering the local spatial character among keyframes. The server end provides data services from a spatial database for global map data storage and accessing.

M2SLAM

The framework of M2SLAM is shown above, which includes the front end and the server end. We implement the front end based on ORB_SLAM2[1-2] by extending its tracking, local mapping, and loop closing module, and adding one novel memory managing module. The server end publishes data services for map data storage and accessing.

0. Related Publications

1. Prerequisites

1.0 requirements

  • ubuntu 14.04
  • ROS indigo
  • ORBSLAM2 1.0.0
  • boost
  • ODB 2.4.0 or later
  • PostgreSQL 9.4 or later
  • PostGIS 2.2 or later

1.1 ROS install

Inatall ROS indigo according to the instructions in ROS wiki.

1.2 ORBSLAM2 and its dependencies

Our M2SLAM system is build on the foundation of [ORB_SLAM2(https://github.com/raulmur/ORB_SLAM2). You should follow the instructions provided by ORB_SLAM2 build its dependencies. We do not list here.

1.3 Boost library install

We use boost library to serialize and deserialize the data. We can install boost library using the following instruction in terminal.

sudo apt-get instal libboost-dev

1.4 ODB environment build

We use ODB to solve the issue of mapping a C++ object to a record in a database table, instead of using SQL.

You can use the ODB packages in src/orbslam_client/Thirdparty/package or download from the ODB official website.

Unpack the packages and build the ODB according to the INSTALL file in their dirs.

The following errors may occur:

configure : error: g++ does not support plugins; reconfigure GCC with --enable-plugin

sudo apt-get update
sudo apt-get install gcc-4.8-plugin-dev

error: libcutl is not found

Download the source code of the libcutl from its office website.

Install the package according to the INSTALL file.

Can not find odb, when test the odb-example

The reason is that the install directory /usr/local/lib has not in the ld.so.conf file.

echo "/usr/local/lib" >> /etc/ld.so.conf
echo "/usr/local/bin" >> /etc/ld.so.conf
sudo ldconfig

1.5 PostGIS install

sudo apt-get install postgresql-9.4
sudo apt-get install postgresql-9.4-postgis-2.2

2. Building and Run M2SLAM

2.1 create PostGIS environment

In PostGIS, we should create the USER and DATABASE using PGAdmin or terminal. We create the USER:m2slam_usr and DATABASE:m2slam_db.

2.2 create odb environment and create tables in the DATABASE m2slam_db

Use odb to compile the basic data model in orbslam_servcer

Terminal in src/orbslam_servcer/include directory:

odb -d pgsql --generate-query --generate-schema Data_TopoKeyFrame.h
odb -d pgsql --generate-query --generate-schema Data_TopoMapPoint.h
odb -d pgsql --generate-query --generate-schema Data_KeyFrame.h
odb -d pgsql --generate-query --generate-schema Data_MapPoint.h
psql -U m2slam_usr -h 127.0.0.1 -d m2slam_db < Data_TopoKeyFrame.sql
psql -U m2slam_usr -h 127.0.0.1 -d m2slam_db < Data_TopoMapPoint.sql
psql -U m2slam_usr -h 127.0.0.1 -d m2slam_db < Data_KeyFrame.sql
psql -U m2slam_usr -h 127.0.0.1 -d m2slam_db < Data_MapPoint.sql

You can verify that the tables have been created in the database m2slam_db.

2.3 build M2SLAM

The M2SLAM runs as the ROS package. and the M2SLAM src directory should be the ROS package directory, catkin_src/. We use catkin tool to organize the M2SLAM packages, orbslam_client and orbslam_servcer.

Terminal in the catkin_src/ directory.

catkin_make
catkin_install

2.4 run M2SLAM

2.4.1 start ros core

ros core

2.4.2 start orbslam_servcer

rosrun orbslam_servcer orbslam_servcer

2.4.3 run orbslam_client in different datasets

  1. run TUM RGB-D datasets

Download a sequence from http://vision.in.tum.de/data/datasets/rgbd-dataset/download and uncompress it.

Associate RGB images and depth images using the python script associate.py. We already provide associations for some of the sequences in Examples/RGB-D/associations/. You can generate your own associations file executing:

python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt

Execute the following command. Change TUMX.yaml to TUM1.yaml,TUM2.yaml or TUM3.yaml for freiburg1, freiburg2 and freiburg3 sequences respectively. Change PATH_TO_SEQUENCE_FOLDERto the uncompressed sequence folder. Change ASSOCIATIONS_FILE to the path to the corresponding associations file.

rosrun ORB_SLAM2_client_TUM_rgbd ORB_SLAM2_client_TUM_rgbd PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE ONLINE_RECTIFICATION
  1. run KITTI datasets

Download the dataset (grayscale images) from http://www.cvlibs.net/datasets/kitti/eval_odometry.php

Execute the following command. Change KITTIX.yamlto KITTI00-02.yaml, KITTI03.yaml or KITTI04-12.yaml for sequence 0 to 2, 3, and 4 to 12 respectively. Change PATH_TO_DATASET_FOLDER to the uncompressed dataset folder. Change SEQUENCE_NUMBER to 00, 01, 02,.., 11.

rosrun ORB_SLAM2_client_KITTI_stereo ORB_SLAM2_client_KITTI_stereo Vocabulary/ORBvoc.txt Examples/Stereo/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER

Reference

[1] Mur-Artal R, Montiel J M M, Tardos J D. ORB-SLAM: a versatile and accurate monocular SLAM system[J]. IEEE Transactions on Robotics, 2015, 31(5): 1147-1163.

[2] Mur-Artal R, Tardos J D. ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras[J]. arXiv preprint arXiv:1610.06475, 2016.

License

M2SLAM is released under a GPLv3 license.

For a closed-source version of M2SLAM for commercial purposes, please contact the authors.

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].