keer_zu 发表于 2025-6-21 10:59

ROS jazzy 和 OpenCV 4.10 不兼容问题

### 解决方案:

1. **卸载 ROS 提供的 OpenCV 4.6**
   **bash**

   ```
   sudo apt remove ros-jazzy-vision-opencv
   ```
2. **安装系统 OpenCV 开发包**
   **bash**

   ```
   sudo apt install libopencv-dev
   ```
3. **创建自定义 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
   ```
4. **修改 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")
   ```
5. **编译自定义 cv\_bridge**
   **bash**

   ```
   cd ~/custom_cv_bridge_ws
   rosdep install --from-paths src --ignore-src -y
   colcon build
   ```
6. **在项目中使用自定义 cv\_bridge**
   在 `vision_processor` 的 `CMakeLists.txt` 中添加:
   **cmake**

   ```
   # 在 find_package(cv_bridge) 前添加
   list(APPEND CMAKE_PREFIX_PATH "$ENV{HOME}/custom_cv_bridge_ws/install")
   ```
7. **更新链接顺序**
   在 `vision_processor` 的 `CMakeLists.txt` 中:
   **cmake**

   ```
   target_link_libraries(vision_processor
   ${OpenCV_LIBS}# 先链接 OpenCV
   cv_bridge::cv_bridge# 再链接 cv_bridge
   # ... 其他依赖
   )
   ```
8. **设置环境变量**
   在 `~/.bashrc` 末尾添加:
   **bash**

   ```
   source ~/custom_cv_bridge_ws/install/setup.bash
   source ~/vision_control_ws/install/setup.bash
   ```

### 验证配置

1. 检查 OpenCV 版本:
   **bash**

   ```
   pkg-config --modversion opencv4
   # 应输出 4.10.x
   ```
2. 检查 cv\_bridge 链接:
   **bash**

   ```
   ldd ~/custom_cv_bridge_ws/install/lib/libcv_bridge.so | grep opencv
   # 应显示 libopencv_core.so.410 等
   ```
3. 重新编译项目:
   **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
```

### 说明

1. 此方案保留了 OpenCV 4.10 的所有功能
2. 自定义编译的 cv\_bridge 确保与 ROS Jazzy 兼容
3. 链接顺序 (`OpenCV_LIBS` 在 `cv_bridge` 前) 是关键
4. 此方法避免了系统级修改,所有自定义都在用户空间完成

> **注意**:OpenCV 4.6 和 4.10 API 高度兼容,但测试所有视觉功能以确保稳定性仍很重要。如果遇到特定功能问题,可能需要小范围调整 API 调用。
>
页: [1]
查看完整版本: ROS jazzy 和 OpenCV 4.10 不兼容问题