CMakeLists.txt 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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. # nodelets
  100. add_executable(tf src/tf.cpp)
  101. # add_library(laser_odom src/laser_odom.cpp)
  102. target_link_libraries(tf
  103. ${catkin_LIBRARIES}
  104. ${PCL_LIBRARIES}
  105. )
  106. add_executable(laser_odom src/laser_odom.cpp)
  107. # add_library(laser_odom src/laser_odom.cpp)
  108. target_link_libraries(laser_odom
  109. ${catkin_LIBRARIES}
  110. ${PCL_LIBRARIES}
  111. glog
  112. )
  113. add_executable(hdl_backend
  114. src/hdl_backend.cpp
  115. src/hdl_graph_slam/map_cloud_generator.cpp
  116. src/hdl_graph_slam/information_matrix_calculator.cpp
  117. src/hdl_graph_slam/graph_slam.cpp
  118. src/hdl_graph_slam/keyframe.cpp
  119. src/hdl_graph_slam/map_cloud_generator.cpp
  120. # src/hdl_graph_slam/src/hdl_graph_slam/map2odom_publisher.py
  121. src/hdl_graph_slam/registrations.cpp
  122. src/g2o/robust_kernel_io.cpp
  123. )
  124. # add_library(hdl_backend src/hdl_backend.cpp)
  125. target_link_libraries(hdl_backend
  126. ${catkin_LIBRARIES}
  127. ${PCL_LIBRARIES}
  128. glog
  129. # ${G2O_LIBRARY_DIRS}
  130. )
  131. target_link_libraries(hdl_backend
  132. ${catkin_LIBRARIES}
  133. ${PCL_LIBRARIES}
  134. ${G2O_TYPES_DATA}
  135. ${G2O_CORE_LIBRARY}
  136. ${G2O_STUFF_LIBRARY}
  137. ${G2O_SOLVER_PCG}
  138. ${G2O_SOLVER_CSPARSE} # be aware of that CSPARSE is released under LGPL
  139. ${G2O_SOLVER_CHOLMOD} # be aware of that cholmod is released under GPL
  140. ${G2O_TYPES_SLAM3D}
  141. ${G2O_TYPES_SLAM3D_ADDONS}
  142. )
  143. add_library(prefiltering_nodelet apps/prefiltering_nodelet.cpp)
  144. target_link_libraries(prefiltering_nodelet
  145. ${catkin_LIBRARIES}
  146. ${PCL_LIBRARIES}
  147. )
  148. add_library(floor_detection_nodelet apps/floor_detection_nodelet.cpp)
  149. target_link_libraries(floor_detection_nodelet
  150. ${catkin_LIBRARIES}
  151. ${PCL_LIBRARIES}
  152. )
  153. add_dependencies(floor_detection_nodelet ${PROJECT_NAME}_gencpp)
  154. add_library(scan_matching_odometry_nodelet
  155. apps/scan_matching_odometry_nodelet.cpp
  156. src/hdl_graph_slam/registrations.cpp
  157. )
  158. target_link_libraries(scan_matching_odometry_nodelet
  159. ${catkin_LIBRARIES}
  160. ${PCL_LIBRARIES}
  161. )
  162. add_dependencies(scan_matching_odometry_nodelet ${PROJECT_NAME}_gencpp)
  163. add_library(hdl_graph_slam_nodelet
  164. apps/hdl_graph_slam_nodelet.cpp
  165. src/hdl_graph_slam/graph_slam.cpp
  166. src/hdl_graph_slam/keyframe.cpp
  167. src/hdl_graph_slam/map_cloud_generator.cpp
  168. src/hdl_graph_slam/registrations.cpp
  169. src/hdl_graph_slam/information_matrix_calculator.cpp
  170. src/g2o/robust_kernel_io.cpp
  171. )
  172. target_link_libraries(hdl_graph_slam_nodelet
  173. ${catkin_LIBRARIES}
  174. ${PCL_LIBRARIES}
  175. ${G2O_TYPES_DATA}
  176. ${G2O_CORE_LIBRARY}
  177. ${G2O_STUFF_LIBRARY}
  178. ${G2O_SOLVER_PCG}
  179. ${G2O_SOLVER_CSPARSE} # be aware of that CSPARSE is released under LGPL
  180. ${G2O_SOLVER_CHOLMOD} # be aware of that cholmod is released under GPL
  181. ${G2O_TYPES_SLAM3D}
  182. ${G2O_TYPES_SLAM3D_ADDONS}
  183. glog
  184. )
  185. add_dependencies(hdl_graph_slam_nodelet ${PROJECT_NAME}_gencpp)
  186. catkin_install_python(
  187. PROGRAMS
  188. src/${PROJECT_NAME}/bag_player.py
  189. src/${PROJECT_NAME}/ford2bag.py
  190. src/${PROJECT_NAME}/map2odom_publisher.py
  191. DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  192. )
  193. install(FILES nodelet_plugins.xml
  194. DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
  195. )
  196. install(TARGETS
  197. prefiltering_nodelet
  198. floor_detection_nodelet
  199. scan_matching_odometry_nodelet
  200. hdl_graph_slam_nodelet
  201. LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
  202. install(DIRECTORY include/
  203. DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
  204. )