在Python3环境中使用ROS的cv_bridge

之前使用ROS的时候只用了C++,没有发现cv_bridge这个坑,最近增加了一个使用tensorflow2的节点,为此使用Anaconda配置了一个只有Python3.7的环境,运行cv_bridge时出现报错

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

(前面还有很多,这是最后两行)
查了很多资料,发现问题出在ROS自带的cv_bridge只支持python2,想要使用Python3需要自行编译cv_bridge包,然而编译的时候又因为Anaconda的原因不太顺利,几乎翻遍CSDN和stackoverflow才成功搞定,将过程总结如下
本人小白,有问题还请指出,非常感谢!!
本人环境:Ubuntu 18.04+ROS Melodic+Anaconda3+Python3.7

主要的流程参考stackoverflow上的帖子,有一些注意事项

  1. 只看第一个回答,第二个我个人用起来有点坑
  2. (参考这里,非常感谢这位大佬)如果电脑上装了Anaconda,一定要在电脑原本的环境中进行下面的步骤!不是base环境,是conda deactivate之后前面什么都没有的环境
  3. 然后在workspace目录下按帖子里说的配置依赖
# Instruct catkin to set cmake variables
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
# Instruct catkin to install built packages into install place. It is $CATKIN_WORKSPACE/install folder
catkin config --install

注意这里的python必须是系统自带的那个,我一开始按照第二个回复配置了Anaconda的Python,但是不行

  1. 之后catkin build cv_bridge,应该能顺利完成
  2. 使用时候source install/setup.bash,然后在同一终端中切换到自己的workspace,注意在自己的workspace里source的时候要加一个参数--extend,否则这一次source会覆盖掉之前配置的路径
source  devel/setup.bash --extend

extend参数的作用是让这次的路径配置不影响之前配置好的路径

It tries it’s best to undo changes from a previously sourced setup file before.
Supported command line options:
–extend: skips the undoing of changes from a previously sourced setup file
–local: only considers this workspace but not the chained ones

(这个坑了我好久,编译好了发现还是没法用,source会覆盖,直到后来打开.sh文件发现了这个参数…)

参考资料

https://stackoverflow.com/questions/49221565/unable-to-use-cv-bridge-with-ros-kinetic-and-python3
https://blog.csdn.net/hnlyzxy123/article/details/103206706

你可能感兴趣的:(笔记)