当前位置: 首页 > 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 cv2if __name__ == '__main__':rospy.init_node('cv_bridge_test')bridge = CvBridge()# 创建一个空白图像用于测试import numpy as npimg = 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

我实际执行的语句

# 系统级的安装
sudo apt-get install ros-melodic-cv-bridge ros-melodic-image-geometry
sudo apt-get install python3-dev# 虚拟环境中的安装
pip install rospkg catkin_pkg# 实际使用的编译指令
catkin_make_isolated   -DPYTHON_EXECUTABLE=/home/ncut/miniconda3/envs/tf/bin/python3.9   -DPYTHON_INCLUDE_DIR=/home/ncut/miniconda3/envs/tf/include/python3.9
source devel_isolated/setup.bash# 将 melodic 版本的package放入 /src目录下后执行
catkin_make_isolated   -DPYTHON_EXECUTABLE=/home/ncut/miniconda3/envs/tf/bin/python3.9   -DPYTHON_INCLUDE_DIR=/home/ncut/miniconda3/envs/tf/include/python3.9
source devel_isolated/setup.bash#记得在 编译后执行 source 刷新# 以下信息是另一个工作空间示例,使用 catkin_make
mkdir -p ws_py39/src
cd ws_py39/
catkin_make  -DPYTHON_EXECUTABLE=/home/ncut/miniconda3/envs/tf/bin/python3.9 -DPYTHON_INCLUDE_DIR=/home/ncut/miniconda3/envs/tf/include/python3.9 -DPYTHON_LIBRARY=/home/ncut/miniconda3/envs/tf/lib/libpython3.9.sosource devel/setup.bash 
cd src/
catkin_create_pkg graduation std_msgs roscpp rospy  
cd ../catkin_make  -DPYTHON_EXECUTABLE=/home/ncut/miniconda3/envs/tf/bin/python3.9 -DPYTHON_INCLUDE_DIR=/home/ncut/miniconda3/envs/tf/include/python3.9 -DPYTHON_LIBRARY=/home/ncut/miniconda3/envs/tf/lib/libpython3.9.so

--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.mrgr.cn/news/95528.html

相关文章:

  • JVM垃圾回收笔记01-垃圾回收算法
  • 【Vue3入门1】02- Vue3的基本操作(上)
  • 第16届蓝桥杯单片机4T模拟赛三
  • Androidstudio实现引导页文字动画
  • 用 pytorch 从零开始创建大语言模型(六):对分类进行微调
  • C语言入门教程100讲(2)变量与常量
  • 1、正点原子ZYNQ最小系统--GPIO之MIO控制LED笔记
  • Spring6: 2 入门
  • 【和春笋一起学C++】文本文件I/O
  • 蓝桥杯高频考点——并查集(心血之作)
  • 《AI大模型趣味实战》第6集:基于大模型和RSS聚合打造个人新闻电台(桌面版)
  • Centos6配置yum源
  • 【ES】Elasticsearch学习
  • 最大异或对 The XOR Largest Pair
  • STM32--SPI通信讲解
  • 蓝桥杯算法精讲:二分查找实战与变种解析
  • day 14
  • C++继承机制:从基础到避坑详细解说
  • Arm Linux ceres库编译
  • 考研课程安排(自用)