├── .gitignore ├── .gitmodules ├── README.md ├── continuous_integration ├── logparser_rules └── prepare-jenkins.sh └── pcl_catkin ├── CMakeLists.txt ├── cmake ├── pcl-extras.cmake.in └── pcl_find_sse.cmake ├── package.xml └── src └── dependency_tracker.cc /.gitignore: -------------------------------------------------------------------------------- 1 | CMakeCache.txt 2 | CMakeFiles 3 | CMakeScripts 4 | Makefile 5 | cmake_install.cmake 6 | install_manifest.txt 7 | CTestTestfile.cmake 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "perception_pcl"] 2 | path = perception_pcl 3 | url = https://github.com/ethz-asl/perception_pcl.git 4 | [submodule "geometry2"] 5 | path = geometry2 6 | url = https://github.com/ethz-asl/geometry2.git 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # pcl_catkin 2 | Catkinized version of the latest version (1.10) of the Point Cloud Library (PCL) (http://pointclouds.org/). 3 | 4 | To get (and build) the ROS packages that depend on PCL you should also use 5 | 6 | ``` 7 | git submodule update --init --recursive 8 | ``` 9 | 10 | such that you have them matching this PCL version. 11 | 12 | ## Install dependency 13 | ``` 14 | sudo apt install libbullet-dev 15 | ``` 16 | -------------------------------------------------------------------------------- /continuous_integration/logparser_rules: -------------------------------------------------------------------------------- 1 | # Some classes end with Error e.g. MarginalizationError, where the scoping :: helps to disambiguate. 2 | ok /[Ee]rror::/ 3 | # Failures to init Gui 4 | ok /libdc1394/ 5 | # make clean errors are also ok 6 | ok /(ignored)/ 7 | # Errors in STXXL are ok 8 | ok /STXXL-ERRMSG/ 9 | 10 | # ignore doxygen warnings 11 | ok /is not documented/ 12 | 13 | # ICP error 14 | ok /min error: / 15 | ok /max error: / 16 | 17 | # Layer evaluation error 18 | ok /mean squared error: / 19 | 20 | # Build output: 21 | error /error: / 22 | 23 | # glog check failures in tests: 24 | error /Check failure stack trace:/ 25 | 26 | # CMake errors: 27 | error /^CMake\u0020Error/ 28 | 29 | # CMake warnings: 30 | warning /^CMake\u0020Warning/ 31 | 32 | # Linker dynamic library not found 33 | error /error while loading shared libraries:/ 34 | 35 | # Tests: 36 | #start /FAILURES:/ 37 | ok /test/ 38 | ok /\[FAILURE\]/ # We parse test errors separately. 39 | 40 | # Test segmentation fault: 41 | error /Segmentation fault/ 42 | 43 | # Build output: 44 | error /[Ee]rror: [^\s]/ 45 | error /ld: cannot find/ 46 | error /Error [0-9]/ 47 | #error /\[FAIL\]/ 48 | 49 | warning /[Ww]arning:/ 50 | 51 | info /[Nn]ote:/ 52 | 53 | # each line containing 'c++' represents the start of a section for grouping errors and warnings found after the line. 54 | start /ccache/ 55 | 56 | start /gcc/ 57 | -------------------------------------------------------------------------------- /continuous_integration/prepare-jenkins.sh: -------------------------------------------------------------------------------- 1 | catkin config --cmake-args -DCATKIN_ENABLE_TESTING=ON -DCMAKE_CXX_STANDARD=14 2 | 3 | unamestr=`uname` 4 | if [[ "$unamestr" == 'Linux' ]]; then 5 | echo "**** Installing additional necessary packages. ****" 6 | sudo apt-get install -y libbullet-dev 7 | elif [[ "$unamestr" == 'Darwin' ]]; then 8 | brew install bullet 9 | else 10 | echo "Platform $unamestr is not supported!" 11 | exit -1 12 | fi 13 | -------------------------------------------------------------------------------- /pcl_catkin/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(pcl_catkin) 3 | 4 | find_package(catkin_simple REQUIRED) 5 | find_package(Boost REQUIRED COMPONENTS system filesystem thread) 6 | 7 | catkin_simple(ALL_DEPS_REQUIRED) 8 | 9 | include(ExternalProject) 10 | 11 | set(PCL_CATKIN_INCLUDE ${CATKIN_DEVEL_PREFIX}/include/pcl-1.10) 12 | file(MAKE_DIRECTORY ${PCL_CATKIN_INCLUDE}) 13 | 14 | if(NOT CMAKE_BUILD_TYPE) 15 | MESSAGE(FATAL_ERROR "CMAKE_BUILD_TYPE must not be empty!") 16 | endif() 17 | string(TOUPPER ${CMAKE_BUILD_TYPE} UC_BUILD_TYPE) 18 | 19 | # PCL uses -march=native which can be dangerous to use together with Eigen 3.3 20 | # as this can introduce different vectorization settings in different parts 21 | # of the code. So we manually set the compiler flags here to avoid this issue. 22 | include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/pcl_find_sse.cmake") 23 | PCL_CHECK_FOR_SSE() 24 | 25 | # Flags that PCL defines by default, see https://github.com/PointCloudLibrary/pcl/blob/master/CMakeLists.txt#L112 26 | SET(PCL_CXX_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -fno-strict-aliasing -Wno-format-extra-args -Wno-sign-compare -Wno-invalid-offsetof -Wno-conversion -DBOOST_UUID_RANDOM_GENERATOR_COMPAT ${SSE_FLAGS} -Wabi") 27 | SET(PCL_CXX_FLAGS "${PCL_CXX_FLAGS} -std=c++14") 28 | 29 | ExternalProject_Add(pcl_src 30 | GIT_REPOSITORY https://github.com/PointCloudLibrary/pcl 31 | GIT_TAG pcl-1.10.1 32 | UPDATE_COMMAND "" 33 | CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CATKIN_DEVEL_PREFIX} 34 | -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} 35 | -DCMAKE_CXX_FLAGS:STRING=${PCL_CXX_FLAGS} 36 | -DPCL_SHARED_LIBS=TRUE 37 | "-DCMAKE_CXX_FLAGS_${UC_BUILD_TYPE}=${CMAKE_CXX_FLAGS_${UC_BUILD_TYPE}} ${PCL_CXX_FLAGS}" 38 | ) 39 | 40 | cs_add_library(${PROJECT_NAME} src/dependency_tracker.cc) 41 | add_dependencies(${PROJECT_NAME} pcl_src) 42 | 43 | cs_install() 44 | 45 | cs_export(CFG_EXTRAS pcl-extras.cmake) 46 | -------------------------------------------------------------------------------- /pcl_catkin/cmake/pcl-extras.cmake.in: -------------------------------------------------------------------------------- 1 | # Find VTK 2 | option(WITH_VTK "Build VTK-Visualizations" TRUE) 3 | if(WITH_VTK AND NOT ANDROID) 4 | find_package(VTK) 5 | if(VTK_FOUND) 6 | if(NOT DEFINED VTK_RENDERING_BACKEND) 7 | # On old VTK versions this variable does not exist. In this case it is 8 | # safe to assume OpenGL backend 9 | set(VTK_RENDERING_BACKEND "OpenGL") 10 | endif() 11 | message(STATUS "VTK_MAJOR_VERSION ${VTK_MAJOR_VERSION}, rendering backend: ${VTK_RENDERING_BACKEND}") 12 | 13 | set(VTK_FOUND TRUE) 14 | find_package (QVTK) 15 | if (${VTK_MAJOR_VERSION} VERSION_LESS "6.0") 16 | message(STATUS "VTK found (include: ${VTK_INCLUDE_DIRS}, lib: ${VTK_LIBRARY_DIRS})") 17 | link_directories(${VTK_LIBRARY_DIRS}) 18 | else(${VTK_MAJOR_VERSION} VERSION_LESS "6.0") 19 | include (${VTK_USE_FILE}) 20 | message(STATUS "VTK found (include: ${VTK_INCLUDE_DIRS}, lib: ${VTK_LIBRARIES}") 21 | endif (${VTK_MAJOR_VERSION} VERSION_LESS "6.0") 22 | if (APPLE) 23 | option (VTK_USE_COCOA "Use Cocoa for VTK render windows" ON) 24 | MARK_AS_ADVANCED (VTK_USE_COCOA) 25 | endif (APPLE) 26 | if(${VTK_RENDERING_BACKEND} STREQUAL "OpenGL") 27 | set(VTK_RENDERING_BACKEND_OPENGL_VERSION "1") 28 | elseif(${VTK_RENDERING_BACKEND} STREQUAL "OpenGL2") 29 | set(VTK_RENDERING_BACKEND_OPENGL_VERSION "2") 30 | endif() 31 | set(HAVE_VTK ON) 32 | endif(VTK_FOUND) 33 | else(WITH_VTK AND NOT ANDROID) 34 | set(VTK_FOUND OFF) 35 | set(HAVE_VTK OFF) 36 | endif(WITH_VTK AND NOT ANDROID) 37 | 38 | # This overrides the PCL libraries with pcl_catkin libraries. Also adds VTK libs as pcl needs them. 39 | file(GLOB PclLibraries @CATKIN_DEVEL_PREFIX@/lib/libpcl*) 40 | # These lines make sure that we don't export pcl_ros libraries. 41 | list(REMOVE_ITEM PclLibraries @CATKIN_DEVEL_PREFIX@/lib/libpcl_ros_features${CMAKE_SHARED_LIBRARY_SUFFIX}) 42 | list(REMOVE_ITEM PclLibraries @CATKIN_DEVEL_PREFIX@/lib/libpcl_ros_filters${CMAKE_SHARED_LIBRARY_SUFFIX}) 43 | list(REMOVE_ITEM PclLibraries @CATKIN_DEVEL_PREFIX@/lib/libpcl_ros_io${CMAKE_SHARED_LIBRARY_SUFFIX}) 44 | list(REMOVE_ITEM PclLibraries @CATKIN_DEVEL_PREFIX@/lib/libpcl_ros_segmentation${CMAKE_SHARED_LIBRARY_SUFFIX}) 45 | list(REMOVE_ITEM PclLibraries @CATKIN_DEVEL_PREFIX@/lib/libpcl_ros_surface${CMAKE_SHARED_LIBRARY_SUFFIX}) 46 | list(REMOVE_ITEM PclLibraries @CATKIN_DEVEL_PREFIX@/lib/libpcl_ros_tf${CMAKE_SHARED_LIBRARY_SUFFIX}) 47 | 48 | set(PCL_LIBRARIES ${PclLibraries};${VTK_LIBRARIES};@Boost_LIBRARIES@) 49 | set(@PROJECT_NAME@_LIBRARIES ${PclLibraries};${VTK_LIBRARIES};@Boost_LIBRARIES@) 50 | 51 | # Same thing for include dirs. 52 | set(PCL_INCLUDE_DIRS @CATKIN_DEVEL_PREFIX@/include/pcl-1.10;${VTK_INCLUDE_DIRS};@Boost_INCLUDE_DIRS@) 53 | set(@PROJECT_NAME@_INCLUDE_DIRS @CATKIN_DEVEL_PREFIX@/include/pcl-1.10;${VTK_INCLUDE_DIRS};@Boost_INCLUDE_DIRS@) 54 | -------------------------------------------------------------------------------- /pcl_catkin/cmake/pcl_find_sse.cmake: -------------------------------------------------------------------------------- 1 | # Adapted from https://github.com/PointCloudLibrary/pcl/blob/master/cmake/pcl_find_sse.cmake 2 | 3 | ############################################################################### 4 | # Check for the presence of SSE and figure out the flags to use for it. 5 | macro(PCL_CHECK_FOR_SSE) 6 | set(SSE_FLAGS) 7 | set(SSE_DEFINITIONS) 8 | 9 | # Unfortunately we need to check for SSE to enable "-mfpmath=sse" alongside 10 | # "-march=native". The reason for this is that by default, 32bit architectures 11 | # tend to use the x87 FPU (which has 80 bit internal precision), thus leading 12 | # to different results than 64bit architectures which are using SSE2 (64 bit internal 13 | # precision). One solution would be to use "-ffloat-store" on 32bit (see 14 | # http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html), but that slows code down, 15 | # so the preferred solution is to try "-mpfmath=sse" first. 16 | include(CheckCXXSourceRuns) 17 | set(CMAKE_REQUIRED_FLAGS) 18 | 19 | check_cxx_source_runs(" 20 | #include 21 | int main() 22 | { 23 | void* mem = _mm_malloc (100, 16); 24 | return 0; 25 | }" 26 | HAVE_MM_MALLOC) 27 | 28 | check_cxx_source_runs(" 29 | #include 30 | int main() 31 | { 32 | void* mem; 33 | return posix_memalign (&mem, 16, 100); 34 | }" 35 | HAVE_POSIX_MEMALIGN) 36 | 37 | if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 38 | set(CMAKE_REQUIRED_FLAGS "-msse4.2") 39 | endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 40 | 41 | check_cxx_source_runs(" 42 | #include 43 | #include 44 | int main () 45 | { 46 | long long a[2] = { 1, 2 }; 47 | long long b[2] = { -1, 3 }; 48 | long long c[2]; 49 | __m128i va = _mm_loadu_si128 ((__m128i*)a); 50 | __m128i vb = _mm_loadu_si128 ((__m128i*)b); 51 | __m128i vc = _mm_cmpgt_epi64 (va, vb); 52 | _mm_storeu_si128 ((__m128i*)c, vc); 53 | if (c[0] == -1LL && c[1] == 0LL) 54 | return (0); 55 | else 56 | return (1); 57 | }" 58 | HAVE_SSE4_2_EXTENSIONS) 59 | 60 | if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 61 | set(CMAKE_REQUIRED_FLAGS "-msse4.1") 62 | endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 63 | 64 | check_cxx_source_runs(" 65 | #include 66 | int main () 67 | { 68 | __m128 a, b; 69 | float vals[4] = {1, 2, 3, 4}; 70 | const int mask = 123; 71 | a = _mm_loadu_ps (vals); 72 | b = a; 73 | b = _mm_dp_ps (a, a, mask); 74 | _mm_storeu_ps (vals,b); 75 | return (0); 76 | }" 77 | HAVE_SSE4_1_EXTENSIONS) 78 | 79 | if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 80 | set(CMAKE_REQUIRED_FLAGS "-mssse3") 81 | endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 82 | 83 | check_cxx_source_runs(" 84 | #include 85 | int main () 86 | { 87 | __m128i a, b; 88 | int vals[4] = {-1, -2, -3, -4}; 89 | a = _mm_loadu_si128 ((const __m128i*)vals); 90 | b = _mm_abs_epi32 (a); 91 | _mm_storeu_si128 ((__m128i*)vals, b); 92 | return (0); 93 | }" 94 | HAVE_SSSE3_EXTENSIONS) 95 | 96 | if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 97 | set(CMAKE_REQUIRED_FLAGS "-msse3") 98 | endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 99 | 100 | check_cxx_source_runs(" 101 | #include 102 | int main () 103 | { 104 | __m128d a, b; 105 | double vals[2] = {0}; 106 | a = _mm_loadu_pd (vals); 107 | b = _mm_hadd_pd (a,a); 108 | _mm_storeu_pd (vals, b); 109 | return (0); 110 | }" 111 | HAVE_SSE3_EXTENSIONS) 112 | 113 | if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 114 | set(CMAKE_REQUIRED_FLAGS "-msse2") 115 | elseif(MSVC AND NOT CMAKE_CL_64) 116 | set(CMAKE_REQUIRED_FLAGS "/arch:SSE2") 117 | endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 118 | 119 | check_cxx_source_runs(" 120 | #include 121 | int main () 122 | { 123 | __m128d a, b; 124 | double vals[2] = {0}; 125 | a = _mm_loadu_pd (vals); 126 | b = _mm_add_pd (a,a); 127 | _mm_storeu_pd (vals,b); 128 | return (0); 129 | }" 130 | HAVE_SSE2_EXTENSIONS) 131 | 132 | if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 133 | set(CMAKE_REQUIRED_FLAGS "-msse") 134 | elseif(MSVC AND NOT CMAKE_CL_64) 135 | set(CMAKE_REQUIRED_FLAGS "/arch:SSE") 136 | endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 137 | 138 | check_cxx_source_runs(" 139 | #include 140 | int main () 141 | { 142 | __m128 a, b; 143 | float vals[4] = {0}; 144 | a = _mm_loadu_ps (vals); 145 | b = a; 146 | b = _mm_add_ps (a,b); 147 | _mm_storeu_ps (vals,b); 148 | return (0); 149 | }" 150 | HAVE_SSE_EXTENSIONS) 151 | 152 | set(CMAKE_REQUIRED_FLAGS) 153 | 154 | if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) 155 | if(HAVE_SSE4_2_EXTENSIONS) 156 | SET(SSE_FLAGS "${SSE_FLAGS} -msse4.2 -mfpmath=sse") 157 | elseif(HAVE_SSE4_1_EXTENSIONS) 158 | SET(SSE_FLAGS "${SSE_FLAGS} -msse4.1 -mfpmath=sse") 159 | elseif(HAVE_SSSE3_EXTENSIONS) 160 | SET(SSE_FLAGS "${SSE_FLAGS} -mssse3 -mfpmath=sse") 161 | elseif(HAVE_SSE3_EXTENSIONS) 162 | SET(SSE_FLAGS "${SSE_FLAGS} -msse3 -mfpmath=sse") 163 | elseif(HAVE_SSE2_EXTENSIONS) 164 | SET(SSE_FLAGS "${SSE_FLAGS} -msse2 -mfpmath=sse") 165 | elseif(HAVE_SSE_EXTENSIONS) 166 | SET(SSE_FLAGS "${SSE_FLAGS} -msse -mfpmath=sse") 167 | else() 168 | # Setting -ffloat-store to alleviate 32bit vs 64bit discrepancies on non-SSE 169 | # platforms. 170 | set(SSE_FLAGS "-ffloat-store") 171 | endif() 172 | elseif(MSVC AND NOT CMAKE_CL_64) 173 | if(HAVE_SSE2_EXTENSIONS) 174 | SET(SSE_FLAGS "${SSE_FLAGS} /arch:SSE2") 175 | elseif(HAVE_SSE_EXTENSIONS) 176 | SET(SSE_FLAGS "${SSE_FLAGS} /arch:SSE") 177 | endif(HAVE_SSE2_EXTENSIONS) 178 | endif() 179 | 180 | if(MSVC) 181 | if(HAVE_SSSE3_EXTENSIONS) 182 | SET(SSE_DEFINITIONS "${SSE_DEFINITIONS} -D__SSSE3__") 183 | endif() 184 | if(HAVE_SSE2_EXTENSIONS) 185 | SET(SSE_DEFINITIONS "${SSE_DEFINITIONS} -D__SSE2__") 186 | endif() 187 | if(HAVE_SSE_EXTENSIONS) 188 | SET(SSE_DEFINITIONS "${SSE_DEFINITIONS} -D__SSE__") 189 | endif() 190 | endif() 191 | endmacro(PCL_CHECK_FOR_SSE) 192 | -------------------------------------------------------------------------------- /pcl_catkin/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | pcl_catkin 4 | 1.10.1 5 | A catkin wrapper of the Point Cloud Library (PCL). 6 | Fadri Furrer 7 | Fadri Furrer 8 | New BSD 9 | 10 | catkin 11 | catkin_simple 12 | 13 | -------------------------------------------------------------------------------- /pcl_catkin/src/dependency_tracker.cc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ethz-asl/pcl_catkin/5060b6db02e14b1533ce086cef23a03dbf31eac7/pcl_catkin/src/dependency_tracker.cc --------------------------------------------------------------------------------