{"id":31223695,"url":"https://github.com/mit-acl/dpgo_ros","last_synced_at":"2025-09-21T22:54:42.977Z","repository":{"id":49522117,"uuid":"354918000","full_name":"mit-acl/dpgo_ros","owner":"mit-acl","description":"ROS wrapper for distributed pose graph optimization","archived":false,"fork":false,"pushed_at":"2024-07-17T18:38:59.000Z","size":26252,"stargazers_count":55,"open_issues_count":0,"forks_count":11,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-07-17T22:54:51.688Z","etag":null,"topics":["multi-robot-systems","optimization","pose-graph-optimization","robotics","ros","slam"],"latest_commit_sha":null,"homepage":"","language":"C++","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/mit-acl.png","metadata":{"files":{"readme":"README.md","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":"2021-04-05T17:37:47.000Z","updated_at":"2024-07-17T18:39:04.000Z","dependencies_parsed_at":"2024-07-17T22:52:38.258Z","dependency_job_id":null,"html_url":"https://github.com/mit-acl/dpgo_ros","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mit-acl/dpgo_ros","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Fdpgo_ros","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Fdpgo_ros/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Fdpgo_ros/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Fdpgo_ros/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mit-acl","download_url":"https://codeload.github.com/mit-acl/dpgo_ros/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Fdpgo_ros/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276318989,"owners_count":25621651,"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","status":"online","status_checked_at":"2025-09-21T02:00:07.055Z","response_time":72,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["multi-robot-systems","optimization","pose-graph-optimization","robotics","ros","slam"],"created_at":"2025-09-21T22:54:41.311Z","updated_at":"2025-09-21T22:54:42.969Z","avatar_url":"https://github.com/mit-acl.png","language":"C++","readme":"# dpgo_ros\n\n## Introduction\nThis repository implements a ROS wrapper for the [distributed pose graph optimization (DPGO) library](https://github.com/mit-acl/dpgo).\n\n\u003cimg src=\"data/sphere_screenshot.png\" width=\"700\"\u003e\n\n## Dependencies\nInside a catkin workspace, please clone the following repositories. Use the default branch unless mentioned otherwise below.\n* [catkin_simple](https://github.com/catkin/catkin_simple)\n* [pose_graph_tools](https://github.com/MIT-SPARK/pose_graph_tools): some tools and ROS messages for working with pose graphs.\n* [dpgo](https://github.com/mit-acl/dpgo): core C++ library for distributed PGO. \n* [dpgo_ros](https://github.com/mit-acl/dpgo_ros): this repository.\n\n## Building the package\n\nBuild with catkin:\n```\ncatkin build\n```\n\n## Examples\n\n### A first demo\n\nUse the following command to run a 5-robot distributed pose graph SLAM demo simulated using the sphere dataset:\n```\n# source workspace\nsource ~/catkin_ws/devel/setup.bash\n\n# run demo on example g2o dataset\nroslaunch dpgo_ros dpgo_demo.launch local_initialization_method:=Odometry\n```\n\nThe above example runs the standard dpgo, where each robot's trajectory estimates is initialized using its odometry measurements. The launch file will open a rviz window, which will visualize the iterates produced by dpgo as optimization progresses. You can try out other benchmark datasets by changing the `g2o_dataset` argument in `dpgo_demo.launch`. Take a look inside the `data` directory to see the provided datasets (stored in g2o format).\n\n### Enabling acceleration\n\nDPGO also implements a feature called Nesterov acceleration to speed up convergence of distributed optimization. To enable this, use the `acceleration` argument:\n```\n# run demo on example g2o dataset\nroslaunch dpgo_ros dpgo_demo.launch local_initialization_method:=Odometry acceleration:=true\n```\nOn a test computer with an Intel i7 processor, we observed that acceleration helps to reduce the number of iterations from around 240 to around 150.\n\n\n### Asynchronous optimization\n\nThe following example runs the asynchronous version of dpgo on the sphere dataset:\n```\n# run demo on example g2o dataset\nroslaunch dpgo_ros asapp_demo.launch local_initialization_method:=Odometry RGD_stepsize:=0.2\n```\nIn the command, the `RGD_stepsize` argument controls the local stepsize of agents during asynchronous optimization. More details of this method is described in the following paper.\n\nY.Tian, A. Koppel, A. S. Bedi, J. P. How.  [\"Asynchronous and Parallel Distributed Pose Graph Optimization\"](https://arxiv.org/abs/2003.03281), in IEEE Robotics and Automation Letters, 2020, **honorable mention for 2020 RA-L best paper**. \n\n\n### Outlier-robust optimization\n\nIn practice, multi-robot SLAM systems need to be robust against *outlier* measurements. For example, in distributed visual SLAM, outlier loop closures can be created as a result of incorrect visual place recognition and geometric verification. DPGO supports outlier-robust distributed optimization by implementing the [graduated non-convexity (GNC)](https://ieeexplore.ieee.org/document/8957085) framework in a distributed fashion. The following runs a demo on a real-world 8-robot pose graph SLAM dataset. This dataset was extracted from a multi-robot visual SLAM experiment inside the MIT tunnel systems, and contains many outlier loop closures due to visual ambiguities of the environment.\n```\n# run demo with robust optimization\nroslaunch dpgo_ros dpgo_gnc_demo.launch\n```\n\nIn the launch file, the key change is setting `robust_cost_type` to `GNC_TLS`, which tells dpgo to optimize the truncated least squares (TLS) objective using GNC (the other option is `L2`, which corresponds to the standard least squares objective). Details of distirbuted GNC can be found in the following paper:\n\nY. Tian, Y. Chang, F. Herrera Arias, C. Nieto-Granda, J. P. How and L. Carlone, [\"Kimera-Multi: Robust, Distributed, Dense Metric-Semantic SLAM for Multi-Robot Systems,\"](https://arxiv.org/abs/2106.14386) in IEEE Transactions on Robotics, vol. 38, no. 4, pp. 2022-2038, Aug. 2022, doi: 10.1109/TRO.2021.3137751.\n\n## Usage in multi-robot collaborative SLAM\n\nDPGO is currently used as the distributed back-end in [Kimera-Multi](https://github.com/MIT-SPARK/Kimera-Multi), which is a robust and fully distributed system for multi-robot collaborative SLAM. Check out the [full system](https://github.com/MIT-SPARK/Kimera-Multi) as well as the accompanying [datasets](https://github.com/MIT-SPARK/Kimera-Multi-Data)!\n\n## Citations\n\nIf you are using the dpgo library, please cite the following papers. For the basic dpgo library,\n```\n@ARTICLE{Tian2021Distributed,\n  author={Tian, Yulun and Khosoussi, Kasra and Rosen, David M. and How, Jonathan P.},\n  journal={IEEE Transactions on Robotics}, \n  title={Distributed Certifiably Correct Pose-Graph Optimization}, \n  year={2021},\n  volume={37},\n  number={6},\n  pages={2137-2156},\n  doi={10.1109/TRO.2021.3072346}}\n```\nIn addition, the extension to asynchronous optimization is described in,\n```\n@ARTICLE{Tian2020Asynchronous,\n  author={Tian, Yulun and Koppel, Alec and Bedi, Amrit Singh and How, Jonathan P.},\n  journal={IEEE Robotics and Automation Letters}, \n  title={Asynchronous and Parallel Distributed Pose Graph Optimization}, \n  year={2020},\n  volume={5},\n  number={4},\n  pages={5819-5826},\n  doi={10.1109/LRA.2020.3010216}}\n```\nLastly, the extension to outlier-robust optimization is described in,\n```\n@ARTICLE{tian22tro_kimeramulti,\n  author={Tian, Yulun and Chang, Yun and Herrera Arias, Fernando and Nieto-Granda, Carlos and How, Jonathan P. and Carlone, Luca},\n  journal={IEEE Transactions on Robotics}, \n  title={Kimera-Multi: Robust, Distributed, Dense Metric-Semantic SLAM for Multi-Robot Systems}, \n  year={2022},\n  volume={38},\n  number={4},\n  pages={2022-2038},\n  doi={10.1109/TRO.2021.3137751}\n}\n```\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmit-acl%2Fdpgo_ros","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmit-acl%2Fdpgo_ros","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmit-acl%2Fdpgo_ros/lists"}