【bug】ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

问题描述

在ROS中运行行人跟踪算法时出现的bug

出现上述问题原因是ros自带的cv_bridge用的是python2的,而代码是在python3下跑的,因此需要自己编译python3的cv_bridge。

网上有很多教程,但由于电脑装了anaconda,python版本较多,踩了不少坑,因此在这里记录一下。
以下是在ununtu18.04系统下的解决方案。(其它版本可能会因为ros的版本不同略有改动)

解决方案

  1. 首先注意安装环境
    操作要在系统的真实空间中,不要在conda建立的虚拟空间中操作!!!
    即先打开一个新终端,并且运行conda deactivate命令,确保退出所有虚拟空间。(即最前面没有"(base)")
  2. 进入python3的环境并安装相关依赖包
# 然后安装相关依赖包
sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge
  1. 创建一个工作空间用于存放待编译的 cv_bridge 文件
mkdir -p catkin_ws_for_cvbridge/src
  1. 设置参数
cd catkin_ws_for_cvbridge
#注意,该处需要根据你原本自带的系统python版本设定。16.04是python3.5, 18.04是python3.6
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
  1. Instruct catkin to install built packages into install place
catkin config --install
  1. 在catkin_workspace工作空间中克隆 cv_bridge
git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
  1. 查看合适的版本
apt-cache show ros-melodic-cv-bridge | grep Version


这里可以看到版本为1.13.1

  1. 切换到该版本
cd src/vision_opencv/
git checkout 1.13.1
cd ../../
  1. 开始编译
catkin build cv_bridge


  1. 激活环境
source install/setup.bash --extend

仅在当前终端生效,新的终端需要重新激活,或者可以添加到~/.bashrc中。

  1. 在conda虚拟环境下使用
    这里用行人检测来示例,虚拟环境名为"pt_test"
cd ~/catkin_ws # 进入工作空间
conda activate pt_test # 进入虚拟环境
source ~/catkin_ws_for_cvbridge/install/setup.bash --extend #激活cv_bridge环境
rosrun person_tracking depth.py #开启跟踪
物联沃分享整理
物联沃-IOTWORD物联网 » 【bug】ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

发表评论