प्रौद्योगिकी साझेदारी

opencv4.6 तथा opencv4.2 इत्येतयोः मध्ये द्वन्द्वसमस्या यत् cv_bridge vins-fusion चालयति समये निर्भरं भवति

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

एकदिनाधिकं यावत् समायोजितः दोषः अन्ततः समाधानं प्राप्तवान्... भवतः सन्दर्भार्थं च स्थापितः।

1. opencv4.6 तथा cv_bridge चालयितुं vins-mono तथा vins-fusion इत्येतयोः संस्करणं 4.2 आह्वयितुं च मध्ये विग्रहस्य समस्यायाः कृते, त्रुटिनिवारणप्रक्रिया निम्नलिखितरूपेण अभिलेखिता भवति:

अस्य वयस्कस्य धन्यवादः तस्य कोडस्य कृते, सर्वाणि सामग्रीनि सम्यक् प्रयोक्तुं शक्यन्ते: ubuntu20.04 configuration vins-fusion+opencv4.6
अयं लेखः अपि महान् अस्ति, भवान् सन्दर्भयितुं शक्नोति: ubuntu20.04 इत्यत्र lvi-sam चालयति समये त्रुटिः! Opencv पुस्तकालयस्य cv_bridge संकुलस्य च मध्ये द्वन्द्वसमस्या

1. OpenCV 4.6.0 संस्थापयन्तु

1. opencv स्रोतसङ्केतं डाउनलोड् कुर्वन्तु, आवश्यकं संस्करणं opencv 4.6.0, तत्सम्बद्धं विस्तारं opencv_contrib 4.6.0, ROS तथा opencv इत्येतयोः सेतुबन्धनार्थं प्रयुक्तं cv_bridge च चयनं कुर्वन्तु

OpenCV 4.6.0 · opencv/opencv · GitHub इत्येतत् विमोचयन्तु
विमोचनं ४.६.० · opencv/opencv_contrib · GitHub
https://github.com/ros-perception/vision_opencv/वृक्ष/

1.1 /usr/local/opencv-4.6.0 इत्यस्य अधः opencv संस्थापयन्तु, opencv इत्यस्य विस्तारमॉड्यूल् च स्थानान्तरयित्वा कार्यनिर्देशिकां प्रविशन्तु
sudo mv ./opencv-4.6.0/ /usr/local/
sudo mv ./opencv_contirb-4.6.0/ /usr/local/
cd /usr/local/opencv-4.6.0/
  • 1
  • 2
  • 3

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

1.2 संकलनात् पूर्वं opencv इत्यस्य संस्थापनमार्गं निर्धारयन्तु मम संस्थापनमार्गः CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0 अस्ति
1.3 opencv 4.6.0 इत्यस्य संकलनं कुर्वन्तु, यस्मिन् अहं सर्वान् cuda-सम्बद्धान् विकल्पान् off इति चिनोमि, तावत्पर्यन्तं gpu इत्यस्य उपयोगं न करोमि ।
sudo mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE 
        -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.6.0 
        -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.6.0/modules 
        -D WITH_CUDA=OFF 
        -D ENABLE_FAST_MATH=OFF 
        -D CUDA_FAST_MATH=OFF 
        -D WITH_CUBLAS=ON 
        -D WITH_LIBV4L=ON 
        -D WITH_GSTREAMER=ON 
        -D WITH_GSTREAMER_0_10=OFF 
        -D WITH_QT=ON 
        -D WITH_OPENGL=ON 
        -D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" 
        -D WITH_TBB=ON 
        ..
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
१.४ यदि सङ्गणकस्य कार्यक्षमता उत्तमः अस्ति तर्हि multi-core संकलनार्थं make -j8 इत्यस्य उपयोगं कर्तुं शक्नुवन्ति यदि संगततादोषाः भवन्ति तर्हि make इत्यस्य उपयोगः अनुशंसितः भवति, यत् मन्दतरम् अस्ति ।
make -j8
sudo make install
  • 1
  • 2

2. cv_bridge फंक्शन् संकुलं विन्यस्यताम्

1 यतः opencv data तथा ROS data परिवर्तयितुं आवश्यकं भवति, अतः cv_bridge bridging tool इत्यस्य उपयोगः आवश्यकः अस्ति तदनन्तरं वयं स्वस्य cv_bridge function package इत्यस्य डाउनलोड्, इन्स्टॉल, कॉन्फ़िगरेशन च कथं करणीयम् इति परिचयं करिष्यामः ।

2. प्रथमं ros कार्यक्षेत्रं रचयन्तु

