Tuning Google Cartographer to work with a Velodyne HDL-32

asked 2017-07-31 23:23:31 -0500

M@t gravatar image

updated 2017-08-24 18:08:38 -0500

The Problem (TL;DR)

I can get Google Cartographer to run in 2D mode, but not 3D. I want to write a .launch and .lua file that will get Cartographer (in 3D mode) to smoothly run over my bagfile.

The Problem (full explanation)

I've got a Velodyne HDL-32 mounted on a Clearpath Jackal UGV, and I'm trying to get Google Cartographer (in 3D mode) working with it. I've collected a short bagfile with all the necessary sensor and TF data, and I can get Cartographer working in 2D mode (see image below).

Completed map from Cartographer (2D): image description

But I can't for the life of me get it working in 3D, mostly because I don't really understand how to tune the myriad of settings Cartographer offers. Unfortunately I haven't found any demo files that use a similar setup (which I could therefore copy). The closest thing is the 3d_demo_packpack.launch and backpack_3d.lua files. However, when I try a modified version of these files, this is what I get:

My best result from Cartographer (3D) image description

It looks like the raw data simply isn't being matched properly, and I suspect that fixing this may well be a case of tweaking the right parameters. However, none of the tinkering or tweaking I've done so far has produced anything better than what you see above. Everything under "options={}" in the .lua files is well documented here, and I think I've got those right, but the other parameters aren't documented at all and unfortunately I'm mostly guesstimating at what they do.

I'd like know how to write/configure a set of launch/lua files to get Cartographer working on my system. I suspect that my use case - one UGV and one 3D LiDAR - will be a relatively common as Cartographer grows in popularity. So hopefully any answers or advice here can help others with a similar setup. Thanks in advance for any help or advice anyone can provide. The details of my system are below.

System Information

Updates

Update 1

With some help from the developers, I've got a working configuration. The three key parameter changes for me were:

  1. TRAJECTORY_BUILDER_3D.scans_per_accumulation = 1 I don't really understand this parameter but it seems to ...
(more)
edit retag flag offensive close merge delete

Comments

Hey, I am very interested in your integration of Cartographer with the LiDAR data since I am trying to achieve something very similar. Would it be okay if we talked directly on e-mail since I have quite a few questions?

i_robot_flight gravatar imagei_robot_flight ( 2017-10-30 16:17:55 -0500 )edit

@i_robot_flight: you should ask your questions here (as a question!) so that the entire community can benefit.

jayess gravatar imagejayess ( 2017-10-30 16:33:08 -0500 )edit

All right, thanks!

i_robot_flight gravatar imagei_robot_flight ( 2017-10-31 09:06:20 -0500 )edit

I've had MUCH better results with the latest release of Cartographer (dunno why). So I suggest you start with that and modify the 3D backpack demo files. I'm trying to update all this but CloudCompare has stopped working on my computer so I can't work with point clouds ATM.

M@t gravatar imageM@t ( 2017-10-31 17:42:33 -0500 )edit

Hi, Matt, How did you implement zero velocity update for imu. I am having a similar problem where my laser readings keep changing the position without moving lidar. Thus, this is giving me multiple submaps in different orientations of the same location.

RoboRos gravatar imageRoboRos ( 2018-04-29 15:32:24 -0500 )edit
1

I can give you the code I used to implement a zero velocity update, but if you're having other problems you're better to post it as its own question.

M@t gravatar imageM@t ( 2018-04-30 20:21:51 -0500 )edit

@Mat that'd be great, if u can can share the code. Thanks.

RoboRos gravatar imageRoboRos ( 2018-05-01 03:17:13 -0500 )edit
1

@RoboRos here's a link: imu_processor. You'll need to install it in a catkin package, compile it and run it using rosrun <package_name> imu_processor.py Or just copy the code, it's not particularly well written but it works.

M@t gravatar imageM@t ( 2018-05-02 16:52:27 -0500 )edit