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

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,预处理。


http://www.kler.cn/a/596631.html

相关文章:

  • Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)
  • SOFABoot-06-健康检查
  • Nginx 在 Ubuntu 上的安装与配置指南
  • 蓝桥杯2024B组
  • LeetCode 91 —— 91.解码方法
  • Vue3 基础语法指南:Setup 函数详解
  • 存储过程触发器习题整理1
  • 深度解读 C 语言运算符:编程运算的核心工具
  • 信息系统运行管理员教程3--信息系统设施运维
  • 不做颠覆者,甘为连接器,在技术叠层中培育智能新物种
  • 更改 vscode ! + table 默认生成的 html 初始化模板
  • Java对象的hashcode
  • Fourier-Lerobot——把斯坦福人形动作策略iDP3封装进了Lerobot(含我司七月人形研发落地实践)
  • 基于javaweb的SSM+Maven电脑公司财务管理系统设计与实现(源码+文档+部署讲解)
  • Java的流程控制
  • 再学:delegateCall使用及合约升级
  • 4小时速通shell外加100例
  • Linux笔记---文件系统软件部分
  • 构音障碍(Dysarthria)研究全景总结(1996–2024)
  • 在Windows和Linux系统上的Docker环境中使用的镜像是否相同