在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,从这里拉取cv_bridge的源代码,放进去
  4. 然后在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文件发现了这个参数…)

进阶

按照上面的方法安装好后,每次都需要先source安装cv_bridge的工作空间才可以使用(否则还是会链接到ros自己安装的cv_bridge),为了省去这一步有如下方法

  1. 在~/.bashrc里面加入source,每次启动终端自动source安装cv_bridge的工作空间
  2. 用自己编译的cv_bridge替换ros安装自带的cv_bridge

下面介绍一下方法2的操作
注意如果采用第二种方法,可能会导致ROS自带的一些调用cv_bridge的python包(如camera_calibration)无法正常使用,操作前需谨慎

  1. 删除/opt,/opt/ros/melodic/lib/python2.7/dist-packages下的cv_bridge
  2. 在cv_bridge文件夹中用如下指令编译安装(不需要catkin)即可
mkdir build
cd build
cmake .. \
		-DCMAKE_BUILD_TYPE=Release \
		-DCATKIN_BUILD_BINARY_PACKAGE=ON \
		-DCMAKE_INSTALL_PREFIX=/opt/ros/melodic \
		-DPYTHON_EXECUTABLE=/usr/bin/python3 \
		-DSETUPTOOLS_DEB_LAYOUT=OFF \
make
sudo make install

camera_calibration的修复方法可以参考这里,修改/opt/ros/melodic/lib/python2.7/dist-packages/camera_calibration/calibrator.py使其不依赖cv_bridge即可

参考资料

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值