{"id":15563985,"url":"https://github.com/jefflirion/python-graphslam","last_synced_at":"2025-05-16T02:08:23.292Z","repository":{"id":43123588,"uuid":"239230540","full_name":"JeffLIrion/python-graphslam","owner":"JeffLIrion","description":"Graph SLAM solver in Python","archived":false,"fork":false,"pushed_at":"2024-10-29T04:21:16.000Z","size":1726,"stargazers_count":228,"open_issues_count":1,"forks_count":29,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-01T14:04:58.328Z","etag":null,"topics":["graphslam","mapping","optimization","python","slam"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JeffLIrion.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-09T01:39:40.000Z","updated_at":"2025-04-01T08:26:58.000Z","dependencies_parsed_at":"2024-04-06T17:27:11.067Z","dependency_job_id":"916eea16-b078-4088-9cbd-03acbd9cb3b3","html_url":"https://github.com/JeffLIrion/python-graphslam","commit_stats":{"total_commits":65,"total_committers":2,"mean_commits":32.5,"dds":"0.41538461538461535","last_synced_commit":"ef1f2bf7cfcfaaa81ca4dfa279524b0b2900cb61"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeffLIrion%2Fpython-graphslam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeffLIrion%2Fpython-graphslam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeffLIrion%2Fpython-graphslam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeffLIrion%2Fpython-graphslam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JeffLIrion","download_url":"https://codeload.github.com/JeffLIrion/python-graphslam/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247878014,"owners_count":21011158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["graphslam","mapping","optimization","python","slam"],"created_at":"2024-10-02T16:33:34.257Z","updated_at":"2025-04-08T16:01:30.526Z","avatar_url":"https://github.com/JeffLIrion.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"graphslam\n=========\n\n.. image:: https://github.com/JeffLIrion/python-graphslam/actions/workflows/python-package.yml/badge.svg?branch=master\n   :target: https://github.com/JeffLIrion/python-graphslam/actions/workflows/python-package.yml\n\n.. image:: https://coveralls.io/repos/github/JeffLIrion/python-graphslam/badge.svg?branch=master\n   :target: https://coveralls.io/github/JeffLIrion/python-graphslam?branch=master\n\n\nDocumentation for this package can be found at https://python-graphslam.readthedocs.io/.\n\n\nThis package implements a Graph SLAM solver in Python.\n\nFeatures\n--------\n\n- Optimize :math:`\\mathbb{R}^2`, :math:`\\mathbb{R}^3`, :math:`SE(2)`, and :math:`SE(3)` datasets\n- Analytic Jacobians\n- Supports odometry and landmark edges\n- Supports custom edge types (see `tests/test_custom_edge.py \u003ctests/test_custom_edge.py\u003e`_ for an example)\n- Import and export .g2o files\n\n\nInstallation\n------------\n\n.. code-block::\n\n   pip install graphslam\n\n\nExample Usage\n-------------\n\nSE(3) Dataset\n^^^^^^^^^^^^^\n\n.. code-block:: python\n\n   \u003e\u003e\u003e from graphslam.graph import Graph\n\n   \u003e\u003e\u003e g = Graph.from_g2o(\"data/parking-garage.g2o\")  # https://lucacarlone.mit.edu/datasets/\n\n   \u003e\u003e\u003e g.plot(vertex_markersize=1)\n\n   \u003e\u003e\u003e g.calc_chi2()\n\n   16720.02100546733\n\n   \u003e\u003e\u003e g.optimize()\n\n   \u003e\u003e\u003e g.plot(vertex_markersize=1)\n\n\n**Output:**\n\n::\n\n   Iteration                chi^2        rel. change\n   ---------                -----        -----------\n           0           16720.0210\n           1              45.6644          -0.997269\n           2               1.2936          -0.971671\n           3               1.2387          -0.042457\n           4               1.2387          -0.000001\n\n\n+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+\n| **Original**                                                                                                          | **Optimized**                                                                                                                   |\n+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+\n| .. image::                                                                                  images/parking-garage.png | .. image::                                                                                  images/parking-garage-optimized.png |\n+-----------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+\n\n\nSE(2) Dataset\n^^^^^^^^^^^^^\n\n.. code-block:: python\n\n   \u003e\u003e\u003e from graphslam.graph import Graph\n\n   \u003e\u003e\u003e g = Graph.from_g2o(\"data/input_INTEL.g2o\")  # https://lucacarlone.mit.edu/datasets/\n\n   \u003e\u003e\u003e g.plot()\n\n   \u003e\u003e\u003e g.calc_chi2()\n\n   7191686.382493544\n\n   \u003e\u003e\u003e g.optimize()\n\n   \u003e\u003e\u003e g.plot()\n\n\n**Output:**\n\n::\n\n   Iteration                chi^2        rel. change\n   ---------                -----        -----------\n           0         7191686.3825\n           1       319950425.6477          43.488929\n           2       124950341.8035          -0.609470\n           3          338165.0770          -0.997294\n           4             734.7343          -0.997827\n           5             215.8405          -0.706233\n           6             215.8405          -0.000000\n\n\n+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+\n| **Original**                                                                                                       | **Optimized**                                                                                                                |\n+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+\n| .. image::                                                                                  images/input_INTEL.png | .. image::                                                                                  images/input_INTEL-optimized.png |\n+--------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------+\n\nReferences and Acknowledgments\n------------------------------\n\n\n1. Grisetti, G., Kummerle, R., Stachniss, C. and Burgard, W., 2010. `A tutorial on graph-based SLAM \u003chttp://domino.informatik.uni-freiburg.de/teaching/ws10/praktikum/slamtutorial.pdf\u003e`_. IEEE Intelligent Transportation Systems Magazine, 2(4), pp.31-43.\n2. Blanco, J.L., 2010. `A tutorial on SE(3) transformation parameterizations and on-manifold optimization \u003chttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.468.5407\u0026rep=rep1\u0026type=pdf\u003e`_. University of Malaga, Tech. Rep, 3.\n3. 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 \u003chttps://smartech.gatech.edu/bitstream/handle/1853/53710/Carlone15icra.pdf\u003e`_. In 2015 IEEE international conference on robotics and automation (ICRA) (pp. 4597-4604). IEEE.\n4. Carlone, L. and Censi, A., 2014. `From angular manifolds to the integer lattice: Guaranteed orientation estimation with application to pose graph optimization \u003chttps://arxiv.org/pdf/1211.3063.pdf\u003e`_. IEEE Transactions on Robotics, 30(2), pp.475-492.\n\n\nThanks to Luca Larlone for allowing inclusion of the `Intel and parking garage datasets \u003chttps://lucacarlone.mit.edu/datasets/\u003e`_ in this repo.\n\n\nLive Coding Graph SLAM in Python\n--------------------------------\n\nIf you're interested, you can watch as I coded this up.\n\n1. `Live coding Graph SLAM in Python (Part 1) \u003chttps://youtu.be/yXWkNC_A_YE\u003e`_\n2. `Live coding Graph SLAM in Python (Part 2) \u003chttps://youtu.be/M2udkF0UNUg\u003e`_\n3. `Live coding Graph SLAM in Python (Part 3) \u003chttps://youtu.be/CiBdVcIObVU\u003e`_\n4. `Live coding Graph SLAM in Python (Part 4) \u003chttps://youtu.be/GBAThis-_wM\u003e`_\n5. `Live coding Graph SLAM in Python (Part 5) \u003chttps://youtu.be/J3NyieGVwIw\u003e`_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjefflirion%2Fpython-graphslam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjefflirion%2Fpython-graphslam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjefflirion%2Fpython-graphslam/lists"}