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