{"id":13435968,"url":"https://github.com/rvp-group/mad-icp","last_synced_at":"2026-01-14T08:16:21.655Z","repository":{"id":239036577,"uuid":"797952183","full_name":"rvp-group/mad-icp","owner":"rvp-group","description":"Minimal, robust, accurate and real-time LiDAR odometry ","archived":false,"fork":false,"pushed_at":"2025-06-16T14:36:17.000Z","size":26959,"stargazers_count":317,"open_issues_count":1,"forks_count":24,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-12-20T21:43:36.468Z","etag":null,"topics":["icp","lidar","odometry","point-cloud"],"latest_commit_sha":null,"homepage":"","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/rvp-group.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-05-08T19:50:56.000Z","updated_at":"2025-11-11T07:22:12.000Z","dependencies_parsed_at":"2024-09-14T04:33:38.502Z","dependency_job_id":"1c986dd7-293c-4540-afe1-d769a93ea85e","html_url":"https://github.com/rvp-group/mad-icp","commit_stats":null,"previous_names":["rvp-group/mad-icp"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/rvp-group/mad-icp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvp-group%2Fmad-icp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvp-group%2Fmad-icp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvp-group%2Fmad-icp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvp-group%2Fmad-icp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rvp-group","download_url":"https://codeload.github.com/rvp-group/mad-icp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rvp-group%2Fmad-icp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28413747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["icp","lidar","odometry","point-cloud"],"created_at":"2024-07-31T03:00:41.452Z","updated_at":"2026-01-14T08:16:21.647Z","avatar_url":"https://github.com/rvp-group.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://github.com/rvp-group/mad-icp/actions/workflows/pythonbuild.yml\"\u003e\u003cimg src=\"https://github.com/rvp-group/mad-icp/actions/workflows/pythonbuild.yml/badge.svg\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/rvp-group/mad-icp\"\u003e\u003cimg alt=\"GitHub Repo stars\" src=\"https://img.shields.io/github/stars/rvp-group/mad-icp\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/mad-icp/\"\u003e\u003cimg alt=\"PyPI - Version\" src=\"https://img.shields.io/pypi/v/mad-icp\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/mad-icp/\"\u003e\u003cimg alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dm/mad-icp\"\u003e\u003c/a\u003e\n    \u003ch1\u003eMAD-ICP\u003c/h1\u003e\n    \u003ch3\u003eIt Is All About Matching Data -- Robust and Informed LiDAR Odometry\u003c/h3\u003e\n    \u003ch3\u003eAccepted \u003ca href=\"https://ieeexplore.ieee.org/document/10669999\"\u003eRA-L\u003c/a\u003e 2024\u003c/h3\u003e\n    \u003ch3\u003e\n        \u003ca href=\"https://github.com/rvp-group/mad-icp/blob/main/paper_with_supplementary.pdf\"\u003ePreprint\u003c/a\u003e\n    \u003c/h3\u003e\n    \u003cdiv align=\"center\"\u003e\n        \u003ca href=\"https://github.com/rvp-group/mad-icp\"\u003e\u003cimg src=\"https://github.com/rvp-group/mad-icp/blob/main/mad-icp.gif?raw=true\"/\u003e\u003c/a\u003e   \n    \u003c/div\u003e\n    \u003cbr /\u003e   \n\u003c/div\u003e\n\n# Install using `pip`\nYou can download/install MAD-ICP using `pip`\n```bash\npip install mad-icp\n```\n\n# Usage\n\nWe provide a Python launcher for Rosbag1, Rosbag2, and KITTI binary formats. The dataset configuration is important for the sensor characteristics and extrinsic information (typically, ground truths are not expressed in the LiDAR frame). In `configurations/datasets/dataset_configurations.py` we provide configurations for many datasets.\n\nThe internal parameters (used by default) are stored in `configurations/mad_params.py`. All the experiments have been run with this same set.\nYou can specify a new set in `configurations/mad_params.py` and use it with the option `--mad-icp-params`.\n\nBoth the options `--dataset-config` and `--mad-icp-params` also accept `.cfg` files like those in `configurations`.\n\nTo run the pipeline, choose the appropriate dataset configuration (`kitti` for this example) and type:\n```bash\nmad_icp --data-path /input_dir/ \\\n        --estimate-path /output_dir/ \\\n        --dataset-config kitti\n```\nOur runner directly saves the odometry estimate file in KITTI format (homogenous matrix row-major 12 scalars); soon, we will provide more available formats like TUM.\n\nOur pipeline is `anytime realtime`! You can play with parameters `num_keyframes` and `num_cores` and, if you have enough _computation capacity_, we suggest increasing these (we run demo/experiments with `num_keyframes=16` and `num_cores=16`).\n\n## Data associtation and registration tools\nIf you want to use our MAD-tree to perform nearest neighbor or use MAD-ICP to perform registration between two point clouds, \u003cb\u003e[here few easy examples](https://github.com/rvp-group/mad-icp/tree/main/mad_icp/apps/utils/tools/README.md)\u003c/b\u003e.\n\n\n____________________________________________________________________\n\n# Building from source\n\nBuilding is tested by our CI/CD pipeline for Ubuntu 20.04 and Ubuntu 22.04 (using g++).\n\nThe following external dependencies are required.\n| Dependency   | Version(s) known to work |\n| ------------ | ------------------------ |\n| [Eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page) | 3.3 |\n| [OpenMP](https://www.openmp.org/) |  |\n| [pybind11](https://pybind11.readthedocs.io/en/stable/) |  |\n| [yaml](https://github.com/jbeder/yaml-cpp) (optional for C++ apps) |  |\n\nIf your system lacks any dependency (except for `OpenMP`) we download local copies using `FetchContent`.\nIf you want to build and install the package, assuming you're inside the repository, you can use `pip` as follows:\n```bash\npip install .\n```\nMoreover, you can build the C++ library (along with the pybinds) by typing:\n```bash\nmkdir build \u0026\u0026 cd build \u0026\u0026 cmake ../mad_icp \u0026\u0026 make -j\n```\n\n## Building and Running C++ Apps \\[Optional\\]\nIf you want to avoid Python, we provide the `bin_runner` C++ executable (located in `mad_icp/apps/cpp_runners/bin_runner.cpp`) that accepts binary cloud format (KITTI, Mulran, etc.).\nYou can build the executable using\n```bash\nmkdir build \u0026\u0026 cd build \u0026\u0026 cmake -DCOMPILE_CPP_APPS=ON ../mad_icp \u0026\u0026 make -j\n```\nAnd run\n```bash\ncd build/apps/cpp_runners\n./bin_runner -data_path /path_to_bag_folder/ \\\n             -estimate_path /path_to_estimate_folder/ \\\n             -dataset_config ../../../mad_icp/configurations/datasets/kitti.cfg \\\n             -mad_icp_config ../../../mad_icp/configurations/default.cfg \n```\n\u003e[!IMPORTANT]\n \u003eIf running on the KITTI dataset, enable the flag `-kitti` for KITTI scan correction (not documented anywhere). We do not (currently) provide a viewer for this executable. \n\n# What is missing?\n- ROS/ROS2 optional dependencies\n\n# Cite us\nIf you use any of this code, please cite our \u003ca href=\"https://ieeexplore.ieee.org/document/10669999\"\u003epaper\u003c/a\u003e:\n\n```\n@article{ferrari2024mad,\n  title={MAD-ICP: It Is All About Matching Data--Robust and Informed LiDAR Odometry},\n  author={Ferrari, Simone and Di Giammarino, Luca and Brizi, Leonardo and Grisetti, Giorgio},\n  journal={IEEE Robotics and Automation Letters},\n  year={2024},\n  doi={10.1109/LRA.2024.3456509}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frvp-group%2Fmad-icp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frvp-group%2Fmad-icp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frvp-group%2Fmad-icp/lists"}