Metadata-Version: 2.1
Name: graphslam
Version: 0.0.7
Summary: Graph SLAM solver in Python
Home-page: https://github.com/JeffLIrion/python-graphslam
Author: Jeff Irion
Author-email: jefflirion@users.noreply.github.com
License: MIT
Keywords: graphslam,slam,graph,optimization,mapping
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Dist: numpy
Requires-Dist: scipy

graphslam
=========

.. image:: https://travis-ci.com/JeffLIrion/python-graphslam.svg?branch=master
   :target: https://travis-ci.com/JeffLIrion/python-graphslam

.. image:: https://coveralls.io/repos/github/JeffLIrion/python-graphslam/badge.svg?branch=master
   :target: https://coveralls.io/github/JeffLIrion/python-graphslam?branch=master


Documentation for this package can be found at https://python-graphslam.readthedocs.io/.


This package implements a Graph SLAM solver in Python.

Features
--------

- Optimize `R^2`, `R^3`, `SE(2)`, and `SE(3)` datasets
- Analytic Jacobians
- Supports odometry edges
- Import and export .g2o files for `SE(2)` and `SE(3)` datasets


Installation
------------

.. code-block::

   pip install graphslam


Example Usage
-------------

SE(3) Dataset
^^^^^^^^^^^^^

.. code-block:: python

   >>> from graphslam.load import load_g2o_se3

   >>> g = load_g2o_se3("parking-garage.g2o")  # https://lucacarlone.mit.edu/datasets/

   >>> g.plot(vertex_markersize=1)

   >>> g.calc_chi2()

   16720.020602489112

   >>> g.optimize()

   >>> g.plot(vertex_markersize=1)


**Output:**

::

   Iteration                chi^2        rel. change
   ---------                -----        -----------
           0           16720.0206
           1              26.5495          -0.998412
           2               1.2712          -0.952119
           3               1.2402          -0.024439
           4               1.2396          -0.000456
           5               1.2395          -0.000091


+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
| **Original**                                                                                                          | **Optimized**                                                                                                                   |
+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
| .. image:: https://raw.githubusercontent.com/JeffLIrion/python-graphslam/master/docs/source/images/parking-garage.png | .. image:: https://raw.githubusercontent.com/JeffLIrion/python-graphslam/master/docs/source/images/parking-garage-optimized.png |
+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+


SE(2) Dataset
^^^^^^^^^^^^^

.. code-block:: python

   >>> from graphslam.load import load_g2o_se2

   >>> g = load_g2o_se2("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       319915276.1284          43.484042
           2       124894535.1749          -0.609601
           3          338185.8171          -0.997292
           4             734.5142          -0.997828
           5             215.8405          -0.706145
           6             215.8405          -0.000000


+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+
| **Original**                                                                                                       | **Optimized**                                                                                                                |
+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+
| .. image:: https://raw.githubusercontent.com/JeffLIrion/python-graphslam/master/docs/source/images/input_INTEL.png | .. image:: https://raw.githubusercontent.com/JeffLIrion/python-graphslam/master/docs/source/images/input_INTEL-optimized.png |
+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+

References and Links
--------------------

* `A tutorial on graph-based SLAM <http://domino.informatik.uni-freiburg.de/teaching/ws10/praktikum/slamtutorial.pdf>`_
* `A tutorial on SE(3) transformation parameterizations and on-manifold optimization <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.468.5407&rep=rep1&type=pdf>`_
* `Datasets from Luca Carlone <https://lucacarlone.mit.edu/datasets/>`_


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) <https://youtu.be/yXWkNC_A_YE>`_
2. `Live coding Graph SLAM in Python (Part 2) <https://youtu.be/M2udkF0UNUg>`_
3. `Live coding Graph SLAM in Python (Part 3) <https://youtu.be/CiBdVcIObVU>`_
4. `Live coding Graph SLAM in Python (Part 4) <https://youtu.be/GBAThis-_wM>`_
5. `Live coding Graph SLAM in Python (Part 5) <https://youtu.be/J3NyieGVwIw>`_


