Seeking advice for merging/deskewing lidar scans from multiple 2-d lidars

Posted by Jeonghwan Park on
URL: http://official-rtab-map-forum.206.s1.nabble.com/Seeking-advice-for-merging-deskewing-lidar-scans-from-multiple-2-d-lidars-tp10767.html

Dear Mathieu,
Always mighty thanks for continued development and support for RTABMap! Your work is really outstanding in lots of ways.

I am seeking advice on how to utilize multiple 2-d lidars for odometry and mapping. Obviously the scans need to be undistorted by using motion guess(from constant motion model or something) or wheel odometer integration results, and I see that you've already implemented this for a single 2-d laser scanner.

However my robot configuration includes two 2-d lidars mounted at diagonal corners of my robot body. Currently I'm utilizing the following approach:
1. slice the laser scans since the field of view is only 270 degrees, as the quarter of the scans are blocked by robot body
2. merge the scans into a single message using ROS packages such as https://wiki.ros.org/ira_laser_tools
3. feed the merged scan into RTABMap

But this approach forbids me to use the undistortion process due to the nature of ROS laserscan messages, as the message assumes a single lidar and only stores angular increment and range values. When the scans are merged, they are combined only spatially to fit the ROS laserscan message schema and the combined points are no longer in time-increasing order(because a point may be from scanner 1 or scanner 2, and they are almost certainly obtained at different time points, but this information is lost when it is fit into the laserscan message). Performing standard undistortion procedure on this data results in incorrectly undistorted scans.

I've thought of two approaches to untangle this mess:
1. Before the laser scans are merged or fed into RTABMap, undistort them first using wheel odometer intergration results and merge them, and then feed the result into RTABMap. This advantage of this approach is that I do not need to heavily modify RTABMap's odometry code.
2. Modify RTABMap's odometry code to take in multiple laser scans and merge/undistort them inside the odometry code(by first converting them to pointcloud messages and so on). The disadvantage is that the resulting merged/undistorted scan needs to be forwarded to the mapper(rtabmap_slam), and I think that will complicate the code too much.

Do you have any experience/ideas/recommendations on how to utilize multiple 2-d laser scanners with appropriate undistortion methods? I'm looking forward to hearing your opinions on this problem. Any kind of advice will be appreciated!

Best regards,
Jeonghwan Park