一. 问题

1. 使用ROS的时候只用了C++/python2,没有发现cv_bridge问题

使用Anaconda配置了一个只有Python3.5的环境,运行cv_bridge时出现报错

 from cv_bridge import CvBridge, CvBridgeErrorImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)

2. 原因:    ROS自带的cv_bridge只支持python2,想要使用Python3需要自行编译cv_bridge包

电脑环境:Ubuntu 16.04+ROS +Anaconda3+Python3.5

二. 解决方案

1. 首先进入python3的环境并安装相关依赖包

sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-kinetic-cv-bridge

2. 创建一个工作空间用于存放待编译的 cv_bridge 文件

mkdir -p catkin_workspace/src

3. 指示carkin设置cmake变量

cd catkin_workspace
#注意,该处需要根据你原本自带的系统python版本设定。16.04是python3.5,18.04是python3.6
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

4.  指示 catkin 将构建的包安装到安装位置。

catkin config --install

5. 在catkin_workspace工作空间中克隆 cv_bridge src

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

6. 在您的存储库中查找 cv_bridge 的版本

apt-cache show ros-kinetic-cv-bridge | grep Version

7. 检测正确的版本。

#该步骤可以省去
cd src/vision_opencv/
git checkout 1.12.8#必须要编译否则cv_bridge的CMakeLists默认版本为python37
cd ../../

8.  开始编译

#有可能会有warning,不用管,只要不报错就行
catkin build
或者 catkin build cv_bridge

9. 测试安装成功

source /home/zhy/catkin_workspace/install/setup.bash --extend
python3
from cv_bridge.boost.cv_bridge_boost import getCvType

10. 运行代码

# 打开虚拟环境env_py3和进入catkin_workspace空间进行source。
conda activate pytorch
cd catkin_workspace/
# 这里 --extend 参数的作用是让这次的路径配置不影响之前配置好的路径,否则这一次source会覆盖掉之前配置的路径。
source install/setup.bash --extend##每次都必须先激活然后才能使python3调用cv_bridge
cd ..
# 进入另一个工作空间,该空间含有需要启动的python脚本节点。
cd catkin_ws/src/beginner_tutorials/scripts/
python3 ImgSub.py
condapy3
source /home/zhy/catkin_workspace/install/setup.bash --extend
cd Documents/catkin_wss
rosrun .....

11. 如果编译过程中遇到下面的报错:

编译过程中,如果出现下面的报错(目前好像vision_opencv导出来的boost是boost_python37):

CMake Error at /usr/share/cmake-3.6/Modules/FindBoost.cmake:1677 (message):Unable to find the requested Boost libraries.Boost version: 1.58.0Boost include path: /usr/includeCould not find the following Boost libraries:boost_python3No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to thedirectory containing Boost libraries or BOOST_ROOT to the location ofBoost.
Call Stack (most recent call first):CMakeLists.txt:11 (find_package)

这是因为CMake试图找到libboost_python3.so库,但是在ubuntu中它是libboost_python-py35.so(/usr/lib/x86_64-linux-gnu/libboost_python-py35.so)。因此应该在文件src/vision_opencv/cv_bridge/CMakeLists.txt中将下面这行更改find_package()中的内容,更改为python-py35。然后再重新编译:

原始行:

find_package(Boost REQUIRED python3)

更改成:

find_package(Boost REQUIRED python-py35)

三. 参考文献

参考文献1: Anaconda虚拟环境中,让Python3使用ROS的cv_bridge

参考文献2: 使用Python进行ros图像的发送

