Hi Mathieu,
I was taking a look at your code where you segment the incoming point cloud into two clusters (ground and obstacles).
In the file "util3d_mapping.hpp" from segmentObstaclesFromGround() you call normalFiltering() from util3d_filtering.cpp and at line 548 you create a pcl::NormalEstimation<> estimator.
If you take a look at the bottom of this
page, you see that pcl also offer a parallel variant called NormalEstimationOMP that gives a significant speed-up in computation. I tried it with your code and it seems to me that "point_cloud_xyz" nodelet now works faster.
Another small note: I saw that in "util3d_filtering.cpp" at lines 579 and 640 you declare a Vector3f called "n" that you seem to not use in any other part of the enclosing function, so I think you can safely remove both.
Have a nice day,
Guido
~Guido