现象
当执行xx.py ,有如下报错:
Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 971, in _find_and_load File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 658, in _load_unlocked File "<frozen importlib._bootstrap>", line 571, in module_from_spec File "<frozen importlib._bootstrap_external>", line 922, in create_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
.....
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
原因
在ROS中默认使用python2,rospy的cv_bridge默认也是python2版本的,在使用python3中导入cv_brdige时会报出以上错误.
解决方法
需要重新编译一个用于python3版本的cv_bridge包,即可:
- 新建ROS工作区
mkdir cv_bridge
cd cv_bridge
catkin init
- 注意配置本地python环境,虚拟环境编译无效
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
- 下载cv_bridge
git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
apt-cache show ros-melodic-cv-bridge | grep Version
Version: 1.12.8-0xenial-20180416-143935-0800 #版本不一定
cd src/vision_opencv/
git checkout 1.12.8
cd …/…/
- Build
catkin build cv_bridge
- 添加环境
source install/setup.bash --extend
可放入~/.bashrc文件
source {dir}/install/setup.bash --extend