From 3ab1a73db1404ae4b14b45f55bb8fb064c6574dc Mon Sep 17 00:00:00 2001 From: Eduardo Perdices Date: Tue, 10 Mar 2020 16:33:39 +0100 Subject: [PATCH] Update README --- LeGO-LOAM/launch/jackal-label.jpg | Bin 32355 -> 0 bytes README.md | 123 ++++++++++++------------------ 2 files changed, 48 insertions(+), 75 deletions(-) delete mode 100644 LeGO-LOAM/launch/jackal-label.jpg diff --git a/LeGO-LOAM/launch/jackal-label.jpg b/LeGO-LOAM/launch/jackal-label.jpg deleted file mode 100644 index d020b1b15a0095bcd55b2ee6218227dd3ffd56b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32355 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 diff --git a/README.md b/README.md index f61c68d2..751d0250 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,13 @@ # LeGO-LOAM-SR -LeGO-LOAM migrated to ROS2 +This code is a fork from [LeGO-LOAM-BOR](https://github.com/facontidavide/LeGO-LOAM-BOR) to migrate [LeGO-LOAM](https://github.com/RobustFieldAutonomyLab/LeGO-LOAM) algorithm to ROS2. -## 1. Run code with Rosbag +This code does not modify and/or improve the original [LeGO-LOAM](https://github.com/RobustFieldAutonomyLab/LeGO-LOAM) algorithm. -Shell 1: +## 1. About the original LeGO-LOAM -``` -source /opt/ros/melodic/setup.bash -roscore & -rosbag play *.bag --clock --topic /velodyne_points -``` - -Shell 2: -``` -source /opt/ros/melodic/setup.bash -source /opt/ros/dashing/setup.bash -export ROS_MASTER_URI=http://localhost:11311 -ros2 run ros1_bridge dynamic_bridge -``` - -Shell 3: -``` -source /opt/ros/dashing/setup.bash -source ~/dev_ws/install/setup.bash -ros2 launch lego_loam_sr run.launch.py -``` - -# LeGO-LOAM-BOR - -This is a fork of the original [LeGO-LOAM](https://github.com/RobustFieldAutonomyLab/LeGO-LOAM). - -This is a "friendly fork", in other words, we will be happy to work with the original authors to merge -these improvements with the original LeGO-LOAM... if they want to! - -The original author deserves all the credits, we just use good software engineering practices to -make the code more readable and efficient. - -The purpose of this fork is: - -- To improve the quality of the code, making it more readable, consistent and easier to understand and modify. -- To remove hard-coded values and use proper configuration files to describe the hardware. -- To improve performance, in terms of amount of CPU used to calculate the same result. -- To convert a multi-process application into a single-process / multi-threading one; this makes the algorithm - more deterministic and slightly faster. -- To make it easier and faster to work with rosbags: processing a rosbag should be done at maximum - speed allowed by the CPU and in a deterministic way (usual speed improvement in the order of 5X-10X). -- As a consequence of the previous point, creating unit and regression tests will be easier. - -The purpose of this fork (for the time being) is **not** to modify and/or improve the original algorithm. - -Please do not submit to this repository any issue related to the algorithm, since we are focusing on the -software implementation. - -# About the original LeGO-LOAM -This repository contains code for a lightweight and ground optimized lidar odometry and mapping (LeGO-LOAM) system for ROS compatible UGVs. -The system takes in point cloud from a Velodyne VLP-16 Lidar (palced horizontal) and optional IMU data as inputs. -It outputs 6D pose estimation in real-time. A demonstration of the system can be found here -> https://www.youtube.com/watch?v=O3tz_ftHV48 +[LeGO-LOAM](https://github.com/RobustFieldAutonomyLab/LeGO-LOAM) contains code for a lightweight and ground optimized lidar odometry and mapping (LeGO-LOAM) system for ROS compatible UGVs. +The system takes in point cloud from a Velodyne VLP-16 Lidar (palced horizontal) and it outputs 6D pose estimation in real-time. A demonstration of the system can be found here -> https://www.youtube.com/watch?v=O3tz_ftHV48 @@ -64,9 +15,9 @@ It outputs 6D pose estimation in real-time. A demonstration of the system can be drawing

