OpenCV linking problems with ROS

后端 未结 4 647
礼貌的吻别
礼貌的吻别 2021-01-15 05:42

I\'m trying to compile this project (following the instructions given). When building it with rosmake, I get a bunch of undefined reference to cv::String:

相关标签:
4条回答
  • 2021-01-15 06:12

    I also had the samme issue. Could not comment Osian's solution due to lack of rep, but this is the procedure I used:

    sudo apt-get remove libopencv*
    

    If you for some reason have OpenCV installed from source, enter your build directory and do:

    sudo make uninstall
    

    Then finally

    sudo apt-get install ros-indigo-desktop-full
    
    0 讨论(0)
  • 2021-01-15 06:24

    I am using OpenCV 3.1.0(Bleeding edge), ROS Indigo, Ubuntu 14.04. I ran in to similar trouble when trying to compile LSD-SLAM

    I added:

    find_package(OpenCV 3.1.0 REQUIRED COMPONENTS core highgui imgproc imgcodecs)
    

    I also added opencv libs to target link libs:

    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 opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)
    

    Here is my CMakeLists.txt file:

    cmake_minimum_required(VERSION 2.8.12)
    project(lsd_slam_core)
    include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
    find_package(OpenCV 3.1.0 REQUIRED COMPONENTS core highgui imgproc imgcodecs)
    
    # 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
    )
    
    # 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 opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)
    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)
    
    
    # build image node
    rosbuild_add_executable(dataset_slam src/main_on_images.cpp)
    target_link_libraries(dataset_slam lsdslam)
    
    0 讨论(0)
  • 2021-01-15 06:26

    Do you have multi-versions Opencv? if you have, maybe you should add the path to OpenCVConfig.cmake into CmakeList.txt. Just under the cmake_minimum_required(VERSION 2.8.12),like so:

    set(OpenCV_DIR "/home/ubuntu/src/opencv-3.1.0/build")
    

    That's all.

    0 讨论(0)
  • 2021-01-15 06:32

    I had this exact same problem - same error messages, same setup. I've managed to solve it, though I'm not exactly sure of the steps I did which actually contributed. As far as I can tell, it was due to a conflict of OpenCV versions - I think I had old versions of OpenCV cluttering my /usr/include and /usr/local. I uninstalled all OpenCV packages (including the ROS ones) and including my from-source install of OpenCV3 (also in /usr/local). Then I installed the ROS package vision_opencv, which seemed to install OpenCV 2.4.8 (incidentally the one recommended by LSD SLAM). Of course, this could be annoying if you need OpenCV3 for other things, but I now have that as a local install in my home directory (I couldn't figure out how to get ROS to link to this).

    I think this solved the problem, the only issue remaining was that I got error messages saying was not found. This was because the package install leaves it in (similar for all module include files), whereas the make install step of the from-source install copies them into the parent folder. To get around this I simply edited the #include in the only file in which it is used (lsd_slam_core/src/IOWrapper/OpenCV/ImageDisplay_OpenCV.cpp). That seemed to solve it!

    I hope this helps, I can give further details if needed.

    0 讨论(0)
提交回复
热议问题