ROS报错:ROS-Melodic中cv_bridge报错

2023-05-16

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

我是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路径都是有迹可循的,灵活一些。

不要在刚刚创建的工作空间下再放别的功能包,这个工作空间只作为编译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)

14.anaconda环境调用cv_bridge

安装anaconda跳过,只配置环境。

配置一个简单的python3.8环境,同时装上pytorch。

conda create -n GGCNN python=3.8 

conda activate GGCNN

pip install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

注意问题1:

conda create没有安装pyyaml这个包,会报错。安一个。

pip install pyyaml

注意问题2:

运行代码得在工作空间下,而且每次在工作空间下都得source一下。

这是没source的结果:

 source正常运行:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS报错:ROS-Melodic中cv_bridge报错 的相关文章

  • ros+arduino学习(六):重构ros_lib库文件

    前言 ros lib是arduino程序和ros连接的库文件 通过使用这些库文件和相关函数 可以在arduino上通过编程使得arduino硬件开ros节点程序 这样arduino硬件就可以与上位机通过话题进行通讯 从而把arduino从传
  • Webots小车与Gampping建图仿真与ORB3算法实践

    此篇博客转自本作者在古月居的博客 https www guyuehome com 34537 前言 在研一的时候 由于XXX项目的需要 其中一项就是需要测试Gmapping建图 自然也要求使用ROS系统 由于之前经常在webots中进行仿真
  • ros 中ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdist

    ros 中ERROR cannot download default sources list from https raw githubusercontent com ros rosdistro master rosdep sources
  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • rosrun 和 roslaunch 的时候 TAB 的自动补全出现问题

    rosrun 和 roslaunch 的时候 TAB 的自动补全出现问题 rospack Warning error while crawling home sun boost filesystem status Permission de
  • ModuleNotFoundError: No module named ‘rosbag‘

    1 ModuleNotFoundError No module named rosbag File opt ros kinetic lib python2 7 dist packages roslib launcher py line 42
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • 程序“catkin_init_workspace”尚未安装。 您可以使用以下命令安装: sudo apt install catkin

    程序 catkin init workspace 尚未安装 您可以使用以下命令安装 sudo apt install catkin 问题如图 先贴上解决后的效果 运行环境 ubuntu 16 04 ros版本 kinetic 问题解释 这个
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • 何时使用桥接模式以及它与适配器模式有何不同?

    有没有人用过桥纹在现实世界的应用程序中 如果有 你是如何使用它的 是我 还是只是适配器模式加入一点依赖注入 它真的值得拥有自己的模式吗 有一个组合费德里科的 and John s答案 When Shape Rectangle Circle
  • 在 Python 3 中导入 Rosbag

    我正在尝试从 Python 3 读取 rosbag 文件 我安装了 ROS2 Eloquent Elusor 它应该支持 Python 3 当我跑步时 import rosbag bag rosbag Bag test bag 从Pytho
  • ROS AsyncSpinner 的多线程行为

    我试图了解 ROS 中的 AsyncSpinner 是如何工作的 因为我可能有一些误解 你可以找到类似的问题here As seen here它的定义提到 异步旋转器 产生几个线程 可配置 将并行执行回调 同时不会阻塞执行该操作的线程 叫它
  • 从 pcl::PointCloud 中删除点

    我是 PCL 新手 我正在使用 PCL 库 并且正在寻找一种从点云中提取点或将特定点复制到新点的方法 我想验证每个点是否符合条件 并且我想获得仅包含优点的点云 谢谢 使用 ExtractIndices 类 将要删除的点添加到 PointIn
  • 如何将曲面拟合到一组数据点并获得曲面方程

    乌班图 ROS 思维 Python程序 我正在尝试获取适合点云数据中的一组点的表面方程 数据来自激光雷达扫描仪 我在 rviz 中选择整个扫描的一部分 并获得该选择的坐标选定表面的图片 所选曲面并不总是如此线性 因为材质中可能存在轻微的曲线
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • Caught exception in launch(see debug for traceback)

    Caught exception in launch see debug for traceback Caught exception when trying to load file of format xml Caught except
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 可以在catkin工作区之外创建ROS节点吗?

    我想在catkin工作区之外创建一个ROS发布者节点 可以创建吗 当然可以 像对待任何其他 cpp 库或 python 包一样对待 ROS 在Python中你必须保留PYTHONPATH环境变量指向ros包 opt ros kinetic

随机推荐