在Python3环境中使用ROS的cv_bridge

2023-05-16

之前使用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

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

在Python3环境中使用ROS的cv_bridge 的相关文章

  • 【HAL库】HAL库STM32cubemx快速使用

    文章目录 整体框图一 基础工程1 新建工程2 配置RCC3 配置SYS4 工程设置5 生成代码6 keil设置下载 amp 复位 二 必备外设1 目录规范2 LED2 RTC3 USART4 KEY 三 其他外设1 OLED xff08 模
  • 【HAL库】STM32+ESP8266+Onenet+MQTT,极简工程,hal库移植。

    ESP8266 43 Onenet 43 MQTT 1 导入 c h文件 xff08 不再赘述 xff0c 详细见LED部分 xff09 2 Cubemx配置3 修改 c h 文件4 测试 ESP8266通过MQTT协议连接Onenet 从
  • 【HAL库】BMP180气压传感器+STM32,hal库移植

    BMP180气压传感器 43 STM32 1 导入 c h文件 xff08 不再赘述 xff0c 详细见LED部分 xff09 2 Cubemx配置3 修改 h 文件4 测试 将BMP180从标准库移植到HAL库 模拟IIC 极简工程代码如
  • 【硬件】嵌入式板卡硬件电路设计、焊接

    文章目录 嵌入式板卡电路 框图常用焊接工具和焊接操作 框图一 元器件 有极性 1 肖特基二极管2 钽电容3 三极管4 MOS5 LED6 SMAJ5 0CA xff08 TVS管 xff09 8 SRV05 4 xff08 ESD管 xff
  • C语言中的输入输出函数

    一 字符数据输入输出函数 1 putchar xff0c 输出一个字符 include lt stdio h gt int main char cChar1 cChar2 cChar3 cChar4 cChar1 61 39 H 39 cC
  • printf的执行顺序&++i与i++的区别

    问题的由来 xff1a 在学习C语言预处理命令时看到这样一段 https www cnblogs com clover toeic p 3851102 html span class token macro property span cl
  • Traceback (most recent call last): File “/home/myp4/.local/bin/pip“, line 5, in <module> from

    https blog csdn net weixin 41135864 article details 89817343 Traceback most recent call last File home myp4 local bin pi
  • sys.stderr.write(f“ERROR: {exc}”)

    https www cjavapy com article 1701
  • 为什么PBFT需要三阶段

    首先 xff0c 第一阶段是预提议 xff08 pre prepare xff09 xff0c 这一阶段的主要原因是使用领导可以降低通信复杂度 xff0c 但是我对其没了解 xff0c 就不瞎说了 接着是提议 xff08 prepare x
  • 文件的自定义包发送接收

    需求 对一个特定的文件进行分片发送 xff0c 构造数据包 xff0c 发送数据包 xff0c 接收数据包并提取有效数据 xff0c 对数据组合还原为原文件 设计 当前 xff0c 基于socket的网络编程已成为当今不可替代的编程方法 x
  • 阿里云服务器图形化界面

    https blog csdn net qq 43264202 article details 119578968
  • 安卓开放端口

    https blog csdn net weixin 39737831 article details 109965587
  • Ubuntu14.04 支持ESM

    https discourse ubuntu com t ubuntu advantage client 21788
  • 开启关闭ICMP

    echo request http www xoxxoo com index index article id 780 html redirect https blog csdn net weixin 39684454 article de
  • AD使用技巧

    AD快捷键 快捷键要处在英文模式的情况下才可以使用 xff1a AD测量快捷键 xff1a R AD对齐快捷键 xff1a A AD切换单位快捷键 xff1a Q AD改变栅格快捷键 xff1a G AD视图配置快捷键 xff1a L AD
  • 多传感器融合框架搭建

    架构 src include apps xff1a 节点文件 front end node cpp 前端节点data pretreat node cpp 数据预处理节点back end node cpp 后端节点loop closing n
  • 多传感器融合框架-ESKF

    架构 基本同图优化框架差不多 内容简述 数据预处理节点 订阅imu原始数据 xff0c gnss原始数据 xff0c 完成数据时间戳同步 点云畸变补偿发布如下消息 畸变补偿后的点云 synced cloudgnss里程计 synced gn
  • OpenCV笔记4.3

    C 43 43 读取目录下所有文件名称 1 包含头文件 96 span class token macro property span class token directive hash span span class token dir
  • 半小时内实现Esp32-Cam模型训练和图像识别

    Esp32 Cam图像识别 一 网页显示视频流1 Linux式例程2 MicroPython式例程步骤1 下载Thonny步骤2 烧录Esp32 Cam固件步骤3 运行相应代码 3 Arduino式例程步骤1 下载Arduino步骤2 安装
  • MANIFOLD 2-G开发 之 利用ROS话题编程实现UART1串口通讯

    目录 MANIFOLD 2 G开发笔记1 项目描述2 遇到的问题3 解决方案4 示例代码5 注意事项6 资源附件6 运行与调试 MANIFOLD 2 G开发笔记 本博客内容将记录MANIFOLD 2 G 开发过程中遇到的问题及解决方案 xf

