Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jefflirion/python-graphslam
Graph SLAM solver in Python
https://github.com/jefflirion/python-graphslam
graphslam mapping optimization python slam
Last synced: 5 days ago
JSON representation
Graph SLAM solver in Python
- Host: GitHub
- URL: https://github.com/jefflirion/python-graphslam
- Owner: JeffLIrion
- License: mit
- Created: 2020-02-09T01:39:40.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-10-29T04:21:16.000Z (2 months ago)
- Last Synced: 2024-12-22T04:07:48.301Z (12 days ago)
- Topics: graphslam, mapping, optimization, python, slam
- Language: Python
- Size: 1.65 MB
- Stars: 200
- Watchers: 10
- Forks: 28
- Open Issues: 1
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
graphslam
=========.. image:: https://github.com/JeffLIrion/python-graphslam/actions/workflows/python-package.yml/badge.svg?branch=master
:target: https://github.com/JeffLIrion/python-graphslam/actions/workflows/python-package.yml.. image:: https://coveralls.io/repos/github/JeffLIrion/python-graphslam/badge.svg?branch=master
:target: https://coveralls.io/github/JeffLIrion/python-graphslam?branch=masterDocumentation for this package can be found at https://python-graphslam.readthedocs.io/.
This package implements a Graph SLAM solver in Python.
Features
--------- Optimize :math:`\mathbb{R}^2`, :math:`\mathbb{R}^3`, :math:`SE(2)`, and :math:`SE(3)` datasets
- Analytic Jacobians
- Supports odometry and landmark edges
- Supports custom edge types (see `tests/test_custom_edge.py `_ for an example)
- Import and export .g2o filesInstallation
------------.. code-block::
pip install graphslam
Example Usage
-------------SE(3) Dataset
^^^^^^^^^^^^^.. code-block:: python
>>> from graphslam.graph import Graph
>>> g = Graph.from_g2o("data/parking-garage.g2o") # https://lucacarlone.mit.edu/datasets/
>>> g.plot(vertex_markersize=1)
>>> g.calc_chi2()
16720.02100546733
>>> g.optimize()
>>> g.plot(vertex_markersize=1)
**Output:**
::
Iteration chi^2 rel. change
--------- ----- -----------
0 16720.0210
1 45.6644 -0.997269
2 1.2936 -0.971671
3 1.2387 -0.042457
4 1.2387 -0.000001+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
| **Original** | **Optimized** |
+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
| .. image:: images/parking-garage.png | .. image:: images/parking-garage-optimized.png |
+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+SE(2) Dataset
^^^^^^^^^^^^^.. code-block:: python
>>> from graphslam.graph import Graph
>>> g = Graph.from_g2o("data/input_INTEL.g2o") # https://lucacarlone.mit.edu/datasets/
>>> g.plot()
>>> g.calc_chi2()
7191686.382493544
>>> g.optimize()
>>> g.plot()
**Output:**
::
Iteration chi^2 rel. change
--------- ----- -----------
0 7191686.3825
1 319950425.6477 43.488929
2 124950341.8035 -0.609470
3 338165.0770 -0.997294
4 734.7343 -0.997827
5 215.8405 -0.706233
6 215.8405 -0.000000+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+
| **Original** | **Optimized** |
+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+
| .. image:: images/input_INTEL.png | .. image:: images/input_INTEL-optimized.png |
+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+References and Acknowledgments
------------------------------1. Grisetti, G., Kummerle, R., Stachniss, C. and Burgard, W., 2010. `A tutorial on graph-based SLAM `_. IEEE Intelligent Transportation Systems Magazine, 2(4), pp.31-43.
2. Blanco, J.L., 2010. `A tutorial on SE(3) transformation parameterizations and on-manifold optimization `_. University of Malaga, Tech. Rep, 3.
3. Carlone, L., Tron, R., Daniilidis, K. and Dellaert, F., 2015, May. `Initialization techniques for 3D SLAM: a survey on rotation estimation and its use in pose graph optimization `_. In 2015 IEEE international conference on robotics and automation (ICRA) (pp. 4597-4604). IEEE.
4. Carlone, L. and Censi, A., 2014. `From angular manifolds to the integer lattice: Guaranteed orientation estimation with application to pose graph optimization `_. IEEE Transactions on Robotics, 30(2), pp.475-492.Thanks to Luca Larlone for allowing inclusion of the `Intel and parking garage datasets `_ in this repo.
Live Coding Graph SLAM in Python
--------------------------------If you're interested, you can watch as I coded this up.
1. `Live coding Graph SLAM in Python (Part 1) `_
2. `Live coding Graph SLAM in Python (Part 2) `_
3. `Live coding Graph SLAM in Python (Part 3) `_
4. `Live coding Graph SLAM in Python (Part 4) `_
5. `Live coding Graph SLAM in Python (Part 5) `_