Technology sharing

Difficultas conflictus inter opencv4.6 et opencv4.2 quod cv_bridge pendent in currendo vins-fusione

2024-07-12

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

Cimex qui plusquam dies adaequatus est, tandem solutus est... et pro tua referentia ponitur.

1. Ad problema conflictus inter currendo opencv4.6 et cv_bridge vocatum versionem 4.2 de vins-mono et vins-fusione, processus debugging ita memoratur:

Propter hoc guy in codice suo omnia contenta recte applicari possunt: ​​ubuntu20.04 configurationis vins-fusionis+opencv4.6
Articulus hic magnus est etiam, possis ad: Errorem cum lvi-sam currit in ubuntu20.04! Quaestio certa inter Opencv bibliothecam et sarcina cv_bridge

1. Install OpenCV 4.6.0

1. Exprime codicem fons opencv, elige versionem debitam opencv 4.6.0, extensio debita opencv_contrib 4.6.0, et cv_bridge usus est ad pontem ROS et opencv.

Dimitte OpenCV 4.6.0 · opencv/opencv · GitHub
Dimitte 4.6.0 · opencv/opencv_contrib · GitHub
https://github.com/ros-perception/vision_opencv/tree/

1.1 Instrue opencv sub /usr/local/opencv-4.6.0, move opencv et moduli ejus extensione, atque inire operantem directorium
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

Insert imaginem descriptionis hic

1.2 Antequam componas, iter institutionem aperi cv.
1.3 Compile opencv 4.6.0, in quo delegi optiones omnes cuda actis relatas nec ad tempus gpu utor.
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
1.4 Si computatrum perficientur bonum est, uti potes -j8 ad multi-core ordinare.
make -j8
sudo make install
  • 1
  • 2

2. Configurare munus sarcina cv_bridge

1 Quoniam data opencv et ROS data converti necesse est, necesse est utendo instrumento pontis trajiciendo.

2. Primum creare ros workspace

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

3. Deinde, codicem fontem versionis respondentis excipe.

GitHub - ros-perception/vision_opencv at noetic

4. Post demptionem, eam extraho ad directorium ~/tertii/cv_bridge_ws/src/. Cum solum cv_bridge opus sit, tantum opus est ut folder cv_bridge servet, in tertia/c_bridge_ws/src/ pone, ac deinde conformationem mitigabit. de cv_bridge.Insert imaginem descriptionis hic

Insert imaginem descriptionis hic

4.1 Mutare CMakeLists.txt fasciculum: adde viam tuam institutionem opencv antepositam (_opencv_version 4), probabiliter in linea 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 Praeterea, cum cv_bridge me factus sit, functioni sarcinae opencv 4.6.0 correspondet, melius est nomen involucrum mutare.
4.3 Contenta totius fasciculi cmakelariorum sunt haec;
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 Modify package.xml et mutare munus sarcina nomen
<package format="2">
#  <name>cv_bridge</name>
  <name>my_cv_bridge</name>
  • 1
  • 2
  • 3
4.6 munus sarcina compone cv_bridge
cd ~/cv_bridge_ws/
catkin_make
  • 1
  • 2
4.7 Si compilatio succedit, confectio sarcinae functionis my_cv_bridge perficitur, quod etiam significat opencv 4.6.0 recte inauguratum esse, ac my_cv_bridge functionem involucrum recte coniungi potest cum versione opencv a nobis institutae iter huius functionis sarcinam adde ad ~/.bashrc folder, ut hanc my_cv_bridge functionem sarcina vocare possimus cum postea vins-fusionem componendo, folder ~/.bashrc aperi, et sequentia in fine mandatum adde
source ~/cv_bridge_ws/devel/setup.bash
  • 1
4.8 Denique, fons currentis itineris in terminalis

source ~/.bas在这里插入代码片hrc *

3. Compile vins-fusione

1. Intrant vins-fusione workspace cd ~/vins-fusion

2. Modificare vins_estimator/CMakeLists.txt file

2.1 Muta cv_bridge ad 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 Adde viam sarcinae functionis cv_bridge_460 et viam 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 Cura ut bibliotheca cv_bridge recte instituatur et conectatur
include_directories(${catkin_INCLUDE_DIRS} ${CERES_INCLUDE_DIRS} ${my_cv_bridge_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
  • 1

3 Modify loop_fusion

3.1 CMakeLists.txt file
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 Adde viam sarcinae functionis cv_bridge_460 et viam 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 Perficite, ut bibliotheca cv_bridge recte instituatur et connectatur
include_directories(${catkin_INCLUDE_DIRS} ${CERES_INCLUDE_DIRS}  ${EIGEN3_INCLUDE_DIR} ${my_cv_bridge_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
  • 1
3.4 Cmakelist file Complete
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. Compilation felix

Si compilatio succedit et sarcina functionis my_cv_bridge in find_package recte identificari potest, haec tria tabularia in fasciculo vins-fusionis develo obtineri possunt.Idem est ac inaugurari officialem cv_bridge, nisi quod sarcina officialis in opt/ros/noetic/...
Insert imaginem descriptionis hic

5

Insert imaginem descriptionis hic

Hic error incidit. ! Tunc. . . Compressi cv_bridge-extras.cmake sub my_cv_bridge/cmake et inveni quod adhuc dicit 4.2!!!

  1. Infra rectam versionem post modificationem
    a
    b. 2)opencv_config_path设置为/usr/loci/opencv-4.6.0/lib/cmake/opencv4
    Insert imaginem descriptionis hic

  2. Dein aperui /usr/local/opencv-4.6.0/lib/cmake/opencv4 et inveni in tabula (OpenCV_VERSION 4.2.0) in pictura infra dictum 4.2, non 4.6!!!

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

Insert imaginem descriptionis hic

  1. Tunc compone supra cv_bridge_ws, et tunc currite vins-fusione regulariter.

6. Quoad constitutionem uninstallation versionis opencv4.2
  1. Ut tabulae aliarum versionum casualiter deletae non sint, uti potes wildcards omnes fasciculos 4.2 versionis bibliothecae delere:
sudo rm /usr/local/lib/libopencv_*4.2*
  • 1

Deinde lima in /var narrari potest et eadem deletionis methodo utere.
2. Iter perscriptio ad bibliothecam opencv pertinentia. Fasciculi bibliothecae nexus omnes sub hoc fasciculo sunt:

sudo find / -iname "*opencv*"
  • 1
  1. Renovare dynamicam link bibliothecam cache
sudo ldconfig
  • 1
  1. Originale cv_bridge sudo fac amove ut removeas ros-melodico-cv-ponte, fac versionem tuam cv_bridge rosis correspondentem et cum ligamento opencv specifico [Num hoc inaugurari potest annon? ? abstuli]

7. De lima 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