{"id":28061267,"url":"https://github.com/vectr-ucla/direct_lidar_inertial_odometry","last_synced_at":"2025-05-12T09:55:25.443Z","repository":{"id":174052326,"uuid":"651687101","full_name":"vectr-ucla/direct_lidar_inertial_odometry","owner":"vectr-ucla","description":"[IEEE ICRA'23] A new lightweight LiDAR-inertial odometry algorithm with a novel coarse-to-fine approach in constructing continuous-time trajectories for precise motion correction.","archived":false,"fork":false,"pushed_at":"2024-11-21T18:20:26.000Z","size":23798,"stargazers_count":625,"open_issues_count":36,"forks_count":129,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-11-21T19:25:31.489Z","etag":null,"topics":["3d-mapping","imu","lidar","lidar-inertial-odometry","lidar-odometry","lidar-slam","localization","mapping","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/vectr-ucla.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":"2023-06-09T20:21:20.000Z","updated_at":"2024-11-19T09:00:52.000Z","dependencies_parsed_at":"2024-11-08T20:30:21.802Z","dependency_job_id":null,"html_url":"https://github.com/vectr-ucla/direct_lidar_inertial_odometry","commit_stats":null,"previous_names":["vectr-ucla/direct_lidar_inertial_odometry"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectr-ucla%2Fdirect_lidar_inertial_odometry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectr-ucla%2Fdirect_lidar_inertial_odometry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectr-ucla%2Fdirect_lidar_inertial_odometry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectr-ucla%2Fdirect_lidar_inertial_odometry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vectr-ucla","download_url":"https://codeload.github.com/vectr-ucla/direct_lidar_inertial_odometry/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253712123,"owners_count":21951687,"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":["3d-mapping","imu","lidar","lidar-inertial-odometry","lidar-odometry","lidar-slam","localization","mapping","odometry","robotics","ros","slam"],"created_at":"2025-05-12T09:55:24.726Z","updated_at":"2025-05-12T09:55:25.428Z","avatar_url":"https://github.com/vectr-ucla.png","language":"C++","funding_links":[],"categories":["Awesome LiDAR SLAM Algorithms"],"sub_categories":[],"readme":"# Direct LiDAR-Inertial Odometry: Lightweight LIO with Continuous-Time Motion Correction\n\n#### [[ IEEE ICRA ](https://ieeexplore.ieee.org/document/10160508)] [[ arXiv ](https://arxiv.org/abs/2203.03749)] [[ Video ](https://www.youtube.com/watch?v=4-oXjG8ow10)] [[ Presentation ](https://www.youtube.com/watch?v=Hmiw66KZ1tU)]\n\nDLIO is a new lightweight LiDAR-inertial odometry algorithm with a novel coarse-to-fine approach in constructing continuous-time trajectories for precise motion correction. It features several algorithmic improvements over its predecessor, [DLO](https://github.com/vectr-ucla/direct_lidar_odometry), and was presented at the IEEE International Conference on Robotics and Automation (ICRA) in London, UK in 2023.\n\n\u003cbr\u003e\n\u003cp align='center'\u003e\n    \u003cimg src=\"./doc/img/dlio.png\" alt=\"drawing\" width=\"720\"/\u003e\n\u003c/p\u003e\n\n## Instructions\n\n### Sensor Setup \u0026 Compatibility\nDLIO has been extensively tested using a variety of sensor configurations and currently supports Ouster, Velodyne, Hesai, and Livox LiDARs. The point cloud should be of input type `sensor_msgs::PointCloud2` and the 6-axis IMU input type of `sensor_msgs::Imu`. \n\nFor Livox sensors specifically, you can use the `master` branch directly if it is of type `sensor_msgs::PointCloud2` (`xfer_format: 0`), or the `feature/livox-support` branch and the latest [`livox_ros_driver2`](https://github.com/Livox-SDK/livox_ros_driver2) package if it is of type `livox_ros_driver2::CustomMsg` (`xfer_format: 1`) (see [here](https://github.com/vectr-ucla/direct_lidar_inertial_odometry/issues/5) for more information).\n\nFor best performance, extrinsic calibration between the LiDAR/IMU sensors and the robot's center-of-gravity should be inputted into `cfg/dlio.yaml`. If the exact values of these are unavailable, a rough LiDAR-to-IMU extrinsics can also be used (note however that performance will be degraded).\n\nIMU intrinsics are also necessary for best performance, and there are several open-source calibration tools to get these values. These values should also go into `cfg/dlio.yaml`. In practice however, if you are just testing this work, using the default ideal values and performing the initial calibration procedure should be fine.\n\nAlso note that the LiDAR and IMU sensors _need_ to be properly time-synchronized, otherwise DLIO will not work. We recommend using a LiDAR with an integrated IMU (such as an Ouster) for simplicity of extrinsics and synchronization.\n\n### Dependencies\nThe following has been verified to be compatible, although other configurations may work too:\n\n- Ubuntu 20.04\n- ROS Noetic (`roscpp`, `std_msgs`, `sensor_msgs`, `geometry_msgs`, `nav_msgs`, `pcl_ros`)\n- C++ 14\n- CMake \u003e= `3.12.4`\n- OpenMP \u003e= `4.5`\n- Point Cloud Library \u003e= `1.10.0`\n- Eigen \u003e= `3.3.7`\n\n```sh\nsudo apt install libomp-dev libpcl-dev libeigen3-dev\n```\n\nDLIO supports ROS1 by default, and ROS2 using the `feature/ros2` branch.\n\n### Compiling\nCompile using the [`catkin_tools`](https://catkin-tools.readthedocs.io/en/latest/) package via:\n\n```sh\nmkdir ws \u0026\u0026 cd ws \u0026\u0026 mkdir src \u0026\u0026 catkin init \u0026\u0026 cd src\ngit clone https://github.com/vectr-ucla/direct_lidar_inertial_odometry.git\ncatkin build\n```\n\n### Execution\nAfter compiling, source the workspace and execute via:\n\n```sh\nroslaunch direct_lidar_inertial_odometry dlio.launch \\\n  rviz:={true, false} \\\n  pointcloud_topic:=/robot/lidar \\\n  imu_topic:=/robot/imu\n```\n\nfor Ouster, Velodyne, Hesai, or Livox (`xfer_format: 0`) sensors, or \n\n```sh\nroslaunch direct_lidar_inertial_odometry dlio.launch \\\n  rviz:={true, false} \\\n  livox_topic:=/livox/lidar \\\n  imu_topic:=/robot/imu\n```\n\nfor Livox sensors (`xfer_format: 1`).\n\nBe sure to change the topic names to your corresponding topics. Alternatively, edit the launch file directly if desired. If successful, you should see the following output in your terminal:\n\u003cbr\u003e\n\u003cp align='center'\u003e\n    \u003cimg src=\"./doc/img/terminal.png\" alt=\"drawing\" width=\"480\"/\u003e\n\u003c/p\u003e\n\n### Services\nTo save DLIO's generated map into `.pcd` format, call the following service:\n\n```sh\nrosservice call /robot/dlio_map/save_pcd LEAF_SIZE SAVE_PATH\n```\n\n### Test Data\nFor your convenience, we provide test data [here](https://drive.proton.me/urls/Z83QCWKZWW#bMIqDh02AJZZ) (1.2GB, 1m 13s, Ouster OS1-32) of an aggressive motion to test our motion correction scheme, and [here](https://drive.proton.me/urls/7NQSK9DXJ0#gZ9yjGNrDBgG) (16.5GB, 4m 21s, Ouster OSDome) of a longer trajectory outside with lots of trees. Try these two datasets with both deskewing on and off!\n\n\u003cbr\u003e\n\u003cp align='center'\u003e\n    \u003cimg src=\"./doc/gif/aggressive.gif\" alt=\"drawing\" width=\"720\"/\u003e\n\u003c/p\u003e\n\n## Citation\nIf you found this work useful, please cite our manuscript:\n\n```bibtex\n@article{chen2022dlio,\n  title={Direct LiDAR-Inertial Odometry: Lightweight LIO with Continuous-Time Motion Correction},\n  author={Chen, Kenny and Nemiroff, Ryan and Lopez, Brett T},\n  journal={2023 IEEE International Conference on Robotics and Automation (ICRA)},\n  year={2023},\n  pages={3983-3989},\n  doi={10.1109/ICRA48891.2023.10160508}\n}\n```\n\n## Acknowledgements\n\nWe thank the authors of the [FastGICP](https://github.com/SMRT-AIST/fast_gicp) and [NanoFLANN](https://github.com/jlblancoc/nanoflann) open-source packages:\n\n- Kenji Koide, Masashi Yokozuka, Shuji Oishi, and Atsuhiko Banno, “Voxelized GICP for Fast and Accurate 3D Point Cloud Registration,” in _IEEE International Conference on Robotics and Automation (ICRA)_, IEEE, 2021, pp. 11 054–11 059.\n- Jose Luis Blanco and Pranjal Kumar Rai, “NanoFLANN: a C++ Header-Only Fork of FLANN, A Library for Nearest Neighbor (NN) with KD-Trees,” https://github.com/jlblancoc/nanoflann, 2014.\n\nWe would also like to thank Helene Levy and David Thorne for their help with data collection.\n\nMany thanks to [@shrijitsingh99](https://github.com/shrijitsingh99) for [porting DLIO to ROS2](https://github.com/vectr-ucla/direct_lidar_inertial_odometry/pull/16)!\n\n## License\nThis work is licensed under the terms of the MIT license.\n\n\u003cbr\u003e\n\u003cp align='center'\u003e\n    \u003cimg src=\"./doc/img/ucla.png\" alt=\"drawing\" width=\"720\"/\u003e\n\u003c/p\u003e\n\u003cp align='center'\u003e\n    \u003cimg src=\"./doc/img/trees.png\" alt=\"drawing\" width=\"720\"/\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvectr-ucla%2Fdirect_lidar_inertial_odometry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvectr-ucla%2Fdirect_lidar_inertial_odometry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvectr-ucla%2Fdirect_lidar_inertial_odometry/lists"}