mkdir -r ~/third/cv_bridge_ws/src/
cd ~/cv_bridge_ws/src/
  • 1
  • 2

3. ततः, तत्सम्बद्धस्य संस्करणस्य स्रोतसङ्केतं डाउनलोड् कुर्वन्तु यतः एतत् उबण्टु 20.04 अस्ति, noetic संस्करणं डाउनलोड् कुर्वन्तु ।

GitHub - ros-अनुभूति/दृष्टि_opencv at noetic

4. डाउनलोड् करणस्य अनन्तरं ~/third/cv_bridge_ws/src/ निर्देशिकायां निष्कासयन्तु यतः अस्माकं केवलं cv_bridge इत्यस्य आवश्यकता अस्ति, अतः अस्माकं केवलं cv_bridge फोल्डर् इत्येतत् स्थापयित्वा ~/third/cv_bridge_ws/src/ इत्यत्र स्थापयित्वा ततः विन्यासं परिवर्तयितुं आवश्यकम् of cv_bridge.अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

4.1 CMakeLists.txt सञ्चिकां परिवर्तयन्तु: set(_opencv_version 4) इत्यस्य पुरतः स्वस्य opencv संस्थापनमार्गं योजयन्तु, सम्भवतः 20 पङ्क्तौ
set(Opencv_DIR /usr/local/opencv-4.6.0/build)
set(_opencv_version 4)
find_package(OpenCV 4 QUIET)
  • 1
  • 2
  • 3
4.2 तदतिरिक्तं यतः मया निर्मितं cv_bridge opencv 4.6.0 संस्करणस्य function package इत्यनेन सह सङ्गच्छते, अतः मया अत्र my_cv_bridge इति परिवर्तनं सर्वोत्तमम् ।
४.३ सम्पूर्णस्य cmakelists सञ्चिकायाः ​​विषयवस्तु निम्नलिखितरूपेण अस्ति;
cmake_minimum_required(VERSION 3.0.2)
project(my_cv_bridge)

find_package(catkin REQUIRED COMPONENTS rosconsole sensor_msgs)

if(NOT ANDROID)
  find_package(PythonLibs)

  if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")
    # Debian Buster
    find_package(Boost REQUIRED python37)
  else()
    # Ubuntu Focal
    find_package(Boost REQUIRED python)
  endif()
else()
find_package(Boost REQUIRED)
endif()

set(Opencv_DIR /usr/local/opencv-4.6.0/build)
set(_opencv_version 4)
find_package(OpenCV 4 QUIET)
if(NOT OpenCV_FOUND)
  message(STATUS "Did not find OpenCV 4, trying OpenCV 3")
  set(_opencv_version 3)
endif()

find_package(OpenCV ${_opencv_version} REQUIRED
  COMPONENTS
    opencv_core
    opencv_imgproc
    opencv_imgcodecs
  CONFIG
)

catkin_package(
  INCLUDE_DIRS include
  LIBRARIES ${PROJECT_NAME}
  CATKIN_DEPENDS rosconsole sensor_msgs
  DEPENDS OpenCV
  CFG_EXTRAS cv_bridge-extras.cmake
)

catkin_python_setup()

