c++ - ओपनसीवी आरओएस के साथ समस्याओं को जोड़ने




opencv linker (3)

क्या आपके बहु-संस्करण ओपनसीव हैं? यदि आपके पास है, तो शायद आप को OpenCVConfig.cmake का रास्ता OpenCVConfig.cmake में जोड़ना चाहिए। बस cmake_minimum_required(VERSION 2.8.12) तहत, इस तरह से:

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

बस इतना ही।

मैं इस परियोजना को संकलित करने की कोशिश कर रहा हूं (दी गई निर्देशों का पालन करना) इसे rosmake साथ rosmake , मुझे undefined reference to cv::String::deallocate() और undefined reference to cv::String::allocate(unsigned long) undefined reference to cv::String::deallocate() का एक समूह मिलता है। मुझे उत्सुक लगता है कि ओपनसीवी फ़ंक्शंस के बाकी हिस्सों में ठीक से काम करना लग रहा है, जबकि मुझे उन कार्यों में त्रुटि मिल रही है।

मैं जानता हूँ कि यह इसलिए होता है क्योंकि लिंकर उन ऑब्जेक्ट नहीं ढूँढ पाता जहां ये फ़ंक्शंस संकलित होते हैं, लेकिन मैं आरओएस बिल्ड सिस्टम के लिए नया हूँ और यह गलत नहीं है I

मैंने प्रदान की गई CMakeLists.txt फ़ाइल का उपयोग करने की कोशिश की है, और इसके अलावा find_package(OpenCV REQUIRED) और target_link_libraries(xxx xxx ${OpenCV_LIBRARIES}) बिना, कोई फर्क नहीं पड़ता मुझे पता है कि ओपनसीवी स्थापित है और ठीक से संकलित है (मैंने इसे पहले प्रयोग किया है), और मैंने बिना किसी समस्या के आरओएस स्थापित किया था

मैं ओपनसीवी 3, आरओएस इंडिगो, उबंटु 14.04 का उपयोग कर रहा हूं


मुझे यह सटीक एक ही समस्या थी - वही त्रुटि संदेश, एक ही सेटअप मैंने इसे हल करने में कामयाब किया है, हालांकि मुझे पूरा यकीन नहीं है कि मैंने जो कदम उठाए हैं, वास्तव में इसका योगदान है। जहां तक ​​मैं बता सकता हूं, यह ओपनसीवी संस्करणों के संघर्ष के कारण था - मुझे लगता है कि ओपनसीवी के पुराने संस्करणों में मेरा / usr / include और / usr / local cluttering था I मैंने सभी ओपनसीवी पैकेज (आरओएस वाले सहित) को अनइंस्टॉल किया है और ओपनसीवी 3 के अपने स्रोत-स्रोत स्थापित करने के साथ-साथ (/ यूएसआर / स्थानीय में भी)। फिर मैंने आरओएस पैकेज vision_opencv स्थापित किया, जो ओपनसीवी 2.4.8 (संयोग से एलएसडी एसएलएएम द्वारा अनुशंसित एक) को स्थापित करने में लगा था। बेशक, अगर आपको ओपनसीवी 3 की अन्य चीजों के लिए ज़रूरत है तो यह कष्टप्रद हो सकता है, लेकिन अब मुझे मेरी होम डायरेक्टरी में एक स्थानीय इंस्टीट्यूशन के रूप में (मुझे पता नहीं लगा कि आरओएस इस से कैसे लिंक करना है)।

मुझे लगता है कि इस समस्या का समाधान किया गया, शेष एकमात्र मुद्दा यह था कि मुझे त्रुटि संदेश मिल रहा है, जो नहीं मिला। यह इसलिए था क्योंकि पैकेज संस्थापन में इसे छोड़ दिया जाता है (सभी मॉड्यूलों के लिए इसी तरह की फ़ाइलें शामिल हैं), जबकि स्रोत-स्थापित इंस्टॉलेशन के चरण स्थापित करें उन्हें मूल फ़ोल्डर में प्रतिलिपि बनाता है। इसके चारों ओर पाने के लिए मैंने केवल उस फ़ाइल में #include को संपादित किया है जिसमें यह प्रयोग किया जाता है (lsd_slam_core / src / IOWrapper / OpenCV / ImageDisplay_OpenCV.cpp)। ऐसा लगता है कि इसे हल करने के लिए!

मुझे आशा है कि यह मदद करता है, मैं अगर अधिक जानकारी दे सकता हूं


मैं ओपनसीवी 3.1.0 (ब्लिडिंग एज), आरओएस इंडिगो, उबंटु 14.04 का उपयोग कर रहा हूं। एलएसडी-स्लैम को संकलित करने की कोशिश करते समय मुझे इसी तरह की परेशानी हो गई थी

मैंने कहा:

find_package(OpenCV 3.1.0 REQUIRED COMPONENTS core highgui imgproc imgcodecs)

लिंक लिब्स को लक्षित करने के लिए मैंने ओपनसीवी लिब्स को भी जोड़ा है:

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)

यहाँ मेरी CMakeLists.txt फ़ाइल है:

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)