ROS python3使用cv_bridge报错,在melodic中使用python3 cv_bridge

ROS cv_bridge报错:在melodic中使用python3+cv_bridge

问题描述

ROS与opencv之间的数据类型转换是通过cv_bridge这个包来实现的。melodic中默认使用python2,因此rospy的cv_bridge也默认是python2版本的。使用python3导入cv_bridge时会报这个错:

from cv_bridge.boost.cv_bridge_boost import getCvType
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

解决方案

此时需要重新编译一个适用于Python3的cv_bridge包。

首先下载源码:

git clone https://github.com/ros-perception/vision_opencv.git

新建工作空间并把cv_bridge包放入:

mkdir -p vision_opencv_ws/src
cd vision_opencv_ws
mv -r ../vision_opencv src/

设置catkin编译使用的python3版本:

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

(可选)指定编译包后放入install文件夹中:

catkin config --install

编译:

catkin build

使用方法

在运行python3前,激活新编译好的cv_bridge环境:

source vision_opencv_ws/install/setup.bash

然后运行python代码就可以正常导入cv_bridge包了。

2022.7补充

如果系统中的opencv版本为4,则需要使用noetic版本的cv_bridge,即下载源码后要切换分支:

git clone https://github.com/ros-perception/vision_opencv.git
git checkout -b mynoetic origin/noetic

并且,要把CMakeLists.txt中的:

if(NOT ANDROID)
  find_package(PythonLibs)

  if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")
    # Debian Buster
    find_package(Boost REQUIRED python37)
  else()
    # Ubuntu Focal
    find_package(Boost REQUIRED python)
  endif()
else()

改为

if(NOT ANDROID)
  find_package(PythonLibs)

  if(PYTHONLIBS_VERSION_STRING VERSION_LESS "3.8")
    # Debian Buster
    find_package(Boost REQUIRED python3)
  else()
    # Ubuntu Focal
    find_package(Boost REQUIRED python)
  endif()
else()

然后再根据上面的步骤编译。

使用时,首先要修改系统的python环境变量,因为source /opt/ros/melodic/setup.bash会自动把ros python2.7 dist-packages添加到python路径中,import优先找的是python2的包,所以要把这个环境变量改掉:

unset PYTHONPATH
source vision_opencv_ws/install/setup.bash
source /opt/ros/melodic/setup.bash

这样就优先使用python3的cv_bridge了。

  • 10
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值