Outils pour utilisateurs

Outils du site


lib:pcl

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
lib:pcl [2019/02/12 16:27] – Création avec "Compilation sous Windows" sans cmake-gui rootlib:pcl [2019/09/20 13:12] (Version actuelle) – Ajout de Eigen comme dépendance root
Ligne 1: Ligne 1:
 ===Compilation sous Windows=== ===Compilation sous Windows===
-Il est nécessaire d'avoir [[lib:flann|Flann]], [[lib:qhull|Qhull]] et [[lib:boost|Boost]] de compilé en version 64 bits, Release et Debug.+Il est nécessaire d'avoir Eigen (librairie entête), [[lib:flann|Flann]], [[lib:qhull|Qhull]] et [[lib:boost|Boost]] de compilé en version 64 bits, Release et Debug.
  
 Il faut aussi les sources de Eigen mais uniquement pour les header (compilation inutile). Il faut aussi les sources de Eigen mais uniquement pour les header (compilation inutile).
  
 On utilise ''cmake-gui''. On utilise ''cmake-gui''.
 +
 +<code>
 +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
 +</code>
 +
 +===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$
 +<code cpp>
 +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);
 +</code>
 +
 +===Matrice de rotation pour aligner un axe vers un autre===
 +<code cpp>
 +Eigen::Quaternionf rotAxe;
 +rotAxe.setFromTwoVectors(Eigen::Vector3f(rotation.x_, rotation.y_, rotation.z_), Eigen::Vector3f(1, 0, 0));
 +transform.prerotate(rotAxe);
 +</code>
 +
 +===Rotation d'un nuage===
 +Sans les normales :
 +<code cpp>
 +pcl::transformPointCloud(*cloud_src, *retval, transform);
 +</code>
 +
 +Avec les normales :
 +<code cpp>
 +pcl::transformPointCloudWithNormals(*cloud_src, *retval, transform);
 +</code>
 +
 +===Recherche des normales===
 +<code cpp>
 +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);
 +</code>
 +
 +[[http://pointclouds.org/documentation/tutorials/normal_estimation.php|Estimating Surface Normals in a PointCloud]] Archive du 26/03/2019
lib/pcl.1549985243.txt.gz · Dernière modification : 2019/02/12 16:27 de root