{"id":30110359,"url":"https://github.com/leggedrobotics/holistic_fusion","last_synced_at":"2025-08-10T04:44:54.663Z","repository":{"id":290602516,"uuid":"913801267","full_name":"leggedrobotics/holistic_fusion","owner":"leggedrobotics","description":"Official repository for holistic fusion.","archived":false,"fork":false,"pushed_at":"2025-07-31T16:52:49.000Z","size":71630,"stargazers_count":118,"open_issues_count":3,"forks_count":13,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-07-31T19:58:28.278Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://leggedrobotics.github.io/holistic_fusion/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leggedrobotics.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,"zenodo":null}},"created_at":"2025-01-08T11:30:45.000Z","updated_at":"2025-07-30T05:48:21.000Z","dependencies_parsed_at":"2025-07-31T18:35:31.099Z","dependency_job_id":null,"html_url":"https://github.com/leggedrobotics/holistic_fusion","commit_stats":null,"previous_names":["leggedrobotics/holistic_fusion"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/leggedrobotics/holistic_fusion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fholistic_fusion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fholistic_fusion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fholistic_fusion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fholistic_fusion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leggedrobotics","download_url":"https://codeload.github.com/leggedrobotics/holistic_fusion/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leggedrobotics%2Fholistic_fusion/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269677517,"owners_count":24457858,"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-08-10T02:00:08.965Z","response_time":71,"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":[],"created_at":"2025-08-10T04:44:45.166Z","updated_at":"2025-08-10T04:44:54.617Z","avatar_url":"https://github.com/leggedrobotics.png","language":"C++","funding_links":[],"categories":["WhyTraversability"],"sub_categories":["Australia"],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"docs_src/img/logo.png\" width=\"60%\" height=\"60%\"\u003e\n\u003c/p\u003e\n\n# Holistic Fusion: Task and Setup-agnostic Robot Localization and State Estimation with Factor Graphs\n\n**Authors:**\n[Julian Nubert](https://www.linkedin.com/in/juliannubert/) ([nubertj@ethz.ch](mailto:nubertj@ethz.ch?subject=[GitHub])),\n[Turcan Tuna](https://www.linkedin.com/in/turcantuna/),\n[Jonas Frey](https://www.linkedin.com/in/jonasfrey96/),\n[Cesar Cadena](https://www.linkedin.com/in/cesar-cadena-204106b/),\n[Katherine J. Kuchenbecker](https://www.linkedin.com/in/katherinekuchenbecker/),\n[Shehryar Khattak](https://www.linkedin.com/in/shehryar-khattak/),\n[Marco Hutter](https://www.linkedin.com/in/marco-hutter/)\n\n\u003ch4\u003e\n    \u003ca href=\"https://leggedrobotics.github.io/holistic_fusion/\"\u003eHomepage\u003c/a\u003e |\n    \u003ca href=\"https://arxiv.org/abs/2504.06479\"\u003ePaper\u003c/a\u003e |\n    \u003ca href=\"https://leggedrobotics.github.io/holistic_fusion/docs\"\u003eDocs\u003c/a\u003e |\n    \u003ca href=\"https://leggedrobotics.github.io/holistic_fusion/doxy/html/\"\u003eDoxygen\u003c/a\u003e |\n    \u003ca href=\"https://leggedrobotics.github.io/holistic_fusion/docs/7_examples.html\"\u003eExamples\u003c/a\u003e |\n    \u003ca href=\"https://www.youtube.com/leggedrobotics\"\u003eVideo\u003c/a\u003e |\n\u003c/h4\u003e\n\nHolistic Fusion (HF) is an open-source library for flexible task and setup-agnostic robot localization and state\nestimation.\nIt provides a wide range of features that are very useful in common robotic workflows, including online sensor fusion,\noffline batch optimization and calibration. While it already supports a set of measurement factors quite common in\nfield robotic applications, a core purpose of HF is to simplify the process of integrating new measurement types without\nmanually deriving Jacobians by i) utilizing GTSAM expression factors and ii) following a specific structure to follow a\ncommon parent class interface, depending on the measurement type.\nCurrently, HF supports three general measurement types: i) absolute measurements, ii) landmark measurements, iii)\nlocal \u0026\nrelative measurements.\n\n**Disclaimer:**\nThe framework is still under development and will be updated, extended, and more generalized in the\nfuture.\n**More instructions will be added to the ReadTheDocs page soon.**\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"docs_src/img/hf_illustration.png\" width=\"100%\" height=\"60%\"\u003e\n\u003c/p\u003e\n\n## Modules and Packages\n\nThis repository contains the following modules:\n\n1. [Graph MSF](./graph_msf): The core library for the sensor fusion. This library depends mainly on Eigen and GTSAM and\n   can be used with any communication layer (including ROS1 and ROS2).\n2. [Graph MSF ROS](./ros/graph_msf_ros): This package provides an example class for GraphMsf in ROS. It is dependent on\n   GraphMsf and ROS.\n3. [ROS1 Examples](./examples/ros): Examples on how to use GraphMsf and GraphMsfRos.\n    - [ANYmal Estimator - Quadrupedal Robot](./examples/ros/anymal_estimator_graph): This is the implementation of the\n      ANYmal quadrupedal robot estimator as presented in [1], including IMU, GNSS, leg odometry, and absolute LiDAR\n      measurements.\n    - [HEAP - Excavator](./examples/ros/excavator_holistic_graph): This is the implementation of the HEAP excavator as\n      presented in [1], including IMU, two GNSS antennas, and absolute LiDAR measurements.\n    - [Grand Tour GT Generation - Leica Total Station Position \u0026 GNSS](./examples/ros/atn_position3_fuser): The GT\n      generation estimator aligning two non-drifting trajectories: i) the Leica total station R3 position, and ii) the\n      Novotel offline optimized SE(3) trajectory.\n    - [Super Mega Bot - Robot for Teaching Purposes](./examples/ros/smb_estimator_graph): A wheeled robot integrating\n      IMU, absolute LiDAR poses, and wheel encoders.\n    - [Pure IMU Integration](./examples/ros/pure_imu_integration): A simple example of performing pure IMU integration\n      for dead-reckoning performance testing.\n    - [IMU Pose3 Fuser](./examples/ros/imu_pose3_fuser): A simple example of fusing an IMU and an SE(3) pose\n      measurement.\n    - [Graph MSF ROS Examples](./examples/ros/graph_msf_ros_examples): A meta-package bundling all the aforementioned\n      ROS examples in one package for convenience.\n4. [ROS2 Examples](./examples/ros2): COMING SOON\n\n## Instructions\n\nPlease refer to our [Read the Docs](https://leggedrobotics.github.io/holistic_fusion/docs) for detailed instructions\nregarding installation and usage.\n\n***Note that the documentation is still under construction and will be updated soon.**\n\n## Code Documentation\n\nPlease refer to our [Doxygen](https://leggedrobotics.github.io/holistic_fusion/doxy/html) for documentation of the code.\n\n## Paper\n\nIf you find this code useful or use it in your work, please consider citing:\n\n**[1] arXiv 2025**\n\n* [Project Page](https://leggedrobotics.github.io/holistic_fusion/)\n* [Paper](https://arxiv.org/abs/2504.06479)\n* [Video](https://youtube.com/leggedrobotics)\n\n```\n@misc{nubert2025holisticfusiontasksetupagnostic,\n      title={Holistic Fusion: Task- and Setup-Agnostic Robot Localization and State Estimation with Factor Graphs}, \n      author={Julian Nubert and Turcan Tuna and Jonas Frey and Cesar Cadena and Katherine J. Kuchenbecker and Shehryar Khattak and Marco Hutter},\n      year={2025},\n      eprint={2504.06479},\n      archivePrefix={arXiv},\n      primaryClass={cs.RO},\n      url={https://arxiv.org/abs/2504.06479}, \n}\n```\n\n**[2] ICRA2022, Philadelphia**\n\n* [Project Page](https://sites.google.com/leggedrobotics.com/gmfcl).\n* [Paper](https://arxiv.org/pdf/2203.01389.pdf)\n* [Video](https://youtu.be/syTV7Ui36jg)\n\n```\n@inproceedings{nubert2022graph,\n  title={Graph-based Multi-sensor Fusion for Consistent Localization of Autonomous Construction Robots},\n  author={Nubert, Julian and Khattak, Shehryar and Hutter, Marco},\n  booktitle={IEEE International Conference on Robotics and Automation (ICRA)},\n  year={2022},\n  organization={IEEE}\n}\n```\n\n## Acknowledgments\n\nThe authors thank their colleagues at ETH Zurich and NASA JPL for their help in conducting the robot experiments and\nevaluations and using HF on their robots.\nSpecial thanks go to Takahiro Miki and the ANYmal Hike team at the Robotic Systems Lab (RSL), ETH Zurich, Nikita Rudin,\nand David Hoeller for the ANYmal Parkour experiments, Patrick Spieler for running the deployments on the JPL RACER\nvehicle, the entire excavation team at RSL and Gravis Robotics, Thomas Mantel and the teaching assistants of\nthe [ETH Robotic Summer School](https://robotics-summerschool.ethz.ch/) for their help on the SuperMegaBot, and Mayank\nMittal for his help in generating renderings.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleggedrobotics%2Fholistic_fusion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleggedrobotics%2Fholistic_fusion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleggedrobotics%2Fholistic_fusion/lists"}