随机推荐

  • ONOS源码笔记--机制

    app注册 private ApplicationId appId appId 61 coreService registerApplication 34 org onosproject fwd 34 注册应用 xff0c 一般在activ
  • git 本地分支与远程分支关联

    github上已经有master分支 和dev分支 在本地 git checkout b dev 新建并切换到本地dev分支 git pull origin dev 本地分支与远程分支相关联 github上没有dev分支 git check
  • 做设计师还是程序员?一张图你就明白!

    平时大家相安无事 xff0c 可一旦项目滑了水 栽了坑 二重奏就开始没完没了的唱起来了 请看下图 xff1a 你的桌子是有什么 小编反手一摸 xff0c 还好小编的头发还再 你头发呢 xff1f 相信这里有很多学习java的朋友 xff0c
  • 【ROS】动态链接库(.so文件)的生成和调用

    ROS 动态链接库 xff08 so文件 xff09 的生成和使用 引言 xff11 生成so文件 xff12 调用so文件 xff13 运行结果结语 引言 由于项目有涉及到源代码是否交付的选项 xff0c 想着如果不交付源代码 xff0c
  • 用TortoiseGit删除git仓库中的文件/文件夹

    用TortoiseGit删除git仓库中的文件 文件夹 点击删除后出现弹框 xff0c 点击删除 删除后会显示移除一个文件 xff1b 想要还原可以在当前文件夹中右键选择TortoiseGit gt 还原 xff08 revert xff0
  • 02-Jetson Xavier NX 训练自己的yolov4-tiny模型并利用TensorRT完成部署(Python API)

    记录原因 xff1a 因前面完成了yolov4 tiny源码的部署 xff0c 可以跑到50FPS 但那个跑的是别人的模型 xff0c 可以识别80类 xff0c 但是在特定的情况下比如识别螺丝螺帽 xff0c 只需要两种 xff0c 在训
  • RPLIDAR在ROS下快速上手教程

    本教程由 臭皮匠机器人 原创 转载请注明出处 收到一个RPLidar后 xff0c 干的第一件事应该是先让雷达跑起来 xff0c 边做边学是最高效的 之前写了一篇在windows底下的 RPLIDAR十分钟极速入门教程 xff0c 今天将教
  • RPLIDAR的坐标系问题

    本教程由 臭皮匠机器人 原创 转载请注明出处 RPLIDAR自身的坐标系 RPLIDAR给出来的数据是角度和距离 xff0c 也就是极坐标系 转换成直角坐标系的话应该照转换公式计算 xff0c 假设r是距离 xff0c theta是角度 x
  • Makefile模板(取自vscode)

    文章目录 Makefile模板vscode插件 xff1a 单一目标编译多个目标 Makefile模板 vscode插件 xff1a 单一目标 最近在学习Makefile写法 xff0c 但是总觉得自己写的太烂了 xff0c 找到了vsco
  • 使用docker-compose配置mysql数据库并且配置用户密码

    下面要求环境 xff1a 一定要安装docker ce和docker compose才能进行下面步骤 linux找到你要放mysql的目录 创建一个docker compose yml 以下配置了外部数据卷 外部配置文件 外部初始化文件 x
  • 使用ONOS的REST API来下发流表

    1 启动ONOS后 xff0c 浏览器进入doc http 10 109 247 211 8181 onos v1 docs 2 找到Flow xff0c 并打开POST 3 可以直接在这个上面编辑flow stream里面模拟GET获得的
  • 形态学处理

    原文链接 xff1a https blog csdn net qq 40732350 article details 116718329 spm 61 1001 2014 3001 5506 形态学处理 0 前言1 腐蚀与膨胀1 1 结构元
  • leetcode用到的函数汇总

    reverse isalnum tolower
  • Keil MDK-ARM软件官网最新版本的下载方法

    我之前的几篇博客讲的都是关于Keil MDK5 ARM软件的一些配置方法 xff0c 但是我居然忘了说一下如何去下载这个软件了 xffe3 xffe3 xff5c xff5c xff0c 今天这篇博客就把这个小知识点补上 第一步 xff0c
  • 给Word文档中的公式自动编号的方法

    最近在做毕业设计 xff0c 然后需要翻译一篇英文文献 xff0c 我在翻译英文文献的时候 xff0c 需要对公式进行编号 xff0c 而且需要使编号显示在最右侧 xff0c 而公式居中 xff0c 像下图这样 xff1a 如果一个个手动添
  • PHP如何使用strrev()函数反转字符串?(代码示例)

    反转字符串是最基本的字符串操作之一 xff0c 在PHP中可以使用内置函数strrev 来实现字符串的反转 下面本篇文章就来带大家了解一下PHP strrev 函数怎么用 xff0c 希望对大家有所帮助 PHP strrev 函数 strr
  • 离线安装Linux包的方法--以imblearn为例

    包的 whl文件直接在https pypi org 上搜索下载就好 xff0c 注意要搜索全名scikit learn xff01 你搜sklearn是找不到合适的包的 如图 xff0c 选择第一个就好 xff1a 接着要匹配你的系统架构和
  • px4 EKF中Q、R阵设置的思考

    关于Q R的讨论 Q阵 xff0c 状态转移误差矩阵 xff0c 代表从Xt 1到Xt过程中 xff0c 状态转移和真实过程之间的误差 xff0c 具体其中变量可能是对状态转移有影响的变量 xff0c 比如在有一些场景下 xff0c 可能为
  • Ubuntu查看硬盘信息

    lsscsi包默认是不安装的 xff0c 可以使用以下命令安装lsscsi span class token function sudo span span class token function apt get span span cl
  • 在Python3环境中使用ROS的cv_bridge

    之前使用ROS的时候只用了C 43 43 xff0c 没有发现cv bridge这个坑 xff0c 最近增加了一个使用tensorflow2的节点 xff0c 为此使用Anaconda配置了一个只有Python3 7的环境 xff0c 运行