Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
G2o | 2,736 | 4 days ago | 1 | April 25, 2020 | 176 | C++ | ||||
g2o: A General Framework for Graph Optimization | ||||||||||
Structurae | 645 | 2 | 14 days ago | 75 | July 11, 2022 | 13 | mit | TypeScript | ||
Data structures for high-performance JavaScript applications. | ||||||||||
Libfirm | 409 | 12 days ago | 9 | lgpl-2.1 | C | |||||
graph based intermediate representation and backend for optimising compilers | ||||||||||
Struc2vec | 360 | 3 months ago | 11 | mit | Python | |||||
This repository provides a reference implementation of struc2vec. | ||||||||||
Kimera Rpgo | 358 | 2 months ago | 4 | bsd-2-clause | C++ | |||||
Robust Pose Graph Optimization | ||||||||||
Graphgnsslib | 303 | 9 months ago | C | |||||||
An Open-source Package for GNSS Positioning and Real-time Kinematic Using Factor Graph Optimization | ||||||||||
G2opy | 259 | 3 years ago | 30 | C++ | ||||||
Python binding of SLAM graph optimization framework g2o | ||||||||||
Minisam | 230 | 3 years ago | 11 | bsd-3-clause | C++ | |||||
A general and flexible factor graph non-linear least square optimization framework | ||||||||||
Learn2branch | 201 | 2 years ago | 6 | mit | Python | |||||
Exact Combinatorial Optimization with Graph Convolutional Neural Networks (NeurIPS 2019) | ||||||||||
Aprilsam | 183 | 2 years ago | 1 | lgpl-2.1 | C | |||||
SLAM optimization algorithm |
g2o is an open-source C++ framework for optimizing graph-based nonlinear error functions. g2o has been designed to be easily extensible to a wide range of problems and a new problem typically can be specified in a few lines of code. The current implementation provides solutions to several variants of SLAM and BA.
A wide range of problems in robotics as well as in computer-vision involve the minimization of a non-linear error function that can be represented as a graph. Typical instances are simultaneous localization and mapping (SLAM) or bundle adjustment (BA). The overall goal in these problems is to find the configuration of parameters or state variables that maximally explain a set of measurements affected by Gaussian noise. g2o is an open-source C++ framework for such nonlinear least squares problems. g2o has been designed to be easily extensible to a wide range of problems and a new problem typically can be specified in a few lines of code. The current implementation provides solutions to several variants of SLAM and BA. g2o offers a performance comparable to implementations of state-of-the-art approaches for the specific problems (02/2011).
The branch pymem contains a python wrapper and switches to smart pointer instead of RAW pointers. It is currently experimental but PRs and improvements are welcome - as always.
See g2o-python for the pypi release of g2o's python bindings.
Rainer Kuemmerle, Giorgio Grisetti, Hauke Strasdat, Kurt Konolige, and Wolfram Burgard g2o: A General Framework for Graph Optimization IEEE International Conference on Robotics and Automation (ICRA), 2011
A detailed description of how the library is structured and how to use and extend it can be found in /doc/g2o.pdf The API documentation can be generated as described in doc/doxygen/readme.txt
g2o is licensed under the BSD License. However, some libraries are available under different license terms. See below.
The following parts are licensed under LGPL3+:
The following parts are licensed under GPL3+:
Please note that some features of CHOLMOD (which may be used by g2o, see libsuitesparse below) are licensed under the GPL. To avoid the GPL, you may have to re-compile CHOLMOD without including its GPL features. The CHOLMOD library distributed with, for example, Ubuntu or Debian includes the GPL features. The supernodal factorization is considered by g2o, if it is available.
Within the folder g2o/EXTERNAL we include software not written by us to guarantee easy compilation.
ceres: BSD (see g2o/EXTERNAL/ceres/LICENSE) Headers to perform Automatic Differentiation
freeglut: X Consortium (Copyright (c) 1999-2000 Pawel W. Olszta) We use a stripped down version for drawing text in OpenGL.
See the doc folder for the full text of the licenses.
g2o is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the licenses for more details.
On Ubuntu / Debian these dependencies are resolved by installing the following packages.
On Ubuntu / Debian these dependencies are resolved by installing the following packages.
If using Homebrew, then
brew install brewsci/science/g2o
will install g2o together with its required dependencies. In this case no manual compilation is necessary.
If using vcpkg, then
script\install-deps-windows.bat
or for full dependencies installation
script\install-additional-deps-windows.bat
will build and install the dependencies. The location of vcpkg
and required
triplet can be passed as cli arguments respectively. Note that usually vcpkg
will auto detect the triplet. Set it only if your are not using the default
build for your OS.
Our primary development platform is Linux. Experimental support for Mac OS X, Android and Windows (MinGW or MSVC). We recommend a so-called out of source build which can be achieved by the following command sequence.
mkdir build
cd build
cmake ../
make
The binaries will be placed in bin and the libraries in lib which are both located in the top-level folder.
On Windows with vcpkg
the following commands will generate build scripts (please change the Visual Studio version number in accordance with your system):
mkdir build
cd build
cmake -DG2O_BUILD_APPS=ON -DG2O_BUILD_EXAMPLES=ON -DVCPKG_TARGET_TRIPLET="%VCPKG_DEFAULT_TRIPLET%" -DCMAKE_TOOLCHAIN_FILE="%VCPKG_ROOT_DIR%\scripts\buildsystems\vcpkg.cmake" ..
cmake --build . --target ALL_BUILD
If you are compiling on Windows and you are for some reasons not using vcpkg
please download Eigen3 and extract it.
Within cmake-gui set the variable EIGEN3_INCLUDE_DIR to that directory.
mkdir build
cd build
cmake .. -DG2O_BUILD_APPS=ON -DG2O_BUILD_EXAMPLES=ON -DEIGEN3_INCLUDE_DIR="<THE_PATH_WHERE_YOU_PLACED_EIGEN3_AND_THE_EIGEN3_CMakeLists.txt>"
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../script/android.toolchain.cmake -DANDROID_NDK=<YOUR_PATH_TO_ANDROID_NDK_r10d+> -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="armeabi-v7a with NEON" -DEIGEN3_INCLUDE_DIR="<YOUR_PATH_TO_EIGEN>" -DEIGEN3_VERSION_OK=ON .. && cmake --build .
We thank the following contributors for providing patches: