hku-mars / STD

A 3D point cloud descriptor for place recognition
GNU General Public License v2.0
554 stars 68 forks source link

Single frame registration problem! #36

Open 987428377 opened 5 months ago

987428377 commented 5 months ago

Thank you very much for your excellent work! I am trying to use STC to match the current scanned point cloud with a part of the point cloud established by Fastlio, achieving rapid map repositioning.

I extracted a point cloud within a range of 50 meters around a center point on the map and used one frame of the point cloud from that center point for operation.

The first step is to perform a self set translation and rotation transformation on a frame of point cloud, and then downsample the scanned point cloud and some point clouds: down_sampling_voxel ( center_cloud, config_setting. dssize); down_sampling_voxel ( onescand_cloud dev, config_setting. dssize);

Step 2, I generated a local point cloud descriptor and added it to STDescs: std:: vectorstds_vec; std_manager ->GenerateSTDescs (temp_cloud, stds vec); std_manager ->AddSTDescs (stds vec);

Step 3: I will scan the point cloud to generate a descriptor std:: vectorstdsvec; std_manager ->GenerateSTDescs (onescanccloud dev, stds vec);

Finally, I attempted to use SearchLoop to obtain translation rotation and print stdmanager ->SearchLoop (stdsvec, search_result, loop_transform, loop_std_pair); std::cout << ANSI_COLOR_RED << "loop_Translation: " << loop_transform.first << std::endl; std::cout << ANSI_COLOR_RED << "loop_rotation: " << loop_transform.second << std::endl; std:: cout<<std:: endl;

I found that the translation is 0 0 0 0 and the rotation is the unit matrix.

More importantly, I performed translation and rotation transformations on the local point cloud and matched the results with itself, but still failed

How can I set parameters to increase the number of key points in a point cloud to improve registration accuracy? Or is my usage incorrect?

73fe58edaaf0cfcfeb860117787fa981 a630479e5d66e5d6cfac8f03a2da957c

Looking forward to your reply!

minghongss commented 3 months ago

我也碰到你类似的问题。我认为:1)在之前的issue中作者也提到过目前的std对于ds_size_参数十分敏感,没办法很好确保关键点提取的一致性;2)只用一帧当前帧的点云与你的局部地图进行匹配可能是太少了,可以尝试累积多帧或者让车辆动起来,实现local-to-local map的匹配,在开源的代码中也是用到了类似的做法。