Outils pour utilisateurs

Outils du site


lib:pcl

Compilation sous Windows

Il est nécessaire d'avoir Eigen (librairie entête), Flann, Qhull et Boost de compilé en version 64 bits, Release et Debug.

Il faut aussi les sources de Eigen mais uniquement pour les header (compilation inutile).

On utilise cmake-gui.

Télécharger https://github.com/PointCloudLibrary/pcl et prendre la dernière version (pcl-1.9.1)
Where is my source code: ...\Sources\flann-1.7.1-src
Where to build binaries: ...\Sources\flann-1.7.1-src/build
Configure
Visual Studio 14 2015
X64
Générer
Modifier
EIGEN_INCLUDE_DIR ...\Sources\eigen
PCL_BUILD_WITH_FLANN_DYNAMIC_LINKING_WIN32 à true
PCL_BUILD_WITH_QHULL_DYNAMIC_LINKING_WIN32 à true
Configurer le dossier d’installation à Program Files/pcl
Configure
FLANN_INCLUDE_DIR C:\Program Files\flann.release\include
FLANN_LIBRARY C:\Program Files\flann.release\lib\flann.lib;C:\Program Files\flann.release\lib\flann_cpp_s.lib
FLANN_LIBRARY_DEBUG C:\Program Files\flann.debug\lib\flann.lib;C:\Program Files\flann.debug\lib\flann_cpp_s.lib
Configure
WITH_OPENNI2 à false
WITH_VTK à false
WITH_QT à false
WITH_PCAP à false
WITH_LIBUSB à false
QHULL_LIBRARY C:/Program Files/qhull.release/lib/qhull.lib
QHULL_LIBRARY_DEBUG C:/Program Files/qhull.debug/lib/qhull.lib
CUDA_ARCH_BIN 3.0 5.2 7.5 garder le dernier, une version intermédiaire et le tout premier. Ca permet d’économiser un gros temps de compilation. (avant : 3.0 3.5 5.0 5.2 5.3 6.0 6.1 7.0 7.2 7.5)
Boost_INCLUDE_DIR ...\Sources\boost\boost.install\include\boost-1_69
Boost_*_LIBRARY_RELEASE et Boost_*_LIBRARY_DEBUG ...\Sources\boost\build.install\lib\*.lib Les .lib contenant -sgd dont la version de debug.
BUILD_CUDA à true
BUILD_GPU à true
CMAKE_CXX_FLAGS : ajouter "/D_WIN32_WINNT=0x0A00" pour une compatibilité Windows 10 avec Boost.

Ajouter manuellement :
QHULL_LIBRARIES C:\Program Files\qhull.release\lib\qhull.lib
QHULL_LIBRARIES_DEBUG C:\Program Files\qhull.debug\lib\qhull.lib
QHULL_INCLUDE_DIRS C:\Program Files\qhull.release\include


Configure
Boost_*_LIBRARY_RELEASE et Boost_*_LIBRARY_DEBUG
BUILD_cuda_io à true
BUILD_cuda_apps à true
Configure
Boost_*_LIBRARY_RELEASE et Boost_*_LIBRARY_DEBUG

Ouvrir ...\Sources\pcl\build\PCL.sln
Pour tester compiler pcl_common, pcl_io_ply, pcl_io, pcl_kdtree
Compiler le projet ALL_BUILD
Sélectionner Debug x64

Nouveau projet Visual Studio

Ajouter les includes :

C:\Program Files (x86)\PCL\include\pcl-1.9
...\Sources\eigen
...\Sources\boost\build.install\include\boost-1_69

Ajouter les .lib :

...\Sources\boost\build.install\lib

Appliquer des translations et rotations successives

Quand on veut appliquer des modifications successives, il faut inverser les multiplications de matrices : $M = R_2 * T_1$

Eigen::Affine3f transform = Eigen::Affine3f::Identity();
transform.pretranslate(Eigen::Vector3f(-parametres.GetPoint0().x_, -parametres.GetPoint0().y_, -parametres.GetPoint0().z_));
transform.prerotate(Eigen::AngleAxisf(-atan2f(diffy, diffx), Eigen::Vector3f::UnitZ()));
pcl::transformPointCloud(*cloud_src, *retval, transform);

Matrice de rotation pour aligner un axe vers un autre

Eigen::Quaternionf rotAxe;
rotAxe.setFromTwoVectors(Eigen::Vector3f(rotation.x_, rotation.y_, rotation.z_), Eigen::Vector3f(1, 0, 0));
transform.prerotate(rotAxe);

Rotation d'un nuage

Sans les normales :

pcl::transformPointCloud(*cloud_src, *retval, transform);

Avec les normales :

pcl::transformPointCloudWithNormals(*cloud_src, *retval, transform);

Recherche des normales

pcl::PointCloud<TYPE_POINT_PCL>::Ptr cloud_src(XXXXXXX);
pcl::PointCloud<TYPE_POINT_PCL>::Ptr retval(new pcl::PointCloud<TYPE_POINT_PCL>);
pcl::search::KdTree<TYPE_POINT_PCL>::Ptr tree(new pcl::search::KdTree<TYPE_POINT_PCL>());
pcl::NormalEstimation<TYPE_POINT_PCL, TYPE_POINT_PCL> ne;
ne.setSearchMethod(tree);
// Pour l'orientation des normales.
ne.setViewPoint(0, 0, 0);
ne.setInputCloud(cloud_src);
// L'un ou l'autre
ne.setKSearch(nombre_de_voisins);
ne.setRadiusSearch(distance_des_voisins);
ne.compute(*retval);

Estimating Surface Normals in a PointCloud Archive du 26/03/2019

lib/pcl.txt · Dernière modification : 2019/09/20 13:12 de root