{"id":13436075,"url":"https://github.com/jedeschaud/ct_icp","last_synced_at":"2025-05-12T09:55:13.019Z","repository":{"id":38336512,"uuid":"368536301","full_name":"jedeschaud/ct_icp","owner":"jedeschaud","description":"CT-ICP: Continuous-Time LiDAR Odometry","archived":false,"fork":false,"pushed_at":"2022-12-05T11:03:13.000Z","size":115195,"stargazers_count":795,"open_issues_count":40,"forks_count":136,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-03-18T12:40:06.591Z","etag":null,"topics":["ct-icp","lidar","odometry","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/jedeschaud.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}},"created_at":"2021-05-18T13:16:08.000Z","updated_at":"2025-03-18T08:01:50.000Z","dependencies_parsed_at":"2023-01-24T04:32:05.277Z","dependency_job_id":null,"html_url":"https://github.com/jedeschaud/ct_icp","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedeschaud%2Fct_icp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedeschaud%2Fct_icp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedeschaud%2Fct_icp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedeschaud%2Fct_icp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jedeschaud","download_url":"https://codeload.github.com/jedeschaud/ct_icp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253711985,"owners_count":21951674,"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":["ct-icp","lidar","odometry","robotics","ros","slam"],"created_at":"2024-07-31T03:00:43.241Z","updated_at":"2025-05-12T09:55:12.993Z","avatar_url":"https://github.com/jedeschaud.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"![CT_ICP_LOGO](./doc/CT_ICP_About.png)\n\n![](https://github.com/pierdell/gifs/blob/master/ct_icp_main.png)\n\nThis repository implements the SLAM **CT-ICP** (see  [our article](https://arxiv.org/abs/2109.12979)), a lightweight,\nprecise and versatile pure LiDAR odometry.\n\nThe code can be run with **ROS**, but also as an independent library, or using scripts we provide.\n\nIt is integrated with the python project **[pyLiDAR-SLAM](https://github.com/Kitware/pyLiDAR-SLAM)** which gives access\nto more datasets.\n**pyLiDAR-SLAM** requires the installation of the python binding for **CT-ICP** (see below).\n\n![](https://github.com/pierdell/gifs/blob/master/ct_icp_NCLT.GIF)\n![](https://github.com/pierdell/gifs/blob/master/ct_icp_UrbanLoco.GIF)\n\n## NEWS:\n\n##### [27/07/2022] New release, with increased ROS support\n\n\u003e We introduce a new release, with significant changes in the code. We do not guarantee the results of the article in\n\u003e this branch, (though this branch should globally our SLAM). To replicate the results from the dataset, see the\n\u003e release `ICRA-2022`\n\u003e\n\n# Installation\n\n### Requirements\n\n\u003e Compiler: GCC \u003e= 7.5, clang \u003e= 8.01\n\u003e\n\u003e cmake \u003e= 3.14\n\n##### Tested On:\n\n| OS    | COMPILER       |\n| --- |----------------|\n| Ubuntu 18.04 | GCC \u003e= 7.5     |\n| Ubuntu 18.04 | clang \u003e= 8.01  | \n\n### Step 0: Clone the directory\n\n```bash\ngit clone https://github.com/jedeschaud/ct_icp.git\ncd ct_icp\n```\n\n### Step 1: Superbuild\n\n\u003e CT-ICP uses **Kitware**'s [**\nSuperbuild**](https://gitlab.kitware.com/keu-computervision/MappingResearchKEU/Superbuild) to build the external\n\u003e dependencies.\n\u003e\n\u003e You can either install the external dependencies, or use the script below to install all dependencies:\n\n```bash\nmkdir .cmake-build-superbuild \u0026\u0026 cd .cmake-build-superbuild     #\u003c Creates the cmake folder\ncmake ../superbuild                                             #\u003c (1) Configure step \ncmake --build . --config Release                                #\u003c Build step (Downloads and install the dependencies), add -DWITH_VIZ3D=ON to install with the GUI\n```\n\u003e /!\\ If you want to build the visualization do not forget to add `-DWITH_VIZ3D=ON`\n\n\n\u003e If everything worked, a directory `install` should have been created with at its root a `superbuild_import.cmake`\n\u003e file.\n\n### Step 2: Build and install CT-ICP library\n\n```bash\n# Inside the main directory\nmkdir cmake-build-release \u0026\u0026 cd  cmake-build-release                  #\u003c Create the build directory\ncmake .. -DCMAKE_BUILD_TYPE=Release                                   #\u003c (2) Configure with the desired options (specify arguments with -D\u003carg_name\u003e=\u003carg_value\u003e), add -DWITH_VIZ3D=ON to install with the GUI\ncmake --build . --target install --config Release --parallel 12       #\u003c Build and Install the project\n```\n\n\u003e /!\\ If you want to build the visualization do not forget to add `-DWITH_VIZ3D=ON`\n\n\n\u003e If everything worked fine, a `CT_ICP` subdirectory should appear in your **Superbuild Directory**.\n\u003e You can use the config files located at `\u003cSUPERBUILD_INSTALL_DIR\u003e/CT_ICP/lib/cmake` to load the libraries in a cmake\n\u003e project, or use ROS or the specified executables.\n\n### Step 3: ROS\n\nTo build the ROS wrapping for **CT-ICP**, first build and install the CT-ICP library (see *Steps 1 and 2* ).\n\n\u003e /!\\ Set the CMAKE argument `-DWITH_ROS=ON` to the configure step (1) of the superbuild (*Step 1*)\n\u003e\n\nInstall the `ROSCore` library, (this should install a shared library named `ROSCore`\nat `\u003cCT_ICP_INSTALL_DIR\u003e/CT_ICP/lib`):\n\n```bash\ncd ros/roscore\nmkdir cmake-build-release \u0026\u0026 cd  cmake-build-release                  #\u003c Create the build directory\ncmake .. -DCMAKE_BUILD_TYPE=Release                                   #\u003c (2) Configure with the desired options (specify arguments with -D\u003carg_name\u003e=\u003carg_value\u003e)\ncmake --build . --target install --config Release --parallel 12       #\u003c Build and Install the ROSCore library\n```\n\n\u003e Then make a symbolic link of the directory `ct_icp_odometry` and `slam_roscore` of this project to the `src` directory\n\u003e of your catkin\n\u003e workspace.\n\n```bash\ncd \u003cpath-to-your-catkin-workspace\u003e/src                              #\u003c Move to the Catkin Workspace's src directory\nln -s \u003cpath-to-ct_icp-git-project\u003e/ros/catkin_ws/ct_icp_odometry ct_icp_odometry        #\u003c Make a symbolic link to the `catkin_ws` folder\nln -s \u003cpath-to-ct_icp-git-project\u003e/ros/catkin_ws/slam_roscore slam_roscore        #\u003c Make a symbolic link to the `catkin_ws` folder\ncd ..                                                               #\u003c Move back to the root of the catkin workspace\ncatkin_make -DSUPERBUILD_INSTALL_DIR=\u003cpath-to-superbuild-install-dir\u003e\n```\n\n\u003e If the installation is successful, and after sourcing the workspace's devel directory, you should be able to launch\n\u003e the ROS Nodes installed.\n\n\u003e The wrapping defines the following nodes:\n\n- `ct_icp_dataset_node`: A node which publishes pointclouds of ct_icp's different datasets read from disk.\n- `ct_icp_odometry_node`: The main odometry node running `ct_icp`'s odometry.\n\n```\nroslaunch ct_icp_odometry launch_slam_dataset.launch dataset_path:=\u003cpath-to-dataset-root\u003e dataset:=\u003cdataset_name\u003e sequence:=\u003csequence_name\u003e\n```\n\n[//]: # (### Visualization [experimental])\n\n[//]: # ()\n\n[//]: # (\u003e As a debugging/visualization tool we use a home-made/experimental lightweight OpenGL-based pointcloud visualizer **[viz3d]\u0026#40;https://github.com/pierdell/viz3d\u0026#41;** designed for our SLAM use case.)\n\n[//]: # (\u003e )\n\n[//]: # (\u003e To activate pass the argument `-DWITH_VIZ3D=ON` to the configure steps of the `Superbuild \u0026#40;1\u0026#41;`, `CT_ICP \u0026#40;2\u0026#41;` )\n\n# Install the Datasets\n\n### CT-ICP Datasets from the article\n\nThe Datasets are publicly available at:\nhttps://cloud.mines-paristech.fr/index.php/s/UwgVFtiTOmrgKp5\n\nThe folder is protected by the following password : **npm3d**\n\nEach dataset is a .zip archive containing the PLY scan file with the relative timestamps for each point in the frame,\nand if available, the ground truth poses.\n\nTo install each dataset, simply download and extract the archives on disk. The datasets are redistributions of existing\nand copyrighted datasets, we only offer a convenient repackaging of these datasets.\n\nThe dataset available are the following:\n\n**Under Creative Commons Attribution-NonCommercial-ShareAlike LICENCE**\n\n- *KITTI* (see [eval_odometry.php](http://www.cvlibs.net/datasets/kitti/eval_odometry.php)):\n    - The most popular benchmark for odometry evaluation.\n    - The sensor is a Velodyne HDL-64\n    - The frames are motion-compensated (no relative-timestamps) and the Continuous-Time aspect of CT-ICP will not work\n      on this dataset.\n    - Contains 21 sequences for ~40k frames (11 with ground truth)\n- *KITTI_raw* (see [eval_odometry.php](http://www.cvlibs.net/datasets/kitti/eval_odometry.php)): :\n    - The same dataset as *KITTI* without the motion-compensation, thus with meaningful timestamps.\n    - The raw data for sequence `03` is not available\n- *KITTI_360* (see [KITTI-360](http://www.cvlibs.net/datasets/kitti-360/)):\n    - The successor of *KITTI*, contains longer sequences with timestamped point clouds.\n    - The sensor is also a Velodyne HDL-64\n\n**Permissive LICENSE**\n\n- *NCLT*: (see [nclt](http://robots.engin.umich.edu/nclt/))\n    - Velodyne HDL-32 mounted on a segway\n    - 27 long sequences (up to in the campus of MICHIGAN university over a long\n    - Challenging motions (abrupt orientation changes)\n    - **NOTE**: For this dataset, directly download the *Velodyne* links (\n      e.g. [2012-01-08_vel.tar](http://robots.engin.umich.edu/nclt/velodyne_data/2012-01-08_vel.tar.gz)). Our code\n      directly reads the *velodyne_hits.bin* file.\n- *KITTI-CARLA*: (see and cite [KITTI-CARLA](https://arxiv.org/abs/2109.00892)):\n    - 7 sequences of 5000 frames generated using the [CARLA](https://carla.readthedocs.io/en/0.9.10/) simulator\n    - Imitates the KITTI sensor configuration (64 channel rotating LiDAR)\n    - Simulated motion with very abrupt rotations\n- *ParisLuco* (published with our work **CT-ICP**, cf below to cite us):\n    - A single sequence taken around the Luxembourg Garden\n    - HDL-32, with numerous dynamic objects\n\n### Download ROSBAGS to run the SLAM with ROS\n\nBelow we give a list of datasets for we worked on the ROSBags,\nand for which we propose a roslaunch file.\n\n- [UrbanLoco](https://github.com/weisongwen/UrbanLoco): A Road Dataset for localization in Urban Scenes\n- [HILTI](https://hilti-challenge.com/index.html): A benchmark for precision mapping in construction sites\n- [SubT](https://bitbucket.org/subtchallenge/subt_reference_datasets/src/master/): Subterrean datasets acquired in the\n  context of DARPA Subterrean Challenge bu the Army Research Laboratory\n- [SubT](https://bitbucket.org/subtchallenge/subt_reference_datasets/src/master/): Subterrean datasets acquired in the\n  context of DARPA Subterrean Challenge bu the Army Research Laboratory\n- [Newer College Dataset](https://ori-drs.github.io/newer-college-dataset/): A large dataset of handheld sensors\n  acquired by the Oxford\n\nFor more datasets, don't hesitate to look at this awesome\nlist [List of SLAM Datasets](https://github.com/youngguncho/awesome-slam-datasets#mapping()).\n\n## Running the SLAM\n\n### OPTION I -- Using the scripts (on the *ct-icp* datasets)\n\nIf the installation of CT-ICP went fine, there should be an executable located\nat `\u003cCT_ICP_INSTALL_DIR\u003e/bin/run_odometry`.\nThis executable can be run with a config file with the command:\n\n```./run_odometry -c \u003cpath-to-config-file\u003e```\n\nSee `./config/odometry/driving_config.yaml` for an example of the format of the config file to expect.\n\nIf `CT-ICP` was installed with `viz3d`, the SLAM should run along a GUI, otherwise, the trajectory and metrics will be\nsaved to disk regularly.\n\n### OPTION II -- Using the SLAM as a library\n\nAfter the installation, you can also use `CT_ICP` and `SlamCore` libraries, located in `\u003cCT_ICP_INSTALL_DIR\u003e/lib`,\nfor instance with a cmake project with the cmake config files for the libraries located\nat `\u003cCT_ICP_INSTALL_DIR\u003e/lib/cmake`.\n\nSee for example `command/cmd_run_odometry.cpp` and `command/odometry_runner.h` for an example of use.\n\n#### Custom Datasets\n\nSome datasets are defined in the library (with expected layout for the Data, see `dataset.h, dataset.cpp`), but you can\nextend\n`ct_icp::ADatasetSequence` to define your own custom datasets.\n\n### OPTION III -- Using ROS\n\nAfter completing the ROS installation, use the launch files defined in `ros/catkin_ws/ct_icp_odometry/launch` on a\nrosbag to launch the odometry, for e.g:\n\n```\nroslaunch ct_icp_odometry urban_loco_CAL.launch rosbag:=\u003cpath-to-UrbanLoco-root\u003e/CA-20190828190411_blur_align.bag\n```\n\n## Citation\n\nIf you use our work in your research project, please consider citing:\n\n```\n@misc{dellenbach2021cticp,\n  title={CT-ICP: Real-time Elastic LiDAR Odometry with Loop Closure},\n  author={Pierre Dellenbach and Jean-Emmanuel Deschaud and Bastien Jacquet and François Goulette},\n  year={2021},\n  eprint={2109.12979},\n  archivePrefix={arXiv},\n  primaryClass={cs.RO}\n}\n```\n\n## TODO(s)\n\n- [x] Write ROS packaging v.0.1\n- [x] Update the Readme.md\n- [x] Add integration / performance tests on synthetic data\n- [ ] Improve the ROS packaging to be more robust in real time to more datasets\n- [ ] Fix the binding (which is now broken)\n- [ ] Add tests/automatic build to the Github CI\n\n- [ ] Add a wiki (documentation on the code)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjedeschaud%2Fct_icp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjedeschaud%2Fct_icp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjedeschaud%2Fct_icp/lists"}