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]