【Ubuntu & ROS】Ubuntu16.04使用Python3编译cv_bridge

一、前言

近期在做项目时,用到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的库。
【Ubuntu & ROS】Ubuntu16.04使用Python3编译cv_bridge_第1张图片【Ubuntu & ROS】Ubuntu16.04使用Python3编译cv_bridge_第2张图片
解决方案:
解决方法就是建立软连接,在这我是建立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的库:
【Ubuntu & ROS】Ubuntu16.04使用Python3编译cv_bridge_第3张图片
不清楚软连接是什么的小伙伴可以看一下这篇文章:
Linux软连接

大功告成!

你可能感兴趣的:(Ubuntu,&,ROS,ROS,python)