| 解决方案:
卸载 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 调用。 |