ROS报错:ROS-Melodic中cv_bridge报错

 ************************************

我是ubuntu18.04 ROS-Melodic

*************************************

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

这个报错是在ubuntu18.04 ROS-Melodic中的python文件,文件头加入了

#!/usr/bin/env python3

由于在ROS-Melodic中cv_bridge需要在python2中编译,故出现了问题如下:

import rospy
import cv2
from cv_bridge import CvBridge, CvBridgeError
from sensor_msgs.msg import Image

如上的库,1、2、4行想在python3中编译,3行想在python2中编译。咱们的目的是3行我也想在python3中编译。

解决:

查遍csdn,有的文章没有细节,导致成功都是瞎猫碰到死耗子,他好使了,你未必好使,而且留下烂摊子。

1.首先必须进入python3环境而且必须确认你的python3的版本!

ROS修改:ubuntu系统更改默认python版本(重要操作)_机械专业的计算机小白的博客-CSDN博客https://blog.csdn.net/wzfafabga/article/details/127191057?spm=1001.2014.3001.5502不会看上文,灵活切换python版本,是ROS-melodic的重要操作。

做完上部分操作就可以通过如下命令快速切换:

sudo update-alternatives --config python
有 2 个候选项可用于替换 python (提供 /usr/bin/python)。

  选择       路径              优先级  状态
------------------------------------------------------------
  0            /usr/bin/python2     2         自动模式
  1            /usr/bin/python2     2         手动模式
* 2            /usr/bin/python3.6   1         手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:

选择2是python3,其中版本为python3.6

 2.在桌面打开终端,安装编译所需要的包。

sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge
python3-numpy 已经是最新版 (1:1.13.3-2ubuntu1)。
python3-yaml 已经是最新版 (3.12-1build2)。
python3-dev 已经是最新版 (3.6.7-1~18.04)。
python-catkin-tools 已经是最新版 (0.6.1-1)。
python3-catkin-pkg-modules 已经是最新版 (0.5.2-1)。

 3.单独创建工作空间,为了区分灵活取名。(cv_bridge_ws可改成自己想要的名字)

mkdir -p cv_bridge_ws/src
cd cv_bridge_ws

 4.注意!这里的3.6是我的python版本,不意味着是你的版本,根据第一步先确定你的python版本!

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
catkin config --install

 5.注意这些操作涉及路径问题!不要随便再开一个终端!将代码从github上克隆进src文件夹中。这里可能出现网络问题,连接手机热点,反复运行知道克隆成功。

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

 6.注意!这个查询版本是必须的,我的版本号未必是你的版本号!版本号后面要用。

apt-cache show ros-melodic-cv-bridge | grep Version
# 这是我的版本不意味着是你的版本!
Version: 1.13.0-0bionic.20220127.152918

 7.注意和第六步版本号对上!

cd src/vision_opencv/
git checkout 1.13.0

 8.编译

catkin build cv_bridge

 9.现在可以关闭终端,在刚刚的创建的工作空间打开终端。当然也可以用cd的方式去到达这个目录。

环境变量

source ./install/setup.bash

打开python3编译器

python3

调用cv_bridge库,如果成功调用说明我们的cv_bridge能在python3中运行,这就是我们的目的。

from cv_bridge.boost.cv_bridge_boost import getCvType

成功后退出python3

exit()

 如果你向我一样,没报错说明,没问题了。

rosmelodic@rosmelodic-virtual-machine:~/cv_bridge_ws$ source ./install/setup.bash
rosmelodic@rosmelodic-virtual-machine:~/cv_bridge_ws$ python3
Python 3.6.9 (default, Jun 29 2022, 11:45:57) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> from cv_bridge.boost.cv_bridge_boost import getCvType
>>> 

10.如果失败了,看看细节是不是没把握到,是不是网络不好包没下载好。失败后可以将刚刚创建的工作空间删除,在重新尝试!或者说有些报错我没遇到,这种情况多找几个文章对比后再进行操作。

11.如果没失败,意味着pyhon3中调用cv_bridge已经可以实现了。但是需要注意:

 调用时一定要注意先后顺序,先在主工作空间source一下

source ./devel/setup.bash 

 再cd到刚刚创建的工作空间下source一下,同时加上--extend

source ./install/setup.bash --extend

 这些source路径都是有迹可循的,灵活一些。

ROS报错:ROS-Melodic中cv_bridge报错_第1张图片

ROS报错:ROS-Melodic中cv_bridge报错_第2张图片

不要在刚刚创建的工作空间下再放别的功能包,这个工作空间只作为编译cv_bridge的工作空间。

12.实际例子

 开启一个摄像头图像发布节点。这个注意摄像头要打开同时驱动都安装好。

(1条消息) 1.ROS机器视觉:单目摄像头的调用与标定_机械专业的计算机小白的博客-CSDN博客https://blog.csdn.net/wzfafabga/article/details/127206880?spm=1001.2014.3001.5502

 roslaunch robot_vision usb_cam.launch

 在我保存代码的工作空间source一下。

rosmelodic@rosmelodic-virtual-machine:~/catkin_ws$ source ./devel/setup.bash

退回到home路径。

rosmelodic@rosmelodic-virtual-machine:~/catkin_ws$ cd ../

cd到刚刚建立用来编译cv_bridge的工作空间。

rosmelodic@rosmelodic-virtual-machine:~$ cd cv_bridge_ws/

再source一下,注意加上--entend,但是亲测不加也正常运行了。

rosmelodic@rosmelodic-virtual-machine:~/cv_bridge_ws$ source ./install/setup.bash --extend

测试python3调用cv_bridge库。没报错,调用成功。

rosmelodic@rosmelodic-virtual-machine:~/cv_bridge_ws$ python3
from cv_bridge.boost.cv_bridge_boost import getCvType
exit()

用rosrun打开调用cv_bridge的文件。

rosmelodic@rosmelodic-virtual-machine:~/cv_bridge_ws$ rosrun robot_vision cv_bridge_test.py 
[INFO] [1665449121.225020]: Starting cv_bridge_test node

最后打开rqt_image_view,观察usb_cam的各种形式的消息类型。

rosmelodic@rosmelodic-virtual-machine:~$ rqt_image_view

运行结果

13.总结

这部分没有细节是肯定会失败的,而且报错都是一样的无从下手。只能一步一步排除错误。

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

你可能感兴趣的:(ROS报错,ros)