由于ROS1官方只支持python2,所以cv_bridge只支持python2,在python3环境使用cv_bridge会产生以下报错:
dynamic module does not define module export function (PyInit_cv_bridge_boost)
现附上解决网址:
https://www.jianshu.com/p/31a84d29367c
https://stackoverflow.com/questions/49221565/unable-to-use-cv-bridge-with-ros-kinetic-and-python3
https://blog.csdn.net/hnlyzxy123/article/details/103206706
https://blog.csdn.net/weixin_44060400/article/details/104347628
https://blog.csdn.net/kuizhao8951/article/details/104183268
下面是我具体的解决办法
1、github下载源码:
首先创建一个工作空间,比如在cv_bridge_ws/src中输入
$ git clone -b kinetic https://github.com/ros-perception/vision_opencv.git
下载源码,注意版本分支,下载后不需要编译
2、设置catkin编译环境,这里需要把编译环境引导到python3,不然还是关联到python2
$ catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so
$ catkin config --install
注意这里需要具体到目录中查看到底是哪个版本的python,有可能是python3.6
这里会报错没有catkin,安装:
$ sudo apt-get install python-catkin-tools
3、编译
在工作空间中输入(src上一级)
$ catkin build cv_bridge
这里会提示错误,主要是一些模块没有安装,下面安装一下依赖
$ sudo apt-get install python3-catkin-pkg-modules python3-numpy
还会提示没有boot_python3
这里需要软连接一下:
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py36.so /usr/lib/x86_64-linux-gnu/libboost_python3.so
同样注意python版本
这时再输入$ catkin build cv_bridge应该不会报错
4、使用
使用时候source install/setup.bash,然后在同一终端中切换到自己的workspace,注意在自己的workspace里source的时候要加一个参数–extend,否则这一次source会覆盖掉之前配置的路径
source devel/setup.bash --extend
extend参数的作用是让这次的路径配置不影响之前配置好的路径
实际上install/setup.bash与devel/setup.bash中的内容一样,一个是软连接,
使用下面命令添加到bashrc,这样在每次启动终端时自动包含
Echo “source ~/cv_bridge_ws/devel/setup.bash --extend” >> ~/.bashrc
5、测试
在python3环境中输入:
$ from cv_bridge.boost.cv_bridge_boost import getCvType