3 ms·
The PCL is amazing for getting started with point cloud processing. There is an immense variety of hugely useful algorithms. Once you get to a certain point so
by porphyra 6y ago
The PCL is amazing for getting started with point cloud processing. There is an immense variety of hugely useful algorithms.
Once you get to a certain point some issues start becoming prominent:
* It is quite bloated and pulls in huge dependencies such as VTK
* Many algorithms are quite unoptimized, for example the NDT registration is rather slow and inaccurate. Some recent, leaner implementations of KD Trees, such as nanoflann and libNABO may also be faster than the FLANN implementation that PCL uses.
* PCL is an old library and has some evolutionary vestiges such as relying on Boost pointers rather than using shared pointers and unique pointers recommended by modern ISO C++
Meanwhile, for some applications, storing a point cloud as a "struct of vectors" can be faster than a "vector of structs" when using SIMD operations due to coalesced memory access. i.e.
struct PointCloud { Eigen::ArrayXdf x, y, z; };
may be better than
struct Point { float x, y, z, c; }; using PointCloud = std::vector<Point>;
Oh well, at least PCL doesn't try to roll its own linear algebra (like OpenCV lol).
- jkelleyrtp 6y agoGlad I’m not the only one - getting research projects replicated was insanely difficult with PCL interacting with external libs. I must’ve spent days getting cmake happy with getting a cross-compiled setup working properly. I’m seriously considering trying to move the important bits to rust, but it’s just such a large project.