CMakeLists.txt 5.6 KB

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