当前位置: 首页 > news >正文

ROS melodic 安装 python3 cv_bridge

有时候,我们需要处理这些兼容性问题。此处列举我的过程,以供参考

mkdir -p my_ws_py39/src
cd my_ws_py39
catkin_make_isolated
  -DPYTHON_EXECUTABLE=/usr/bin/python3 \
  -DPYTHON_INCLUDE_DIR=/usr/include/python3.8 \
  -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.8.so

catkin_make_isolated allows per-package customization,和常见的 catkin_make 在这里区别不大。很多教程都推荐加上 --install,我这里没有,因为失败了,原因在下面。

其中,三个 命令行标识需要更改为你自己的环境路径,你可以通过

python3 -c "import sysconfig; print(sysconfig.get_path('include'))"
python3 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR'))"

来找到后两个。至于第一个,因为我在 miniconda下,可以通过指令

conda env list

查看。若是 linux,可以使用指令:

which python

显示当前 激活的(actived) python环境。在编译成功后,刷新当前环境,执行指令

source my_ws_py39/devel_ioslated/setup.bash

注意路径。此处我处于 ~路径下。

然后,将 vision_opencv-melodic.zip 文件夹放在 my_ws_py39/src目录下,并解压。此处更通用的做法是通过 git 指令进行 clone。我不想花时间在 git 配置上,直接以 zip的形式下载。

再重新走一遍 上述的 catkin_make_isolated指令,带上必要的命令行选项。

若成功,进行测试。

rospack find cv_bridge

查看文件路径。

第二份测试方式,先在一个终端中执行 roscore,启动 rosmaster。再在另一个终端中运行下述脚本,保证它能够运行在 ros 网络中。记得 通过指令 

chmod +x test_cv_bridge.py

 给脚本权限。此处,我假设脚本名为 test_cv_bridge.py

#!/usr/bin/env python
import rospy
from cv_bridge import CvBridge
import cv2

if __name__ == '__main__':
    rospy.init_node('cv_bridge_test')
    bridge = CvBridge()
    # 创建一个空白图像用于测试
    import numpy as np
    img = np.zeros((100,100,3), dtype=np.uint8)
    try:
        # 将 OpenCV 格式转换为 ROS 图像消息
        img_msg = bridge.cv2_to_imgmsg(img, encoding="bgr8")
        rospy.loginfo("cv_bridge 工作正常!")
    except Exception as e:
        rospy.logerr("cv_bridge 测试失败: %s", e)

Addition

--install失败的原因。

这里是log,方便查看:

error: option --install-layout not recognized
CMake Error at catkin_generated/safe_execute_install.cmake:4 (message):
execute_process(.../catkin_generated/python_distutils_install.sh)
returned error code

查了资料,因为 cv_bridgesetup.py(或 CMakeLists.txt)中的 --install-layout 选项在 Python 3 下不被识别。

为什么分两次编译

第一次编译是为了 创建这个工作空间,然后通过 source 指令刷新该工作空间。这样,后面的编译操作,都会找到该工作空间中的信息,也即,它会使用python3。

第二次编译则是为了编译 cv_bridge。即我们真正的目的。

所以第一次编译是 必要的 preprocess,预处理。

相关文章:

  • 线程和协程的区别了解
  • C++ Reference:解锁编程新姿势
  • Flutter TextField 从入门到精通:掌握输入框的完整指南
  • 3月22日星期六今日早报简报微语报早读
  • 四层板入门-stm32C8T6最小系统板
  • 2024 浅浅总结
  • Java学习总结-泛型
  • SpringMVC初始化原理剖析和源码跟踪
  • RTD2525BE《HDMI转EDP,DP转EDP》显示器芯片
  • 笔记:代码随想录算法训练营day59:110.字符串接龙 、105.有向图的完全可达性、106.岛屿的周长
  • linux中如何修改文件的权限和拥有者所属组
  • Web纯前端实现在线打开编辑保存PPT幻灯片
  • 第四章:ESP32零基础教学 - 4.2继电器、舵机与L298N电机
  • web客户端存储,IndexDB相关讲解
  • 【实战指南】用MongoDB存储文档和图片等大文件(Java实现)
  • 破解内存瓶颈:如何通过内存池优化资源利用
  • 【算法day18】有效的括号——给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。
  • 【第14届蓝桥杯C/C++B组省赛】01串的熵
  • PCA Jittering 图像增强
  • 【通过Groovy去热修复线上逻辑】1.执行线上数据修复 2.写工具
  • 银川市长信箱被指乱回复:问诗词大会、答工程欠款,官方称工作失误
  • 清华成立人工智能医院,将构建“AI+医疗+教育+科研”闭环
  • 106岁东江纵队老战士、四川省侨联名誉主席邱林逝世
  • 国防部:菲挑衅滋事违背地区国家共同利益
  • 央行副行长陆磊:国际化程度有效提升是上海国际金融中心建设的一个主要方向
  • 中方警告韩国公司不要向美军工企业出口含中国稀土矿物产品?外交部回应