You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Thanks for letting me know this issue and providing nice benchmark results. When I wrote the code, I noticed that pcl::Registration creates kdtree inside, but I thought its construction cost would be negligible. I'll disable the kdtree creation with force_no_recompute.
Problem
I discovered that KDtree creation takes significantly more time when aligning with a big target cloud (with a map).
KDtree creation takes only 3ms for clouds with 17k points, but it takes 90ms for 370k points (my small 100x100 meters filtered map).
PCL creates kdtree inside "align" method, so it means that
ndt_cuda (P2D)
runs for 98ms instead of 8ms during first run.Moreover, PCL spends 20-30ms to calculate fitness score, regardless of the size of the target map. It is also not very good 😁.
Detailed benchmark results
Aligning big target cloud with kdtree creation
Aligning big target cloud without kdtree creation
Aligning default clouds with kdtree creation
Aligning default clouds without kdtree creation
Simple solution
My solution is to set empty kdtree as search method and enable
force_no_recompute
flag before calling "align".Like this:
You can easily repeat my experiment in fork, branch
test/disable-kdtree
. Command:Better solution
Better solution would be to replace PCL default kdtree with something more efficient 😊
The text was updated successfully, but these errors were encountered: