ubuntu16.04 rosslam的CMakeLists.txt修改

本文介绍了一个基于OpenCV和ROS的视觉SLAM系统——LSDSLAM的构建过程,涉及CMake配置、依赖库链接及源文件编译等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lsd_slam_viewer

cmake_minimum_required(VERSION 2.4.6)
set (OpenCV_DIR "/home/vision1/Downloads/opencv-2.4.8/build") #########

project(lsd_slam_viewer)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
############################################
find_package(OpenCV REQUIRED)  
message(STATUS "OpenCV library status:")  
message(STATUS "    version: ${OpenCV_VERSION}")  
message(STATUS "    libraries: ${OpenCV_LIBS}")  
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")  
if(CMAKE_VERSION VERSION_LESS "2.4.6")  
  # Add OpenCV headers location to your include paths  
  include_directories(${OpenCV_INCLUDE_DIRS})  
endif() 
###########################################
# Set the build type.  Options are:
#  Coverage       : w/ debug symbols, w/o optimization, w/ code-coverage
#  Debug          : w/ debug symbols, w/o optimization
#  Release        : w/o debug symbols, w/ optimization
#  RelWithDebInfo : w/ debug symbols, w/ optimization
#  MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
set(ROS_BUILD_TYPE Release)

rosbuild_init()

ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/thirdparty/Sophus)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)

find_package(OpenGL REQUIRED)
set(QT_USE_QTOPENGL TRUE)
set(QT_USE_QTXML TRUE)
find_package(QGLViewer REQUIRED)
find_package(Eigen3 REQUIRED)
include_directories(${QT_INCLUDES} ${EIGEN3_INCLUDE_DIR} ${QGLVIEWER_INCLUDE_DIR})

rosbuild_find_ros_package(dynamic_reconfigure)
include(${dynamic_reconfigure_PACKAGE_PATH}/cmake/cfgbuild.cmake)
gencfg()





# Messages & Services
rosbuild_genmsg()


# SSE flags
rosbuild_check_for_sse()
set(CMAKE_CXX_FLAGS
   "${SSE_FLAGS}"
)

# SSE Sources files
set(SOURCE_FILES         
  src/PointCloudViewer.cpp
  src/KeyFrameDisplay.cpp
  src/KeyFrameGraphDisplay.cpp
  src/settings.cpp
)

set(HEADER_FILES     
  src/PointCloudViewer.h
  src/KeyFrameDisplay.h
  src/KeyFrameGraphDisplay.h
  src/settings.h
)

include_directories(
  ${PROJECT_SOURCE_DIR}/thirdparty/Sophus
  #${Boost_INCLUDE_DIRS}/usr/lib/x86_64-linux-gnu/libpthread.so
)  
rosbuild_add_executable(viewer src/main_viewer.cpp ${SOURCE_FILES} ${HEADER_FILES})
#LIBS =-lpthread 
#LIBS +=-lboost_system
#link_libraries("/usr/lib/x86_64-linux-gnu/libboost_system.so" "/usr/lib/x86_64-linux-gnu/libpthread.so")
target_link_libraries(viewer ${QGLViewer_LIBRARIES} ${QT_LIBRARIES} ${QGLVIEWER_LIBRARY} boost_system GL glut GLU)

rosbuild_link_boost(viewer thread)

rosbuild_add_executable(videoStitch src/main_stitchVideos.cpp)
target_link_libraries(videoStitch ${OpenCV_LIBS})
#link_libraries("/usr/lib/x86_64-linux-gnu/libboost_system.so" "/usr/lib/x86_64-linux-gnu/libpthread.so")

lsd_slam_core

cmake_minimum_required(VERSION 2.8.7)
set (OpenCV_DIR "/home/vision1/Downloads/opencv-2.4.8/build") #########

project(lsd_slam_core)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)

############################################
find_package(OpenCV REQUIRED)  
message(STATUS "OpenCV library status:")  
message(STATUS "    version: ${OpenCV_VERSION}")  
message(STATUS "    libraries: ${OpenCV_LIBS}")  
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")  
if(CMAKE_VERSION VERSION_LESS "2.8.7")  
  # Add OpenCV headers location to your include paths  
  include_directories(${OpenCV_INCLUDE_DIRS})  
endif() 

# Set the build type.  Options are:
#  Coverage       : w/ debug symbols, w/o optimization, w/ code-coverage
#  Debug          : w/ debug symbols, w/o optimization
#  Release        : w/o debug symbols, w/ optimization
#  RelWithDebInfo : w/ debug symbols, w/ optimization
#  MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
set(ROS_BUILD_TYPE Release)

rosbuild_init() 

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
set(CMAKE_MODULE_PATH   ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})

find_package(Eigen3 REQUIRED)
find_package(SuiteParse REQUIRED) # Apparently needed by g2o
find_package(X11 REQUIRED)

# FabMap
# uncomment this part to enable fabmap
#add_subdirectory(${PROJECT_SOURCE_DIR}/thirdparty/openFabMap)
#include_directories(${PROJECT_SOURCE_DIR}/thirdparty/openFabMap/include)
#add_definitions("-DHAVE_FABMAP")
#set(FABMAP_LIB openFABMAP )

# Dynamic Reconfigure Services
rosbuild_find_ros_package(dynamic_reconfigure)
include(${dynamic_reconfigure_PACKAGE_PATH}/cmake/cfgbuild.cmake)
gencfg()

# SSE flags
rosbuild_check_for_sse()
add_definitions("-DUSE_ROS")
add_definitions("-DENABLE_SSE")

# Also add some useful compiler flag
set(CMAKE_CXX_FLAGS
   "${CMAKE_CXX_FLAGS} ${SSE_FLAGS} -march=native  -std=c++0x"
) 

# Set source files
set(lsd_SOURCE_FILES
  ${PROJECT_SOURCE_DIR}/src/DataStructures/Frame.cpp
  ${PROJECT_SOURCE_DIR}/src/DataStructures/FramePoseStruct.cpp
  ${PROJECT_SOURCE_DIR}/src/DataStructures/FrameMemory.cpp
  ${PROJECT_SOURCE_DIR}/src/SlamSystem.cpp
  ${PROJECT_SOURCE_DIR}/src/LiveSLAMWrapper.cpp
  ${PROJECT_SOURCE_DIR}/src/DepthEstimation/DepthMap.cpp
  ${PROJECT_SOURCE_DIR}/src/DepthEstimation/DepthMapPixelHypothesis.cpp
  ${PROJECT_SOURCE_DIR}/src/util/globalFuncs.cpp
  ${PROJECT_SOURCE_DIR}/src/util/SophusUtil.cpp
  ${PROJECT_SOURCE_DIR}/src/util/settings.cpp
  ${PROJECT_SOURCE_DIR}/src/util/Undistorter.cpp
  ${PROJECT_SOURCE_DIR}/src/Tracking/Sim3Tracker.cpp
  ${PROJECT_SOURCE_DIR}/src/Tracking/Relocalizer.cpp
  ${PROJECT_SOURCE_DIR}/src/Tracking/SE3Tracker.cpp
  ${PROJECT_SOURCE_DIR}/src/Tracking/TrackingReference.cpp
  ${PROJECT_SOURCE_DIR}/src/IOWrapper/Timestamp.cpp
  ${PROJECT_SOURCE_DIR}/src/GlobalMapping/FabMap.cpp
  ${PROJECT_SOURCE_DIR}/src/GlobalMapping/KeyFrameGraph.cpp
  ${PROJECT_SOURCE_DIR}/src/GlobalMapping/g2oTypeSim3Sophus.cpp
  ${PROJECT_SOURCE_DIR}/src/GlobalMapping/TrackableKeyFrameSearch.cpp
)
set(SOURCE_FILES
  ${lsd_SOURCE_FILES}
  ${PROJECT_SOURCE_DIR}/src/IOWrapper/ROS/ROSImageStreamThread.cpp
  ${PROJECT_SOURCE_DIR}/src/IOWrapper/ROS/ROSOutput3DWrapper.cpp
  ${PROJECT_SOURCE_DIR}/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp
)

include_directories(
  ${EIGEN3_INCLUDE_DIR}
  ${PROJECT_SOURCE_DIR}/src
  ${PROJECT_SOURCE_DIR}/thirdparty/Sophus
  ${CSPARSE_INCLUDE_DIR} #Has been set by SuiteParse
  ${CHOLMOD_INCLUDE_DIR} #Has been set by SuiteParse
  ${Boost_INCLUDE_DIRS}/usr/lib/x86_64-linux-gnu/libboost_system.so
)


# build shared library.
rosbuild_add_library(lsdslam SHARED ${SOURCE_FILES})
target_link_libraries(lsdslam ${FABMAP_LIB} g2o_core g2o_stuff csparse cxsparse g2o_solver_csparse g2o_csparse_extension g2o_types_sim3 g2o_types_sba X11 boost_system)
rosbuild_link_boost(lsdslam thread)


# build live ros node
rosbuild_add_executable(live_slam src/main_live_odometry.cpp)
target_link_libraries(live_slam lsdslam boost_system ${OpenCV_LIBS})


# build image node
rosbuild_add_executable(dataset_slam src/main_on_images.cpp)
target_link_libraries(dataset_slam lsdslam boost_system ${OpenCV_LIBS})
主要是opencv的link和boost_system的link
<think>好的,我现在要帮用户解决ORB_SLAM2在Ubuntu 20.04上编译时遇到的CMake错误,特别是关于本地映射模块LocalMapping.cc.o的问题。首先,我需要理解用户的具体错误情况。用户提到的是CMake的错误提示,可能涉及OpenCV版本的问题,因为在参考引用中提到了OpenCV >2.4.3未找到。不过用户现在是在用ORB_SLAM2,而引用中的例子是ORB_SLAM3,所以需要确认两者的依赖是否类似。 首先,ORB_SLAM2通常需要OpenCV的版本,可能是3.x或者4.x,但Ubuntu 20.04默认安装的OpenCV版本是4.2,而ORB_SLAM2可能默认配置需要OpenCV3。这时候需要检查用户的OpenCV安装情况。用户可能在编译时遇到CMake找不到正确的OpenCV版本,或者路径配置错误。 其次,用户提到的LocalMapping.cc.o编译错误,可能是在编译过程中某个源文件出现了问题。常见的可能性包括头文件缺失、依赖库链接错误、或者C++标准版本不兼容。例如,Ubuntu 20.04的g++编译器默认使用C++14或更高,而ORB_SLAM2可能需要C++11的兼容设置。此外,Eigen库的版本问题也可能导致编译错误,需要确认是否安装了正确版本。 接下来,我需要回忆ORB_SLAM2的编译步骤。通常步骤是克隆仓库,安装依赖项,然后编译。可能的依赖项包括Pangolin、OpenCV、Eigen3、DBoW2、g2o等。用户的问题可能出在CMakeLists.txt的配置上,尤其是当系统中有多个OpenCV版本时,需要指定正确的路径。 可能的解决方案包括: 1. 检查OpenCV版本,并确保CMake能够找到正确的版本。可以通过修改CMakeLists.txt中的find_package(OpenCV)部分,指定所需的版本或路径。 2. 调整C++标准设置,在CMakeLists.txt中添加set(CMAKE_CXX_STANDARD 11)来强制使用C++11。 3. 检查依赖库的安装情况,如Eigen3是否安装正确,路径是否正确。 4. 检查是否有头文件包含错误,例如某些头文件路径变更,需要更新include路径。 5. 查看具体的编译错误信息,根据报错信息中的具体问题,比如未声明的符号、链接错误等,来针对性解决。 另外,用户提到的是ROS环境下的编译吗?如果是,可能需要检查ROS的依赖项是否正确安装,以及ROS与ORB_SLAM2的兼容性。不过用户的问题中没有明确提到ROS,所以可能只是单独的ORB_SLAM2编译问题。 用户的环境是Ubuntu 20.04,这可能与ORB_SLAM2原本支持的Ubuntu版本(如16.04或18.04)有差异,导致库版本不兼容。因此,可能需要手动调整依赖库的版本,例如降级某些库或使用替代版本。 最后,根据参考引用中的例子,用户可能需要修改CMakeLists.txt中的某些部分,比如OpenCV的版本检测逻辑,或者手动设置OpenCV_DIR变量指向正确的安装路径。例如,如果用户安装了OpenCV3,但系统默认是OpenCV4,需要显式指定路径。</think>针对ORB_SLAM2在Ubuntu 20.04编译时出现的`CMakeFiles`错误(涉及`LocalMapping.cc.o`),以下是分步解决方案: --- ### **步骤1:检查OpenCV版本兼容性** ORB_SLAM2默认依赖**OpenCV 3.x**,但Ubuntu 20.04默认安装OpenCV 4.x。需手动安装OpenCV 3.4: ```bash sudo apt install libopencv-dev libopencv-core-dev libopencv-highgui-dev libopencv-imgproc-dev libopencv-calib3d-dev ``` 在`CMakeLists.txt`中强制指定OpenCV 3.x路径(若存在多版本): ```cmake find_package(OpenCV 3.4 REQUIRED) # 添加版本限制 include_directories(${OpenCV_INCLUDE_DIRS}) ``` --- ### **步骤2:修复C++标准兼容性问题** Ubuntu 20.04的默认编译器(g++ 9)可能使用C++14标准,但ORB_SLAM2需要C++11。在`CMakeLists.txt`中添加: ```cmake set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) ``` --- ### **步骤3:更新Eigen3依赖** 确保已安装Eigen3并正确链接: ```bash sudo apt install libeigen3-dev ``` 在`CMakeLists.txt`中检查Eigen3路径: ```cmake find_package(Eigen3 REQUIRED) include_directories(${EIGEN3_INCLUDE_DIR}) ``` --- ### **步骤4:修复Pangolin兼容性问题** 若使用新版Pangolin(>=0.6),需修改`include`路径: ```cmake # 原代码 #include <pangolin/pangolin.h> # 改为 #include <pangolin/display/display.h> #include <pangolin/gl/gl.h> ``` --- ### **步骤5:解决LocalMapping.cc.o编译错误** 若错误涉及`std::bind2nd`等函数(已弃用),修改代码: ```cpp // 原代码 std::bind2nd(std::ptr_fun(PruneKF), currentKFid) // 替换为Lambda表达式 std::bind([](const KeyFrame* kf, int id){ return kf->mnId == id; }, std::placeholders::_1, currentKFid) ``` --- ### **步骤6:重新编译** 清理旧编译文件后重新编译: ```bash cd ORB_SLAM2 chmod +x build.sh ./build.sh ``` --- ### **引用说明** 若OpenCV版本冲突问题持续,可参考类似ORB_SLAM3的路径指定方法,在CMake中手动设置`OpenCV_DIR`变量[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值