-## Dependency +## 2. Dependencies -- [ROS](http://wiki.ros.org/ROS/Installation) (tested with indigo and kinetic) +- [ROS2](https://index.ros.org/doc/ros2/Installation/Dashing/) (tested with dashing) - [gtsam](https://github.com/borglab/gtsam/releases) (Georgia Tech Smoothing and Mapping library, 4.0.0-alpha2) ``` wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip @@ -77,24 +28,20 @@ It outputs 6D pose estimation in real-time. A demonstration of the system can be sudo make install ``` -## Compile +## 3. Compile You can use the following commands to download and compile the package. ``` -cd ~/catkin_ws/src -git clone https://github.com/facontidavide/LeGO-LOAM-BOR.git +cd ~/dev_ws/src +git clone https://github.com/eperdices/LeGO-LOAM-SR.git cd .. -catkin_make +colcon build ``` -## The system +## 4. The system -LeGO-LOAM is speficifally optimized for a horizontally placed lidar on a ground vehicle. It assumes there is always a ground plane in the scan. The UGV we are using is Clearpath Jackal. - -

- drawing -

+LeGO-LOAM is speficifally optimized for a horizontally placed lidar on a ground vehicle. It assumes there is always a ground plane in the scan. The package performs segmentation before feature extraction. @@ -108,7 +55,7 @@ Lidar odometry performs two-step Levenberg Marquardt optimization to get 6D tran drawing

-## New sensor and configuration +## 5. New sensor and configuration To customize the behavior of the algorithm or to use a lidar different from VLP-16, edit the file **config/loam_config.yaml**. @@ -117,22 +64,48 @@ If you want to use our algorithm with Velodyne VLP-32c or HDL-64e, you need to w If the point cloud is not projected properly, you will lose many points and performance. -**The IMU has been remove from the original code.** Deal with it. +**The IMU has been remove from the original LeGO-LOAM code.** -## Run the package +## 6. Run the package -You may process a rosbag using the following command: +System can be started using the following command: ``` -roslaunch lego_loam_sr run.launch rosbag:=/path/to/your/rosbag lidar_topic:=/velodyne_points +ros2 launch lego_loam_sr run.launch.py ``` -Change the parameters `rosbag`, `lidar_topic` as needed. +Some sample bags can be downloaded from [here](https://github.com/RobustFieldAutonomyLab/jackal_dataset_20170608). +### 6.1 Run ROS1 rosbag -Some sample bags can be downloaded from [here](https://github.com/RobustFieldAutonomyLab/jackal_dataset_20170608). +To use rosbags from ROS1, you need to use a [bridge](https://github.com/ros2/ros1_bridge) between ROS1 and ROS2. + +Play rosbag using ROS1: + +``` +source /opt/ros/melodic/setup.bash +roscore & +rosbag play *.bag --clock --topic /velodyne_points +``` + +Create the bridge in another terminal: + +``` +source /opt/ros/melodic/setup.bash +source /opt/ros/dashing/setup.bash +export ROS_MASTER_URI=http://localhost:11311 +ros2 run ros1_bridge dynamic_bridge +``` + +Finally, run ROS2 code: + +``` +source /opt/ros/dashing/setup.bash +source ~/dev_ws/install/setup.bash +ros2 launch lego_loam_sr run.launch.py +``` -## New data-set +### 6.2 New data-set This dataset, [Stevens data-set](https://github.com/TixiaoShan/Stevens-VLP16-Dataset), is captured using a Velodyne VLP-16, which is mounted on an UGV - Clearpath Jackal, on Stevens Institute of Technology campus. The VLP-16 rotation rate is set to 10Hz. This data-set features over 20K scans and many loop-closures. @@ -144,7 +117,7 @@ The VLP-16 rotation rate is set to 10Hz. This data-set features over 20K scans a drawing

-## Cite *LeGO-LOAM* +## 7. Cite *LeGO-LOAM* Thank you for citing our *LeGO-LOAM* paper if you use any of this code: ```