一、前言
近期在做项目时,用到cv_bridge包和Python3的环境。cv_bridge是ROS库中用来将深度相机传感器图片数据类型转换成opencv的mat数据类型的功能包。在系统自带的ROS库中,cv_bridge编译用的是python2。使用过Python编程的小伙伴都知道,Python2和3存在很大差异,所以为满足项目需要,笔者使用Python3编译cv_bridge并进行记录。
二、配置过程
1.前期配置和创建工作区间并生成src子文件夹
- 前期配置
# 先将Python2的cv2.so环境换个名字,不改会因为ros中有个cv2.so系统环境导致后面导入cv2报错
cd /opt/ros/kinetic/lib/python2.7/dist-packages/
sudo mv cv2.so cv2_ros.so
# 安装必要的Python3的一些库
sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-kinetic-cv-bridge
- 创建cv_bridge的工作区间
mkdir -p cv_workspace/src
2.指示catkin设置cmake变量
cd cv_workspace
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3.5 -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so
3.安装配置
catkin config --install
4.git功能包到工作区间的src/vision_opencv路径下
git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
5.查看版本
apt-cache show ros-kinetic-cv-bridge | grep Version # 我的是1.12.8
6.在git repo中确定正确的分支或版本
cd src/vision_opencv/
git checkout -b 1.12.8 # 根据上一条返回版本来
cd ../../
7.编译
catkin build cv_bridge
8.source 操作,把cv_bridge 写入环境配置
source install/setup.bash --extend
三、可能会遇到的报错
1.Could not find the following Boost libraries:boost_python37 或 …Python3或…Python3X
问题分析:
这个报错可能是一定会遇到的错误,说的是boost_python37、Python3或者Python3x的库找不到。我的报错是Python37的,我在网上看了一些资料和博客,发现是自己系统中没有Python37的相关库,只有Python3和Python35的库。
解决方案:
解决方法就是建立软连接,在这我是建立Python35到Python37的软连接,因为Python3.7和Python3.5的版本差距相对较少,在不清楚Python3库对应的Python版本时,选择一个相对来说版本更接近3.7的库建立软连接。具体代码如下,
//到libboost_python-py35所在文件夹下,建立软连接
cd /usr/lib/x86_64-linux-gnu/
sudo ln -s libboost_python-py35.so libboost_python37.so
sudo ln -s libboost_python-py35.a libboost_python37.a
创建完成后,可以在该路径下看到Python3.7的库:
不清楚软连接是什么的小伙伴可以看一下这篇文章:
Linux软连接
大功告成!