CMakeLists.txt 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. cmake_minimum_required(VERSION 2.8)
  2. project(ORB_SLAM3)
  3. IF(NOT CMAKE_BUILD_TYPE)
  4. SET(CMAKE_BUILD_TYPE Release)
  5. ENDIF()
  6. MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})
  7. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3")
  8. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3")
  9. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -march=native")
  10. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -march=native")
  11. # Check C++14 or C++0x support
  12. include(CheckCXXCompilerFlag)
  13. CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX11)
  14. CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
  15. if(COMPILER_SUPPORTS_CXX11)
  16. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
  17. add_definitions(-DCOMPILEDWITHC11)
  18. message(STATUS "Using flag -std=c++14.")
  19. elseif(COMPILER_SUPPORTS_CXX0X)
  20. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
  21. add_definitions(-DCOMPILEDWITHC0X)
  22. message(STATUS "Using flag -std=c++0x.")
  23. else()
  24. message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
  25. endif()
  26. LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
  27. find_package(OpenCV 4.2)
  28. if(NOT OpenCV_FOUND)
  29. message(FATAL_ERROR "OpenCV > 4.2 not found.")
  30. endif()
  31. MESSAGE("OPENCV VERSION:")
  32. MESSAGE(${OpenCV_VERSION})
  33. find_package(Eigen3 3.1.0 REQUIRED)
  34. find_package(Pangolin REQUIRED)
  35. find_package(realsense2)
  36. include_directories(
  37. ${PROJECT_SOURCE_DIR}
  38. ${PROJECT_SOURCE_DIR}/include
  39. ${PROJECT_SOURCE_DIR}/include/CameraModels
  40. ${PROJECT_SOURCE_DIR}/Thirdparty/Sophus
  41. ${EIGEN3_INCLUDE_DIR}
  42. ${Pangolin_INCLUDE_DIRS}
  43. )
  44. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
  45. add_library(${PROJECT_NAME} SHARED
  46. src/System.cc
  47. src/Tracking.cc
  48. src/LocalMapping.cc
  49. src/LoopClosing.cc
  50. src/ORBextractor.cc
  51. src/ORBmatcher.cc
  52. src/FrameDrawer.cc
  53. src/Converter.cc
  54. src/MapPoint.cc
  55. src/KeyFrame.cc
  56. src/Atlas.cc
  57. src/Map.cc
  58. src/MapDrawer.cc
  59. src/Optimizer.cc
  60. src/Frame.cc
  61. src/KeyFrameDatabase.cc
  62. src/Sim3Solver.cc
  63. src/Viewer.cc
  64. src/ImuTypes.cc
  65. src/G2oTypes.cc
  66. src/CameraModels/Pinhole.cpp
  67. src/CameraModels/KannalaBrandt8.cpp
  68. src/OptimizableTypes.cpp
  69. src/MLPnPsolver.cpp
  70. src/GeometricTools.cc
  71. src/TwoViewReconstruction.cc
  72. src/Config.cc
  73. src/Settings.cc
  74. include/System.h
  75. include/Tracking.h
  76. include/LocalMapping.h
  77. include/LoopClosing.h
  78. include/ORBextractor.h
  79. include/ORBmatcher.h
  80. include/FrameDrawer.h
  81. include/Converter.h
  82. include/MapPoint.h
  83. include/KeyFrame.h
  84. include/Atlas.h
  85. include/Map.h
  86. include/MapDrawer.h
  87. include/Optimizer.h
  88. include/Frame.h
  89. include/KeyFrameDatabase.h
  90. include/Sim3Solver.h
  91. include/Viewer.h
  92. include/ImuTypes.h
  93. include/G2oTypes.h
  94. include/CameraModels/GeometricCamera.h
  95. include/CameraModels/Pinhole.h
  96. include/CameraModels/KannalaBrandt8.h
  97. include/OptimizableTypes.h
  98. include/MLPnPsolver.h
  99. include/GeometricTools.h
  100. include/TwoViewReconstruction.h
  101. include/SerializationUtils.h
  102. include/Config.h
  103. include/Settings.h)
  104. add_subdirectory(Thirdparty/g2o)
  105. target_link_libraries(${PROJECT_NAME}
  106. ${OpenCV_LIBS}
  107. ${EIGEN3_LIBS}
  108. ${Pangolin_LIBRARIES}
  109. ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
  110. ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
  111. -lboost_serialization
  112. -lcrypto
  113. )
  114. # If RealSense SDK is found the library is added and its examples compiled
  115. if(realsense2_FOUND)
  116. include_directories(${PROJECT_NAME}
  117. ${realsense_INCLUDE_DIR}
  118. )
  119. target_link_libraries(${PROJECT_NAME}
  120. ${realsense2_LIBRARY}
  121. )
  122. endif()
  123. # Build examples
  124. # RGB-D examples
  125. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/RGB-D)
  126. add_executable(rgbd_tum
  127. Examples/RGB-D/rgbd_tum.cc)
  128. target_link_libraries(rgbd_tum ${PROJECT_NAME})
  129. if(realsense2_FOUND)
  130. add_executable(rgbd_realsense_D435i
  131. Examples/RGB-D/rgbd_realsense_D435i.cc)
  132. target_link_libraries(rgbd_realsense_D435i ${PROJECT_NAME})
  133. endif()
  134. # RGB-D inertial examples
  135. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/RGB-D-Inertial)
  136. if(realsense2_FOUND)
  137. add_executable(rgbd_inertial_realsense_D435i
  138. Examples/RGB-D-Inertial/rgbd_inertial_realsense_D435i.cc)
  139. target_link_libraries(rgbd_inertial_realsense_D435i ${PROJECT_NAME})
  140. endif()
  141. #Stereo examples
  142. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Stereo)
  143. add_executable(stereo_kitti
  144. Examples/Stereo/stereo_kitti.cc)
  145. target_link_libraries(stereo_kitti ${PROJECT_NAME})
  146. add_executable(stereo_euroc
  147. Examples/Stereo/stereo_euroc.cc)
  148. target_link_libraries(stereo_euroc ${PROJECT_NAME})
  149. add_executable(stereo_tum_vi
  150. Examples/Stereo/stereo_tum_vi.cc)
  151. target_link_libraries(stereo_tum_vi ${PROJECT_NAME})
  152. if(realsense2_FOUND)
  153. add_executable(stereo_realsense_t265
  154. Examples/Stereo/stereo_realsense_t265.cc)
  155. target_link_libraries(stereo_realsense_t265 ${PROJECT_NAME})
  156. add_executable(stereo_realsense_D435i
  157. Examples/Stereo/stereo_realsense_D435i.cc)
  158. target_link_libraries(stereo_realsense_D435i ${PROJECT_NAME})
  159. endif()
  160. #Monocular examples
  161. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Monocular)
  162. add_executable(mono_tum
  163. Examples/Monocular/mono_tum.cc)
  164. target_link_libraries(mono_tum ${PROJECT_NAME})
  165. add_executable(mono_kitti
  166. Examples/Monocular/mono_kitti.cc)
  167. target_link_libraries(mono_kitti ${PROJECT_NAME})
  168. add_executable(mono_euroc
  169. Examples/Monocular/mono_euroc.cc)
  170. target_link_libraries(mono_euroc ${PROJECT_NAME})
  171. add_executable(mono_tum_vi
  172. Examples/Monocular/mono_tum_vi.cc)
  173. target_link_libraries(mono_tum_vi ${PROJECT_NAME})
  174. if(realsense2_FOUND)
  175. add_executable(mono_realsense_t265
  176. Examples/Monocular/mono_realsense_t265.cc)
  177. target_link_libraries(mono_realsense_t265 ${PROJECT_NAME})
  178. add_executable(mono_realsense_D435i
  179. Examples/Monocular/mono_realsense_D435i.cc)
  180. target_link_libraries(mono_realsense_D435i ${PROJECT_NAME})
  181. endif()
  182. #Monocular inertial examples
  183. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Monocular-Inertial)
  184. add_executable(mono_inertial_euroc
  185. Examples/Monocular-Inertial/mono_inertial_euroc.cc)
  186. target_link_libraries(mono_inertial_euroc ${PROJECT_NAME})
  187. add_executable(mono_inertial_tum_vi
  188. Examples/Monocular-Inertial/mono_inertial_tum_vi.cc)
  189. target_link_libraries(mono_inertial_tum_vi ${PROJECT_NAME})
  190. if(realsense2_FOUND)
  191. add_executable(mono_inertial_realsense_t265
  192. Examples/Monocular-Inertial/mono_inertial_realsense_t265.cc)
  193. target_link_libraries(mono_inertial_realsense_t265 ${PROJECT_NAME})
  194. add_executable(mono_inertial_realsense_D435i
  195. Examples/Monocular-Inertial/mono_inertial_realsense_D435i.cc)
  196. target_link_libraries(mono_inertial_realsense_D435i ${PROJECT_NAME})
  197. endif()
  198. #Stereo Inertial examples
  199. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Stereo-Inertial)
  200. add_executable(stereo_inertial_euroc
  201. Examples/Stereo-Inertial/stereo_inertial_euroc.cc)
  202. target_link_libraries(stereo_inertial_euroc ${PROJECT_NAME})
  203. add_executable(stereo_inertial_tum_vi
  204. Examples/Stereo-Inertial/stereo_inertial_tum_vi.cc)
  205. target_link_libraries(stereo_inertial_tum_vi ${PROJECT_NAME})
  206. if(realsense2_FOUND)
  207. add_executable(stereo_inertial_realsense_t265
  208. Examples/Stereo-Inertial/stereo_inertial_realsense_t265.cc)
  209. target_link_libraries(stereo_inertial_realsense_t265 ${PROJECT_NAME})
  210. add_executable(stereo_inertial_realsense_D435i
  211. Examples/Stereo-Inertial/stereo_inertial_realsense_D435i.cc)
  212. target_link_libraries(stereo_inertial_realsense_D435i ${PROJECT_NAME})
  213. endif()
  214. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Calibration)
  215. if(realsense2_FOUND)
  216. add_executable(recorder_realsense_D435i
  217. Examples/Calibration/recorder_realsense_D435i.cc)
  218. target_link_libraries(recorder_realsense_D435i ${PROJECT_NAME})
  219. add_executable(recorder_realsense_T265
  220. Examples/Calibration/recorder_realsense_T265.cc)
  221. target_link_libraries(recorder_realsense_T265 ${PROJECT_NAME})
  222. endif()
  223. #Old examples
  224. # RGB-D examples
  225. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/RGB-D)
  226. add_executable(rgbd_tum_old
  227. Examples_old/RGB-D/rgbd_tum.cc)
  228. target_link_libraries(rgbd_tum_old ${PROJECT_NAME})
  229. if(realsense2_FOUND)
  230. add_executable(rgbd_realsense_D435i_old
  231. Examples_old/RGB-D/rgbd_realsense_D435i.cc)
  232. target_link_libraries(rgbd_realsense_D435i_old ${PROJECT_NAME})
  233. endif()
  234. # RGB-D inertial examples
  235. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/RGB-D-Inertial)
  236. if(realsense2_FOUND)
  237. add_executable(rgbd_inertial_realsense_D435i_old
  238. Examples_old/RGB-D-Inertial/rgbd_inertial_realsense_D435i.cc)
  239. target_link_libraries(rgbd_inertial_realsense_D435i_old ${PROJECT_NAME})
  240. endif()
  241. #Stereo examples
  242. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/Stereo)
  243. add_executable(stereo_kitti_old
  244. Examples_old/Stereo/stereo_kitti.cc)
  245. target_link_libraries(stereo_kitti_old ${PROJECT_NAME})
  246. add_executable(stereo_euroc_old
  247. Examples_old/Stereo/stereo_euroc.cc)
  248. target_link_libraries(stereo_euroc_old ${PROJECT_NAME})
  249. add_executable(stereo_tum_vi_old
  250. Examples_old/Stereo/stereo_tum_vi.cc)
  251. target_link_libraries(stereo_tum_vi_old ${PROJECT_NAME})
  252. if(realsense2_FOUND)
  253. add_executable(stereo_realsense_t265_old
  254. Examples_old/Stereo/stereo_realsense_t265.cc)
  255. target_link_libraries(stereo_realsense_t265_old ${PROJECT_NAME})
  256. add_executable(stereo_realsense_D435i_old
  257. Examples_old/Stereo/stereo_realsense_D435i.cc)
  258. target_link_libraries(stereo_realsense_D435i_old ${PROJECT_NAME})
  259. endif()
  260. #Monocular examples
  261. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/Monocular)
  262. add_executable(mono_tum_old
  263. Examples_old/Monocular/mono_tum.cc)
  264. target_link_libraries(mono_tum_old ${PROJECT_NAME})
  265. add_executable(mono_kitti_old
  266. Examples_old/Monocular/mono_kitti.cc)
  267. target_link_libraries(mono_kitti_old ${PROJECT_NAME})
  268. add_executable(mono_euroc_old
  269. Examples_old/Monocular/mono_euroc.cc)
  270. target_link_libraries(mono_euroc_old ${PROJECT_NAME})
  271. add_executable(mono_tum_vi_old
  272. Examples_old/Monocular/mono_tum_vi.cc)
  273. target_link_libraries(mono_tum_vi_old ${PROJECT_NAME})
  274. if(realsense2_FOUND)
  275. add_executable(mono_realsense_t265_old
  276. Examples_old/Monocular/mono_realsense_t265.cc)
  277. target_link_libraries(mono_realsense_t265_old ${PROJECT_NAME})
  278. add_executable(mono_realsense_D435i_old
  279. Examples_old/Monocular/mono_realsense_D435i.cc)
  280. target_link_libraries(mono_realsense_D435i_old ${PROJECT_NAME})
  281. endif()
  282. #Monocular inertial examples
  283. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/Monocular-Inertial)
  284. add_executable(mono_inertial_euroc_old
  285. Examples_old/Monocular-Inertial/mono_inertial_euroc.cc)
  286. target_link_libraries(mono_inertial_euroc_old ${PROJECT_NAME})
  287. add_executable(mono_inertial_tum_vi_old
  288. Examples_old/Monocular-Inertial/mono_inertial_tum_vi.cc)
  289. target_link_libraries(mono_inertial_tum_vi_old ${PROJECT_NAME})
  290. if(realsense2_FOUND)
  291. add_executable(mono_inertial_realsense_t265_old
  292. Examples_old/Monocular-Inertial/mono_inertial_realsense_t265.cc)
  293. target_link_libraries(mono_inertial_realsense_t265_old ${PROJECT_NAME})
  294. add_executable(mono_inertial_realsense_D435i_old
  295. Examples_old/Monocular-Inertial/mono_inertial_realsense_D435i.cc)
  296. target_link_libraries(mono_inertial_realsense_D435i_old ${PROJECT_NAME})
  297. endif()
  298. #Stereo Inertial examples
  299. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/Stereo-Inertial)
  300. add_executable(stereo_inertial_euroc_old
  301. Examples_old/Stereo-Inertial/stereo_inertial_euroc.cc)
  302. target_link_libraries(stereo_inertial_euroc_old ${PROJECT_NAME})
  303. add_executable(stereo_inertial_tum_vi_old
  304. Examples_old/Stereo-Inertial/stereo_inertial_tum_vi.cc)
  305. target_link_libraries(stereo_inertial_tum_vi_old ${PROJECT_NAME})
  306. if(realsense2_FOUND)
  307. add_executable(stereo_inertial_realsense_t265_old
  308. Examples_old/Stereo-Inertial/stereo_inertial_realsense_t265.cc)
  309. target_link_libraries(stereo_inertial_realsense_t265_old ${PROJECT_NAME})
  310. add_executable(stereo_inertial_realsense_D435i_old
  311. Examples_old/Stereo-Inertial/stereo_inertial_realsense_D435i.cc)
  312. target_link_libraries(stereo_inertial_realsense_D435i_old ${PROJECT_NAME})
  313. endif()