解决ROS和python3中cv_bridge的问题相关推荐

  1. ros中python3与cv_bridge问题

    ROS--在Ubuntu18.04下基于ROS Melodic编译python3的cv_bridge 环境 Ubuntu18.04 python3.6.13 ROS Melodic nvidia xa ...

  2. ROS中cv_bridge如何用python3进行编译

    最近遇到了个问题,cv_bridge实现了opencv和ros中图像数据类型的转换,但ros-melodic默认python版本是python2.在配置yolact环境的时候,要求是python3. ...

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

    ROS cv_bridge报错:在melodic中使用python3+cv_bridge 问题描述 解决方案 使用方法 2022.7补充 问题描述 ROS与opencv之间的数据类型转换是通过cv_b ...

  4. sublime python3中读取和写入文件时如何解决编码问题

    sublime python3中读取和写入文件时如何解决编码问题 参考文章: (1)sublime python3中读取和写入文件时如何解决编码问题 (2)https://www.cnblogs.co ...

  5. Python3中使用map()结果出错的解决方法

    Python3中使用map()结果出错的解决方法 2016年10月19日 16:18:34 阅读数:2783 在Python2中使用map()会返回一个列表,效果如下: >>> a= ...

  6. 两步操作解决Python3中openCV库安装难题(清华大学镜像源)

    两步操作解决Python3中openCV库安装难题 ways1:whl文件+pip安装: step1:下载whl包: 清华大学的下载库: https://mirrors.tuna.tsinghua.e ...

  7. python3 unicode字符串_【已解决】Python3中如何声明字符串是unicode类型以避免log日志打印出错...

    Python3中代码: CreateTableSqlTemplate = """CREATE TABLE IF NOT EXISTS `%s` ( `id` int(11 ...

  8. python3中input()方法报错traceback变量未定义的解决方法

    python3中input()方法报错traceback变量未定义的解决方法 参考文章: (1)python3中input()方法报错traceback变量未定义的解决方法 (2)https://ww ...

  9. 解决Python3中的中文字符编码的问题-亲测有效

    解决Python3中的中文字符编码的问题 一.原理篇: Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等.这篇文章主要介绍了Python3中的解决中文字符编 ...

最新文章

  1. 强势的老板--项目管理
  2. 企业架构(三)——联邦企业架构框架(FEAF)
  3. javax.mail.AuthenticationFailedException: 535 authentication failed的问题
  4. 18款帝豪gl车机升级_好看又实用的2018款帝豪GL分享,感受它的魅力
  5. 机器学习入门---------numpy
  6. (四)数据结构之“队列”
  7. Spring Bean默认配置为单实例 Spring Bean生命周期
  8. 汇编语言(九)之十六进制数值转二进制
  9. oracle的db link
  10. mui 组件:“div下拉导航”【scroll固定位置】- 案例篇
  11. shell 特殊符号
  12. 别信了大佬的“鬼话”,想造无人驾驶到底进展如何吗?
  13. 学python能做什么-学完Python可以做什么?
  14. python socket thread,python实现socket+threading处理多连接的方法
  15. Codeforces Round #288 (Div. 2)E. Arthur and Brackets
  16. python制作adobe photoshop插件_Python 图像处理这样学 小白也易懂,还能顺便学习 Photoshop...
  17. 理解Aode Air,理解RIA开发
  18. 串的模式匹配算法之BF算法
  19. 不联网安装 SQL server 2012 的问题
  20. Windows下Chcp命令的用法

热门文章

  1. 13. Transformer(下)
  2. 众安Java开发面试
  3. 运维干到35岁 要失业吗?
  4. stm32F4 定时器中断 + 步进电机控制器 控制四线两相步进电机 (初级版本)
  5. 网络编程——The C10K Problem(C10K = connection 10 kilo 问题)。k 表示 kilo,即 1000
  6. 立体成像系统行业分析-产能、产量、销量、销售额、价格及未来趋势
  7. 花三千万写出的十个 to B创业大坑( 下)
  8. Linux more命令:查看文件
  9. linux网卡下有两个system,systemd-networkd 作为网络管理服务,导致dhcp给所有网卡分配同样的IP...
  10. CQUPT第十三届ACM网赛 C 高次OSU题解