{"id":13436099,"url":"https://github.com/vectr-ucla/direct_lidar_odometry","last_synced_at":"2025-05-12T09:55:13.965Z","repository":{"id":38882531,"uuid":"433620389","full_name":"vectr-ucla/direct_lidar_odometry","owner":"vectr-ucla","description":"[IEEE RA-L \u0026 ICRA'22] A lightweight and computationally-efficient frontend LiDAR odometry solution with consistent and accurate localization.","archived":false,"fork":false,"pushed_at":"2024-06-08T17:36:29.000Z","size":114859,"stargazers_count":918,"open_issues_count":9,"forks_count":197,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-03-18T12:40:07.982Z","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":"2021-11-30T23:35:38.000Z","updated_at":"2025-03-18T02:10:43.000Z","dependencies_parsed_at":"2024-04-10T10:14:06.569Z","dependency_job_id":"fff9561c-f4b6-42ee-be21-f556ec7a80db","html_url":"https://github.com/vectr-ucla/direct_lidar_odometry","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectr-ucla%2Fdirect_lidar_odometry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectr-ucla%2Fdirect_lidar_odometry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectr-ucla%2Fdirect_lidar_odometry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectr-ucla%2Fdirect_lidar_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_odometry/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253711991,"owners_count":21951678,"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":"2024-07-31T03:00:43.952Z","updated_at":"2025-05-12T09:55:13.949Z","avatar_url":"https://github.com/vectr-ucla.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# Direct LiDAR Odometry: \u003cbr\u003e Fast Localization with Dense Point Clouds\n\n#### [[IEEE RA-L](https://ieeexplore.ieee.org/document/9681177)] [[ArXiv](https://arxiv.org/abs/2110.00605)] [[Video](https://www.youtube.com/watch?v=APot6QP_wvg)] [[Code](https://github.com/vectr-ucla/direct_lidar_odometry)]\n\nDLO is a lightweight and computationally-efficient frontend LiDAR odometry solution with consistent and accurate localization. It features several algorithmic innovations that increase speed, accuracy, and robustness of pose estimation in perceptually-challenging environments and has been extensively tested on aerial and legged robots.\n\nThis work was part of NASA JPL Team CoSTAR's research and development efforts for the DARPA Subterranean Challenge, in which DLO was the primary state estimation component for our fleet of autonomous aerial vehicles.\n\n\u003cbr\u003e\n\u003cp align='center'\u003e\n    \u003cimg src=\"./doc/img/aquila.png\" alt=\"drawing\" width=\"320\"/\u003e\n    \u003cimg src=\"./doc/img/spot.png\" alt=\"drawing\" width=\"320\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./doc/gif/aquila.gif\" alt=\"drawing\" width=\"360\"/\u003e\n    \u003cimg src=\"./doc/gif/spot.gif\" alt=\"drawing\" width=\"360\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./doc/gif/dlo.gif\" alt=\"drawing\" width=\"720\"/\u003e\n\u003c/p\u003e\n\n## Instructions\nDLO requires an input point cloud of type `sensor_msgs::PointCloud2` with an optional IMU input of type `sensor_msgs::Imu`. Note that although IMU data is not required, it can be used for initial gravity alignment and will help with point cloud registration.\n\n### Dependencies\nOur system has been tested extensively on both Ubuntu 18.04 Bionic with ROS Melodic and Ubuntu 20.04 Focal with ROS Noetic, although other versions may work. The following configuration with required dependencies has been verified to be compatible:\n\n- Ubuntu 18.04 or 20.04\n- ROS Melodic or Noetic (`roscpp`, `std_msgs`, `sensor_msgs`, `geometry_msgs`, `pcl_ros`)\n- C++ 14\n- CMake \u003e= `3.16.3`\n- OpenMP \u003e= `4.5`\n- Point Cloud Library \u003e= `1.10.0`\n- Eigen \u003e= `3.3.7`\n\nInstalling the binaries from Aptitude should work though:\n```sh\nsudo apt install libomp-dev libpcl-dev libeigen3-dev \n```\n\n### Compiling\nCreate a catkin workspace, clone the `direct_lidar_odometry` repository into the `src` folder, and compile via the [`catkin_tools`](https://catkin-tools.readthedocs.io/en/latest/) package (or [`catkin_make`](http://wiki.ros.org/catkin/commands/catkin_make) if preferred):\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_odometry.git\ncatkin build\n```\n\n### Execution\nAfter sourcing the workspace, launch the DLO odometry and mapping ROS nodes via:\n\n```sh\nroslaunch direct_lidar_odometry dlo.launch \\\n  pointcloud_topic:=/robot/velodyne_points \\\n  imu_topic:=/robot/vn100/imu\n```\n\nMake sure to edit the `pointcloud_topic` and `imu_topic` input arguments with your specific topics. If an IMU is not being used, set the `dlo/imu` ROS param to `false` in `cfg/dlo.yaml`. However, if IMU data is available, please allow DLO to calibrate and gravity align for three seconds before moving. Note that the current implementation assumes that LiDAR and IMU coordinate frames coincide, so please make sure that the sensors are physically mounted near each other.\n\nIf successful, RViz will open and you will see similar terminal outputs to the following:\n\n\u003cp align='center'\u003e\n    \u003cimg src=\"./doc/img/imu_calibration.png\" alt=\"drawing\" width=\"400\"/\u003e\n    \u003cimg src=\"./doc/img/terminal_output.png\" alt=\"drawing\" width=\"400\"/\u003e\n\u003c/p\u003e\n\n### Services\nTo save DLO's generated map into `.pcd` format, call the following service:\n\n```sh\nrosservice call /robot/dlo_map/save_pcd LEAF_SIZE SAVE_PATH\n```\nTo save the trajectory in KITTI format, call the following service:\n\n```sh\nrosservice call /robot/dlo_odom/save_traj SAVE_PATH\n```\n\n### Test Data\nFor your convenience, we provide example test data [here](https://ucla.box.com/shared/static/ziojd3auzp0zzcgwb1ucau9anh69xwv9.bag) (9 minutes, ~4.2GB). To run, first launch DLO (with default point cloud and IMU topics) via:\n\n```sh\nroslaunch direct_lidar_odometry dlo.launch\n```\n\nIn a separate terminal session, play back the downloaded bag:\n\n```sh\nrosbag play dlo_test.bag\n```\n\n\u003cp align='center'\u003e\n    \u003cimg src=\"./doc/img/test_map.png\" 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{chen2022direct,\n  author={Chen, Kenny and Lopez, Brett T. and Agha-mohammadi, Ali-akbar and Mehta, Ankur},\n  journal={IEEE Robotics and Automation Letters}, \n  title={Direct LiDAR Odometry: Fast Localization With Dense Point Clouds}, \n  year={2022},\n  volume={7},\n  number={2},\n  pages={2000-2007},\n  doi={10.1109/LRA.2022.3142739}\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\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/mc_topdown.png\" alt=\"drawing\" height=\"220\"/\u003e\n    \u003cimg src=\"./doc/img/mc_entrance.png\" alt=\"drawing\" height=\"220\"/\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./doc/gif/kentucky.gif\" alt=\"drawing\" height=\"200\"/\u003e\n    \u003cimg src=\"./doc/gif/losangeles.gif\" alt=\"drawing\" height=\"200\"/\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvectr-ucla%2Fdirect_lidar_odometry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvectr-ucla%2Fdirect_lidar_odometry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvectr-ucla%2Fdirect_lidar_odometry/lists"}