CMakeLists.txt 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. # SPDX-License-Identifier: BSD-2-Clause
  2. cmake_minimum_required(VERSION 2.8.3)
  3. project(hdl_graph_slam)
  4. # Can we use C++17 in indigo?
  5. if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
  6. add_definitions(-std=c++11)
  7. set(CMAKE_CXX_FLAGS "-std=c++11")
  8. else()
  9. add_definitions(-std=c++14 -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2)
  10. set(CMAKE_CXX_FLAGS "-std=c++14 -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2")
  11. endif()
  12. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/cmake")
  13. # pcl 1.7 causes a segfault when it is built with debug mode
  14. set(CMAKE_BUILD_TYPE "RELEASE")
  15. find_package(catkin REQUIRED COMPONENTS
  16. fast_gicp
  17. geodesy
  18. geometry_msgs
  19. interactive_markers
  20. message_generation
  21. ndt_omp
  22. nmea_msgs
  23. pcl_ros
  24. roscpp
  25. rospy
  26. sensor_msgs
  27. std_msgs
  28. tf_conversions
  29. laser_geometry # 加上这个
  30. )
  31. catkin_python_setup()
  32. find_package(PCL REQUIRED)
  33. include_directories(${PCL_INCLUDE_DIRS})
  34. link_directories(${PCL_LIBRARY_DIRS})
  35. add_definitions(${PCL_DEFINITIONS})
  36. message(STATUS "PCL_INCLUDE_DIRS:" ${PCL_INCLUDE_DIRS})
  37. message(STATUS "PCL_LIBRARY_DIRS:" ${PCL_LIBRARY_DIRS})
  38. message(STATUS "PCL_DEFINITIONS:" ${PCL_DEFINITIONS})
  39. find_package(G2O REQUIRED)
  40. include_directories(SYSTEM ${G2O_INCLUDE_DIR} ${G2O_INCLUDE_DIRS})
  41. link_directories(${G2O_LIBRARY_DIRS})
  42. link_libraries(${G2O_LIBRARIES})
  43. find_package(OpenMP)
  44. if (OPENMP_FOUND)
  45. set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
  46. set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
  47. endif()
  48. find_library(VGICP_CUDA_FOUND NAMES fast_vgicp_cuda)
  49. message(STATUS "VGICP_CUDA_FOUND:" ${VGICP_CUDA_FOUND})
  50. if(VGICP_CUDA_FOUND)
  51. add_definitions(-DUSE_VGICP_CUDA)
  52. endif()
  53. ########################
  54. ## message generation ##
  55. ########################
  56. add_message_files(FILES
  57. FloorCoeffs.msg
  58. ScanMatchingStatus.msg
  59. )
  60. add_service_files(FILES
  61. SaveMap.srv
  62. LoadGraph.srv
  63. DumpGraph.srv
  64. )
  65. generate_messages(DEPENDENCIES std_msgs geometry_msgs)
  66. ###################################
  67. ## catkin specific configuration ##
  68. ###################################
  69. catkin_package(
  70. INCLUDE_DIRS include
  71. LIBRARIES hdl_graph_slam_nodelet
  72. CATKIN_DEPENDS
  73. geometry_msgs
  74. message_runtime
  75. nmea_msgs
  76. roscpp
  77. sensor_msgs
  78. std_msgs
  79. tf_conversions
  80. # DEPENDS system_lib
  81. )
  82. ###########
  83. ## Build ##
  84. ###########
  85. include_directories(include)
  86. include_directories(
  87. ${PCL_INCLUDE_DIRS}
  88. ${catkin_INCLUDE_DIRS}
  89. )
  90. # nodelets
  91. add_executable(laser_odom src/laser_odom.cpp)
  92. # add_library(laser_odom src/laser_odom.cpp)
  93. target_link_libraries(laser_odom
  94. ${catkin_LIBRARIES}
  95. ${PCL_LIBRARIES}
  96. )
  97. add_executable(hdl_backend
  98. src/hdl_backend.cpp
  99. src/hdl_graph_slam/map_cloud_generator.cpp
  100. src/hdl_graph_slam/information_matrix_calculator.cpp
  101. src/hdl_graph_slam/graph_slam.cpp
  102. src/hdl_graph_slam/keyframe.cpp
  103. src/hdl_graph_slam/map_cloud_generator.cpp
  104. # src/hdl_graph_slam/src/hdl_graph_slam/map2odom_publisher.py
  105. src/hdl_graph_slam/registrations.cpp
  106. src/g2o/robust_kernel_io.cpp
  107. )
  108. # add_library(hdl_backend src/hdl_backend.cpp)
  109. target_link_libraries(hdl_backend
  110. ${catkin_LIBRARIES}
  111. ${PCL_LIBRARIES}
  112. glog
  113. # ${G2O_LIBRARY_DIRS}
  114. )
  115. target_link_libraries(hdl_backend
  116. ${catkin_LIBRARIES}
  117. ${PCL_LIBRARIES}
  118. ${G2O_TYPES_DATA}
  119. ${G2O_CORE_LIBRARY}
  120. ${G2O_STUFF_LIBRARY}
  121. ${G2O_SOLVER_PCG}
  122. ${G2O_SOLVER_CSPARSE} # be aware of that CSPARSE is released under LGPL
  123. ${G2O_SOLVER_CHOLMOD} # be aware of that cholmod is released under GPL
  124. ${G2O_TYPES_SLAM3D}
  125. ${G2O_TYPES_SLAM3D_ADDONS}
  126. )
  127. add_library(prefiltering_nodelet apps/prefiltering_nodelet.cpp)
  128. target_link_libraries(prefiltering_nodelet
  129. ${catkin_LIBRARIES}
  130. ${PCL_LIBRARIES}
  131. )
  132. add_library(floor_detection_nodelet apps/floor_detection_nodelet.cpp)
  133. target_link_libraries(floor_detection_nodelet
  134. ${catkin_LIBRARIES}
  135. ${PCL_LIBRARIES}
  136. )
  137. add_dependencies(floor_detection_nodelet ${PROJECT_NAME}_gencpp)
  138. add_library(scan_matching_odometry_nodelet
  139. apps/scan_matching_odometry_nodelet.cpp
  140. src/hdl_graph_slam/registrations.cpp
  141. )
  142. target_link_libraries(scan_matching_odometry_nodelet
  143. ${catkin_LIBRARIES}
  144. ${PCL_LIBRARIES}
  145. )
  146. add_dependencies(scan_matching_odometry_nodelet ${PROJECT_NAME}_gencpp)
  147. add_library(hdl_graph_slam_nodelet
  148. apps/hdl_graph_slam_nodelet.cpp
  149. src/hdl_graph_slam/graph_slam.cpp
  150. src/hdl_graph_slam/keyframe.cpp
  151. src/hdl_graph_slam/map_cloud_generator.cpp
  152. src/hdl_graph_slam/registrations.cpp
  153. src/hdl_graph_slam/information_matrix_calculator.cpp
  154. src/g2o/robust_kernel_io.cpp
  155. )
  156. target_link_libraries(hdl_graph_slam_nodelet
  157. ${catkin_LIBRARIES}
  158. ${PCL_LIBRARIES}
  159. ${G2O_TYPES_DATA}
  160. ${G2O_CORE_LIBRARY}
  161. ${G2O_STUFF_LIBRARY}
  162. ${G2O_SOLVER_PCG}
  163. ${G2O_SOLVER_CSPARSE} # be aware of that CSPARSE is released under LGPL
  164. ${G2O_SOLVER_CHOLMOD} # be aware of that cholmod is released under GPL
  165. ${G2O_TYPES_SLAM3D}
  166. ${G2O_TYPES_SLAM3D_ADDONS}
  167. )
  168. add_dependencies(hdl_graph_slam_nodelet ${PROJECT_NAME}_gencpp)
  169. catkin_install_python(
  170. PROGRAMS
  171. src/${PROJECT_NAME}/bag_player.py
  172. src/${PROJECT_NAME}/ford2bag.py
  173. src/${PROJECT_NAME}/map2odom_publisher.py
  174. DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  175. )
  176. install(FILES nodelet_plugins.xml
  177. DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
  178. )
  179. install(TARGETS
  180. prefiltering_nodelet
  181. floor_detection_nodelet
  182. scan_matching_odometry_nodelet
  183. hdl_graph_slam_nodelet
  184. LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
  185. install(DIRECTORY include/
  186. DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
  187. )