解决方案:
-
卸载 ROS 提供的 OpenCV 4.6
bash
sudo apt remove ros-jazzy-vision-opencv
-
安装系统 OpenCV 开发包
bash
sudo apt install libopencv-dev
-
创建自定义 cv_bridge 包
bash
mkdir -p ~/custom_cv_bridge_ws/src
cd ~/custom_cv_bridge_ws/src
git clone -b jazzy https://github.com/ros-perception/vision_opencv.git
-
修改 cv_bridge 配置
bash
nano ~/custom_cv_bridge_ws/src/vision_opencv/cv_bridge/CMakeLists.txt
在 find_package(OpenCV QUIET) 前添加:
cmake
set(OpenCV_DIR "/usr/lib/x86_64-linux-gnu/cmake/opencv4")
-
编译自定义 cv_bridge
bash
cd ~/custom_cv_bridge_ws
rosdep install --from-paths src --ignore-src -y
colcon build
-
在项目中使用自定义 cv_bridge
在 vision_processor 的 CMakeLists.txt 中添加:
cmake
# 在 find_package(cv_bridge) 前添加
list(APPEND CMAKE_PREFIX_PATH "$ENV{HOME}/custom_cv_bridge_ws/install")
-
更新链接顺序
在 vision_processor 的 CMakeLists.txt 中:
cmake
target_link_libraries(vision_processor
${OpenCV_LIBS} # 先链接 OpenCV
cv_bridge::cv_bridge # 再链接 cv_bridge
# ... 其他依赖
)
-
设置环境变量
在 ~/.bashrc 末尾添加:
bash
source ~/custom_cv_bridge_ws/install/setup.bash
source ~/vision_control_ws/install/setup.bash
验证配置
-
检查 OpenCV 版本:
bash
pkg-config --modversion opencv4
# 应输出 4.10.x
-
检查 cv_bridge 链接:
bash
ldd ~/custom_cv_bridge_ws/install/lib/libcv_bridge.so | grep opencv
# 应显示 libopencv_core.so.410 等
-
重新编译项目:
bash
cd ~/vision_control_ws
colcon build --packages-select vision_processor
备选方案:使用符号链接
如果仍遇到问题,创建符号链接让系统认为 4.10 是 4.6:
bash
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.410 /usr/lib/x86_64-linux-gnu/libopencv_core.so.406
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.410 /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.406
说明
- 此方案保留了 OpenCV 4.10 的所有功能
- 自定义编译的 cv_bridge 确保与 ROS Jazzy 兼容
- 链接顺序 (
OpenCV_LIBS 在 cv_bridge 前) 是关键
- 此方法避免了系统级修改,所有自定义都在用户空间完成
注意:OpenCV 4.6 和 4.10 API 高度兼容,但测试所有视觉功能以确保稳定性仍很重要。如果遇到特定功能问题,可能需要小范围调整 API 调用。
|