ethz-asl / segmap

A map representation based on 3D segments
BSD 3-Clause "New" or "Revised" License
1.06k stars 394 forks source link

Integrate SegMatch and LOAM #49

Open vkee opened 7 years ago

vkee commented 7 years ago

Hi,

I think a great feature to add would be integrating LOAM as an alternative to the current ICP-based LiDAR odometry for SegMatch SLAM. For those who are not familiar with LOAM (Lidar Odometry and Mapping in Real-time https://www.researchgate.net/profile/Ji_Zhang50/publication/282704722_LOAM_Lidar_Odometry_and_Mapping_in_Real-time/links/56193e3008ae6d173086ed6b.pdf), LOAM is a very low drift LiDAR odometry method that has achieved very impressive results on the KITTI dataset (currently 2nd - http://www.cvlibs.net/datasets/kitti/eval_odometry.php). However, it does not incorporate loop closures to eliminate drift over time.

I think that integrating LOAM could improve SegMatch SLAM's performance as the ICP LiDAR odometry introduces significant drift as noted in the parameters file (https://github.com/ethz-asl/segmatch/blob/master/laser_mapper/launch/kitti/kitti_loop_closure.yaml#L117) and verified by my own experiments. I am planning to work on this over the next week or so.

Any thoughts / suggestions?

Thanks!

rdube commented 7 years ago

Very good idea! I'm looking forward to see results on this! Thanks @vkee ! :)

fyi the ICP LiDAR drift could most likely be reduced by adjusting the parametrization of the input filters and of ICP. We did not worry about this as we anyway wanted some drift to show that we can actually close loops.

jackiechenxd commented 6 years ago

@vkee hi vkee, I am also planning to do the exact the same thing. LOAM is very impressive in current pipeline in terms of accuracy, so maybe it does not need to have loop closure even in a large-scale environment. But it would definitely helpful if loop closure would be added in.

vkee commented 6 years ago

@XuDongTL I've noticed that the small drift does build up over longer sequences. Additionally, LOAM does not localize using the existing map that it has generated.

One easy way to integrate them would be to have SegMatch subscribe to the tf output from LOAM.

M1234Thomas commented 6 years ago

Hello @vkee, Have you tried to integrate SegMatch with LOAM already? I was also thinking to integrate SegMatch with my algorithm. Could you please help me about the neccessary changes.

rdube commented 6 years ago

@M1234Thomas fyi there is also issue #48. In the short-mid term we would like to remove the dependency of segmatch and segmatch_ros on laser_slam. That should make it easier to integrate your LiDAR odometry - SLAM back-end algorithms.

M1234Thomas commented 6 years ago

Thank you so much for your response. I have taken a look at issue #48 and I am working based on that.

YoshuaNava commented 6 years ago

Hey, I'm a master's student from KTH, where I'm working on integrating loop closure methods with LOAM / V-LOAM.

I will try Segmatch at some point. Have you made any progress on it? If so, how was your experience?

Thank you in advance

rdube commented 6 years ago

Hi @YoshuaNava great to hear from you again! :-) I have not yet made any progress on this and am working on open-sourcing the implementation of our latest incremental localization paper: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8283725

That will hopefully happen within the next month. Cheers!

DriftingTimmy commented 6 years ago

@YoshuaNava Can I have your e-mail so we can change some thoughts about this, cause I m working on making the mapping and loop closing with segmatch simultaneously.

YoshuaNava commented 6 years ago

@DriftingTimmy For sure! It's yoshua.nava.chocron@gmail.com

DriftingTimmy commented 6 years ago

@rdube Right now if I want to separate the segment, classifier and segment matching part of the segmatch algorithm, what dependencies do I need to use? Only laser_slam and libpointmatcher? The back end part I want to use G2O to replace GTSAM. And the real-time tf messages will be provided by the LOAM algorithm.

rdube commented 6 years ago

@DriftingTimmy yes but laser_slam includes GTSAM. Removing the dependency to laser_slam is on the mid-term bucket list ;-)

rickeshtn commented 6 years ago