include_directories(include ${Boost_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

if(NOT ANDROID)
add_subdirectory(python)
endif()
add_subdirectory(src)
if(CATKIN_ENABLE_TESTING)
  add_subdirectory(test)
endif()
# install the include folder
install(
  DIRECTORY include/${PROJECT_NAME}/
  DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
4.5 package.xml परिवर्तनं कृत्वा function package name परिवर्तयन्तु
<package format="2">
#  <name>cv_bridge</name>
  <name>my_cv_bridge</name>
  • 1
  • 2
  • 3
4.6 cv_bridge फंक्शन् संकुलस्य संकलनं कुर्वन्तु
cd ~/cv_bridge_ws/
catkin_make
  • 1
  • 2
4.7 यदि संकलनं सफलं भवति तर्हि my_cv_bridge फंक्शन् संकुलस्य उत्पादनं सम्पन्नं भवति, यस्य अपि अर्थः अस्ति यत् opencv 4.6.0 सम्यक् संस्थापितम् अस्ति, तथा च my_cv_bridge फंक्शन् संकुलं स्वयमेव संस्थापितेन opencv संस्करणेन सह सम्यक् संयोजितुं शक्यते अस्य फंक्शन् संकुलस्य मार्गं ~/.bashrc फोल्डर् मध्ये योजयन्तु, येन वयं पश्चात् vins-fusion संकलनकाले एतत् my_cv_bridge फंक्शन् संकुलं आह्वयितुं शक्नुमः, ~/.bashrc फोल्डर् उद्घाटयन्तु, अन्ते च निम्नलिखितम् आदेशं योजयितुं शक्नुमः
source ~/cv_bridge_ws/devel/setup.bash
  • 1
४.८ अन्ते टर्मिनल् मध्ये वर्तमानमार्गस्य स्रोतः

स्रोत ~/.बास在这里插入代码片hrc

3. विन्स-संलयनस्य संकलनम्

1. vins-fusion कार्यक्षेत्र cd ~/vins-fusion प्रविष्टं कुर्वन्तु

2. vins_estimator/CMakeLists.txt सञ्चिकां परिवर्तयन्तु

2.1 cv_bridge इत्येतत् my_cv_bridge इति परिवर्तयन्तु
find_package(catkin REQUIRED COMPONENTS
    roscpp
    std_msgs
    geometry_msgs
    nav_msgs
    tf
    cv_bridge_460
    camera_models
    image_transport)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
2.2 cv_bridge_460 फंक्शन् संकुलस्य मार्गं opencv-4.6.0 इत्यस्य मार्गं च योजयन्तु
set(my_cv_bridge_DIR "/home/lemontech/thirdlib/cv_bridge_ws/devel/share/my_cv_bridge/cmake")

set(OpenCV_DIR "/usr/local/opencv-4.6.0/bulid/")
  • 1
  • 2
  • 3
2.3 cv_bridge पुस्तकालयः सम्यक् संस्थापितः, लिङ्क् च अस्ति इति सुनिश्चितं कुर्वन्तु
include_directories(${catkin_INCLUDE_DIRS} ${CERES_INCLUDE_DIRS} ${my_cv_bridge_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
  • 1

३ पाश_संलयनं परिवर्तयतु

3.1 CMakeLists.txt सञ्चिका
find_package(catkin REQUIRED COMPONENTS
    roscpp
    std_msgs
    nav_msgs
    camera_models
    my_cv_bridge
    roslib
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
3.2 cv_bridge_460 फंक्शन् संकुलस्य मार्गं opencv-4.6.0 इत्यस्य मार्गं च योजयन्तु
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/home/lemontech/thirdlib/cv_bridge_ws/devel")
set(my_cv_bridge_DIR "/home/lemontech/thirdlib/cv_bridge_ws/devel/share/my_cv_bridge/cmake")
#-DEIGEN_USE_MKL_ALL")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")

set(OpenCV_DIR "/usr/local/opencv-4.6.0/bulid/")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
3.3 cv_bridge पुस्तकालयः सम्यक् संस्थापितः, लिङ्क् च अस्ति इति सुनिश्चितं कुर्वन्तु
include_directories(${catkin_INCLUDE_DIRS} ${CERES_INCLUDE_DIRS}  ${EIGEN3_INCLUDE_DIR} ${my_cv_bridge_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
  • 1
३.४ cmakelist सञ्चिका सम्पूर्णा
cmake_minimum_required(VERSION 2.8.3)
project(loop_fusion)

set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++17")
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/home/lemontech/thirdlib/cv_bridge_ws/devel")
set(my_cv_bridge_DIR "/home/lemontech/thirdlib/cv_bridge_ws/devel/share/my_cv_bridge/cmake")
#-DEIGEN_USE_MKL_ALL")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")

set(OpenCV_DIR "/usr/local/opencv-4.6.0/bulid/")

find_package(catkin REQUIRED COMPONENTS
    roscpp
    std_msgs
    nav_msgs
    camera_models
    my_cv_bridge
    roslib
    )

find_package(OpenCV)


find_package(Ceres REQUIRED)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
find_package(Eigen3)

include_directories(${catkin_INCLUDE_DIRS} ${CERES_INCLUDE_DIRS}  ${EIGEN3_INCLUDE_DIR} ${my_cv_bridge_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
catkin_package()

add_executable(loop_fusion_node
    src/pose_graph_node.cpp
    src/pose_graph.cpp
    src/keyframe.cpp
    src/utility/CameraPoseVisualization.cpp
    src/ThirdParty/DBoW/BowVector.cpp
    src/ThirdParty/DBoW/FBrief.cpp
    src/ThirdParty/DBoW/FeatureVector.cpp
    src/ThirdParty/DBoW/QueryResults.cpp
    src/ThirdParty/DBoW/ScoringObject.cpp
    src/ThirdParty/DUtils/Random.cpp
    src/ThirdParty/DUtils/Timestamp.cpp
    src/ThirdParty/DVision/BRIEF.cpp
    src/ThirdParty/VocabularyBinary.cpp
    )

target_link_libraries(loop_fusion_node ${catkin_LIBRARIES}  ${OpenCV_LIBS} ${CERES_LIBRARIES}) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

4. संकलनं सफलम्

यदि संकलनं सफलं भवति तथा च find_package इत्यस्मिन् my_cv_bridge फंक्शन् संकुलं सम्यक् चिह्नितुं शक्यते तर्हि उपर्युक्तानि त्रीणि सञ्चिकाः vins-fusion इत्यस्य devel सञ्चिकायां प्राप्तुं शक्यन्ते ।आधिकारिकं cv_bridge संस्थापनं समानम् अस्ति, केवलं आधिकारिकं संकुलं opt/ros/noetic/...
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

5. तथापि सफलसंकलनस्य अर्थः सफलं संचालनं न भवति...

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

एषा त्रुटिः भवति। ! तदा। . . मया my_cv_bridge/cmake इत्यस्य अधः cv_bridge-extras.cmake इति परीक्षितं तदापि ज्ञातं यत् अद्यापि 4.2 इति लिखितम् अस्ति!!!

  1. परिवर्तनानन्तरं सम्यक् संस्करणं अधः अस्ति
    क. (1) संस्करणं 4.6 इति परिवर्तयन्तु
    ख. (2)opencv_config_path设置为/usr/स्थानीय/opencv-4.6.0/lib/cmake/opencv4
    अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

  2. ततः, अहं /usr/local/opencv-4.6.0/lib/cmake/opencv4 उद्घाटितवान् तथा च अधोलिखिते चित्रे सेट् (OpenCV_VERSION 4.2.0) 4.2 इति उक्तवान्, न तु 4.6 Correct and recompile इति

rm -rf build
mkdir build && cd build
cmake ..
make -j8
  • 1
  • 2
  • 3
  • 4

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

  1. ततः उपरि cv_bridge_ws पुनः संकलितं कुर्वन्तु, ततः vins-fusion चालयन्तु तर्हि सामान्यतया चालयिष्यति ।

6. opencv4.2 संस्करणस्य विस्थापनसमस्यायाः विषये
  1. अन्येषां संस्करणानाम् सञ्चिकाः आकस्मिकतया न विलोपिताः न भवन्ति इति सुनिश्चित्य, भवान् सर्वाणि 4.2 संस्करणपुस्तकालयसञ्चिकाः विलोपयितुं वाइल्डकार्ड्-उपयोगं कर्तुं शक्नोति:
sudo rm /usr/local/lib/libopencv_*4.2*
  • 1

ततः /var मध्ये सम्बन्धिताः सञ्चिकाः भवितुम् अर्हन्ति तथा च समानं लोपविधिः उपयुज्यन्ते ।
2. opencv पुस्तकालयेन सह सम्बद्धं मार्गं पश्यन्तु पुस्तकालयस्य लिङ्क् सञ्चिकाः सर्वाणि अस्याः सञ्चिकायाः ​​अधः सन्ति:

sudo find / -iname "*opencv*"
  • 1
  1. गतिशीललिङ्कपुस्तकालयस्य संग्रहणं अद्यतनं कुर्वन्तु
sudo ldconfig
  • 1
  1. मूल cv_bridge sudo apt-get remove ros-melodic-cv-bridge, ros अनुरूपं cv_bridge इत्यस्य स्वकीयं संस्करणं डाउनलोड् कुर्वन्तु तथा च निर्दिष्टस्य opencv इत्यस्य लिङ्कं कुर्वन्तु [किं एतत् विस्थापनं कर्तुं शक्यते वा न वा? ? अहं तत् अपसारितवान्]।

7. cmakelist सञ्चिकायाः ​​विषये

set(CMAKE_CXX_FLAGS "-std=c++17")指定了c++17标准进行编译
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/home/lemontech/thirdlib/cv_bridge_ws/devel") 这个设置将/home/lemontech/thirdlib/cv_bridge_ws/devel路径添加到cmake的前缀路径中,以便CMake可以在路径中找到依赖项和包
set(my_cv_bridge_DIR "/home/lemontech/thirdlib/cv_bridge_ws/devel/share/my_cv_bridge/cmake")设置置顶了my_cv_bridge包的CMake配置文件路径,以便CMake可以找到并使用这个包
find_package(catkin REQUIRED COMPONENTS
my_cv_bridge
roscpp
)用于查找并配置指定的catkin包和组件,catkin是ros的构建系统,REQUIRED表示这些组件是必须的,如果缺少,会报错)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7