{"id":26694946,"url":"https://github.com/Yixin-F/LiLoc","last_synced_at":"2025-03-26T19:01:34.754Z","repository":{"id":255174696,"uuid":"840701221","full_name":"Yixin-F/LiLoc","owner":"Yixin-F","description":"(ICRA 2025) LiLoc: Lifelong Localization using Adaptive Submap Joining and Egocentric Factor Graph","archived":false,"fork":false,"pushed_at":"2025-03-21T10:11:59.000Z","size":2388,"stargazers_count":218,"open_issues_count":6,"forks_count":25,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-21T11:25:08.560Z","etag":null,"topics":["factorgraphs","localization","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/Yixin-F.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":"2024-08-10T12:23:09.000Z","updated_at":"2025-03-21T10:12:03.000Z","dependencies_parsed_at":"2024-08-28T12:48:03.167Z","dependency_job_id":"49e76cb6-b100-46df-8e12-b1e4fb5b9535","html_url":"https://github.com/Yixin-F/LiLoc","commit_stats":null,"previous_names":["yixin-f/liloc"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yixin-F%2FLiLoc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yixin-F%2FLiLoc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yixin-F%2FLiLoc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yixin-F%2FLiLoc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Yixin-F","download_url":"https://codeload.github.com/Yixin-F/LiLoc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245718740,"owners_count":20661160,"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":["factorgraphs","localization","slam"],"created_at":"2025-03-26T19:01:09.816Z","updated_at":"2025-03-26T19:01:34.709Z","avatar_url":"https://github.com/Yixin-F.png","language":"C++","funding_links":[],"categories":["WhyLongTerm","C++"],"sub_categories":["Australia"],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ch1\u003eLiLoc\u003c/h1\u003e\n    \u003cbr /\u003e\n    \u003ca href=https://youtu.be/Kc2azOG8TSU\u003e🎬Youtube\u003c/a\u003e\n    \u003cspan\u003e\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n    \u003ca href=https://www.bilibili.com/video/BV1uatkeFEWL/?vd_source=7936e3be9727382a31661ae25224c8ad\u003e🎬Bilibili\u003c/a\u003e\n    \u003cspan\u003e\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n    \u003ca href=\"https://github.com/Yixin-F/LiLoc/blob/main/README.md#Installation\"\u003e🛠️Installation\u003c/a\u003e\n    \u003cspan\u003e\u0026nbsp;\u0026nbsp;•\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n    \u003ca href=https://arxiv.org/abs/2409.10172\u003e📑Paper\u003c/a\u003e\n  \u003cbr /\u003e\n  \u003cbr /\u003e\n\u003c/div\u003e\n\n\u003cimg src=\"doc/liloc.jpg\" alt=\"LiLoc_cover\" width=\"800\"\u003e\n\n\nThis repository contains the source code for our ICRA2025 paper. In this work, we propose a versatile graph-based lifelong localization framework, \u003cstrong\u003eLiLoc\u003c/strong\u003e , which enhances its timeliness by maintaining a single central session while improves the accuracy through multi-modal factors between the central and subsidiary sessions. The main contributions are as follows:\n\n- A graph-based framework for long-term localization featuring a flexible mode-switching mechanism, to achieve accurate multi-session localization.\n- An adaptive submap joining strategy to dynamically manage (i.e., generate, select and update) prior submaps, reducing system memory consumption while ensuring the timeliness of prior knowledge.\n- An egocentric factor graph (EFG) module to tightly couple multi-modal constrains, along with a novel propagation model to enhance  prior constrains by distributing weighted scan matching factors in joint factor-graph optimization (JFGO). \n- We achieve the competitive performance on public and custom datasets and the proposed system will be released for community use.\n\n\n***\n## Installation\n### 1. Prerequisites\n#### 1.1 System and third-party packages\n- Ubuntu $\\geq$ 18.04 (tested on Noetic)\n\n- PCL $\\geq$ 1.8 (tested on PCL 1.10)\n\n- Eigen \u003e= 3.3.4 (default for Ubuntu 20.04)\n\n- OpenCV $\\geq$ 4.0 (tested on OpenCV 4.2)\n\n- GTSAM $\\geq$ 4.0.3 (tested on GTSAM 4.2(a))\n\n#### 1.2 Other Packages\n- [ndt_omp](https://github.com/koide3/ndt_omp)\n- [livox_ros_driver](https://github.com/Livox-SDK/livox_ros_driver)\n- [better_fastlio2](https://github.com/Yixin-F/better_fastlio2) (Refer to the module of \"pose initialization\" in this open-source repository, the new reconstructed code is comming soon.)\n\n### 2. Build\n```bash\ncd \u003cyour workspace\u003e/src\ngit clone https://github.com/koide3/ndt_omp\ngit clone https://github.com/Livox-SDK/livox_ros_driver\ngit clone https://github.com/Yixin-F/LiLoc\n\ncd ..\ncatkin_make\nsource devel/setup.bash\n```\n\n## Run\n####  \u003cstrong\u003eRemark 1:\u003c/strong\u003e How to set your localization mode ?\nSince LiLoc is a graph-based localization method with a mode-switching mechanism, you need to provide the directory where your prior maps are stored and confirm your localization mode.  Edit the parameter `mode` in `config/*.yaml` files to change the localization mode. If your set `lio`, LiLoc can be truned in to incremantal localization mode and be directly used as a SLAM algorithm. You should edit the parameter `savePCDDirectory` in `config/*.yaml` files to confirm where the results are stored. Otherwise, if you set `relo`, LiLoc is truned in to relocalization mode. So, you should edit the parameter `savePCDDirectory` in `config/*.yaml` files to confirm where the prior knowledge are loaded and the parameter `saveSessionDirectory` in `config/*.yaml` files to confirm where the upated central session maps are stored.\n\n####  \u003cstrong\u003eRemark 2:\u003c/strong\u003e How to set the initial pose ?\nSince our code of \"pose initailization\" is under reconstrucion, you can directly use the \"2D pose estimation\" or refer to our previous repository named [better_fastlio2](https://github.com/Yixin-F/better_fastlio2) to set the initial pose. The reconstructed code will be publicly aviliable as soon as possible.\n\n####  \u003cstrong\u003eRemark 3:\u003c/strong\u003e How to save your results ?\n```bash\nrosservice call /liloc/save_map 0.2 1 1  # save results of the current session\n```\n```bash\nrosservice call /liloc/save_session 0.2  # save results of the updated central session\n```\n\n\n### 1. NCLT dataset\nDownload NCLT from [https://robots.engin.umich.edu/nclt/](https://robots.engin.umich.edu/nclt/)\n```bash\nroslaunch liloc run_nclt.launch\n```\n\n### 2. M2DGR dataset\nDownload M2DGR from [https://github.com/SJTU-ViSYS/M2DGR](https://github.com/SJTU-ViSYS/M2DGR)\n```bash\nroslaunch liloc run_m2dgr.launch\n```\n\n### 3. Our School dataset\nDownload the School dataset from [Google Driver](https://drive.google.com/drive/folders/14u6axUkISU5j9CxxUYEoU7Le1qneiOvA?usp=sharing)\n```bash\nroslaunch liloc run_lio_sam_mid360.launch\n```\n\n### 4. Our Factory dataset\nDownload the Factory dataset from [BaiDu Pan (passcode: g4a8)](https://pan.baidu.com/s/1AuivykDu-2djHE7Z6Sqg5Q?pwd=g4a8)\n```bash\nroslaunch liloc run_lio_sam_default.launch\n```\n\n\n\n## Citation\nIf you use any of this code, please cite our [paper](https://arxiv.org/abs/2409.10172).\n\n```bibtex\n@article{fang2024liloc,\n  title={LiLoc: Lifelong Localization using Adaptive Submap Joining and Egocentric Factor Graph},\n  author={Fang, Yixin and Li, Yanyan and Qian, Kun and Tombari, Federico and Wang, Yue and Lee, Gim Hee},\n  journal={arXiv preprint arXiv:2409.10172},\n  year={2024}\n}\n```\n\n## Acknowledgements\nThanks for the open-source projects [LIO-SAM](https://github.com/TixiaoShan/LIO-SAM), [liorf](https://github.com/YJZLuckyBoy/liorf) and [Block-Map-Based-Localization](https://github.com/YixFeng/Block-Map-Based-Localization).\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYixin-F%2FLiLoc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FYixin-F%2FLiLoc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYixin-F%2FLiLoc/lists"}