Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/url-kaist/AlterGround-LeGO-LOAM
The page for PaGO-LOAM: Robust Ground-Optimized LiDAR Odometry
https://github.com/url-kaist/AlterGround-LeGO-LOAM
Last synced: 4 months ago
JSON representation
The page for PaGO-LOAM: Robust Ground-Optimized LiDAR Odometry
- Host: GitHub
- URL: https://github.com/url-kaist/AlterGround-LeGO-LOAM
- Owner: url-kaist
- License: gpl-3.0
- Created: 2022-03-28T16:14:37.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2022-09-02T07:10:55.000Z (almost 2 years ago)
- Last Synced: 2024-01-16T05:33:38.129Z (5 months ago)
- Language: C++
- Size: 375 KB
- Stars: 144
- Watchers: 7
- Forks: 19
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: License
Lists
- Awesome-Autonomous-Driving - PaGO-LOAM - LOAM的LiDAR测距框架,在这个框架中,测试地面分割算法是否有助于提取特征和改善SLAM性能是很容易和直接的。 (5 Localization and SLAM / 3.4 High Performance Inference)
README
# PaGO-LOAM
**A LiDAR odometry framework that can easily test the ground-segmentation algorithms.**
The page for ***PaGO-LOAM: Robust Ground-Optimized LiDAR Odometry***, a LiDAR odometry framework based on *LeGO-LOAM*, in which it is easy and straightforward to test whether ground segmentation algorithms help extract features and improve SLAM performance. By leveraging the SOTA ground segmentation method ***Patchwork***, the system takes in the raw point cloud and ground point cloud for estimating the odometry.
![overview](PaGO-LOAM/PaGO-LOAM/launch/overview.jpeg)
## Requirements
- [ROS](http://wiki.ros.org/ROS/Installation) (tested with melodic)
- [gtsam](https://github.com/borglab/gtsam/releases) (Georgia Tech Smoothing and Mapping library, 4.0.0-alpha2)
```cpp
wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install
```
- If you want to test the ground segmentation method [Patchwork](https://github.com/LimHyungTae/patchwork) like us,
```
sudo apt-get install ros-melodic-jsk-recognition
sudo apt-get install ros-melodic-jsk-common-msgs
sudo apt-get install ros-melodic-jsk-rviz-plugins
```
## Build
1. In utility.h, there are 5 parameters you could set
```
extern const string pointCloudTopic = "/benchmark/ground_estimate";
extern const bool alterGround = true;
extern const bool loopClosureEnableFlag = false;
std::string RESULT_PATH ="/data/bagfiles/KITTI_BAG/pago_pose_result.txt";
std::string TIME_PATH ="/data/bagfiles/KITTI_BAG/pago_pose_time.txt";
```- pointCloudTopic should have the format as (Refer to cloud_msgs/ground_estimate.msg):
```
std_msgs/Header header
sensor_msgs/PointCloud2 curr
sensor_msgs/PointCloud2 ground
```
‘*curr*‘ for raw point cloud, ‘*ground*‘ for ground segmented point cloud.
- *alterGround* is for deciding whether to use another ground segmentation method such as ***Patchwork*** or one from baseline LeGO-LOAM.
- *loopClosureEnableFlag* for loop-closure.
- *RESULT_PATH* and *TIME_PATH* for the odometry estimation result.
2. Compile```cpp
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/url-kaist/AlterGround-LeGO-LOAM
cd .. && catkin build pago_loam
```## Warning
**Our codes are modified to use LiDAR points from KITTI dataset that were de-skewed, so you should do de-skewing first or restore/change the de-skewing/KITTI-adaptive code to use other dataset**(i.e, codes are changed as follows)
1. utility.h
```cpp
extern const string pointCloudTopic = "/kitti/velo/pointcloud"; <- you should check your own bag file topic
//param for vel-64
extern const int N_SCAN = 64;
extern const int Horizon_SCAN = 1800;
extern const float ang_res_x = 0.2;
extern const float ang_res_y = 0.427;
extern const float ang_bottom = 24.9;
extern const int groundScanInd = 50;
```2. featureAssociation.cpp
```cpp
float s 10 * (pi->intensity - int(pi->intensity)); -> float s = 1;// to delete all the code that corrects point cloud distortion
TransformToEnd(&cornerPointsLessSharp->points[i], &cornerPointsLessSharp->points[i]); -> removed
TransformToEnd(&surfPointsLessFlat->points[i], &surfPointsLessFlat->points[i]); -> removed
```
We refer to the modification here: https://github.com/Mitchell-Lee-93/kitti-lego-loam## KITTI Example
1. Download [KITTI Odometry](http://www.cvlibs.net/datasets/kitti/eval_odometry.php) dataset
2. Convert Lidar bin files to rosbag files using ****[lidar2rosbag_KITTI](https://github.com/AbnerCSZ/lidar2rosbag_KITTI)**** (If you are in urobot students, just use pre-made bagfiles!)
3. Run the ground segmentation algorithm. (e.g. *Patchwork*)```cpp
roslaunch patchwork pub_for_legoloam.launch
```4. Run the ***PaGO-LOAM*** and KITTI bagfile
```cpp
roslaunch pago_loam run.launch
rosbag play /${Your dataset}/${kitti_bagfile}.bag --clock
```## Odometry Estimation
Using [evo package](https://github.com/MichaelGrupp/evo), you could estimate the pose errors e.g:
1. *LeGO-LOAM* fundamentally doesn’t give the first 2\~3 poses because it doesn’t estimate the odometry poses when initializes. **So please compare the # of difference between ground-truth and estimated odometry, and remove the first 2~3 poses of ground-truth.**
```cpp
evo_ape kitti KITTI_00_gt.txt pago_pose_result.txt -va --plot --plot_mode xz --save_results results/KITTI_pago.zip --align
```2. Or, by converting the result to **TUM** format using the attached file *kitti_to_tum.ipnyb*, you can run the *evo* **without removing the poses**.
```cpp
evo_ape tum KITTI_00_gt.txt pago_pose_result.txt -va --plot --plot_mode xz --save_results results/KITTI_pago.zip --align
```![02_result](PaGO-LOAM/PaGO-LOAM/launch/02_result.png)
The result on Seq.02 of the KITTI dataset