很多小伙伴使用ROS会发现ROS很多功能是基于python2进行编译的,这导致ROS想用python3调用cv_bridge时发现报错,因为ROS默认调用了python2的cv_bridge。这篇文章就是帮助各位小伙伴如何在ROS中调用python3的cv_bridge,希望对你有帮助。
以下命令可以测试自己是否可以正常调用python3的cv_bridge
打开Python3
python3
导入包
import cv_bridge
from cv_bridge import CvBridge, CvBridgeError
在这里说明作者的情况(ubuntu18.04(arm),python3.6.9)是:
第一句import cv_bridge是没问题的,但是第二行从那里导入后两个的话就报错,因为python3没有,所以要进行下面的操作进行解决该问题。
目录
1.安装环境
sudo apt-get install python3-dev python3-numpy python3-yaml ros-melodic-cv-bridge python3-rospkg-modules
pip3 install pip --update
pip3 install rosdep rosinstall catkin_pkg
1.1创建新的工作空间(重要)
mkdir -p py3_cv_bridge_ws/src
1.2编译工作空间
catkin_init_workspace
1.3拉取并解压cv_bridge源码到本地(超时拉不到的可以点击这里下载解压后复制粘贴移动到目录py3_cv_bridge_ws/src中)
git clone https://github.com/ros-perception/vision_opencv.git
1.4编译工作空间
cd ~/py3_cv_bridge_ws
catkin_make install -DPYTHON_EXECUTABLE=/usr/bin/python3
1.4.1编译报错问题以及解决办法
1.4.2 查看==libbost_python*==文件(我这里的arm的ubuntu18.04,如果你的是x86x,就在/usr/lib/x86-64-linux-gnu这个文件夹))
cd /usr/lib/aarch64-linux-gnu/
ls libboost_python*
会看到以下的信息
1.4.3进入报错文件vision_opencv/cv_bridge/CMakeLists.txt,将python37改成python3,然后重新编译即可。
1.4.4编译成功的样子
看到100%就说明编译成功了
1.5添加环境变量
添加这一步是为了想用python3的cv_bridge时可以默认自动调用,而不是去调用了python2的cv_bridge。
添加下面命令到.bashrc文件最后一行
source /home/你系统的名字/py3_cv_bridge_ws/install/setup.bash --extend
1.6检验是否成功可以调用python3的cv_bridge
利用文章开头遇到报错的两行代码进行检验测试
打开Python3
python3
导入包
import cv_bridge
from cv_bridge import CvBridge, CvBridgeError
到这里没报错就证明已经成功可以调用python3的cv_bridge了,在编写ROS节点时,想用py3还是py2的cv_bridge只需要在程序文件首行添加命令既可选择
调用python3,则在程序文件首行添加以下两行命令
#!/usr/bin/env python3
# encoding: utf-8
调用python,则在程序文件首行添加以下两行命令
#!/usr/bin/env python
# encoding: utf-8