FunnyWii
FunnyWii
Published on 2024-11-07 / 16 Visits
0
0

ROS2不使用自带OpenCV以及替换cv_bridge

系统:Ubuntu20.04

平台:Jetson Orin NX

ROS:ROS2 Foxy

OpenCV:4.5.4 with CUDA

问题源自编译时警告:

/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/foxy/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5.4
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/foxy/lib/libcv_bridge.so, may conflict with libopencv_core.so.4.5.4

以及运行时报错:

OpenCV(4.5.4) /home/ubuntu/build_opencv/opencv/modules/core/src/matrix.cpp:250: error: (-215:Assertion failed) s >= 0 in function ‘setSize’

代码是一个图像订阅节点,cv::imshow("view", cv_ptr->image); 这一行显示图像没有问题,但是一旦声明一个新的cv::Mat 则会产生上述报错。

经上网查阅,发现ROS2 Foxy自带的OpenCV与系统的OpenCV冲突了。

参考了许多文章,大多建议源码编译并重新安装cv_bridge https://github.com/ros-perception/vision_opencv

可以先卸载目前的cv_bridgesudo apt-get remove ros-foxy-cv-bridge ,不过我没卸...可能这是我后面遇到问题的原因。先往下看:

选择对应ros版本的分支并clone:

git clone https://github.com/ros-perception/vision_opencv.git -b foxy

进入cv_brdige文件夹,修改其中的CMakeLists,可以将find_package(OpenCV 4 QUIET修改为自己的OpenCV版本或者用set(OpenCV_DIR "/home/jetson/opencv-4.5.4/build")指定想要使用的OpenCV路径:

find_package(OpenCV 4.5.4 QUIET

然后开始编译:

mkdir build && cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/cv_bridge454 ..
sudo make -j8 && sudo make install -j8

根据一些文章[1]-[3]中的建议,我将编译后的文件生成在/usr/local/cv_bridge454 目录下。

在一些博客[4][5]中也看到将cv_brdige 安装在Foxy目录下的:cmake -DCMAKE_INSTALL_PREFIX=/opt/ros/foxy .. 这样做的目的可能是直接替换掉当前的cv_brdige

我对比了一下,生成在/usr/local/cv_bridge454 目录下的文件,和ROS2 Foxy本身目录下的cv_brdige 中的文件,文件名是一样的,但是文件夹结构不太一样。所以我也不太清楚能否这样安装。

然后在自己的ROS2项目CMakeLists中,指定 cv_brdige 路径,注意在find_package 之前

set(cv_bridge_DIR "/usr/local/cv_bridge454/share/cv_bridge/cmake")

重新编译你的ROS2代码,理论上运行时就不会报错了。

但是我还是在报错,最终一篇Blog[6]为我提供了思路:

colcon build来编译cv_brdige ,把他编译为一个ROS2功能包

然后执行下面命令,我的代码就可以运行而且不报错了。

source /home/jetson/Documents/CV/ros2_demo/vision_opencv/cv_bridge/install/setup.bash

参考文章

[1] https://blog.csdn.net/fb_941219/article/details/105705759

[2] https://blog.csdn.net/qq_41816368/article/details/133843917

[3] https://blog.csdn.net/Q_L_Y/article/details/135783171

[4] https://www.cnblogs.com/iamheying/p/17028586.html

[5] https://blog.csdn.net/zhngyue123/article/details/133900617

[6] https://www.cnblogs.com/gooutlook/p/18394497


Comment