Hi, recently I came across the NDT mapping in Autoware. I have tried the both LOAM and the Stencil (LOAM's later improved version). I have realized the issue with drift is quite significant with ICP based methods. I am planning to work doing the same as you are trying with NDT. The pros of NDT mapping is it quite good for large scale mapping with minimal drift but with loop closure missing it has issues with Z drifts. The no of tweaking parameters are also less. I was wondering if I could take the segmatch loop closure and integrate with NDT mapping. any thoughts on the same? The loop closure of segmatch is really good. Please share your thoughts on the same.

rdube commented 6 years ago

@rickeshtn thanks for your comment! I am not familiar with NDT mapping but given that it is a pose-graph approach it should be feasible to include loop closure constraints. Thanks for keeping us updated about your progress! I'm trying to open source our latest version and remove the dependency to laser_slam asap.

DriftingTimmy commented 6 years ago

@rickeshtn I've tried NDT method to build a map on a large scale environment and the result is ok with a little drift. But the corresponding problem is that this method takes too much time than LOAM which I want to integer with segmatch. And can u give me a reference to the Stencil method u mentioned here? Thx very much. Further questions will be discussed here or u can send me an e-mail. My email address is lxneverfail@gmail.com.

YoshuaNava commented 6 years ago

Hey @rickeshtn @DriftingTimmy, There is a very nice algorithm from Kenji Koide that employs NDT, and performs loop closure by comparing individual (keyframe) clouds within a certain distance from each other. To correct drift he adds a constraint on floor planarity, and GPS measurements to the pose graph: https://github.com/koide3/hdl_graph_slam It uses an optimized version of NDT and GICP: https://github.com/koide3/ndt_omp

Paper

It might be possible to combine this with SegMatch. The algorithm (hdl_graph_slam) works well in small areas, but as their current loop closure method is local, it tends to fail in big areas (for example, those of KITTI).

(Hope this helps. Sorry for the spam)

DriftingTimmy commented 6 years ago

@YoshuaNava Thanks for your proposal ~ One of my fellow use an approximate framework like the HDL_GRAPH do, and the result is ok~ But this algorithm is also run offline right? I think segmatch can create the odometry and the loop in real-time, we can try NDT to help modify the front-end to correct the drift.

rickeshtn commented 6 years ago

Thank you @DriftingTimmy I understand. I faced the same issue in some 3 months back autoware. The recent update on NDT is really fast. It doesn't take as much time as before. Probably you should check it out, and also there is a CUDA implementation now. It really speeds up the process. I also tried multi lidar fusion with NDT but had issues with NDT crashing after awhile. Still working on it.

rickeshtn commented 6 years ago

@YoshuaNava Thank you. Will take a look at it. I haven't worked on it. @DriftingTimmy it will be great to exchange some ideas over mail I shall drop you a mail in awhile. Sorry for the delay.

DriftingTimmy commented 6 years ago

@rickeshtn Thx a lot, I haven't tried the CUDA edition yet, but the corruption of the NDT algorithm may be that small amount of the point cloud may disable the NDT algorithm. Maybe u can try to enlarge the voxel size of NDT.

2amour commented 6 years ago

@vkee hi,vkee. Have you tried to integrate LOAM with SegMatch successfully? I'm going to do the same thing but wondering it is feasible to do this? Any suggestions? Thanks in advance!

chennuo0125-HIT commented 6 years ago

How about moving GTSAM dependency out from lidar_slam going? @rdube

clmpng commented 5 years ago

Hey, I'm a master's student from KTH, where I'm working on integrating loop closure methods with LOAM / V-LOAM.

I will try Segmatch at some point. Have you made any progress on it? If so, how was your experience?

Thank you in advance

Hey @YoshuaNava Did you try to integrate loop closure with LOAM/V-LOAM?

dtwjx1994 commented 5 years ago

intergrating loop closure in loam is not a easy way u can do.Because LOAM is a very complete system including odometry and optimization(mapping) ,if u want to do with LOAM,modify the mapping.cpp is significant,because mapping is the key to improve the SLAM performance.

LiShuaixin commented 4 years ago

Hi @vkee, I used the easiest way to integrate loam with segmap by subscribing the tf advertised by loam laser mapping node and with some minor changes in laser_slam_worker.cpp. It seems that the system cannot achieve real-time performance. Only when I set the frequency of rosbay as 0.5Hz, the result looked good.

pxc2017 commented 4 years ago

@vkee @rdube @YoshuaNava sry to bother you,i really confused about how to install it.Could you please tell me how to install segmatch but not segmap?i dont have a nivid GPU,i find there no segmatch branch,and i install it forked by others years ago,but compile failed with laser_slam.someone tell to choose fix/pointers branch,but i cannot find it.plz help me,thanks a lot